--- a/TabListEditor.st Thu Apr 13 12:54:09 2000 +0200
+++ b/TabListEditor.st Thu Apr 13 14:32:20 2000 +0200
@@ -12,8 +12,10 @@
+"{ Package: '.:stx/libtool2' }"
+
ResourceSpecEditor subclass:#TabListEditor
- instanceVariableNames:'rebuildMode testView listOfTabs selectedIndex'
+ instanceVariableNames:'listOfTabs'
classVariableNames:''
poolDictionaries:''
category:'Interface-UIPainter'
@@ -96,6 +98,16 @@
editAgument
accessCharacterPosition
shortcutKey
+ activeHelpKey
+
+ majorKey
+ minorKey
+ createNewBuilder
+
+ hasHorizontalScrollBar
+ hasVerticalScrollBar
+ miniScrollerHorizontal
+ miniScrollerVertical
)
! !
@@ -120,12 +132,15 @@
#addTabItem
'Adds a new tab item.'
-#argument
-'An optional argument stored with the tab item.'
+#autoHideScrollBars
+'ScrollBars should be made invisible dynamically, if there is nothing to scroll.'
#canSelect
'Turns on/off whether the tab item is selectable.'
+#createNewBuilder
+'Create a new builder for the application; the application use its own aspects.'
+
#color
'Defines the foreground color of the label. The default color derives from the style sheet.'
@@ -141,12 +156,48 @@
#fileSave
'Saves current tab list.'
+#horizontalScroller
+'Enable horizontal scrollability.'
+
+#horizontalMiniScroller
+'Use a mini-scroller as horizontal scrollbar.'
+
+#majorKey
+'Name of the class to be started; if empty, the application itself is used.'
+
+#minorKey
+'Message sent to the class which returns the window specification (default: #windowSpec).'
+
+#verticalScroller
+'Enable vertical scrollability.'
+
+#verticalMiniScroller
+'Use a mini-scroller as vertical scrollbar.'
+
+#canvasTab
+'Define an application, which is started if the tab is pressed the first time.'
+
+#basicTab
+'Define the basic attributes.'
+
+#detailTab
+'Define the optional/specific attributes.'
+
#label
'Label of the tab item.'
#labelDerivesFromApplication
'If turned on, the label''s string is a selector returning a string or bitmap image, which is used as logo in the tab item.'
+#detailsAccessCharaterPosition
+'Index of the access character position of the textual label (optional).'
+
+#detailsAccelerator
+'Key to be pressed to select the tab item from the keyboard (accelerator key).'
+
+#detailsArgument
+'An optional argument stored with the tab item.'
+
#testPreview
'Turns on/off preview of the tab list.'
@@ -174,7 +225,7 @@
!TabListEditor class methodsFor:'interface specs'!
-tabSpec
+basicSpec
"This resource specification was automatically generated
by the UIPainter of ST/X."
@@ -182,22 +233,22 @@
the UIPainter may not be able to read the specification."
"
- UIPainter new openOnClass:TabListEditor andSelector:#tabSpec
- TabListEditor new openInterface:#tabSpec
+ UIPainter new openOnClass:TabListEditor andSelector:#basicSpec
+ TabListEditor new openInterface:#basicSpec
"
<resource: #canvas>
^
#(#FullSpec
- #name: #tabSpec
+ #name: #basicSpec
#window:
#(#WindowSpec
- #label: 'Tab Basic'
- #name: 'Tab Basic'
+ #label: 'Basic'
+ #name: 'Basic'
#min: #(#Point 10 10)
#max: #(#Point 1280 1024)
- #bounds: #(#Rectangle 12 22 440 249)
+ #bounds: #(#Rectangle 803 137 1232 347)
)
#component:
#(#SpecCollection
@@ -209,19 +260,16 @@
#resizeForLabel: true
)
#(#InputFieldSpec
- #attributes:
- #(#LabelField
- nil #label
- nil #tabable
- true
- )
#name: 'label'
#layout: #(#LayoutFrame 100 0 15 0 -5 1.0 37 0)
#activeHelpKey: #label
#tabable: true
#model: #label
#group: #inputGroup
- #acceptOnLostFocus: true
+ #immediateAccept: true
+ #acceptOnReturn: false
+ #acceptOnTab: false
+ #acceptOnLostFocus: false
#acceptChannel: #acceptChannel
#modifiedChannel: #modifiedChannel
#acceptOnPointerLeave: false
@@ -233,20 +281,17 @@
#resizeForLabel: true
)
#(#InputFieldSpec
- #attributes:
- #(#label
- nil #shortcutKey
- nil #tabable
- true
- )
#name: 'shortcutKey'
#layout: #(#LayoutFrame 100 0 44 0 -5 1.0 66 0)
- #activeHelpKey: #label
+ #activeHelpKey: #detailsAccelerator
#tabable: true
#model: #shortcutKey
#group: #inputGroup
#type: #symbolOrNil
- #acceptOnLostFocus: true
+ #immediateAccept: true
+ #acceptOnReturn: false
+ #acceptOnTab: false
+ #acceptOnLostFocus: false
#acceptChannel: #acceptChannel
#modifiedChannel: #modifiedChannel
#acceptOnPointerLeave: false
@@ -258,21 +303,16 @@
#resizeForLabel: true
)
#(#InputFieldSpec
- #attributes:
- #(#tabable
- true #ArgumentField
- nil #editAgument
- nil
- )
#name: 'editAgument'
#layout: #(#LayoutFrame 100 0 73 0 -5 1.0 95 0)
- #activeHelpKey: #argument
+ #activeHelpKey: #detailsArgument
#tabable: true
#model: #editAgument
#group: #inputGroup
- #acceptOnReturn: true
- #acceptOnTab: true
- #acceptOnLostFocus: true
+ #immediateAccept: true
+ #acceptOnReturn: false
+ #acceptOnTab: false
+ #acceptOnLostFocus: false
#acceptChannel: #acceptChannel
#modifiedChannel: #modifiedChannel
#acceptOnPointerLeave: false
@@ -284,30 +324,22 @@
#resizeForLabel: true
)
#(#InputFieldSpec
- #attributes:
- #(#label
- nil #accessCharacterPos
- nil #tabable
- true #accessCharacterPosition
- nil
- )
#name: 'accessCharacterPosition'
#layout: #(#LayoutFrame 278 0 103 0 -5 1.0 125 0)
- #activeHelpKey: #label
+ #activeHelpKey: #detailsAccessCharaterPosition
#tabable: true
#model: #accessCharacterPosition
#group: #inputGroup
#type: #number
- #acceptOnLostFocus: true
+ #immediateAccept: true
+ #acceptOnReturn: false
+ #acceptOnTab: false
+ #acceptOnLostFocus: false
#acceptChannel: #acceptChannel
#modifiedChannel: #modifiedChannel
#acceptOnPointerLeave: false
)
#(#CheckBoxSpec
- #attributes:
- #(#tabable
- true
- )
#label: 'Application provides translation '
#name: 'translateLabel'
#layout: #(#Point 96 135)
@@ -315,14 +347,259 @@
#tabable: true
#model: #translateLabel
)
+ #(#LabelSpec
+ #label: 'Help Key:'
+ #name: 'activeHelp'
+ #layout: #(#AlignmentOrigin 98 0 190 0 1 0.5)
+ #resizeForLabel: true
+ )
+ #(#InputFieldSpec
+ #name: 'activeHelpKey'
+ #layout: #(#LayoutFrame 100 0 179 0 -5 1.0 201 0)
+ #activeHelpKey: #label
+ #tabable: true
+ #model: #activeHelpKey
+ #group: #inputGroup
+ #type: #symbolOrNil
+ #immediateAccept: true
+ #acceptOnReturn: false
+ #acceptOnTab: false
+ #acceptOnLostFocus: false
+ #acceptChannel: #acceptChannel
+ #modifiedChannel: #modifiedChannel
+ #acceptOnPointerLeave: false
+ )
+ )
+
+ )
+ )
+!
+
+canvasSpec
+ "This resource specification was automatically generated
+ by the UIPainter of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the UIPainter may not be able to read the specification."
+
+ "
+ UIPainter new openOnClass:TabListEditor andSelector:#canvasSpec
+ TabListEditor new openInterface:#canvasSpec
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #canvasSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Canvas'
+ #name: 'Canvas'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1280 1024)
+ #bounds: #(#Rectangle 803 137 1186 357)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#LabelSpec
+ #label: 'Class Name:'
+ #name: 'majorKeyLabel'
+ #layout: #(#AlignmentOrigin 98 0 26 0 1 0.5)
+ #resizeForLabel: true
+ )
+ #(#InputFieldSpec
+ #name: 'majorKeyField'
+ #layout: #(#LayoutFrame 100 0 15 0 -5 1.0 37 0)
+ #activeHelpKey: #majorKey
+ #tabable: true
+ #model: #majorKey
+ #group: #inputGroup
+ #type: #symbolOrNil
+ #immediateAccept: true
+ #acceptOnReturn: false
+ #acceptOnTab: false
+ #acceptOnLostFocus: false
+ #modifiedChannel: #modifiedChannel
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Spec. Selector:'
+ #name: 'minorKeyLabel'
+ #layout: #(#AlignmentOrigin 98 0 55 0 1 0.5)
+ #resizeForLabel: true
+ )
+ #(#InputFieldSpec
+ #name: 'minorKeyField'
+ #layout: #(#LayoutFrame 100 0 44 0 -5 1.0 66 0)
+ #activeHelpKey: #minorKey
+ #tabable: true
+ #model: #minorKey
+ #group: #inputGroup
+ #type: #symbolOrNil
+ #immediateAccept: true
+ #acceptOnReturn: false
+ #acceptOnTab: false
+ #acceptOnLostFocus: false
+ #modifiedChannel: #modifiedChannel
+ #acceptOnPointerLeave: false
+ )
+ #(#FramedBoxSpec
+ #label: 'Scroll Bars'
+ #name: 'FramedBox'
+ #layout: #(#LayoutFrame 0 0.0 119 0.0 0 1.0 214 0)
+ #labelPosition: #topLeft
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#HorizontalPanelViewSpec
+ #name: 'HorizontalPanel1'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+ #horizontalLayout: #fitSpace
+ #verticalLayout: #fitSpace
+ #horizontalSpace: 3
+ #verticalSpace: 3
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#ViewSpec
+ #name: 'Box1'
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#CheckBoxSpec
+ #label: 'Vertical'
+ #name: 'verticalScrollBarCheckBox'
+ #layout: #(#LayoutFrame 0 0.0 3 0 0 1.0 27 0)
+ #activeHelpKey: #verticalScroller
+ #tabable: true
+ #model: #hasVerticalScrollBar
+ )
+ #(#CheckBoxSpec
+ #label: 'Mini'
+ #name: 'miniScrollerVerticalCheckBox'
+ #layout: #(#LayoutFrame 0 0.0 32 0 0 1.0 56 0)
+ #activeHelpKey: #verticalMiniScroller
+ #tabable: true
+ #model: #miniScrollerVertical
+ )
+ )
+
+ )
+ #useDefaultExtent: true
+ )
+ #(#ViewSpec
+ #name: 'Box2'
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#CheckBoxSpec
+ #label: 'Horizontal'
+ #name: 'horizontalScrollBarCheckBox'
+ #layout: #(#LayoutFrame 0 0.0 3 0 0 1.0 27 0)
+ #activeHelpKey: #horizontalScroller
+ #tabable: true
+ #model: #hasHorizontalScrollBar
+ )
+ #(#CheckBoxSpec
+ #label: 'Mini'
+ #name: 'miniScrollerHorizontalCheckBox'
+ #layout: #(#LayoutFrame 0 0.0 32 0 0 1.0 56 0)
+ #activeHelpKey: #horizontalMiniScroller
+ #tabable: true
+ #model: #miniScrollerHorizontal
+ )
+ )
+
+ )
+ #extent: #(#Point 114 59)
+ )
+ #(#ViewSpec
+ #name: 'Box3'
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#LabelSpec
+ #label: 'Auto Hide:'
+ #name: 'Label1'
+ #layout: #(#LayoutFrame 0 0.0 6 0 0 1.0 23 0)
+ #translateLabel: true
+ #resizeForLabel: true
+ #adjust: #left
+ )
+ #(#PopUpListSpec
+ #label: 'Default'
+ #name: 'PopUpList1'
+ #layout: #(#LayoutFrame 0 0.0 32 0 0 1.0 54 0)
+ #tabable: true
+ #activeHelpKey: #autoHideScrollBars
+ #model: #autoHideScrollBars
+ #menu:
+ #(#Default
+ #On #Off
+ )
+ #useIndex: true
+ #showHandle: true
+ )
+ )
+
+ )
+ #extent: #(#Point 114 59)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
#(#CheckBoxSpec
- #attributes:
- #(#tabable
- true
- )
+ #label: 'Create New Builder'
+ #name: 'createNewBuilder'
+ #layout: #(#Point 97 75)
+ #model: #createNewBuilder
+ #activeHelpKey: #createNewBuilder
+ )
+ )
+
+ )
+ )
+!
+
+detailSpec
+ "This resource specification was automatically generated
+ by the UIPainter of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the UIPainter may not be able to read the specification."
+
+ "
+ UIPainter new openOnClass:TabListEditor andSelector:#detailSpec
+ TabListEditor new openInterface:#detailSpec
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #detailSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Details'
+ #name: 'Details'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1280 1024)
+ #bounds: #(#Rectangle 12 22 370 129)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#CheckBoxSpec
#label: 'Can Select'
#name: 'enabled'
- #layout: #(#Point 96 161)
+ #layout: #(#Point 46 14)
#activeHelpKey: #canSelect
#tabable: true
#model: #enabled
@@ -330,7 +607,7 @@
#(#LabelSpec
#label: 'Color:'
#name: 'ForegroundLabel'
- #layout: #(#AlignmentOrigin 98 0 209 0 1 0.5)
+ #layout: #(#AlignmentOrigin 46 0 62 0 1 0.5)
#resizeForLabel: true
#adjust: #right
)
@@ -340,7 +617,7 @@
true
)
#name: 'ForegroundColorMenu'
- #layout: #(#LayoutFrame 100 0 197 0 -5 1.0 219 0)
+ #layout: #(#LayoutFrame 48 0 50 0 -10 1.0 72 0)
#activeHelpKey: #color
#model: #labelForegroundColor
#labelsAreColored: false
@@ -373,10 +650,9 @@
#(#WindowSpec
#label: 'Tab List Editor'
#name: 'Tab List Editor'
- #layout: #(#LayoutFrame 58 0 290 0 659 0 707 0)
#min: #(#Point 440 280)
#max: #(#Point 1152 900)
- #bounds: #(#Rectangle 58 290 660 708)
+ #bounds: #(#Rectangle 17 449 488 816)
#menu: #menu
)
#component:
@@ -391,19 +667,28 @@
#(#VariableHorizontalPanelSpec
#name: 'VariablePanel'
#layout: #(#LayoutFrame 0 0.0 36 0.0 0 1.0 -26 1.0)
- #handles: #(#Any 0.259875 1.0)
#component:
#(#SpecCollection
#collection: #(
- #(#SequenceViewSpec
- #name: 'ColumnView'
+ #(#SelectionInListModelViewSpec
+ #attributes:
+ #(#vpext
+
+ #(#Array
+ #Point 0.264414
+ 1.0
+ )
+ )
+ #name: 'ListOfLabels'
+ #tabable: true
#model: #selectionHolder
#menu: #menuEdit
#hasHorizontalScrollBar: true
#hasVerticalScrollBar: true
#miniScrollerHorizontal: true
- #useIndex: true
- #sequenceList: #listOfLabels
+ #listModel: #listOfTabs
+ #highlightMode: #line
+ #selectConditionSelector: #askForItemModification
)
#(#ViewSpec
#name: 'SpecView'
@@ -411,24 +696,13 @@
#component:
#(#SpecCollection
#collection: #(
- #(#ViewSpec
- #name: 'TestView'
- #layout: #(#LayoutFrame 1 0.0 0 0.0 0 1.0 0 1.0)
- #component:
- #(#SpecCollection
- #collection: #(
- #(#TabViewSpec
- #name: 'TestTabsView'
- #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 0.5)
- )
- )
-
- )
- )
- #(#SubCanvasSpec
- #name: 'specCanvas'
+ #(#NoteBookViewSpec
+ #name: 'NoteBook'
#layout: #(#LayoutFrame 1 0.0 0 0.0 0 1.0 -30 1.0)
- #specHolder: #specChannel
+ #model: #noteBookModel
+ #menu: #noteBookTabList
+ #useIndex: true
+ #keepCanvasAlive: true
)
#(#UISubSpecification
#name: 'subSpec'
@@ -436,6 +710,13 @@
#majorKey: #ToolApplicationModel
#minorKey: #windowSpecForCommit
)
+ #(#NoteBookViewSpec
+ #name: 'TestNoteBook'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+ #visibilityChannel: #testMode
+ #menu: #testItemList
+ #useIndex: true
+ )
)
)
@@ -443,6 +724,7 @@
)
)
+ #handles: #(#Any 0.24053 1.0)
)
#(#UISubSpecification
#name: 'infoBarSubSpec'
@@ -456,6 +738,42 @@
)
! !
+!TabListEditor class methodsFor:'list specs'!
+
+noteBookTabList
+ "This resource specification was automatically generated
+ by the TabListEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the TabListEditor may not be able to read the specification."
+
+ "
+ TabListEditor new openOnClass:TabListEditor andSelector:#noteBookTabList
+ "
+
+ <resource: #tabList>
+
+ ^ #(
+ #(#TabItem
+ #label: 'Basic'
+ #activeHelpKey: #basicTab
+ #minorKey: #basicSpec
+ )
+ #(#TabItem
+ #label: 'Details'
+ #activeHelpKey: #detailTab
+ #minorKey: #detailSpec
+ )
+ #(#TabItem
+ #label: 'Canvas'
+ #activeHelpKey: #canvasTab
+ #minorKey: #canvasSpec
+ )
+ )
+
+ collect:[:aTab| TabItem new fromLiteralArrayEncoding:aTab ]
+! !
+
!TabListEditor class methodsFor:'menu specs'!
menu
@@ -551,7 +869,7 @@
#(
#(#MenuItem
#label: 'Tab Item'
- #value: #doCreateTabItem
+ #value: #doCreate
#activeHelpKey: #addTabItem
#labelImage: #(#ResourceRetriever nil #newTabItemIcon 'Tab Item')
)
@@ -586,7 +904,7 @@
#(#MenuItem
#label: 'Preview'
#activeHelpKey: #testPreview
- #enabled: #canShowTestMode
+ #enabled: #canToggleTestMode
#indication: #testMode
)
) nil
@@ -690,134 +1008,150 @@
<resource: #menu>
- ^
-
- #(#Menu
-
- #(
- #(#MenuItem
- #label: 'New'
- #isButton: true
- #value: #doNew
- #activeHelpKey: #fileNew
- #labelImage: #(#ResourceRetriever #Icon #newIcon)
- )
- #(#MenuItem
- #label: 'Load'
- #isButton: true
- #value: #doLoad
- #activeHelpKey: #fileLoad
- #labelImage: #(#ResourceRetriever #Icon #loadIcon)
- )
- #(#MenuItem
- #label: 'Save'
- #isButton: true
- #value: #doSave
- #activeHelpKey: #fileSave
- #labelImage: #(#ResourceRetriever #Icon #saveIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Cut'
- #isButton: true
- #value: #doCut
- #activeHelpKey: #editCut
- #enabled: #valueOfCanCut
- #labelImage: #(#ResourceRetriever #Icon #cutIcon)
- )
- #(#MenuItem
- #label: 'Copy'
- #isButton: true
- #value: #doCopy
- #activeHelpKey: #editCopy
- #enabled: #valueOfCanCopy
- #labelImage: #(#ResourceRetriever #Icon #copyIcon)
- )
- #(#MenuItem
- #label: 'Paste'
- #isButton: true
- #value: #doPaste
- #activeHelpKey: #editPaste
- #enabled: #valueOfCanPaste
- #labelImage: #(#ResourceRetriever #Icon #pasteIcon)
- )
- #(#MenuItem
- #label: 'Delete'
- #isButton: true
- #value: #doDelete
- #activeHelpKey: #editDelete
- #enabled: #valueOfCanCut
- #labelImage: #(#ResourceRetriever #Icon #deleteIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Add Tab Item'
- #isButton: true
- #value: #doCreateTabItem
- #activeHelpKey: #addTabItem
- #labelImage: #(#ResourceRetriever nil #newTabItemIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Move Tab Up'
- #isButton: true
- #value: #doMoveTabUpOrDown:
- #activeHelpKey: #editMoveUp
- #enabled: #canMoveTabItemUpOrDown
- #argument: #up
- #labelImage: #(#ResourceRetriever #Icon #upIcon)
- )
- #(#MenuItem
- #label: 'Move Tab Down'
- #isButton: true
- #value: #doMoveTabUpOrDown:
- #activeHelpKey: #editMoveDown
- #enabled: #canMoveTabItemUpOrDown
- #argument: #down
- #labelImage: #(#ResourceRetriever #Icon #downIcon)
- )
- #(#MenuItem
- #label: ''
- )
- #(#MenuItem
- #label: 'Preview'
- #activeHelpKey: #testPreview
- #enabled: #canShowTestMode
- #indication: #testMode
- )
- ) nil
- nil
+ ^
+ #(#Menu
+ #(
+ #(#MenuItem
+ #label: 'New'
+ #isButton: true
+ #value: #doNew
+ #activeHelpKey: #fileNew
+ #labelImage: #(#ResourceRetriever #Icon #newIcon)
+ )
+ #(#MenuItem
+ #label: 'Load'
+ #isButton: true
+ #value: #doLoad
+ #activeHelpKey: #fileLoad
+ #labelImage: #(#ResourceRetriever #Icon #loadIcon)
+ )
+ #(#MenuItem
+ #label: 'Save'
+ #isButton: true
+ #value: #doSave
+ #activeHelpKey: #fileSave
+ #labelImage: #(#ResourceRetriever #Icon #saveIcon)
+ )
+ #(#MenuItem
+ #label: ''
+ )
+ #(#MenuItem
+ #label: 'Cut'
+ #isButton: true
+ #value: #doCut
+ #activeHelpKey: #editCut
+ #enabled: #valueOfCanCut
+ #labelImage: #(#ResourceRetriever #Icon #cutIcon)
+ )
+ #(#MenuItem
+ #label: 'Copy'
+ #isButton: true
+ #value: #doCopy
+ #activeHelpKey: #editCopy
+ #enabled: #valueOfCanCopy
+ #labelImage: #(#ResourceRetriever #Icon #copyIcon)
+ )
+ #(#MenuItem
+ #label: 'Paste'
+ #isButton: true
+ #value: #doPaste
+ #activeHelpKey: #editPaste
+ #enabled: #valueOfCanPaste
+ #labelImage: #(#ResourceRetriever #Icon #pasteIcon)
+ )
+ #(#MenuItem
+ #label: 'Delete'
+ #isButton: true
+ #value: #doDelete
+ #activeHelpKey: #editDelete
+ #enabled: #valueOfCanCut
+ #labelImage: #(#ResourceRetriever #Icon #deleteIcon)
+ )
+ #(#MenuItem
+ #label: ''
+ )
+ #(#MenuItem
+ #label: 'Add Tab Item'
+ #isButton: true
+ #value: #doCreate
+ #activeHelpKey: #addTabItem
+ #labelImage: #(#ResourceRetriever nil #newTabItemIcon)
+ )
+ #(#MenuItem
+ #label: ''
+ )
+ #(#MenuItem
+ #label: 'Move Tab Up'
+ #isButton: true
+ #value: #doMoveTabUpOrDown:
+ #activeHelpKey: #editMoveUp
+ #enabled: #canMoveTabItemUpOrDown
+ #argument: #up
+ #labelImage: #(#ResourceRetriever #Icon #upIcon)
+ )
+ #(#MenuItem
+ #label: 'Move Tab Down'
+ #isButton: true
+ #value: #doMoveTabUpOrDown:
+ #activeHelpKey: #editMoveDown
+ #enabled: #canMoveTabItemUpOrDown
+ #argument: #down
+ #labelImage: #(#ResourceRetriever #Icon #downIcon)
+ )
+ )
+ nil
+ nil
)
! !
!TabListEditor methodsFor:'aspects'!
+autoHideScrollBars
+ |holder|
+
+ (holder := builder bindingAt:#autoHideScrollBars) isNil ifTrue:[
+ builder aspectAt:#autoHideScrollBars put:(holder := 1 asValue).
+ holder addDependent: self
+ ].
+ ^ holder.
+!
+
canMoveTabItemUpOrDown
+ ^ builder booleanValueAspectFor:#canMoveTabItemUpOrDown
+!
+
+hasHorizontalScrollBar
+ "automatically generated by UIPainter ..."
+
+ "*** the code below creates a default model when invoked."
+ "*** (which may not be the one you wanted)"
+ "*** Please change as required and accept it in the browser."
|holder|
- (holder := builder bindingAt:#canMoveTabItemUpOrDown) isNil ifTrue:[
- builder aspectAt:#canMoveTabItemUpOrDown put:(holder := false asValue).
+ (holder := builder bindingAt:#hasHorizontalScrollBar) isNil ifTrue:[
+ holder := true asValue.
+ builder aspectAt:#hasHorizontalScrollBar put:holder.
+"/ holder addDependent:self.
].
- ^ holder
-
+ ^ holder.
!
-canShowTestMode
+hasVerticalScrollBar
+ "automatically generated by UIPainter ..."
+
+ "*** the code below creates a default model when invoked."
+ "*** (which may not be the one you wanted)"
+ "*** Please change as required and accept it in the browser."
|holder|
- (holder := builder bindingAt:#canShowTestMode) isNil ifTrue:[
- builder aspectAt:#canShowTestMode put:(holder := false asValue).
+ (holder := builder bindingAt:#hasVerticalScrollBar) isNil ifTrue:[
+ holder := true asValue.
+ builder aspectAt:#hasVerticalScrollBar put:holder.
+"/ holder addDependent:self.
].
- ^ holder
-
+ ^ holder.
!
inputGroup
@@ -832,11 +1166,97 @@
!
-listOfLabels
- "returns a holder which keeps the list of tab labels
- "
+listOfTabs
+ ^ listOfTabs
+!
+
+majorKey
+ "automatically generated by UIPainter ..."
+
+ "*** the code below creates a default model when invoked."
+ "*** (which may not be the one you wanted)"
+ "*** Please change as required and accept it in the browser."
+
+ |holder|
+
+ (holder := builder bindingAt:#majorKey) isNil ifTrue:[
+ holder := ValueHolder new.
+ builder aspectAt:#majorKey put:holder.
+"/ holder addDependent:self.
+ ].
+ ^ holder.
+!
+
+miniScrollerHorizontal
+ "automatically generated by UIPainter ..."
+
+ "*** the code below creates a default model when invoked."
+ "*** (which may not be the one you wanted)"
+ "*** Please change as required and accept it in the browser."
+
+ |holder|
+
+ (holder := builder bindingAt:#miniScrollerHorizontal) isNil ifTrue:[
+ holder := true asValue.
+ builder aspectAt:#miniScrollerHorizontal put:holder.
+"/ holder addDependent:self.
+ ].
+ ^ holder.
+!
+
+miniScrollerVertical
+ "automatically generated by UIPainter ..."
+
+ "*** the code below creates a default model when invoked."
+ "*** (which may not be the one you wanted)"
+ "*** Please change as required and accept it in the browser."
- ^ builder listAspectFor:#listOfLabels
+ |holder|
+
+ (holder := builder bindingAt:#miniScrollerVertical) isNil ifTrue:[
+ holder := true asValue.
+ builder aspectAt:#miniScrollerVertical put:holder.
+"/ holder addDependent:self.
+ ].
+ ^ holder.
+!
+
+minorKey
+ "automatically generated by UIPainter ..."
+
+ "*** the code below creates a default model when invoked."
+ "*** (which may not be the one you wanted)"
+ "*** Please change as required and accept it in the browser."
+
+ |holder|
+
+ (holder := builder bindingAt:#minorKey) isNil ifTrue:[
+ holder := ValueHolder new.
+ builder aspectAt:#minorKey put:holder.
+"/ holder addDependent:self.
+ ].
+ ^ holder.
+!
+
+noteBookModel
+ |holder|
+
+ (holder := builder bindingAt:#noteBookModel) isNil ifTrue:[
+ holder := 0 asValue.
+ builder aspectAt:#noteBookModel put:holder.
+ ].
+ ^ holder.
+!
+
+noteBookTabList
+ "Generated by the TabListEditor"
+
+ |list|
+
+ (list := builder bindingAt:#noteBookTabList) isNil ifTrue:[
+ builder aspectAt:#noteBookTabList put:(list := self class noteBookTabList).
+ ].
+ ^ list
!
selectionHolder
@@ -845,21 +1265,21 @@
|holder|
(holder := builder bindingAt:#selectionHolder) isNil ifTrue:[
- holder := AspectAdaptor new subject:self; forAspect:#selectedIndex.
+ holder := 0 asValue.
builder aspectAt:#selectionHolder put:holder.
+ holder addDependent:self.
].
^ holder
!
-specChannel
- "holder which keeps the current tab specification
- "
+testItemList
|holder|
- (holder := builder bindingAt:#specChannel) isNil ifTrue:[
- builder aspectAt:#specChannel put:(holder := ValueHolder new).
+ (holder := builder bindingAt:#testItemList) isNil ifTrue:[
+ holder := ValueHolder new.
+ builder aspectAt:#testItemList put:holder.
].
- ^ holder
+ ^ holder.
!
testMode
@@ -879,31 +1299,18 @@
buildFromClass:aClass andSelector:aSelector
"build from class and selector
"
- |cls spec list selectionHolder|
+ |cls spec|
self testMode value: false.
- (selectionHolder := self selectionHolder) value:0.
+ self selection:0.
"if opened on a tab list"
- (aClass isNil and: [aSelector isNil and: [listOfTabs size > 0]])
- ifTrue:[
- listOfTabs notEmpty ifTrue:[
- selectionHolder value:1
- ].
- ^ nil
+ (aClass isNil and: [aSelector isNil and: [listOfTabs size > 0]]) ifTrue:[
+ listOfTabs notEmpty ifTrue:[self selection:1].
+ ^ nil
].
-
- self listOfLabels removeAll.
listOfTabs removeAll.
- testView notNil ifTrue:[
- testView lower
- ].
-
- rebuildMode := false.
-
- self canShowTestMode value: false.
-
cls := self resolveName:aClass.
specSelector := aSelector.
@@ -912,17 +1319,11 @@
(cls respondsTo:specSelector) ifTrue:[
spec := cls perform:specSelector.
- list := self listOfLabels.
spec size ~~ 0 ifTrue:[
-
- rebuildMode := true.
-
spec do:[:aTab|
- list add:aTab label.
listOfTabs add:aTab.
].
- rebuildMode := false.
self addToHistory:(cls name, ' ', specSelector) -> #loadFromMessage:
]
]
@@ -932,38 +1333,29 @@
modified := false.
listOfTabs notEmpty ifTrue:[
- self selectionHolder value:1
+ self selection:1
].
self updateInfoLabel
!
-buildFromResourceSpec: aListSpec
-
- self buildFromTabList: aListSpec
+buildFromResourceSpec:aListSpec
+ self buildFromTabList:aListSpec
!
buildFromTabList: aTabList
"build from a aTabList"
- |selectionHolder listOfLabels|
-
- rebuildMode := true.
-
- (selectionHolder := self selectionHolder) value: nil.
- (listOfLabels := self listOfLabels) removeAll.
+ self selection:0.
listOfTabs removeAll.
aTabList do:[:aTabItem|
listOfTabs add: aTabItem.
- listOfLabels add: aTabItem label
].
- rebuildMode := false.
-
modified := false.
listOfTabs notEmpty ifTrue:[
- selectionHolder value:1
+ self selection:1
].
self updateInfoLabel
@@ -974,63 +1366,96 @@
update:something with:aParameter from:someObject
"one of my aspects has changed; update modified channel
"
- super update:something with:aParameter from:someObject.
+ |list size index|
+
+ someObject = self selectionHolder ifTrue:[
+ ^ self selectionChanged
+ ].
+
+ someObject = self testMode ifFalse:[
+ ^ super update:something with:aParameter from:someObject.
+ ].
+
+ size := listOfTabs size.
+
+ someObject value ifTrue:[
+ index := 0.
- someObject = self testMode
- ifTrue:[
- someObject value
- ifTrue: [self doTest]
- ifFalse:[testView lower. self selectionHolder value:1].
+ size ~~ 0 ifTrue:[
+ list := listOfTabs collect:[:aTab| |tab|
+ tab := aTab copy.
+ tab setAttributesFromClass:specClass.
+ tab
+ ].
+ ]
+ ] ifFalse:[
+ index := 1 min:size
+ ].
+ self selectionHolder value:index.
+ self testItemList value:list.
+ self updateInfoLabel.
- self updateInfoLabel
- ]
! !
-!TabListEditor methodsFor:'help'!
-
-defaultInfoLabel
+!TabListEditor methodsFor:'queries'!
- ^self testMode value
- ifTrue: ['Test mode']
- ifFalse: [super defaultInfoLabel]
+canToggleTestMode
+ "checks whether testMode button is enabled
+ "
+ self testMode value ifTrue:[
+ ^ true
+ ].
+
+ self valueOfEnablingCommitButtons value ifFalse:[
+ ^ listOfTabs notEmpty
+ ].
+ ^ false
! !
!TabListEditor methodsFor:'selection'!
-selectedIndex
- ^ selectedIndex
+selectedElement
+ |idx tab|
+
+ idx := self selection.
+
+ idx ~~ 0 ifTrue:[
+ (tab := listOfTabs at:idx ifAbsent:nil) notNil ifTrue:[
+ ^ tab
+ ].
+ self selection:0
+ ].
+ ^ nil
+!
+
+selection
+ ^ self selectionHolder value ? 0
!
-selectedIndex:anIndex
- |oldSel specChannel|
+selection:anIndex
+ self selectionHolder value:(anIndex ? 0).
+!
- self listOfLabels notEmpty ifTrue: [self canShowTestMode value: true].
- anIndex notNil ifTrue: [self testMode value: false].
-
- oldSel := selectedIndex.
- selectedIndex := anIndex ? 0.
+selectionChanged
+ |noteBookModel hasSelection|
- selectedIndex == oldSel ifTrue:[^ self].
-
- specChannel := self specChannel.
+ hasSelection := self selection ~~ 0.
+ noteBookModel := self noteBookModel.
- oldSel == 0 ifTrue:[
- specChannel value:(self class tabSpec)
+ hasSelection ifTrue:[
+ self testMode value:false.
+ noteBookModel value == 0 ifTrue:[noteBookModel value:1]
] ifFalse:[
- selectedIndex == 0 ifTrue:[
- specChannel value:nil
- ]
+ noteBookModel value:0
].
self cancel.
-
- testView notNil ifTrue:[
- testView lower.
- ].
+ self valueOfCanCut value:hasSelection.
+ self valueOfCanCopy value:hasSelection.
+ self valueOfCanPaste.
+!
- self valueOfCanCut value: (anIndex ~~ 0).
- self valueOfCanCopy value: (anIndex ~~ 0).
- self valueOfCanPaste.
-
+setSelection:anIndex
+ self selectionHolder value:(anIndex ? 0) withoutNotifying:self
! !
!TabListEditor methodsFor:'startup / release'!
@@ -1038,12 +1463,8 @@
initialize
"setup aspects used by column description specifications
"
-
super initialize.
-
- listOfTabs := OrderedCollection new.
- selectedIndex := 0.
- rebuildMode := false.
+ listOfTabs := List new.
!
openModalOnTabList: aTabList
@@ -1051,14 +1472,6 @@
super openModalOnResourceSpec: aTabList
-!
-
-postBuildWith:builder
-
- super postBuildWith:builder.
-
- testView := builder componentAt:#TestView.
- (builder componentAt:#ColumnView) selectConditionBlock: [:i|self askForItemModification].
! !
!TabListEditor methodsFor:'user actions'!
@@ -1066,48 +1479,53 @@
accept
"accept changes
"
- |label|
-
- self acceptChannel
- value:true; value:false. "/ toggle to force inputFields to accept
+ |tab idx asb|
- selectedIndex ~~ 0 ifTrue:[
- rebuildMode := true.
- label := listOfTabs at:selectedIndex.
+ (tab := self selectedElement) notNil ifTrue:[
+ super accept.
+ aspects keysAndValuesDo:[:k :m| tab perform:(k , ':') asSymbol with:(m value) ].
- aspects keysAndValuesDo:[:aKey :aModel|
- label perform:(aKey , ':') asSymbol with:(aModel value).
- ].
- self listOfLabels at:selectedIndex put:(label label).
-
- rebuildMode := false.
+ asb := self autoHideScrollBars value.
+ asb := asb ~~ 1 ifTrue:[asb == 2] ifFalse:[nil].
+ tab autoHideScrollBars:asb.
].
self cancel.
- modified := true.
- self valueOfEnablingCommitButtons value: false
+!
+
+addTab:aTab
+ |idx|
+
+ aTab notNil ifTrue:[
+ self testMode value: false.
+
+ (idx := self selection) == 0 ifTrue:[
+ listOfTabs add:aTab.
+ self selection:(listOfTabs size).
+ ] ifFalse:[
+ listOfTabs add:aTab afterIndex:idx
+ ].
+ modified := true.
+ ].
!
cancel
"cancel all changes
"
- |tab|
+ |tab idx asb|
- selectedIndex ~~ 0 ifTrue:[
- tab := listOfTabs at:selectedIndex.
-
- rebuildMode := true.
+ ( (idx := self selection) ~~ 0
+ and:[(tab := self selectedElement) notNil]
+ ) ifTrue:[
+ aspects keysAndValuesDo:[:k :m| m value:(tab perform:k) ].
+ listOfTabs at:idx put:tab.
- aspects keysAndValuesDo:[:aKey :aModel|
- aModel value:(tab perform:aKey)
- ].
- #( label editAgument ) do:[:aKey| |v|
- v := aspects at:aKey.
- v value isNil ifTrue:[v value:'']
- ].
+ asb := tab autoHideScrollBars.
+ asb notNil ifTrue:[asb := asb == true ifTrue:[2] ifFalse:[3]]
+ ifFalse:[asb := 1].
- rebuildMode := false.
+ self autoHideScrollBars value:asb.
].
- self canMoveTabItemUpOrDown value:(selectedIndex ~~ 0 and:[listOfTabs size > 1]).
+ self canMoveTabItemUpOrDown value:(listOfTabs size > 1 and:[idx ~~ 0]).
self valueOfEnablingCommitButtons value: false
@@ -1117,53 +1535,26 @@
doCopy
"copy selected tab
"
- selectedIndex ~~ 0 ifTrue:[
- self clipboard:(listOfTabs at:selectedIndex) deepCopy.
+ |tab|
+
+ (tab := self selectedElement) notNil ifTrue:[
+ self clipboard:tab.
self updateAllToolInstances.
]
!
-doCreateTabItem
-
- |tab selectionHolder|
-
- self testMode value: false.
- tab := TabItem label:'Tab Item ', (listOfTabs size + 1) printString.
-
- listOfTabs add:tab afterIndex:selectedIndex.
- self listOfLabels add:(tab label) afterIndex:selectedIndex.
-
- selectionHolder := self selectionHolder.
-
- selectedIndex == 0 ifTrue:[
- selectionHolder value:1
- ] ifFalse:[
- selectionHolder value:selectedIndex + 1.
- self cancel.
- ].
-
- modified := true.
+doCreate
+ self addTab:(TabItem label:'TAB').
!
doCut
- "cut selected tab
+ "cut the selected tab; put to pasteBuffer
"
- |listOfLabels index selectionHolder|
+ |tab|
- (index := selectedIndex) ~~ 0 ifTrue:[
- self testMode value: false.
- listOfLabels := self listOfLabels.
- self clipboard:(listOfTabs at:index) deepCopy.
- (selectionHolder := self selectionHolder) value:0.
- listOfTabs removeIndex:index.
- listOfLabels removeIndex:index.
- index > listOfLabels size ifTrue:[
- index := index - 1
- ].
- selectionHolder value:index.
- listOfLabels isEmpty ifTrue: [self canShowTestMode value: false].
- self updateAllToolInstances.
- modified := true.
+ (tab := self selectedElement) notNil ifTrue:[
+ self clipboard:tab.
+ self doDelete.
].
!
@@ -1171,19 +1562,18 @@
doDelete
"delete selected tab
"
- |listOfLabels index selectionHolder|
+ |index|
- (index := selectedIndex) ~~ 0 ifTrue:[
+ (index := self selection) ~~ 0 ifTrue:[
self testMode value: false.
- listOfLabels := self listOfLabels.
- (selectionHolder := self selectionHolder) value:0.
+ self setSelection:0.
listOfTabs removeIndex:index.
- listOfLabels removeIndex:index.
- index > listOfLabels size ifTrue:[index := index - 1].
- selectionHolder value:index.
- listOfLabels isEmpty ifTrue: [self canShowTestMode value: false].
+ index > listOfTabs size ifTrue:[index := index - 1].
+ self selection:index.
+ self updateAllToolInstances.
modified := true.
].
+
!
doGenerateAspectMethod
@@ -1232,35 +1622,29 @@
doMoveTabUpOrDown:what
"step up or down
"
- |tab listOfLabels index nLabels|
+ |tab idx sz|
- (selectedIndex ~~ 0 and:[listOfTabs size > 1]) ifFalse:[
+ (listOfTabs size > 1 and:[(idx := self selection) ~~ 0]) ifFalse:[
^ self
].
- listOfLabels := self listOfLabels.
- tab := listOfTabs at:selectedIndex.
+ (tab := listOfTabs at:idx ifAbsent:nil) isNil ifTrue:[
+ ^ self selection:0
+ ].
- listOfLabels removeIndex:selectedIndex.
- listOfTabs removeIndex:selectedIndex.
+ self setSelection:0.
+ listOfTabs removeIndex:idx.
- nLabels := listOfLabels size.
+ sz := listOfTabs size.
what == #down ifTrue:[
- index := selectedIndex > nLabels ifTrue:[1]
- ifFalse:[selectedIndex + 1]
+ idx := idx > sz ifTrue:[1] ifFalse:[idx + 1]
] ifFalse:[
- index := selectedIndex == 1 ifTrue:[nLabels + 1]
- ifFalse:[selectedIndex - 1]
+ idx := idx == 1 ifTrue:[sz + 1] ifFalse:[idx - 1]
].
- listOfLabels add:(tab label) beforeIndex:index.
- listOfTabs add:tab beforeIndex:index.
-
- rebuildMode := true.
- self selectionHolder value:index.
- rebuildMode := false.
-
+ listOfTabs add:tab beforeIndex:idx.
+ self setSelection:idx.
modified := true.
!
@@ -1268,24 +1652,11 @@
doPaste
"paste a tab
"
- |tab selectionHolder|
-
- self testMode value: false.
- (tab := self class clipboard deepCopy) isNil ifTrue: [^nil].
- listOfTabs add:tab afterIndex:selectedIndex.
- self listOfLabels add:(tab label) afterIndex:selectedIndex.
-
- selectionHolder := self selectionHolder.
+ |tab|
- selectedIndex == 0 ifTrue:[
- selectionHolder value:1
- ] ifFalse:[
- selectionHolder value:selectedIndex + 1.
- self cancel.
- ].
-
- modified := true.
-
+ ((tab := self class clipboard) notNil and:[tab isKindOf:TabItem]) ifTrue:[
+ self addTab:(tab deepCopy).
+ ]
!
doSave
@@ -1352,32 +1723,6 @@
self addToHistory:(cls name, ' ', specSelector) -> #loadFromMessage:.
modified := false.
hasSaved := true.
-!
-
-doTest
- "run a test
- "
- |tabView list|
-
- self selectionHolder value:nil.
-
- listOfTabs size ~~ 0 ifTrue:[
- list := listOfTabs collect:[:aTab||t|
- t := aTab copy.
- t setAttributesFromClass:specClass.
- t
- ]
- ] ifFalse:[
- list := nil
- ].
- tabView := builder componentAt:#TestTabsView.
- tabView list:list.
- testView raise.
-
- self valueOfCanCut value: false.
- self valueOfCanCopy value: false.
- self valueOfCanPaste value: false.
-
! !
!TabListEditor class methodsFor:'documentation'!