NewLauncher.st
author Claus Gittinger <cg@exept.de>
Wed, 22 Sep 1999 13:49:23 +0200
changeset 2405 b9bf198ab774
parent 2390 e76526e09798
child 2415 2fe7fb648787
permissions -rw-r--r--
another demo

"
 COPYRIGHT (c) 1997-1998 by eXept Software AG
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice. This software may not
 be provided or otherwise made available to, or used by, any
 other person. No title to or ownership of the software is
 hereby transferred.
"



AbstractLauncherApplication subclass:#NewLauncher
	instanceVariableNames:'isMainLauncher helpIsOn'
	classVariableNames:'UserAddedTools'
	poolDictionaries:''
	category:'Interface-Smalltalk'
!

!NewLauncher class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1997-1998 by eXept Software AG
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice. This software may not
 be provided or otherwise made available to, or used by, any
 other person. No title to or ownership of the software is
 hereby transferred.
"


!

documentation
"
    The new launcher.
    This one provides all of the Launchers functionality, 
    but has been written using the new GUI painter tools.
    (i.e. its menu and toolbar is defined by specs, which can be
     easily modified).
    Functionality which can be shared with the old launcher
    has been moved to a common superclass.

    If you want to write your own (application-)launcher, we recommend
    creating a subclass, and redefining the appropriate menu & menuToolBar
    methods there.

    [start with:]
        NewLauncher open

    [see also:]
        Launcher

    [author:]
        Thomas Zwick, eXept Software AG
        Claus Gittinger, eXept Software AG
"

! !

!NewLauncher class methodsFor:'accessing'!

label

    ^'Launcher'


! !

!NewLauncher class methodsFor:'defaults'!

windowIcon
    ^ Icon stxIcon

    "Created: / 16.8.1998 / 13:11:58 / cg"
    "Modified: / 17.8.1998 / 10:07:09 / cg"
! !

!NewLauncher class methodsFor:'help specs'!

helpSpec
    "This resource specification was automatically generated
     by the UIHelpTool of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIHelpTool may not be able to read the specification."

    "
     UIHelpTool openOnClass:NewLauncher    
    "

    <resource: #help>

    ^super helpSpec addPairsFrom:#(

#aboutLicenseConditions
'Show the license conditions of ST/X.'

#classes
'Class functions.'

#classesClassBrowser
'Open a dialog for defining and opening a Class Browser on a class.'

#classesClassHierarchyBrowser
'Open a dialog for defining and opening a Class Hierarchy Browser on a class.'

#classesClassTreeBrowser
'Open a Class Tree on the classes of ST/X.'

#classesFullClassBrowser
'Open a dialog for defining and opening a Full Class Browser on a class.'

#classesImplementors
'Find all methods which implement a particular message'

#classesRemoveAllTracePoints
'Remove all trace- and break-points.'

#classesResourceMethods
'Open a dialog for searching resource methods.'

#classesSenders
'Find all methods which send a particular message.'

#classesShowTracePoints
'Open a list showing all trace- and break-points on methods.'

#classesSpecial
'Special class functions.'

#classesSpecialReferencesToUndeclared
'Open a list of methods refering to undeclared variables.'

#classesSystemBrowser
'Open a System Browser.'

#classesSystemBrowserOnClass
'Open a System Browser on a previously modified class.'

#demos
'Demo functions.'

#demos3D
'3D GL graphic demos.'

#demos3DcubeSolid
'A rotating solid cube.'

#demos3DcubeWire
'A rotating wireframe cube.'

#demos3Ddoughnut
'A rotating wireframe doughnut.'

#demos3Dlogo
'The ST/X logo.'

#demos3Dplane
'A rotating plane.'

#demos3Dplanet
'Two spheres - one rotating around the other.'

#demos3Drubics
'A rubics cube - with interaction.'

#demos3Dsphere
'A rotating wireframe sphere.'

#demos3Dteapot
'A teopot.'

#demos3Dtetra
'A rotating tetrahedron.'

#demosAnimations
'Simple animation demos.'

#demosCalculator
'Opens a calculator with decimal to hex conversion.'

#demosCalendar
'Opens a GUI on the cal unix program.'

#demosClock
'Opens an analog clock application.'

#demosCommander
'Opens a demo for the Commander class.'

#demosDigitalClock
'Opens a digital clock application'

#demosFTP
'Opens a simple FTP interface demo.'

#demosFractalPatterns
'Opens a view displaying fractal patterns.'

#demosFractalPlants
'Opens a view displaying fractal plants (iterated function systems).'

#demosGUI
'GUI builder demos.'

#demosGUICalculator
'Calculator built using the GUI builder.'

#demosGUIWidgets
'GUI widgets usage.'

#demosGames
'Games.'

#demosGeometric
'Various demos displaying geometric designs.'

#demosGlobe
'Opens a rotating globe animation demo.'

#demosGoodies
'Goodies and Utilities.'

#demosGraphicEditors
'Graphic editing demos.'

#demosGraphicEditorsDrawTool
'Object drawing demo.'

#demosGraphicEditorsLogicTool
'Simulating Logic demo.'

#demosGraphicEditorsPaintTool
'Painting demo.'

#demosLSystems
'Opens a view displaying fractal patterns using Lindenmayer Systems.'

#demosMail
'Opens a simple mail viewer demo.'

#demosMandel
'Opens a view displaying the mandelbrot set.'

#demosMoreFractalPatterns
'Opens a view with more fractal patterns.'

#demosNews
'Opens a simple news reader demo.'

#demosPen
'Opens a demo for the Pen class.'

#demosTelnet
'Opens a Telnet terminal demo.'

#demosWalkingMan
'Opens a walking man animation demo.'

#fileApplicationBuilder
'Open an Application Builder for building stand alone ST/X-applications.'

#fileFileBrowser
'Open a FileBrowser to load and edit files.'

#fileLibraryBuilder
'Open a Library Builder for building binary class libraries.'

#fileModules
'Show class libraries and other modules.'

#fileSaveImage
'Save a snapshot image of ST/X into the current snapshot file.'

#fileSaveImageAs
'Save a snapshot image of ST/X into a file.'

#gamesTetris
'The tetris game - written in Smalltalk.'

#gamesTicTacToe
'Play TicTacToe against the computer.'

#gamesTicTacToe2
'Play TicTacToe against a friend.'

#helpActiveHelp
'Toggle display of active help texts in browsers.'

#helpClassDocumentation
'Show the smalltalk class documentation.'

#helpIndex
'Show the index of the online documentation.'

#helpPrintDocumentation
'Print various parts of the ST/X documentation.'

#helpSTXOnlineDocumentation
'Show the ST/X online documentation.'

#helpWhatsNew
'Show the latest news about the ST/X doc.'

#settingsCompilation
'Change compiler settings.'

#settingsFonts
'Change of the font defaults.'

#settingsKeyboardMappings
'Show the keyboard mappings.'

#settingsLanguage
'Change the national language.'

#settingsLoadSettings
'Restore the settings from a file.'

#settingsMessages
'Change the settings for info- / error-messagess.'

#settingsMisc
'Misc other settings.'

#settingsObjectMemory
'Change the object memory settings.'

#settingsPrinter
'Change the printer setup.'

#settingsSaveSettings
'Save the current settings to a file.'

#settingsScreen
'Change the display screen settings.'

#settingsSourceAndDebugger
'Change the settings of the source code management.'

#settingsViewStyle
'Change the current view style.'

#system
'System functions.'

#systemEventTrace
'Select a view to toggle the event trace for it.'

#systemEventView
'Open a view and trace its window events on the console.'

#systemGarbageCollect
'Reclaim unused memory.'

#systemGarbageCollectAndCompress
'Reclaim unused memory and minimize the amount of used memory.'

#systemInterruptLatency
'Open an Interrupt Latency Monitor displaying methods which block interrupts for longer than a given time goal.'

#systemMemory
'Display object memory statistics.'

#systemMemoryUsage
'Display object memory usage by class.'

#systemProcesses
'Open a Process Monitor displaying ST/X processes.'

#systemSemaphores
'Open a Semaphore Monitor displaying ST/X semaphores.'

#tools
'Tool functions.'

#toolsChangesBrowser
'Open a Changes Browser.'

#toolsGUIPainter
'Open a GUI Painter for graphical user interface construction.'

#toolsImageEditor
'Open a Bitmap Image Editor.'

#toolsMenuEditor
'Open a Menu Editor for building menu bars, popup menus, and tool bars.'

#toolsMisc
'Misc Tool functions.'

#toolsMiscNewChangesBrowser
'Open a ChangesBrowser (new GUI).'

#toolsMiscNewLauncher
'(Re-)open a Launcher (new GUI).'

#toolsMiscOldChangesBrowser
'Open a ChangesBrowser (old GUI).'

#toolsMiscOldLauncher
'Open an OldLauncher.'

#toolsMiscProjects
'Project functions.'

#toolsMiscProjectsNewProject
'Create a new project.'

#toolsMiscProjectsSelectProject
'Select an existing project and reopen its windows.'

#toolsNewChangesBrowser
'Open the new changes browser.'

#toolsOldChangesBrowser
'Open the old changes browser.'

#toolsProjects
''

#toolsTerminal
'Open a terminal view (aka xterm)'

#toolsWorkspace
'Open a Workspace for evaluating smalltalk expressions.'

#windows
'Window functions.'

#windowsDeiconifyAll
'Restore all minimized ST/X windows.'

#windowsFindAndDestroy
'Open a dialog for selecting an ST/X window by label and destroy it.'

