MenuEditor.st
changeset 298 cec1f174397e
parent 290 1428bab2aa68
child 304 064727515aa1
equal deleted inserted replaced
297:14db1276218c 298:cec1f174397e
  1317     "this window spec was automatically generated by the ST/X MenuEditor"
  1317     "this window spec was automatically generated by the ST/X MenuEditor"
  1318 
  1318 
  1319     ^ self class menuPainter
  1319     ^ self class menuPainter
  1320 
  1320 
  1321 
  1321 
       
  1322 !
       
  1323 
       
  1324 menuPullDown
       
  1325     "this window spec was automatically generated by the ST/X MenuEditor"
       
  1326 
       
  1327     ^ self class menuPullDown
       
  1328 
       
  1329 
  1322 ! !
  1330 ! !
  1323 
  1331 
  1324 !MenuEditor methodsFor:'actions'!
  1332 !MenuEditor methodsFor:'actions'!
  1325 
  1333 
  1326 accept
  1334 accept
  1433 !
  1441 !
  1434 
  1442 
  1435 tabList
  1443 tabList
  1436     "automatically generated by UIPainter ..."
  1444     "automatically generated by UIPainter ..."
  1437 
  1445 
  1438     ^ builder nilValueAspectFor:#tabList
  1446     |holder|
  1439 
  1447 
  1440     "Modified: 28.7.1997 / 13:11:17 / cg"
  1448     (holder := builder bindingAt:#tabList) isNil ifTrue:[
       
  1449         builder aspectAt:#tabList put:(holder := #('Properties') asValue).
       
  1450     ].
       
  1451     ^ holder
       
  1452 
       
  1453 
  1441 !
  1454 !
  1442 
  1455 
  1443 tabModel
  1456 tabModel
  1444     "automatically generated by UIPainter ..."
  1457     "automatically generated by UIPainter ..."
  1445 
  1458 
  1507         ^ aMessage sendTo:painter
  1520         ^ aMessage sendTo:painter
  1508    ].
  1521    ].
  1509    super doesNotUnderstand:aMessage
  1522    super doesNotUnderstand:aMessage
  1510 
  1523 
  1511 
  1524 
  1512 ! !
       
  1513 
       
  1514 !MenuEditor methodsFor:'interface specs'!
       
  1515 
       
  1516 menuPullDown
       
  1517     "this window spec was automatically generated by the ST/X MenuEditor"
       
  1518 
       
  1519     "do not manually edit this - the builder may not be able to
       
  1520      handle the specification if its corrupted."
       
  1521 
       
  1522     "
       
  1523      MenuEditor new openOnClass:MenuEditor andSelector:#menuPullDown
       
  1524      (Menu new fromLiteralArrayEncoding:(MenuEditor menuPullDown)) startUp
       
  1525     "
       
  1526 
       
  1527     <resource: #menu>
       
  1528 
       
  1529     ^
       
  1530      
       
  1531        #(#Menu
       
  1532           
       
  1533            #(
       
  1534              #(#MenuItem
       
  1535                 #'label:' 'file'
       
  1536                 #'value:' #file
       
  1537                 #'submenu:' 
       
  1538                  #(#Menu
       
  1539                     
       
  1540                      #(
       
  1541                        #(#MenuItem
       
  1542                           #'label:' 'new'
       
  1543                           #'value:' #doNew
       
  1544                       )
       
  1545                        #(#MenuItem
       
  1546                           #'label:' 'from class ...'
       
  1547                           #'value:' #doFromClass
       
  1548                           #'enabled:' #isStandAlone
       
  1549                       )
       
  1550                        #(#MenuItem
       
  1551                           #'label:' 'pick a menu'
       
  1552                           #'value:' #doPickAMenu
       
  1553                           #'enabled:' #isStandAlone
       
  1554                       )
       
  1555                        #(#MenuItem
       
  1556                           #'label:' '='
       
  1557                       )
       
  1558                        #(#MenuItem
       
  1559                           #'label:' 'quit'
       
  1560                           #'value:' #closeRequest
       
  1561                       )
       
  1562                     ) nil
       
  1563                     nil
       
  1564                 )
       
  1565             )
       
  1566              #(#MenuItem
       
  1567                 #'label:' 'edit'
       
  1568                 #'submenu:' 
       
  1569                  #(#Menu
       
  1570                     
       
  1571                      #(
       
  1572                        #(#MenuItem
       
  1573                           #'label:' 'cut'
       
  1574                           #'value:' #doCut
       
  1575                       )
       
  1576                        #(#MenuItem
       
  1577                           #'label:' '='
       
  1578                       )
       
  1579                        #(#MenuItem
       
  1580                           #'label:' 'create submenu static'
       
  1581                           #'value:' #doCreateMenu
       
  1582                       )
       
  1583                        #(#MenuItem
       
  1584                           #'label:' 'create summenu dynamic'
       
  1585                           #'value:' #doCreateLink
       
  1586                       )
       
  1587                        #(#MenuItem
       
  1588                           #'label:' '-'
       
  1589                       )
       
  1590                        #(#MenuItem
       
  1591                           #'label:' 'create item'
       
  1592                           #'value:' #doCreateItem
       
  1593                       )
       
  1594                        #(#MenuItem
       
  1595                           #'label:' 'create separator'
       
  1596                           #'value:' #doCreateSep
       
  1597                       )
       
  1598                     ) nil
       
  1599                     nil
       
  1600                 )
       
  1601             )
       
  1602              #(#MenuItem
       
  1603                 #'label:' 'code'
       
  1604                 #'value:' #code
       
  1605                 #'submenu:' 
       
  1606                  #(#Menu
       
  1607                     
       
  1608                      #(
       
  1609                        #(#MenuItem
       
  1610                           #'label:' 'class'
       
  1611                           #'value:' #doDefineClass
       
  1612                           #'enabled:' #isStandAlone
       
  1613                       )
       
  1614                        #(#MenuItem
       
  1615                           #'label:' '-'
       
  1616                       )
       
  1617                        #(#MenuItem
       
  1618                           #'label:' 'install menu spec.'
       
  1619                           #'value:' #doInstallSpec
       
  1620                       )
       
  1621                        #(#MenuItem
       
  1622                           #'label:' 'install help spec.'
       
  1623                           #'value:' #doInstallHelp
       
  1624                           #'enabled:' #isStandAlone
       
  1625                       )
       
  1626                        #(#MenuItem
       
  1627                           #'label:' '='
       
  1628                       )
       
  1629                        #(#MenuItem
       
  1630                           #'label:' 'browse application'
       
  1631                           #'value:' #doBrowseAppClass
       
  1632                       )
       
  1633                     ) nil
       
  1634                     nil
       
  1635                 )
       
  1636             )
       
  1637              #(#MenuItem
       
  1638                 #'label:' 'test'
       
  1639                 #'submenuChannel:' #submenuTest
       
  1640             )
       
  1641           ) nil
       
  1642           nil
       
  1643       )
       
  1644 
       
  1645     "Modified: 28.7.1997 / 18:12:10 / cg"
       
  1646 ! !
  1525 ! !
  1647 
  1526 
  1648 !MenuEditor methodsFor:'private'!
  1527 !MenuEditor methodsFor:'private'!
  1649 
  1528 
  1650 helpKey
  1529 helpKey
  1745     |tool sel|
  1624     |tool sel|
  1746 
  1625 
  1747     tabSelection = aSelection ifTrue:[
  1626     tabSelection = aSelection ifTrue:[
  1748         ^ self
  1627         ^ self
  1749     ].
  1628     ].
  1750 
  1629     (aSelection ~~ 0 and:[slices isNil]) ifTrue:[
       
  1630         ^ self
       
  1631     ].
  1751     (tabSelection := aSelection) == 0 ifTrue:[
  1632     (tabSelection := aSelection) == 0 ifTrue:[
  1752         slices isNil ifTrue:[
  1633         slices isNil ifTrue:[
  1753             specCanvas client:nil.
  1634             specCanvas client:nil.
  1754             ^ specCanvas raise.
  1635             ^ specCanvas raise.
  1755         ].
  1636         ].
  1763     ] ifFalse:[
  1644     ] ifFalse:[
  1764         sel := (slices at:tabSelection) last.
  1645         sel := (slices at:tabSelection) last.
  1765         specCanvas client:self spec:(self class perform:sel) builder:builder.
  1646         specCanvas client:self spec:(self class perform:sel) builder:builder.
  1766         specCanvas raise.
  1647         specCanvas raise.
  1767     ]    
  1648     ]    
       
  1649 
  1768 ! !
  1650 ! !
  1769 
  1651 
  1770 !MenuEditor methodsFor:'startup / release'!
  1652 !MenuEditor methodsFor:'startup / release'!
  1771 
  1653 
  1772 buildFrom:aClass andSelector:aSelector
  1654 buildFrom:aClass andSelector:aSelector
  2011 !
  1893 !
  2012 
  1894 
  2013 doStepDown
  1895 doStepDown
  2014     "move selected child after next child
  1896     "move selected child after next child
  2015     "
  1897     "
  2016     self painter doStepOver:1
  1898     self painter selectedNodeChangeSequenceOrder:1
  2017 !
  1899 !
  2018 
  1900 
  2019 doStepIn
  1901 doStepIn
  2020     self painter doStepIn
  1902     self painter selectedNodeBecomeChildOfNext
  2021 
  1903 
  2022 !
  1904 !
  2023 
  1905 
  2024 doStepOut
  1906 doStepOut
  2025     self painter doStepOut
  1907     self painter selectedNodeBecomeSisterOfParent
  2026 !
  1908 !
  2027 
  1909 
  2028 doStepUp
  1910 doStepUp
  2029     "move selected child after next child
  1911     "move selected child after next child
  2030     "
  1912     "
  2031     self painter doStepOver:-1
  1913     self painter selectedNodeChangeSequenceOrder:-1
  2032 ! !
  1914 ! !
  2033 
  1915 
  2034 !MenuEditor methodsFor:'values'!
  1916 !MenuEditor methodsFor:'values'!
  2035 
  1917 
  2036 painter
  1918 painter
  2177         nameKey             := (aspects at:#nameKey) value.
  2059         nameKey             := (aspects at:#nameKey) value.
  2178         indication          := (aspects at:#indication) value.
  2060         indication          := (aspects at:#indication) value.
  2179         shortcutKey         := (aspects at:#shortcutKey) value.
  2061         shortcutKey         := (aspects at:#shortcutKey) value.
  2180         accessCharaterPos   := (aspects at:#accessCharaterPos) value.
  2062         accessCharaterPos   := (aspects at:#accessCharaterPos) value.
  2181         argument            := (aspects at:#argument) value.
  2063         argument            := (aspects at:#argument) value.
       
  2064 
       
  2065         argument isString ifTrue:[
       
  2066             argument size > 1 ifTrue:[
       
  2067                 (argument at:1) == $# ifTrue:[
       
  2068                     argument := (argument copyFrom:2) asSymbol
       
  2069                 ]
       
  2070             ]
       
  2071         ].
  2182         submenuChannel      := (aspects at:#submenuChannel)    value.
  2072         submenuChannel      := (aspects at:#submenuChannel)    value.
  2183         retriever           := (aspects at:#retriever) value.
  2073         retriever           := (aspects at:#retriever) value.
  2184         icon                := (aspects at:#icon) value.
  2074         icon                := (aspects at:#icon) value.
  2185         iconAndLabel        := (aspects at:#iconAndLabel) value.
  2075         iconAndLabel        := (aspects at:#iconAndLabel) value.
  2186     ] ifTrue:[
  2076     ] ifTrue:[
  2237         (aspects at:#value)                 value:value.
  2127         (aspects at:#value)                 value:value.
  2238         (aspects at:#nameKey)               value:nameKey.
  2128         (aspects at:#nameKey)               value:nameKey.
  2239         (aspects at:#indication)            value:indication.
  2129         (aspects at:#indication)            value:indication.
  2240         (aspects at:#shortcutKey)           value:shortcutKey.
  2130         (aspects at:#shortcutKey)           value:shortcutKey.
  2241         (aspects at:#accessCharaterPos)     value:accessCharaterPos.
  2131         (aspects at:#accessCharaterPos)     value:accessCharaterPos.
  2242         (aspects at:#argument)              value:argument.
  2132 
       
  2133         argument isSymbol ifTrue:[
       
  2134             (aspects at:#argument) value:'#', argument
       
  2135         ] ifFalse:[
       
  2136             (aspects at:#argument) value:argument.
       
  2137         ].
  2243         (aspects at:#submenuChannel)        value:submenuChannel.
  2138         (aspects at:#submenuChannel)        value:submenuChannel.
  2244         (aspects at:#retriever)             value:retriever.
  2139         (aspects at:#retriever)             value:retriever.
  2245         (aspects at:#icon)                  value:icon.
  2140         (aspects at:#icon)                  value:icon.
  2246         (aspects at:#iconAndLabel)          value:iconAndLabel.
  2141         (aspects at:#iconAndLabel)          value:iconAndLabel.
  2247     ]
  2142     ]
  2332 
  2227 
  2333 ! !
  2228 ! !
  2334 
  2229 
  2335 !MenuEditor::Painter methodsFor:'accessing'!
  2230 !MenuEditor::Painter methodsFor:'accessing'!
  2336 
  2231 
  2337 root
       
  2338     ^ listOfNodes first
       
  2339 !
       
  2340 
       
  2341 selectorName
  2232 selectorName
  2342     ^ (listOfNodes first contents label) asSymbol
  2233     ^ (listOfNodes first contents label) asSymbol
  2343 ! !
  2234 ! !
  2344 
  2235 
  2345 !MenuEditor::Painter methodsFor:'building'!
  2236 !MenuEditor::Painter methodsFor:'building'!
  2354         (cls respondsTo:aSelector) ifTrue:[
  2245         (cls respondsTo:aSelector) ifTrue:[
  2355             spec := cls perform:aSelector
  2246             spec := cls perform:aSelector
  2356         ]
  2247         ]
  2357     ].
  2248     ].
  2358     spec isNil ifFalse:[
  2249     spec isNil ifFalse:[
  2359         menu := Menu new fromLiteralArrayEncoding:spec.
  2250         (spec isMemberOf:Menu) ifFalse:[
       
  2251             menu := Menu new fromLiteralArrayEncoding:spec.
       
  2252         ] ifTrue:[
       
  2253             menu := spec.
       
  2254         ].
  2360         node := self nodeLabel:(aSelector asString).
  2255         node := self nodeLabel:(aSelector asString).
  2361         self subMenu:menu parent:node.
  2256         self subMenu:menu parent:node.
  2362     ] ifTrue:[
  2257     ] ifTrue:[
  2363         aSelector notNil ifTrue:[cls := aSelector asString]
  2258         aSelector notNil ifTrue:[cls := aSelector asString]
  2364                         ifFalse:[cls := 'menu'].
  2259                         ifFalse:[cls := 'menu'].
  2573 
  2468 
  2574 !
  2469 !
  2575 
  2470 
  2576 doCut
  2471 doCut
  2577     self doCopy.
  2472     self doCopy.
  2578     model removeSelection.
  2473     self selectedNodesRemove.
  2579     self selection:nil.
       
  2580 
       
  2581 
       
  2582 !
  2474 !
  2583 
  2475 
  2584 doPaste
  2476 doPaste
  2585 
  2477 
  2586     (CopyBuffer notNil and:[self selectedNode notNil]) ifTrue:[
  2478     (CopyBuffer notNil and:[self selectedNode notNil]) ifTrue:[
  2587         self addElement:(CopyBuffer collect:[:el| el copy])
  2479         self addElement:(CopyBuffer collect:[:el| el copy])
  2588     ].
  2480     ].
  2589 !
       
  2590 
       
  2591 doStepIn
       
  2592     |idx node cprt nprt|
       
  2593 
       
  2594     (    (node := self selectedNode) isNil
       
  2595      or:[(cprt := node parent) isNil]
       
  2596     ) ifTrue:[
       
  2597         ^ self
       
  2598     ].
       
  2599 
       
  2600     idx := cprt indexOfChild:node.
       
  2601 
       
  2602     idx == cprt children size ifTrue:[
       
  2603         ^ self
       
  2604     ].
       
  2605     nprt := cprt childAt:(idx + 1).
       
  2606 
       
  2607     (nprt notNil and:[nprt hasChildren]) ifFalse:[
       
  2608        ^ self
       
  2609     ].
       
  2610 
       
  2611     model removeDependent:self.
       
  2612     model removeSelection.
       
  2613     selection := nil.
       
  2614     model expand:nprt.
       
  2615     model addDependent:self.
       
  2616 
       
  2617     model add:node beforeIndex:1 below:nprt.
       
  2618     self selectNode:node.
       
  2619 !
       
  2620 
       
  2621 doStepOut
       
  2622     |node cprt nprt|
       
  2623 
       
  2624     (    (node := self selectedNode) isNil
       
  2625      or:[(cprt := node parent) isNil
       
  2626      or:[(nprt := cprt parent) isNil]]
       
  2627     ) ifFalse:[
       
  2628         model removeDependent:self.
       
  2629         model removeSelection.
       
  2630         selection := nil.
       
  2631         model addDependent:self.
       
  2632 
       
  2633         model add:node afterIndex:(nprt indexOfChild:cprt) below:nprt.
       
  2634         self selectNode:node.
       
  2635     ]
       
  2636 !
       
  2637 
       
  2638 doStepOver:anOffset
       
  2639     "move child 'anOffset' forward or backward in list of children
       
  2640     "
       
  2641     |idx node size parent|
       
  2642 
       
  2643     (      (node   := self selectedNode) notNil
       
  2644       and:[(parent := node parent) notNil
       
  2645       and:[(size   := parent children size) > 1]]
       
  2646     ) ifTrue:[
       
  2647         idx := parent indexOfChild:node.
       
  2648 
       
  2649         model removeDependent:self.
       
  2650         model removeSelection.
       
  2651         selection := nil.
       
  2652         model addDependent:self.
       
  2653 
       
  2654         (idx := idx + anOffset) < 1 ifTrue:[
       
  2655             idx := size
       
  2656         ] ifFalse:[
       
  2657             idx > size ifTrue:[idx := 1]
       
  2658         ].
       
  2659         model add:node beforeIndex:idx below:parent.
       
  2660         self selectNode:node.
       
  2661     ]
       
  2662 ! !
  2481 ! !
  2663 
  2482 
  2664 !MenuEditor::Painter methodsFor:'private'!
  2483 !MenuEditor::Painter methodsFor:'private'!
  2665 
  2484 
  2666 addElement:something
  2485 addElement:something
  2667     "add something after selection
  2486     "add something after selection
  2668     "
  2487     "
  2669     |node|
  2488     self selectedNodeAdd:something
  2670 
       
  2671     (node := self selectedNode) notNil ifTrue:[
       
  2672         node parent notNil ifTrue:[
       
  2673             node isCollapsable ifTrue:[
       
  2674                 model add:something beforeIndex:1 below:node
       
  2675             ] ifFalse:[
       
  2676                 model add:something after:node
       
  2677             ]
       
  2678         ] ifFalse:[
       
  2679             model add:something beforeIndex:1 below:(self root)
       
  2680         ]
       
  2681     ]
       
  2682 !
  2489 !
  2683 
  2490 
  2684 nodeLabel:aLabel
  2491 nodeLabel:aLabel
  2685    ^ TreeItem name:aLabel contents:(MenuEditor::Item new label:aLabel).
  2492    ^ TreeItem name:aLabel contents:(MenuEditor::Item new label:aLabel).
  2686 ! !
  2493 ! !