cg@3565: "{ Encoding: utf8 }" cg@3565: ca@332: " tz@825: COPYRIGHT (c) 1997 by eXept Software AG ca@332: All Rights Reserved ca@332: ca@332: This software is furnished under a license and may be used ca@332: only in accordance with the terms of that license and with the ca@332: inclusion of the above copyright notice. This software may not ca@332: be provided or otherwise made available to, or used by, any ca@332: other person. No title to or ownership of the software is ca@332: hereby transferred. ca@332: " cg@1382: "{ Package: 'stx:libtool2' }" cg@1382: cg@3181: "{ NameSpace: Smalltalk }" cg@3181: ca@818: ResourceSpecEditor subclass:#DataSetBuilder tz@825: instanceVariableNames:'rowClass rowSuperClass columnView columns selectedColumnIndex cg@2549: modalOpened listOfSpecViews listOfItemsView editingSpecOnly cg@2549: acceptedColumns' cg@816: classVariableNames:'' ca@332: poolDictionaries:'' ca@332: category:'Interface-UIPainter' ca@332: ! ca@332: cg@1033: Array variableSubclass:#Row cg@1004: instanceVariableNames:'' cg@1004: classVariableNames:'' cg@1004: poolDictionaries:'' cg@1004: privateIn:DataSetBuilder cg@1004: ! cg@1004: ca@332: !DataSetBuilder class methodsFor:'documentation'! ca@332: ca@332: copyright ca@332: " tz@825: COPYRIGHT (c) 1997 by eXept Software AG ca@332: All Rights Reserved ca@332: ca@332: This software is furnished under a license and may be used ca@332: only in accordance with the terms of that license and with the ca@332: inclusion of the above copyright notice. This software may not ca@332: be provided or otherwise made available to, or used by, any ca@332: other person. No title to or ownership of the software is ca@332: hereby transferred. ca@332: " ca@332: ca@332: ca@332: ca@332: ca@332: ! ca@332: ca@332: documentation ca@332: " ca@332: create and modify or inspect dataset columns; used by UIPainter (DataSetColumnSpec) ca@332: ca@332: [see also:] ca@332: DataSetColumnSpec ca@332: DataSetSpec ca@332: DataSetView ca@332: DataSetColumn ca@332: ca@332: [author:] tz@545: Claus Atzkern, eXept Software AG ca@332: " ca@332: ca@332: ! ! ca@332: tz@825: !DataSetBuilder class methodsFor:'accessing'! cg@799: ca@818: resourceType ca@818: "get the type of resource of the method generated by the MenuEditor" ca@818: tz@825: ^#tableColumns tz@825: tz@825: tz@825: ! ! tz@825: tz@825: !DataSetBuilder class methodsFor:'aspects'! tz@825: tz@825: aspects tz@825: "get the aspects for the attributes of the table columns" tz@825: tz@825: ^#( cg@829: id cg@2166: activeHelpKey cg@2385: activeHelpKeyForLabel tz@825: label tz@825: canSelect tz@825: choices cg@1944: translatedChoices tz@825: editorType tz@825: formatString cg@2475: formatSelector tz@825: labelIsImage ca@1262: labelButtonType cg@829: translateLabel cg@1666: longStringCompression tz@825: size tz@825: type tz@825: width tz@825: minWidth cg@1216: usePreferredWidth ca@1452: isResizeable tz@825: height tz@825: menu cg@2816: menuFromApplication tz@825: foregroundSelector tz@825: backgroundSelector cg@1841: selectedForegroundSelector cg@1841: selectedBackgroundSelector tz@825: doubleClickedSelector ca@983: rowSeparatorSelector tz@825: selectSelector ca@1261: converterSelector cg@1009: showComboFieldSelector tz@825: printSelector tz@825: readSelector tz@825: writeSelector penk@1731: visibilitySelector tz@825: rendererType tz@825: showColSeparator ca@983: showSelectionHighLighted tz@825: showRowSeparator tz@825: backgroundColor tz@825: foregroundColor cg@1841: selectedBackgroundColor cg@1841: selectedForegroundColor tz@825: labelForegroundColor tz@825: labelBackgroundColor tz@825: labelFont tz@825: labelActionSelector tz@825: labelActionArgument tz@825: labelAlignment tz@825: columnAlignment werner@1822: minValue werner@1822: maxValue cg@2475: isSortable cg@2626: sortSelector cg@2789: sortBlockSelector tz@825: ) tz@825: cg@2816: "Modified: / 25-10-2010 / 10:31:51 / cg" cg@799: ! ! cg@799: tz@528: !DataSetBuilder class methodsFor:'help specs'! tz@528: tz@528: helpSpec ca@818: "This resource specification was automatically generated ca@818: by the UIHelpTool of ST/X." ca@818: ca@818: "Do not manually edit this!! If it is corrupted, ca@818: the UIHelpTool may not be able to read the specification." tz@528: tz@528: " ca@818: UIHelpTool openOnClass:DataSetBuilder tz@528: " tz@528: ca@818: ca@818: penk@1731: ^ super helpSpec addPairsFrom:#( tz@528: tz@550: #addColumn cg@2903: 'Adds a new colum' tz@550: cg@2262: #addNonSelectableColumn cg@2903: 'Adds a new non-selectable column' cg@2262: tz@597: #basicsEditor cg@2903: 'Default widget type or a selector returning an instance of a user defined widget opened in the cell' tz@528: tz@597: #basicsFont cg@2903: 'Sets the font of the labeled text' tz@528: tz@597: #basicsJustification cg@2903: 'Aligns the label to the left, right, or center in the cell' tz@528: cg@1064: #basicsJustificationEditor cg@2903: 'Aligns the column editor to the left, right, or center in the cell' cg@1064: tz@597: #basicsLabel cg@2903: 'The label of the column, a String or an array of Strings' cg@1004: cg@1004: #basicsLabelId cg@2903: 'Unique identifier of the column (optional)' tz@597: tz@597: #basicsLabelIsImage cg@2903: 'Label is actually the selector of a message providing an image-label' cg@1004: cg@1004: #basicsLabelTranslate cg@2903: 'Translate the label via the resource mechanism to a national language string' tz@528: tz@597: #basicsRenderer cg@2903: 'Specifies displaying cell as Text, CheckToggle, ComboBox, ComboList or as a RowSelector' tz@528: cg@829: #browseRowClass cg@829: 'Open a browser on the row class' cg@829: tz@597: #colorsBackgroundCellColor cg@2903: 'The background color of the cell' tz@597: tz@597: #colorsBackgroundLabelColor cg@2903: 'The background color of the label' tz@528: tz@597: #colorsBackgroundSelector cg@2903: 'Optional selector returning the background color for the cell (with optional row/column args)' tz@528: tz@597: #colorsForegroundCellColor cg@2903: 'The foreground color of the cell (with optional row/column args)' tz@597: tz@597: #colorsForegroundLabelColor cg@2903: 'The foreground color of the label' tz@528: tz@597: #colorsForegroundSelector cg@2903: 'Optional selector returning the foreground color for a cell' tz@528: ca@1261: #converterSelector cg@2903: 'Selector returning a TypeConverter on the model the argument or nil' cg@829: cg@829: #fileLoad cg@829: 'Specify class/selector and edit that column description' cg@829: ca@1261: #fileNew ca@1261: 'Discard changes and continue with a new, empty column description' ca@1261: cg@829: #fileSave cg@829: 'Install the column description' cg@829: cg@829: #fileSaveAs cg@829: 'Specify class/selector and install the column description' cg@829: werner@1824: #formatFormatSelector cg@2903: 'Selector sent to the row to get the format string' werner@1824: tz@597: #formatInputType cg@2903: 'A type converter symbol used by the input field' tz@528: tz@597: #formatMaxSize cg@2903: 'Maximum size of the string which can be typed in. 0 or nil means unlimited' tz@528: tz@597: #formatTextFormat cg@3390: 'Format string specifying the output format of the cell text.\For numbers: printf-format - for example: %5.4f gives 0.0000\For time&date: time-formatting; for example: %(day)-%(monthName) %h:%m:%s\\More info in the online doc.' tz@597: tz@597: #frameColumnWidth cg@2903: 'Width (fixed or relative) of a column (optional)' tz@528: tz@597: #frameMinWidth cg@2903: 'Minimum width of the column (optional)' tz@528: tz@597: #frameRowHeight cg@3047: 'Height of the row (0 -> ask some rows; -1 / #fontHeight -> font; #heightOfFirstRow -> ask first row; >0 -> constant)' tz@597: tz@597: #frameShowColumnSeparator cg@2903: 'Turns on/off displaying column separators' tz@528: tz@597: #frameShowRowSeparator cg@2903: 'Turns on/off displaying row separators' tz@528: ca@983: #frameShowRowSeparatorSelector cg@2903: 'Message selector to test if the bottom separator is shown' ca@983: cg@829: #generateCode cg@2903: 'Generate code and install in the selected class/selector' cg@829: penk@1580: #isResizable cg@2903: 'Column can be resized by user' penk@1580: cg@2625: #isSortable cg@2903: 'Adds indicator to allow user to sort rows based on this column' cg@2625: cg@829: #pickColumns cg@2903: 'Select an open view and readOut the column specification from it' cg@829: cg@1841: #selectedBackgroundCellColor cg@2903: 'Optional background color of a selected cell' cg@1841: cg@1841: #selectedBackgroundCellColorSelector cg@2903: 'Optional selector returning the background color for a selected cell' cg@1841: cg@1841: #selectedForegroundCellColor cg@2903: 'Optional foreground color of a selected cell' cg@1841: cg@1841: #selectedForegroundCellColorSelector cg@2903: 'Optional selector returning the foreground color for a selected cell' cg@1841: tz@597: #selectionCellClickSelector cg@1753: 'Message sent if cell is about to be selected - return boolean to en/disable editing' tz@528: tz@597: #selectionCellDoubleClickSelector cg@1753: 'Message sent if cell is double clicked' tz@528: tz@597: #selectionCellSelector cg@2903: 'Name of the message sent to the row to validate a selection' tz@528: tz@597: #selectionIsSelectable cg@2903: 'Turns on/off selection behavior of a column' tz@597: tz@597: #selectionLabelClickSelector cg@1754: 'Message sent if a columns label was clicked on' tz@528: tz@597: #selectionLabelSelectorArgument cg@2903: 'An optional argument passed with the message above' tz@528: cg@1009: #showComboFieldSelector cg@2903: 'Selector which returns true if the editor on the ComboBox/List has an input field' cg@1009: ca@983: #showSelectionHighLighted cg@2903: 'Show selected cell highligthened (change fg/bg color)' ca@983: cg@2789: #sortBlockSelector cg@2903: 'Sent to the row to retrieve a selector which is sent to the application to provide a block for sorting' cg@2789: cg@2625: #sortSelector cg@2903: 'Sent to the row to extract the value used for sorting. If a block is returned, that one is used as sortBlock' cg@2625: penk@1580: #usePreferredWidth cg@2903: 'Compute width from first 10 row items' penk@1580: cg@1944: #valuesChoicesSelector cg@2903: 'Selector to get a collection of choices for a cell having a ComboBox or a ComboList widget' tz@528: cg@2816: #valuesMenuFromApplication cg@2816: 'Fetch the menu from the application (instead of the row)' cg@2816: tz@597: #valuesMenuSelector cg@2903: 'Selector to retrieve the middle button menu' tz@597: tz@597: #valuesPrintSelector cg@2903: 'Selector used to register images on a DSVColumnView (the arg). For more detailed info see #register... methods in DSVColumnView' tz@528: tz@597: #valuesReadSelector cg@2903: 'Selector returning the label to be displayed (string, bitmap or a collection)' penk@1731: penk@1731: #valuesVisibilitySelector cg@2903: 'Boolean message selector controlling the columns visibility' tz@528: tz@597: #valuesWriteSelector cg@2903: 'Selector used to set the value derived from the editor' tz@528: cg@1944: #valuesXChoicesSelector cg@2903: 'Selector to get a collection of translated choices for a cell having a ComboBox or a ComboList widget' cg@1944: cg@3515: cg@3515: #fileSaveMethod cg@3515: 'Save Column Description as Method' cg@3515: cg@3515: #fileSaveAsMethod cg@3515: 'Save Column Description as Method (ask for Class/Selector)' cg@3515: cg@3515: #editCut cg@3515: 'Cut Column' cg@3515: cg@3515: #editCopy cg@3515: 'Copy Column' cg@3515: cg@3515: #editPaste cg@3515: 'Paste Column' cg@3515: tz@528: ) cg@2840: cg@2903: "Modified: / 09-08-2012 / 09:36:06 / cg" tz@528: ! ! tz@528: tz@881: !DataSetBuilder class methodsFor:'image specs'! tz@881: tz@881: newColumnIcon tz@881: "This resource specification was automatically generated tz@881: by the ImageEditor of ST/X." tz@881: tz@881: "Do not manually edit this!! If it is corrupted, tz@881: the ImageEditor may not be able to read the specification." tz@881: tz@881: " tz@881: self newColumnIcon inspect tz@881: ImageEditor openOnClass:self andSelector:#newColumnIcon cg@2262: Icon flushCachedIcons tz@881: " tz@881: tz@881: tz@881: tz@881: ^Icon cg@2262: constantNamed:#'DataSetBuilder class newColumnIcon' cg@2262: ifAbsentPut:[(Depth2Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@2262: U@@@@EQTUUUXUEQ***1TUF (+EQTX*H,UEQ"("1TUF (+EQTZ**,UEQ"("1TUFJ"KEQTX*H,UEQ HB1TUF**+EQTZ**,UEQ"H"1TUF@ KEQTX"@,UEQ"H"1T sv@3114: UF**+EQTZ**,UER???1TU@@@@EPb') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127]; mask:((ImageMask new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@') ; yourself); yourself] cg@2262: ! cg@2262: cg@2262: newColumnNonSelectableIcon cg@2262: "This resource specification was automatically generated cg@2262: by the ImageEditor of ST/X." cg@2262: cg@2262: "Do not manually edit this!! If it is corrupted, cg@2262: the ImageEditor may not be able to read the specification." cg@2262: cg@2262: " cg@2262: self newColumnNonSelectableIcon inspect cg@2262: ImageEditor openOnClass:self andSelector:#newColumnNonSelectableIcon cg@2262: Icon flushCachedIcons cg@2262: " cg@2262: cg@2262: cg@2262: cg@2262: ^Icon cg@2262: constantNamed:#'DataSetBuilder class newColumnNonSelectableIcon' cg@2262: ifAbsentPut:[(Depth2Image new) width: 19; height: 22; photometric:(#palette); bitsPerSample:(#[2]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:' cg@2262: U@@@@EQTUUUXUEQ***1TUF**+EQTX*(,UEQ"*"1TUFB(KEQTZJ",UEQ(HJ1TUF("+EQTZ J,UEQ*@*1TUF("+EQTZBB,UEQ(*J1TUFB(KEQTX*(,UEQ"*"1T sv@3114: UF**+EQTZ**,UER???1TU@@@@EPb') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127]; mask:((ImageMask new) width: 19; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@G?<@') ; yourself); yourself] ca@1452: ! ! tz@881: tz@528: !DataSetBuilder class methodsFor:'interface specs'! ca@332: ca@332: basicsEditSpec ca@817: "This resource specification was automatically generated ca@817: by the UIPainter of ST/X." ca@332: ca@817: "Do not manually edit this!! If it is corrupted, ca@817: the UIPainter may not be able to read the specification." ca@332: ca@332: " ca@332: UIPainter new openOnClass:DataSetBuilder andSelector:#basicsEditSpec ca@332: DataSetBuilder new openInterface:#basicsEditSpec ca@332: " ca@332: ca@332: ca@332: cg@1156: ^ cg@3247: #(FullSpec cg@3247: name: basicsEditSpec cg@3247: window: cg@3247: (WindowSpec cg@3247: label: 'DataSet Basic' cg@3247: name: 'DataSet Basic' cg@3247: min: (Point 10 10) cg@3247: bounds: (Rectangle 0 0 389 473) cg@3247: ) cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (VerticalPanelViewSpec cg@3247: name: 'VerticalPanel1' cg@3247: layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) cg@3247: horizontalLayout: fit cg@3247: verticalLayout: top cg@3247: horizontalSpace: 3 cg@3247: verticalSpace: 3 cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (FramedBoxSpec cg@3247: label: 'Header:' cg@3247: name: 'headerFrame' cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'ID:' cg@3247: name: 'idLabel' cg@3247: layout: (AlignmentOrigin 94 0 14 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'idField' cg@3247: layout: (LayoutFrame 97 0 0 0 2 1.0 22 0) cg@3247: activeHelpKey: basicsLabelId cg@3247: tabable: true cg@3247: model: id cg@3247: group: inputGroup cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Label:' cg@3247: name: 'label1' cg@3247: layout: (AlignmentOrigin 94 0 39 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'labelField' cg@3247: layout: (LayoutFrame 97 0 28 0 2 1.0 50 0) cg@3247: activeHelpKey: basicsLabel cg@3247: tabable: true cg@3247: model: label cg@3247: group: inputGroup cg@3247: type: smalltalkObject cg@3247: immediateAccept: false cg@3247: acceptOnLeave: false cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Font:' cg@3247: name: 'LabelFont' cg@3247: layout: (AlignmentOrigin 94 0 68 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: left cg@3247: ) cg@3247: (FontMenuSpec cg@3247: name: 'fontMenu' cg@3247: layout: (LayoutFrame 97 0 56 0 0 1.0 78 0) cg@3247: activeHelpKey: labelFont cg@3247: model: style cg@3247: allowSymbolicFonts: true cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Type:' cg@3247: name: 'Type' cg@3247: layout: (AlignmentOrigin 52 0 100 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (ComboListSpec cg@3247: name: 'labelButtonType' cg@3247: layout: (LayoutFrame 57 0 91 0 158 0 111 0) cg@3247: tabable: true cg@3247: model: labelButtonType cg@3247: comboList: cg@3247: (Array cg@3247: None Button cg@3247: Group cg@3247: ) cg@3247: useIndex: false cg@3247: hidePullDownMenuButton: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Align:' cg@3247: name: 'JustificationLabel' cg@3247: layout: (AlignmentOrigin 243 0 100 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (PopUpListSpec cg@3247: label: 'Alignment' cg@3247: name: 'Alignment' cg@3247: layout: (LayoutFrame 248 0 91 0 2 1.0 113 0) cg@3247: activeHelpKey: basicsJustification cg@3247: translateLabel: true cg@3247: tabable: true cg@3247: model: labelAlignment cg@3247: menu: cg@3247: (Array cg@3247: left right cg@3247: center cg@3247: ) cg@3247: ) cg@3247: (CheckBoxSpec cg@3247: label: 'Label Is Image' cg@3247: name: 'labelIsImage' cg@3247: layout: (LayoutOrigin -3 0 120 0) cg@3247: activeHelpKey: basicsLabelIsImage cg@3247: tabable: true cg@3247: model: labelIsImage cg@3247: translateLabel: true cg@3247: ) cg@3247: (CheckBoxSpec cg@3247: label: 'Translate Label' cg@3247: name: 'CheckBox2' cg@3247: layout: (LayoutOrigin 200 0 120 0) cg@3247: activeHelpKey: basicsLabelTranslate cg@3247: tabable: true cg@3247: model: translateLabel cg@3247: translateLabel: true cg@2475: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: extent: (Point 389 190) cg@3247: ) cg@3247: (FramedBoxSpec cg@3247: label: 'Cell Type:' cg@3247: name: 'typesFrame' cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Renderer:' cg@3247: name: 'rendererLabel' cg@3247: layout: (AlignmentOrigin 94 0 16 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (ComboListSpec cg@3247: name: 'rendererField' cg@3247: layout: (LayoutFrame 97 0 5 0 2 1.0 27 0) cg@3247: activeHelpKey: basicsRenderer cg@3247: tabable: true cg@3247: model: rendererType cg@3247: comboList: rendererTypeList cg@3247: useIndex: false cg@3247: hidePullDownMenuButton: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Editor:' cg@3247: name: 'editorLabel' cg@3247: layout: (AlignmentOrigin 94 0 42 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (ComboBoxSpec cg@3247: name: 'editorField' cg@3247: layout: (LayoutFrame 97 0 31 0 2 1.0 53 0) cg@3247: activeHelpKey: basicsEditor cg@3247: tabable: true cg@3247: model: editorType cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: comboList: editorTypeList cg@3247: useIndex: false cg@3247: isFilenameBox: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Align:' cg@3247: name: 'JustificationC' cg@3247: layout: (LayoutFrame -194 1 58 0 -114 1 79 0) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@2475: ) cg@3247: (PopUpListSpec cg@3247: label: 'Alignment' cg@3247: name: 'AlignmentC' cg@3247: layout: (LayoutFrame -115 1 58 0 2 1.0 80 0) cg@3247: activeHelpKey: basicsJustificationEditor cg@3247: translateLabel: true cg@3247: tabable: true cg@3247: model: columnAlignment cg@3247: menu: cg@3247: (Array cg@3247: left right cg@3247: center decimal cg@3247: decimalRight cg@3247: ) cg@3247: ) cg@3247: (CheckBoxSpec cg@3247: label: 'Compress Long Strings' cg@3247: name: 'LongStringCompressionCheckBox' cg@3247: layout: (LayoutFrame -3 0 58 0 188 0 79 0) cg@3247: activeHelpKey: basicsLabelTranslate cg@3247: tabable: true cg@3247: model: longStringCompression cg@3247: translateLabel: true cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: extent: (Point 389 120) cg@3247: ) cg@3247: (FramedBoxSpec cg@3247: label: 'Active Help:' cg@3247: name: 'activeHelpFrame' cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Key:' cg@3247: name: 'Label1' cg@3247: layout: (AlignmentOrigin 94 0 14 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@2475: ) cg@3247: (InputFieldSpec cg@3247: name: 'EntryField1' cg@3247: layout: (LayoutFrame 97 0 0 0 2 1.0 22 0) cg@3247: activeHelpKey: basicsLabelId cg@3247: tabable: true cg@3247: model: activeHelpKey cg@3247: group: inputGroup cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Key for Label:' cg@3247: name: 'Label2' cg@3247: layout: (AlignmentOrigin 94 0 42 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'EntryField2' cg@3247: layout: (LayoutFrame 97 0 28 0 2 1.0 50 0) cg@3247: activeHelpKey: basicsLabelId cg@3247: tabable: true cg@3247: model: activeHelpKeyForLabel cg@3247: group: inputGroup cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: extent: (Point 389 95) cg@2166: ) cg@3247: ) cg@3247: cg@3247: ) cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) ca@391: ! ca@391: tz@408: colorsEditSpec tz@825: "This resource specification was automatically generated tz@825: by the UIPainter of ST/X." ca@332: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the UIPainter may not be able to read the specification." ca@332: ca@332: " tz@408: UIPainter new openOnClass:DataSetBuilder andSelector:#colorsEditSpec tz@408: DataSetBuilder new openInterface:#colorsEditSpec ca@332: " ca@332: ca@332: ca@332: cg@1156: ^ cg@3247: #(FullSpec cg@3247: name: colorsEditSpec cg@3247: window: cg@3247: (WindowSpec cg@3247: label: 'DataSet Misc' cg@3247: name: 'DataSet Misc' cg@3247: min: (Point 10 10) cg@3247: bounds: (Rectangle 0 0 369 451) cg@3247: ) cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (FramedBoxSpec cg@3247: label: 'Label Colors:' cg@3247: name: 'ColorsBox' cg@3247: layout: (LayoutFrame 0 0.0 3 0 0 1.0 95 0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Foreground:' cg@3247: name: 'label1' cg@3247: layout: (AlignmentOrigin 112 0 14 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (ColorMenuSpec cg@3247: name: 'colorMenu1' cg@3247: layout: (LayoutFrame 115 0 2 0 -3 1.0 24 0) cg@3247: activeHelpKey: colorsForegroundLabelColor cg@3247: model: labelForegroundColor cg@3247: labelsAreColored: true cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Background:' cg@3247: name: 'label2' cg@3247: layout: (AlignmentOrigin 112 0 42 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (ColorMenuSpec cg@3247: name: 'colorMenu2' cg@3247: layout: (LayoutFrame 115 0 30 0 -3 1.0 52 0) cg@3247: activeHelpKey: colorsBackgroundLabelColor cg@3247: model: labelBackgroundColor cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) cg@3247: (FramedBoxSpec cg@3247: label: 'Cell Colors:' cg@3247: name: 'defaultColorsBox' cg@3247: layout: (LayoutFrame 0 0.0 95 0 0 1.0 245 0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Foreground:' cg@3247: name: 'fgLabel' cg@3247: layout: (AlignmentOrigin 112 0 11 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (ColorMenuSpec cg@3247: name: 'fgMenu' cg@3247: layout: (LayoutFrame 115 0 -1 0 -3 1.0 21 0) cg@3247: activeHelpKey: colorsForegroundCellColor cg@3247: model: foregroundColor cg@3247: labelsAreColored: true cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Background:' cg@3247: name: 'bgLabel' cg@3247: layout: (AlignmentOrigin 112 0 39 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (ColorMenuSpec cg@3247: name: 'bgMenu' cg@3247: layout: (LayoutFrame 115 0 27 0 -3 1.0 49 0) cg@3247: activeHelpKey: colorsBackgroundCellColor cg@3247: model: backgroundColor cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'FG-Selector:' cg@3247: name: 'fgSelLabel' cg@3247: layout: (AlignmentOrigin 112 0 73 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'fgSelField' cg@3247: layout: (LayoutFrame 115 0 62 0 0 1.0 84 0) cg@3247: activeHelpKey: colorsForegroundSelector cg@3247: tabable: true cg@3247: model: foregroundSelector cg@3247: group: inputGroup cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@1156: ) cg@3247: (LabelSpec cg@3247: label: 'BG-Selector:' cg@3247: name: 'bgSelLabel' cg@3247: layout: (AlignmentOrigin 112 0 98 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'bgSelField' cg@3247: layout: (LayoutFrame 115 0 87 0 0 1.0 109 0) cg@3247: activeHelpKey: colorsBackgroundSelector cg@3247: tabable: true cg@3247: model: backgroundSelector cg@3247: group: inputGroup cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) cg@3247: (FramedBoxSpec cg@3247: label: 'Selected Cell Colors:' cg@3247: name: 'selectedCellColorsBox' cg@3247: layout: (LayoutFrame 0 0.0 245 0 0 1.0 390 0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Foreground:' cg@3247: name: 'selFgLabel' cg@3247: layout: (AlignmentOrigin 112 0 11 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (ColorMenuSpec cg@3247: name: 'selFgMenu' cg@3247: layout: (LayoutFrame 115 0 -1 0 -3 1.0 21 0) cg@3247: activeHelpKey: selectedForegroundCellColor cg@3247: model: selectedForegroundColor cg@3247: labelsAreColored: true cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Background:' cg@3247: name: 'selBgLabel' cg@3247: layout: (AlignmentOrigin 112 0 39 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@1156: ) cg@3247: (ColorMenuSpec cg@3247: name: 'selBgMenu' cg@3247: layout: (LayoutFrame 115 0 27 0 -3 1.0 49 0) cg@3247: activeHelpKey: colorsBackgroundCellColor cg@3247: model: selectedBackgroundColor cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'FG-Selector:' cg@3247: name: 'Label3' cg@3247: layout: (AlignmentOrigin 112 0 73 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'EntryField1' cg@3247: layout: (LayoutFrame 115 0 62 0 0 1.0 84 0) cg@3247: activeHelpKey: colorsForegroundSelector cg@3247: tabable: true cg@3247: model: selectedForegroundSelector cg@3247: group: inputGroup cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@1841: ) cg@3247: (LabelSpec cg@3247: label: 'BG-Selector:' cg@3247: name: 'Label4' cg@3247: layout: (AlignmentOrigin 112 0 98 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'EntryField2' cg@3247: layout: (LayoutFrame 115 0 87 0 0 1.0 109 0) cg@3247: activeHelpKey: colorsBackgroundSelector cg@3247: tabable: true cg@3247: model: selectedBackgroundSelector cg@3247: group: inputGroup cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) ca@332: ! ca@332: tz@528: defineClassNameSpec tz@825: "This resource specification was automatically generated tz@825: by the UIPainter of ST/X." tz@528: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the UIPainter may not be able to read the specification." tz@528: tz@528: " tz@528: UIPainter new openOnClass:DataSetBuilder andSelector:#defineClassNameSpec tz@528: DataSetBuilder new openInterface:#defineClassNameSpec tz@528: " tz@528: tz@528: tz@528: sv@1737: ^ cg@3247: #(FullSpec cg@3247: name: defineClassNameSpec cg@3247: window: cg@3247: (WindowSpec cg@3247: label: 'Data Set Builder' cg@3247: name: 'Data Set Builder' cg@3247: min: (Point 10 10) cg@3247: bounds: (Rectangle 0 0 327 136) cg@3247: ) cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (FramedBoxSpec cg@3247: label: 'Class for code' cg@3247: name: 'framedBox1' cg@3247: layout: (LayoutFrame 0 0.0 3 0.0 0 1.0 -34 1.0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Class:' cg@3247: name: 'classLabel' cg@3247: layout: (AlignmentOrigin 73 0.11 38 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right sv@1737: ) cg@3247: (InputFieldSpec cg@3247: name: 'classNameInputField' cg@3247: layout: (LayoutFrame 77 0.11 27 0 -16 1.0 49 0) cg@3247: tabable: true cg@3247: model: classNameChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Superclass:' cg@3247: name: 'superClassLabel' cg@3247: layout: (AlignmentOrigin 73 0.11 65 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'superclassNameInputField' cg@3247: layout: (LayoutFrame 76 0.11 55 0 -16 1.0 77 0) cg@3247: tabable: true cg@3247: model: superclassNameChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (UISubSpecification cg@3247: name: 'SubSpecification' cg@3247: layout: (LayoutFrame 0 0.0 -35 1 0 1.0 -5 1.0) cg@3247: majorKey: ToolApplicationModel cg@3247: minorKey: windowSpecForCommitWithoutChannels cg@3247: keepSpaceForOSXResizeHandleH: true cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) tz@528: ! tz@528: ca@370: formatEditSpec tz@825: "This resource specification was automatically generated tz@825: by the UIPainter of ST/X." ca@332: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the UIPainter may not be able to read the specification." ca@332: ca@332: " ca@370: UIPainter new openOnClass:DataSetBuilder andSelector:#formatEditSpec ca@370: DataSetBuilder new openInterface:#formatEditSpec ca@370: " ca@370: ca@370: ca@370: cg@1156: ^ cg@3247: #(FullSpec cg@3247: name: formatEditSpec cg@3247: window: cg@3247: (WindowSpec cg@3247: label: 'DataSet Details' cg@3247: name: 'DataSet Details' cg@3247: min: (Point 10 10) cg@3247: bounds: (Rectangle 0 0 388 149) cg@3247: ) cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (FramedBoxSpec cg@3247: label: 'Column Format' cg@3247: name: 'framedBox1' cg@3247: layout: (LayoutFrame 0 0.0 3 0 0 1.0 155 0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Type:' cg@3247: name: 'typeLabel' cg@3247: layout: (AlignmentOrigin 115 0 21 0 1 0.5) cg@3247: activeHelpKey: formatInputType cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (ComboListSpec cg@3247: name: 'typeCombo' cg@3247: layout: (LayoutFrame 118 0 10 0 3 1.0 32 0) cg@3247: activeHelpKey: formatInputType cg@3247: tabable: true cg@3247: model: type cg@3247: comboList: possiblePrintConverterTypes cg@3247: useIndex: false cg@3247: hidePullDownMenuButton: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Max Size:' cg@3247: name: 'sizeLabel' cg@3247: layout: (AlignmentOrigin 115 0 47 0 1 0.5) cg@3247: activeHelpKey: formatMaxSize cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@1156: ) cg@3247: (InputFieldSpec cg@3247: name: 'sizeField' cg@3247: layout: (LayoutFrame 118 0 36 0 3 1.0 58 0) cg@3247: activeHelpKey: formatMaxSize cg@3247: tabable: true cg@3247: model: size cg@3247: group: inputGroup cg@3247: type: numberOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Text Format:' cg@3247: name: 'formatLabel' cg@3247: layout: (AlignmentOrigin 115 0 72 0 1 0.5) cg@3247: activeHelpKey: formatTextFormat cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'formatField' cg@3247: layout: (LayoutFrame 118 0 61 0 3 1.0 83 0) cg@3247: activeHelpKey: formatTextFormat cg@3247: tabable: true cg@3247: model: formatString cg@3247: group: inputGroup cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Format Selector:' cg@3247: name: 'formatSelectorLabel' cg@3247: layout: (AlignmentOrigin 115 0 98 0 1 0.5) cg@3247: activeHelpKey: formatFormatSelector cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'formatSelector' cg@3247: layout: (LayoutFrame 118 0 87 0 3 1.0 109 0) cg@3247: activeHelpKey: formatFormatSelector cg@3247: tabable: true cg@3247: model: formatSelector cg@3247: group: inputGroup cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) ca@370: ! ca@370: tz@408: frameEditSpec tz@825: "This resource specification was automatically generated tz@825: by the UIPainter of ST/X." ca@391: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the UIPainter may not be able to read the specification." ca@391: ca@391: " tz@408: UIPainter new openOnClass:DataSetBuilder andSelector:#frameEditSpec tz@408: DataSetBuilder new openInterface:#frameEditSpec ca@391: " ca@391: ca@391: ca@391: cg@1156: ^ cg@3048: #(FullSpec cg@3048: name: frameEditSpec cg@3048: window: cg@3048: (WindowSpec cg@3048: label: 'DataSet Dimension' cg@3048: name: 'DataSet Dimension' cg@3048: min: (Point 10 10) cg@3048: bounds: (Rectangle 0 0 396 313) cg@3048: ) cg@3048: component: cg@3048: (SpecCollection cg@3048: collection: ( cg@3048: (FramedBoxSpec cg@3048: label: 'Separators' cg@3048: name: 'separatorBox' cg@3048: layout: (LayoutFrame 0 0.0 3 0 0 1.0 132 0) cg@3048: labelPosition: topLeft cg@3048: translateLabel: true cg@3048: component: cg@3048: (SpecCollection cg@3048: collection: ( cg@3048: (CheckBoxSpec cg@3048: label: 'Show Row-Separator' cg@3048: name: 'showRowSeparator' cg@3048: layout: (LayoutFrame 5 0 15 0 293 0 38 0) cg@3048: activeHelpKey: frameShowRowSeparator cg@3048: tabable: true cg@3048: model: showRowSeparator cg@3048: translateLabel: true cg@3048: ) cg@3048: (InputFieldSpec cg@3048: name: 'rowSeparatorSelector' cg@3048: layout: (LayoutFrame 142 0 41 0 2 1.0 63 0) cg@3048: activeHelpKey: frameShowRowSeparatorSelector cg@3048: tabable: true cg@3048: model: rowSeparatorSelector cg@3048: group: inputGroup cg@3048: type: symbolOrNil cg@3048: acceptOnLostFocus: false cg@3048: acceptChannel: acceptChannel cg@3048: modifiedChannel: modifiedChannel cg@3048: acceptOnPointerLeave: false cg@3048: ) cg@3048: (CheckBoxSpec cg@3048: label: 'Show Column-Separator' cg@3048: name: 'showColSeparator' cg@3048: layout: (LayoutFrame 5 0 70 0 294 0 93 0) cg@3048: activeHelpKey: frameShowColumnSeparator cg@3048: tabable: true cg@3048: model: showColSeparator cg@3048: translateLabel: true cg@3048: ) cg@3048: (LabelSpec cg@3048: label: 'Selector:' cg@3048: name: 'Label1' cg@3048: layout: (LayoutFrame 80 0.0 44 0 140 0.0 61 0) cg@3048: activeHelpKey: frameShowRowSeparatorSelector cg@3048: translateLabel: true cg@3048: resizeForLabel: true cg@3048: adjust: right cg@3048: ) cg@3048: ) cg@3048: cg@3048: ) cg@3048: ) cg@3048: (FramedBoxSpec cg@3048: label: 'Dimensions:' cg@3048: name: 'framedBox1' cg@3247: layout: (LayoutFrame 0 0.0 133 0 0 1.0 315 0) cg@3048: labelPosition: topLeft cg@3048: translateLabel: true cg@3048: component: cg@3048: (SpecCollection cg@3048: collection: ( cg@3048: (LabelSpec cg@3048: label: 'Column Width:' cg@3048: name: 'widthLabel' cg@3048: layout: (AlignmentOrigin 140 0.0 23 0 1 0.5) cg@3048: activeHelpKey: frameColumnWidth cg@3048: translateLabel: true cg@3048: resizeForLabel: true cg@3048: adjust: right cg@1156: ) cg@3048: (InputFieldSpec cg@3048: name: 'widthField' cg@3048: layout: (LayoutFrame 142 0 12 0 2 1.0 34 0) cg@3048: activeHelpKey: frameColumnWidth cg@3048: tabable: true cg@3048: model: width cg@3048: group: inputGroup cg@3048: type: numberOrNil cg@3048: acceptOnLostFocus: false cg@3048: acceptChannel: acceptChannel cg@3048: modifiedChannel: modifiedChannel cg@3048: acceptOnPointerLeave: false cg@3048: ) cg@3048: (LabelSpec cg@3048: label: 'Min. Width:' cg@3048: name: 'minWidthLabel' cg@3048: layout: (AlignmentOrigin 140 0.0 51 0 1 0.5) cg@3048: activeHelpKey: frameMinWidth cg@3048: translateLabel: true cg@3048: resizeForLabel: true cg@3048: adjust: right cg@3048: ) cg@3048: (InputFieldSpec cg@3048: name: 'minWidthField' cg@3048: layout: (LayoutFrame 142 0 40 0 2 1.0 62 0) cg@3048: activeHelpKey: frameMinWidth cg@3048: tabable: true cg@3048: model: minWidth cg@3048: group: inputGroup cg@3048: type: numberOrNil cg@3048: acceptOnLostFocus: false cg@3048: acceptChannel: acceptChannel cg@3048: modifiedChannel: modifiedChannel cg@3048: acceptOnPointerLeave: false cg@1156: ) cg@3048: (LabelSpec cg@3048: label: 'Row Height:' cg@3048: name: 'heightLabel' cg@3048: layout: (AlignmentOrigin 140 0.0 79 0 1 0.5) cg@3048: activeHelpKey: frameRowHeight cg@3048: translateLabel: true cg@3048: resizeForLabel: true cg@3048: adjust: right cg@3048: ) cg@3048: (InputFieldSpec cg@3048: name: 'heightField' cg@3048: layout: (LayoutFrame 142 0 68 0 2 1.0 90 0) cg@3048: activeHelpKey: frameRowHeight cg@3048: tabable: true cg@3048: model: height cg@3048: group: inputGroup cg@3048: type: symbolOrNumberOrNil cg@3048: acceptOnLostFocus: false cg@3048: acceptChannel: acceptChannel cg@3048: modifiedChannel: modifiedChannel cg@3048: acceptOnPointerLeave: false cg@3048: ) cg@3048: (CheckBoxSpec cg@3048: label: 'Compute Width from Items' cg@3048: name: 'usePreferredWidth' cg@3048: layout: (LayoutFrame 5 0 96 0 -5 1 118 0) cg@3048: activeHelpKey: usePreferredWidth cg@3048: tabable: true cg@3048: model: usePreferredWidth cg@3048: translateLabel: true cg@3048: ) cg@3048: (CheckBoxSpec cg@3048: label: 'Is Resizeable' cg@3048: name: 'isResizeable' cg@3048: layout: (LayoutFrame 5 0 121 0 -5 1.0 144 0) cg@3048: activeHelpKey: isResizeable cg@3048: tabable: true cg@3048: model: isResizeable cg@3048: translateLabel: true cg@3048: ) cg@3048: ) cg@3048: cg@3048: ) cg@1156: ) cg@3048: ) cg@3048: cg@3048: ) cg@3048: ) ca@391: ! ca@391: tz@408: selectionEditSpec tz@825: "This resource specification was automatically generated tz@825: by the UIPainter of ST/X." ca@370: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the UIPainter may not be able to read the specification." ca@370: ca@370: " tz@408: UIPainter new openOnClass:DataSetBuilder andSelector:#selectionEditSpec tz@408: DataSetBuilder new openInterface:#selectionEditSpec ca@332: " ca@332: ca@332: ca@332: cg@1156: ^ cg@3247: #(FullSpec cg@3247: name: selectionEditSpec cg@3247: window: cg@3247: (WindowSpec cg@3247: label: 'DataSet Basic' cg@3247: name: 'DataSet Basic' cg@3247: min: (Point 10 10) cg@3247: bounds: (Rectangle 0 0 331 328) cg@3247: ) cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (FramedBoxSpec cg@3247: label: 'Label Select Action:' cg@3247: name: 'LabelSelectAction' cg@3247: layout: (LayoutFrame 0 0.0 3 0 0 1.0 100 0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Selector:' cg@3247: name: 'ActionLabel' cg@3247: layout: (AlignmentOrigin 95 0 20 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: left cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'ActionSelector' cg@3247: layout: (LayoutFrame 98 0 9 0 3 1.0 31 0) cg@3247: activeHelpKey: selectionLabelClickSelector cg@3247: tabable: true cg@3247: model: labelActionSelector cg@3247: group: inputGroup cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Argument:' cg@3247: name: 'ArgumentLabel' cg@3247: layout: (AlignmentOrigin 95 0 48 0 1 0.5) cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: left cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'ArgumentValue' cg@3247: layout: (LayoutFrame 98 0 37 0 3 1.0 59 0) cg@3247: activeHelpKey: selectionLabelSelectorArgument cg@3247: tabable: true cg@3247: model: labelActionArgument cg@3247: group: inputGroup cg@3247: type: string cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) cg@3247: (FramedBoxSpec cg@3247: label: 'Cell Selection:' cg@3247: name: 'CellSelection' cg@3247: layout: (LayoutFrame 0 0.0 105 0 0 1.0 225 0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (CheckBoxSpec cg@3247: label: 'Is Selectable' cg@3247: name: 'canSelect' cg@3247: layout: (Point 95 -4) cg@3247: activeHelpKey: selectionIsSelectable cg@3247: tabable: true cg@3247: model: canSelect cg@3247: translateLabel: true cg@3247: ) cg@3247: (LabelSpec cg@3247: label: 'Selector:' cg@3247: name: 'selectorLabel' cg@3247: layout: (AlignmentOrigin 95 0 37 0 1 0.5) cg@3247: activeHelpKey: selectionCellClickSelector cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'selectSelector' cg@3247: layout: (LayoutFrame 98 0 26 0 3 1.0 48 0) cg@3247: activeHelpKey: selectionCellClickSelector cg@3247: tabable: true cg@3247: model: selectSelector cg@3247: group: inputGroup cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@1156: ) cg@3247: (CheckBoxSpec cg@3247: label: 'Show Selection HighLightened' cg@3247: name: 'showSelectionHighLightened' cg@3247: layout: (LayoutFrame 95 0 53 0 3 1.0 77 0) cg@3247: activeHelpKey: showSelectionHighLighted cg@3247: tabable: true cg@3247: model: showSelectionHighLighted cg@3247: translateLabel: true cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@1156: ) cg@3247: (FramedBoxSpec cg@3247: label: 'Cell Double Click:' cg@3247: name: 'CellDoubleClick' cg@3247: layout: (LayoutFrame 0 0.0 227 0 0 1.0 300 0) cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (LabelSpec cg@3247: label: 'Selector:' cg@3247: name: 'doubleLabel' cg@3247: layout: (AlignmentOrigin 95 0 19 0 1 0.5) cg@3247: activeHelpKey: selectionCellDoubleClickSelector cg@3247: translateLabel: true cg@3247: resizeForLabel: true cg@3247: adjust: right cg@3247: ) cg@3247: (InputFieldSpec cg@3247: name: 'doubleClicked' cg@3247: layout: (LayoutFrame 98 0 8 0 3 1.0 30 0) cg@3247: activeHelpKey: selectionCellDoubleClickSelector cg@3247: tabable: true cg@3247: model: doubleClickedSelector cg@3247: group: inputGroup cg@3247: type: symbolOrNil cg@3247: acceptOnLostFocus: false cg@3247: acceptChannel: acceptChannel cg@3247: modifiedChannel: modifiedChannel cg@3247: acceptOnPointerLeave: false cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) tz@408: ! tz@408: tz@528: slices tz@528: ^#( tz@528: (Basics basicsEditSpec) tz@528: (Values valuesEditSpec) tz@528: (Format formatEditSpec) cg@2475: (Sort sortEditSpec) tz@528: (Selection selectionEditSpec) tz@528: (Frame frameEditSpec) tz@528: (Colors colorsEditSpec) tz@528: ) tz@528: ! tz@528: cg@2475: sortEditSpec cg@2475: "This resource specification was automatically generated cg@2475: by the UIPainter of ST/X." cg@2475: cg@2475: "Do not manually edit this!! If it is corrupted, cg@2475: the UIPainter may not be able to read the specification." cg@2475: cg@2475: " cg@2475: UIPainter new openOnClass:DataSetBuilder andSelector:#sortEditSpec cg@2475: DataSetBuilder new openInterface:#sortEditSpec cg@2475: " cg@2475: cg@2475: cg@2475: cg@2475: ^ cg@3046: #(FullSpec cg@3046: name: sortEditSpec cg@3046: window: cg@3046: (WindowSpec cg@3046: label: 'DataSet Basic' cg@3046: name: 'DataSet Basic' cg@3046: min: (Point 10 10) cg@3046: bounds: (Rectangle 0 0 430 473) cg@3046: ) cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (VerticalPanelViewSpec cg@3046: name: 'VerticalPanel1' cg@3046: layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) cg@3046: horizontalLayout: fit cg@3046: verticalLayout: top cg@3046: horizontalSpace: 3 cg@3046: verticalSpace: 3 cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (FramedBoxSpec cg@3046: label: 'Sorting:' cg@3046: name: 'sortFrame' cg@3046: labelPosition: topLeft cg@3046: translateLabel: true cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (CheckBoxSpec cg@3046: label: 'Sortable' cg@3046: name: 'isSortable' cg@3046: layout: (LayoutOrigin -3 0 0 0) cg@3046: activeHelpKey: isSortable cg@3046: tabable: true cg@3046: model: isSortable cg@3046: translateLabel: true cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Sort Selector:' cg@3046: name: 'sortSelector' cg@3247: layout: (AlignmentOrigin 142 0 55 0 1 0.5) cg@3046: activeHelpKey: sortSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@2475: ) cg@3046: (InputFieldSpec cg@3046: name: 'EntryField3' cg@3247: layout: (LayoutFrame 141 0 43 0 8 1 69 0) cg@3046: activeHelpKey: sortSelector cg@3046: enableChannel: isSortable cg@3046: tabable: true cg@3046: model: sortSelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: immediateAccept: false cg@3046: acceptOnLeave: false cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Sort Block Selector:' cg@3046: name: 'Label1' cg@3247: layout: (AlignmentOrigin 142 0 85 0 1 0.5) cg@3046: activeHelpKey: sortBlockSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'EntryField4' cg@3247: layout: (LayoutFrame 141 0 73 0 8 1 99 0) cg@3046: activeHelpKey: sortBlockSelector cg@3046: enableChannel: isSortable cg@3046: tabable: true cg@3046: model: sortBlockSelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: immediateAccept: false cg@3046: acceptOnLeave: false cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: ) cg@3046: cg@3046: ) cg@3247: extent: (Point 430 140) cg@2475: ) cg@3046: ) cg@3046: cg@3046: ) cg@2475: ) cg@3046: ) cg@3046: cg@3046: ) cg@3046: ) cg@2475: ! cg@2475: tz@408: valuesEditSpec tz@825: "This resource specification was automatically generated tz@825: by the UIPainter of ST/X." tz@408: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the UIPainter may not be able to read the specification." tz@408: tz@408: " tz@408: UIPainter new openOnClass:DataSetBuilder andSelector:#valuesEditSpec tz@408: DataSetBuilder new openInterface:#valuesEditSpec tz@408: " tz@408: tz@408: tz@408: cg@1156: ^ cg@3046: #(FullSpec cg@3046: name: valuesEditSpec cg@3046: window: cg@3046: (WindowSpec cg@3046: label: 'DataSet Basic' cg@3046: name: 'DataSet Basic' cg@3046: min: (Point 10 10) cg@3247: bounds: (Rectangle 0 0 472 460) cg@3046: ) cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (VerticalPanelViewSpec cg@3046: name: 'VerticalPanel1' cg@3046: layout: (LayoutFrame 0 0 0 0 0 1 0 1) cg@3046: horizontalLayout: fit cg@3046: verticalLayout: top cg@3046: horizontalSpace: 3 cg@3046: verticalSpace: 3 cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (FramedBoxSpec cg@3046: label: 'Value Selectors:' cg@3046: name: 'valuesBox' cg@3046: labelPosition: topLeft cg@3046: translateLabel: true cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (LabelSpec cg@3046: label: 'Read:' cg@3046: name: 'readLabel' cg@3046: layout: (AlignmentOrigin 116 0 15 0 1 0.5) cg@3046: activeHelpKey: valuesReadSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'readSelector' cg@3046: layout: (LayoutFrame 116 0 4 0 2 1.0 26 0) cg@3046: activeHelpKey: valuesReadSelector cg@3046: tabable: true cg@3046: model: readSelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Write:' cg@3046: name: 'writeLabel' cg@3046: layout: (AlignmentOrigin 116 0 40 0 1 0.5) cg@3046: activeHelpKey: valuesWriteSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'writeSelector' cg@3046: layout: (LayoutFrame 116 0 29 0 2 1.0 51 0) cg@3046: activeHelpKey: valuesWriteSelector cg@3046: tabable: true cg@3046: model: writeSelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Converter:' cg@3046: name: 'converterLabel' cg@3046: layout: (AlignmentOrigin 116 0 65 0 1 0.5) cg@3046: activeHelpKey: converterSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'converterField' cg@3046: layout: (LayoutFrame 116 0 54 0 2 1.0 76 0) cg@3046: activeHelpKey: converterSelector cg@3046: tabable: true cg@3046: model: converterSelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Print:' cg@3046: name: 'printLabel' cg@3046: layout: (AlignmentOrigin 116 0 90 0 1 0.5) cg@3046: activeHelpKey: valuesPrintSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'printSelector' cg@3046: layout: (LayoutFrame 116 0 79 0 2 1.0 101 0) cg@3046: activeHelpKey: valuesPrintSelector cg@3046: tabable: true cg@3046: model: printSelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Visibility:' cg@3046: name: 'visibilityLabel' cg@3046: layout: (AlignmentOrigin 116 0 115 0 1 0.5) cg@3046: activeHelpKey: valuesVisibilitySelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'visibilitySelector' cg@3046: layout: (LayoutFrame 116 0 104 0 2 1.0 126 0) cg@3046: activeHelpKey: valuesVisibilitySelector cg@3046: tabable: true cg@3046: model: visibilitySelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: ) cg@3046: cg@3046: ) cg@3247: extent: (Point 472 170) cg@3046: ) cg@3046: (FramedBoxSpec cg@3046: label: 'Range:' cg@3046: name: 'rangeBox' cg@3046: labelPosition: topLeft cg@3046: translateLabel: true cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (LabelSpec cg@3046: label: 'Min:' cg@3046: name: 'Label1' cg@3046: layout: (LayoutFrame 33 0 3 0 116 0 20 0) cg@3046: activeHelpKey: minValue cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@2816: ) cg@3046: (InputFieldSpec cg@3046: name: 'EntryField1' cg@3046: layout: (LayoutFrame 116 0 1 0 21 0.5 23 0) cg@3046: activeHelpKey: minValue cg@3046: tabable: true cg@3046: model: minValue cg@3046: group: inputGroup cg@3046: type: numberOrNil cg@3046: acceptOnLeave: true cg@3046: acceptOnLostFocus: true cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: true cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Max:' cg@3046: name: 'Label2' cg@3046: layout: (LayoutFrame 21 0.5 3 0 70 0.5 20 0) cg@3046: activeHelpKey: maxValue cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'EntryField2' cg@3046: layout: (LayoutFrame 70 0.5 1 0 -2 1.0 23 0) cg@3046: activeHelpKey: maxValue cg@3046: tabable: true cg@3046: model: maxValue cg@3046: group: inputGroup cg@3046: type: numberOrNil cg@3046: acceptOnLeave: true cg@3046: acceptOnLostFocus: true cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: true cg@3046: ) cg@3046: ) cg@3046: cg@3046: ) cg@3247: extent: (Point 472 65) cg@3046: ) cg@3046: (FramedBoxSpec cg@3046: label: 'Popup Menu:' cg@3046: name: 'menusBox' cg@3046: labelPosition: topLeft cg@3046: translateLabel: true cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (LabelSpec cg@3046: label: 'Selector:' cg@3046: name: 'menuLabel' cg@3046: layout: (AlignmentOrigin 116 0 12 0 1 0.5) cg@3046: activeHelpKey: valuesMenuSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'menuSelector' cg@3046: layout: (LayoutFrame 116 0 1 0 2 1.0 23 0) cg@3046: activeHelpKey: valuesMenuSelector cg@3046: tabable: true cg@3046: model: menu cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (CheckBoxSpec cg@3046: label: 'Fetch Menu from Application' cg@3046: name: 'CheckBox1' cg@3046: layout: (LayoutFrame 116 0 28 0 398 0 50 0) cg@3046: activeHelpKey: valuesMenuFromApplication cg@3046: model: menuFromApplication cg@3046: translateLabel: true cg@3046: valueChangeSelector: setModified cg@2816: ) cg@3046: ) cg@3046: cg@3046: ) cg@3247: extent: (Point 472 90) cg@3046: ) cg@3046: (FramedBoxSpec cg@3046: label: 'Combo List/Box Selectors:' cg@3046: name: 'comboSelectorsBox' cg@3046: labelPosition: topLeft cg@3046: translateLabel: true cg@3046: component: cg@3046: (SpecCollection cg@3046: collection: ( cg@3046: (LabelSpec cg@3046: label: 'Choices:' cg@3046: name: 'ChoicesLabel' cg@3046: layout: (AlignmentOrigin 116 0 15 0 1 0.5) cg@3046: activeHelpKey: valuesChoicesSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@3046: ) cg@3046: (InputFieldSpec cg@3046: name: 'ChoicesField' cg@3046: layout: (LayoutFrame 116 0 4 0 2 1.0 26 0) cg@3046: activeHelpKey: valuesChoicesSelector cg@3046: tabable: true cg@3046: model: choices cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLeave: false cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Xlated Choices:' cg@3046: name: 'XChoicesLabel' cg@3046: layout: (AlignmentOrigin 116 0 40 0 1 0.5) cg@3046: activeHelpKey: valuesXChoicesSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@2816: ) cg@3046: (InputFieldSpec cg@3046: name: 'XChoicesField' cg@3046: layout: (LayoutFrame 116 0 29 0 2 1.0 51 0) cg@3046: activeHelpKey: valuesXChoicesSelector cg@3046: tabable: true cg@3046: model: translatedChoices cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLeave: false cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: (LabelSpec cg@3046: label: 'Editable:' cg@3046: name: 'EditableLabel' cg@3046: layout: (AlignmentOrigin 116 0 65 0 1 0.5) cg@3046: activeHelpKey: showComboFieldSelector cg@3046: translateLabel: true cg@3046: resizeForLabel: true cg@3046: adjust: right cg@2816: ) cg@3046: (InputFieldSpec cg@3046: name: 'EditableField' cg@3046: layout: (LayoutFrame 116 0 54 0 2 1.0 76 0) cg@3046: activeHelpKey: showComboFieldSelector cg@3046: tabable: true cg@3046: model: showComboFieldSelector cg@3046: group: inputGroup cg@3046: type: symbolOrNil cg@3046: acceptOnLeave: false cg@3046: acceptOnLostFocus: false cg@3046: acceptChannel: acceptChannel cg@3046: modifiedChannel: modifiedChannel cg@3046: acceptOnPointerLeave: false cg@3046: ) cg@3046: ) cg@3046: cg@3046: ) cg@3247: extent: (Point 472 120) cg@1156: ) cg@3046: ) cg@3046: cg@3046: ) cg@1156: ) cg@3046: ) cg@3046: cg@3046: ) cg@3046: ) ca@332: ! ca@332: ca@332: windowSpec ca@817: "This resource specification was automatically generated ca@817: by the UIPainter of ST/X." ca@332: ca@817: "Do not manually edit this!! If it is corrupted, ca@817: the UIPainter may not be able to read the specification." ca@332: ca@332: " ca@332: UIPainter new openOnClass:DataSetBuilder andSelector:#windowSpec ca@332: DataSetBuilder new openInterface:#windowSpec ca@817: DataSetBuilder open ca@332: " ca@332: ca@332: ca@332: cg@1156: ^ cg@3247: #(FullSpec cg@3247: name: windowSpec cg@3247: window: cg@3247: (WindowSpec cg@3247: label: 'Data Set Builder' cg@3247: name: 'Data Set Builder' cg@3247: min: (Point 10 10) cg@3247: bounds: (Rectangle 0 0 633 658) cg@3247: menu: menu cg@3247: ) cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (MenuPanelSpec cg@3247: name: 'menuToolbarView' cg@3247: layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 32 0) cg@3247: tabable: true cg@3247: menu: menuToolbar cg@3247: ) cg@3247: (VariableVerticalPanelSpec cg@3247: name: 'mainPanel' cg@3247: layout: (LayoutFrame 0 0.0 38 0.0 0 1.0 -26 1.0) cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (FramedBoxSpec cg@3247: label: 'Table Columns' cg@3247: name: 'FramedBox' cg@3247: labelPosition: topLeft cg@3247: translateLabel: true cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (DataSetSpec cg@3247: name: 'columnView' cg@3247: layout: (LayoutFrame -2 0.0 0 0.0 2 1.0 4 1.0) cg@3247: hasHorizontalScrollBar: true cg@3247: hasVerticalScrollBar: false cg@3247: miniScrollerHorizontal: true cg@3247: useIndex: false cg@3247: has3Dseparators: true cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) cg@3247: (VariableHorizontalPanelSpec cg@3247: name: 'VariablePanel' cg@3247: level: -1 cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (ViewSpec cg@3247: name: 'labelsView' cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (SequenceViewSpec cg@3247: name: 'labelAndColumns' cg@3247: layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) cg@3247: tabable: true cg@3247: model: selectedColumnModel cg@3247: menu: menuEdit cg@3247: hasHorizontalScrollBar: true cg@3247: hasVerticalScrollBar: true cg@3247: miniScrollerHorizontal: true cg@3247: isMultiSelect: true cg@3247: useIndex: true cg@3247: sequenceList: seqList cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: postBuildCallback: postBuildListOfItemsView: cg@3247: ) cg@3247: (ViewSpec cg@3247: name: 'specView' cg@3247: level: -1 cg@3247: component: cg@3247: (SpecCollection cg@3247: collection: ( cg@3247: (NoteBookViewSpec cg@3247: name: 'NoteBook' cg@3247: layout: (LayoutFrame 1 0.0 0 0.0 0 1.0 -30 1.0) cg@3247: tabable: true cg@3247: model: tabModel cg@3247: menu: tabList cg@3247: useIndex: true cg@3247: translateLabel: true cg@3247: canvas: canvasHolder cg@3247: keepCanvasAlive: true cg@1156: ) cg@3247: (UISubSpecification cg@3247: name: 'SubSpecification' cg@3247: layout: (LayoutFrame 2 0.0 -26 1 -2 1.0 -2 1.0) cg@3247: majorKey: ToolApplicationModel cg@3247: minorKey: windowSpecForCommit cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: postBuildCallback: postBuildSpecView: cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: handles: (Any 0.23538700000000001 1.0) cg@1156: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: handles: (Any 0.20874799999999999 1.0) cg@1156: ) cg@3247: (UISubSpecification cg@3247: name: 'infoBarSubSpec' cg@3247: layout: (LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0) cg@3247: majorKey: ToolApplicationModel cg@3247: minorKey: windowSpecForInfoBar cg@3247: ) cg@3247: ) cg@3247: cg@3247: ) cg@3247: ) ca@332: ! ! ca@332: ca@332: !DataSetBuilder class methodsFor:'menu specs'! ca@332: cg@2549: fileMenu cg@2549: "This resource specification was automatically generated cg@2549: by the MenuEditor of ST/X." cg@2549: cg@2549: "Do not manually edit this!! If it is corrupted, cg@2549: the MenuEditor may not be able to read the specification." cg@2549: cg@2549: " cg@2549: MenuEditor new openOnClass:DataSetBuilder andSelector:#fileMenu cg@2549: (Menu new fromLiteralArrayEncoding:(DataSetBuilder fileMenu)) startUp cg@2549: " cg@2549: cg@2549: cg@2549: cg@2549: ^ cg@2549: #(Menu cg@2549: ( cg@2549: (MenuItem cg@2549: activeHelpKey: fileNew cg@2549: label: 'New' cg@2549: itemValue: doNew cg@2549: translateLabel: true cg@2549: ) cg@2549: (MenuItem cg@2549: label: '-' cg@2549: isVisible: notEditingSpecOnly cg@2549: ) cg@2549: (MenuItem cg@2549: activeHelpKey: fileLoad cg@2549: label: 'Load...' cg@2549: itemValue: doLoad cg@2549: translateLabel: true cg@2549: isVisible: notEditingSpecOnly cg@2549: ) cg@2549: (MenuItem cg@2549: label: '-' cg@2549: ) cg@2549: (MenuItem cg@2549: activeHelpKey: fileSave cg@2549: label: 'Save' cg@2549: itemValue: doSave cg@2549: translateLabel: true cg@2549: isVisible: editingSpecOnly cg@2549: ) cg@2549: (MenuItem cg@2549: activeHelpKey: fileSaveMethod cg@2549: label: 'Save' cg@2549: itemValue: doSave cg@2549: translateLabel: true cg@2549: isVisible: notEditingSpecOnly cg@2549: ) cg@2549: (MenuItem cg@2549: activeHelpKey: fileSaveAsMethod cg@2549: label: 'Save As...' cg@2549: itemValue: doSaveAs cg@2549: translateLabel: true cg@2549: isVisible: notEditingSpecOnly cg@2549: ) cg@2549: (MenuItem cg@2549: label: '-' cg@2549: ) cg@2549: (MenuItem cg@2549: activeHelpKey: pickColumns cg@2549: label: 'Pick Columns...' cg@2549: itemValue: doPickColumns cg@2549: translateLabel: true cg@2549: ) cg@2549: (MenuItem cg@2549: label: '-' cg@2549: isVisible: isStandAlone cg@2549: ) cg@2549: (MenuItem cg@2549: activeHelpKey: fileBrowseClass cg@2549: label: 'Browse Class' cg@2549: itemValue: doBrowseClass cg@2549: translateLabel: true cg@2549: isVisible: isStandAlone cg@2549: ) cg@2549: (MenuItem cg@2549: label: '-' cg@2549: isVisible: isStandAlone cg@2549: ) cg@2549: (MenuItem cg@2549: activeHelpKey: fileExit cg@2549: label: 'Exit' cg@2549: itemValue: closeRequest cg@2549: translateLabel: true cg@2549: isVisible: isStandAlone cg@2549: ) cg@2549: ) cg@2549: nil cg@2549: nil cg@2549: ) cg@2549: ! cg@2549: tz@408: menu ca@818: "This resource specification was automatically generated ca@818: by the MenuEditor of ST/X." ca@332: ca@818: "Do not manually edit this!! If it is corrupted, ca@818: the MenuEditor may not be able to read the specification." ca@332: ca@332: " tz@408: MenuEditor new openOnClass:DataSetBuilder andSelector:#menu tz@408: (Menu new fromLiteralArrayEncoding:(DataSetBuilder menu)) startUp ca@332: " ca@332: ca@332: ca@332: cg@1981: ^ cg@1981: #(Menu cg@1981: ( cg@1981: (MenuItem cg@1981: label: 'File' cg@1981: translateLabel: true cg@2549: submenuChannel: fileMenu cg@1981: ) cg@1981: (MenuItem cg@1981: label: 'Edit' cg@1981: translateLabel: true cg@2262: submenuChannel: menuEditWithoutAccelerators cg@1981: ) cg@1981: (MenuItem cg@1981: label: 'Add' cg@1981: translateLabel: true cg@1981: submenu: cg@1981: (Menu cg@1981: ( cg@1981: (MenuItem cg@1981: activeHelpKey: addColumn cg@1981: enabled: columnIsNotEditing cg@1981: label: 'Column' cg@1981: itemValue: doCreateColumn cg@1981: translateLabel: true cg@1981: labelImage: (ResourceRetriever nil newColumnIcon 'Column') tz@521: ) cg@2262: (MenuItem cg@2262: activeHelpKey: addNonSelectableColumn cg@2262: enabled: columnIsNotEditing cg@2262: label: 'Column (Non-Selectable)' cg@2262: itemValue: doCreateNonSelectableColumn cg@2262: translateLabel: true cg@2262: labelImage: (ResourceRetriever DataSetBuilder newColumnNonSelectableIcon 'Column (Non-Selectable)') cg@2262: ) cg@1981: ) cg@1981: nil cg@1981: nil tz@521: ) cg@1981: ) cg@1981: (MenuItem cg@1981: label: 'Generate' cg@1981: translateLabel: true cg@2549: isVisible: notEditingSpecOnly cg@1981: submenu: cg@1981: (Menu cg@1981: ( cg@1981: (MenuItem cg@1981: activeHelpKey: fileDefineClass cg@1981: label: 'Define Row Class...' cg@1981: itemValue: doDefineRowClass cg@1981: translateLabel: true ca@818: ) cg@1981: (MenuItem cg@1981: activeHelpKey: browseRowClass cg@1981: label: 'Browse Row Class' cg@1981: itemValue: doBrowseRowClass cg@1981: translateLabel: true cg@1981: ) cg@1981: (MenuItem cg@1981: label: '-' cg@1981: ) cg@1981: (MenuItem cg@1981: activeHelpKey: generateCode cg@1981: label: 'Generate Code' cg@1981: itemValue: doGenerateCode cg@1981: translateLabel: true cg@1981: ) cg@1981: ) cg@1981: nil cg@1981: nil ca@818: ) cg@1981: ) cg@1981: (MenuItem cg@1981: label: 'History' cg@1981: translateLabel: true cg@1981: isVisible: isStandAlone cg@1981: submenuChannel: menuHistory cg@1981: ) cg@1981: (MenuItem cg@2262: label: 'MENU_Help' cg@1981: translateLabel: true cg@2126: startGroup: conditionalRight cg@1981: submenuChannel: menuHelp cg@1981: ) cg@1981: ) cg@1981: nil cg@1981: nil ca@332: ) ca@332: ! ca@332: tz@408: menuEdit tz@825: "This resource specification was automatically generated tz@825: by the MenuEditor of ST/X." ca@332: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the MenuEditor may not be able to read the specification." ca@332: ca@332: " tz@408: MenuEditor new openOnClass:DataSetBuilder andSelector:#menuEdit tz@408: (Menu new fromLiteralArrayEncoding:(DataSetBuilder menuEdit)) startUp tz@408: " tz@408: tz@408: tz@408: cg@2262: ^ cg@2262: #(Menu cg@2262: ( cg@2262: (MenuItem cg@2262: activeHelpKey: editCut cg@2262: enabled: isColumnSelected cg@2262: label: 'Cut' cg@2262: itemValue: doCut cg@2262: translateLabel: true cg@2262: shortcutKey: Cut cg@2262: ) cg@2262: (MenuItem cg@2262: activeHelpKey: editCopy cg@2262: enabled: isColumnSelected cg@2262: label: 'Copy' cg@2262: itemValue: doCopy cg@2262: translateLabel: true cg@2262: shortcutKey: Copy cg@2262: ) cg@2262: (MenuItem cg@2262: activeHelpKey: editPaste cg@2262: enabled: valueOfHavingClipboard cg@2262: label: 'Paste' cg@2262: itemValue: doPaste cg@2262: translateLabel: true cg@2262: shortcutKey: Paste cg@2262: ) cg@2262: (MenuItem cg@2262: label: '-' cg@2262: ) cg@2262: (MenuItem cg@2262: activeHelpKey: editMoveUp cg@2262: enabled: isColumnSelected cg@2262: label: 'Move Up' cg@2262: itemValue: doMoveColumn: cg@2262: translateLabel: true cg@2262: shortcutKey: CtrlCursorUp cg@2262: labelImage: (ResourceRetriever Icon upIcon 'Move Up') cg@2262: argument: up cg@2262: ) cg@2262: (MenuItem cg@2262: activeHelpKey: editMoveDown cg@2262: enabled: isColumnSelected cg@2262: label: 'Move Down' cg@2262: itemValue: doMoveColumn: cg@2262: translateLabel: true cg@2262: shortcutKey: CtrlCursorDown cg@2262: labelImage: (ResourceRetriever Icon downIcon 'Move Down') cg@2262: argument: down cg@2262: ) cg@2262: (MenuItem cg@2262: label: '-' cg@2262: ) cg@2262: (MenuItem cg@2262: label: 'Separators' cg@2262: translateLabel: true cg@2262: submenu: cg@2262: (Menu cg@2262: ( cg@2262: (MenuItem cg@2262: label: 'Label Columns' cg@2262: translateLabel: true cg@2262: submenu: cg@2262: (Menu cg@2262: ( cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Add Separators' cg@2262: itemValue: addLabelColumnSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Remove Separators' cg@2262: itemValue: removeLabelColumnSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil cg@2262: ) cg@2262: ) cg@2262: (MenuItem cg@2262: label: 'Label Row && Columns' cg@2262: translateLabel: true cg@2262: submenu: cg@2262: (Menu cg@2262: ( cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Add Separators' cg@2262: itemValue: addLabelSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Remove Separators' cg@2262: itemValue: removeLabelSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil cg@2262: ) cg@2262: ) cg@2262: (MenuItem cg@2262: label: '-' cg@2262: ) cg@2262: (MenuItem cg@2262: label: 'Cell Rows' cg@2262: translateLabel: true cg@2262: submenu: cg@2262: (Menu cg@2262: ( cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Add Separators' cg@2262: itemValue: addRowSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Remove Separators' cg@2262: itemValue: removeRowSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil cg@2262: ) cg@2262: ) cg@2262: (MenuItem cg@2262: label: 'Cell Columns' cg@2262: translateLabel: true cg@2262: submenu: cg@2262: (Menu cg@2262: ( cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Add Separators' cg@2262: itemValue: addLabelColumnSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Remove' cg@2262: itemValue: removeLabelColumnSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil cg@2262: ) cg@2262: ) cg@2262: (MenuItem cg@2262: label: 'Cell Rows && Columns' cg@2262: translateLabel: true cg@2262: submenu: cg@2262: (Menu cg@2262: ( cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Add Separators' cg@2262: itemValue: addCellSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Remove Separators' cg@2262: itemValue: removeCellSeparators cg@2262: translateLabel: true cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil cg@2262: ) cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil tz@408: ) cg@2262: ) cg@2380: (MenuItem cg@2262: label: 'Alignment' cg@2262: translateLabel: true cg@2262: submenu: cg@2262: (Menu cg@2262: ( cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Labels Left Aligned' cg@2262: itemValue: alignLabelsLeft cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Labels Centered' cg@2262: itemValue: alignLabelsCentered cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Labels Right Aligned' cg@2262: itemValue: alignLabelsRight cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: label: '-' cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Cell Left Aligned' cg@2262: itemValue: alignColumnsLeft cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Cell Centered' cg@2262: itemValue: alignColumnsCentered cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Cell Right Aligned' cg@2262: itemValue: alignColumnsRight cg@2262: translateLabel: true cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil tz@408: ) cg@2262: ) cg@2262: (MenuItem cg@2371: label: 'Colors' cg@2371: translateLabel: true cg@2371: submenu: cg@2371: (Menu cg@2371: ( cg@2371: (MenuItem cg@2371: enabled: hasSelection cg@2371: label: 'Set Cell Color Selectors' cg@2371: itemValue: setCellColorSelectors cg@2371: translateLabel: true cg@2371: ) cg@2371: (MenuItem cg@2371: enabled: hasSelection cg@2371: label: 'Set Selected Cell Color Selectors' cg@2371: itemValue: setSelectedCellColorSelectors cg@2371: translateLabel: true cg@2371: ) cg@2371: ) cg@2371: nil cg@2371: nil cg@2371: ) cg@2371: ) cg@2371: (MenuItem cg@2380: label: 'Behavior' cg@2380: translateLabel: true cg@2380: submenu: cg@2380: (Menu cg@2380: ( cg@2380: (MenuItem cg@2380: enabled: hasSelection cg@2380: label: 'Make Selected Cells Unselectable' cg@2380: itemValue: makeSelectedCellsUnselectable cg@2380: translateLabel: true cg@2380: ) cg@2380: (MenuItem cg@2380: enabled: hasSelection cg@2380: label: 'Make Selected Cells Selectable' cg@2380: itemValue: makeSelectedCellsSelectable cg@2380: translateLabel: true cg@2380: ) cg@3045: (MenuItem cg@3045: label: '-' cg@3045: ) cg@3045: cg@3045: (MenuItem cg@3181: label: 'Make all Cells Unselectable' cg@3045: itemValue: makeAllCellsUnselectable cg@3045: translateLabel: true cg@3045: ) cg@3045: (MenuItem cg@3181: label: 'Make all Cells Selectable' cg@3045: itemValue: makeAllCellsSelectable cg@3045: translateLabel: true cg@3045: ) cg@2380: ) cg@2380: nil cg@2380: nil cg@2380: ) cg@2380: ) cg@2380: (MenuItem cg@2262: label: '-' cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Selectable' cg@2262: itemValue: makeColumnsSelectable cg@2262: translateLabel: true cg@2262: ) cg@2262: (MenuItem cg@2262: enabled: hasSelection cg@2262: label: 'Make Unselectable' cg@2262: itemValue: makeColumnsUnselectable cg@2262: translateLabel: true cg@2262: ) cg@2262: ) cg@2262: nil cg@2262: nil tz@408: ) tz@408: ! tz@408: cg@2262: menuEditWithoutAccelerators cg@2321: ^ self menuEdit decodeAsLiteralArray removeAllAccelerators cg@2262: ! cg@2262: tz@408: menuToolbar tz@825: "This resource specification was automatically generated tz@825: by the MenuEditor of ST/X." tz@408: tz@825: "Do not manually edit this!! If it is corrupted, tz@825: the MenuEditor may not be able to read the specification." tz@408: tz@408: " tz@408: MenuEditor new openOnClass:DataSetBuilder andSelector:#menuToolbar tz@408: (Menu new fromLiteralArrayEncoding:(DataSetBuilder menuToolbar)) startUp ca@332: " ca@332: ca@332: ca@332: cg@1757: ^ cg@1757: #(Menu cg@1757: ( cg@1757: (MenuItem cg@1757: activeHelpKey: fileNew cg@1757: label: 'New' cg@1757: itemValue: doNew cg@1757: translateLabel: true cg@1757: isButton: true cg@1887: labelImage: (ResourceRetriever ToolbarIconLibrary newDataSetIcon) cg@1757: ) cg@1757: (MenuItem cg@2262: label: '-' cg@2262: ) cg@2262: (MenuItem cg@1757: activeHelpKey: fileLoad cg@1757: label: 'Load' cg@1757: itemValue: doLoad cg@1757: translateLabel: true cg@1757: isButton: true cg@1757: submenuChannel: menuHistory cg@1887: labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon) cg@1757: ) cg@1757: (MenuItem cg@2549: activeHelpKey: fileSaveMethod cg@2549: label: 'Save' cg@2549: itemValue: doSave cg@2549: translateLabel: true cg@2549: isButton: true cg@2549: isVisible: notEditingSpecOnly cg@2549: labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon) cg@2549: ) cg@2549: (MenuItem cg@1757: activeHelpKey: fileSave cg@1757: label: 'Save' cg@1757: itemValue: doSave cg@1757: translateLabel: true cg@1757: isButton: true cg@2549: isVisible: editingSpecOnly cg@2549: labelImage: (ResourceRetriever ToolbarIconLibrary saveToFileIcon) cg@1757: ) cg@1757: (MenuItem cg@1887: label: '-' cg@1757: ) cg@1757: (MenuItem cg@1757: activeHelpKey: editCut cg@1757: enabled: isColumnSelected cg@1757: label: 'Cut' cg@1757: itemValue: doCut cg@1757: translateLabel: true cg@1757: isButton: true cg@1887: labelImage: (ResourceRetriever ToolbarIconLibrary cutWidgetIcon) cg@1757: ) cg@1757: (MenuItem cg@1757: activeHelpKey: editCopy cg@1757: enabled: isColumnSelected cg@1757: label: 'Copy' cg@1757: itemValue: doCopy cg@1757: translateLabel: true cg@1757: isButton: true cg@1887: labelImage: (ResourceRetriever ToolbarIconLibrary copyWidgetIcon) cg@1757: ) cg@1757: (MenuItem cg@1757: activeHelpKey: editPaste cg@1990: enabled: canPasteHolder cg@1757: label: 'Paste' cg@1757: itemValue: doPaste cg@1757: translateLabel: true cg@1757: isButton: true cg@1887: labelImage: (ResourceRetriever ToolbarIconLibrary pasteWidgetIcon) cg@1757: ) cg@1757: (MenuItem cg@1757: activeHelpKey: editDelete cg@1757: enabled: isColumnSelected cg@1757: label: 'Delete' cg@1757: itemValue: doDelete cg@1757: translateLabel: true cg@1757: isButton: true cg@1887: isVisible: false cg@1887: labelImage: (ResourceRetriever ToolbarIconLibrary deleteWidgetIcon) cg@1757: ) cg@1757: (MenuItem cg@1887: label: '-' cg@1757: ) cg@1757: (MenuItem cg@1757: activeHelpKey: addColumn cg@1757: enabled: columnIsNotEditing cg@1757: label: 'Add Column' cg@1757: itemValue: doCreateColumn cg@1757: translateLabel: true cg@1757: isButton: true cg@1757: labelImage: (ResourceRetriever nil newColumnIcon) cg@1757: ) cg@1757: (MenuItem cg@2262: activeHelpKey: addNonSelectableColumn cg@2262: enabled: columnIsNotEditing cg@2262: label: 'Add Column (Non Selectable)' cg@2262: itemValue: doCreateNonSelectableColumn cg@2262: translateLabel: true cg@2262: isButton: true cg@2262: labelImage: (ResourceRetriever DataSetBuilder newColumnNonSelectableIcon) cg@2262: ) cg@2262: (MenuItem cg@2262: label: '' cg@1757: ) cg@1757: (MenuItem cg@1757: activeHelpKey: editMoveUp cg@1757: enabled: isColumnSelected cg@1757: label: 'Move Up' cg@1757: itemValue: doMoveColumn: cg@1757: translateLabel: true cg@1757: isButton: true cg@2262: startGroup: right cg@1757: labelImage: (ResourceRetriever Icon upIcon) cg@1757: argument: up cg@1757: ) cg@1757: (MenuItem cg@1757: activeHelpKey: editMoveDown cg@1757: enabled: isColumnSelected cg@1757: label: 'Move Down' cg@1757: itemValue: doMoveColumn: cg@1757: translateLabel: true cg@1757: isButton: true cg@2262: startGroup: right cg@1757: labelImage: (ResourceRetriever Icon downIcon) cg@1757: argument: down cg@1757: ) cg@1757: ) cg@1757: nil cg@1757: nil ca@332: ) ca@332: ! ! ca@332: ca@332: !DataSetBuilder methodsFor:'accessing'! ca@332: cg@2549: acceptedColumns cg@2549: "returns the last saved columns (internal, for specOnly edit mode)" cg@2549: cg@2549: ^ acceptedColumns cg@2549: ! cg@2549: ca@332: columns tz@419: "returns list of columns" tz@419: ca@818: ^ columns ca@332: ! ca@332: ca@818: columns:aListOfColumns tz@419: "setup columns from a column view" tz@419: cg@2549: |list newColumns| cg@2549: cg@2549: newColumns := OrderedCollection new. cg@2549: list := self seqList. ca@332: list removeAll. ca@332: ca@818: aListOfColumns size ~~ 0 ifTrue:[ ca@818: aListOfColumns do:[:aColumn||column| ca@818: (column := aColumn) isSequenceable ifTrue:[ cg@2167: column := DataSetColumnSpec decodeFromLiteralArray:aColumn ca@818: ] ifFalse:[ ca@818: column := aColumn copy ca@818: ]. cg@2549: newColumns add:column. tz@825: list add:(self labelFromColumn:column). ca@332: ] ca@818: ]. cg@2549: columns := newColumns. ca@818: self updateColumnView. ca@818: cg@2167: "Modified: / 27-03-2007 / 08:46:39 / cg" ca@333: ! ca@333: cg@2549: editingSpecOnly cg@2549: ^ editingSpecOnly ? false cg@2549: ! cg@2549: cg@2549: editingSpecOnly:something cg@2549: editingSpecOnly := something. cg@2549: ! cg@2549: cg@2549: notEditingSpecOnly cg@2549: ^ self editingSpecOnly not cg@2549: ! cg@2549: ca@983: resolveRowClass ca@983: "returns the resolved row class ca@983: " ca@983: ^ Smalltalk resolveName:rowClass inClass:self class ca@983: ! ca@983: ca@333: rowClassName tz@419: ca@983: ^ self resolveRowClass notNil ifTrue:[rowClass] ifFalse:[nil] ca@333: ! ca@333: ca@333: rowClassName:aClassName tz@419: ca@333: |cls| ca@333: ca@818: rowSuperClass := nil. ca@333: ca@818: (rowClass := aClassName) notNil ifTrue:[ ca@983: (cls := self resolveRowClass) notNil ca@818: ifTrue: [rowSuperClass := cls superclass name asString] ca@818: ifFalse:[rowSuperClass := 'Object'] ca@333: ] ca@333: ca@332: ! ! ca@332: tz@419: !DataSetBuilder methodsFor:'aspects'! ca@332: ca@1300: canvasHolder ca@1300: "returns a value holder which keeps selected column" ca@1300: ca@1300: |holder| ca@1300: ca@1300: (holder := builder bindingAt:#canvasHolder) isNil ifTrue:[ ca@1300: builder aspectAt:#canvasHolder put:(holder := ValueHolder new). ca@1300: ]. ca@1300: ^ holder ca@1300: ! ca@1300: tz@419: columnIsNotEditing cg@2262: "returns a boolean value holder which returns true if a columns attributes have not cg@2262: been modified (notebook fields)" ca@332: ca@1311: |holder| ca@1311: ca@1311: (holder := builder bindingAt:#columnIsNotEditing) isNil ifTrue:[ ca@1311: holder := BlockValue forLogicalNot:(self modifiedChannel). ca@1311: builder aspectAt:#columnIsNotEditing put:holder. ca@1311: ]. ca@1311: ^ holder ca@332: ! ca@332: tz@419: editorTypeList tz@419: "generate list of supported editor types" ca@332: ca@332: |list| ca@332: cg@1697: (list := builder bindingAt:#editorTypeList) isNil ifTrue:[ sv@2991: list := DataSetColumnSpec slices collect:[:eachSlice | eachSlice at:1] as:Set. martin@1700: list := list asOrderedCollection sort. tz@419: builder aspectAt:#editorTypeList put:list ca@332: ]. tz@419: ^list ca@332: ! ca@332: cg@2262: hasColumns cg@2262: "returns a boolean value holder which is set to true if there are any columns" cg@2262: cg@2262: ^ BlockValue cg@2262: with:[:m | m notEmptyOrNil] cg@2262: argument:(self seqList) cg@2262: ! cg@2262: cg@2262: hasSelection cg@2262: ^ (selectedColumnIndex isCollection not and:[ selectedColumnIndex ~~ 0 ]) cg@3406: or:[ selectedColumnIndex notEmptyOrNil ] cg@3406: cg@3406: "Modified: / 17-02-2017 / 08:35:26 / cg" cg@2262: ! cg@2262: tz@408: isColumnSelected cg@2262: "returns a boolean value holder which is set to true if some col is selected" tz@419: tz@419: ^builder valueAspectFor:#isColumnSelected initialValue: false ca@332: ! ca@332: ca@1836: menuEdit cg@2371: "redefined to access my menu and not the one of the UIPainter" cg@2371: cg@2371: ^ [self class menuEdit] ca@1836: ! ca@1836: cg@2262: possiblePrintConverterTypes cg@2262: ^ UISpecification possiblePrintConverterTypes cg@2262: ! cg@2262: ca@332: rendererTypeList tz@419: "generate list of supported renderer types" tz@419: ca@332: |list| ca@332: cg@1697: (list := builder bindingAt:#rendererTypeList) isNil ifTrue:[ sv@2991: list := DataSetColumnSpec slices collect:[:eachSlice | eachSlice at:2] as:Set. martin@1701: list := list asOrderedCollection sort. tz@419: builder aspectAt:#rendererTypeList put:list ca@332: ]. tz@419: ^list ca@332: ! ca@332: ca@332: selectedColumnModel tz@419: "returns a value holder which keeps selected column" ca@332: ca@332: |holder| ca@332: ca@332: (holder := builder bindingAt:#selectedColumnModel) isNil ifTrue:[ ca@332: holder := AspectAdaptor new subject:self; forAspect:#selectedColumnIndex. ca@332: builder aspectAt:#selectedColumnModel put:holder. ca@332: ]. ca@332: ^ holder ca@332: ! ca@332: ca@332: seqList cg@1182: ^ builder listAspectFor:#seqList ca@332: ! ca@332: ca@391: style tz@419: tz@419: ^self aspectFor:#labelFont ca@391: ! ca@391: ca@332: tabList ca@332: tz@419: ^self class slices collect:[:aSlice|aSlice first] ca@332: ca@332: ! ! ca@332: ca@818: !DataSetBuilder methodsFor:'building'! ca@818: cg@1974: buildFromResourceSpec:aResourceSpec cg@1974: cg@1974: self columns:aResourceSpec. cg@1974: cg@1974: "/ columns notEmpty ifTrue: [ cg@1974: "/ self tabModel value: 1. cg@1974: "/ self selectedColumnModel value:nil; value:1. "/ toggle to force change cg@1974: "/ self updateInputFields. cg@1974: "/ self updateInfoLabel. cg@1974: "/ self updateHistory cg@1974: "/ ]. cg@1974: cg@1974: ! cg@1974: cg@1974: loadFromClass:aClass andSelector:aSelector cg@2549: |cls list| tz@825: cg@1974: self assert:(aClass isNil or:[aClass isClass]). cg@1974: tz@825: selectedColumnIndex := 0. tz@825: tz@825: "if opened on table columns" tz@825: tz@825: aClass isNil ifTrue: [ tz@825: self tabModel value: 0. cg@2549: "/ self columns removeAll. cg@2549: "/ self seqList removeAll. tz@825: self updateColumnView. tz@825: self updateInfoLabel. cg@1974: self isColumnSelected value: false. cg@1974: ^ self. tz@825: ]. tz@825: cg@2549: specSelector isNil ifTrue: [ cg@2549: self updateAfterColumnChange. cg@2549: ^ self cg@2549: ]. ca@818: ca@818: list := nil. ca@818: ca@818: (aClass notNil or:[self isStandAlone or:[self window shown]]) ifTrue:[ ca@818: (aClass notNil and:[aSelector notNil]) ifTrue:[ cg@1974: cls := aClass isBehavior ifTrue:[ aClass ] ifFalse:[ self resolveName:aClass]. cg@1974: cg@1974: (cls respondsTo: aSelector) ifTrue:[ cg@1974: list := cls perform: aSelector. cg@1974: ]. ca@818: ] ca@818: ] ifFalse:[ ca@818: list := columns ca@818: ]. tz@825: self columns:list. cg@2549: self updateAfterColumnChange. cg@2549: ! cg@2549: cg@2549: updateAfterColumnChange ca@2557: self tabModel changed "value:0; value:1". "/ toggle to force change ca@2557: self selectedColumnModel changed "value:nil; value:1". "/ toggle to force change cg@2549: self updateColumnView. cg@2549: self updateInputFields. cg@2549: self updateInfoLabel. cg@2549: self updateHistory. cg@2549: self clearModifiedFlag. cg@2549: self enablingCommitButtonsHolder value:false. ca@818: ! ! ca@818: ca@332: !DataSetBuilder methodsFor:'code generation'! ca@332: ca@332: compile:aCode forClass:aClass inCategory:aCategory tz@419: "compile method for class in a category" tz@419: cg@1569: aClass cg@1569: compile:(aCode withCRs) cg@1569: classified:aCategory ca@332: ! ca@332: ca@380: generateBackgroundSelectorIn:aClass tz@419: "generate code for #backgroundSelector" tz@419: ca@380: |sel catg code bCode| ca@380: cg@1771: catg := #'accessing look'. ca@380: code := '\' ca@380: , ' "automatically generated by DataSetBuilder ..."\' ca@380: , '\' ca@380: , ' "specific background color for a cell"\' ca@380: , '\' ca@380: . ca@380: tz@419: columns do: tz@419: [:aColumn| cg@1553: ((sel := aColumn backgroundSelector) notNil and:[(aClass includesSelector:sel) not]) tz@419: ifTrue: tz@419: [ tz@419: bCode := sel asString, code, ' ^nil'. ca@380: self compile:bCode forClass:aClass inCategory:catg ca@380: ] ca@380: ] ca@380: ! ca@380: ca@332: generateChoicesIn:aClass tz@419: "generate code for #choices" tz@419: cg@1009: |sel catg code edt| ca@332: cg@1771: catg := #'accessing menu'. ca@332: code := '\' ca@332: , ' "automatically generated by DataSetBuilder ..."\' ca@332: , '\' ca@983: , ' "get choices for visual editor; (a list of labels)..."\' ca@332: , '\' ca@983: , ' ^ #( foo bar baz )' ca@332: . ca@332: cg@1009: columns do:[:aColumn| cg@1009: edt := aColumn editorType. cg@1009: cg@1009: ( aColumn canSelect cg@1009: and:[(sel := aColumn choices) notNil cg@1009: and:[(edt == #ComboBox or:[edt == #ComboList]) cg@1553: and:[(aClass includesSelector:sel) not]]] cg@1009: ) ifTrue:[ ca@332: self compile:(sel asString, code) forClass:aClass inCategory:catg ca@332: ] ca@332: ] ca@332: ! ca@332: ca@391: generateDoubleClickSelectorIn:aClass tz@419: "generate code for #foregroundSelector" tz@419: ca@391: |sel catg code bCode| ca@391: cg@1841: catg := #'accessing-action'. ca@391: code := '\' ca@391: , ' "automatically generated by DataSetBuilder ..."\' ca@391: , '\' ca@391: , ' "specific selector to be called on double click"\' ca@391: , '\' ca@391: . ca@391: tz@419: columns do: tz@419: [:aColumn| tz@419: ((sel := aColumn doubleClickedSelector) notNil cg@1553: and:[(aClass includesSelector:sel) not]) tz@419: ifTrue: tz@419: [ ca@391: bCode := sel asString, code. ca@391: self compile:bCode forClass:aClass inCategory:catg ca@391: ] ca@391: ] ca@391: ! ca@391: ca@380: generateForegroundSelectorIn:aClass ca@380: "generate code for #foregroundSelector ca@380: " ca@380: |sel catg code bCode| ca@380: cg@1841: catg := #'accessing-look'. ca@380: code := '\' ca@380: , ' "automatically generated by DataSetBuilder ..."\' ca@380: , '\' ca@380: , ' "specific foreground color for a cell"\' ca@380: , '\' ca@380: . ca@380: tz@419: columns do: tz@419: [:aColumn| tz@419: ((sel := aColumn foregroundSelector) notNil cg@1553: and:[(aClass includesSelector:sel) not]) tz@419: ifTrue: tz@419: [ cg@1841: bCode := sel asString, code, ' ^ nil'. ca@380: self compile:bCode forClass:aClass inCategory:catg ca@380: ] ca@380: ] ca@380: ! ca@380: ca@332: generateMenuIn:aClass tz@419: "generate code for #menu" tz@419: ca@332: |sel catg code| ca@332: cg@1771: catg := #'accessing menu'. ca@332: code := '\' ca@332: , ' "automatically generated by DataSetBuilder ..."\' ca@332: , '\' ca@332: , ' "get middleButton menu for selected cell in column"\' ca@332: , '\' tz@419: , ' ^nil' ca@332: . ca@332: tz@419: columns do: tz@419: [:aColumn| tz@419: (aColumn canSelect tz@419: and:[(sel := aColumn menu) notNil cg@1553: and:[(aClass includesSelector:sel) not]]) tz@419: ifTrue: tz@419: [ ca@332: self compile:(sel asString, code) forClass:aClass inCategory:catg ca@332: ] ca@332: ] ca@332: ! ca@332: ca@332: generatePrintSelectorIn:aClass tz@419: "generate code for #printSelector" tz@419: ca@332: |sel catg code| ca@332: cg@1771: catg := #'accessing'. cg@1004: code := '\' ca@332: , ' "automatically generated by DataSetBuilder ..."\' ca@332: , '\' ca@332: , ' "get drawable image or text on a gc"\' ca@332: , '\' cg@1004: , ' ^ ' ca@332: . ca@332: cg@1004: columns do:[:aColumn| cg@1004: ( aColumn rendererType ~~ #rowSelector cg@1004: and:[(sel := aColumn printSelector) notNil cg@1553: and:[(aClass includesSelector:sel) not]] cg@1004: ) ifTrue:[ cg@1548: |numArgs bcode keys| cg@1004: bcode := sel asString. cg@1548: numArgs := sel numArgs. cg@1548: cg@1548: numArgs ~~ 0 ifTrue:[ cg@1548: numArgs == 1 ifTrue:[ cg@1004: bcode := bcode, 'aGC' cg@1004: ] ifFalse:[ cg@1004: keys := sel keywords. cg@1004: bcode := (keys at:1), 'aGC ', (keys at:2), 'aColNr'. cg@1004: ] cg@1004: ]. cg@1004: self compile:(bcode, code, '''', bcode, '''') forClass:aClass inCategory:catg ca@332: ] ca@332: ] ca@332: ! ca@332: ca@332: generateReadSelectorIn:aClass tz@419: "generate code for #readSelector" tz@419: ca@332: |sel catg code bCode| ca@332: cg@1771: catg := #'accessing'. ca@332: code := '\' ca@332: , ' "automatically generated by DataSetBuilder ..."\' ca@332: , '\' ca@332: , ' "get value"\' ca@332: , '\' ca@332: . ca@332: tz@419: columns do: tz@419: [:aColumn| tz@419: (aColumn rendererType ~~ #rowSelector tz@419: and:[(sel := aColumn readSelector) notNil cg@1553: and:[(aClass includesSelector:sel) not]]) tz@419: ifTrue: tz@419: [ tz@419: (aColumn printSelector isNil or:[aColumn canSelect]) tz@419: ifTrue: tz@419: [ cg@1004: |selName| cg@1004: selName := sel asString. cg@1004: tz@419: sel numArgs == 0 cg@1004: ifTrue: [bCode := selName, code] cg@1004: ifFalse:[bCode := selName, 'anIndex\', code]. tz@419: aColumn rendererType == #CheckToggle cg@1004: ifFalse:[bCode := bCode, ' ^ ''', selName, ''''] tz@419: ifTrue: [bCode := bCode, ' ^true']. ca@332: self compile:bCode forClass:aClass inCategory:catg ca@332: ] ca@332: ] ca@332: ] ca@332: ! ca@332: ca@983: generateRowSeparatorSelectorIn:aClass ca@983: "generate code for #rowSeparatorSelector" ca@983: ca@983: |sel catg code bCode| ca@983: cg@1771: catg := #'accessing look'. ca@983: code := '\' ca@983: , ' "automatically generated by DataSetBuilder ..."\' ca@983: , '\' ca@983: , ' "specific row separator visibility for a cell"\' ca@983: , '\' ca@983: . ca@983: ca@983: columns do: ca@983: [:aColumn| cg@1553: ((sel := aColumn rowSeparatorSelector) notNil and:[(aClass includesSelector:sel) not]) ca@983: ifTrue: ca@983: [ ca@983: bCode := sel asString, code, ' ^true'. ca@983: self compile:bCode forClass:aClass inCategory:catg ca@983: ] ca@983: ] ca@983: ! ca@983: ca@377: generateSelectSelectorIn:aClass ca@377: "generate code for #selectSelector ca@377: " ca@377: |sel catg code bCode| ca@377: cg@1771: catg := #'accessing selection'. ca@377: code := '\' ca@377: , ' "automatically generated by DataSetBuilder ..."\' ca@377: , '\' ca@377: , ' "can select cell in column"\' ca@377: , '\' ca@377: . ca@377: tz@419: columns do: tz@419: [:aColumn| tz@419: (aColumn rendererType ~~ #rowSelector ca@377: and:[(sel := aColumn selectSelector) notNil cg@1553: and:[(aClass includesSelector:sel) not]]) tz@419: ifTrue: tz@419: [ tz@419: aColumn canSelect tz@419: ifTrue: tz@419: [ tz@419: bCode := sel asString, code, ' ^true'. ca@377: self compile:bCode forClass:aClass inCategory:catg ca@377: ] ca@377: ] ca@377: ] ca@377: ! ca@377: cg@1009: generateShowComboFieldSelectorIn:aClass cg@1009: "generate code for #showComboFieldSelector cg@1009: " cg@1009: |sel catg code bCode edt state| cg@1009: cg@1771: catg := #'accessing menu'. cg@1009: code := '\' cg@1009: , ' "automatically generated by DataSetBuilder ..."\' cg@1009: , '\' cg@1009: , ' "open an editField on a combo list or box"\' cg@1009: , '\' cg@1009: . cg@1009: cg@1009: columns do:[:aColumn| cg@1009: edt := aColumn editorType. cg@1009: cg@1009: ( aColumn canSelect cg@1009: and:[(sel := aColumn showComboFieldSelector) notNil cg@1009: and:[(edt == #ComboBox or:[edt == #ComboList]) cg@1553: and:[(aClass includesSelector:sel) not]]] cg@1009: ) ifTrue:[ cg@1009: state := edt == #ComboBoxView. cg@1009: cg@1009: bCode := sel asString, code, ' ^ ', state printString. cg@1009: self compile:bCode forClass:aClass inCategory:catg cg@1009: ] cg@1009: ] cg@1009: ! cg@1009: ca@332: generateWriteSelectorIn:aClass tz@419: "generate code for #writeSelector" tz@419: ca@379: |sel catg code bCode sz| ca@332: cg@1771: catg := #'accessing'. ca@332: code := 'aValue\' ca@332: , ' "automatically generated by DataSetBuilder ..."\' ca@332: , '\' ca@332: , ' "set value"\' ca@332: . ca@332: tz@419: columns do: tz@419: [:aColumn| tz@419: ((sel := aColumn writeSelector) notNil ca@983: and:[aColumn editorType ~~ #None tz@419: and:[aColumn canSelect cg@1553: and:[(aClass includesSelector:sel) not]]]) tz@419: ifTrue: tz@419: [ tz@419: sel numArgs == 1 tz@419: ifTrue: tz@419: [ ca@379: bCode := sel asString tz@419: ] tz@419: ifFalse: tz@419: [ ca@379: sz := sel indexOf:$:. ca@379: bCode := sel copyTo:sz. tz@419: bCode := bCode, 'anIndex ', (sel copyFrom:sz + 1) ca@379: ]. ca@379: self compile:(bCode, code) forClass:aClass inCategory:catg ca@332: ] ca@332: ] ca@332: ! ! ca@332: cg@2262: !DataSetBuilder methodsFor:'event handling'! cg@2262: cg@2262: processEvent:anEvent cg@2262: "filter keyboard edit-events typed into the listOfItemsView. cg@2262: Return true, if I have eaten the event" cg@2262: cg@3659: cg@2944: cg@2262: |evView inView rawKey key| cg@2262: cg@2262: anEvent isKeyPressEvent ifFalse:[^ false]. cg@2262: cg@2262: evView := anEvent targetView. cg@2262: evView isNil ifTrue:[ ^ false ]. cg@2262: cg@2262: inView := evView isSameOrComponentOf:listOfItemsView. cg@2262: inView ifTrue:[^ false]. cg@2262: cg@2262: key := anEvent key. cg@2262: rawKey := anEvent rawKey. cg@2262: cg@2262: ( key == #Delete cg@2262: or:[key == #BackSpace cg@2262: or:[key == #Cut]] cg@2262: ) ifTrue:[ cg@2262: self doCut. cg@2262: ^ true. cg@2262: ]. cg@2262: cg@2262: key == #Copy ifTrue:[ self doCopy. ^ true ]. cg@2262: key == #Paste ifTrue:[ self doPaste. ^ true ]. cg@2262: cg@3565: ((rawKey == #CtrlCursorUp) cg@3565: or:[(rawKey == #CmdCursorUp) cg@3565: or:[(rawKey == #AltCursorUp) ]]) ifTrue:[ cg@3565: self doMoveUp. cg@2262: ^ true. cg@2262: ]. cg@3565: ((rawKey == #CtrlCursorDown) cg@3565: or:[(rawKey == #CmdCursorDown) cg@3565: or:[(rawKey == #AltCursorDown) ]]) ifTrue:[ cg@2262: self doMoveDown. cg@2262: ^ true. cg@2262: ]. cg@2262: cg@2262: ^ false. cg@3565: cg@3659: "Modified: / 02-05-2019 / 21:15:43 / Claus Gittinger" cg@2262: ! ! cg@2262: ca@332: !DataSetBuilder methodsFor:'initialization'! ca@332: ca@332: initialize tz@825: "initializes" ca@332: ca@332: super initialize. ca@332: tz@825: selectedColumnIndex := 0. cg@1156: columns := OrderedCollection new. cg@1156: modalOpened := false. ca@1300: listOfSpecViews := Array new:(self class slices size). ca@2557: editingSpecOnly := false. werner@1824: ! werner@1824: cg@2549: loadFromResourceSpec: aResourceSpec cg@2549: self columns:aResourceSpec copy. cg@2549: modified := false. cg@2549: hasSaved := false. cg@2549: self updateAfterColumnChange. cg@2549: ! cg@2549: werner@1824: setDefaultValuesInNewColumn:aDataSetColumnSpec werner@1825: "/ aDataSetColumnSpec readSelector: #'valueAtColumnIndex:'. werner@1825: "/ aDataSetColumnSpec writeSelector: #'valueAtColumnIndex:put:'. werner@1825: "/ aDataSetColumnSpec backgroundSelector: #'bgAtRowIndex:columnIndex:'. werner@1825: "/ aDataSetColumnSpec foregroundSelector: #'fgAtRowIndex:columnIndex:'. werner@1825: "/ aDataSetColumnSpec selectSelector: #'selectAtColumnIndex:'. werner@1825: "/ aDataSetColumnSpec editorType: #InputField. ca@332: ! ! ca@332: cg@3045: !DataSetBuilder methodsFor:'menu & user actions'! tz@419: tz@419: accept tz@419: "accept changes made" tz@419: tz@419: |column type| tz@419: tz@825: super accept. tz@419: tz@419: (column := self selectedColumn) isNil ifTrue: [^self cancel]. tz@419: tz@419: type := (aspects at:#rendererType) value. tz@419: ca@818: type == #rowSelector ifTrue:[ penk@1731: #(label cg@1944: width minWidth usePreferredWidth editorType choices translatedChoices penk@1731: readSelector writeSelector printSelector visibilitySelector cg@2816: formatString formatSelector type converterSelector size height cg@2816: canSelect selectSelector showComboFieldSelector werner@1822: minValue maxValue ca@818: ) do:[:aKey| ca@818: (aspects at:aKey) value:nil ca@818: ] tz@419: ]. cg@1036: aspects keysAndValuesDo:[:aKey :aModel| cg@3096: column perform:aKey asMutator with: aModel value cg@1036: ]. cg@2262: self seqList at:self singleSelectedColumnIndex put:(self labelFromColumn:column). tz@419: self updateColumnView. tz@825: self cancel. cg@1974: self clearModified. cg@2816: cg@2816: "Modified: / 25-10-2010 / 10:41:55 / cg" tz@419: ! tz@419: tz@419: cancel tz@419: "remove all changes and reload selected column values" tz@419: tz@419: self updateInputFields. cg@1990: self enablingCommitButtonsHolder value:false. cg@1187: self clearModifiedFlag. cg@1990: self enablingCommitButtonsHolder value:false. cg@1014: cg@1014: "Modified: / 27.10.1998 / 14:41:41 / cg" tz@419: ! tz@419: cg@1036: cutOrDelete:isCut cg@1036: "remove selected column and optionally put it to the clipboard" cg@1036: cg@2262: |indices selectionModel| cg@2262: cg@2262: ((indices := self selectedColumnIndices) notEmpty and:[self askForItemModification]) ifFalse:[ ca@1390: ^ self ca@1390: ]. ca@1390: isCut ifTrue:[ cg@2262: self clipboard: (self selectedColumns) ca@1390: ]. cg@2262: cg@2262: selectionModel := self selectedColumnModel. cg@2262: selectionModel value:0. cg@2262: cg@2262: indices sort reverseDo:[:idx | cg@2262: columns removeIndex:idx. cg@2262: self seqList removeIndex:idx. cg@2262: ]. cg@2262: cg@2262: selectionModel value:((indices max) min:(columns size)). cg@2262: self updateColumnView. cg@2262: self updateInputFields. ca@1390: ca@1390: columns isEmpty ifTrue:[ ca@1390: self isColumnSelected value: false ca@1390: ]. ca@1390: self cancel. cg@1974: self setModified. cg@1036: ! cg@1036: cg@2262: doAddColumn:descr cg@2262: "adds a new column after the selected column or at the left (if nothing is selected)" cg@2262: ca@2557: columns add:descr afterIndex:(self singleSelectedColumnIndex min:columns size). cg@2262: self setDefaultValuesInNewColumn:descr. cg@2262: self seqList add:(descr label) afterIndex:self singleSelectedColumnIndex. cg@2262: self enablingCommitButtonsHolder value ifFalse:[ cg@2262: self selectedColumnModel value:self singleSelectedColumnIndex + 1 cg@2262: ]. cg@2262: self cancel. cg@2262: self updateColumnView. cg@2262: self setModified. cg@2262: ! cg@2262: ca@818: doBrowseRowClass tz@419: "browse class of columns spec" tz@419: tz@419: |cls| tz@419: ca@983: (cls := self resolveRowClass) notNil cg@2401: ifTrue: [Smalltalk browseInClass:cls] cg@842: ifFalse:[self information:'No class defined !!'] cg@842: cg@842: "Modified: / 20.5.1998 / 03:48:04 / cg" tz@419: ! tz@419: tz@825: doCopy cg@2262: "copy selected columns to the clipboard" cg@2262: cg@2262: |cols| cg@2262: cg@2262: cols := self selectedColumns. cg@2262: cols notEmptyOrNil ifTrue:[ cg@2262: self clipboard:(cols deepCopy) tz@419: ] tz@419: ! tz@419: tz@419: doCreateColumn tz@419: "create a new column after selected column or at left (nothing selected)" tz@419: cg@2262: |label list dscs descr| cg@2262: cg@2262: "/ list := self seqList. cg@2262: "/ label := 'Column ', (list size + 1) printString. cg@2262: "/ columns add:(dscs := DataSetColumnSpec label:label selector:nil) afterIndex:selectedColumnIndex. cg@2262: "/ self setDefaultValuesInNewColumn:dscs. cg@2262: "/ self seqList add:label afterIndex:selectedColumnIndex. cg@2262: "/ self enablingCommitButtonsHolder value ifFalse:[ cg@2262: "/ self selectedColumnModel value:selectedColumnIndex + 1 cg@2262: "/ ]. cg@2262: "/ self cancel. cg@2262: "/ self updateColumnView. cg@2262: "/ self setModified. cg@2262: "/ cg@2262: cg@2262: label := 'Column ', (self seqList size + 1) printString. cg@2262: descr := DataSetColumnSpec label:label selector:nil. cg@2262: self doAddColumn:descr cg@2262: ! cg@2262: cg@2262: doCreateNonSelectableColumn cg@2262: "create a new column after selected column or at left (nothing selected)" cg@2262: cg@2262: |label list dscs descr| cg@2262: cg@2262: "/ list := self seqList. cg@2262: "/ label := 'Column ', (list size + 1) printString. cg@2262: "/ columns add:(dscs := DataSetColumnSpec label:label selector:nil) afterIndex:selectedColumnIndex. cg@2262: "/ self setDefaultValuesInNewColumn:dscs. cg@2262: "/ self seqList add:label afterIndex:selectedColumnIndex. cg@2262: "/ self enablingCommitButtonsHolder value ifFalse:[ cg@2262: "/ self selectedColumnModel value:selectedColumnIndex + 1 cg@2262: "/ ]. cg@2262: "/ self cancel. cg@2262: "/ self updateColumnView. cg@2262: "/ self setModified. cg@2262: "/ cg@2262: cg@2262: label := 'Column ', (self seqList size + 1) printString. cg@2262: descr := DataSetColumnSpec label:label selector:nil. cg@2262: descr canSelect:false. cg@2262: self doAddColumn:descr tz@419: ! tz@419: tz@825: doCut tz@419: "remove selected column and put it to the clipboard" tz@419: cg@1036: self cutOrDelete:true tz@419: ! tz@419: ca@818: doDefineRowClass tz@419: "launch a dialog to define class and superclass" tz@419: cg@1382: |aspects cls oldClass oldSuper val classNameChannel superclassNameChannel| tz@419: tz@419: aspects := IdentityDictionary new. ca@818: oldClass := rowClass. ca@818: oldSuper := rowSuperClass. tz@419: tz@419: [true] tz@419: whileTrue: tz@419: [ cg@1382: rowClass notNil ifTrue:[ cg@1382: (cls := self resolveRowClass) notNil ifTrue:[ ca@818: rowSuperClass := cls superclass name asString tz@419: ]. cg@1382: val := rowClass cg@1382: ] ifFalse:[ cg@1382: val := 'DSVRow' tz@419: ]. cg@1382: aspects at:#classNameChannel put:(classNameChannel := ValueHolder with:val). tz@419: ca@818: rowSuperClass notNil cg@1382: ifTrue: [val := rowSuperClass] cg@1382: ifFalse:[val := 'Object']. cg@1382: aspects at:#superclassNameChannel put:(superclassNameChannel := ValueHolder with:val). tz@419: tz@419: (self openDialogInterface:#defineClassNameSpec withBindings:aspects) tz@419: ifFalse: tz@419: [ ca@818: rowClass := oldClass. ca@818: rowSuperClass := oldSuper. tz@419: ^self tz@419: ]. cg@1382: rowClass := (classNameChannel value) withoutSeparators. cg@1382: rowSuperClass := (superclassNameChannel value) withoutSeparators. tz@419: ca@818: rowClass size == 0 tz@419: ifTrue: tz@419: [ ca@818: rowClass := nil. tz@419: self information:'no valid className' tz@419: ] tz@419: ifFalse: tz@419: [ ca@983: cls := self resolveRowClass. tz@419: tz@419: cls notNil ifTrue:[cls := cls superclass name asString]. tz@419: ca@818: rowSuperClass size == 0 tz@419: ifTrue: tz@419: [ tz@419: cls notNil ifTrue:[ ca@818: rowSuperClass := cls tz@419: ] ifFalse:[ ca@818: rowSuperClass := 'Object' tz@419: ]. tz@419: self information: 'set superclassName' tz@419: ] tz@419: ifFalse: tz@419: [ tz@825: (cls isNil or:[rowSuperClass = cls]) ifTrue:[^self]. ca@818: self information:('A global named ' , rowClass , ' exists,\' , ca@818: 'but is not a subclass of ' , rowSuperClass, '.\\' , tz@419: 'Check and try again if that is not what you want.') withCRs. tz@419: ca@818: rowSuperClass := cls tz@419: ] tz@419: ] tz@419: ] cg@846: cg@846: "Modified: / 21.5.1998 / 03:08:42 / cg" tz@419: ! tz@419: tz@825: doDelete tz@825: "remove selected column and put it to the clipboard" tz@825: cg@1036: self cutOrDelete:false cg@1036: tz@825: ! tz@825: tz@419: doGenerateCode tz@419: "generate code for column values" tz@419: tz@419: |cls superclass| tz@419: ca@818: rowClass isNil ifTrue:[^self information:'No class defined!!']. ca@983: cls := self resolveRowClass. tz@419: tz@419: cls isNil tz@419: ifTrue: tz@419: [ ca@818: superclass := Smalltalk resolveName:rowSuperClass inClass:self class. tz@419: tz@419: superclass isNil ifTrue:[^self information:'No superclass defined!!']. ca@818: (self confirm:'create ' , rowClass , ' ?') ifFalse:[^self]. ca@818: cls := superclass subclass:rowClass asSymbol tz@419: instanceVariableNames:'' tz@419: classVariableNames:'' tz@419: poolDictionaries:'' tz@419: category:'Applications'. tz@419: ]. tz@419: tz@419: self generateChoicesIn:cls. tz@419: self generateMenuIn:cls. tz@419: self generatePrintSelectorIn:cls. tz@419: self generateReadSelectorIn:cls. tz@419: self generateBackgroundSelectorIn:cls. tz@419: self generateForegroundSelectorIn:cls. tz@419: self generateSelectSelectorIn:cls. tz@419: self generateWriteSelectorIn:cls. tz@419: self generateDoubleClickSelectorIn:cls. ca@983: self generateRowSeparatorSelectorIn:cls. cg@1009: self generateShowComboFieldSelectorIn:cls. cg@1009: tz@419: ! tz@419: tz@419: doMoveColumn:upOrDown tz@419: "move selected column up or down" tz@419: ca@2558: |idx list label col size tabIndex| tz@419: cg@2262: (idx := self singleSelectedColumnIndex) == 0 ifTrue:[^self]. tz@419: list := self seqList. tz@419: size := list size. tz@419: ca@2558: size > 1 ifFalse:[ ^ self ]. ca@2558: tz@419: selectedColumnIndex := 0. ca@2558: tabIndex := self tabModel value. ca@2558: tz@419: label := list at:idx. tz@419: col := columns at:idx. tz@419: list removeIndex:idx. tz@419: columns removeIndex:idx. tz@419: cg@2262: upOrDown == #up ifTrue:[ tz@419: idx == 1 ifTrue:[idx := size] tz@419: ifFalse:[idx := idx - 1] cg@2262: ] ifFalse:[ tz@419: idx == size ifTrue:[idx := 1] tz@419: ifFalse:[idx := idx + 1] tz@419: ]. tz@419: columns add:col beforeIndex:idx. ca@2558: list add:label beforeIndex:idx. ca@2558: tz@419: self selectedColumnModel value:idx. tz@419: self updateColumnView. ca@2558: self tabModel value:tabIndex. ca@2558: cg@1974: self setModified. tz@419: ! tz@419: cg@2262: doMoveDown cg@2262: self doMoveColumn:#down cg@2262: ! cg@2262: cg@2262: doMoveUp cg@2262: self doMoveColumn:#up cg@2262: ! cg@2262: tz@825: doPaste tz@419: "paste clipboard copy column after selected column or at left (nothing selected)" tz@419: cg@2262: |cols idx newSel| cg@2262: cg@2262: self askForItemModification ifFalse: [^ self]. cg@2262: cg@2262: cols := self class clipboard. cg@2262: cols isEmptyOrNil ifTrue:[^ self]. cg@2262: cg@2262: idx := (self selectedColumnIndices) isEmpty cg@2262: ifTrue:[ columns size ] cg@2262: ifFalse:[ self selectedColumnIndices max ]. cg@2262: cg@2262: newSel := OrderedCollection new. cg@2262: cols do:[:col | cg@2262: | lbl| cg@2262: cg@2262: lbl := self labelFromColumn:col. cg@2262: cg@2262: columns add:(col deepCopy) afterIndex:idx. cg@2262: self seqList add:lbl afterIndex:idx. cg@2262: idx := idx + 1. cg@2262: newSel add:idx. cg@2262: ]. tz@419: cg@1990: self enablingCommitButtonsHolder value ifFalse:[ cg@2262: self selectedColumnModel value:newSel "/idx ca@818: ]. tz@419: self updateColumnView. tz@556: self updateInputFields. cg@1974: self setModified. ca@818: ! ca@818: ca@818: doPickColumns ca@818: ca@818: |view cls| ca@818: ca@818: view := Screen current viewFromUser. ca@818: cls := view class. ca@818: ca@818: (cls == DSVColumnView or:[cls == DataSetView or:[cls == DSVLabelView]]) ifTrue:[ ca@818: self columns:(view columnView columnDescriptors) ca@818: ] ca@818: ! ca@818: ca@818: doSave cg@1144: |cls dst spc category mthd excla code resourceType| ca@818: cg@2549: editingSpecOnly == true ifTrue:[ cg@2549: acceptedColumns := columns. cg@2549: hasSaved := true. cg@2549: self clearModified. cg@2549: ^ self. cg@2549: ]. cg@2549: ca@818: (columns size ~~ 0 and:[super doSave]) ifFalse:[ ca@818: ^ nil ca@818: ]. ca@983: ca@818: cls := self resolveName:specClass. ca@818: dst := columns collect:[:aCol| aCol literalArrayEncoding ]. sv@3329: spc := WriteStream on:''. cg@1105: spc nextPutAll:' ^'. ca@818: UISpecification prettyPrintSpecArray:dst asArray on:spc indent:4. ca@818: spc := spc contents. ca@818: ca@818: "/ if that method already exists, do not overwrite the category ca@818: ca@818: resourceType := self class resourceType. ca@818: category := resourceType, ' specs'. ca@818: ca@818: (mthd := cls class compiledMethodAt:specSelector) notNil ifTrue:[ ca@818: category := mthd category. ca@818: ]. ca@818: ca@818: excla := Character excla asString. ca@818: ca@818: code := excla ca@818: , (cls name , ' class methodsFor:' , category storeString) ca@818: , excla , '\\' ca@818: ca@818: , specSelector , '\' ca@818: , (self class codeGenerationComment replChar:$!! withString:'!!!!') ca@818: , '\\ "\' ca@818: , (' DataSetBuilder new openOnClass:' , cls name , ' andSelector:#' , specSelector , '\') ca@818: , ' "\'. ca@818: ca@818: code := code ca@818: , '\' ca@818: , ' \\' ca@818: , spc ca@818: , '\' ca@818: , (excla , ' ' , excla) ca@818: , '\\'. ca@818: ca@818: code := code withCRs. cg@3076: Class packageQuerySignal answer:cls package do:[ cg@3076: (ReadStream on:code) fileIn. cg@3076: ]. ca@818: ca@818: "/ self isStandAlone ifTrue: [self helpTool installHelpSpecsOnClass:self specClass]. ca@818: ca@818: self updateHistory. ca@818: self updateInfoLabel. ca@818: ca@818: hasSaved := true. cg@1974: self clearModified. cg@3076: cg@3076: "Modified: / 28-01-2014 / 21:57:35 / cg" ca@1619: ! ca@1619: ca@1619: openDocumentation ca@1619: self openHTMLDocument:'tools/uipainter/DataSetBuilder.html'. tz@419: ! ! tz@419: cg@3045: !DataSetBuilder methodsFor:'menu operations'! cg@3045: cg@3045: addCellSeparators cg@3045: self addRowSeparators. cg@3045: self addColumnSeparators. cg@3045: ! cg@3045: cg@3045: addColumnSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr showColSeparator:true cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: addLabelColumnSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr labelButtonType:#Button cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: addLabelSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr labelButtonType:#Button cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: addRowSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr showRowSeparator:true cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: alignColumns:how cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr columnAlignment:how cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: alignColumnsCentered cg@3045: self alignColumns:#centered cg@3045: ! cg@3045: cg@3045: alignColumnsLeft cg@3045: self alignColumns:#left cg@3045: ! cg@3045: cg@3045: alignColumnsRight cg@3045: self alignColumns:#right cg@3045: ! cg@3045: cg@3045: alignLabels:how cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr labelAlignment:how cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: alignLabelsCentered cg@3045: self alignLabels:#centered cg@3045: ! cg@3045: cg@3045: alignLabelsLeft cg@3045: self alignLabels:#left cg@3045: ! cg@3045: cg@3045: alignLabelsRight cg@3045: self alignLabels:#right cg@3045: ! cg@3045: cg@3045: makeAllCellsSelectable cg@3045: columns do:[:eachColDescr | cg@3045: eachColDescr canSelect:true cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: makeAllCellsUnselectable cg@3045: columns do:[:eachColDescr | cg@3045: eachColDescr canSelect:false cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: makeColumnsSelectable cg@3045: self makeColumnsSelectable:true cg@3045: ! cg@3045: cg@3045: makeColumnsSelectable:aBoolean cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr canSelect:aBoolean cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: makeColumnsUnselectable cg@3045: self makeColumnsSelectable:false cg@3045: ! cg@3045: cg@3045: makeSelectedCellsSelectable cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr canSelect:true cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: makeSelectedCellsUnselectable cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr canSelect:false cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: removeCellSeparators cg@3045: self removeRowSeparators. cg@3045: self removeColumnSeparators. cg@3045: ! cg@3045: cg@3045: removeColumnSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr showColSeparator:false cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: removeLabelColumnSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr labelButtonType:#Group cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: removeLabelSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr labelButtonType:#None cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: removeRowSeparators cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: eachColDescr showRowSeparator:false cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: selectedColumnsDo:aBlock cg@3045: selectedColumnIndex isCollection ifTrue:[ cg@3045: selectedColumnIndex do:[:idx | aBlock value:(columns at:idx)]. cg@3045: ] ifFalse:[ cg@3045: selectedColumnIndex ~~ 0 ifTrue:[ cg@3045: selectedColumnIndex notNil ifTrue:[ cg@3045: aBlock value:(columns at:selectedColumnIndex) cg@3045: ] cg@3045: ]. cg@3045: ]. cg@3045: ! cg@3045: cg@3045: setCellColorSelectors cg@3045: |fgSelector bgSelector| cg@3045: cg@3045: fgSelector := Dialog request:'FG-Selector for all selected Columns (accept empty for none):'. cg@3045: fgSelector isNil ifTrue:[^ self]. cg@3045: cg@3045: bgSelector := Dialog request:'BG-Selector for all selected Columns (accept empty for none):'. cg@3045: bgSelector isNil ifTrue:[^ self]. cg@3045: cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: bgSelector notEmpty ifTrue:[ cg@3045: eachColDescr backgroundSelector:bgSelector cg@3045: ]. cg@3045: fgSelector notEmpty ifTrue:[ cg@3045: eachColDescr foregroundSelector:fgSelector cg@3045: ]. cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: setSelectedCellColorSelectors cg@3045: |fgSelector bgSelector| cg@3045: cg@3045: fgSelector := Dialog request:'Selected FG-Selector for all selected Columns (accept empty for none):'. cg@3045: fgSelector isNil ifTrue:[^ self]. cg@3045: cg@3045: bgSelector := Dialog request:'Selected BG-Selector for all selected Columns (accept empty for none):'. cg@3045: bgSelector isNil ifTrue:[^ self]. cg@3045: cg@3045: self selectedColumnsDo:[:eachColDescr | cg@3045: bgSelector notEmpty ifTrue:[ cg@3045: eachColDescr selectedBackgroundSelector:bgSelector cg@3045: ]. cg@3045: fgSelector notEmpty ifTrue:[ cg@3045: eachColDescr selectedForegroundSelector:fgSelector cg@3045: ]. cg@3045: ]. cg@3045: self updateAfterOperation. cg@3045: ! cg@3045: cg@3045: updateAfterOperation cg@3045: self updateColumnView. cg@3045: self updateInputFields. cg@3045: self setModified. cg@3045: ! ! cg@3045: cg@3045: !DataSetBuilder methodsFor:'private'! cg@3045: cg@3045: labelFromColumn:aColumn cg@3045: |label| cg@3045: cg@3045: aColumn rendererType == #rowSelector ifTrue:[ cg@3045: ^ 'Row Selector' cg@3045: ]. cg@3045: label := aColumn label. cg@3045: label isNil ifTrue:[^ nil]. cg@3045: label isString ifTrue:[^ label]. cg@3045: cg@3406: "/ is a collection of things? cg@3406: label notEmpty ifTrue:[ cg@3045: label := label at:1. cg@3045: ]. cg@3045: ^ label printString cg@3406: cg@3406: "Modified (comment): / 17-02-2017 / 08:36:27 / cg" cg@3045: ! cg@3045: cg@3045: labelInPreviewPressed:anIndex cg@3045: (self componentAt:#labelAndColumns) selection:anIndex cg@3045: ! cg@3045: cg@3045: updateColumnView cg@3045: "updates the column view from column descriptions" cg@3045: cg@3045: |size previewColumns columnList| cg@3045: cg@3045: columnView notNil ifTrue:[ cg@3045: columnList := List new. cg@3045: previewColumns := OrderedCollection new. cg@3045: cg@3045: (size := columns size) ~~ 0 ifTrue:[ cg@3045: columns do:[:aCol| cg@3045: previewColumns add:(aCol copy) cg@3045: ]. cg@3045: previewColumns keysAndValuesDo:[:anIndex :column| cg@3045: column cg@3045: readSelector: #at:; cg@3045: writeSelector: #at:put:; cg@3045: backgroundSelector:nil; cg@3045: foregroundSelector:nil; cg@3045: rowSeparatorSelector:nil; cg@3045: selectSelector: nil; cg@3045: showComboFieldSelector: nil; cg@3045: selectSelector: nil; cg@3045: doubleClickedSelector: nil; cg@3045: printSelector: nil; cg@3045: visibilitySelector: nil; cg@3045: menu: nil; cg@3045: labelActionSelector:#labelInPreviewPressed:; cg@3045: labelActionArgument:anIndex; cg@3045: choices:#choices; cg@3045: sortSelector: nil; cg@3045: isSortable: false cg@3045: ]. cg@3045: #(' 1' ' 2' ' x') do:[:suffix| cg@3045: |oneRow| cg@3045: cg@3045: oneRow := Row new:size. cg@3045: 1 to:size do:[:i | oneRow at: i put: ('Cell%1-%2' bindWith:suffix with:i)]. cg@3045: columnList add: oneRow. cg@3045: ] cg@3045: ]. cg@3045: cg@3045: columnView list: #(). cg@3045: columnView columnDescriptors: previewColumns. cg@3045: columnView list: columnList. cg@3045: ]. cg@3045: cg@3045: "Modified: / 27.10.1998 / 14:41:16 / cg" cg@3045: ! cg@3045: cg@3045: updateInputFields cg@3045: "reloads item value into input fields" cg@3045: cg@3045: |column notifyValue| cg@3045: cg@3045: (column := self selectedColumn) isNil ifTrue:[ cg@3045: self tabModel value:0. cg@3045: ] ifFalse:[ cg@3045: notifyValue := nil. "/ old: '' -> problems with Toggles (asBoolean) cg@3045: cg@3045: aspects do:[:anAspect| anAspect value:notifyValue ]. cg@3045: aspects keysAndValuesDo:[:aKey :aModel | cg@3045: aModel value:(column perform:aKey) withoutNotifying: self cg@3045: ]. cg@3045: mawalch@3529: "/ REPLACE nil by empty string for specific inputFields without an adapter cg@3045: #( #labelActionArgument #formatString #id ) do:[:aKey| |model| cg@3045: model := aspects at:aKey. cg@3045: model value isNil ifTrue:[model value:notifyValue withoutNotifying: self] cg@3045: ]. cg@3045: cg@3045: tabSelection == 0 ifTrue:[self tabModel value:1]. cg@3045: ]. mawalch@3529: mawalch@3529: "Modified (comment): / 24-01-2018 / 10:41:17 / mawalch" cg@3045: ! ! cg@3045: cg@3045: !DataSetBuilder methodsFor:'selection'! cg@3045: cg@3045: selectedColumn cg@3045: "returns selected column or nil" cg@3045: cg@3045: selectedColumnIndex isCollection ifTrue:[ cg@3045: ^ selectedColumnIndex size == 1 cg@3045: ifTrue:[ columns at:selectedColumnIndex first ] cg@3045: ifFalse:[ nil ] cg@3045: ]. cg@3045: cg@3045: ^selectedColumnIndex == 0 cg@3045: ifFalse:[columns at:selectedColumnIndex ifAbsent: nil] cg@3045: ifTrue: [nil] cg@3045: ! cg@3045: cg@3045: selectedColumnIndex cg@3045: "returns selected column index or 0" cg@3045: cg@3045: ^selectedColumnIndex cg@3045: ! cg@3045: cg@3045: selectedColumnIndex:something cg@3045: "changes selected column and updates specifications" cg@3045: cg@3045: something == selectedColumnIndex ifFalse:[ cg@3045: selectedColumnIndex := something ? 0. cg@3045: "/ self assert:( selectedColumnIndex <= columns size ). cg@3045: "/ self assert:( selectedColumnIndex <= self seqList size ). cg@3045: self isColumnSelected value: true cg@3045: ]. cg@3045: ! cg@3045: cg@3045: selectedColumnIndices cg@3045: "returns selected column indices or #()" cg@3045: cg@3045: selectedColumnIndex == 0 ifTrue:[ ^ #() ]. cg@3045: selectedColumnIndex isNumber ifTrue:[ ^ Array with:selectedColumnIndex ]. cg@3045: ^selectedColumnIndex cg@3045: ! cg@3045: cg@3045: selectedColumns cg@3045: selectedColumnIndex isCollection ifTrue:[ cg@3045: ^ selectedColumnIndex collect:[:idx | columns at:idx] cg@3045: ]. cg@3045: cg@3045: ^ selectedColumnIndex == 0 cg@3045: ifFalse:[ Array with:(columns at:selectedColumnIndex) ] cg@3045: ifTrue: [ #() ] cg@3045: ! cg@3045: cg@3045: singleSelectedColumnIndex cg@3045: selectedColumnIndex isCollection ifTrue:[ cg@3045: ^ selectedColumnIndex size == 1 cg@3045: ifTrue:[ selectedColumnIndex first ] cg@3045: ifFalse:[ 0 ] cg@3045: ]. cg@3045: cg@3045: ^ selectedColumnIndex cg@3045: ! cg@3045: cg@3045: tabSelection:something cg@3045: "changes selected tab and set corresponding specification" cg@3045: cg@3045: |view spec| cg@3045: cg@3045: something == tabSelection ifTrue:[^self]. cg@3045: cg@3045: (tabSelection := something) isNil ifTrue:[ cg@3045: tabSelection == 0 ifTrue:[^ self]. cg@3045: tabSelection := 0. cg@3045: ]. cg@3045: cg@3045: self selectedColumn isNil ifTrue:[ cg@3045: tabSelection ~~ 0 ifTrue:[ cg@3045: self tabModel value:0 cg@3045: ] ifFalse:[ cg@3045: self canvasHolder value:nil cg@3045: ]. cg@3045: ^ self cg@3045: ]. cg@3045: cg@3045: tabSelection == 0 ifTrue:[ cg@3045: ^ self tabModel value:1. cg@3045: ]. cg@3045: cg@3045: (view := listOfSpecViews at:tabSelection) isNil ifTrue:[ cg@3045: view := SimpleView new. cg@3045: spec := (self class slices at:tabSelection) last. cg@3045: cg@3045: "/ view client:nil spec:(self class interfaceSpecFor:spec) builder:(self builder). cg@3045: view client:self spec:spec builder:(self builder). cg@3045: listOfSpecViews at:tabSelection put:view. cg@3045: ]. cg@3045: self canvasHolder value:view cg@3045: ! ! cg@3045: cg@3045: !DataSetBuilder methodsFor:'startup & release'! cg@3045: cg@3045: commonPostBuild cg@3045: columnView := self componentAt:#columnView. cg@3045: cg@3045: columns notEmpty ifTrue: [ cg@3045: self tabModel value: 1. cg@3045: self selectedColumnModel value:nil; value:1. "/ toggle to force change cg@3045: self updateInputFields. cg@3045: self updateInfoLabel. cg@3045: self updateHistory cg@3045: ]. cg@3045: cg@3045: (self componentAt: #labelAndColumns) cg@3045: selectConditionBlock: [:i|self askForItemModification]; cg@3045: action: [:i|self cancel]; cg@3045: selection: 1. cg@3045: cg@3045: "/ using masters infoHolder ? sv@3540: self useAlienInfoLabel ifTrue:[ cg@3045: (builder componentAt:#mainPanel) layout bottomOffset:0. cg@3045: (builder componentAt:#infoBarSubSpec) beInvisible sv@3534: ] sv@3534: sv@3534: "Modified: / 20-02-2018 / 13:05:37 / stefan" cg@3045: ! cg@3045: cg@3045: openModal cg@3045: "sets the modalOpened flag, so later, cg@3045: there is no need to ask for saving into a class" cg@3045: cg@3045: modalOpened := true. cg@3045: super openModal cg@3045: ! cg@3045: cg@3045: openModalOnResourceSpec: aListSpec cg@3045: "sets the modalOpened flag, so later, cg@3045: there is no need to ask for saving into a class" cg@3045: cg@3045: modalOpened := true. cg@3045: super openModalOnResourceSpec: aListSpec cg@3045: cg@3045: cg@3045: ! cg@3045: cg@3045: postBuildListOfItemsView:aView cg@3045: listOfItemsView := aView cg@3045: ! cg@3045: cg@3045: postBuildSpecView:aView cg@3045: listOfItemsView := aView cg@3045: ! cg@3045: cg@3045: postOpenWith:aBuilder cg@3045: "reset keyboardProcessor for menuBar" cg@3045: cg@3045: super postOpenWith:aBuilder. cg@3045: aBuilder keyboardProcessor menuBar:nil. cg@3045: self windowGroup addPreEventHook:self. cg@3045: ! ! cg@3045: cg@1004: !DataSetBuilder::Row methodsFor:'accessing'! cg@1004: cg@1004: choices cg@1004: ^ #( 'foo' 'bar' 'baz' ) cg@1004: cg@1004: cg@1004: ! ! cg@1004: cg@1004: !DataSetBuilder::Row methodsFor:'message handling'! cg@1004: cg@1004: doesNotUnderstand:aMessage cg@3288: "does not understand message; ignore" cg@3288: cg@3288: ('[DataSetBuilder::Row] warning: message completely ignored: ',aMessage selector) errorPrintCR. cg@1004: ^ nil cg@1004: ! ! cg@1004: ca@332: !DataSetBuilder class methodsFor:'documentation'! ca@332: ca@332: version ca@332: ^ '$Header$' cg@2625: ! cg@2625: cg@2625: version_CVS cg@2625: ^ '$Header$' ca@332: ! ! cg@2944: