stimulsoft-forms
Version:
Stimulsoft PDF Forms
664 lines • 85.7 kB
JavaScript
import { Injectable } from "@angular/core";
import { StiTextBoxComponent } from "../components/sti-text-box/sti-text-box.component";
import { StiNumberBoxComponent } from "../components/sti-number-box/sti-number-box.component";
import { StiComboBoxComponent } from "../components/sti-combo-box/sti-combo-box.component";
import { StiListBoxComponent } from "../components/sti-list-box/sti-list-box.component";
import { StiSingleSelectionComponent } from "../components/sti-single-selection/sti-single-selection.component";
import { StiMultipleSelectionComponent } from "../components/sti-multiple-selection/sti-multiple-selection.component";
import { StiCheckBoxComponent } from "../components/sti-check-box/sti-check-box.component";
import { StiLineComponent } from "../components/sti-line/sti-line.component";
import { StiSignatureComponent } from "../components/sti-signature/sti-signature.component";
import { StiDateTimeBoxComponent } from "../components/sti-date-time-box/sti-date-time-box.component";
import { StiTableComponent } from "../components/sti-table/sti-table.component";
import { StiImageComponent } from "../components/sti-image/sti-image.component";
import { StiButtonComponent } from "../components/sti-button/sti-button.component";
import { StiBarcodeComponent } from "../components/sti-barcode/sti-barcode.component";
import { StiTextComponent } from "../components/sti-text/sti-text.component";
import { StiLabelComponent } from "../components/sti-label/sti-label.component";
import { Subject } from "rxjs";
import { StiDraggableService } from "./sti-draggable.service";
import { StiBarcodeElement } from "../elements/StiBarcodeElement";
import { StiButtonElement } from "../elements/StiButtonElement";
import { StiCheckBoxElement } from "../elements/StiCheckBoxElement";
import { StiComboBoxElement } from "../elements/StiComboBoxElement";
import { StiDateTimeBoxElement } from "../elements/StiDateTimeBoxElement";
import { StiImageElement } from "../elements/StiImageElement";
import { StiLabelElement } from "../elements/StiLabelElement";
import StiLineElement from "../elements/StiLineElement";
import { StiListBoxElement } from "../elements/StiListBoxElement";
import { StiMultipleSelectionElement } from "../elements/StiMultipleSelectionElement";
import { StiNumberBoxElement } from "../elements/StiNumberBoxElement";
import { StiPanelElement } from "../elements/StiPanelElement";
import { StiSignatureElement } from "../elements/StiSignatureElement";
import { StiSingleSelectionElement } from "../elements/StiSingleSelectionElement";
import { StiTableElement } from "../elements/StiTableElement";
import { StiTextBoxElement } from "../elements/StiTextBoxElement";
import { StiTextElement } from "../elements/StiTextElement";
import { StiAddressComponent } from "../components/sti-address/sti-address.component";
import { StiAddressElement } from "../elements/StiAddressElement";
import { StiPDFSignatureComponent } from "../components/sti-pdf-signature/sti-pdf-signature.component";
import { StiPDFSignatureElement } from "../elements/StiPDFSignatureElement";
import { StiPanelComponent } from "../components/sti-components-holder.component";
import * as i0 from "@angular/core";
import * as i1 from "./mouse.service";
import * as i2 from "./sti-draggable.service";
import * as i3 from "./model.service";
import * as i4 from "./sti-localization.service";
export class StiToolboxService {
isEnabled(element) {
if (this.unusedElements?.find((item) => item == element.id) || !this.isEnabledFromSettings(element)) {
return false;
}
else {
return true;
}
}
isEnabledFromSettings(element) {
return this.model.getBooleanSetting(this.idToCamelCase(element?.id)) ?? true;
}
getToolboxId(type) {
if (type == "TextElement" || type == "Text") {
return "text";
}
else if (type == "Text_BoxElement" || type == "TextBox") {
return "textbox";
}
else if (type == "TableElement" || type == "Table") {
return "table";
}
else if (type == "Single_SelectionElement" || type == "SingleSelection") {
return "singleSelection";
}
else if (type == "SignatureElement" || type == "Signature") {
return "signature";
}
else if (type == "PDFSignatureElement" || type == "PDFSignature") {
return "PDFsignature";
}
else if (type == "PanelElement" || type == "Panel") {
return "panel";
}
else if (type == "Number_BoxElement" || type == "NumberBox") {
return "numberbox";
}
else if (type == "Multiple_SelectionElement" || type == "MultipleSelection") {
return "multipleSelection";
}
else if (type == "List_BoxElement" || type == "ListBox") {
return "listbox";
}
else if (type == "LineElement" || type == "Line") {
return "line";
}
else if (type == "LabelElement" || type == "Label") {
return "label";
}
else if (type == "ImageElement" || type == "Image") {
return "image";
}
else if (type == "DateTime_BoxElement" || type == "DateTimeBox") {
return "dateTime";
}
else if (type == "Combo_BoxElement" || type == "ComboBox") {
return "combobox";
}
else if (type == "Check_BoxElement" || type == "CheckBox") {
return "checkbox";
}
else if (type == "ButtonElement" || type == "Button") {
return "button";
}
else if (type == "BarCodeElement" || type == "BarCode") {
return "barcode";
}
else if (type == "AddressElement" || type == "Address") {
return "address";
}
}
idToCamelCase(id) {
switch (id) {
case "textbox":
return "showTextBox";
case "numberbox":
return "showNumberBox";
case "combobox":
return "showComboBox";
case "listbox":
return "showListBox";
case "singleSelection":
return "showSingleSelection";
case "multipleSelection":
return "showMultipleSelection";
case "checkbox":
return "showCheckBox";
case "signature":
return "showSignature";
/* case "PDFsignature":
return "showPDFSignature"; */
case "dateTime":
return "showDateTimeBox";
case "table":
return "showTable";
case "button":
return "showButton";
case "barcode":
return "showBarCode";
case "address":
return "showAddress";
case "label":
return "showLabel";
case "text":
return "showText";
case "image":
return "showImage";
case "line":
return "showLine";
case "panel":
return "showPanel";
}
}
isGroupEnabled(group) {
if (group.caption == "Input" ||
group.caption == "Selection" ||
group.caption == "Other" ||
group.caption == "Divider") {
if (group.caption == "Input") {
if (!this.unusedElements?.find((item) => item == "textbox") ||
!this.unusedElements?.find((item) => item == "numberbox") ||
!this.unusedElements?.find((item) => item == "combobox") ||
!this.unusedElements?.find((item) => item == "dateTime")) {
return true;
}
else {
return false;
}
}
else if (group.caption == "Selection") {
if (!this.unusedElements?.find((item) => item == "singleSelection") ||
!this.unusedElements?.find((item) => item == "multipleSelection") ||
!this.unusedElements?.find((item) => item == "listbox") ||
!this.unusedElements?.find((item) => item == "checkbox")) {
return true;
}
else {
return false;
}
}
else if (group.caption == "Other") {
if (!this.unusedElements?.find((item) => item == "signature") ||
!this.unusedElements?.find((item) => item == "PDFsignature") ||
!this.unusedElements?.find((item) => item == "barcode") ||
!this.unusedElements?.find((item) => item == "address") ||
!this.unusedElements?.find((item) => item == "line")) {
return true;
}
else {
return false;
}
}
}
else {
return true;
}
}
isInsertInlineElementsDividerEnabled(element) {
if (element.caption == "Divider") {
if (!this.unusedElements?.find((item) => item == "textbox") ||
!this.unusedElements?.find((item) => item == "numberbox") ||
!this.unusedElements?.find((item) => item == "combobox") ||
!this.unusedElements?.find((item) => item == "dateTime") ||
!this.unusedElements?.find((item) => item == "singleSelection") ||
!this.unusedElements?.find((item) => item == "multipleSelection") ||
!this.unusedElements?.find((item) => item == "listbox") ||
!this.unusedElements?.find((item) => item == "checkbox") ||
!this.unusedElements?.find((item) => item == "signature") ||
!this.unusedElements?.find((item) => item == "PDFsignature") ||
!this.unusedElements?.find((item) => item == "barcode") ||
!this.unusedElements?.find((item) => item == "address") ||
!this.unusedElements?.find((item) => item == "line")) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
isToolboxInlineElementsDividerEnabled(element) {
if (element.caption == "Divider") {
if (!this.unusedElements?.find((item) => item == "textbox") ||
!this.unusedElements?.find((item) => item == "numberbox") ||
!this.unusedElements?.find((item) => item == "combobox") ||
!this.unusedElements?.find((item) => item == "dateTime") ||
!this.unusedElements?.find((item) => item == "singleSelection") ||
!this.unusedElements?.find((item) => item == "multipleSelection") ||
!this.unusedElements?.find((item) => item == "listbox") ||
!this.unusedElements?.find((item) => item == "checkbox") ||
!this.unusedElements?.find((item) => item == "signature") ||
!this.unusedElements?.find((item) => item == "PDFsignature") ||
!this.unusedElements?.find((item) => item == "barcode") ||
!this.unusedElements?.find((item) => item == "address") ||
!this.unusedElements?.find((item) => item == "table") ||
!this.unusedElements?.find((item) => item == "button")) {
return true;
}
else {
return false;
}
}
else {
return false;
}
}
isInsertOutlineElementsDividerEnabled() {
if (!this.unusedElements?.find((item) => item == "table") ||
!this.unusedElements?.find((item) => item == "button") ||
!this.unusedElements?.find((item) => item == "label") ||
!this.unusedElements?.find((item) => item == "text") ||
!this.unusedElements?.find((item) => item == "image") ||
!this.unusedElements?.find((item) => item == "panel")) {
return true;
}
else {
return false;
}
}
isToolboxOutlineElementsDividerEnabled() {
if (!this.unusedElements?.find((item) => item == "label") ||
!this.unusedElements?.find((item) => item == "text") ||
!this.unusedElements?.find((item) => item == "image") ||
!this.unusedElements?.find((item) => item == "line") ||
!this.unusedElements?.find((item) => item == "panel")) {
return true;
}
else {
return false;
}
}
haveEnabledComponents() {
let isEnabled = false;
for (let element of this.elements) {
if (element.enabled) {
isEnabled = true;
break;
}
}
return isEnabled;
}
constructor(mouseService, draggableService, model, loc) {
this.mouseService = mouseService;
this.draggableService = draggableService;
this.model = model;
this.loc = loc;
this.showGroupPreview = false;
this.elementsForRibbon = [
{
caption: "Input",
image: "images.Toolbox.StiTextBoxElement.png",
category: "PropertyMain",
},
{
caption: "Selection",
image: "images.Toolbox.StiSingleSelectionElement.png",
},
{
caption: "Others",
image: "images.Toolbox.StiSignatureElement.png",
category: "FormDesigner",
},
{ caption: "Divider" },
{
caption: "StiTable",
image: "images.Toolbox.StiTableElement.png",
id: "table",
component: StiTableComponent,
element: StiTableElement,
setForm: true
},
{
caption: "StiButton",
image: "images.Toolbox.StiButtonElement.png",
id: "button",
component: StiButtonComponent,
element: StiButtonElement,
},
{
caption: "StiLabelControl",
image: "images.Toolbox.StiLabelElement.png",
id: "label",
component: StiLabelComponent,
element: StiLabelElement,
category: "Dialogs",
},
{
caption: "StiText",
image: "images.Toolbox.StiRichTextElement.png",
id: "text",
component: StiTextComponent,
element: StiTextElement,
},
{
caption: "StiImage",
image: "images.Toolbox.StiImageElement.png",
id: "image",
component: StiImageComponent,
element: StiImageElement,
},
{
caption: "StiPanel",
image: "images.Toolbox.StiPanelElement.png",
id: "panel",
component: StiPanelComponent,
element: StiPanelElement,
},
];
this.inputGroup = [
{
caption: "StiTextBoxControl",
image: "images.Toolbox.StiTextBoxElement.png",
id: "textbox",
component: StiTextBoxComponent,
element: StiTextBoxElement,
category: "Dialogs",
},
{
caption: "StiNumberBox",
image: "images.Toolbox.StiNumberBoxElement.png",
id: "numberbox",
component: StiNumberBoxComponent,
element: StiNumberBoxElement,
},
{
caption: "StiComboBox",
image: "images.Toolbox.StiComboBoxElement.png",
id: "combobox",
component: StiComboBoxComponent,
element: StiComboBoxElement,
},
{
caption: "StiDateTimePickerControl",
image: "images.Toolbox.StiDateTimeBoxElement.png",
id: "dateTime",
component: StiDateTimeBoxComponent,
element: StiDateTimeBoxElement,
setForm: true,
category: "Dialogs",
},
];
this.selectionGroup = [
{
caption: "StiSingleSelection",
image: "images.Toolbox.StiSingleSelectionElement.png",
id: "singleSelection",
component: StiSingleSelectionComponent,
element: StiSingleSelectionElement,
},
{
caption: "StiMultipleSelection",
image: "images.Toolbox.StiMultipleSelectionElement.png",
id: "multipleSelection",
component: StiMultipleSelectionComponent,
element: StiMultipleSelectionElement,
},
{
caption: "StiListBox",
image: "images.Toolbox.StiListBoxElement.png",
id: "listbox",
component: StiListBoxComponent,
element: StiListBoxElement,
},
{
caption: "StiCheckBox",
image: "images.Toolbox.StiCheckBoxElement.png",
id: "checkbox",
component: StiCheckBoxComponent,
element: StiCheckBoxElement,
},
];
this.otherGroup = [
{
caption: "StiElectronicSignature",
image: "images.Toolbox.StiElectronicSignature.png",
id: "signature",
component: StiSignatureComponent,
element: StiSignatureElement,
},
{
caption: "StiPdfDigitalSignature",
image: "images.Toolbox.StiPdfDigitalSignature.png",
id: "PDFsignature",
component: StiPDFSignatureComponent,
element: StiPDFSignatureElement,
},
{
caption: "StiBarCode",
image: "images.Toolbox.StiBarCodeElement.png",
id: "barcode",
component: StiBarcodeComponent,
element: StiBarcodeElement,
},
{
caption: "Address",
image: "images.Toolbox.Address.png",
id: "address",
component: StiAddressComponent,
element: StiAddressElement,
category: "Report",
},
{
caption: "Line",
image: "images.Toolbox.StiLineElement.png",
id: "line",
component: StiLineComponent,
element: StiLineElement,
category: "Chart",
},
];
this.elements = [
{
caption: "StiTextBoxControl",
image: "images.Toolbox.StiTextBoxElement.png",
id: "textbox",
component: StiTextBoxComponent,
element: StiTextBoxElement,
enabled: true,
category: "Dialogs",
},
{
caption: "StiNumberBox",
image: "images.Toolbox.StiNumberBoxElement.png",
id: "numberbox",
component: StiNumberBoxComponent,
element: StiNumberBoxElement,
enabled: true,
},
{
caption: "StiComboBox",
image: "images.Toolbox.StiComboBoxElement.png",
id: "combobox",
component: StiComboBoxComponent,
element: StiComboBoxElement,
enabled: true,
},
{
caption: "StiListBox",
image: "images.Toolbox.StiListBoxElement.png",
id: "listbox",
component: StiListBoxComponent,
element: StiListBoxElement,
enabled: true,
},
{
caption: "StiSingleSelection",
image: "images.Toolbox.StiSingleSelectionElement.png",
id: "singleSelection",
component: StiSingleSelectionComponent,
element: StiSingleSelectionElement,
enabled: true,
},
{
caption: "StiMultipleSelection",
image: "images.Toolbox.StiMultipleSelectionElement.png",
id: "multipleSelection",
component: StiMultipleSelectionComponent,
element: StiMultipleSelectionElement,
enabled: true,
},
{
caption: "StiCheckBox",
image: "images.Toolbox.StiCheckBoxElement.png",
id: "checkbox",
component: StiCheckBoxComponent,
element: StiCheckBoxElement,
enabled: true,
},
{
caption: "StiElectronicSignature",
image: "images.Toolbox.StiElectronicSignature.png",
id: "signature",
component: StiSignatureComponent,
element: StiSignatureElement,
enabled: true,
},
{
caption: "StiPdfDigitalSignature",
image: "images.Toolbox.StiPdfDigitalSignature.png",
id: "PDFsignature",
component: StiPDFSignatureComponent,
element: StiPDFSignatureElement,
enabled: true,
},
{
caption: "StiDateTimePickerControl",
image: "images.Toolbox.StiDateTimeBoxElement.png",
id: "dateTime",
component: StiDateTimeBoxComponent,
element: StiDateTimeBoxElement,
enabled: true,
category: "Dialogs",
},
{
caption: "StiTable",
image: "images.Toolbox.StiTableElement.png",
id: "table",
component: StiTableComponent,
element: StiTableElement,
enabled: true,
setForm: true
},
{
caption: "StiButton",
image: "images.Toolbox.StiButtonElement.png",
id: "button",
component: StiButtonComponent,
element: StiButtonElement,
enabled: true,
},
{
caption: "StiBarCode",
image: "images.Toolbox.StiBarCodeElement.png",
id: "barcode",
component: StiBarcodeComponent,
element: StiBarcodeElement,
enabled: true,
},
{
caption: "Address",
image: "images.Toolbox.Address.png",
id: "address",
component: StiAddressComponent,
element: StiAddressElement,
enabled: true,
category: "Report",
},
{ caption: "Divider" },
{
caption: "StiLabelControl",
image: "images.Toolbox.StiLabelElement.png",
id: "label",
component: StiLabelComponent,
element: StiLabelElement,
enabled: true,
category: "Dialogs",
},
{
caption: "StiText",
image: "images.Toolbox.StiRichTextElement.png",
id: "text",
component: StiTextComponent,
element: StiTextElement,
enabled: true,
},
{
caption: "StiImage",
image: "images.Toolbox.StiImageElement.png",
id: "image",
component: StiImageComponent,
element: StiImageElement,
enabled: true,
},
{
caption: "Line",
image: "images.Toolbox.StiLineElement.png",
id: "line",
component: StiLineComponent,
element: StiLineElement,
enabled: true,
category: "Chart",
},
{
caption: "StiPanel",
image: "images.Toolbox.StiPanelElement.png",
id: "panel",
component: StiPanelComponent,
element: StiPanelElement,
enabled: true,
},
];
this.unusedElements = [];
this.subject = new Subject();
this.showToolbox = true;
mouseService.getDocumentMouseMove().subscribe((event) => {
this.onMouseMove(event);
});
mouseService.getDocumentMouseUp().subscribe(() => {
// this.mouseDownComponent = null;
});
}
getMessage() {
return this.subject.asObservable();
}
elementMouseDown(component, event) {
this.mouseDownComponent = component;
this.mouseDownX = event.clientX;
this.mouseDownY = event.clientY;
}
elementDoubleClick(component) {
this.mouseDownComponent = null;
let element = new component.element.element(component.element.setForm ? this.model.form : undefined);
this.model.form.settings.applySettings(element);
this.draggableService.addingByDoubleClick(element);
}
onMouseMove(event) {
if (this.mouseDownComponent &&
Math.max(Math.abs(this.mouseDownX - event.clientX), Math.abs(this.mouseDownY - event.clientY)) >
StiDraggableService.MOUSE_DELTA) {
let element = new this.mouseDownComponent.element.element(this.mouseDownComponent.element.setForm ? this.model.form : undefined);
this.model.form.settings.applySettings(element);
this.model.elementToUpdate = element;
this.draggableService.startDrag(event, element);
if (this.model.showGroupPreview) {
this.model.showGroupPreview = false;
}
this.mouseDownComponent = null;
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiToolboxService, deps: [{ token: i1.StiMouseService }, { token: i2.StiDraggableService }, { token: i3.StiModelService }, { token: i4.StiLocalizationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiToolboxService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StiToolboxService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.StiMouseService }, { type: i2.StiDraggableService }, { type: i3.StiModelService }, { type: i4.StiLocalizationService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLXRvb2xib3guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0aW11bHNvZnQtZm9ybXMvc3JjL2xpYi9zZXJ2aWNlcy9zdGktdG9vbGJveC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDOUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDaEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDdEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0Us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