#windowsFindAndRaise
'Open dialog for selecting an ST/X window by label and raise it.'

#windowsGrapScreen
'Grab the whole screen and save it to a bitmap-file.'

#windowsGrapScreenArea
'Grab an area of the screen and save it to a bitmap-file.'

#windowsGrapWindow
'Grab a window and save it to a bitmap-file.'

#windowsIconifyAll
'Minimize all ST/X windows to icons.'

#windowsSelectAndDestroy
'Select a window and destroys it.'

#windowsSelectAndInspect
'Select an ST/X window and opens an Inspector on it.'

#windowsViewTree
'Select an ST/X window and display its widget hierarchyin.'

#windowsViewTreeAllViews
'Display the widget hierarchies of all ST/X windows.'

)
! !

!NewLauncher class methodsFor:'image specs'!

helpIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     self helpIcon inspect
     ImageEditor openOnClass:self andSelector:#helpIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher helpIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@Q@@@@@@@@@@@@@"H"H @P@@@@@@@@@@H"H"H"H!!D@@@@@@@@@@@@@@"H"@Q@@@@@@@@@#H2H0@"H DP@@@@@@L#H2L2L H"@Q@@@@@@@#H2L"L#HBH DP@@@@@"L#H2H2L#@"@Q@@@@@#L#H@@2L#HBHAD@@@@CH#H@@BL#H0H DP@@@@H3H@@@@#H2@"@Q@@@@@2H0@@@CH2LB@Q@@@@@BL2@@@@H2LCHAD@@@@@@@@@@@H2L HADP@@@@@@@@@@H#H2LAD@@@@@@@@@@@H3H2LAD@@@@@@@@@@@@2H2L@D@@@@@@@@@@@@2L2LB@P@@@@@@@@@@@BL"L HA@@@@@@@@@@@@L#L H D@@@@@@@@@@@@#H#@ @@@@@@@@@@@@@@@@@B@A@@@@@@@@@@@@@"H"@ D@@@@@@@@@@@@@@@@"@P@@@@@@@@@@@CH3HBHA@@@@@@@@@@@@H2H0H @@@@@@@@@@@@@2L2@ @@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 63 79 96 255 255 0 255 255 255]; mask:((ImageMask new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@?8@@@??@@@_?8@@O??@@G??8@C??>@@???0@_??<@O???@C>O?0@?C?<@O0?>@C<O? @?C?8@@C?8@@A?<@@@_>@@@O? @@C?8@@@?>@@@O>@@@C?8@@@_>@@@O? @@C?8@@@?<@@@O>@@@C?@@@@a') ; yourself); yourself]

    "Modified: / 7.8.1998 / 12:34:56 / cg"
!

helpIcon2
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     self helpIcon2 inspect
     ImageEditor openOnClass:self andSelector:#helpIcon2
    "

    <resource: #image>

    ^Icon
        constantNamed:#'NewLauncher helpIcon2'
        ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@@@@3H@@@@@@@@@@@@@@@@CL2@@@@@@@@@@@@@@@@L3L @@@@@@@@@@@@@@@3L3@@@@@@@@@@@@@BLCL3L0@@@@L3@@@@@CL0L3L3@@H3L3L@@@A@L3@3L3LBH#L3L2A@@D@3LCL3L0H"L3L3LD@@PCL0L3L3@"P3L1L0P@A@L3@3L3LBH!!L1L3A@@D@3LCL3L0H"HQL3LD@@PCL0L3L3@"H#D3L0P@A@L3@3L3LBH"D1L3A@A@H3LCL3L0H"P3LSLD@D@3L0@#L3@"P#L3D0P@PCL3L0@#LBH"L3L3A@A@L3L3H H0H"H3L3LD@D@3L3L"HB@"H#L3L0P@P@@@L2H"@BH"L3@@A@A@H"H@@"H H"H@@"HD@D@@H"H @B@ @BH"H@P@ADP@H"H"@@H"H @DQ@@@@DP@@"H"H"H@Q@@@@@@@@@Q@@BH @DP@@@@@@@@@@@AD@@Q@@@@@@@@@@@@@@@@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 0 204 51 192 192 192 253 253 253 191 191 0]; mask:((ImageMask new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@X@@@@G @@@A<@@@@_ @@@G<@@@G?@\@C?9? C????A????0_???<G????A????0_???<G????A????0????<O????C????0????<O????C????0????<O????C????0O???8@_?? @@?? @@A?@@@@a') ; yourself); yourself]! !

!NewLauncher class methodsFor:'interface specs'!

windowSpec
    "This resource specification was automatically generated
     by the UIPainter of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the UIPainter may not be able to read the specification."

    "
     UIPainter new openOnClass:NewLauncher andSelector:#windowSpec
     NewLauncher new openInterface:#windowSpec
     NewLauncher open
    "

    <resource: #canvas>

    ^
     
       #(#FullSpec
          #window: 
           #(#WindowSpec
              #name: 'Launcher'
              #layout: #(#LayoutFrame 407 0 353 0 697 0 554 0)
              #label: 'Launcher'
              #min: #(#Point 374 44)
              #max: #(#Point 1152 900)
              #bounds: #(#Rectangle 407 353 698 555)
              #menu: #menu
              #usePreferredExtent: false
              #icon: #windowIcon
          )
          #component: 
           #(#SpecCollection
              #collection: 
               #(
                 #(#MenuPanelSpec
                    #name: 'menuToolbarView'
                    #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 38 0)
                    #menu: #menuToolbar
                    #style: #(#FontDescription #helvetica #medium #roman 10)
                )
                 #(#WorkspaceSpec
                    #name: 'transcriptView'
                    #layout: #(#LayoutFrame 0 0.0 40 0.0 0 1.0 -26 1.0)
                    #hasHorizontalScrollBar: true
                    #hasVerticalScrollBar: true
                    #miniScrollerHorizontal: true
                )
                 #(#UISubSpecification
                    #name: 'infoBarSubSpec'
                    #layout: #(#LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0)
                    #majorKey: #ToolApplicationModel
                    #minorKey: #windowSpecForInfoBarWithClock
                )
              )
          )
      )

    "Modified: / 10.9.1998 / 22:00:11 / cg"
    "Modified: / 29.1.1999 / 14:55:37 / stefan"
! !

!NewLauncher class methodsFor:'menu specs'!

menu
    "This resource specification was automatically generated
     by the MenuEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the MenuEditor may not be able to read the specification."

    "
     MenuEditor new openOnClass:NewLauncher andSelector:#menu
     (Menu new fromLiteralArrayEncoding:(NewLauncher menu)) startUp
    "

    <resource: #menu>

    ^ 
     #(#Menu
        #(
         #(#MenuItem
            #label: 'About'
            #activeHelpKey: #about
            #labelImage: #(#ResourceRetriever nil #menuIcon)
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'About Smalltalk/X...'
                  #translateLabel: true
                  #value: #openAbout
                  #activeHelpKey: #aboutSTX
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Licence Conditions'
                  #translateLabel: true
                  #value: #openLicenseConditions
                  #activeHelpKey: #aboutLicenseConditions
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'File'
            #translateLabel: true
            #activeHelpKey: #file
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'File Browser'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #fileFileBrowser
                  #argument: 'FileBrowser'
                  #labelImage: #(#ResourceRetriever nil #startFileBrowserIcon 'File Browser')
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Modules...'
                  #translateLabel: true
                  #value: #objectModuleDialog
                  #activeHelpKey: #fileModules
                  #enabled: #enableDangerousMenuItemsInRemoteLauncher
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Library Builder'
                  #translateLabel: true
                  #isVisible: #libraryBuilderAvailable
                  #value: #openApplication:
                  #activeHelpKey: #fileLibraryBuilder
                  #argument: 'LibraryBuilder'
                )
               #(#MenuItem
                  #label: 'Application Builder'
                  #translateLabel: true
                  #isVisible: #libraryBuilderAvailable
                  #value: #openApplication:
                  #activeHelpKey: #fileApplicationBuilder
                  #argument: 'ApplicationBuilder'
                )
               #(#MenuItem
                  #label: '-'
                  #isVisible: #libraryBuilderAvailable
                )
               #(#MenuItem
                  #label: 'Save Image'
                  #translateLabel: true
                  #value: #saveImage
                  #activeHelpKey: #fileSaveImage
                  #enabled: #enableDangerousMenuItemsInRemoteLauncher
                )
               #(#MenuItem
                  #label: 'Save Image As...'
                  #translateLabel: true
                  #value: #saveImageAs
                  #activeHelpKey: #fileSaveImageAs
                  #enabled: #enableDangerousMenuItemsInRemoteLauncher
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Exit...'
                  #translateLabel: true
                  #value: #exit
                  #activeHelpKey: #fileExit
                  #enabled: #enableDangerousMenuItemsInRemoteLauncher
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'Classes'
            #translateLabel: true
            #activeHelpKey: #classes
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'System Browser'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #classesSystemBrowser
                  #argument: 'SystemBrowser'
                  #labelImage: #(#ResourceRetriever nil #startSystemBrowserIcon 'System Browser')
                )
               #(#MenuItem
                  #label: 'System Browser On Class'
                  #translateLabel: true
                  #activeHelpKey: #classesSystemBrowserOnClass
                  #labelImage: #(#ResourceRetriever nil #startSystemBrowserOnHistoryClassIcon 'System Browser On Class')
                  #submenuChannel: #menuClassHistory
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Class Browser...'
                  #translateLabel: true
                  #value: #startClassBrowser
                  #activeHelpKey: #classesClassBrowser
                )
               #(#MenuItem
                  #label: 'Full Class Browser...'
                  #translateLabel: true
                  #value: #startFullClassBrowser
                  #activeHelpKey: #classesFullClassBrowser
                )
               #(#MenuItem
                  #label: 'Class Hierarchy Browser...'
                  #translateLabel: true
                  #value: #startClassHierarchyBrowser
                  #activeHelpKey: #classesClassHierarchyBrowser
                )
               #(#MenuItem
                  #label: 'Class Tree'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #classesClassTreeBrowser
                  #argument: 'ClassTreeGraphView'
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Implementors...'
                  #translateLabel: true
                  #value: #browseImplementors
                  #activeHelpKey: #classesImplementors
                )
               #(#MenuItem
                  #label: 'Senders...'
                  #translateLabel: true
                  #value: #browseSenders
                  #activeHelpKey: #classesSenders
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Special'
                  #translateLabel: true
                  #value: #special
                  #activeHelpKey: #classesSpecial
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'References To Undeclared'
                        #translateLabel: true
                        #value: #browseUndeclared
                        #activeHelpKey: #classesSpecialReferencesToUndeclared
                      )
                     #(#MenuItem
                        #label: 'Find Resource Methods...'
                        #translateLabel: true
                        #value: #browseResources
                        #activeHelpKey: #classesResourceMethods
                      )
                     #(#MenuItem
                        #label: 'Show All Break && Trace Points'
                        #translateLabel: true
                        #value: #browseAllBreakAndTracePoints
                        #activeHelpKey: #classesShowTracePoints
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'Remove All Break && Trace Points'
                        #translateLabel: true
                        #value: #removeAllBreakAndTracePoints
                        #activeHelpKey: #classesRemoveAllTracePoints
                      )
                     )
                    nil
                    nil
                  )
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'Tools'
            #translateLabel: true
            #activeHelpKey: #tools
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'Workspace'
                  #value: #openApplication:
                  #activeHelpKey: #toolsWorkspace
                  #argument: 'Workspace'
                  #labelImage: #(#ResourceRetriever nil #startWorkspaceIcon 'Workspace')
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'GUI Painter'
                  #value: #openApplication:
                  #activeHelpKey: #toolsGUIPainter
                  #argument: 'UIPainter'
                  #labelImage: #(#ResourceRetriever nil #startUIPainterIcon 'GUI Painter')
                )
               #(#MenuItem
                  #label: 'Menu Editor'
                  #value: #openApplication:
                  #activeHelpKey: #toolsMenuEditor
                  #argument: 'MenuEditor'
                  #labelImage: #(#ResourceRetriever nil #startMenuEditorIcon 'Menu Editor')
                )
               #(#MenuItem
                  #label: 'Image Editor'
                  #value: #openApplication:
                  #activeHelpKey: #toolsImageEditor
                  #argument: 'ImageEditor'
                  #labelImage: #(#ResourceRetriever nil #startImageEditorIcon 'Image Editor')
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Changes Browser'
                  #translateLabel: true
                  #value: #startChangesBrowser
                  #activeHelpKey: #toolsChangesBrowser
                  #labelImage: #(#ResourceRetriever nil #startChangesBrowserIcon 'Changes Browser')
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Misc'
                  #translateLabel: true
                  #activeHelpKey: #toolsMisc
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Projects'
                        #translateLabel: true
                        #activeHelpKey: #toolsMiscProjects
                        #submenu: 
                       #(#Menu
                          #(
                           #(#MenuItem
                              #label: 'New Project'
                              #translateLabel: true
                              #value: #newProject
                              #activeHelpKey: #toolsMiscProjectsNewProject
                            )
                           #(#MenuItem
                              #label: '-'
                            )
                           #(#MenuItem
                              #label: 'Select Project...'
                              #translateLabel: true
                              #value: #selectProject
                              #activeHelpKey: #toolsMiscProjectsSelectProject
                            )
                           )
                          nil
                          nil
                        )
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'New Launcher'
                        #translateLabel: true
                        #value: #startNewLauncher
                        #activeHelpKey: #toolsMiscNewLauncher
                      )
                     #(#MenuItem
                        #label: 'Old Launcher'
                        #translateLabel: true
                        #value: #startOldLauncher
                        #activeHelpKey: #toolsMiscOldLauncher
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'New Changes Browser'
                        #translateLabel: true
                        #value: #startNewChangesBrowser
                        #activeHelpKey: #toolsMiscNewChangesBrowser
                      )
                     #(#MenuItem
                        #label: 'Old Changes Browser'
                        #translateLabel: true
                        #value: #startOldChangesBrowser
                        #activeHelpKey: #toolsMiscOldChangesBrowser
                      )
                     #(#MenuItem
                        #label: '-'
                        #isVisible: #canDoTerminal
                      )
                     #(#MenuItem
                        #label: 'Terminal'
                        #translateLabel: true
                        #isVisible: #canDoTerminal
                        #value: #openTerminal
                        #activeHelpKey: #toolsTerminal
                      )
                     #(#MenuItem
                        #label: '-'
                        #isVisible: #canDoTerminal
                      )
                     #(#MenuItem
                        #label: 'Inspect Global Variables'
                        #translateLabel: true
                        #value: #inspectGlobalVariables
                      )
                     #(#MenuItem
                        #label: 'Inspect Workspace Variables'
                        #translateLabel: true
                        #value: #inspectWorkspaceVariables
                      )
                     #(#MenuItem
                        #label: 'Remove All Workspace Variables'
                        #translateLabel: true
                        #value: #removeAllWorkspaceVariables
                      )
                     )
                    nil
                    nil
                  )
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'System'
            #translateLabel: true
            #activeHelpKey: #system
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'Memory'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #systemMemory
                  #argument: 'MemoryMonitor'
                )
               #(#MenuItem
                  #label: 'Memory Usage'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #systemMemoryUsage
                  #argument: 'MemoryUsageView'
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Processes'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #systemProcesses
                  #argument: 'ProcessMonitor'
                )
               #(#MenuItem
                  #label: 'Semaphores'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #systemSemaphores
                  #argument: 'SemaphoreMonitor'
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Interrupt Latency'
                  #translateLabel: true
                  #value: #startLatencyMonitor
                  #activeHelpKey: #systemInterruptLatency
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Event View'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #systemEventView
                  #argument: 'EventMonitor'
                )
               #(#MenuItem
                  #label: 'Event Trace'
                  #translateLabel: true
                  #value: #startStopEventTrace
                  #activeHelpKey: #systemEventTrace
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Collect Garbage'
                  #translateLabel: true
                  #value: #garbageCollect
                  #activeHelpKey: #systemGarbageCollect
                  #labelImage: #(#ResourceRetriever nil #garbageCollectIcon 'Collect Garbage')
                )
               #(#MenuItem
                  #label: 'Collect Garbage And Compress'
                  #translateLabel: true
                  #value: #compressingGarbageCollect
                  #activeHelpKey: #systemGarbageCollectAndCompress
                  #labelImage: #(#ResourceRetriever nil #garbageCollectIcon 'Collect Garbage And Compress')
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'Settings'
            #translateLabel: true
            #submenuChannel: #settingsMenu
          )
         #(#MenuItem
            #label: 'Windows'
            #translateLabel: true
            #activeHelpKey: #windows
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'Redraw All'
                  #translateLabel: true
                  #value: #redrawAllWindows
                  #activeHelpKey: #windowsRedrawAll
                )
               #(#MenuItem
                  #label: 'Iconify All'
                  #translateLabel: true
                  #value: #iconifyAllWindows
                  #activeHelpKey: #windowsIconifyAll
                )
               #(#MenuItem
                  #label: 'De-iconify All'
                  #translateLabel: true
                  #value: #deIconifyAllWindows
                  #activeHelpKey: #windowsDeiconifyAll
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'View Tree'
                  #translateLabel: true
                  #value: #startWindowTreeView
                  #activeHelpKey: #windowsViewTree
                )
               #(#MenuItem
                  #label: 'View Tree (all windows)'
                  #translateLabel: true
                  #value: #openApplication:
                  #activeHelpKey: #windowsViewTreeAllViews
                  #argument: 'WindowTreeView'
                )
               #(#MenuItem
                  #label: 'View Tree (all on all screens)'
                  #translateLabel: true
                  #value: #startWindowTreeViewForAll
                  #activeHelpKey: #windowsViewTree
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Select And Inspect'
                  #translateLabel: true
                  #value: #viewInspect
                  #activeHelpKey: #windowsSelectAndInspect
                )
               #(#MenuItem
                  #label: 'Select And Destroy'
                  #translateLabel: true
                  #value: #viewDestroy
                  #activeHelpKey: #windowsSelectAndDestroy
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Find And Raise...'
                  #translateLabel: true
                  #value: #findAndRaiseWindow
                  #activeHelpKey: #windowsFindAndRaise
                  #enabled: #enableDangerousMenuItemsInRemoteLauncher
                )
               #(#MenuItem
                  #label: 'Find And Destroy...'
                  #translateLabel: true
                  #value: #findAndDestroyWindow
                  #activeHelpKey: #windowsFindAndDestroy
                  #enabled: #enableDangerousMenuItemsInRemoteLauncher
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Grab Window...'
                  #translateLabel: true
                  #value: #viewHardcopy
                  #activeHelpKey: #windowsGrapWindow
                )
               #(#MenuItem
                  #label: 'Grab Widget...'
                  #translateLabel: true
                  #value: #widgetHardcopy
                )
               #(#MenuItem
                  #label: 'Grab Screen...'
                  #translateLabel: true
                  #value: #fullScreenHardcopy
                  #activeHelpKey: #windowsGrapScreen
                )
               #(#MenuItem
                  #label: 'Grab Screen Area...'
                  #translateLabel: true
                  #value: #screenHardcopy
                  #activeHelpKey: #windowsGrapScreenArea
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'Demos'
            #translateLabel: true
            #activeHelpKey: #demos
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'Goodies'
                  #translateLabel: true
                  #activeHelpKey: #demosGoodies
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Clock'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosClock
                        #argument: 'Clock'
                      )
                     #(#MenuItem
                        #label: 'Digital Clock'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosDigitalClock
                        #argument: 'DigitalClockView'
                      )
                     #(#MenuItem
                        #label: 'Calendar'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosCalendar
                        #argument: 'Calendar'
                      )
                     #(#MenuItem
                        #label: 'Calculator'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosCalculator
                        #argument: 'CalculatorView'
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'Mail Tool'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosMail
                        #argument: 'MailView'
                      )
                     #(#MenuItem
                        #label: 'News Tool'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosNews
                        #argument: 'NewsView'
                      )
                     #(#MenuItem
                        #label: 'FTP Tool'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosFTP
                        #argument: 'FTPTool'
                      )
                     #(#MenuItem
                        #label: 'Telnet Tool'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosTelnet
                        #argument: 'TelnetTool'
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'Remote Launcher'
                        #translateLabel: true
                        #value: #startRemoteLauncher
                        #activeHelpKey: #demosRemoteLauncher
                      )
                     )
                    nil
                    nil
                  )
                )
               #(#MenuItem
                  #label: 'Games'
                  #translateLabel: true
                  #activeHelpKey: #demosGames
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Tetris'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #gamesTetris
                        #argument: 'Games::Tetris'
                      )
                     #(#MenuItem
                        #label: 'Tic Tac Toe'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #gamesTicTacToe
                        #argument: 'Games::TicTacToeGame'
                      )
                     #(#MenuItem
                        #label: 'Tic Tac Toe (2 players)'
                        #translateLabel: true
                        #value: #startTicTacToe2
                        #activeHelpKey: #gamesTicTacToe2
                      )
                     )
                    nil
                    nil
                  )
                )
               #(#MenuItem
                  #label: 'Geometric Designs'
                  #translateLabel: true
                  #activeHelpKey: #demosGeometric
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Pen Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosPen
                        #argument: 'PenDemo'
                      )
                     #(#MenuItem
                        #label: 'Commander Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosCommander
                        #argument: 'CommanderDemo'
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'Mandel'
                        #translateLabel: true
                        #value: #openMandelbrotDemo
                        #activeHelpKey: #demosMandel
                      )
                     #(#MenuItem
                        #label: 'Fractal Plants Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosFractalPlants
                        #argument: 'FractalPlantsDemo'
                      )
                     #(#MenuItem
                        #label: 'Fractal Patterns Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosFractalPatterns
                        #argument: 'FractalPatternsDemo'
                      )
                     #(#MenuItem
                        #label: 'Lindenmayer Patterns Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosLSystems
                        #argument: 'LSystemsDemo'
                      )
                     #(#MenuItem
                        #label: 'More Fractal Patterns Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosMoreFractalPatterns
                        #argument: 'ArmchairUniverseDemo'
                      )
                     )
                    nil
                    nil
                  )
                )
               #(#MenuItem
                  #label: 'Simple Animations'
                  #translateLabel: true
                  #activeHelpKey: #demosAnimations
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Walking Man'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosWalkingMan
                        #argument: 'Animation'
                      )
                     #(#MenuItem
                        #label: 'Globe Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosGlobe
                        #argument: 'GlobeDemo'
                      )
                     )
                    nil
                    nil
                  )
                )
               #(#MenuItem
                  #label: '3D GL Graphics'
                  #translateLabel: true
                  #isVisible: #displaySupportsGLDrawing
                  #activeHelpKey: #demos3D
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Plane'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3Dplane
                        #argument: 'GLPlaneDemoView2'
                      )
                     #(#MenuItem
                        #label: 'Tetra'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3Dtetra
                        #argument: 'GLTetraDemoView'
                      )
                     #(#MenuItem
                        #label: 'Cube (wireframe)'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3DcubeWire
                        #argument: 'GLWireCubeDemoView'
                      )
                     #(#MenuItem
                        #label: 'Cube (solid)'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3DcubeSolid
                        #argument: 'GLCubeDemoView'
                      )
                     #(#MenuItem
                        #label: 'Sphere (wireframe)'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3Dsphere
                        #argument: 'GLWireSphereDemoView'
                      )
                     #(#MenuItem
                        #label: 'Doughnut (wireframe)'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3Ddoughnut
                        #argument: 'GLDoughnutDemoView'
                      )
                     #(#MenuItem
                        #label: 'Planet'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3Dplanet
                        #argument: 'GLPlanetDemoView'
                      )
                     #(#MenuItem
                        #label: 'Teapot'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3Dteapot
                        #argument: 'GLTeapotDemo'
                      )
                     #(#MenuItem
                        #label: 'Logo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demos3Dlogo
                        #argument: 'Logo3DView1'
                      )
                     #(#MenuItem
                        #label: 'Rubics Cube'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosCommander
                        #argument: 'RubicsCubeView'
                      )
                     #(#MenuItem
                        #label: 'X/Y Graph'
                        #translateLabel: true
                        #value: #openDemo:
                        #argument: 'GLXYGraph'
                      )
                     #(#MenuItem
                        #label: 'X/Y Graph Widget'
                        #translateLabel: true
                        #value: #openDemo:
                        #argument: 'CodingExamples_GUI::GLXYGraph3DDemo'
                      )
                     #(#MenuItem
                        #label: 'X/Y Graph Animated'
                        #translateLabel: true
                        #value: #openDemo:
                        #argument: 'CodingExamples_GUI::AnimatedGLXYGraph3DDemo'
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'Cube (light)'
                        #translateLabel: true
                        #value: #openDemo:
                        #argument: 'GLCubeDemoView2'
                      )
                     #(#MenuItem
                        #label: 'Cube (light and texture)'
                        #translateLabel: true
                        #value: #openDemo:
                        #argument: 'GLBrickCubeDemoView'
                      )
                     #(#MenuItem
                        #label: 'Sphere (light)'
                        #translateLabel: true
                        #value: #openDemo:
                        #argument: 'GLSphereDemoView2'
                      )
                     #(#MenuItem
                        #label: 'Colored Octahedron'
                        #translateLabel: true
                        #value: #openDemo:
                        #argument: 'GLOctaHedronDemoView'
                      )
                     )
                    nil
                    nil
                  )
                )
               #(#MenuItem
                  #label: 'Graphic Editors'
                  #translateLabel: true
                  #activeHelpKey: #demosGraphicEditors
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Draw Tool'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosGraphicEditorsDrawTool
                        #argument: 'DrawTool'
                      )
                     #(#MenuItem
                        #label: 'Logic Tool'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosGraphicEditorsLogicTool
                        #argument: 'LogicTool'
                      )
                     #(#MenuItem
                        #label: 'Paint Demo'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosGraphicEditorsPaintTool
                        #argument: 'ColorDrawDemo3'
                      )
                     )
                    nil
                    nil
                  )
                )
               #(#MenuItem
                  #label: 'GUI'
                  #translateLabel: true
                  #activeHelpKey: #demosGUI
                  #submenu: 
                 #(#Menu
                    #(
                     #(#MenuItem
                        #label: 'Widget Gallery'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosGUIWidgets
                        #argument: 'CodingExamples_GUI::GUIDemo'
                      )
                     #(#MenuItem
                        #label: '-'
                      )
                     #(#MenuItem
                        #label: 'Calculator'
                        #translateLabel: true
                        #value: #openDemo:
                        #activeHelpKey: #demosGUICalculator
                        #argument: 'CodingExamples_GUI::GUIDemoCalculator'
                      )
                     )
                    nil
                    nil
                  )
                )
               )
              nil
              nil
            )
          )
         #(#MenuItem
            #label: 'Help'
            #translateLabel: true
            #startGroup: #right
            #activeHelpKey: #help
            #submenu: 
           #(#Menu
              #(
               #(#MenuItem
                  #label: 'What''s New in the Documentation'
                  #translateLabel: true
                  #value: #startWhatsNewDocumentation
                  #activeHelpKey: #helpWhatsNew
                )
               #(#MenuItem
                  #label: 'What''s New in ST/X'
                  #translateLabel: true
                  #value: #startWhatsNewSTX
                  #activeHelpKey: #helpReleaseNotes
                )
               #(#MenuItem
                  #label: 'Index'
                  #translateLabel: true
                  #value: #startDocumentationIndex
                  #activeHelpKey: #helpIndex
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'ST/X Online Documentation'
                  #translateLabel: true
                  #value: #startDocumentationTool
                  #activeHelpKey: #helpSTXOnlineDocumentation
                  #labelImage: #(#ResourceRetriever nil #helpIcon2 'ST/X Online Documentation')
                )
               #(#MenuItem
                  #label: 'Class Documentation'
                  #translateLabel: true
                  #value: #startClassDocumentation
                  #activeHelpKey: #helpClassDocumentation
                  #labelImage: #(#ResourceRetriever nil #helpIcon 'Class Documentation')
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Print Documentation...'
                  #translateLabel: true
                  #value: #showBookPrintDocument
                  #activeHelpKey: #helpPrintDocumentation
                )
               #(#MenuItem
                  #label: '-'
                )
               #(#MenuItem
                  #label: 'Active Help'
                  #translateLabel: true
                  #isVisible: #showActiveHelpMenuItem
                  #value: #toggleActiveHelp:
                  #activeHelpKey: #helpActiveHelp
                  #indication: #activeHelp
                )
               #(#MenuItem
                  #label: 'Show Help Texts'
                  #translateLabel: true
                  #activeHelpKey: #helpShowHelp
                  #indication: #showingHelp:
                )
               )
              nil
              nil
            )
          )
         )
        nil
        nil
      )
!

menuToolbar
    "This resource specification was automatically generated
     by the MenuEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the MenuEditor may not be able to read the specification."

    "
     MenuEditor new openOnClass:NewLauncher andSelector:#menuToolbar
     (Menu new fromLiteralArrayEncoding:(NewLauncher menuToolbar)) startUp
    "

    <resource: #menu>

    ^
     
       #(#Menu
          
           #(
             #(#MenuItem
                #label: 'open workspace'
                #isButton: true
                #value: #openApplication:
                #activeHelpKey: #toolsWorkspace
                #argument: 'Workspace'
                #labelImage: #(#ResourceRetriever nil #startWorkspaceIcon)
            )
             #(#MenuItem
                #label: 'open file browser'
                #isButton: true
                #value: #openApplication:
                #activeHelpKey: #fileFileBrowser
                #argument: 'FileBrowser'
                #labelImage: #(#ResourceRetriever nil #startFileBrowserIcon)
            )
             #(#MenuItem
                #label: 'save image'
                #isButton: true
                #value: #saveImageAs
                #activeHelpKey: #fileSaveImageAs
                #enabled: #enableDangerousMenuItemsInRemoteLauncher
                #labelImage: #(#ResourceRetriever nil #saveImageIcon)
            )
             #(#MenuItem
                #label: ''
            )
             #(#MenuItem
                #label: 'open system browser'
                #isButton: true
                #value: #openApplication:
                #activeHelpKey: #classesSystemBrowser
                #argument: 'SystemBrowser'
                #labelImage: #(#ResourceRetriever nil #startSystemBrowserIcon)
            )
             #(#MenuItem
                #label: 'System Browser On Class'
                #isButton: true
                #activeHelpKey: #classesSystemBrowserOnClass
                #labelImage: #(#ResourceRetriever nil #startSystemBrowserOnHistoryClassIcon)
                #submenuChannel: #menuClassHistory
            )
             #(#MenuItem
                #label: 'open changes browser'
                #isButton: true
                #value: #startChangesBrowser
                #activeHelpKey: #toolsChangesBrowser
                #labelImage: #(#ResourceRetriever nil #startChangesBrowserIcon)
            )
             #(#MenuItem
                #label: ''
            )
             #(#MenuItem
                #label: 'open GUI Builder'
                #isButton: true
                #value: #openApplication:
                #activeHelpKey: #toolsGUIPainter
                #argument: 'UIPainter'
                #labelImage: #(#ResourceRetriever nil #startUIPainterIcon)
            )
             #(#MenuItem
                #label: 'open menu editor'
                #isButton: true
                #value: #openApplication:
                #activeHelpKey: #toolsMenuEditor
                #argument: 'MenuEditor'
                #labelImage: #(#ResourceRetriever nil #startMenuEditorIcon)
            )
             #(#MenuItem
                #label: 'open image editor'
                #isButton: true
                #value: #openApplication:
                #activeHelpKey: #toolsImageEditor
                #argument: 'ImageEditor'
                #labelImage: #(#ResourceRetriever nil #startImageEditorIcon)
            )
             #(#MenuItem
                #label: ''
            )
             #(#MenuItem
                #label: 'garbage collect and compress'
                #isButton: true
                #value: #compressingGarbageCollect
                #activeHelpKey: #systemGarbageCollectAndCompress
                #labelImage: #(#ResourceRetriever nil #garbageCollectIcon)
            )
             #(#MenuItem
                #label: 'help'
                #translateLabel: true
                #isButton: true
                #startGroup: #right
                #value: #startDocumentationTool
                #activeHelpKey: #helpSTXOnlineDocumentation
                #labelImage: #(#ResourceRetriever nil #helpIcon2)
            )
          ) nil
          nil
      )
!

settingsMenu
    "This resource specification was automatically generated
     by the MenuEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the MenuEditor may not be able to read the specification."

    "
     MenuEditor new openOnClass:NewLauncher andSelector:#settingsMenu
     (Menu new fromLiteralArrayEncoding:(NewLauncher settingsMenu)) startUp
    "

    <resource: #menu>

    ^ 
     #(#Menu
        #(
         #(#MenuItem
            #label: 'Language...'
            #translateLabel: true
            #value: #languageSetting
            #activeHelpKey: #settingsLanguage
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Keyboard Mappings...'
            #translateLabel: true
            #value: #keyboardSetting
            #activeHelpKey: #settingsKeyboardMappings
          )
         #(#MenuItem
            #label: 'View Style...'
            #translateLabel: true
            #value: #viewStyleSetting
            #activeHelpKey: #settingsViewStyle
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Fonts...'
            #translateLabel: true
            #value: #fontSettings
            #activeHelpKey: #settingsFonts
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: '-'
          )
         #(#MenuItem
            #label: 'Messages...'
            #translateLabel: true
            #value: #messageSettings
            #activeHelpKey: #settingsMessages
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Compilation...'
            #translateLabel: true
            #value: #compilerSettings
            #activeHelpKey: #settingsCompilation
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Object Memory...'
            #translateLabel: true
            #value: #memorySettings
            #activeHelpKey: #settingsObjectMemory
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Source And Debugger...'
            #translateLabel: true
            #value: #sourceAndDebuggerSettings
            #activeHelpKey: #settingsSourceAndDebugger
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Tools...'
            #translateLabel: true
            #value: #toolSettings
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Java...'
            #translateLabel: true
            #isVisible: #javaSupportPresent
            #value: #javaSettings
            #activeHelpKey: #settingsJava
          )
         #(#MenuItem
            #label: '-'
          )
         #(#MenuItem
            #label: 'Printer...'
            #translateLabel: true
            #value: #printerSettings
            #activeHelpKey: #settingsPrinter
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Screen...'
            #translateLabel: true
            #value: #displaySettings
            #activeHelpKey: #settingsScreen
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: '-'
          )
         #(#MenuItem
            #label: 'Editing...'
            #translateLabel: true
            #value: #editSettings
            #activeHelpKey: #settingsMisc
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Misc...'
            #translateLabel: true
            #value: #miscSettings
            #activeHelpKey: #settingsMisc
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Communications...'
            #translateLabel: true
            #value: #communicationsSettings
          )
         #(#MenuItem
            #label: '-'
          )
         #(#MenuItem
            #label: 'Save Settings...'
            #translateLabel: true
            #value: #saveSettings
            #activeHelpKey: #settingsSaveSettings
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         #(#MenuItem
            #label: 'Load Settings...'
            #translateLabel: true
            #value: #loadSettings
            #activeHelpKey: #settingsLoadSettings
            #enabled: #enableDangerousMenuItemsInRemoteLauncher
          )
         )
        nil
        nil
      )
! !

!NewLauncher class methodsFor:'resources'!

garbageCollectIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     ImageEditor openOnClass:self andSelector:#garbageCollectIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher garbageCollectIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'DQD@@@.;.1D[DQDQD@@QDP@@.;.;,[,@@ADP@ADQ@@.;@@.;.1@@@A@@DQD@B;@@@[.;DCH@D@@QDP@K,@@K.;,Q@2@P@ADQ@K.;@@DQDQDPL @@DQDKB;B0@QDQ@@@C@@@QD[B0B0,ADP@"H"@@@ADQ@@@@@@DQ@P@@@0@@DQ@@@@C 8@@ADQL3@@@Q@@@@;.;.@@DCL0H@@@@@@@@NC @@@PLC@ @@@@@@C.;.8@@A@0LB@@@@@@@@8N@@@@DC@0H@@@@@B (@@AD@@PLC@ @@@@****@LG@@A@0LB@@@@@JB CL3L0@DC@0H@@@B***(@0L@Q@SLCL @@@@(J@L3L3AD@L"H @@@@@QDQC@0QDQD@@@DP@@@ADQD@@@@QD@@@@@@@@ @B@ @B@@HB@ H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@H@@@H@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@G1@@@C>0@@A1=0@@XO^@@FG30@C0@^@AZ@? @)P?8@@@O>@@B#? @C<?8@@TO>@@_#? @B ?8@E@O>@G9S? @)>?8@?JO>@EO3? @APO @@@@@@]7]7\DUUUDAEUUQ@U7]5\EUUUTAUUUU@]U]W\@@a') ; yourself); yourself]!

saveImageIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     ImageEditor openOnClass:self andSelector:#saveImageIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher saveImageIcon'
	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'UPSL3L0A@ET7L3L0?PAUML3L3OT@US\3L3C5@ET43L3L?PAUM3L3LO4@USSL3L3=@ET7L3L0?PAUML3L3O4@US\3L3C=@ET43L3L?PAUM@@@@O4@US?????=@ET?UUUU?PAUO7??6?4@US=T?=+=@ET?ZO?Z?PAUO4C?6/4@U]U**)WU@ET@@@@@@@AUUUUUUUUU%Y%UUUTE%%UUUUTU)UEUUUUEUUUUUUVYUUTEUTUUUUDUAUUUUUUQUPUUVUUUUUTU%P@a') ; colorMapFromArray:#[255 255 255 0 0 0 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C???@@???0@O??<@C??>@@@@@@@@@@@@;*9R<H*(W)BJ*E:@S.9R,B)HT)@*REJP:$9R<@@a') ; yourself); yourself]!

startChangesBrowserIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     ImageEditor openOnClass:self andSelector:#startChangesBrowserIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startChangesBrowserIcon'
	ifAbsentPut:[(Depth2Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@B****@@@@@@@@@ @@@B****H@@@@@@@@"@@@C????H @@@@@@@2H@@C????L"@@@@@@@3H@@AUUUUL2@@@@@@@SL@@AUUUUD3@@@_=UUQL@@@EUUUTS@@@A]7UUD@@@@U7]5Q@@@@E7]5T@@@@AUUUU@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BH@@@@@@@@LB@L@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 255 255 255 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@??8@@O?>@@O?? @C??8@C??>@@??? @???8@O??>@O??? C??? C???8@???8@O??>@C??>@@??? @O?? @C??8@@??8@@O?>@@@@@@@@@@@@@Z.$7LH+-YDBJ+TQ@#.=WHH*+UABJ*5PPZ*$7X@@a') ; yourself); yourself]!

startFileBrowserIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     ImageEditor openOnClass:self andSelector:#startFileBrowserIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startFileBrowserIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@CLA&Y&Y&Y&X@@@@@@@@L0F@@@@@@A @@@@@@@@3@XN;.;.8F@@@@@@@@CLA ;.@@@@@@@@@@@@@L0FC.8O[6=/[0@@@@@@3@X@; [6=/[6@@@@@@CLA DNC6<@@F<@@@@@@L0F@A@F= [0= @@@@@@3@X@@P=/[6=/@@@@@@CLA @@A/[6=/X@@@@@@L0FC0@O[6=/[0@@@@@@3@XF<@@@@@@@@@@@@@CLA = @@@@@@@@@@@@@L0FA/[6=/A @@@@@@@@3@XO[6=/XF@@@@@@@@CLA @@@@@@X@@@@@@@@L0FY&Y&Y&Y @@@@@@@@C@Y&Y&Y&Y&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C @b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'A??<@@_??@@G??0@A??<@@_??8@G??>@A??? @_??8@G??>@A??? @_??8@G??>@A??? @_??@@G??0@A??<@@_??@@G??0@@??<@@G??@@@@@@@G.P=0AADHP@PQBD@GDP8 AADHD@PQBA@DN^=0@@a') ; yourself); yourself]!

startImageEditorIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     ImageEditor openOnClass:self andSelector:#startImageEditorIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startImageEditorIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@M7]7]7]7]7]7]@@@@@@@@@@@@@@@@@@@@@@@@@"H"H"HDQEUVY @@@@@BH"H3L QDUUY&@@@@@@HA@#L2ADQUU&X@@@@@@"H"H"HH"I&W]0@@@@@BL3L3L "H&Y]7@@@@@@H"H"H"BH"Y%7\@@@@@@#L3L3HDQEUVY @@@@@BH"H"H QDUUY&@@@@@@H3L3L2ADQUU&X@@@@@@"H"H"HH"I&W]0@@@@@BL#L3L "H&Y]7@@@@@@H2L3L2BH"Y%7\@@@@@@"H"H"HBH"H"H @@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@0@0@0L@L@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???8@O??>@C??? @???8@O??>PC???&@???90O??>^C???''0???90O??>TC???  ???8HO??>AC??? P???8@O??>@C??? @???8@@@@@@@@@@@@;[7/@D>%J@AJ)P @RK5.@D"%J@AH)R @:JW/@@@a') ; yourself); yourself]!

startMenuEditorIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     self startMenuEditorIcon inspect
     ImageEditor openOnClass:self andSelector:#startMenuEditorIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startMenuEditorIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@DQDQDQDQDQDQD@@@@@@@@@@@@@@@@@@@@@@@@@QH"H DQHQD"H @@@@@ATBH"@RHBH H"@@@@@@H@H"HAT%UUUUT@@@@@@%H"H D%IRT%IP@@@@@BUQIU@UIRT%IR@@@@@@IRHBHAIRT%IRT@@@@@@%H"H ERT%IRT @@@@@BUQIU@RT%IRT%@@@@@@IRHBHAT%IRT%H@@@@@@%H"H D%IRT%IP@@@@@BUQIU@UIRT%IR@@@@@@H"HBHAIRT%IRT@@@@@@"H"H IRT%IRT @@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@APT@@@@@@@@@@@@@@@@@T@@@@@@@@@@@@@@@@@@@@@@@@@T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T@T@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127 255 0 0 0 255 0 0 0 255 0 255 255 255 0 255 127 0 0 0 127 0 0 0 127 127 127 0 127 0 0]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???8@O??>@C??? @???8@O??>PC???&@???90O??>^C???''0???90O??>TC???  ???8HO??>AC??? P???8@O??>@C??? @???8@@@@@@@@@@@@6=D$@O(YI@B*GRP@"9T$@H(WI@BJD2P@"=D<@@@a') ; yourself); yourself]!

startSystemBrowserIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     self startSystemBrowserIcon inspect
     ImageEditor openOnClass:self andSelector:#startSystemBrowserIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startSystemBrowserIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@ADQDQDQG0@@@@@@@@@@D"H"H"H.@@@@@@@@@@@RH"H"H"8@@@@@@@@@@O;.;.;.; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@@@@@@@@@@@@@@@C @@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@DQDQDQG0@@@@@P;.;.@SL3L3L>@@@@@@@@@@@O;.;.;.8@@@@@8@@@@@@@@@@@@@@@@@C @@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@DQDQDQG0@@@@@P;.;.@VY&Y&Y.@@@@@@@@@@@O;.;.;.8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@@N@NC @@8@@@C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@@@@@@@8@C @@@@8b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??0@@O?<@@C??@@@??0@@O?<@@C??@@@@ @@@@H@@@@B@?? A0O?8@_??>@G@?? @ O?8@H@@@@B@?? A0O?8@_??>@G@?? @@O?8@@@@@@@@@@@9O\7\IRTQDBD%DQ@!!OH''HHRQEABT$QPP99]7\@@a') ; yourself); yourself]
!

startSystemBrowserOnHistoryClassIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     self startSystemBrowserOnHistoryClassIcon inspect
     ImageEditor openOnClass:self andSelector:#startSystemBrowserOnHistoryClassIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startSystemBrowserOnHistoryClassIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@ADQDQDQG0@@@@@@@@@@D"H"H"H.@@@@@@@@@@@RH"H"H"8@@@@@@@@@@O;.;.;.; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@@@@@@@@@@@@@@@C @@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@DQ@@@QG0@@@@@P;.;.@SL@@CL>@@@@@@@@@@@O; @@;.8@@@@@8@@@@@@@@@@@@@@@@@C @@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@DQ@@@QG0@@@@@P;.;.@VX@@FY.@@@@@@@@@@@O8@@@C.8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C @@@@8@8@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@8@8@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127 127 127 127 170 170 170]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'??0^@O?<O0C??FF@??1!! O?<XXC??CF@@ @C@@H@A @B@>7 A0O[8@_?6>@G@=/ @ O[8@H@@@@B@<O A0O[8@_??>@G@;7 @@NY8@@@@@@@@@@@%]7/TITIJUBUBR%P=H$/TIQIJRBTRR$ %\'')P@@a') ; yourself); yourself]!

startUIPainterIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     ImageEditor openOnClass:self andSelector:#startUIPainterIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startUIPainterIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@DQDQDQDQDQDQD@@@@@@@@@@@@@@@@@@@@@@@@@3H"H DQHQD"H @@@@@CLBH"@RHBH H"@@@@@@H@H"HAT%UUUUT@@@@@@%H"H D%IRT%IP@@@@@BUSMU@UIRT%IR@@@@@@IRLBHAIRT%IRT@@@@@@%H"H ERT%IRT @@@@@BUSMU@RT%IRT%@@@@@@IRLBHAT%IRT%H@@@@@@%H"H D%IRT%IP@@@@@BUSMU@UIRT%IR@@@@@@H"LBHAIRT%IRT@@@@@@"H"H IRT%IRT @@@@@@@@@@@@@@@@@@@@@@@@H"H"H"H"H"H"H@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T@AP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@T@@@AP@E@@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 255 255 0 0 127 127 127 127 127 255 0 0 0 255 0 0 0 255 0 255 255 255 0 255 127 0 0 0 127 0 0 0 127 127 127 0 127 0 0]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'???8@O??>@C??? @???8@O??>PC???&@???90O??>^C???''8???90O??>TC???  ???8HO??>A#??? X???8@O??>@C??? @???8@@@@@@@@@@@@>QN@@H$Q@@BADP@@.QD@@H$Q@@BIDP@@>_N@@@@a') ; yourself); yourself]!

