1101 |
1107 |
1102 |
1108 |
1103 |
1109 |
1104 ! |
1110 ! |
1105 |
1111 |
|
1112 openModalOnClass:aClass andSelector:aSelector |
|
1113 specClass := Association key:aClass value:aSelector. |
|
1114 super openInterfaceModal. |
|
1115 |
|
1116 ! |
|
1117 |
1106 openOnClass:aClass andSelector:aSelector |
1118 openOnClass:aClass andSelector:aSelector |
|
1119 specClass := Association key:aClass value:aSelector. |
1107 super openInterface. |
1120 super openInterface. |
1108 self buildFrom:aClass andSelector:aSelector. |
1121 self buildFrom:aClass andSelector:aSelector. |
|
1122 |
1109 ! |
1123 ! |
1110 |
1124 |
1111 postBuildWith:builder |
1125 postBuildWith:builder |
1112 self buildFrom:nil andSelector:nil. |
1126 |cls sel| |
|
1127 |
|
1128 specClass isAssociation ifTrue:[ |
|
1129 cls := specClass key. |
|
1130 sel := specClass value. |
|
1131 ]. |
|
1132 specClass := nil. |
|
1133 self buildFrom:cls andSelector:sel. |
1113 ! ! |
1134 ! ! |
1114 |
1135 |
1115 !MenuEditor methodsFor:'user interactions'! |
1136 !MenuEditor methodsFor:'user interactions'! |
1116 |
1137 |
1117 doBrowseAppClass |
1138 doBrowseAppClass |
1494 spec := cls perform:aSelector |
1515 spec := cls perform:aSelector |
1495 ] |
1516 ] |
1496 ]. |
1517 ]. |
1497 spec isNil ifFalse:[ |
1518 spec isNil ifFalse:[ |
1498 menu := Menu new fromLiteralArrayEncoding:spec. |
1519 menu := Menu new fromLiteralArrayEncoding:spec. |
1499 node := self nodeLabel:(aSelector asString) level:1. |
1520 node := self nodeLabel:(aSelector asString). |
1500 self subMenu:menu parent:node. |
1521 self subMenu:menu parent:node. |
1501 ] ifTrue:[ |
1522 ] ifTrue:[ |
1502 aSelector notNil ifTrue:[cls := aSelector asString] |
1523 aSelector notNil ifTrue:[cls := aSelector asString] |
1503 ifFalse:[cls := 'menu']. |
1524 ifFalse:[cls := 'menu']. |
1504 |
1525 |
1505 node := self nodeLabel:cls level:1. |
1526 node := self nodeLabel:cls. |
1506 ]. |
1527 ]. |
1507 |
1528 |
1508 node hasChildren ifFalse:[ |
1529 node hasChildren ifFalse:[ |
1509 node addChild:(self nodeLabel:'undefined' level:1) |
1530 node add:(self nodeLabel:'undefined') |
1510 ]. |
1531 ]. |
|
1532 node expand. |
1511 model root:node. |
1533 model root:node. |
1512 model setHideToChildren:true startingAt:node. |
|
1513 |
1534 |
1514 ! |
1535 ! |
1515 |
1536 |
1516 buildFromMenu:aMenu |
1537 buildFromMenu:aMenu |
1517 |
1538 |
1518 |spec cls node| |
1539 |spec cls node| |
1519 |
1540 |
1520 node := self nodeLabel:'menu' level:1. |
1541 node := self nodeLabel:'menu'. |
1521 self subMenu:aMenu parent:node. |
1542 self subMenu:aMenu parent:node. |
1522 |
1543 |
1523 node hasChildren ifFalse:[ |
1544 node hasChildren ifFalse:[ |
1524 node addChild:(self nodeLabel:'undefined' level:1) |
1545 node add:(self nodeLabel:'undefined') |
1525 ]. |
1546 ]. |
|
1547 node expand. |
1526 model root:node. |
1548 model root:node. |
1527 model setHideToChildren:true startingAt:node. |
1549 |
1528 |
1550 ! |
1529 ! |
1551 |
1530 |
1552 menuItem:anItem |
1531 item:anItem level:aLevel |
|
1532 |
1553 |
1533 |level node submenu grp ctr sep| |
1554 |level node submenu grp ctr sep| |
1534 |
1555 |
1535 node := self nodeLabel:(anItem label) level:aLevel. |
1556 node := self nodeLabel:(anItem label). |
1536 node contents buildFromMenuItem:anItem. |
1557 node contents buildFromMenuItem:anItem. |
1537 node name:(node contents label). |
1558 node name:(node contents label). |
1538 node hide:true. |
|
1539 self subMenu:(anItem submenu) parent:node. |
1559 self subMenu:(anItem submenu) parent:node. |
1540 ^ node. |
1560 ^ node. |
1541 |
1561 |
1542 |
1562 |
1543 ! |
1563 ! |
1544 |
1564 |
1545 subMenu:aMenu parent:aParent |
1565 subMenu:aMenu parent:aParent |
1546 |lvl grp sep| |
1566 |idx grp| |
1547 |
1567 |
1548 aMenu isNil ifFalse:[ |
1568 aMenu isNil ifFalse:[ |
1549 lvl := (aParent level) + 1. |
|
1550 grp := aMenu groupSizes. |
1569 grp := aMenu groupSizes. |
1551 |
1570 aMenu itemsDo:[:i| aParent add:(self menuItem:i)]. |
1552 aMenu itemsDo:[:i| aParent addChild:(self item:i level:lvl)]. |
|
1553 |
1571 |
1554 grp notNil ifTrue:[ |
1572 grp notNil ifTrue:[ |
1555 sep := self nodeLabel:nil level:lvl. |
1573 idx := 0. |
1556 lvl := 0. |
|
1557 |
1574 |
1558 grp do:[:i| |
1575 grp do:[:i| |
1559 lvl := lvl + i + 1. |
1576 idx := idx + i + 1. |
1560 aParent addChildAndSubChildren:sep at:lvl |
1577 aParent add:(self nodeLabel:nil) beforeIndex:idx. |
1561 ] |
1578 ] |
1562 ] |
1579 ] |
1563 ] |
1580 ] |
1564 ! ! |
1581 ! ! |
1565 |
1582 |
1614 |
1631 |
1615 !MenuEditor::Painter methodsFor:'initialization'! |
1632 !MenuEditor::Painter methodsFor:'initialization'! |
1616 |
1633 |
1617 initialize |
1634 initialize |
1618 super initialize. |
1635 super initialize. |
1619 super model:(SelectionInHierarchy new). |
1636 self multipleSelectOk:true. |
1620 |
1637 self model:(SelectionInTree new). |
1621 |
1638 |
1622 ! ! |
1639 ! ! |
1623 |
1640 |
1624 !MenuEditor::Painter methodsFor:'menus'! |
1641 !MenuEditor::Painter methodsFor:'menus'! |
1625 |
1642 |
1626 doCopy |
1643 doCopy |
1627 CopyBuffer := listOfNodes at:selection. |
1644 self hasSelection ifTrue:[ |
1628 |
1645 CopyBuffer := OrderedCollection new. |
1629 |
1646 self selectionDo:[:i| CopyBuffer add:((listOfNodes at:i) copy)] |
|
1647 ] |
1630 ! |
1648 ! |
1631 |
1649 |
1632 doCreateItem |
1650 doCreateItem |
1633 self addNode:(self nodeLabel:'undefined' level:1) |
1651 self addElement:(self nodeLabel:'undefined') |
1634 ! |
1652 ! |
1635 |
1653 |
1636 doCreateMenu |
1654 doCreateMenu |
1637 |node| |
1655 |node| |
1638 |
1656 |
1639 node := self nodeLabel:'undefined' level:1. |
1657 node := self nodeLabel:'undefined'. |
1640 node addChild:(self nodeLabel:'undefined' level:2). |
1658 node add:(self nodeLabel:'undefined'). |
1641 self addNode:node |
1659 self addElement:node |
1642 |
1660 |
1643 ! |
1661 ! |
1644 |
1662 |
1645 doCreateSep |
1663 doCreateSep |
1646 self addNode:(self nodeLabel:nil level:1) |
1664 self addElement:(self nodeLabel:nil) |
1647 |
1665 |
1648 ! |
1666 ! |
1649 |
1667 |
1650 doCut |
1668 doCut |
1651 self doCopy. |
1669 self doCopy. |
1652 model removeIndex:selection. |
1670 model removeSelection. |
1653 self selection:nil. |
1671 self selection:nil. |
1654 |
1672 |
1655 |
1673 |
1656 ! |
1674 ! |
1657 |
1675 |
1658 doPaste |
1676 doPaste |
1659 self addNode:CopyBuffer |
1677 |
|
1678 (CopyBuffer notNil and:[self selectedNode notNil]) ifTrue:[ |
|
1679 self addElement:(CopyBuffer collect:[:el| el copy]) |
|
1680 ] |
1660 ! |
1681 ! |
1661 |
1682 |
1662 menu |
1683 menu |
1663 |menu subm| |
1684 |menu subm sz inclRoot| |
1664 |
1685 |
1665 selection isNumber ifFalse:[ |
1686 (sz := self numberOfSelections) == 0 ifTrue:[ |
1666 ^ nil |
1687 ^ self |
|
1688 ]. |
|
1689 |
|
1690 inclRoot := self isInSelection:1. |
|
1691 |
|
1692 sz > 1 ifTrue:[ |
|
1693 inclRoot ifTrue:[^ nil ]. |
|
1694 |
|
1695 ^ PopUpMenu labels:#( 'copy' 'cut' ) |
|
1696 selectors:#( #doCopy #doCut ) |
|
1697 receiver:self. |
1667 ]. |
1698 ]. |
1668 |
1699 |
1669 menu := PopUpMenu labels:#( 'copy' 'cut' 'paste' '-' 'create' ) |
1700 menu := PopUpMenu labels:#( 'copy' 'cut' 'paste' '-' 'create' ) |
1670 selectors:#( #doCopy #doCut #doPaste nil #create ) |
1701 selectors:#( #doCopy #doCut #doPaste nil #create ) |
1671 receiver:self. |
1702 receiver:self. |
1672 |
1703 |
1673 selection == 1 ifTrue:[ |
1704 inclRoot ifTrue:[ |
1674 menu disable:#doCopy. |
1705 menu disable:#doCopy. |
1675 menu disable:#doCut. |
1706 menu disable:#doCut. |
1676 ]. |
1707 ]. |
1677 subm := PopUpMenu labels:#( 'menu' 'item' 'seperator' ) |
1708 subm := PopUpMenu labels:#( 'menu' 'item' 'seperator' ) |
1678 selectors:#( #doCreateMenu #doCreateItem #doCreateSep ) |
1709 selectors:#( #doCreateMenu #doCreateItem #doCreateSep ) |
1679 receiver:self. |
1710 receiver:self. |
1680 |
1711 |
1681 menu subMenuAt:#create put:subm. |
1712 menu subMenuAt:#create put:subm. |
1682 |
|
1683 ^ menu. |
1713 ^ menu. |
1684 |
|
1685 |
|
1686 ! ! |
1714 ! ! |
1687 |
1715 |
1688 !MenuEditor::Painter methodsFor:'private'! |
1716 !MenuEditor::Painter methodsFor:'private'! |
1689 |
1717 |
1690 addNode:aNode |
1718 addElement:something |
1691 |node parent| |
1719 "add something after selection |
1692 |
1720 " |
1693 (aNode notNil and:[(node := self selectedNode) notNil]) ifFalse:[ |
1721 |node parent index| |
1694 ^ self |
1722 |
1695 ]. |
1723 (node := self selectedNode) notNil ifTrue:[ |
1696 |
1724 node parent notNil ifTrue:[ |
1697 (node isCollapsable or:[node parent isNil]) ifTrue:[ |
1725 node isCollapsable ifTrue:[ |
1698 model addChildAndSubChildren:aNode below:node at:1 |
1726 model add:something beforeIndex:1 below:node |
1699 ] ifFalse:[ |
1727 ] ifFalse:[ |
1700 model addChildAndSubChildren:aNode below:(node parent) after:node |
1728 model add:something after:node |
|
1729 ] |
|
1730 ] ifFalse:[ |
|
1731 model add:something beforeIndex:1 below:(self root) |
|
1732 ] |
1701 ] |
1733 ] |
1702 |
1734 ! |
1703 |
1735 |
1704 ! |
1736 nodeLabel:aLabel |
1705 |
1737 ^ TreeItem name:aLabel contents:(MenuEditor::Item new label:aLabel). |
1706 nodeLabel:aLabel level:aLevel |
|
1707 |node| |
|
1708 |
|
1709 node := HierarchyNode new. |
|
1710 node childCollectionClass:OrderedCollection. |
|
1711 node name:aLabel. |
|
1712 node level:aLevel. |
|
1713 node contents:(MenuEditor::Item new label:aLabel). |
|
1714 ^ node |
|
1715 ! ! |
1738 ! ! |
1716 |
1739 |
1717 !MenuEditor::Painter methodsFor:'selection'! |
1740 !MenuEditor::Painter methodsFor:'selection'! |
1718 |
1741 |
1719 selectedNodeChanged |
1742 selectedNodeChanged |
1720 |node name| |
1743 |node name index| |
1721 |
1744 |
1722 (node := self selectedNode) isNil ifTrue:[^ self]. |
1745 (index := self selectedIndex) ~~ 0 ifTrue:[ |
1723 name := node contents label. |
1746 node := listOfNodes at:index. |
1724 |
1747 name := node contents label. |
1725 list at:selection put:name. |
1748 list at:index put:name. |
1726 node name:name. |
1749 node name:name. |
1727 self redrawLine:selection. |
1750 self redrawLine:index. |
|
1751 ] |
1728 ! ! |
1752 ! ! |
1729 |
1753 |
1730 !MenuEditor class methodsFor:'documentation'! |
1754 !MenuEditor class methodsFor:'documentation'! |
1731 |
1755 |
1732 version |
1756 version |