MenuEditor.st
changeset 412 330bf61c53b5
parent 411 7f21bc19cd51
child 414 116cf2acebe3
equal deleted inserted replaced
411:7f21bc19cd51 412:330bf61c53b5
   378                 #'accessCharacterPosition:' 1
   378                 #'accessCharacterPosition:' 1
   379                 #'submenuChannel:' #submenuTest
   379                 #'submenuChannel:' #submenuTest
   380             )
   380             )
   381              #(#MenuItem
   381              #(#MenuItem
   382                 #'label:' 'History'
   382                 #'label:' 'History'
   383                 #'accessCharacterPosition:' 1
   383                 #'accessCharacterPosition:' 2
   384                 #'submenuChannel:' #menuHistory
   384                 #'submenuChannel:' #menuHistory
   385             )
   385             )
   386              #(#MenuItem
   386              #(#MenuItem
   387                 #'label:' 'Help'
   387                 #'label:' 'Help'
   388                 #'accessCharacterPosition:' 1
   388                 #'accessCharacterPosition:' 1
  1489         helpTool masterApplication:self.
  1489         helpTool masterApplication:self.
  1490         helpCanvas := SubCanvas origin:0.0@0.0 corner:1.0@1.0 in:noteBook.
  1490         helpCanvas := SubCanvas origin:0.0@0.0 corner:1.0@1.0 in:noteBook.
  1491         specCanvas := SubCanvas origin:0.0@0.0 corner:1.0@1.0 in:noteBook.
  1491         specCanvas := SubCanvas origin:0.0@0.0 corner:1.0@1.0 in:noteBook.
  1492 
  1492 
  1493         helpCanvas client:helpTool.
  1493         helpCanvas client:helpTool.
  1494         helpTool   masterApplication:self.
  1494         helpTool masterApplication:self.
  1495         helpTool   modifiedHolder:(self modifiedChannel).
  1495         helpTool modifiedHolder: self modifiedChannel.
  1496 
  1496 
  1497         builder aspectAt:#noteBookView put:noteBook.
  1497         builder aspectAt:#noteBookView put:noteBook.
  1498     ].
  1498     ].
  1499     ^ noteBook
  1499     ^ noteBook
  1500 !
  1500 !
  1536 !MenuEditor methodsFor:'change & update'!
  1536 !MenuEditor methodsFor:'change & update'!
  1537 
  1537 
  1538 update:something with:aParameter from:changedObject
  1538 update:something with:aParameter from:changedObject
  1539     "one of my value holders has changed its value, so let me set the editing menu as modified"            
  1539     "one of my value holders has changed its value, so let me set the editing menu as modified"            
  1540 
  1540 
  1541     self modifiedChannel value: true.
  1541     self modifiedChannel value: true
  1542     isModified := true.
       
  1543 !
  1542 !
  1544 
  1543 
  1545 updateEnabledChannels
  1544 updateEnabledChannels
  1546     "update enabled channels"
  1545     "update enabled channels"
  1547 
  1546 
  1548     |node parent next state|
  1547     |node parent next state|
  1549 
  1548 
  1550     state := false.
  1549     state := false.   
  1551 
  1550 
  1552     (node  := self treeView selectedNode) notNil
  1551     (node  := self treeView selectedNode) notNil
  1553     ifTrue:
  1552     ifTrue:
  1554     [
  1553     [
  1555         self hasAnySingleSelection value:true.
  1554         self hasAnySingleSelection value:true.
  1707     ^tabSelection ? 0
  1706     ^tabSelection ? 0
  1708 !
  1707 !
  1709 
  1708 
  1710 tabSelection: aSelection
  1709 tabSelection: aSelection
  1711 
  1710 
  1712     |sel|
  1711     |sel|                 
  1713     tabSelection = aSelection ifTrue:[
  1712     tabSelection = aSelection ifTrue:[
  1714         ^ self
  1713         ^ self
  1715     ].
  1714     ].
  1716     (aSelection ~~ 0 and:[slices isNil]) ifTrue:[
  1715     (aSelection ~~ 0 and:[slices isNil]) ifTrue:[
  1717         ^ self
  1716         ^ self
  1723         ].
  1722         ].
  1724         tabSelection == 1 ifTrue:[^ self].
  1723         tabSelection == 1 ifTrue:[^ self].
  1725         tabSelection := 1
  1724         tabSelection := 1
  1726     ].
  1725     ].
  1727 
  1726 
  1728     self isHelpToolSelected ifTrue:[
  1727     self isHelpToolSelected ifTrue:[   
  1729         self helpTool helpKey:(self helpKey).
  1728         self helpTool helpKey:(self helpKey).
  1730         helpCanvas raise.
  1729         helpCanvas raise.
  1731     ] ifFalse:[
  1730     ] ifFalse:[                       
  1732         sel := (slices at:tabSelection) last.
  1731         sel := (slices at:tabSelection) last.   
  1733         aspects do: [:holder| holder release].
  1732         aspects do: [:holder| holder release].
  1734         specCanvas client:self spec:(self class perform:sel) builder:builder.
  1733         specCanvas client:self spec:(self class perform:sel) builder:builder.
  1735         aspects do: [:holder| holder addDependent:self].
  1734         aspects do: [:holder| holder addDependent:self].
  1736         specCanvas raise.  
  1735         specCanvas raise.  
  1737     ]    
  1736     ]    
  1763         message := className, ' ', aSelector.
  1762         message := className, ' ', aSelector.
  1764         self addToHistory: message -> #loadFromMessage:.
  1763         self addToHistory: message -> #loadFromMessage:.
  1765         self valueOfInfoLabel value: className, ' << ', aSelector
  1764         self valueOfInfoLabel value: className, ' << ', aSelector
  1766     ].
  1765     ].
  1767 
  1766 
       
  1767     self treeView selection: 2.
       
  1768     self menuChanged
  1768 
  1769 
  1769 !
  1770 !
  1770 
  1771 
  1771 checkModified
  1772 checkModified
  1772     "check menu modification
  1773     "check menu modification
  1785 
  1786 
  1786 
  1787 
  1787 !
  1788 !
  1788 
  1789 
  1789 closeRequest
  1790 closeRequest
  1790     "close request
  1791     "close request"
  1791     "
  1792 
  1792     self checkModified ifTrue: [super closeRequest]
  1793     self checkModified ifTrue: [super closeRequest]
  1793 
  1794 
  1794 
  1795 
  1795 
  1796 
  1796 
  1797 
  1840     [
  1841     [
  1841         |readStream aClass aSelector|
  1842         |readStream aClass aSelector|
  1842         readStream := aMessage readStream.
  1843         readStream := aMessage readStream.
  1843         aClass := Smalltalk at: (readStream upTo: $ ) asSymbol.
  1844         aClass := Smalltalk at: (readStream upTo: $ ) asSymbol.
  1844         aSelector :=  readStream upToEnd asSymbol.
  1845         aSelector :=  readStream upToEnd asSymbol.
  1845         self buildFrom: aClass andSelector: aSelector.
  1846         self buildFrom: aClass andSelector: aSelector
  1846         self treeView selection: nil
       
  1847     ]
  1847     ]
  1848 !
  1848 !
  1849 
  1849 
  1850 openModalOnClass:aClass andSelector:aSelector
  1850 openModalOnClass:aClass andSelector:aSelector
  1851     specClass := Association key:aClass value:aSelector.
  1851     specClass := Association key:aClass value:aSelector.
  1872 
  1872 
  1873         specClass := nil.
  1873         specClass := nil.
  1874 
  1874 
  1875         (sel isKindOf:Menu) ifTrue:[
  1875         (sel isKindOf:Menu) ifTrue:[
  1876             self buildFrom:cls andSelector:nil.
  1876             self buildFrom:cls andSelector:nil.
  1877           ^ self treeView buildFromMenu:sel.
  1877             ^self treeView buildFromMenu:sel.
  1878         ]
  1878         ]
  1879         
  1879         
  1880     ].
  1880     ].
  1881     self buildFrom:cls andSelector:sel.
  1881     self buildFrom:cls andSelector:sel
       
  1882 !
       
  1883 
       
  1884 postOpenWith:aBuilder
       
  1885 
       
  1886     self isHelpToolSelected 
       
  1887         ifTrue:  [helpCanvas raise] 
       
  1888         ifFalse: [specCanvas raise]    
  1882 ! !
  1889 ! !
  1883 
  1890 
  1884 !MenuEditor methodsFor:'user interactions'!
  1891 !MenuEditor methodsFor:'user interactions'!
  1885 
  1892 
  1886 accept
  1893 accept
  1915     [
  1922     [
  1916         self helpTool helpKey:(self helpKey).
  1923         self helpTool helpKey:(self helpKey).
  1917         aspects do:[:anAspect| anAspect value:nil].
  1924         aspects do:[:anAspect| anAspect value:nil].
  1918         node contents toAspects:aspects
  1925         node contents toAspects:aspects
  1919     ].
  1926     ].
  1920     self modifiedChannel value:false
  1927     self modifiedChannel value: false
  1921 
  1928 
  1922 !
  1929 !
  1923 
  1930 
  1924 doBrowseAppClass
  1931 doBrowseAppClass
  1925     "open a browser on the class"
  1932     "open a browser on the class"
  2600 !MenuEditor::TreeView methodsFor:'event handling'!
  2607 !MenuEditor::TreeView methodsFor:'event handling'!
  2601 
  2608 
  2602 keyPress:key x:x y:y
  2609 keyPress:key x:x y:y
  2603     "invoked if any key was pressed"
  2610     "invoked if any key was pressed"
  2604 
  2611 
  2605     <resource: #keyboard ( #Delete #BackSpace #Cut #Copy #Paste ) >
  2612     <resource: #keyboard (#Delete #BackSpace #Cut #Copy #Paste)>
  2606 
  2613 
  2607     (key == #Cut or:[key == #Delete or:[key == #BackSpace]]) ifTrue: [
  2614     (key == #Cut or:[key == #Delete or:[key == #BackSpace]]) ifTrue: [^self doCut].
  2608         ^ self doCut
       
  2609     ].
       
  2610 
  2615 
  2611     key == #Copy  ifTrue:[^self doCopy].
  2616     key == #Copy  ifTrue:[^self doCopy].
  2612     key == #Paste ifTrue:[^self doPaste].
  2617     key == #Paste ifTrue:[^self doPaste].
  2613 
  2618 
  2614     super keyPress:key x:x y:y.
  2619     super keyPress:key x:x y:y
  2615 
  2620 
  2616 ! !
  2621 ! !
  2617 
  2622 
  2618 !MenuEditor::TreeView methodsFor:'initialization'!
  2623 !MenuEditor::TreeView methodsFor:'initialization'!
  2619 
  2624 
  2645     self class images associationsDo:[:imageAsso|images at: imageAsso key put:(imageAsso value onDevice:device)].
  2650     self class images associationsDo:[:imageAsso|images at: imageAsso key put:(imageAsso value onDevice:device)].
  2646     self multipleSelectOk:true.
  2651     self multipleSelectOk:true.
  2647     self showDirectoryIndicator: true.
  2652     self showDirectoryIndicator: true.
  2648     self showDirectoryIndicatorForRoot: false.
  2653     self showDirectoryIndicatorForRoot: false.
  2649     self selectConditionBlock: [:i|self application checkMenuItemModified].
  2654     self selectConditionBlock: [:i|self application checkMenuItemModified].
  2650     self validateDoubleClickBlock: [:node| node ~~ listOfNodes first]
  2655     self validateDoubleClickBlock: [:node| node ~~ listOfNodes first].
  2651 ! !
  2656 ! !
  2652 
  2657 
  2653 !MenuEditor::TreeView methodsFor:'menus'!
  2658 !MenuEditor::TreeView methodsFor:'menus'!
  2654 
  2659 
  2655 doCopy
  2660 doCopy