startWorkspaceIcon
    "This resource specification was automatically generated
     by the ImageEditor of ST/X."

    "Do not manually edit this!! If it is corrupted,
     the ImageEditor may not be able to read the specification."

    "
     ImageEditor openOnClass:self andSelector:#startWorkspaceIcon
    "

    <resource: #image>

    ^Icon
	constantNamed:#'NewLauncher startWorkspaceIcon'
	ifAbsentPut:[(Depth4Image new) width: 28; height: 28; photometric:(#palette); bitsPerSample:(#(4 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@M7]7]7]7]7]7]7]@@@@@@@@@@@@@@@@@@@@@@@QDQDQDQDQDQDQ@0@@@AUPUUUUAUAQDQDB@@@@EUAUUUTE@@DQDPH@@@@P@E@@UPUPTQDQ@ @@@AAPTEAUAUAQDQDB@@@@D@AP@ETET@DQDPH@@@@QDQDQDQDQEADQ@ @@@ADQDQDQDQDTPQDB@@@@DQDQDQDQDQQDDPH@@@@QDQDQDQDQEDDQ@ @@@ADQDQDQDQDQEADB@@@@DQDQDQDQDQDTDPH@@@@QDQDQDQDQDQDQ@0@@@@@@@@@@@@@@@@@@@@@@L"H"H"H"H"H"H0L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@L@@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@L@@@@@@@@@@b') ; colorMapFromArray:#[0 0 0 255 255 255 170 170 170 127 127 127 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 127 0 0 0 127 0 0 0 127 0 127 127 127 127 0 127 0 127]; mask:((Depth1Image new) width: 28; height: 28; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'????@O???0C???<@????@O???0C???<@????@O???0C???<@????@O???0C???<@????@O???0C???<@????@O???0C???<@????@@@@@@@@@@@@ //R@HJJT BB"%P@$(/X@IJJU@BR"%H@[O)R@@@a') ; yourself); yourself]! !

!NewLauncher methodsFor:'accessing'!

menuToolbar
    |menu item|

    menu := Menu new fromLiteralArrayEncoding:(self class menuToolbar).
    menu receiver:self.
    menu findGuiResourcesIn:self.

    ^ menu


! !

!NewLauncher methodsFor:'aspects'!

canDoTerminal
    "return a 'valueHolder', which returns true if the terminal application
     is available. For now, this is true if we run under unix"

    ^ OperatingSystem isUNIXlike 
      or:[OperatingSystem isMSWINDOWSlike]

    "Created: / 27.7.1998 / 12:47:54 / cg"
    "Modified: / 28.4.1999 / 11:55:24 / cg"
!

displaySupportsGLDrawing
    "return a 'valueHolder', which returns true if the GL support
     is available."

    ^ [Screen current supportsGLDrawing]

    "Modified: / 13.2.1998 / 14:26:31 / cg"
    "Created: / 3.5.1999 / 16:47:22 / cg"
!

enableDangerousMenuItemsInRemoteLauncher

    |holder|
    (holder := builder bindingAt:#enableDangerousMenuItemsInRemoteLauncher) isNil ifTrue:[
	builder aspectAt:#enableDangerousMenuItemsInRemoteLauncher put:(holder :=  true asValue).
    ].
    ^ holder
!

javaSupportPresent
    "return a 'valueHolder', which returns true if the java support
     is available."

    ^ [JavaVM notNil and:[JavaVM isBehavior and:[JavaVM isLoaded]]]

    "Created: / 13.2.1998 / 14:25:59 / cg"
    "Modified: / 13.2.1998 / 14:26:31 / cg"
!

libraryBuilderAvailable
    ^ false

    "Created: / 20.6.1998 / 16:54:31 / cg"
!

showActiveHelpMenuItem
    ^ false
! !

!NewLauncher methodsFor:'change & update'!

update:something with:aParameter from:changedObject
    "care for project changes & update my infoView"

    ((something == #currentProject) or:[changedObject == Project]) ifTrue: [self updateInfo]

!

updateInfo
    "update the infoView from the current project"

    |project projectName projectDir packageName defNameSpace msg args projectInfo|

    (Project isNil or:[(project := Project current) isNil]) ifTrue:[
        projectName := '* none *'.
        projectDir := '.'.
        packageName := '* none *'.
    ] ifFalse:[
        projectName := project name.
        projectDir := project directory.
        packageName := project package.
        defNameSpace := project defaultNameSpace.
    ].
    defNameSpace isNil ifTrue:[
        defNameSpace := Smalltalk.
    ].

    msg := 'Project: ''%1'' fileOut to: ''%3'' package: ''%2'''.
    defNameSpace == Smalltalk ifTrue:[
        args := Array 
                    with:projectName
                    with:packageName 
                    with:(projectDir contractTo:30).
    ] ifFalse:[
        msg := msg , '  nameSpace: %4'.
        args := Array 
                        with:projectName
                        with:packageName 
                        with:(projectDir contractTo:30)
                        with:defNameSpace name.
    ].

    self valueOfInfoLabel value:(projectInfo := resources string:msg withArgs:args).
    ^projectInfo
! !

!NewLauncher methodsFor:'help'!

defaultInfoLabel

    ^self updateInfo

! !

!NewLauncher methodsFor:'menu configuration'!

addUserTool:toolName action:actionBlock icon:iconOrNil
    "adds a menu item labeled toolName, and action and icon both to the
     sub menu 'Tools' and the tool bar.
     This can be invoked by a classes #initialize method, to add an item
     for itself to the toolbar.
    "

    self addUserTool:toolName action:actionBlock in:nil icon:iconOrNil space:true

    "
     Transcript topView application
        addUserTool:'Foo' 
        action:[Transcript showCR:'foo'] 
        icon:nil
    "
!

addUserTool:toolName action:actionBlock in:what icon:icon space:space
    "adds a menu item labeled toolName, and actionBlock and icon;
     for what == #menu    menu item is added at the end of the sub menu 'Tools',
     for what == #toolbar menu item is added at the end of the tool bar,
     If space is true, some empty space is inserted.
     This can be invoked by a classes #initialize method, to add an item
     for itself to the toolbar or menu.
    "

    |menuPanel freeMenuIndex|

    (what isNil or: [what == #toolbar]) ifTrue:[
        menuPanel := builder namedComponents at: #menuToolbarView.

        (menuPanel findFirst: [:i| i activeHelpKey = toolName]) == 0
        ifTrue:[
            freeMenuIndex := menuPanel numberOfItems + 1.
            space ifTrue:[
                (menuPanel createAtIndex: freeMenuIndex) menuItem: (MenuItem labeled: '').
                freeMenuIndex := freeMenuIndex + 1.
            ].

            (menuPanel createAtIndex: freeMenuIndex) menuItem:
                (MenuItem new 
                    label: toolName;
                    value: actionBlock;
                    isButton: true;
                    labelImage: icon;
                    activeHelpKey: toolName)
        ].
    ].
    (what isNil or: [what== #menu]) ifTrue:[
        menuPanel := ((self builder window subViews at: 1 ifAbsent: [^self]) itemAt: 4) submenu.

        (menuPanel findFirst: [:i| i activeHelpKey = toolName]) == 0
        ifTrue:[       
            freeMenuIndex := menuPanel numberOfItems + 1.
            space ifTrue:[
                (menuPanel createAtIndex: freeMenuIndex) menuItem: (MenuItem labeled: '-').
                freeMenuIndex := freeMenuIndex + 1.
            ].

            (menuPanel createAtIndex: freeMenuIndex) menuItem:
                (MenuItem new 
                    label: toolName;
                    value: actionBlock;
                    labelImage: (LabelAndIcon icon: icon string: toolName);
                    activeHelpKey: toolName) 
        ].
    ].

    UserAddedTools isNil ifTrue: [UserAddedTools := Dictionary new].
    UserAddedTools at:toolName put:(Array with:actionBlock with:what with:icon with:space)

    "
     Transcript topView application
        addUserTool:'Foo' 
        action:[Transcript showCR:'foo']
        in:#menu
        icon:nil
        space:false
    "
    "
     Transcript topView application
        addUserTool:'Bar' 
        action:[Transcript showCR:'bar']
        in:#menu
        icon:nil
        space:false
    "

!

removeUserTool:toolName
    "removes a menu item labeled toolName
     This can be invoked by a classes #deinitialize method, 
     to remove its item from the toolbar or menu.
    "

    |userTool space menuIndex removeInMenuBlock|

    UserAddedTools isNil ifTrue: [^nil].
    userTool  := UserAddedTools at: toolName ifAbsent: [^nil].
    space     := userTool at: 4.

    removeInMenuBlock := 
    [:menuPanel|
        (menuIndex := menuPanel findFirst: [:i| i activeHelpKey = toolName]) ~~ 0
        ifTrue:
        [              
            menuPanel remove: menuIndex.
            space ifTrue: [menuPanel remove: menuIndex - 1].
        ].
    ].

    removeInMenuBlock value: (builder namedComponents at: #menuToolbarView).
    removeInMenuBlock value: ((self builder window subViews at: 1 ifAbsent: [^self]) itemAt: 4) submenu.

    UserAddedTools removeKey: toolName 

    "
     Transcript topView application
        removeUserTool:'Foo' 
    "
    "
     Transcript topView application
        removeUserTool:'Bar' 
    "

! !

!NewLauncher methodsFor:'private'!

menuClassHistory
    "returns a sub menu on the history of the classes"

    |menu history|

    BrowserView checkClassHistory.

    history := BrowserView classHistory.

    menu := Menu new receiver: self.
    menu addItemGroup: (history collect:
	[:histEntry|

	    MenuItem new 
		label: (histEntry upTo: $ ); 
		value: [SystemBrowser open loadFromMessage: histEntry]; 
		activeHelpKey: #classesSystemBrowserOnClass
	]
    ).
    menu addItem: (MenuItem new 
			label: 'Empty History'; 
			value: [BrowserView classHistory removeAll]; 
			translateLabel: true;
			enabled:(history notEmpty);
			activeHelpKey: #historyEmptyMenu).

    menu findGuiResourcesIn:self.
    ^menu

    "Modified: / 8.7.1998 / 00:59:50 / cg"
! !

!NewLauncher methodsFor:'private - settings callBacks'!

reopenLauncher
    "reopen a new launcher.
     for now (since style & language settings currently do
     not affect living views ...)
     WARNING: bad design: Message known in LauncherDialogs"

    |newLauncher wasShowingHelp|

    wasShowingHelp := self showingHelp.
    newLauncher := super reopenLauncher.
    newLauncher showingHelp:wasShowingHelp.
    ^ newLauncher
! !

!NewLauncher methodsFor:'queries'!

preferredExtent

    ^super preferredExtent max: Screen current extent//(2.5@3.5)


! !

!NewLauncher methodsFor:'startup / release'!

allButOpenInterface:anInterface
    "sent by my superclass to open up my interface"

    "/ if there is already a transcript on my device,
    "/ I am a slave launcher with limited functionality.

    Transcript notNil ifTrue:[
        Transcript ~~ Stderr ifTrue:[
            isMainLauncher := (Transcript graphicsDevice == device).
            self enableDangerousMenuItemsInRemoteLauncher value: isMainLauncher.
        ] ifFalse:[
            isMainLauncher := true
        ]
    ] ifFalse:[
        isMainLauncher := true
    ].

    super allButOpenInterface:anInterface.

    self setupTranscript; updateInfo.
    Project notNil ifTrue: [Project addDependent:self].
    self class openLaunchers add: self.
    ^ builder

    "Created: / 5.2.1998 / 19:45:07 / cg"
    "Modified: / 20.6.1998 / 14:53:58 / cg"
!

postBuildWith:aBuilder
    "setup my preferred size"

    super postBuildWith:aBuilder.
    aBuilder window extent:(self preferredExtent).
!

postOpenWith:aBuilder

    "/ increase my priority"
"/    self windowGroup process priority:(Processor userSchedulingPriority + 1).
    Processor activeProcess priority:(Processor userSchedulingPriority + 1).

    "/ add user tools
    UserAddedTools notNil ifTrue:[
        UserAddedTools associationsDo: 
        [:userTool| 
            self addUserTool: userTool key 
                action: (userTool value at: 1)  
                in:     (userTool value at: 2) 
                icon:   (userTool value at: 3)
                space:  (userTool value at: 4)
        ].
    ].

    super postOpenWith:aBuilder.

    "/ set the time-block
    UserPreferences current showClockInLauncher ifTrue:[
        self startClock
    ].

!

reOpen
    "reopen a new launcher.
     for now (since style & language settings currently do
     not affect living views ...)"

    self reopenLauncher "/ WARNING: bad design: Message known in LauncherDialogs

    "Modified: / 31.7.1998 / 22:48:12 / cg"
!

requestForWindowClose
    |answer|

    isMainLauncher ifFalse:[
        "/ remote launchers may not finish ST/X

        answer := Dialog 
                    confirmWithCancel:(resources string:'Really close %1 (slave)?' with:self class name)
                    labels:(resources array:#('Cancel' 'Close'))
                    default:1.
        answer isNil ifTrue:[
            "/ cancel
            ^ false
        ].
        ^ true
    ].

    ^ super requestForWindowClose
!

restarted
    "image restart - since WindowGroup recreates the process with
     the default priority, we have to raise the prio again.
     Mhmh - this looks like a bug to me ...
     Also, the cursor (which was stored as a write or waitCursor) must
     be reset to normal."

    Processor activeProcess priority:(Processor userSchedulingPriority + 1).
    builder window extent: self preferredExtent.
    super restarted

!

setupTranscript 
    "create the transcript view"

    |launcher oldLauncherClass|

    "/ check if this is an additional launcher on a remote display.
    "/ if so, do not close the real launcher.

    (Transcript notNil and:[Transcript ~~ Stderr]) ifTrue:[
        isMainLauncher ifTrue:[
            launcher := Transcript topView application
        ] ifFalse:[
            launcher := self class current.
        ].

        (launcher notNil and:[launcher ~~ self]) ifTrue:[
            launcher window graphicsDevice == device ifTrue:[
                OpenLaunchers notNil ifTrue:[
                    OpenLaunchers remove:launcher ifAbsent:nil.
                ].
                ((oldLauncherClass := Smalltalk at:#Launcher) notNil 
                and:[oldLauncherClass isLoaded]) ifTrue: [
                    oldLauncherClass openLaunchers remove:launcher ifAbsent:nil
                ].
                launcher close
            ]
        ]
    ].

    transcript := (builder componentAt: #transcriptView) subViews first.

    isMainLauncher ifTrue:[
        transcript beTranscript.
    ] ifFalse:[
        transcript showCR:'**************** Notice ***********************'.
        transcript showCR:'**       this is NOT the Transcript          **'.
        transcript showCR:'** The real Transcript is on the main screen **'.
        transcript showCR:'**                                           **'.
        transcript showCR:'** Menus affecting common state are disabled **'.
        transcript showCR:'***********************************************'.
    ]

    "Modified: / 5.3.1999 / 18:00:36 / cg"
!

uninitialize

    super uninitialize.

    Screen current beep.
    OpenLaunchers notNil ifTrue:[OpenLaunchers remove:self ifAbsent:nil].
    Project notNil ifTrue:[Project removeDependent:self]
! !

!NewLauncher methodsFor:'user actions - demos'!

openDemo:className
    "open a demo, given its name.
     Looks in both the Smalltalk- and the Demos-Namespace
     for that class."

    self openApplication:className nameSpace:Demos

!

openMandelbrotDemo
    self openDemo:#ComplexIterationView 

    "Created: / 8.7.1998 / 20:36:37 / cg"
!

startTicTacToe2
    "opens a 2-user ticTacToe game"

    self openApplication:'TicTacToeGame' nameSpace:Games with:#open2UserGame
! !

!NewLauncher methodsFor:'user actions - file'!

exit
    "saves a snapshot image and exits, after asking for a fileName"

    |fileName saveAndExit box|

    box := EnterBox2 title:(resources string:'Save image before exiting?')
        okText:(resources string:'Save & Exit') 
        abortText:(resources string:'Cancel')
        action:[:str | fileName := str. saveAndExit := true].
    box label: (resources string:'Exiting ST/X').
    box initialText: ObjectMemory nameForSnapshot.
    box okText2:(resources string:'Exit') action2:[:str|saveAndExit := false].
    box showAtPointer.

    saveAndExit notNil ifTrue:[
        saveAndExit ifTrue:[
            self saveImageAs: fileName
        ].
        Smalltalk exit
    ]

    "Modified: / 23.4.1998 / 18:37:46 / cg"
!

saveImage
    "save image"

    self withCursor:Cursor write do:[
        (ObjectMemory snapShotOn:ObjectMemory nameForSnapshot) ifFalse:[
            self warn:(resources string:'Failed to save snapshot image (disk full or not writable)').
        ]
    ].

!

saveImageAs
    "save image, after asking for a file name"

    self saveImageAs: (
	FileSelectionBrowser 
	    request: (resources string:'Save Image As') 
	    fileName: ObjectMemory nameForSnapshot
	    inDirectory: Filename currentDirectory name
	    withFileFilters: #('*.img'))

    "Modified: / 23.4.1998 / 18:25:17 / cg"
! !

!NewLauncher methodsFor:'user actions - help'!

activeHelp

    helpIsOn isNil ifTrue:[
        helpIsOn := false asValue
    ].
    ^ helpIsOn

!

toggleActiveHelp:aBoolean
    "turn on/off active help"

    ActiveHelp notNil ifTrue:[
	self activeHelp value:aBoolean.
	aBoolean ifTrue:[
	    ActiveHelp start
	] ifFalse:[
	    ActiveHelp stop
	]
    ].

    "Modified: / 18.8.1998 / 16:06:27 / cg"
! !

!NewLauncher methodsFor:'user actions - system'!

initJavaVM
    JavaVM initializeVM

    "Created: / 9.2.1998 / 12:06:07 / cg"
!

startLatencyMonitor
    "open an interruptLatencyMonitor view"

    InterruptLatencyMonitor notNil ifTrue:[
	Autoload autoloadFailedSignal catch:[
	    InterruptLatencyMonitor autoload.
	].
	InterruptLatencyMonitor isLoaded ifTrue:[
	    InterruptLatencyMonitor open.
	    ^ self.
	]
    ].
    self warn:'Sorry - the irq latency monitor is only available
in the full commercial release'.

! !

!NewLauncher methodsFor:'user actions - windows'!

redrawAllWindows
    |setOfViews|

    setOfViews := device knownViews.

    setOfViews do:[:aView |
        aView shown ifTrue:[
            aView isRootView ifFalse:[
                aView clear; invalidate
            ]
        ]
    ]

    "Created: / 14.10.1998 / 12:23:27 / cg"
    "Modified: / 16.10.1998 / 01:08:15 / cg"
!

widgetHardcopy
    "after a second (to allow redraw of views under menu ...),
     let user specify a widget and save its contents."

    Processor 
	addTimedBlock:[
			|v|
			(v := Screen current viewFromUser) notNil ifTrue:[
			    self saveScreenImage:(Image fromView:v) defaultName:'hardcopy'
			]
		      ] 
	afterSeconds:1

    "Created: / 21.8.1998 / 20:44:12 / cg"
! !

!NewLauncher class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libtool/NewLauncher.st,v 1.155 1999-09-22 11:49:23 cg Exp $'
! !