MenuEditor.st
changeset 2569 b55aeaecefda
parent 2448 eec01c02868e
child 2580 1ed737f4f840
equal deleted inserted replaced
2568:ea1484c2ab9b 2569:b55aeaecefda
    12 "{ Package: 'stx:libtool2' }"
    12 "{ Package: 'stx:libtool2' }"
    13 
    13 
    14 ResourceSpecEditor subclass:#MenuEditor
    14 ResourceSpecEditor subclass:#MenuEditor
    15 	instanceVariableNames:'selectionHolder tabHolder listOfItems listOfTabs
    15 	instanceVariableNames:'selectionHolder tabHolder listOfItems listOfTabs
    16 		selectedSuperItems notifyDisabledCounter wizards listOfItemsView
    16 		selectedSuperItems notifyDisabledCounter wizards listOfItemsView
    17 		dropOverLine'
    17 		dropOverLine savedSpec'
    18 	classVariableNames:'ImageRetrieverClasses'
    18 	classVariableNames:'ImageRetrieverClasses'
    19 	poolDictionaries:''
    19 	poolDictionaries:''
    20 	category:'Interface-UIPainter'
    20 	category:'Interface-UIPainter'
    21 !
    21 !
    22 
    22 
   445 #fileLoad
   445 #fileLoad
   446 'Load Menuspec from Method'
   446 'Load Menuspec from Method'
   447 
   447 
   448 #fileSave
   448 #fileSave
   449 'Save Menuspec as Method'
   449 'Save Menuspec as Method'
       
   450 
       
   451 #fileSaveSpec
       
   452 'Save Menuspec'
   450 
   453 
   451 #fileSaveAs
   454 #fileSaveAs
   452 'Save Menuspec as Method...'
   455 'Save Menuspec as Method...'
   453 
   456 
   454 #addMenuSeparator
   457 #addMenuSeparator
   943           )
   946           )
   944          (MenuItem
   947          (MenuItem
   945             label: '-'
   948             label: '-'
   946           )
   949           )
   947          (MenuItem
   950          (MenuItem
       
   951             isVisible: isNotEditingSpecOnly
   948             activeHelpKey: fileLoad
   952             activeHelpKey: fileLoad
   949             label: 'Load...'
   953             label: 'Load...'
   950             itemValue: doLoad
   954             itemValue: doLoad
   951             translateLabel: true
   955             translateLabel: true
   952           )
   956           )
   953          (MenuItem
   957          (MenuItem
       
   958             isVisible: isNotEditingSpecOnly
   954             label: '-'
   959             label: '-'
   955           )
   960           )
   956          (MenuItem
   961          (MenuItem
       
   962             isVisible: isEditingSpecOnly
       
   963             activeHelpKey: fileSaveSpec
       
   964             label: 'Save'
       
   965             itemValue: doSave
       
   966             translateLabel: true
       
   967           )
       
   968          (MenuItem
       
   969             isVisible: isNotEditingSpecOnly
   957             activeHelpKey: fileSave
   970             activeHelpKey: fileSave
   958             label: 'Save'
   971             label: 'Save'
   959             itemValue: doSave
   972             itemValue: doSave
   960             translateLabel: true
   973             translateLabel: true
   961           )
   974           )
   962          (MenuItem
   975          (MenuItem
       
   976             isVisible: isNotEditingSpecOnly
   963             activeHelpKey: fileSaveAs
   977             activeHelpKey: fileSaveAs
   964             label: 'Save As...'
   978             label: 'Save As...'
   965             itemValue: doSaveAs
   979             itemValue: doSaveAs
   966             translateLabel: true
   980             translateLabel: true
   967           )
   981           )
  1143             keepLinkedMenu: true
  1157             keepLinkedMenu: true
  1144             ignoreMnemonicKeys: true
  1158             ignoreMnemonicKeys: true
  1145             ignoreShortcutKeys: true
  1159             ignoreShortcutKeys: true
  1146           )
  1160           )
  1147          (MenuItem
  1161          (MenuItem
       
  1162             isVisible: isNotEditingSpecOnly
  1148             label: 'Generate'
  1163             label: 'Generate'
  1149             translateLabel: true
  1164             translateLabel: true
  1150             submenuChannel: generateMenu
  1165             submenuChannel: generateMenu
  1151             keepLinkedMenu: true
  1166             keepLinkedMenu: true
  1152             ignoreMnemonicKeys: true
  1167             ignoreMnemonicKeys: true
  1204 
  1219 
  1205     <resource: #menu>
  1220     <resource: #menu>
  1206 
  1221 
  1207     ^
  1222     ^
  1208      #(#Menu
  1223      #(#Menu
  1209 	#(
  1224         #(
  1210 	 #(#MenuItem
  1225          #(#MenuItem
  1211 	    #activeHelpKey: #settingsRedefineAspectMethods
  1226             isVisible: isNotEditingSpecOnly
  1212 	    #enabled: #hasValidSpecClass
  1227             #activeHelpKey: #settingsRedefineAspectMethods
  1213 	    #label: 'Redefine Aspect Methods'
  1228             #enabled: #hasValidSpecClass
  1214 	    #translateLabel: true
  1229             #label: 'Redefine Aspect Methods'
  1215 	    #hideMenuOnActivated: false
  1230             #translateLabel: true
  1216 	    #indication: #redefineAspectMethodsChannel
  1231             #hideMenuOnActivated: false
  1217 	  )
  1232             #indication: #redefineAspectMethodsChannel
  1218 	 #(#MenuItem
  1233           )
  1219 	    #activeHelpKey: #settingsRedefineAspectMethods
  1234          #(#MenuItem
  1220 	    #label: 'AutoAccept on Selection-Change'
  1235             #activeHelpKey: #settingsRedefineAspectMethods
  1221 	    #translateLabel: true
  1236             #label: 'AutoAccept on Selection-Change'
  1222 	    #hideMenuOnActivated: false
  1237             #translateLabel: true
  1223 	    #indication: #autoAcceptOnSelectionChange
  1238             #hideMenuOnActivated: false
  1224 	  )
  1239             #indication: #autoAcceptOnSelectionChange
  1225 	 )
  1240           )
  1226 	nil
  1241          )
  1227 	nil
  1242         nil
       
  1243         nil
  1228       )
  1244       )
  1229 !
  1245 !
  1230 
  1246 
  1231 standardMenus
  1247 standardMenus
  1232     "This resource specification was automatically generated
  1248     "This resource specification was automatically generated
  1280 
  1296 
  1281     <resource: #menu>
  1297     <resource: #menu>
  1282 
  1298 
  1283     ^
  1299     ^
  1284      #(Menu
  1300      #(Menu
  1285 	(
  1301         (
  1286 	 (MenuItem
  1302          (MenuItem
  1287 	    activeHelpKey: fileNew
  1303             activeHelpKey: fileNew
  1288 	    label: 'New'
  1304             label: 'New'
  1289 	    itemValue: doNew
  1305             itemValue: doNew
  1290 	    translateLabel: true
  1306             translateLabel: true
  1291 	    isButton: true
  1307             isButton: true
  1292 	    labelImage: (ResourceRetriever ToolbarIconLibrary newMenuIcon)
  1308             labelImage: (ResourceRetriever ToolbarIconLibrary newMenuIcon)
  1293 	  )
  1309           )
  1294 	 (MenuItem
  1310          (MenuItem
  1295 	    label: '-'
  1311             label: '-'
  1296 	  )
  1312           )
  1297 	 (MenuItem
  1313          (MenuItem
  1298 	    activeHelpKey: fileLoad
  1314             isVisible: isNotEditingSpecOnly
  1299 	    label: 'Load'
  1315             activeHelpKey: fileLoad
  1300 	    itemValue: doLoad
  1316             label: 'Load'
  1301 	    translateLabel: true
  1317             itemValue: doLoad
  1302 	    isButton: true
  1318             translateLabel: true
  1303 	    submenuChannel: menuHistory
  1319             isButton: true
  1304 	    labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon)
  1320             submenuChannel: menuHistory
  1305 	    keepLinkedMenu: true
  1321             labelImage: (ResourceRetriever ToolbarIconLibrary loadFromMethodIcon)
  1306 	  )
  1322             keepLinkedMenu: true
  1307 	 (MenuItem
  1323           )
  1308 	    activeHelpKey: fileSave
  1324          (MenuItem
  1309 	    label: 'Save'
  1325             isVisible: isNotEditingSpecOnly
  1310 	    itemValue: doSave
  1326             activeHelpKey: fileSave
  1311 	    translateLabel: true
  1327             label: 'Save'
  1312 	    isButton: true
  1328             itemValue: doSave
  1313 	    labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon)
  1329             translateLabel: true
  1314 	  )
  1330             isButton: true
  1315 	 (MenuItem
  1331             labelImage: (ResourceRetriever ToolbarIconLibrary saveAsMethodIcon)
  1316 	    label: '-'
  1332           )
  1317 	  )
  1333          (MenuItem  
  1318 	 (MenuItem
  1334             isVisible: isEditingSpecOnly
  1319 	    activeHelpKey: editCut
  1335             activeHelpKey: fileSaveSpec
  1320 	    enabled: hasSelectionChannel
  1336             label: 'Save'
  1321 	    label: 'Cut'
  1337             itemValue: doSave
  1322 	    itemValue: doCut
  1338             translateLabel: true
  1323 	    translateLabel: true
  1339             isButton: true
  1324 	    isButton: true
  1340             labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon)
  1325 	    labelImage: (ResourceRetriever ToolbarIconLibrary cutMenuItemIcon)
  1341           )
  1326 	  )
  1342          (MenuItem
  1327 	 (MenuItem
  1343             label: '-'
  1328 	    activeHelpKey: editCopy
  1344           )
  1329 	    enabled: hasSelectionChannel
  1345          (MenuItem
  1330 	    label: 'Copy'
  1346             activeHelpKey: editCut
  1331 	    itemValue: doCopy
  1347             enabled: hasSelectionChannel
  1332 	    translateLabel: true
  1348             label: 'Cut'
  1333 	    isButton: true
  1349             itemValue: doCut
  1334 	    labelImage: (ResourceRetriever ToolbarIconLibrary copyMenuItemIcon)
  1350             translateLabel: true
  1335 	  )
  1351             isButton: true
  1336 	 (MenuItem
  1352             labelImage: (ResourceRetriever ToolbarIconLibrary cutMenuItemIcon)
  1337 	    activeHelpKey: editPaste
  1353           )
  1338 	    enabled: canPasteHolder
  1354          (MenuItem
  1339 	    label: 'Paste'
  1355             activeHelpKey: editCopy
  1340 	    itemValue: doPaste
  1356             enabled: hasSelectionChannel
  1341 	    translateLabel: true
  1357             label: 'Copy'
  1342 	    isButton: true
  1358             itemValue: doCopy
  1343 	    labelImage: (ResourceRetriever ToolbarIconLibrary pasteMenuItemIcon)
  1359             translateLabel: true
  1344 	  )
  1360             isButton: true
  1345 	 (MenuItem
  1361             labelImage: (ResourceRetriever ToolbarIconLibrary copyMenuItemIcon)
  1346 	    label: '-'
  1362           )
  1347 	  )
  1363          (MenuItem
  1348 	 (MenuItem
  1364             activeHelpKey: editPaste
  1349 	    activeHelpKey: addMenuItem
  1365             enabled: canPasteHolder
  1350 	    enabled: hasSingleSelectionChannel
  1366             label: 'Paste'
  1351 	    label: 'Add Item'
  1367             itemValue: doPaste
  1352 	    itemValue: doCreateItem
  1368             translateLabel: true
  1353 	    translateLabel: true
  1369             isButton: true
  1354 	    isButton: true
  1370             labelImage: (ResourceRetriever ToolbarIconLibrary pasteMenuItemIcon)
  1355 	    labelImage: (ResourceRetriever #'MenuEditor::Item' iconItem)
  1371           )
  1356 	  )
  1372          (MenuItem
  1357 	 (MenuItem
  1373             label: '-'
  1358 	    activeHelpKey: addMenuSeparator
  1374           )
  1359 	    enabled: hasSingleSelectionChannel
  1375          (MenuItem
  1360 	    label: 'Add Separator'
  1376             activeHelpKey: addMenuItem
  1361 	    itemValue: doCreateSep
  1377             enabled: hasSingleSelectionChannel
  1362 	    translateLabel: true
  1378             label: 'Add Item'
  1363 	    isButton: true
  1379             itemValue: doCreateItem
  1364 	    labelImage: (ResourceRetriever #'MenuEditor::Item' iconSeparator)
  1380             translateLabel: true
  1365 	  )
  1381             isButton: true
  1366 	 (MenuItem
  1382             labelImage: (ResourceRetriever #'MenuEditor::Item' iconItem)
  1367 	    activeHelpKey: addMenuSlice
  1383           )
  1368 	    enabled: hasSingleSelectionChannel
  1384          (MenuItem
  1369 	    label: 'Menu Slice'
  1385             activeHelpKey: addMenuSeparator
  1370 	    itemValue: doCreateMenuSliceItem
  1386             enabled: hasSingleSelectionChannel
  1371 	    translateLabel: true
  1387             label: 'Add Separator'
  1372 	    isButton: true
  1388             itemValue: doCreateSep
  1373 	    labelImage: (ResourceRetriever #'MenuEditor::Item' iconSliceMenu)
  1389             translateLabel: true
  1374 	  )
  1390             isButton: true
  1375 	 (MenuItem
  1391             labelImage: (ResourceRetriever #'MenuEditor::Item' iconSeparator)
  1376 	    activeHelpKey: addSubMenu
  1392           )
  1377 	    enabled: hasSingleSelectionChannel
  1393          (MenuItem
  1378 	    label: 'Add Menu'
  1394             activeHelpKey: addMenuSlice
  1379 	    itemValue: doCreateMenu
  1395             enabled: hasSingleSelectionChannel
  1380 	    translateLabel: true
  1396             label: 'Menu Slice'
  1381 	    isButton: true
  1397             itemValue: doCreateMenuSliceItem
  1382 	    submenuChannel: standardMenus
  1398             translateLabel: true
  1383 	    labelImage: (ResourceRetriever #'MenuEditor::Item' iconMenu)
  1399             isButton: true
  1384 	    keepLinkedMenu: true
  1400             labelImage: (ResourceRetriever #'MenuEditor::Item' iconSliceMenu)
  1385 	  )
  1401           )
  1386 	 (MenuItem
  1402          (MenuItem
  1387 	    activeHelpKey: addSubMenuLink
  1403             activeHelpKey: addSubMenu
  1388 	    enabled: hasSingleSelectionChannel
  1404             enabled: hasSingleSelectionChannel
  1389 	    label: 'Add Linked Menu'
  1405             label: 'Add Menu'
  1390 	    itemValue: doCreateLinkedMenu
  1406             itemValue: doCreateMenu
  1391 	    translateLabel: true
  1407             translateLabel: true
  1392 	    isButton: true
  1408             isButton: true
  1393 	    labelImage: (ResourceRetriever #'MenuEditor::Item' iconLinkedMenu)
  1409             submenuChannel: standardMenus
  1394 	  )
  1410             labelImage: (ResourceRetriever #'MenuEditor::Item' iconMenu)
  1395 	 (MenuItem
  1411             keepLinkedMenu: true
  1396 	    activeHelpKey: addDelayedMenu
  1412           )
  1397 	    enabled: canCreateDelayedMenuChannel
  1413          (MenuItem
  1398 	    label: 'Add Delayed Menu'
  1414             activeHelpKey: addSubMenuLink
  1399 	    itemValue: doCreateDelayedMenu:
  1415             enabled: hasSingleSelectionChannel
  1400 	    translateLabel: true
  1416             label: 'Add Linked Menu'
  1401 	    isButton: true
  1417             itemValue: doCreateLinkedMenu
  1402 	    labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedMenu)
  1418             translateLabel: true
  1403 	    argument: menu
  1419             isButton: true
  1404 	  )
  1420             labelImage: (ResourceRetriever #'MenuEditor::Item' iconLinkedMenu)
  1405 	 (MenuItem
  1421           )
  1406 	    activeHelpKey: addDelayedSubMenuLink
  1422          (MenuItem
  1407 	    enabled: canCreateDelayedMenuChannel
  1423             activeHelpKey: addDelayedMenu
  1408 	    label: 'Add Delayed Linked Menu'
  1424             enabled: canCreateDelayedMenuChannel
  1409 	    itemValue: doCreateDelayedMenu:
  1425             label: 'Add Delayed Menu'
  1410 	    translateLabel: true
  1426             itemValue: doCreateDelayedMenu:
  1411 	    isButton: true
  1427             translateLabel: true
  1412 	    labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedLinkedMenu)
  1428             isButton: true
  1413 	    argument: linkedMenu
  1429             labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedMenu)
  1414 	  )
  1430             argument: menu
  1415 	 (MenuItem
  1431           )
  1416 	    label: ''
  1432          (MenuItem
  1417 	  )
  1433             activeHelpKey: addDelayedSubMenuLink
  1418 	 (MenuItem
  1434             enabled: canCreateDelayedMenuChannel
  1419 	    activeHelpKey: editMoveUp
  1435             label: 'Add Delayed Linked Menu'
  1420 	    enabled: enableMovingUpOrDownHolder
  1436             itemValue: doCreateDelayedMenu:
  1421 	    label: 'Move Up'
  1437             translateLabel: true
  1422 	    itemValue: doMoveUp
  1438             isButton: true
  1423 	    translateLabel: true
  1439             labelImage: (ResourceRetriever #'MenuEditor::Item' iconDelayedLinkedMenu)
  1424 	    isButton: true
  1440             argument: linkedMenu
  1425 	    startGroup: right
  1441           )
  1426 	    labelImage: (ResourceRetriever Icon upIcon)
  1442          (MenuItem
  1427 	  )
  1443             label: ''
  1428 	 (MenuItem
  1444           )
  1429 	    activeHelpKey: editMoveDown
  1445          (MenuItem
  1430 	    enabled: enableMovingUpOrDownHolder
  1446             activeHelpKey: editMoveUp
  1431 	    label: 'Move Down'
  1447             enabled: enableMovingUpOrDownHolder
  1432 	    itemValue: doMoveDown
  1448             label: 'Move Up'
  1433 	    translateLabel: true
  1449             itemValue: doMoveUp
  1434 	    isButton: true
  1450             translateLabel: true
  1435 	    labelImage: (ResourceRetriever Icon downIcon)
  1451             isButton: true
  1436 	  )
  1452             startGroup: right
  1437 	 (MenuItem
  1453             labelImage: (ResourceRetriever Icon upIcon)
  1438 	    activeHelpKey: editMoveIn
  1454           )
  1439 	    enabled: enableMovingInHolder
  1455          (MenuItem
  1440 	    label: 'Move Into Next'
  1456             activeHelpKey: editMoveDown
  1441 	    itemValue: doMoveInNext
  1457             enabled: enableMovingUpOrDownHolder
  1442 	    translateLabel: true
  1458             label: 'Move Down'
  1443 	    isButton: true
  1459             itemValue: doMoveDown
  1444 	    labelImage: (ResourceRetriever Icon downRightIcon)
  1460             translateLabel: true
  1445 	  )
  1461             isButton: true
  1446 	 (MenuItem
  1462             labelImage: (ResourceRetriever Icon downIcon)
  1447 	    activeHelpKey: editMoveInAbove
  1463           )
  1448 	    enabled: enableMovingInAboveHolder
  1464          (MenuItem
  1449 	    label: 'Move Into Previous'
  1465             activeHelpKey: editMoveIn
  1450 	    itemValue: doMoveInPrevious
  1466             enabled: enableMovingInHolder
  1451 	    translateLabel: true
  1467             label: 'Move Into Next'
  1452 	    isButton: true
  1468             itemValue: doMoveInNext
  1453 	    labelImage: (ResourceRetriever Icon upRightIcon)
  1469             translateLabel: true
  1454 	  )
  1470             isButton: true
  1455 	 (MenuItem
  1471             labelImage: (ResourceRetriever Icon downRightIcon)
  1456 	    activeHelpKey: editMoveOut
  1472           )
  1457 	    enabled: enableMovingOutHolder
  1473          (MenuItem
  1458 	    label: 'Move Out'
  1474             activeHelpKey: editMoveInAbove
  1459 	    itemValue: doMoveOut
  1475             enabled: enableMovingInAboveHolder
  1460 	    translateLabel: true
  1476             label: 'Move Into Previous'
  1461 	    isButton: true
  1477             itemValue: doMoveInPrevious
  1462 	    labelImage: (ResourceRetriever Icon leftDownIcon)
  1478             translateLabel: true
  1463 	  )
  1479             isButton: true
  1464 	 )
  1480             labelImage: (ResourceRetriever Icon upRightIcon)
  1465 	nil
  1481           )
  1466 	nil
  1482          (MenuItem
       
  1483             activeHelpKey: editMoveOut
       
  1484             enabled: enableMovingOutHolder
       
  1485             label: 'Move Out'
       
  1486             itemValue: doMoveOut
       
  1487             translateLabel: true
       
  1488             isButton: true
       
  1489             labelImage: (ResourceRetriever Icon leftDownIcon)
       
  1490           )
       
  1491          )
       
  1492         nil
       
  1493         nil
  1467       )
  1494       )
  1468 ! !
  1495 ! !
  1469 
  1496 
  1470 !MenuEditor class methodsFor:'menu specs-standard'!
  1497 !MenuEditor class methodsFor:'menu specs-standard'!
  1471 
  1498 
  1649 	tool builder window:(ApplicationSubView new client:tool).
  1676 	tool builder window:(ApplicationSubView new client:tool).
  1650 	tool
  1677 	tool
  1651     ]
  1678     ]
  1652 !
  1679 !
  1653 
  1680 
       
  1681 savedSpec
       
  1682     ^ savedSpec
       
  1683 !
       
  1684 
  1654 useHelpTool:aHelpTool
  1685 useHelpTool:aHelpTool
  1655     "take the help dictionaries from aHelpTool into my helpTool
  1686     "take the help dictionaries from aHelpTool into my helpTool
  1656     "
  1687     "
  1657     self helpTool loadFromHelpTool:aHelpTool.
  1688     self helpTool loadFromHelpTool:aHelpTool.
  1658 ! !
  1689 ! !
  1848 
  1879 
  1849     specClass := aClass.
  1880     specClass := aClass.
  1850     specSelector := aSelector.
  1881     specSelector := aSelector.
  1851 
  1882 
  1852     aSelector notNil ifTrue:[
  1883     aSelector notNil ifTrue:[
  1853 	aClass notNil ifTrue:[
  1884         aClass notNil ifTrue:[
  1854 	    cls := aClass isBehavior ifTrue:[ aClass ] ifFalse:[ self resolveName:aClass].
  1885             cls := aClass isBehavior ifTrue:[ aClass ] ifFalse:[ self resolveName:aClass].
  1855 
  1886 
  1856 	    (cls respondsTo:aSelector) ifTrue:[
  1887             (cls respondsTo:aSelector) ifTrue:[
  1857 		menu := cls perform: aSelector.
  1888                 menu := cls perform: aSelector.
  1858 	    ].
  1889             ].
  1859 
  1890         ].
  1860 	    menu notNil ifTrue:[
  1891     ].
  1861 		(menu isCollection) ifTrue:[
  1892     self loadFromMenu:menu selector:aSelector.
  1862 		    menu := Menu decodeFromLiteralArray:menu
  1893 !
  1863 		].
  1894 
  1864 	    ]
  1895 loadFromMenu:menuArg selector:selectorOrNil
  1865 	].
  1896     "rebuild menu"
  1866     ].
  1897 
  1867     self buildFromMenu:menu selector:aSelector.
  1898     |menu|
       
  1899 
       
  1900     menu := menuArg.
       
  1901     menu notNil ifTrue:[
       
  1902         (menu isCollection) ifTrue:[
       
  1903             menu := Menu decodeFromLiteralArray:menu
       
  1904         ].
       
  1905     ].
       
  1906     self buildFromMenu:menu selector:selectorOrNil.
  1868     self clearModified.
  1907     self clearModified.
  1869 
  1908 
  1870     "Modified: / 27-03-2007 / 11:16:47 / cg"
  1909     "Modified: / 27-03-2007 / 11:16:47 / cg"
  1871 ! !
  1910 ! !
  1872 
  1911 
  2265 
  2304 
  2266     listOfTabs := List new.
  2305     listOfTabs := List new.
  2267     wizards    := IdentityDictionary new.
  2306     wizards    := IdentityDictionary new.
  2268 !
  2307 !
  2269 
  2308 
  2270 openModalOnMenu:aMenu
  2309 loadFromResourceSpec:aResourceSpec
  2271     "build a tree from aMenu and open it modal
  2310     self loadFromMenu:aResourceSpec selector:nil
  2272     "
  2311 !
  2273     self openModalOnResourceSpec:aMenu
  2312 
       
  2313 openModalOnMenu:aMenuOrNil
       
  2314     "build a tree from aMenu and open it modal"
       
  2315 
       
  2316     self openModalOnResourceSpec:aMenuOrNil
  2274 !
  2317 !
  2275 
  2318 
  2276 postBuildListOfItemsView:aSrollableView
  2319 postBuildListOfItemsView:aSrollableView
  2277     listOfItemsView := aSrollableView scrolledView.
  2320     listOfItemsView := aSrollableView scrolledView.
  2278 !
  2321 !
  2389     self enablingCommitButtonsHolder value:false.
  2432     self enablingCommitButtonsHolder value:false.
  2390     self clearModifiedFlag.
  2433     self clearModifiedFlag.
  2391 !
  2434 !
  2392 
  2435 
  2393 generateMenuSpec
  2436 generateMenuSpec
  2394     "generate and returns the current menu spec or nil
  2437     "generate and returns the current menu spec or nil"
  2395     "
  2438 
  2396     |menu spec|
  2439     |menu|
  2397 
  2440 
  2398     menu := listOfItems root submenu.
  2441     menu := listOfItems root submenu.
  2399     menu isNil ifTrue:[^ nil].
  2442     menu isNil ifTrue:[^ nil].
  2400     menu := menu literalArrayEncoding.
  2443 
  2401     spec := WriteStream on:String new.
  2444     ^ menu literalArrayEncoding.
  2402     UISpecification prettyPrintSpecArray:menu on:spec indent:5.
  2445 !
  2403     ^ spec contents.
  2446 
       
  2447 generateMenuSpecString
       
  2448     "generate and returns the current menu spec as string or nil"
       
  2449 
       
  2450     |menu specStream|
       
  2451 
       
  2452     menu := self generateMenuSpec.
       
  2453     menu isNil ifTrue:[^ nil].
       
  2454 
       
  2455     specStream := WriteStream on:String new.
       
  2456     UISpecification prettyPrintSpecArray:menu on:specStream indent:5.
       
  2457     ^ specStream contents.
  2404 !
  2458 !
  2405 
  2459 
  2406 withoutNotifyDo:aBlock
  2460 withoutNotifyDo:aBlock
  2407     "evaluate the block; all change notifications are
  2461     "evaluate the block; all change notifications are
  2408      discard during the block is evaluated"
  2462      discard during the block is evaluated"
  2426     |cls|
  2480     |cls|
  2427 
  2481 
  2428     specClass isNil ifTrue:[^ false].
  2482     specClass isNil ifTrue:[^ false].
  2429     cls := self resolveName:specClass.
  2483     cls := self resolveName:specClass.
  2430     ^ cls notNil
  2484     ^ cls notNil
       
  2485 !
       
  2486 
       
  2487 isEditingSpecOnly
       
  2488     ^ masterApplication notNil and:[ masterApplication isEditingSpecOnly ]
       
  2489 !
       
  2490 
       
  2491 isNotEditingSpecOnly
       
  2492     ^ self isEditingSpecOnly not
  2431 ! !
  2493 ! !
  2432 
  2494 
  2433 !MenuEditor methodsFor:'selection'!
  2495 !MenuEditor methodsFor:'selection'!
  2434 
  2496 
  2435 canSelect:anIndex
  2497 canSelect:anIndex
  2663     ].
  2725     ].
  2664 !
  2726 !
  2665 
  2727 
  2666 doSave
  2728 doSave
  2667     "save current editing menu to
  2729     "save current editing menu to
  2668 	   class: specClass
  2730            class: specClass
  2669 	selector: specSelector
  2731         selector: specSelector
  2670     "
  2732     "
  2671     |cls spec mthd category code excla|
  2733     |cls specCode mthd category code excla|
       
  2734 
       
  2735     self isEditingSpecOnly ifTrue:[
       
  2736         savedSpec := self generateMenuSpec.
       
  2737         hasSaved := true.
       
  2738         self clearModified.
       
  2739         ^ self
       
  2740     ].
  2672 
  2741 
  2673     super doSave ifFalse: [^nil].
  2742     super doSave ifFalse: [^nil].
  2674     spec := self generateMenuSpec.
  2743     specCode := self generateMenuSpecString.
  2675     spec isNil ifTrue:[^ nil].
  2744     specCode isNil ifTrue:[^ nil].
  2676 
  2745 
  2677     cls  := self resolveName:specClass.
  2746     cls  := self resolveName:specClass.
  2678 
  2747 
  2679     "/ if that method already exists, do not overwrite the category
  2748     "/ if that method already exists, do not overwrite the category
  2680 
  2749 
  2681     category := 'menu specs'.
  2750     category := 'menu specs'.
  2682     (mthd := cls class compiledMethodAt:specSelector) notNil ifTrue:[
  2751     (mthd := cls class compiledMethodAt:specSelector) notNil ifTrue:[
  2683 	category := mthd category.
  2752         category := mthd category.
  2684     ].
  2753     ].
  2685 
  2754 
  2686     excla := Character excla asString.
  2755     excla := Character excla asString.
  2687 
  2756 
  2688     code := excla
  2757     code := excla
  2689 	    , (cls name , ' class methodsFor:' , category storeString)
  2758             , (cls name , ' class methodsFor:' , category storeString)
  2690 	    , excla , '\\'
  2759             , excla , '\\'
  2691 
  2760 
  2692 	    , specSelector , '\'
  2761             , specSelector , '\'
  2693 	    , (self class codeGenerationComment replChar:$!! withString:'!!!!')
  2762             , (self class codeGenerationComment replChar:$!! withString:'!!!!')
  2694 	    , '\\    "\'
  2763             , '\\    "\'
  2695 	    , ('     MenuEditor new openOnClass:' , cls name , ' andSelector:#' , specSelector , '\')
  2764             , ('     MenuEditor new openOnClass:' , cls name , ' andSelector:#' , specSelector , '\')
  2696 	    , ('     (Menu new fromLiteralArrayEncoding:(' , cls name , ' ' , specSelector , ')) startUp\')
  2765             , ('     (Menu new fromLiteralArrayEncoding:(' , cls name , ' ' , specSelector , ')) startUp\')
  2697 	    , '    "\'.
  2766             , '    "\'.
  2698 
  2767 
  2699     code := code
  2768     code := code
  2700 	    , '\'
  2769             , '\'
  2701 	    , '    <resource: #menu>\\'
  2770             , '    <resource: #menu>\\'
  2702 	    , '    ^ ' , spec
  2771             , '    ^ ' , specCode
  2703 	    , '\'
  2772             , '\'
  2704 	    , (excla , ' ' , excla)
  2773             , (excla , ' ' , excla)
  2705 	    , '\\'.
  2774             , '\\'.
  2706 
  2775 
  2707     code := code withCRs.
  2776     code := code withCRs.
  2708     (ReadStream on:code) fileIn.
  2777     (ReadStream on:code) fileIn.
  2709 
  2778 
  2710     self isStandAlone ifTrue:[
  2779     self isStandAlone ifTrue:[
  2711 	self helpTool doSave
  2780         self helpTool doSave
  2712     ].
  2781     ].
  2713 
  2782 
  2714     self updateHistory.
  2783     self updateHistory.
  2715     hasSaved := true.
  2784     hasSaved := true.
  2716     self clearModified.
  2785     self clearModified.
  2724 	listOfItems root rawLabel:specSelector
  2793 	listOfItems root rawLabel:specSelector
  2725     ].
  2794     ].
  2726 !
  2795 !
  2727 
  2796 
  2728 doShowMenuSpec
  2797 doShowMenuSpec
  2729     "opens a code view with the contents of the menu spec
  2798     "opens a code view with the contents of the menu spec"
  2730     "
  2799 
  2731     |spec|
  2800     |code|
  2732 
  2801 
  2733     spec := self generateMenuSpec.
  2802     code := self generateMenuSpecString.
  2734 
  2803 
  2735     spec ifNotNil:[
  2804     code ifNotNil:[
  2736 	CodeView openWith:spec title: 'Menu Spec'
  2805         CodeView openWith:code title: 'Menu Spec'
  2737     ].
  2806     ].
  2738 !
  2807 !
  2739 
  2808 
  2740 save
  2809 save
  2741     self doSave
  2810     self doSave