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 |
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 ] |
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 ! ! |