Tools__ProjectBuilderAssistantApplication.st
author Claus Gittinger <cg@exept.de>
Sat, 21 Jul 2012 18:58:03 +0200
changeset 2898 c7f6c498df6a
parent 2897 b6cd7ee2a43b
child 2899 da83d0544556
permissions -rw-r--r--
category of:15 methods
cg@2742
     1
"
cg@2742
     2
 COPYRIGHT (c) 2009 by eXept Software AG
cg@2742
     3
              All Rights Reserved
cg@2742
     4
cg@2742
     5
 This software is furnished under a license and may be used
cg@2742
     6
 only in accordance with the terms of that license and with the
cg@2742
     7
 inclusion of the above copyright notice.   This software may not
cg@2742
     8
 be provided or otherwise made available to, or used by, any
cg@2742
     9
 other person.  No title to or ownership of the software is
cg@2742
    10
 hereby transferred.
cg@2742
    11
"
cg@2636
    12
"{ Package: 'stx:libtool2' }"
cg@2636
    13
cg@2636
    14
"{ NameSpace: Tools }"
cg@2636
    15
cg@2636
    16
AssistantApplication subclass:#ProjectBuilderAssistantApplication
cg@2687
    17
	instanceVariableNames:'packageToBuildHolder projectType projectTypeHolder
cg@2687
    18
		selectedProjectIndexHolder selectedProjectDefinition
cg@2687
    19
		listOfMatchingProjects listOfMatchingPackageIds
cg@2687
    20
		selectedProjectsComment hasProjectSelectedHolder newProjectsName
cg@2687
    21
		hideSTXProjects hideOtherApplicationClasses
cg@2687
    22
		hideOtherStartupClasses startMakeButtonEnabled
cg@2687
    23
		stopMakeButtonVisible makeOutputHolder newApplicationsName
cg@2687
    24
		listOfApplicationsInProject selectedApplicationIndexHolder
cg@2687
    25
		selectedApplication hasApplicationSelectedHolder
cg@2687
    26
		listOfStartupClassesInProject selectedStartupClassIndexHolder
cg@2687
    27
		selectedStartupClass hasStartupClassSelectedHolder
cg@2687
    28
		selectedApplicationsComment buildDirectoryHolder makeProcess
cg@2687
    29
		listOfClassesInProject makeOutputWindow projectBuilder
fm@2705
    30
		newStartupClassName usedCompilerHolder listOfNewProjectsName
cg@2724
    31
		newProjectsNameListExtendedComboBox productNameHolder
cg@2724
    32
		companyNameHolder compilerWarnMessageHolder
cg@2872
    33
		compilerWarnMessageVisibleHolder listOfPrerequisitesInProject'
cg@2687
    34
	classVariableNames:''
cg@2687
    35
	poolDictionaries:''
cg@2687
    36
	category:'System-Support-Projects'
cg@2636
    37
!
cg@2636
    38
cg@2668
    39
!ProjectBuilderAssistantApplication class methodsFor:'documentation'!
cg@2668
    40
cg@2742
    41
copyright
cg@2742
    42
"
cg@2742
    43
 COPYRIGHT (c) 2009 by eXept Software AG
cg@2742
    44
              All Rights Reserved
cg@2742
    45
cg@2742
    46
 This software is furnished under a license and may be used
cg@2742
    47
 only in accordance with the terms of that license and with the
cg@2742
    48
 inclusion of the above copyright notice.   This software may not
cg@2742
    49
 be provided or otherwise made available to, or used by, any
cg@2742
    50
 other person.  No title to or ownership of the software is
cg@2742
    51
 hereby transferred.
cg@2742
    52
"
cg@2742
    53
!
cg@2742
    54
cg@2668
    55
documentation
cg@2668
    56
"
cg@2668
    57
    a user friendly interface to the build process.
cg@2668
    58
    Simply wraps up existing tools like the CodeGeneratorTool, the browsers
cg@2668
    59
    and the ProjetBuilder
cg@2668
    60
cg@2668
    61
    [see also:]
cg@2668
    62
        CodeGeneratorTool
cg@2668
    63
        ProjectBuilder
cg@2668
    64
        ProjectDefinition
cg@2668
    65
cg@2668
    66
    [author:]
cg@2668
    67
        Claus Gittinger
cg@2668
    68
"
fm@2721
    69
!
fm@2721
    70
fm@2721
    71
help
cg@2825
    72
"
cg@2825
    73
  Packager - A Standalone-Executable Builder and Packager
fm@2721
    74
cg@2825
    75
    This assistant-application allows for standalone applications to be built very easily. 
cg@2825
    76
    It will generate all required classes, files, start the compilation process, 
cg@2825
    77
    generate a self-installable executable with a few mouse clicks. 
cg@2825
    78
cg@2825
    79
    A simple demo application like the famous 'Hello World' can be generated in a few minutes.
cg@2825
    80
cg@2825
    81
  Prerequisites
cg@2825
    82
cg@2825
    83
    * Windows Users:
cg@2825
    84
    Please install either the 'Borland Free Commandline Compiler Tools (bcc32)' 
cg@2825
    85
    or the 'Microsoft Visual-C++' package (also free). 
cg@2825
    86
     In addition, the 'NullSoft NSIS-Installer Package' is required.
cg@2825
    87
cg@2825
    88
    Due to limitations and bugs in the Visual-C++ compiler (limit on the size of 
cg@2825
    89
    string-constants), some Smalltalk code is still not compilable 
cg@2825
    90
    (currently, this affects classes which contain image-resource methods for big images). 
cg@2825
    91
    Although microsoft is doing their best (a relative measure) to make things better 
cg@2825
    92
    (they increase the string-limit with every new release), they still seem to be unable 
cg@2825
    93
    to figure out how ti use malloc for string-data). 
cg@2825
    94
    We are patiently waiting for a real fix and still using bcc in the meanwhile. 
cg@2825
    95
    Therefore, we recommend using the borland compiler suite. 
cg@2825
    96
    Please install it at its standard location ('C:\Borland') as our makefiles might 
cg@2825
    97
    still contain hard-coded pathes (yes, we are ashamed about this).
cg@2825
    98
cg@2825
    99
    * Unix Users:
cg@2825
   100
    You should already have the gcc compile suite (including all required header files) 
cg@2825
   101
    installed and ready to use. For a lack of time on our side, there is currently no 
cg@2825
   102
    self-installer support for Unix. The packager will generate a zipped tar file, 
cg@2825
   103
    which must be deployed and unpacked for use. This may change in the near future.
cg@2825
   104
cg@2825
   105
  Packages, Projects, PackageIDs and ProjectDefinitions
cg@2825
   106
cg@2825
   107
    Smalltalk basically uses two objects for packaging:
cg@2825
   108
cg@2825
   109
        * PackageIDs (also called ProjectID's occasionally)
cg@2825
   110
        * ProjectDefinitions 
cg@2825
   111
cg@2825
   112
    Older ST/X versions used instances of a Project class - this is now obsolete and 
cg@2825
   113
    removed from the system (although there are still some minor uses of it, 
cg@2825
   114
    which might remain there for backward compatibility for some time, as some customers 
cg@2825
   115
    have built their own packaging scheme around it).
cg@2825
   116
cg@2825
   117
  PackageIDs
cg@2825
   118
cg@2825
   119
    These are simple symbols and are attached to classes and methods. If a method has 
cg@2825
   120
    a packageID different from its class, it is called an extension method.
cg@2825
   121
    PackageIDs must have a certain fixed format: they always contain exactly two parts, 
cg@2825
   122
    which are separated by a colon character: the module and the directory part. 
cg@2825
   123
    The module is used as main-selector on where and how the source code repository is 
cg@2825
   124
    accessed. The directory is a path below that repository. If checked out into the local 
cg@2825
   125
    filesystem, the module defines the top-level directory. Thus, if a packageID is 
cg@2825
   126
    'stx:libbasic', the corresponding sources will be found in the repository associated 
cg@2825
   127
    to the 'stx' module, under the directory 'libbasic'. 
cg@2825
   128
    In the local file system, it will be found under 'stx/libbasic'. 
cg@2825
   129
    As another example, if the packageID is 'exept:expecco/plugins/foo', 
cg@2825
   130
    the repository is whichever is associated with the 'exept' module, and the subdirectory 
cg@2825
   131
    is 'expecco/plugins/foo'. The local path to the sourcefiles would be 
cg@2825
   132
    'exept/expecco/plugins/foo'.
cg@2825
   133
cg@2825
   134
    Please notice that it does make sense to associate different repositories to different 
cg@2825
   135
    modules: for example, you could setup the sourceCodeManager to use CVS access to the 
cg@2825
   136
    exept repository for everything under the 'stx' module, 
cg@2825
   137
    and at the same time, use a local SVN repository for everything under the 'myCompany' 
cg@2825
   138
    module.
cg@2825
   139
cg@2825
   140
  ProjectDefinitions
cg@2825
   141
cg@2825
   142
    These describe the contents of a project, such as the classes to include, 
cg@2825
   143
    the set of extension methods, any additional compilation information. 
cg@2825
   144
    ProjectDefinitions come in 3 flavours:
cg@2825
   145
cg@2825
   146
        * GUI Application Definition
cg@2825
   147
        * non-GUI Application Definition
cg@2825
   148
        * ClassLibrary Definition 
cg@2825
   149
cg@2825
   150
    ProjectDefinitions are stored and managed as class-instances, located as subclasses 
cg@2825
   151
    of one of ApplicationDefinition or LibraryDefinition. 
cg@2825
   152
    As classes, they are themself managed, compiled and packaged as part of the project 
cg@2825
   153
    (and also have the same PackageID as their components). 
cg@2825
   154
    They are also treated like any other class w.r.t. source code management.
cg@2825
   155
cg@2825
   156
  Packaging
cg@2825
   157
cg@2825
   158
    All classes and extension methods belonging to a single package are supposed to be 
cg@2825
   159
    loaded (and possibly unloaded) together. They are also usually deployed inside a single 
cg@2825
   160
    dynamic link library ('dll', for short). In the Unix world, these are called 
cg@2825
   161
    'shared object' or 'so'. 
cg@2825
   162
    Finally, they are stored in a common directory both on the local file system and in a 
cg@2825
   163
    source code repository (CVS, SVN, etc.).
cg@2825
   164
cg@2825
   165
  Structure of a Project
cg@2825
   166
cg@2825
   167
    The artefacts as manipulated by the packager are:
cg@2825
   168
cg@2825
   169
        * the ProjectDefinition class
cg@2825
   170
          This defines the type of application (GUI / non-GUI), 
cg@2825
   171
          its contents (i.e. the set of classes to be included in the binary itself and 
cg@2825
   172
          the set of library-dll's to be included in the deployed package), 
cg@2825
   173
          and some other metadata, such as icon, title etc.
cg@2825
   174
cg@2825
   175
        * the ApplicationModel class
cg@2825
   176
          This defines the GUI, and is typically created using the UI-Painter.
cg@2825
   177
cg@2825
   178
        * the Startup class
cg@2825
   179
          This is the first class which gets control when the executable is started; 
cg@2825
   180
          it can analyze the command line arguments, read patches or updates, 
cg@2825
   181
          start background ptocesses, and will eventually open the applications GUI. 
cg@2825
   182
cg@2825
   183
  Build Procedure
cg@2825
   184
cg@2825
   185
    All of the three components above can be generated by the packager to provide an 
cg@2825
   186
    initial framework for further work.
cg@2825
   187
cg@2825
   188
    After the definition of those classes, all required files are stored in a temporary 
cg@2825
   189
    build directory. This means that the above classes are filed out, 
cg@2825
   190
    and make- and other support files are generated.
cg@2825
   191
cg@2825
   192
    Finally, the actual build process is started. This requires an external C-compiler. 
cg@2825
   193
    Under windows, both Borland-C (free download available via the internet) and Microsoft's 
cg@2825
   194
    Visual-C++ (also available for free) can be used (the later with some limitations as explained above).
cg@2825
   195
cg@2825
   196
    A self-installing executable is built using the NullSoft NSIS package. 
cg@2825
   197
    This is also required to be installed before the packager is started.
cg@2825
   198
cg@2825
   199
    After the build, all required files are packaged in a single install-file. 
cg@2825
   200
    This is called 'MyApplicationSetup.exe' and found in the project-specific subdirectory 
cg@2825
   201
    of the build directory. For deployment, this single file has to be delivered to a customer 
cg@2825
   202
    and executed there.
cg@2825
   203
cg@2825
   204
    Summary: It has NEVER been easier to create a GUI application with Smalltalk. 
cg@2825
   205
"
cg@2668
   206
! !
cg@2636
   207
cg@2703
   208
!ProjectBuilderAssistantApplication class methodsFor:'assistant pages spec'!
cg@2703
   209
cg@2703
   210
assistantSpec
cg@2703
   211
    ^ #(Array
cg@2703
   212
        ( AssistantPageSpec
cg@2703
   213
            pageTitle: 'Project Type Selection'
cg@2703
   214
            windowSpecSelector: page1_projectTypeSelectionSpec
cg@2703
   215
            enterCallbackSelector: updateListOfMatchingProjects
cg@2703
   216
            infoText: 'Choose the <B>type</B> of project you are about to build.'
cg@2703
   217
        )
cg@2703
   218
cg@2703
   219
        (AssistantPageSpec
cg@2703
   220
            pageTitle: 'ProjectDefinition Selection'
cg@2703
   221
            windowSpecSelector: page2_projectSelectionSpec
cg@2703
   222
            enterCallbackSelector: updateListOfMatchingProjects
cg@2825
   223
            infoText: 'Choose an existing project definition or create a new one. These are subclasses of <I>ProjectDefinition</I> and define the type and contents of a project.'
cg@2703
   224
        )
cg@2703
   225
cg@2703
   226
        (AssistantPageSpec
cg@2703
   227
            pageTitle: 'Startup Application Selection'
cg@2703
   228
            windowSpecSelector: page3_applicationSelectionSpec
cg@2703
   229
            isEnabledQuerySelector: #projectTypeIsGuiApplication
cg@2703
   230
            canEnterQuerySelector: #canEnterApplicationSelection
cg@2703
   231
            enterCallbackSelector: updateListOfApplicationsInProject
cg@2825
   232
            infoText: 'Choose an existing application or create a new one. These are subclasses of <I>ApplicationModel</I> and define the GUI and control flow inside the application. Can also be left blank if the startup class does it all (stx build).'
cg@2703
   233
        )
cg@2703
   234
cg@2703
   235
        (AssistantPageSpec
cg@2703
   236
            pageTitle: 'Startup Class Selection'
cg@2703
   237
            windowSpecSelector: page4_startupClassSelectionSpec
cg@2703
   238
            isEnabledQuerySelector: #projectTypeIsNotLibrary
cg@2703
   239
            canEnterQuerySelector: #canEnterStartupClassSelection
cg@2703
   240
            enterCallbackSelector: updateListOfStartupClassesInProject
cg@2825
   241
            infoText: 'Choose an existing startup-class or create a new one. These are subclasses of <I>StandaloneStartup</I> and start the application. Command line arguments can be interpreted there.'
cg@2703
   242
        )
cg@2703
   243
cg@2703
   244
        (AssistantPageSpec
cg@2703
   245
            pageTitle: 'Specify Contents'
cg@2703
   246
            windowSpecSelector: page5_specifyIncludedClasses
cg@2703
   247
            enterCallbackSelector: enterContentsSpecification
cg@2703
   248
            canEnterQuerySelector: #canEnterContentsSelection
cg@2825
   249
            infoText: 'Define which (other) classes are to be included. Press "<I>Scan</I>" to include all classes of the package; browse to edit the contents manually.'
cg@2703
   250
        )
cg@2703
   251
cg@2703
   252
        (AssistantPageSpec
cg@2872
   253
            pageTitle: 'Specify Prerequisites'
cg@2872
   254
            windowSpecSelector: page5b_specifyPrerequisitePackages
cg@2872
   255
            enterCallbackSelector: enterPrerequisitesSpecification
cg@2872
   256
            canEnterQuerySelector: #canEnterPrerequisitesSelection
cg@2872
   257
            infoText: 'Define which (other) packages are needed as prerequisites. Press "<I>Scan</I>" to search for prerequisites; browse to edit the list manually.'
cg@2872
   258
        )
cg@2872
   259
cg@2872
   260
        (AssistantPageSpec
cg@2724
   261
            pageTitle: 'Specify Project Attributes'
cg@2724
   262
            windowSpecSelector: page6a_specifyProjectAttributes
cg@2724
   263
            infoText: 'Define additional attributes.'
cg@2724
   264
            enterCallbackSelector: updateProjectAttributes
cg@2724
   265
            leaveCallbackSelector: #rememberProjectAttributes
cg@2724
   266
        )
cg@2724
   267
cg@2724
   268
        (AssistantPageSpec
cg@2703
   269
            pageTitle: 'Specify Build Directory'
cg@2724
   270
            windowSpecSelector: page6b_specifyBuildDirectorySpec
cg@2825
   271
            infoText: 'Define where the build-process is to be performed. All generated files are created below that directory. After deployment, the build directory is no longer needed (but you can keep it for a faster compile the next time).'
cg@2724
   272
            enterCallbackSelector: #checkCompilerAvailability
cg@2703
   273
        )
cg@2703
   274
cg@2703
   275
        (AssistantPageSpec
cg@2703
   276
            pageTitle: 'Build'
cg@2703
   277
            windowSpecSelector: page7_buildSpec
cg@2703
   278
            canEnterQuerySelector: #canEnterBuild
cg@2703
   279
            enterCallbackSelector: #restoreMakeOutputsContents
cg@2703
   280
            leaveCallbackSelector: #rememberMakeOutputsContents
cg@2825
   281
            infoText: 'Start the build-process. This will run make/bcc to compile all required classes and nsis to generate a self-installable executable. You must have the borland-cc and NullSoft NSIS packages installed for this to work.'
cg@2703
   282
        )
cg@2703
   283
cg@2703
   284
        (AssistantPageSpec
cg@2703
   285
            pageTitle: 'Deploy'
cg@2703
   286
            windowSpecSelector: page8_deploySpec
cg@2703
   287
            canEnterQuerySelector: #canEnterDeploy
cg@2825
   288
            infoText: 'Find the installer to be deployed (or test-run the binary). You can open a WindowsExplorer there to copy the files for deployment. After that, the build directory is no longer needed (but you can keep it for a faster compile the next time).'
cg@2703
   289
        )
cg@2703
   290
    ) decodeAsLiteralArray.
cg@2825
   291
cg@2872
   292
    "Modified: / 19-01-2012 / 15:36:05 / cg"
cg@2703
   293
! !
cg@2703
   294
cg@2670
   295
!ProjectBuilderAssistantApplication class methodsFor:'defaults'!
cg@2670
   296
cg@2670
   297
defaultIcon
sv@2838
   298
    <resource: #programImage>
sv@2838
   299
cg@2670
   300
    ^ ToolbarIconLibrary projectBuilderIcon
cg@2670
   301
!
cg@2670
   302
cg@2670
   303
windowLabelTemplate
cg@2670
   304
    ^ 'ST/X Packager: %1'
cg@2670
   305
! !
cg@2670
   306
cg@2703
   307
!ProjectBuilderAssistantApplication class methodsFor:'help'!
cg@2703
   308
cg@2703
   309
flyByHelpSpec
cg@2703
   310
    <resource: #help>
cg@2703
   311
cg@2703
   312
    ^ super flyByHelpSpec addPairsFrom:#(
cg@2703
   313
cg@2706
   314
#'projectType'
cg@2706
   315
'Choose the type of Project you are about to deploy.'
cg@2703
   316
cg@2706
   317
#existingProjects
cg@2706
   318
'Projects with an existing ProjectDefinition of the chosen type (above).'
cg@2706
   319
cg@2706
   320
#browseSelectedProject
cg@2706
   321
'Open a SystemBrowser on the selected Project.'
cg@2706
   322
cg@2706
   323
#hideSTXBasePackages
cg@2706
   324
'Only show packages which are not already included in the basic ST/X delivery.'
cg@2703
   325
cg@2703
   326
#'listOfNewProjectsName'
cg@2706
   327
'PackageID (module:directory).
cg@2706
   328
The pull-down list contains packageIDs for which no ProjectDefinition exists (yet).'
cg@2706
   329
cg@2706
   330
#'createNewProject'
cg@2706
   331
'PackageID (module:directory).
cg@2706
   332
Click to create a new (empty) ProjectDefinition for the given PackageID.'
cg@2703
   333
cg@2703
   334
)
cg@2703
   335
! !
cg@2703
   336
cg@2636
   337
!ProjectBuilderAssistantApplication class methodsFor:'interface specs'!
cg@2636
   338
cg@2645
   339
page1_projectTypeSelectionSpec
cg@2636
   340
    "This resource specification was automatically generated
cg@2636
   341
     by the UIPainter of ST/X."
cg@2636
   342
cg@2636
   343
    "Do not manually edit this!! If it is corrupted,
cg@2636
   344
     the UIPainter may not be able to read the specification."
cg@2636
   345
cg@2636
   346
    "
cg@2648
   347
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page1_projectTypeSelectionSpec
cg@2648
   348
     Tools::ProjectBuilderAssistantApplication new openInterface:#page1_projectTypeSelectionSpec
cg@2636
   349
    "
cg@2636
   350
cg@2636
   351
    <resource: #canvas>
cg@2636
   352
cg@2636
   353
    ^ 
cg@2636
   354
     #(FullSpec
cg@2645
   355
        name: #'page1_projectTypeSelectionSpec'
cg@2636
   356
        window: 
cg@2636
   357
       (WindowSpec
cg@2636
   358
          label: 'Project Selection'
cg@2636
   359
          name: 'Project Selection'
cg@2636
   360
          min: (Point 0 0)
cg@2636
   361
          bounds: (Rectangle 0 0 626 394)
cg@2636
   362
        )
cg@2636
   363
        component: 
cg@2636
   364
       (SpecCollection
cg@2636
   365
          collection: (
cg@2636
   366
           (FramedBoxSpec
cg@2706
   367
              label: 'Project Type'
cg@2636
   368
              name: 'FramedBox1'
cg@2698
   369
              layout: (LayoutFrame 0 0.0 0 0 4 1.0 120 0)
cg@2706
   370
              activeHelpKey: projectType
cg@2636
   371
              labelPosition: topLeft
cg@2636
   372
              translateLabel: true
cg@2636
   373
              component: 
cg@2636
   374
             (SpecCollection
cg@2636
   375
                collection: (
cg@2636
   376
                 (VerticalPanelViewSpec
cg@2636
   377
                    name: 'VerticalPanel1'
cg@2636
   378
                    layout: (LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
cg@2636
   379
                    horizontalLayout: leftSpace
cg@2636
   380
                    verticalLayout: topSpace
cg@2636
   381
                    horizontalSpace: 3
cg@2636
   382
                    verticalSpace: 3
cg@2636
   383
                    component: 
cg@2636
   384
                   (SpecCollection
cg@2636
   385
                      collection: (
cg@2636
   386
                       (ViewSpec
cg@2636
   387
                          name: 'Box1'
cg@2636
   388
                          extent: (Point 10 10)
cg@2636
   389
                        )
cg@2636
   390
                       (RadioButtonSpec
cg@2636
   391
                          label: 'GUI Application'
cg@2636
   392
                          name: 'RadioButton1'
cg@2636
   393
                          translateLabel: true
cg@2659
   394
                          model: projectTypeHolder
cg@2636
   395
                          isTriggerOnDown: true
cg@2636
   396
                          onCallBackSelector: projectTypeChanged
cg@2897
   397
                          select: #'GUI-Application'
cg@2636
   398
                          extent: (Point 136 22)
cg@2636
   399
                        )
cg@2636
   400
                       (RadioButtonSpec
cg@2636
   401
                          label: 'Non-GUI Application'
cg@2636
   402
                          name: 'RadioButton2'
cg@2636
   403
                          translateLabel: true
cg@2659
   404
                          model: projectTypeHolder
cg@2636
   405
                          isTriggerOnDown: true
cg@2636
   406
                          onCallBackSelector: projectTypeChanged
cg@2897
   407
                          select: #'NonGUI-Application'
cg@2636
   408
                          extent: (Point 136 22)
cg@2636
   409
                        )
cg@2636
   410
                       (RadioButtonSpec
cg@2636
   411
                          label: 'Class Library'
cg@2636
   412
                          name: 'RadioButton3'
cg@2636
   413
                          translateLabel: true
cg@2659
   414
                          model: projectTypeHolder
cg@2636
   415
                          isTriggerOnDown: true
cg@2636
   416
                          onCallBackSelector: projectTypeChanged
cg@2897
   417
                          select: #Library
cg@2636
   418
                          extent: (Point 136 22)
cg@2636
   419
                        )
cg@2636
   420
                       )
cg@2636
   421
                     
cg@2636
   422
                    )
cg@2636
   423
                  )
cg@2636
   424
                 )
cg@2636
   425
               
cg@2636
   426
              )
cg@2636
   427
            )
cg@2636
   428
           (FramedBoxSpec
cg@2726
   429
              label: 'Existing Projects of this Type (PackageIDs)'
cg@2636
   430
              name: 'FramedBox2'
cg@2698
   431
              layout: (LayoutFrame 0 0.0 123 0 4 1.0 0 1)
cg@2706
   432
              activeHelpKey: existingProjects
cg@2636
   433
              labelPosition: topLeft
cg@2636
   434
              translateLabel: true
cg@2636
   435
              component: 
cg@2636
   436
             (SpecCollection
cg@2636
   437
                collection: (
cg@2636
   438
                 (VariableHorizontalPanelSpec
cg@2636
   439
                    name: 'VariableHorizontalPanel1'
cg@2636
   440
                    layout: (LayoutFrame 0 0 4 0 0 1 -26 1)
cg@2636
   441
                    component: 
cg@2636
   442
                   (SpecCollection
cg@2636
   443
                      collection: (
cg@2636
   444
                       (SequenceViewSpec
cg@2636
   445
                          name: 'List1'
cg@2636
   446
                          model: selectedProjectIndexHolder
cg@2636
   447
                          hasHorizontalScrollBar: true
cg@2636
   448
                          hasVerticalScrollBar: true
cg@2636
   449
                          useIndex: true
cg@2686
   450
                          sequenceList: listOfMatchingPackageIds
cg@2636
   451
                        )
cg@2636
   452
                       (TextEditorSpec
cg@2636
   453
                          name: 'TextEditor1'
cg@2636
   454
                          model: selectedProjectsComment
cg@2636
   455
                          hasHorizontalScrollBar: true
cg@2636
   456
                          hasVerticalScrollBar: true
cg@2636
   457
                          isReadOnly: true
cg@2636
   458
                          hasKeyboardFocusInitially: false
cg@2636
   459
                        )
cg@2636
   460
                       )
cg@2636
   461
                     
cg@2636
   462
                    )
cg@2636
   463
                    handles: (Any 0.34560327198364 1.0)
cg@2636
   464
                  )
cg@2636
   465
                 (CheckBoxSpec
cg@2636
   466
                    label: 'Hide ST/X Base Packages'
cg@2636
   467
                    name: 'CheckBox1'
cg@2659
   468
                    layout: (LayoutFrame -1 0 -18 1 0 1 4 1)
cg@2706
   469
                    activeHelpKey: hideSTXBasePackages
cg@2636
   470
                    model: hideSTXProjects
cg@2636
   471
                    translateLabel: true
cg@2636
   472
                  )
cg@2636
   473
                 )
cg@2636
   474
               
cg@2636
   475
              )
cg@2636
   476
            )
cg@2636
   477
           )
cg@2636
   478
         
cg@2636
   479
        )
cg@2636
   480
      )
cg@2897
   481
cg@2897
   482
    "Modified: / 20-07-2012 / 13:27:45 / cg"
cg@2636
   483
!
cg@2636
   484
cg@2645
   485
page2_projectSelectionSpec
cg@2636
   486
    "This resource specification was automatically generated
cg@2636
   487
     by the UIPainter of ST/X."
cg@2636
   488
cg@2636
   489
    "Do not manually edit this!! If it is corrupted,
cg@2636
   490
     the UIPainter may not be able to read the specification."
cg@2636
   491
cg@2636
   492
    "
cg@2648
   493
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page2_projectSelectionSpec
cg@2648
   494
     Tools::ProjectBuilderAssistantApplication new openInterface:#page2_projectSelectionSpec
cg@2636
   495
    "
cg@2636
   496
cg@2636
   497
    <resource: #canvas>
cg@2636
   498
cg@2636
   499
    ^ 
cg@2636
   500
     #(FullSpec
cg@2645
   501
        name: #'page2_projectSelectionSpec'
cg@2636
   502
        window: 
cg@2636
   503
       (WindowSpec
cg@2636
   504
          label: 'Project Selection'
cg@2636
   505
          name: 'Project Selection'
cg@2636
   506
          min: (Point 0 0)
cg@2636
   507
          bounds: (Rectangle 0 0 521 453)
cg@2636
   508
        )
cg@2636
   509
        component: 
cg@2636
   510
       (SpecCollection
cg@2636
   511
          collection: (
cg@2636
   512
           (FramedBoxSpec
cg@2706
   513
              label: 'New Project''s PackageID'
cg@2636
   514
              name: 'FramedBox3'
cg@2636
   515
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 72 0)
cg@2636
   516
              labelPosition: topLeft
cg@2636
   517
              translateLabel: true
cg@2636
   518
              component: 
cg@2636
   519
             (SpecCollection
cg@2636
   520
                collection: (
cg@2706
   521
                 (ExtendedComboBoxSpec
cg@2706
   522
                    name: 'NewProjectsNameListExtendedComboBox'
cg@2706
   523
                    layout: (LayoutFrame 1 0 6 0 -113 1 28 0)
cg@2706
   524
                    model: newProjectsName
cg@2706
   525
                    readOnly: false
cg@2706
   526
                    miniScrollerHorizontal: true
cg@2706
   527
                    postBuildCallback: postBuildNewProjectsNameListExtendedComboBox:
cg@2706
   528
              activeHelpKey: listOfNewProjectsName
cg@2706
   529
                  )
cg@2636
   530
                 (ActionButtonSpec
cg@2636
   531
                    label: 'Create'
cg@2636
   532
                    name: 'Button1'
cg@2659
   533
                    layout: (LayoutFrame -100 1 6 0 2 1 28 0)
cg@2636
   534
                    translateLabel: true
cg@2636
   535
                    model: createNewProject
cg@2703
   536
              activeHelpKey: createNewProject
cg@2706
   537
cg@2636
   538
                  )
cg@2706
   539
cg@2636
   540
                 )
cg@2636
   541
               
cg@2636
   542
              )
cg@2636
   543
            )
cg@2636
   544
           (FramedBoxSpec
cg@2706
   545
              label: 'Existing Projects with ProjectDefinition'
cg@2636
   546
              name: 'FramedBox4'
cg@2648
   547
              layout: (LayoutFrame 0 0.0 70 0 4 1.0 -30 1)
cg@2636
   548
              labelPosition: topLeft
cg@2636
   549
              translateLabel: true
cg@2636
   550
              component: 
cg@2636
   551
             (SpecCollection
cg@2636
   552
                collection: (
cg@2636
   553
                 (VariableHorizontalPanelSpec
cg@2636
   554
                    name: 'VariableHorizontalPanel2'
cg@2636
   555
                    layout: (LayoutFrame 0 0 4 0 0 1 -26 1)
cg@2636
   556
                    component: 
cg@2636
   557
                   (SpecCollection
cg@2636
   558
                      collection: (
cg@2636
   559
                       (SequenceViewSpec
cg@2636
   560
                          name: 'List2'
cg@2636
   561
                          model: selectedProjectIndexHolder
cg@2636
   562
                          hasHorizontalScrollBar: true
cg@2636
   563
                          hasVerticalScrollBar: true
cg@2636
   564
                          useIndex: true
cg@2686
   565
                          sequenceList: listOfMatchingPackageIds
cg@2636
   566
                        )
cg@2636
   567
                       (TextEditorSpec
cg@2636
   568
                          name: 'TextEditor2'
cg@2636
   569
                          model: selectedProjectsComment
cg@2636
   570
                          hasHorizontalScrollBar: true
cg@2636
   571
                          hasVerticalScrollBar: true
cg@2636
   572
                          isReadOnly: true
cg@2636
   573
                          hasKeyboardFocusInitially: false
cg@2636
   574
                          viewClassName: 'TextView'
cg@2636
   575
                        )
cg@2636
   576
                       )
cg@2636
   577
                     
cg@2636
   578
                    )
cg@2636
   579
                    handles: (Any 0.34560327198364 1.0)
cg@2636
   580
                  )
cg@2636
   581
                 (CheckBoxSpec
cg@2636
   582
                    label: 'Hide ST/X Base Packages'
cg@2636
   583
                    name: 'CheckBox1'
cg@2659
   584
                    layout: (LayoutFrame -1 0 -17 1 0 1 5 1)
cg@2636
   585
                    model: hideSTXProjects
cg@2636
   586
                    translateLabel: true
cg@2706
   587
                    activeHelpKey: hideSTXBasePackages
cg@2636
   588
                  )
cg@2636
   589
                 )
cg@2636
   590
               
cg@2636
   591
              )
cg@2636
   592
            )
cg@2648
   593
           (HorizontalPanelViewSpec
cg@2648
   594
              name: 'HorizontalPanel1'
cg@2648
   595
              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
cg@2648
   596
              horizontalLayout: leftSpace
cg@2648
   597
              verticalLayout: center
cg@2648
   598
              horizontalSpace: 3
cg@2648
   599
              verticalSpace: 3
cg@2648
   600
              component: 
cg@2648
   601
             (SpecCollection
cg@2648
   602
                collection: (
cg@2648
   603
                 (ActionButtonSpec
cg@2648
   604
                    label: 'Browse Selected Project'
cg@2648
   605
                    name: 'Button3'
cg@2648
   606
                    translateLabel: true
cg@2648
   607
                    model: doBrowseProject
cg@2659
   608
                    enableChannel: hasProjectSelectedHolder
cg@2648
   609
                    extent: (Point 180 22)
cg@2706
   610
                    activeHelpKey: browseSelectedProject
cg@2648
   611
                  )
cg@2648
   612
                 )
cg@2648
   613
               
cg@2648
   614
              )
cg@2636
   615
            )
cg@2636
   616
           )
cg@2636
   617
         
cg@2636
   618
        )
cg@2636
   619
      )
cg@2636
   620
!
cg@2636
   621
cg@2645
   622
page3_applicationSelectionSpec
cg@2636
   623
    "This resource specification was automatically generated
cg@2636
   624
     by the UIPainter of ST/X."
cg@2636
   625
cg@2636
   626
    "Do not manually edit this!! If it is corrupted,
cg@2636
   627
     the UIPainter may not be able to read the specification."
cg@2636
   628
cg@2636
   629
    "
cg@2648
   630
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page3_applicationSelectionSpec
cg@2648
   631
     Tools::ProjectBuilderAssistantApplication new openInterface:#page3_applicationSelectionSpec
cg@2636
   632
    "
cg@2636
   633
cg@2636
   634
    <resource: #canvas>
cg@2636
   635
cg@2636
   636
    ^ 
cg@2636
   637
     #(FullSpec
cg@2645
   638
        name: #'page3_applicationSelectionSpec'
cg@2636
   639
        window: 
cg@2636
   640
       (WindowSpec
cg@2636
   641
          label: 'Application Selection'
cg@2636
   642
          name: 'Application Selection'
cg@2636
   643
          min: (Point 0 0)
cg@2671
   644
          bounds: (Rectangle 0 0 519 406)
cg@2636
   645
        )
cg@2636
   646
        component: 
cg@2636
   647
       (SpecCollection
cg@2636
   648
          collection: (
cg@2636
   649
           (FramedBoxSpec
cg@2725
   650
              label: 'New Application Class'
cg@2636
   651
              name: 'FramedBox3'
cg@2725
   652
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 70 0)
cg@2636
   653
              labelPosition: topLeft
cg@2636
   654
              translateLabel: true
cg@2636
   655
              component: 
cg@2636
   656
             (SpecCollection
cg@2636
   657
                collection: (
cg@2636
   658
                 (InputFieldSpec
cg@2636
   659
                    name: 'EntryField1'
cg@2659
   660
                    layout: (LayoutFrame 1 0 6 0 -113 1 28 0)
cg@2636
   661
                    model: newApplicationsName
cg@2636
   662
                    acceptOnReturn: true
cg@2636
   663
                    acceptOnTab: true
cg@2693
   664
                    acceptOnLostFocus: true
cg@2636
   665
                    acceptOnPointerLeave: true
cg@2636
   666
                    emptyFieldReplacementText: 'MyApplication'
cg@2636
   667
                  )
cg@2636
   668
                 (ActionButtonSpec
cg@2636
   669
                    label: 'Create'
cg@2636
   670
                    name: 'Button1'
cg@2659
   671
                    layout: (LayoutFrame -100 1 6 0 1 1 28 0)
cg@2636
   672
                    translateLabel: true
cg@2636
   673
                    model: createNewApplication
cg@2636
   674
                  )
cg@2636
   675
                 )
cg@2636
   676
               
cg@2636
   677
              )
cg@2636
   678
            )
cg@2636
   679
           (FramedBoxSpec
cg@2636
   680
              label: 'Existing Applications'
cg@2636
   681
              name: 'FramedBox4'
cg@2725
   682
              layout: (LayoutFrame 0 0.0 72 0 4 1.0 -30 1)
cg@2636
   683
              labelPosition: topLeft
cg@2636
   684
              translateLabel: true
cg@2636
   685
              component: 
cg@2636
   686
             (SpecCollection
cg@2636
   687
                collection: (
cg@2636
   688
                 (VariableHorizontalPanelSpec
cg@2636
   689
                    name: 'VariableHorizontalPanel2'
cg@2671
   690
                    layout: (LayoutFrame 0 0 4 0 0 1 -26 1)
cg@2636
   691
                    component: 
cg@2636
   692
                   (SpecCollection
cg@2636
   693
                      collection: (
cg@2636
   694
                       (SequenceViewSpec
cg@2636
   695
                          name: 'List2'
cg@2636
   696
                          model: selectedApplicationIndexHolder
cg@2636
   697
                          hasHorizontalScrollBar: true
cg@2636
   698
                          hasVerticalScrollBar: true
cg@2636
   699
                          useIndex: true
cg@2636
   700
                          sequenceList: listOfApplicationsInProject
cg@2671
   701
                          ignoreReselect: false
cg@2636
   702
                        )
cg@2636
   703
                       (TextEditorSpec
cg@2636
   704
                          name: 'TextEditor2'
cg@2636
   705
                          model: selectedApplicationsComment
cg@2636
   706
                          hasHorizontalScrollBar: true
cg@2636
   707
                          hasVerticalScrollBar: true
cg@2636
   708
                          isReadOnly: true
cg@2636
   709
                          hasKeyboardFocusInitially: false
cg@2636
   710
                          viewClassName: 'TextView'
cg@2636
   711
                        )
cg@2636
   712
                       )
cg@2636
   713
                     
cg@2636
   714
                    )
cg@2636
   715
                    handles: (Any 0.34560327198364 1.0)
cg@2636
   716
                  )
cg@2671
   717
                 (CheckBoxSpec
cg@2671
   718
                    label: 'Hide other Application Classes'
cg@2671
   719
                    name: 'CheckBox1'
cg@2671
   720
                    layout: (LayoutFrame -1 0 -18 1 0 1 4 1)
cg@2671
   721
                    model: hideOtherApplicationClasses
cg@2671
   722
                    translateLabel: true
cg@2671
   723
                  )
cg@2636
   724
                 )
cg@2636
   725
               
cg@2636
   726
              )
cg@2636
   727
            )
cg@2648
   728
           (HorizontalPanelViewSpec
cg@2648
   729
              name: 'HorizontalPanel1'
cg@2648
   730
              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
cg@2648
   731
              horizontalLayout: leftSpace
cg@2648
   732
              verticalLayout: center
cg@2648
   733
              horizontalSpace: 3
cg@2648
   734
              verticalSpace: 3
cg@2648
   735
              component: 
cg@2648
   736
             (SpecCollection
cg@2648
   737
                collection: (
cg@2648
   738
                 (ActionButtonSpec
cg@2648
   739
                    label: 'Browse Selected Application'
cg@2648
   740
                    name: 'Button3'
cg@2648
   741
                    translateLabel: true
cg@2648
   742
                    model: doBrowseApplication
cg@2659
   743
                    enableChannel: hasApplicationSelectedHolder
cg@2659
   744
                    extent: (Point 180 22)
cg@2659
   745
                  )
cg@2659
   746
                 (ActionButtonSpec
cg@2659
   747
                    label: 'Launch Selected Application'
cg@2659
   748
                    name: 'Button4'
cg@2659
   749
                    translateLabel: true
cg@2659
   750
                    model: doLaunchApplication
cg@2659
   751
                    enableChannel: hasApplicationSelectedHolder
cg@2648
   752
                    extent: (Point 180 22)
cg@2648
   753
                  )
cg@2648
   754
                 )
cg@2648
   755
               
cg@2648
   756
              )
cg@2636
   757
            )
cg@2636
   758
           )
cg@2636
   759
         
cg@2636
   760
        )
cg@2636
   761
      )
cg@2636
   762
!
cg@2636
   763
cg@2656
   764
page4_startupClassSelectionSpec
cg@2636
   765
    "This resource specification was automatically generated
cg@2636
   766
     by the UIPainter of ST/X."
cg@2636
   767
cg@2636
   768
    "Do not manually edit this!! If it is corrupted,
cg@2636
   769
     the UIPainter may not be able to read the specification."
cg@2636
   770
cg@2636
   771
    "
cg@2656
   772
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page4_startupClassSelectionSpec
cg@2656
   773
     Tools::ProjectBuilderAssistantApplication new openInterface:#page4_startupClassSelectionSpec
cg@2636
   774
    "
cg@2636
   775
cg@2636
   776
    <resource: #canvas>
cg@2636
   777
cg@2636
   778
    ^ 
cg@2636
   779
     #(FullSpec
cg@2656
   780
        name: #'page4_startupClassSelectionSpec'
cg@2656
   781
        window: 
cg@2656
   782
       (WindowSpec
cg@2656
   783
          label: 'Startup Class Selection'
cg@2656
   784
          name: 'Startup Class Selection'
cg@2656
   785
          min: (Point 0 0)
cg@2656
   786
          bounds: (Rectangle 0 0 521 408)
cg@2656
   787
        )
cg@2656
   788
        component: 
cg@2656
   789
       (SpecCollection
cg@2656
   790
          collection: (
cg@2656
   791
           (FramedBoxSpec
cg@2725
   792
              label: 'New Startup Class'
cg@2656
   793
              name: 'FramedBox3'
cg@2725
   794
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 70 0)
cg@2656
   795
              labelPosition: topLeft
cg@2656
   796
              translateLabel: true
cg@2656
   797
              component: 
cg@2656
   798
             (SpecCollection
cg@2656
   799
                collection: (
cg@2656
   800
                 (InputFieldSpec
cg@2656
   801
                    name: 'EntryField1'
cg@2659
   802
                    layout: (LayoutFrame 1 0 6 0 -113 1 28 0)
cg@2656
   803
                    model: newStartupClassName
cg@2656
   804
                    acceptOnReturn: true
cg@2656
   805
                    acceptOnTab: true
cg@2693
   806
                    acceptOnLostFocus: true
cg@2656
   807
                    acceptOnPointerLeave: true
cg@2656
   808
                    emptyFieldReplacementText: 'MyStandAloneStartup'
cg@2656
   809
                  )
cg@2656
   810
                 (ActionButtonSpec
cg@2656
   811
                    label: 'Create'
cg@2656
   812
                    name: 'Button1'
cg@2659
   813
                    layout: (LayoutFrame -100 1 6 0 1 1 28 0)
cg@2656
   814
                    translateLabel: true
cg@2656
   815
                    model: createNewStartupClass
cg@2656
   816
                  )
cg@2656
   817
                 )
cg@2656
   818
               
cg@2656
   819
              )
cg@2656
   820
            )
cg@2656
   821
           (FramedBoxSpec
cg@2725
   822
              label: 'Existing Startup Classes'
cg@2656
   823
              name: 'FramedBox4'
cg@2725
   824
              layout: (LayoutFrame 0 0.0 72 0 4 1.0 -30 1)
cg@2656
   825
              labelPosition: topLeft
cg@2656
   826
              translateLabel: true
cg@2656
   827
              component: 
cg@2656
   828
             (SpecCollection
cg@2656
   829
                collection: (
cg@2656
   830
                 (VariableHorizontalPanelSpec
cg@2656
   831
                    name: 'VariableHorizontalPanel2'
cg@2671
   832
                    layout: (LayoutFrame 0 0 4 0 0 1 -26 1)
cg@2656
   833
                    component: 
cg@2656
   834
                   (SpecCollection
cg@2656
   835
                      collection: (
cg@2656
   836
                       (SequenceViewSpec
cg@2656
   837
                          name: 'List2'
cg@2656
   838
                          model: selectedStartupClassIndexHolder
cg@2656
   839
                          hasHorizontalScrollBar: true
cg@2656
   840
                          hasVerticalScrollBar: true
cg@2656
   841
                          useIndex: true
cg@2656
   842
                          sequenceList: listOfStartupClassesInProject
cg@2656
   843
                        )
cg@2656
   844
                       (TextEditorSpec
cg@2656
   845
                          name: 'TextEditor2'
cg@2656
   846
                          model: selectedStartupClassesComment
cg@2656
   847
                          hasHorizontalScrollBar: true
cg@2656
   848
                          hasVerticalScrollBar: true
cg@2656
   849
                          isReadOnly: true
cg@2656
   850
                          hasKeyboardFocusInitially: false
cg@2656
   851
                          viewClassName: 'TextView'
cg@2656
   852
                        )
cg@2656
   853
                       )
cg@2656
   854
                     
cg@2656
   855
                    )
cg@2656
   856
                    handles: (Any 0.34560327198364 1.0)
cg@2656
   857
                  )
cg@2671
   858
                 (CheckBoxSpec
cg@2671
   859
                    label: 'Hide other Startup Classes'
cg@2671
   860
                    name: 'CheckBox1'
cg@2671
   861
                    layout: (LayoutFrame -1 0 -20 1 0 1 2 1)
cg@2671
   862
                    model: hideOtherStartupClasses
cg@2671
   863
                    translateLabel: true
cg@2671
   864
                  )
cg@2656
   865
                 )
cg@2656
   866
               
cg@2656
   867
              )
cg@2656
   868
            )
cg@2656
   869
           (HorizontalPanelViewSpec
cg@2656
   870
              name: 'HorizontalPanel1'
cg@2656
   871
              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
cg@2656
   872
              horizontalLayout: leftSpace
cg@2656
   873
              verticalLayout: center
cg@2656
   874
              horizontalSpace: 3
cg@2656
   875
              verticalSpace: 3
cg@2656
   876
              component: 
cg@2656
   877
             (SpecCollection
cg@2656
   878
                collection: (
cg@2656
   879
                 (ActionButtonSpec
cg@2656
   880
                    label: 'Browse Selected StartupClass'
cg@2656
   881
                    name: 'Button3'
cg@2656
   882
                    translateLabel: true
cg@2656
   883
                    model: doBrowseStartupClass
cg@2659
   884
                    enableChannel: hasStartupClassSelectedHolder
cg@2656
   885
                    extent: (Point 180 22)
cg@2656
   886
                  )
cg@2656
   887
                 )
cg@2656
   888
               
cg@2656
   889
              )
cg@2656
   890
            )
cg@2656
   891
           )
cg@2656
   892
         
cg@2656
   893
        )
cg@2656
   894
      )
cg@2656
   895
!
cg@2656
   896
cg@2656
   897
page5_specifyIncludedClasses
cg@2656
   898
    "This resource specification was automatically generated
cg@2656
   899
     by the UIPainter of ST/X."
cg@2656
   900
cg@2656
   901
    "Do not manually edit this!! If it is corrupted,
cg@2656
   902
     the UIPainter may not be able to read the specification."
cg@2656
   903
cg@2656
   904
    "
cg@2656
   905
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page5_specifyIncludedClasses
cg@2656
   906
     Tools::ProjectBuilderAssistantApplication new openInterface:#page5_specifyIncludedClasses
cg@2656
   907
    "
cg@2656
   908
cg@2656
   909
    <resource: #canvas>
cg@2656
   910
cg@2656
   911
    ^ 
cg@2656
   912
     #(FullSpec
cg@2656
   913
        name: #'page5_specifyIncludedClasses'
cg@2636
   914
        window: 
cg@2636
   915
       (WindowSpec
cg@2636
   916
          label: 'Project Selection'
cg@2636
   917
          name: 'Project Selection'
cg@2636
   918
          min: (Point 0 0)
cg@2636
   919
          bounds: (Rectangle 0 0 521 400)
cg@2636
   920
        )
cg@2636
   921
        component: 
cg@2636
   922
       (SpecCollection
cg@2636
   923
          collection: (
cg@2636
   924
           (FramedBoxSpec
cg@2636
   925
              label: 'Project Contents'
cg@2636
   926
              name: 'FramedBox3'
cg@2648
   927
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 -30 1)
cg@2636
   928
              labelPosition: topLeft
cg@2636
   929
              translateLabel: true
cg@2636
   930
              component: 
cg@2636
   931
             (SpecCollection
cg@2636
   932
                collection: (
cg@2636
   933
                 (SequenceViewSpec
cg@2636
   934
                    name: 'List1'
cg@2636
   935
                    layout: (LayoutFrame 0 0 0 0 0 1 0 1)
cg@2636
   936
                    initiallyDisabled: true
cg@2636
   937
                    hasHorizontalScrollBar: true
cg@2636
   938
                    hasVerticalScrollBar: true
cg@2636
   939
                    useIndex: false
cg@2636
   940
                    sequenceList: listOfClassesInProject
cg@2636
   941
                  )
cg@2636
   942
                 )
cg@2636
   943
               
cg@2636
   944
              )
cg@2636
   945
            )
cg@2648
   946
           (HorizontalPanelViewSpec
cg@2648
   947
              name: 'HorizontalPanel1'
cg@2648
   948
              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
cg@2648
   949
              horizontalLayout: center
cg@2648
   950
              verticalLayout: center
cg@2648
   951
              horizontalSpace: 3
cg@2648
   952
              verticalSpace: 3
cg@2648
   953
              component: 
cg@2648
   954
             (SpecCollection
cg@2648
   955
                collection: (
cg@2648
   956
                 (ActionButtonSpec
cg@2648
   957
                    label: 'Browse Project Definition'
cg@2648
   958
                    name: 'Button3'
cg@2648
   959
                    translateLabel: true
cg@2659
   960
                    model: doBrowseProjectDefinitionClass
cg@2648
   961
                    extent: (Point 180 22)
cg@2648
   962
                  )
cg@2648
   963
                 (ActionButtonSpec
cg@2648
   964
                    label: 'Update Contents (Scan)'
cg@2648
   965
                    name: 'Button4'
cg@2648
   966
                    translateLabel: true
cg@2648
   967
                    model: doGenerateProjectContentsDefinition
cg@2648
   968
                    extent: (Point 180 22)
cg@2648
   969
                  )
cg@2648
   970
                 )
cg@2648
   971
               
cg@2648
   972
              )
cg@2636
   973
            )
cg@2636
   974
           )
cg@2636
   975
         
cg@2636
   976
        )
cg@2636
   977
      )
cg@2636
   978
!
cg@2636
   979
cg@2872
   980
page5b_specifyPrerequisitePackages
cg@2872
   981
    "This resource specification was automatically generated
cg@2872
   982
     by the UIPainter of ST/X."
cg@2872
   983
cg@2872
   984
    "Do not manually edit this!! If it is corrupted,
cg@2872
   985
     the UIPainter may not be able to read the specification."
cg@2872
   986
cg@2872
   987
    "
cg@2872
   988
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page5b_specifyPrerequisitePackages
cg@2872
   989
     Tools::ProjectBuilderAssistantApplication new openInterface:#page5b_specifyPrerequisitePackages
cg@2872
   990
    "
cg@2872
   991
cg@2872
   992
    <resource: #canvas>
cg@2872
   993
cg@2872
   994
    ^ 
cg@2872
   995
     #(FullSpec
cg@2872
   996
        name: #'page5b_specifyPrerequisitePackages'
cg@2872
   997
        window: 
cg@2872
   998
       (WindowSpec
cg@2872
   999
          label: 'Project Selection'
cg@2872
  1000
          name: 'Project Selection'
cg@2872
  1001
          min: (Point 0 0)
cg@2872
  1002
          bounds: (Rectangle 0 0 521 400)
cg@2872
  1003
        )
cg@2872
  1004
        component: 
cg@2872
  1005
       (SpecCollection
cg@2872
  1006
          collection: (
cg@2872
  1007
           (FramedBoxSpec
cg@2872
  1008
              label: 'Prerequisite Packages'
cg@2872
  1009
              name: 'FramedBox3'
cg@2872
  1010
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 -30 1)
cg@2872
  1011
              labelPosition: topLeft
cg@2872
  1012
              translateLabel: true
cg@2872
  1013
              component: 
cg@2872
  1014
             (SpecCollection
cg@2872
  1015
                collection: (
cg@2872
  1016
                 (SequenceViewSpec
cg@2872
  1017
                    name: 'List1'
cg@2872
  1018
                    layout: (LayoutFrame 0 0 0 0 0 1 0 1)
cg@2872
  1019
                    initiallyDisabled: true
cg@2872
  1020
                    hasHorizontalScrollBar: true
cg@2872
  1021
                    hasVerticalScrollBar: true
cg@2872
  1022
                    useIndex: false
cg@2872
  1023
                    sequenceList: listOfPrerequisitesInProject
cg@2872
  1024
                  )               
cg@2872
  1025
                 )
cg@2872
  1026
               
cg@2872
  1027
              )
cg@2872
  1028
            )
cg@2872
  1029
           (HorizontalPanelViewSpec
cg@2872
  1030
              name: 'HorizontalPanel1'
cg@2872
  1031
              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
cg@2872
  1032
              horizontalLayout: center
cg@2872
  1033
              verticalLayout: center
cg@2872
  1034
              horizontalSpace: 3
cg@2872
  1035
              verticalSpace: 3
cg@2872
  1036
              component: 
cg@2872
  1037
             (SpecCollection
cg@2872
  1038
                collection: (
cg@2872
  1039
                 (ActionButtonSpec
cg@2872
  1040
                    label: 'Browse Project Definition'
cg@2872
  1041
                    name: 'Button3'
cg@2872
  1042
                    translateLabel: true
cg@2872
  1043
                    model: doBrowseProjectDefinitionClass
cg@2872
  1044
                    extent: (Point 180 22)
cg@2872
  1045
                  )
cg@2872
  1046
                 (ActionButtonSpec
cg@2872
  1047
                    label: 'Update Prerequisites (Scan)'
cg@2872
  1048
                    name: 'Button4'
cg@2872
  1049
                    translateLabel: true
cg@2872
  1050
                    model: doGenerateProjectPrerequisitesDefinition
cg@2872
  1051
                    extent: (Point 180 22)
cg@2872
  1052
                  )
cg@2872
  1053
                 )
cg@2872
  1054
               
cg@2872
  1055
              )
cg@2872
  1056
            )
cg@2872
  1057
           )
cg@2872
  1058
         
cg@2872
  1059
        )
cg@2872
  1060
      )
cg@2872
  1061
cg@2872
  1062
    "Modified: / 19-01-2012 / 15:45:14 / cg"
cg@2872
  1063
!
cg@2872
  1064
cg@2724
  1065
page6a_specifyProjectAttributes
cg@2636
  1066
    "This resource specification was automatically generated
cg@2636
  1067
     by the UIPainter of ST/X."
cg@2636
  1068
cg@2636
  1069
    "Do not manually edit this!! If it is corrupted,
cg@2636
  1070
     the UIPainter may not be able to read the specification."
cg@2636
  1071
cg@2636
  1072
    "
cg@2724
  1073
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page6a_specifyProjectAttributes
cg@2724
  1074
     Tools::ProjectBuilderAssistantApplication new openInterface:#page6a_specifyProjectAttributes
cg@2636
  1075
    "
cg@2636
  1076
cg@2636
  1077
    <resource: #canvas>
cg@2636
  1078
cg@2636
  1079
    ^ 
cg@2636
  1080
     #(FullSpec
cg@2724
  1081
        name: #'page6a_specifyProjectAttributes'
cg@2636
  1082
        window: 
cg@2636
  1083
       (WindowSpec
cg@2636
  1084
          label: 'Project Selection'
cg@2636
  1085
          name: 'Project Selection'
cg@2636
  1086
          min: (Point 0 0)
cg@2681
  1087
          bounds: (Rectangle 0 0 521 239)
cg@2636
  1088
        )
cg@2636
  1089
        component: 
cg@2636
  1090
       (SpecCollection
cg@2636
  1091
          collection: (
cg@2636
  1092
           (FramedBoxSpec
cg@2724
  1093
              label: 'Product Information'
cg@2724
  1094
              name: 'FramedBox3'
cg@2724
  1095
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 101 0)
cg@2724
  1096
              labelPosition: topLeft
cg@2724
  1097
              translateLabel: true
cg@2724
  1098
              component: 
cg@2724
  1099
             (SpecCollection
cg@2724
  1100
                collection: (
cg@2724
  1101
                 (LabelSpec
cg@2724
  1102
                    label: 'Product Name:'
cg@2724
  1103
                    name: 'Label1'
cg@2724
  1104
                    layout: (LayoutFrame 0 0 10 0 148 0 32 0)
cg@2724
  1105
                    translateLabel: true
cg@2724
  1106
                    adjust: right
cg@2724
  1107
                  )
cg@2724
  1108
                 (InputFieldSpec
cg@2724
  1109
                    name: 'EntryField4'
cg@2724
  1110
                    layout: (LayoutFrame 150 0.0 10 0 0 1.0 32 0)
cg@2724
  1111
                    model: productNameHolder
cg@2724
  1112
                    acceptOnLostFocus: true
cg@2724
  1113
                    acceptOnPointerLeave: true
cg@2724
  1114
                    viewClassName: ''
cg@2724
  1115
                  )
cg@2724
  1116
                 (LabelSpec
cg@2724
  1117
                    label: 'Company Name:'
cg@2724
  1118
                    name: 'Label2'
cg@2724
  1119
                    layout: (LayoutFrame 0 0 39 0 148 0 61 0)
cg@2724
  1120
                    translateLabel: true
cg@2724
  1121
                    adjust: right
cg@2724
  1122
                  )
cg@2724
  1123
                 (InputFieldSpec
cg@2724
  1124
                    name: 'EntryField3'
cg@2724
  1125
                    layout: (LayoutFrame 150 0.0 39 0 0 1.0 61 0)
cg@2724
  1126
                    model: companyNameHolder
cg@2724
  1127
                    acceptOnLostFocus: true
cg@2724
  1128
                    acceptOnPointerLeave: true
cg@2724
  1129
                    viewClassName: ''
cg@2724
  1130
                  )
cg@2724
  1131
                 )
cg@2724
  1132
               
cg@2724
  1133
              )
cg@2724
  1134
            )
cg@2724
  1135
           )
cg@2724
  1136
         
cg@2724
  1137
        )
cg@2724
  1138
      )
cg@2724
  1139
!
cg@2724
  1140
cg@2724
  1141
page6b_specifyBuildDirectorySpec
cg@2724
  1142
    "This resource specification was automatically generated
cg@2724
  1143
     by the UIPainter of ST/X."
cg@2724
  1144
cg@2724
  1145
    "Do not manually edit this!! If it is corrupted,
cg@2724
  1146
     the UIPainter may not be able to read the specification."
cg@2724
  1147
cg@2724
  1148
    "
cg@2724
  1149
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page6b_specifyBuildDirectorySpec
cg@2724
  1150
     Tools::ProjectBuilderAssistantApplication new openInterface:#page6b_specifyBuildDirectorySpec
cg@2724
  1151
    "
cg@2724
  1152
cg@2724
  1153
    <resource: #canvas>
cg@2724
  1154
cg@2724
  1155
    ^ 
cg@2724
  1156
     #(FullSpec
cg@2724
  1157
        name: #'page6b_specifyBuildDirectorySpec'
cg@2724
  1158
        window: 
cg@2724
  1159
       (WindowSpec
cg@2724
  1160
          label: 'Project Selection'
cg@2724
  1161
          name: 'Project Selection'
cg@2724
  1162
          min: (Point 0 0)
cg@2724
  1163
          bounds: (Rectangle 0 0 521 361)
cg@2724
  1164
        )
cg@2724
  1165
        component: 
cg@2724
  1166
       (SpecCollection
cg@2724
  1167
          collection: (
cg@2724
  1168
           (FramedBoxSpec
cg@2636
  1169
              label: 'Build Directory'
cg@2636
  1170
              name: 'FramedBox3'
cg@2636
  1171
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 79 0)
cg@2636
  1172
              labelPosition: topLeft
cg@2636
  1173
              translateLabel: true
cg@2636
  1174
              component: 
cg@2636
  1175
             (SpecCollection
cg@2636
  1176
                collection: (
cg@2636
  1177
                 (FilenameInputFieldSpec
cg@2636
  1178
                    name: 'FilenameEntryField1'
cg@2636
  1179
                    layout: (LayoutFrame 0 0.0 10 0 0 1.0 32 0)
cg@2636
  1180
                    model: buildDirectoryHolder
cg@2636
  1181
                    acceptOnPointerLeave: true
cg@2636
  1182
                    viewClassName: FilenameWidgetWithHistory
cg@2636
  1183
                  )
cg@2636
  1184
                 )
cg@2636
  1185
               
cg@2636
  1186
              )
cg@2636
  1187
            )
cg@2681
  1188
           (FramedBoxSpec
cg@2681
  1189
              label: 'Compiler / Toolchain'
cg@2681
  1190
              name: 'FramedBox4'
cg@2681
  1191
              layout: (LayoutFrame 0 0.0 81 0 4 1.0 155 0)
cg@2681
  1192
              labelPosition: topLeft
cg@2681
  1193
              translateLabel: true
cg@2681
  1194
              component: 
cg@2681
  1195
             (SpecCollection
cg@2681
  1196
                collection: (
cg@2681
  1197
                 (ComboListSpec
cg@2681
  1198
                    name: 'ComboList1'
cg@2681
  1199
                    layout: (LayoutFrame 0 0 10 0 137 0 32 0)
cg@2681
  1200
                    model: usedCompilerHolder
cg@2681
  1201
                    comboList: listOfPossibleCompilers
cg@2681
  1202
                    useIndex: false
cg@2681
  1203
                  )
cg@2681
  1204
                 )
cg@2681
  1205
               
cg@2681
  1206
              )
cg@2681
  1207
            )
cg@2724
  1208
           (LabelSpec
cg@2724
  1209
              label: 'Compiler Warn-Label'
cg@2724
  1210
              name: 'Label1'
cg@2724
  1211
              layout: (LayoutFrame 2 0.0 158 0 -2 1.0 303 0)
cg@2724
  1212
              level: -1
cg@2724
  1213
              visibilityChannel: compilerWarnMessageVisibleHolder
cg@2724
  1214
              backgroundColor: (Color 100.0 49.999237048905 49.999237048905)
cg@2724
  1215
              translateLabel: true
cg@2724
  1216
              labelChannel: compilerWarnMessageHolder
cg@2724
  1217
              adjust: left
cg@2724
  1218
            )
cg@2636
  1219
           )
cg@2636
  1220
         
cg@2636
  1221
        )
cg@2636
  1222
      )
cg@2636
  1223
!
cg@2636
  1224
cg@2656
  1225
page7_buildSpec
cg@2636
  1226
    "This resource specification was automatically generated
cg@2636
  1227
     by the UIPainter of ST/X."
cg@2636
  1228
cg@2636
  1229
    "Do not manually edit this!! If it is corrupted,
cg@2636
  1230
     the UIPainter may not be able to read the specification."
cg@2636
  1231
cg@2636
  1232
    "
cg@2656
  1233
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page7_buildSpec
cg@2656
  1234
     Tools::ProjectBuilderAssistantApplication new openInterface:#page7_buildSpec
cg@2636
  1235
    "
cg@2636
  1236
cg@2636
  1237
    <resource: #canvas>
cg@2636
  1238
cg@2636
  1239
    ^ 
cg@2636
  1240
     #(FullSpec
cg@2656
  1241
        name: #'page7_buildSpec'
cg@2636
  1242
        window: 
cg@2636
  1243
       (WindowSpec
cg@2636
  1244
          label: 'Project Selection'
cg@2636
  1245
          name: 'Project Selection'
cg@2636
  1246
          min: (Point 0 0)
cg@2636
  1247
          bounds: (Rectangle 0 0 521 472)
cg@2636
  1248
        )
cg@2636
  1249
        component: 
cg@2636
  1250
       (SpecCollection
cg@2636
  1251
          collection: (
cg@2636
  1252
           (FramedBoxSpec
cg@2636
  1253
              label: 'Make Output'
cg@2636
  1254
              name: 'FramedBox3'
cg@2648
  1255
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 -30 1)
cg@2636
  1256
              labelPosition: topLeft
cg@2636
  1257
              translateLabel: true
cg@2636
  1258
              component: 
cg@2636
  1259
             (SpecCollection
cg@2636
  1260
                collection: (
cg@2636
  1261
                 (TextEditorSpec
cg@2646
  1262
                    name: 'MakeOutputWindow'
cg@2636
  1263
                    layout: (LayoutFrame 0 0 0 0 0 1 0 1)
cg@2636
  1264
                    model: makeOutputHolder
cg@2636
  1265
                    hasHorizontalScrollBar: true
cg@2636
  1266
                    hasVerticalScrollBar: true
cg@2636
  1267
                    hasKeyboardFocusInitially: false
cg@2636
  1268
                    viewClassName: 'TextCollector'
cg@2646
  1269
                    postBuildCallback: postBuildMakeOutputWindow:
cg@2636
  1270
                  )
cg@2636
  1271
                 )
cg@2636
  1272
               
cg@2636
  1273
              )
cg@2636
  1274
            )
cg@2648
  1275
           (HorizontalPanelViewSpec
cg@2648
  1276
              name: 'HorizontalPanel1'
cg@2648
  1277
              layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
cg@2648
  1278
              horizontalLayout: leftSpace
cg@2648
  1279
              verticalLayout: center
cg@2648
  1280
              horizontalSpace: 3
cg@2648
  1281
              verticalSpace: 3
cg@2648
  1282
              component: 
cg@2648
  1283
             (SpecCollection
cg@2648
  1284
                collection: (
cg@2648
  1285
                 (ActionButtonSpec
cg@2674
  1286
                    label: 'Make All'
cg@2648
  1287
                    name: 'Button3'
cg@2648
  1288
                    translateLabel: true
cg@2674
  1289
                    model: doStartMakeAll
cg@2648
  1290
                    enableChannel: startMakeButtonEnabled
cg@2648
  1291
                    extent: (Point 107 22)
cg@2648
  1292
                  )
cg@2648
  1293
                 (ActionButtonSpec
cg@2674
  1294
                    label: 'Make EXE only'
cg@2674
  1295
                    name: 'Button5'
cg@2674
  1296
                    translateLabel: true
cg@2674
  1297
                    model: doStartMakeExe
cg@2674
  1298
                    enableChannel: startMakeButtonEnabled
cg@2674
  1299
                    extent: (Point 107 22)
cg@2674
  1300
                  )
cg@2674
  1301
                 (ViewSpec
cg@2674
  1302
                    name: 'Box1'
cg@2674
  1303
                    extent: (Point 20 10)
cg@2674
  1304
                  )
cg@2674
  1305
                 (ActionButtonSpec
cg@2648
  1306
                    label: 'Stop Make'
cg@2648
  1307
                    name: 'Button4'
cg@2648
  1308
                    visibilityChannel: stopMakeButtonVisible
cg@2648
  1309
                    translateLabel: true
cg@2648
  1310
                    model: doStopMake
cg@2648
  1311
                    extent: (Point 107 22)
cg@2648
  1312
                  )
cg@2648
  1313
                 )
cg@2648
  1314
               
cg@2648
  1315
              )
cg@2636
  1316
            )
cg@2636
  1317
           )
cg@2636
  1318
         
cg@2636
  1319
        )
cg@2636
  1320
      )
cg@2636
  1321
!
cg@2636
  1322
cg@2676
  1323
page8_deploySpec
cg@2676
  1324
    "This resource specification was automatically generated
cg@2676
  1325
     by the UIPainter of ST/X."
cg@2676
  1326
cg@2676
  1327
    "Do not manually edit this!! If it is corrupted,
cg@2676
  1328
     the UIPainter may not be able to read the specification."
cg@2676
  1329
cg@2676
  1330
    "
cg@2676
  1331
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#page8_deploySpec
cg@2676
  1332
     Tools::ProjectBuilderAssistantApplication new openInterface:#page8_deploySpec
cg@2676
  1333
    "
cg@2676
  1334
cg@2676
  1335
    <resource: #canvas>
cg@2676
  1336
cg@2676
  1337
    ^ 
cg@2676
  1338
     #(FullSpec
cg@2676
  1339
        name: #'page8_deploySpec'
cg@2676
  1340
        window: 
cg@2676
  1341
       (WindowSpec
cg@2676
  1342
          label: 'Project Selection'
cg@2676
  1343
          name: 'Project Selection'
cg@2676
  1344
          min: (Point 0 0)
cg@2676
  1345
          bounds: (Rectangle 0 0 521 472)
cg@2676
  1346
        )
cg@2676
  1347
        component: 
cg@2676
  1348
       (SpecCollection
cg@2676
  1349
          collection: (
cg@2676
  1350
           (FramedBoxSpec
cg@2676
  1351
              label: 'Files for Deployment'
cg@2676
  1352
              name: 'FramedBox3'
cg@2676
  1353
              layout: (LayoutFrame 0 0.0 5 0 4 1.0 0 1)
cg@2676
  1354
              labelPosition: topLeft
cg@2676
  1355
              translateLabel: true
cg@2676
  1356
              component: 
cg@2676
  1357
             (SpecCollection
cg@2676
  1358
                collection: (
cg@2676
  1359
                 (SubCanvasSpec
cg@2676
  1360
                    name: 'SubCanvas1'
cg@2676
  1361
                    layout: (LayoutFrame 0 0 0 0 0 1 -30 1)
cg@2676
  1362
                    hasHorizontalScrollBar: false
cg@2676
  1363
                    hasVerticalScrollBar: false
cg@2676
  1364
                    clientHolder: fileBrowserInstance
cg@2676
  1365
                    createNewApplication: true
cg@2676
  1366
                    createNewBuilder: true
cg@2675
  1367
                  )
cg@2676
  1368
                 (HorizontalPanelViewSpec
cg@2676
  1369
                    name: 'HorizontalPanel1'
cg@2676
  1370
                    layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
cg@2679
  1371
                    horizontalLayout: centerMax
cg@2676
  1372
                    verticalLayout: center
cg@2676
  1373
                    horizontalSpace: 3
cg@2676
  1374
                    verticalSpace: 3
cg@2676
  1375
                    component: 
cg@2676
  1376
                   (SpecCollection
cg@2676
  1377
                      collection: (
cg@2676
  1378
                       (ActionButtonSpec
cg@2676
  1379
                          label: 'Open Windows Explorer'
cg@2676
  1380
                          name: 'Button1'
cg@2720
  1381
                          visibilityChannel: isWindowsOS
cg@2676
  1382
                          translateLabel: true
cg@2649
  1383
                          resizeForLabel: true
cg@2649
  1384
                          model: doOpenExplorer
cg@2649
  1385
                          extent: (Point 172 22)
cg@2649
  1386
                        )
cg@2679
  1387
                       (ActionButtonSpec
cg@2679
  1388
                          label: 'Open Console'
cg@2679
  1389
                          name: 'Button2'
cg@2724
  1390
                          visibilityChannel: isUnixOS
cg@2679
  1391
                          translateLabel: true
cg@2679
  1392
                          resizeForLabel: true
cg@2679
  1393
                          model: doOpenConsoleTerminal
cg@2679
  1394
                          extent: (Point 172 22)
cg@2679
  1395
                        )
cg@2649
  1396
                       )
cg@2649
  1397
                     
cg@2649
  1398
                    )
cg@2649
  1399
                  )
cg@2636
  1400
                 )
cg@2636
  1401
               
cg@2636
  1402
              )
cg@2636
  1403
            )
cg@2636
  1404
           )
cg@2636
  1405
         
cg@2636
  1406
        )
cg@2636
  1407
      )
cg@2676
  1408
! !
cg@2676
  1409
fm@2697
  1410
!ProjectBuilderAssistantApplication class methodsFor:'misc specs'!
fm@2697
  1411
fm@2697
  1412
newProjectsNameListSpec
fm@2697
  1413
    "This resource specification was automatically generated
fm@2697
  1414
     by the UIPainter of ST/X."
fm@2697
  1415
fm@2697
  1416
    "Do not manually edit this!! If it is corrupted,
fm@2697
  1417
     the UIPainter may not be able to read the specification."
fm@2697
  1418
fm@2697
  1419
    "
fm@2697
  1420
     UIPainter new openOnClass:Tools::ProjectBuilderAssistantApplication andSelector:#newProjectsNameListSpec
fm@2697
  1421
     Tools::ProjectBuilderAssistantApplication new openInterface:#newProjectsNameListSpec
fm@2697
  1422
    "
fm@2697
  1423
fm@2697
  1424
    <resource: #canvas>
fm@2697
  1425
fm@2697
  1426
    ^ 
fm@2697
  1427
     #(FullSpec
fm@2697
  1428
        name: newProjectsNameListSpec
fm@2697
  1429
        window: 
fm@2697
  1430
       (WindowSpec
fm@2697
  1431
          label: 'NewApplication'
fm@2697
  1432
          name: 'NewApplication'
fm@2697
  1433
          min: (Point 0 0)
fm@2697
  1434
          bounds: (Rectangle 0 0 131 207)
fm@2697
  1435
        )
fm@2697
  1436
        component: 
fm@2697
  1437
       (SpecCollection
fm@2697
  1438
          collection: (
fm@2697
  1439
           (SequenceViewSpec
fm@2697
  1440
              name: 'ReferencePoint2'
fm@2697
  1441
              layout: (LayoutFrame 0 0 0 0 0 1 0 1)
fm@2705
  1442
              activeHelpKey: listOfNewProjectsName
fm@2697
  1443
              model: newProjectsName
fm@2697
  1444
              hasHorizontalScrollBar: true
fm@2697
  1445
              hasVerticalScrollBar: true
fm@2697
  1446
              miniScrollerHorizontal: true
fm@2697
  1447
              miniScrollerVertical: false
fm@2697
  1448
              useIndex: false
fm@2697
  1449
              sequenceList: listOfNewProjectsName
fm@2705
  1450
              doubleClickChannel: newProjectsNameListDoubleClickChannel
fm@2697
  1451
            )
fm@2697
  1452
           )
fm@2697
  1453
         
fm@2697
  1454
        )
fm@2697
  1455
      )
fm@2697
  1456
! !
fm@2697
  1457
cg@2897
  1458
!ProjectBuilderAssistantApplication class methodsFor:'startup'!
cg@2897
  1459
cg@2897
  1460
openOn:aProjectDefinitionClass
cg@2897
  1461
    ^ self new openOn:aProjectDefinitionClass
cg@2897
  1462
cg@2897
  1463
    "Created: / 20-07-2012 / 12:33:25 / cg"
cg@2897
  1464
!
cg@2897
  1465
cg@2897
  1466
openOnPackage:aPackageId
cg@2897
  1467
    ^ self new openOnPackage:aPackageId
cg@2897
  1468
cg@2897
  1469
    "Created: / 20-07-2012 / 13:22:50 / cg"
cg@2897
  1470
! !
cg@2897
  1471
cg@2676
  1472
!ProjectBuilderAssistantApplication methodsFor:'actions'!
cg@2676
  1473
cg@2676
  1474
buildDirectoryChanged
cg@2676
  1475
    self updateButtonEnableState.
cg@2636
  1476
!
cg@2636
  1477
cg@2676
  1478
createNewApplication
cg@2676
  1479
    <resource: #uiCallback>
cg@2636
  1480
cg@2676
  1481
    |newAppName newAppClass|
cg@2676
  1482
cg@2676
  1483
    newAppName := self newApplicationsName value.
cg@2676
  1484
    newAppName isEmptyOrNil ifTrue:[
cg@2676
  1485
        Dialog warn:'Please enter the name of the Application-Class first.'.
cg@2676
  1486
        ^ self
cg@2676
  1487
    ].
cg@2676
  1488
cg@2676
  1489
    self withWaitCursorDo:[
cg@2676
  1490
        Class packageQuerySignal answer:(selectedProjectDefinition package)
cg@2676
  1491
        do:[
cg@2659
  1492
            newAppClass := ApplicationModel
cg@2659
  1493
                            subclass:newAppName asSymbol
cg@2659
  1494
                            instanceVariableNames:''
cg@2659
  1495
                            classVariableNames:''
cg@2659
  1496
                            poolDictionaries:''
cg@2659
  1497
                            category:'Applications'.
cg@2832
  1498
            SmalltalkCodeGeneratorTool createApplicationCodeFor:newAppClass.
cg@2659
  1499
        ].
cg@2724
  1500
        self updateListOfApplicationsInProject.
cg@2724
  1501
        self selectedApplicationIndexHolder value:(listOfApplicationsInProject value indexOf:newAppClass).
cg@2636
  1502
    ].
cg@2832
  1503
cg@2832
  1504
    "Modified: / 31-01-2011 / 18:29:50 / cg"
cg@2636
  1505
!
cg@2636
  1506
cg@2676
  1507
createNewProject
cg@2676
  1508
    <resource: #uiCallback>
cg@2676
  1509
cg@2676
  1510
    |newProjectID projectDefinitionType projectDefinitionClass projectClasses|
cg@2676
  1511
cg@2676
  1512
    newProjectID := self newProjectsName value.
cg@2676
  1513
    newProjectID isEmptyOrNil ifTrue:[
cg@2686
  1514
        Dialog warn:(resources string:'Please enter a packageID first.').
cg@2676
  1515
        ^ self
cg@2676
  1516
    ].
cg@2676
  1517
    newProjectID asPackageId isModuleId ifTrue:[
cg@2686
  1518
        Dialog warn:(resources stringWithCRs:
cg@2686
  1519
'Please enter a corrent packageID.
cg@2686
  1520
cg@2686
  1521
All packages must be named like "%1:%2"
cg@2686
  1522
(%2 can be a path like "dir/dir/...").' with:(resources string:'module')allItalic
cg@2686
  1523
                                        with:(resources string:'directory')allItalic).
cg@2676
  1524
        ^ self
cg@2676
  1525
    ].
cg@2676
  1526
cg@2709
  1527
    self withWaitCursorDo:[
cg@2709
  1528
        projectDefinitionType := ProjectDefinition perform:(self projectTypeHolder value).
cg@2676
  1529
cg@2709
  1530
        projectDefinitionClass := ProjectDefinition
cg@2709
  1531
                                    definitionClassForPackage:newProjectID
cg@2709
  1532
                                    projectType: projectDefinitionType
cg@2709
  1533
                                    createIfAbsent:true.
cg@2676
  1534
cg@2709
  1535
        projectDefinitionClass compileDescriptionMethods.
cg@2709
  1536
        self updateListOfMatchingProjects.
cg@2709
  1537
        self updateListOfNewProjectsName.
cg@2676
  1538
cg@2709
  1539
        self selectedProjectIndexHolder value:( self listOfMatchingProjects value indexOf:projectDefinitionClass).
cg@2676
  1540
cg@2851
  1541
        projectClasses := projectDefinitionClass allClasses.
cg@2676
  1542
cg@2676
  1543
"/    projectDefinitionClass isGUIApplication ifTrue:[
cg@2676
  1544
"/        "/ see if it has an AppModel class
cg@2659
  1545
"/        (projectClasses contains:[:cls | cls isVisualStartable]) ifFalse:[
cg@2659
  1546
"/            (Dialog confirm:'Create an Application Class ?') ifTrue:[
cg@2659
  1547
"/                self halt.
cg@2659
  1548
"/            ].
cg@2659
  1549
"/        ].
cg@2659
  1550
"/    ].
cg@2636
  1551
cg@2636
  1552
"/    projectDefinitionClass isLibrary ifFalse:[
cg@2636
  1553
"/        "/ see if it has a Startup class
cg@2636
  1554
"/        (projectClasses contains:[:cls | cls isStartable]) ifFalse:[
cg@2636
  1555
"/        ].
cg@2636
  1556
"/    ].
cg@2709
  1557
cg@2709
  1558
    ].
cg@2851
  1559
cg@2851
  1560
    "Modified: / 06-08-2011 / 15:48:01 / cg"
cg@2636
  1561
!
cg@2636
  1562
cg@2676
  1563
createNewStartupClass
cg@2676
  1564
    <resource: #uiCallback>
cg@2676
  1565
fm@2696
  1566
    |newClassName newStartupClass startupApplication|
cg@2676
  1567
cg@2676
  1568
    newClassName := self newStartupClassName value.
cg@2676
  1569
    newClassName isEmptyOrNil ifTrue:[
cg@2676
  1570
        Dialog warn:'Please enter the name of the Startup-Class first.'.
cg@2676
  1571
        ^ self
cg@2676
  1572
    ].
cg@2676
  1573
cg@2719
  1574
    self withWaitCursorDo:[ 
cg@2719
  1575
        |pkg|
cg@2719
  1576
cg@2719
  1577
        pkg := selectedProjectDefinition notNil 
cg@2719
  1578
                    ifTrue:[selectedProjectDefinition package]
cg@2719
  1579
                    ifFalse:[newProjectsName value].
cg@2719
  1580
        Class packageQuerySignal answer:pkg
cg@2676
  1581
        do:[
cg@2676
  1582
            newStartupClass := StandaloneStartup
cg@2659
  1583
                            subclass:newClassName asSymbol
cg@2659
  1584
                            instanceVariableNames:''
cg@2659
  1585
                            classVariableNames:''
cg@2659
  1586
                            poolDictionaries:''
fm@2696
  1587
                            category:'Applications'.   
fm@2696
  1588
fm@2696
  1589
            self projectTypeIsGuiApplication ifTrue: [startupApplication := selectedApplication].
cg@2832
  1590
            SmalltalkCodeGeneratorTool createStartupCodeFor:newStartupClass forStartOf:startupApplication.
cg@2659
  1591
        ].
cg@2724
  1592
        self updateListOfStartupClassesInProject.
cg@2724
  1593
        self selectedStartupClassIndexHolder value:(listOfStartupClassesInProject value indexOf:newStartupClass).
cg@2659
  1594
    ].
cg@2832
  1595
cg@2832
  1596
    "Modified: / 31-01-2011 / 18:29:47 / cg"
cg@2659
  1597
!
cg@2659
  1598
cg@2676
  1599
doAddClassToProject
cg@2676
  1600
    <resource: #uiCallback>
cg@2636
  1601
cg@2636
  1602
    Transcript showCR:self class name, ': action for doAddClassToProject ...'.
cg@2636
  1603
    self halt.
cg@2636
  1604
!
cg@2636
  1605
cg@2676
  1606
doBrowseApplication
cg@2676
  1607
    <resource: #uiCallback>
cg@2636
  1608
cg@2636
  1609
    |appClass|
cg@2636
  1610
cg@2659
  1611
    self hasApplicationSelected ifTrue:[
cg@2659
  1612
        appClass := self listOfApplicationsInProject value at:(self selectedApplicationIndexHolder value).
cg@2659
  1613
        UserPreferences systemBrowserClass 
cg@2668
  1614
            openInClass:appClass class selector:#windowSpec.
cg@2659
  1615
    ].
cg@2636
  1616
!
cg@2636
  1617
cg@2676
  1618
doBrowseProject
cg@2676
  1619
    <resource: #uiCallback>
cg@2676
  1620
cg@2676
  1621
    UserPreferences systemBrowserClass openOnPackage:selectedProjectDefinition package.
cg@2636
  1622
!
cg@2636
  1623
cg@2676
  1624
doBrowseProjectDefinitionClass
cg@2676
  1625
    <resource: #uiCallback>
cg@2676
  1626
cg@2676
  1627
    |defClass|
cg@2676
  1628
cg@2676
  1629
    self hasProjectSelected ifTrue:[
cg@2676
  1630
        defClass := self selectedProjectDefinition.
cg@2676
  1631
        UserPreferences systemBrowserClass 
cg@2659
  1632
            openInClass:defClass class selector:#classNamesAndAttributes.
cg@2659
  1633
    ].
cg@2659
  1634
!
cg@2659
  1635
cg@2676
  1636
doBrowseStartupClass
cg@2676
  1637
    <resource: #uiCallback>
cg@2676
  1638
cg@2676
  1639
    |startupClass|
cg@2676
  1640
cg@2676
  1641
    self hasStartupClassSelected ifTrue:[
cg@2676
  1642
        startupClass := self listOfStartupClassesInProject value at:(self selectedStartupClassIndexHolder value).
cg@2676
  1643
        UserPreferences systemBrowserClass 
cg@2676
  1644
            openInClass:startupClass class selector:#main:.
cg@2659
  1645
    ].
cg@2659
  1646
!
cg@2659
  1647
cg@2676
  1648
doGenerateProjectContentsDefinition
cg@2676
  1649
    self generatePackageContentsMethods
cg@2676
  1650
!
cg@2676
  1651
cg@2872
  1652
doGenerateProjectPrerequisitesDefinition
cg@2872
  1653
    self generatePackageContentsMethods
cg@2872
  1654
cg@2872
  1655
    "Created: / 19-01-2012 / 15:44:23 / cg"
cg@2872
  1656
!
cg@2872
  1657
cg@2676
  1658
doLaunchApplication
cg@2676
  1659
    <resource: #uiCallback>
cg@2676
  1660
cg@2676
  1661
    |appClass|
cg@2676
  1662
cg@2676
  1663
    self hasApplicationSelected ifTrue:[
cg@2676
  1664
        appClass := self listOfApplicationsInProject value at:(self selectedApplicationIndexHolder value).
cg@2676
  1665
        appClass open.
cg@2659
  1666
    ].
cg@2659
  1667
!
cg@2659
  1668
cg@2679
  1669
doOpenConsoleTerminal
cg@2679
  1670
"/    OperatingSystem
cg@2679
  1671
"/        executeCommand:'cmd.exe'        
cg@2679
  1672
"/        inDirectory:(projectBuilder packageBuildDirectory)
cg@2724
  1673
    OperatingSystem isUNIXlike ifTrue:[
cg@2724
  1674
        VT100TerminalView openShellIn:(projectBuilder packageBuildDirectory)
cg@2724
  1675
    ] ifFalse:[
cg@2724
  1676
        OperatingSystem
cg@2724
  1677
            executeCommand:'c:\windows\System32\cmd.exe'        
cg@2724
  1678
            inDirectory:(projectBuilder packageBuildDirectory)
cg@2724
  1679
    ]
cg@2679
  1680
!
cg@2679
  1681
cg@2676
  1682
doOpenExplorer
cg@2676
  1683
    OperatingSystem
cg@2756
  1684
        openApplicationForDocument:(projectBuilder packageBuildDirectory) 
cg@2756
  1685
        operation:#explore.
cg@2676
  1686
!
cg@2676
  1687
cg@2674
  1688
doStartMakeAll
cg@2636
  1689
    <resource: #uiCallback>
cg@2636
  1690
cg@2636
  1691
    self stopMakeButtonVisible value:true.
cg@2636
  1692
    self startMakeButtonEnabled value:false.
cg@2636
  1693
cg@2724
  1694
    self infoHolder value:'Building (make) - please wait...'.
cg@2646
  1695
    makeOutputWindow clear.
cg@2646
  1696
cg@2636
  1697
    makeProcess := 
cg@2636
  1698
            [
cg@2636
  1699
                [
cg@2674
  1700
                    self runBuildProcess:'all'
cg@2674
  1701
                ] ensure:[
cg@2674
  1702
                    self stopMakeButtonVisible value:false.
cg@2674
  1703
                    self startMakeButtonEnabled value:true.
cg@2674
  1704
                    makeProcess := nil.
cg@2674
  1705
                    self updateButtonEnableState.
cg@2724
  1706
                    self infoHolder value:''.
cg@2674
  1707
                ].
cg@2674
  1708
            ] newProcess.
cg@2674
  1709
cg@2674
  1710
    makeProcess priority:4.
cg@2674
  1711
    makeProcess priorityRange:(4 to:8).
cg@2674
  1712
    makeProcess resume.
cg@2674
  1713
!
cg@2674
  1714
cg@2675
  1715
doStartMakeExe
cg@2674
  1716
    <resource: #uiCallback>
cg@2674
  1717
cg@2674
  1718
    self stopMakeButtonVisible value:true.
cg@2674
  1719
    self startMakeButtonEnabled value:false.
cg@2674
  1720
cg@2724
  1721
    self infoHolder value:'Building (make) - please wait...'.
cg@2674
  1722
    makeOutputWindow clear.
cg@2674
  1723
cg@2674
  1724
    makeProcess := 
cg@2674
  1725
            [
cg@2674
  1726
                [
cg@2674
  1727
                    self runBuildProcess:'exe'
cg@2636
  1728
                ] ensure:[
cg@2636
  1729
                    self stopMakeButtonVisible value:false.
cg@2636
  1730
                    self startMakeButtonEnabled value:true.
cg@2646
  1731
                    makeProcess := nil.
cg@2648
  1732
                    self updateButtonEnableState.
cg@2724
  1733
                    self infoHolder value:''.
cg@2636
  1734
                ].
cg@2636
  1735
            ] newProcess.
cg@2636
  1736
cg@2636
  1737
    makeProcess priority:4.
cg@2636
  1738
    makeProcess priorityRange:(4 to:8).
cg@2636
  1739
    makeProcess resume.
cg@2636
  1740
!
cg@2636
  1741
cg@2676
  1742
doStopMake
cg@2676
  1743
    <resource: #uiCallback>
cg@2646
  1744
cg@2676
  1745
    |p|
cg@2676
  1746
cg@2676
  1747
    (p := makeProcess) notNil ifTrue:[
cg@2676
  1748
        makeProcess := nil.
cg@2676
  1749
        p terminate.
cg@2676
  1750
        p waitUntilTerminated.
cg@2676
  1751
cg@2676
  1752
        makeOutputWindow endEntry.
cg@2676
  1753
        makeOutputWindow cr.
cg@2676
  1754
        makeOutputWindow nextPutLine:('Make Cancelled' colorizeAllWith:Color white on:Color red).
cg@2676
  1755
        makeOutputWindow endEntry.
cg@2676
  1756
    ].
cg@2646
  1757
!
cg@2646
  1758
cg@2676
  1759
projectTypeChanged
cg@2676
  1760
    <resource: #uiCallback>
cg@2676
  1761
cg@2676
  1762
    self updateListOfMatchingProjects
cg@2636
  1763
!
cg@2636
  1764
cg@2674
  1765
runBuildProcess:what
cg@2636
  1766
    <resource: #uiCallback>
cg@2636
  1767
cg@2646
  1768
    self assert:makeOutputWindow notNil.
cg@2646
  1769
    self assert:makeOutputWindow model == self makeOutputHolder.
cg@2646
  1770
cg@2646
  1771
    ActivityNotification handle:[:ex |
cg@2646
  1772
        ex messageText notNil ifTrue:[
cg@2646
  1773
            makeOutputWindow endEntry.
cg@2646
  1774
            makeOutputWindow cr.
cg@2659
  1775
            makeOutputWindow nextPutLine:(ex messageText colorizeAllWith:Color white on:Color blue).
cg@2646
  1776
            makeOutputWindow endEntry.
cg@2687
  1777
        ].
cg@2646
  1778
        ex proceed.
cg@2646
  1779
    ] do:[
cg@2646
  1780
        projectBuilder := ProjectBuilder new.
cg@2646
  1781
        projectBuilder package:(selectedProjectDefinition package).
cg@2874
  1782
        projectBuilder usedCompilerForBuild:(usedCompilerHolder value).
cg@2674
  1783
        what = 'exe' ifTrue:[
cg@2674
  1784
            projectBuilder makeExeOnly:true
cg@2674
  1785
        ] ifFalse:[
cg@2674
  1786
            projectBuilder makeExeOnly:false
cg@2674
  1787
        ].
cg@2674
  1788
cg@2674
  1789
        Error handle:[:ex |
cg@2674
  1790
            makeOutputWindow endEntry.
cg@2674
  1791
            makeOutputWindow cr.
sr@2682
  1792
            makeOutputWindow nextPutLine:(ex description colorizeAllWith:Color white on:Color red).
cg@2674
  1793
            makeOutputWindow endEntry.
sr@2682
  1794
            ex proceed.
cg@2674
  1795
        ] do:[
cg@2674
  1796
            projectBuilder buildWithColorizedOutputTo:makeOutputWindow.
cg@2674
  1797
        ].
cg@2646
  1798
    ].
cg@2874
  1799
cg@2874
  1800
    "Modified: / 22-01-2012 / 10:51:01 / cg"
cg@2636
  1801
!
cg@2636
  1802
cg@2676
  1803
selectedApplicationChanged
cg@2676
  1804
    |idx|
cg@2671
  1805
cg@2676
  1806
    ((idx := self selectedApplicationIndexHolder value) isNil
cg@2676
  1807
    or:[idx == 0]) ifTrue:[
cg@2676
  1808
        selectedApplication := nil.
cg@2676
  1809
    ] ifFalse:[
cg@2676
  1810
        selectedApplication := self listOfApplicationsInProject value at:idx.
cg@2636
  1811
    ].
cg@2676
  1812
    self hasApplicationSelectedHolder value:(selectedApplication notNil).
cg@2659
  1813
cg@2676
  1814
"/    selectedApplication notNil ifTrue:[
cg@2676
  1815
"/        "/ generate startupClass code
cg@2676
  1816
"/        CodeGeneratorTool
cg@2656
  1817
"/            compile:(selectedProjectDefinition startupClassName_codeFor:(selectedApplication name))
cg@2656
  1818
"/            forClass:selectedProjectDefinition theMetaclass
cg@2656
  1819
"/            inCategory:'description - startup'.
cg@2656
  1820
"/    ].
cg@2636
  1821
    self updateApplicationComment.
cg@2636
  1822
    self updateButtonEnableState.
cg@2636
  1823
!
cg@2636
  1824
cg@2676
  1825
selectedProjectChanged
fm@2694
  1826
fm@2694
  1827
    |selectedProjectIndex|
fm@2694
  1828
fm@2694
  1829
    selectedProjectIndex := self selectedProjectIndexHolder value.
fm@2694
  1830
    (selectedProjectIndex ? 0) == 0 ifTrue:[
cg@2676
  1831
        selectedProjectDefinition := nil.
cg@2676
  1832
    ] ifFalse:[
fm@2694
  1833
        selectedProjectDefinition := self listOfMatchingProjects value at:(selectedProjectIndex).
cg@2676
  1834
    ].
cg@2676
  1835
    self hasProjectSelectedHolder value:(selectedProjectDefinition notNil).
cg@2676
  1836
cg@2676
  1837
    self updateComment.
cg@2676
  1838
    self updateListOfApplicationsInProject.
cg@2636
  1839
    self updateButtonEnableState.
cg@2656
  1840
!
cg@2656
  1841
cg@2676
  1842
selectedStartupClassChanged
cg@2676
  1843
    self selectedStartupClassIndexHolder value isNil ifTrue:[
cg@2676
  1844
        selectedStartupClass := nil.
cg@2676
  1845
    ] ifFalse:[
cg@2676
  1846
        selectedStartupClass := self listOfStartupClassesInProject value at:(self selectedStartupClassIndexHolder value).
cg@2656
  1847
    ].
cg@2659
  1848
    self hasStartupClassSelectedHolder value:(selectedStartupClass notNil).
cg@2659
  1849
cg@2656
  1850
    selectedStartupClass notNil ifTrue:[
cg@2656
  1851
        "/ generate startupClass code
cg@2832
  1852
        SmalltalkCodeGeneratorTool
cg@2656
  1853
            compile:(selectedProjectDefinition startupClassName_codeFor:(selectedStartupClass name))
cg@2656
  1854
            forClass:selectedProjectDefinition theMetaclass
cg@2656
  1855
            inCategory:'description - startup'.
cg@2656
  1856
    ].
cg@2656
  1857
    self updateButtonEnableState.
cg@2832
  1858
cg@2832
  1859
    "Modified: / 31-01-2011 / 18:29:42 / cg"
cg@2676
  1860
! !
cg@2636
  1861
cg@2676
  1862
!ProjectBuilderAssistantApplication methodsFor:'aspects'!
cg@2636
  1863
cg@2676
  1864
buildDirectoryHolder
cg@2676
  1865
    <resource: #uiAspect>
cg@2636
  1866
cg@2636
  1867
    |buildDirectory|
cg@2636
  1868
cg@2636
  1869
    buildDirectoryHolder isNil ifTrue:[
cg@2636
  1870
        buildDirectoryHolder := nil asValue.
cg@2636
  1871
        buildDirectoryHolder onChangeSend:#buildDirectoryChanged to:self.
cg@2636
  1872
    ].
cg@2636
  1873
    buildDirectoryHolder value isEmptyOrNil ifTrue:[
cg@2686
  1874
        buildDirectory := ProjectBuilder previousBuildDirectory.
cg@2636
  1875
        buildDirectory isNil ifTrue:[
cg@2636
  1876
            buildDirectory := UserPreferences current buildDirectory.
cg@2636
  1877
            buildDirectory isNil ifTrue:[
cg@2636
  1878
                buildDirectory := Filename tempDirectory construct:'stx_build'.
cg@2636
  1879
            ].
cg@2636
  1880
        ].
cg@2636
  1881
        buildDirectoryHolder value: buildDirectory.
cg@2636
  1882
    ].
cg@2636
  1883
    ^ buildDirectoryHolder.
cg@2636
  1884
!
cg@2636
  1885
cg@2724
  1886
companyNameHolder
cg@2724
  1887
    <resource: #uiAspect>
cg@2724
  1888
cg@2724
  1889
    companyNameHolder isNil ifTrue:[
cg@2724
  1890
        companyNameHolder := 'MyCompany' asValue.
cg@2724
  1891
    ].
cg@2724
  1892
    ^ companyNameHolder.
cg@2724
  1893
!
cg@2724
  1894
cg@2724
  1895
compilerWarnMessageHolder
cg@2724
  1896
    <resource: #uiAspect>
cg@2724
  1897
cg@2724
  1898
    compilerWarnMessageHolder isNil ifTrue:[
cg@2724
  1899
        compilerWarnMessageHolder := '' asValue.
cg@2724
  1900
    ].
cg@2724
  1901
    ^ compilerWarnMessageHolder.
cg@2724
  1902
!
cg@2724
  1903
cg@2724
  1904
compilerWarnMessageVisibleHolder
cg@2724
  1905
    <resource: #uiAspect>
cg@2724
  1906
cg@2724
  1907
    compilerWarnMessageVisibleHolder isNil ifTrue:[
cg@2724
  1908
        compilerWarnMessageVisibleHolder := false asValue.
cg@2724
  1909
    ].
cg@2724
  1910
    ^ compilerWarnMessageVisibleHolder.
cg@2724
  1911
!
cg@2724
  1912
cg@2676
  1913
hasApplicationSelectedHolder
cg@2676
  1914
    <resource: #uiAspect>
cg@2676
  1915
cg@2676
  1916
    hasApplicationSelectedHolder isNil ifTrue:[
cg@2659
  1917
        hasApplicationSelectedHolder := nil asValue.
cg@2659
  1918
    ].
cg@2659
  1919
    ^ hasApplicationSelectedHolder.
cg@2636
  1920
!
cg@2636
  1921
cg@2676
  1922
hasProjectSelectedHolder
cg@2676
  1923
    <resource: #uiAspect>
cg@2676
  1924
cg@2676
  1925
    hasProjectSelectedHolder isNil ifTrue:[
cg@2659
  1926
        hasProjectSelectedHolder := nil asValue.
cg@2659
  1927
    ].
cg@2659
  1928
    ^ hasProjectSelectedHolder.
cg@2648
  1929
!
cg@2648
  1930
cg@2676
  1931
hasStartupClassSelectedHolder
cg@2676
  1932
    <resource: #uiAspect>
cg@2676
  1933
cg@2676
  1934
    hasStartupClassSelectedHolder isNil ifTrue:[
cg@2659
  1935
        hasStartupClassSelectedHolder := nil asValue.
cg@2659
  1936
    ].
cg@2659
  1937
    ^ hasStartupClassSelectedHolder.
cg@2636
  1938
!
cg@2636
  1939
cg@2676
  1940
hideOtherApplicationClasses
cg@2676
  1941
    <resource: #uiAspect>
cg@2676
  1942
cg@2676
  1943
    hideOtherApplicationClasses isNil ifTrue:[
cg@2671
  1944
        hideOtherApplicationClasses := true asValue.
cg@2671
  1945
        hideOtherApplicationClasses onChangeSend:#updateListOfApplicationsInProject to:self.
cg@2671
  1946
    ].
cg@2671
  1947
    ^ hideOtherApplicationClasses.
cg@2671
  1948
!
cg@2671
  1949
cg@2676
  1950
hideOtherStartupClasses
cg@2676
  1951
    <resource: #uiAspect>
cg@2676
  1952
cg@2676
  1953
    hideOtherStartupClasses isNil ifTrue:[
cg@2676
  1954
        hideOtherStartupClasses := true asValue.
cg@2676
  1955
        hideOtherStartupClasses onChangeSend:#updateListOfStartupClassesInProject to:self.
cg@2671
  1956
    ].
cg@2676
  1957
    ^ hideOtherStartupClasses.
cg@2671
  1958
!
cg@2671
  1959
cg@2676
  1960
hideSTXProjects
cg@2676
  1961
    <resource: #uiAspect>
cg@2676
  1962
cg@2676
  1963
    hideSTXProjects isNil ifTrue:[
cg@2676
  1964
        hideSTXProjects := true asValue.
cg@2676
  1965
        hideSTXProjects onChangeSend:#updateListOfMatchingProjects to:self.
cg@2676
  1966
    ].
cg@2676
  1967
    ^ hideSTXProjects.
cg@2676
  1968
!
cg@2676
  1969
cg@2676
  1970
listOfApplicationsInProject
cg@2676
  1971
    <resource: #uiAspect>
cg@2676
  1972
cg@2676
  1973
    listOfApplicationsInProject isNil ifTrue:[
cg@2636
  1974
        listOfApplicationsInProject := ValueHolder new.
cg@2636
  1975
    ].
cg@2636
  1976
    ^ listOfApplicationsInProject.
cg@2636
  1977
!
cg@2636
  1978
cg@2676
  1979
listOfClassesInProject
cg@2676
  1980
    <resource: #uiAspect>
cg@2676
  1981
cg@2676
  1982
    listOfClassesInProject isNil ifTrue:[
cg@2636
  1983
        listOfClassesInProject := ValueHolder new.
cg@2636
  1984
    ].
cg@2636
  1985
    ^ listOfClassesInProject.
cg@2636
  1986
!
cg@2636
  1987
cg@2686
  1988
listOfMatchingPackageIds
cg@2686
  1989
    <resource: #uiAspect>
cg@2686
  1990
cg@2686
  1991
    listOfMatchingPackageIds isNil ifTrue:[
cg@2686
  1992
        listOfMatchingPackageIds := ValueHolder new.
cg@2686
  1993
    ].
cg@2686
  1994
    ^ listOfMatchingPackageIds.
cg@2686
  1995
!
cg@2686
  1996
cg@2676
  1997
listOfMatchingProjects
cg@2676
  1998
    <resource: #uiAspect>
cg@2636
  1999
cg@2636
  2000
    listOfMatchingProjects isNil ifTrue:[
cg@2636
  2001
        listOfMatchingProjects := ValueHolder new.
cg@2636
  2002
    ].
cg@2636
  2003
    ^ listOfMatchingProjects.
cg@2636
  2004
!
cg@2636
  2005
fm@2697
  2006
listOfNewProjectsName
fm@2697
  2007
fm@2697
  2008
    <resource: #uiAspect>
fm@2697
  2009
fm@2697
  2010
    listOfNewProjectsName isNil ifTrue:[
fm@2697
  2011
        listOfNewProjectsName := ValueHolder new.
fm@2697
  2012
    ].
fm@2697
  2013
    ^ listOfNewProjectsName.
fm@2697
  2014
!
fm@2697
  2015
cg@2681
  2016
listOfPossibleCompilers
cg@2874
  2017
    ^ Tools::ProjectBuilder listOfPossibleCompilers
cg@2874
  2018
cg@2874
  2019
    "Modified: / 21-01-2012 / 14:05:52 / cg"
cg@2681
  2020
!
cg@2681
  2021
cg@2872
  2022
listOfPrerequisitesInProject
cg@2872
  2023
    <resource: #uiAspect>
cg@2872
  2024
cg@2872
  2025
    listOfPrerequisitesInProject isNil ifTrue:[
cg@2872
  2026
        listOfPrerequisitesInProject := ValueHolder new.
cg@2872
  2027
    ].
cg@2872
  2028
    ^ listOfPrerequisitesInProject.
cg@2872
  2029
cg@2872
  2030
    "Created: / 19-01-2012 / 15:39:34 / cg"
cg@2872
  2031
!
cg@2872
  2032
cg@2676
  2033
listOfStartupClassesInProject
cg@2676
  2034
    <resource: #uiAspect>
cg@2676
  2035
cg@2676
  2036
    listOfStartupClassesInProject isNil ifTrue:[
cg@2676
  2037
        listOfStartupClassesInProject := ValueHolder new.
cg@2676
  2038
    ].
cg@2676
  2039
    ^ listOfStartupClassesInProject.
cg@2676
  2040
!
cg@2676
  2041
cg@2676
  2042
makeOutputHolder
cg@2676
  2043
    <resource: #uiAspect>
cg@2636
  2044
cg@2636
  2045
    makeOutputHolder isNil ifTrue:[
cg@2646
  2046
        makeOutputHolder := ValueHolder new.
cg@2636
  2047
    ].
cg@2636
  2048
    ^ makeOutputHolder.
cg@2636
  2049
!
cg@2636
  2050
cg@2676
  2051
newApplicationsName
cg@2676
  2052
    <resource: #uiAspect>
cg@2676
  2053
cg@2676
  2054
    "automatically generated by UIPainter ..."
cg@2676
  2055
cg@2676
  2056
    "*** the code below creates a default model when invoked."
cg@2676
  2057
    "*** (which may not be the one you wanted)"
cg@2676
  2058
    "*** Please change as required and accept it in the browser."
cg@2676
  2059
    "*** (and replace this comment by something more useful ;-)"
cg@2676
  2060
cg@2676
  2061
    newApplicationsName isNil ifTrue:[
cg@2676
  2062
        newApplicationsName := ValueHolder new.
cg@2676
  2063
"/ if your app needs to be notified of changes, uncomment one of the lines below:
cg@2636
  2064
"/       newApplicationsName addDependent:self.
cg@2636
  2065
"/       newApplicationsName onChangeSend:#newApplicationsNameChanged to:self.
cg@2636
  2066
    ].
cg@2636
  2067
    ^ newApplicationsName.
cg@2636
  2068
!
cg@2636
  2069
cg@2676
  2070
newProjectsName
cg@2676
  2071
    <resource: #uiAspect>
cg@2676
  2072
cg@2676
  2073
    newProjectsName isNil ifTrue:[
cg@2636
  2074
        newProjectsName := nil asValue.
cg@2636
  2075
    ].
cg@2636
  2076
    ^ newProjectsName.
cg@2636
  2077
!
cg@2636
  2078
fm@2705
  2079
newProjectsNameListDoubleClickChannel
fm@2705
  2080
    "automatically generated by UIPainter ..."
fm@2705
  2081
fm@2705
  2082
    "*** the code below creates a default model when invoked."
fm@2705
  2083
    "*** (which may not be the one you wanted)"
fm@2705
  2084
    "*** Please change as required and accept it in the browser."
fm@2705
  2085
fm@2705
  2086
    |holder|
fm@2705
  2087
fm@2705
  2088
    (holder := builder bindingAt:#newProjectsNameListDoubleClickChannel) isNil ifTrue:[
fm@2705
  2089
        holder := TriggerValue new.
fm@2705
  2090
        builder aspectAt:#newProjectsNameListDoubleClickChannel put:holder.
fm@2705
  2091
        holder onChangeEvaluate:[       
fm@2705
  2092
            newProjectsNameListExtendedComboBox notNil ifTrue: [
fm@2705
  2093
                newProjectsNameListExtendedComboBox closeMenu.
fm@2705
  2094
            ]
fm@2705
  2095
        ]
fm@2705
  2096
    ].
fm@2705
  2097
    ^ holder.
fm@2705
  2098
!
fm@2705
  2099
cg@2676
  2100
newStartupClassName
cg@2676
  2101
    <resource: #uiAspect>
cg@2676
  2102
cg@2676
  2103
    newStartupClassName isNil ifTrue:[
cg@2676
  2104
        newStartupClassName := ValueHolder new.
cg@2676
  2105
    ].
cg@2676
  2106
    ^ newStartupClassName.
cg@2659
  2107
!
cg@2659
  2108
cg@2724
  2109
productNameHolder
cg@2724
  2110
    <resource: #uiAspect>
cg@2724
  2111
cg@2724
  2112
    productNameHolder isNil ifTrue:[
cg@2724
  2113
        productNameHolder := 'MyProduct' asValue.
cg@2724
  2114
    ].
cg@2724
  2115
    ^ productNameHolder.
cg@2724
  2116
!
cg@2724
  2117
cg@2676
  2118
projectType
cg@2897
  2119
    ^ self projectTypeHolder value
cg@2897
  2120
cg@2897
  2121
    "Modified: / 20-07-2012 / 13:28:46 / cg"
cg@2659
  2122
!
cg@2659
  2123
cg@2676
  2124
projectType:aProjectTypeSymbol
cg@2676
  2125
    self assert:(ProjectDefinition projectTypes includes:aProjectTypeSymbol).
cg@2659
  2126
    self projectTypeHolder value:aProjectTypeSymbol
cg@2897
  2127
cg@2897
  2128
    "Modified: / 20-07-2012 / 13:28:25 / cg"
cg@2659
  2129
!
cg@2659
  2130
cg@2676
  2131
projectTypeHolder
cg@2676
  2132
    <resource: #uiAspect>
cg@2659
  2133
cg@2676
  2134
    projectTypeHolder isNil ifTrue:[
cg@2676
  2135
        projectTypeHolder := RadioButtonGroup new.
cg@2897
  2136
        projectTypeHolder value:ProjectDefinition guiApplicationType.
cg@2659
  2137
    ].
cg@2659
  2138
    ^ projectTypeHolder.
cg@2897
  2139
cg@2897
  2140
    "Modified: / 20-07-2012 / 13:30:16 / cg"
cg@2636
  2141
!
cg@2636
  2142
cg@2676
  2143
selectedApplicationIndexHolder
cg@2676
  2144
    <resource: #uiAspect>
cg@2676
  2145
cg@2676
  2146
    selectedApplicationIndexHolder isNil ifTrue:[
cg@2636
  2147
        selectedApplicationIndexHolder := ValueHolder new.
cg@2636
  2148
        selectedApplicationIndexHolder onChangeSend:#selectedApplicationChanged to:self.
cg@2636
  2149
    ].
cg@2636
  2150
    ^ selectedApplicationIndexHolder.
cg@2636
  2151
!
cg@2636
  2152
cg@2676
  2153
selectedApplicationsComment
cg@2676
  2154
    <resource: #uiAspect>
cg@2676
  2155
cg@2676
  2156
    "automatically generated by UIPainter ..."
cg@2636
  2157
cg@2636
  2158
    "*** the code below creates a default model when invoked."
cg@2636
  2159
    "*** (which may not be the one you wanted)"
cg@2636
  2160
    "*** Please change as required and accept it in the browser."
cg@2636
  2161
    "*** (and replace this comment by something more useful ;-)"
cg@2636
  2162
cg@2636
  2163
    selectedApplicationsComment isNil ifTrue:[
cg@2636
  2164
        selectedApplicationsComment := '' asValue.
cg@2636
  2165
"/ if your app needs to be notified of changes, uncomment one of the lines below:
cg@2636
  2166
"/       selectedApplicationsComment addDependent:self.
cg@2636
  2167
"/       selectedApplicationsComment onChangeSend:#selectedApplicationsCommentChanged to:self.
cg@2636
  2168
    ].
cg@2636
  2169
    ^ selectedApplicationsComment.
cg@2636
  2170
!
cg@2636
  2171
cg@2676
  2172
selectedProjectDefinition
cg@2676
  2173
    <resource: #uiAspect>
cg@2636
  2174
cg@2676
  2175
    ^ selectedProjectDefinition.
cg@2636
  2176
!
cg@2636
  2177
cg@2676
  2178
selectedProjectIndexHolder
cg@2676
  2179
    <resource: #uiAspect>
cg@2636
  2180
cg@2636
  2181
    selectedProjectIndexHolder isNil ifTrue:[
cg@2636
  2182
        selectedProjectIndexHolder := ValueHolder new.
cg@2636
  2183
        selectedProjectIndexHolder onChangeSend:#selectedProjectChanged to:self.
cg@2636
  2184
    ].
cg@2636
  2185
    ^ selectedProjectIndexHolder.
cg@2676
  2186
!
cg@2676
  2187
cg@2676
  2188
selectedProjectsComment
cg@2676
  2189
    <resource: #uiAspect>
cg@2676
  2190
cg@2676
  2191
    selectedProjectsComment isNil ifTrue:[
cg@2676
  2192
        selectedProjectsComment := '' asValue.
cg@2676
  2193
    ].
cg@2676
  2194
    ^ selectedProjectsComment.
cg@2676
  2195
!
cg@2676
  2196
cg@2676
  2197
selectedStartupClassIndexHolder
cg@2676
  2198
    <resource: #uiAspect>
cg@2676
  2199
cg@2676
  2200
    selectedStartupClassIndexHolder isNil ifTrue:[
cg@2676
  2201
        selectedStartupClassIndexHolder := ValueHolder new.
cg@2676
  2202
        selectedStartupClassIndexHolder onChangeSend:#selectedStartupClassChanged to:self.
cg@2676
  2203
    ].
cg@2676
  2204
    ^ selectedStartupClassIndexHolder.
cg@2676
  2205
!
cg@2676
  2206
cg@2676
  2207
startMakeButtonEnabled
cg@2676
  2208
    <resource: #uiAspect>
cg@2676
  2209
cg@2676
  2210
    startMakeButtonEnabled isNil ifTrue:[
cg@2676
  2211
        startMakeButtonEnabled := true asValue.
cg@2676
  2212
    ].
cg@2676
  2213
    ^ startMakeButtonEnabled.
cg@2676
  2214
!
cg@2676
  2215
cg@2676
  2216
stopMakeButtonVisible
cg@2676
  2217
    <resource: #uiAspect>
cg@2676
  2218
cg@2676
  2219
    stopMakeButtonVisible isNil ifTrue:[
cg@2676
  2220
        stopMakeButtonVisible := false asValue.
cg@2676
  2221
    ].
cg@2676
  2222
    ^ stopMakeButtonVisible.
cg@2681
  2223
!
cg@2681
  2224
cg@2681
  2225
usedCompilerHolder
cg@2681
  2226
    <resource: #uiAspect>
cg@2681
  2227
cg@2681
  2228
    usedCompilerHolder isNil ifTrue:[
cg@2681
  2229
        usedCompilerHolder := ValueHolder new.
cg@2874
  2230
        usedCompilerHolder value:(ProjectBuilder defaultUsedCompiler).
cg@2724
  2231
        usedCompilerHolder onChangeSend:#checkCompilerAvailability to:self.
cg@2681
  2232
    ].
cg@2681
  2233
    ^ usedCompilerHolder.
cg@2874
  2234
cg@2874
  2235
    "Modified: / 21-01-2012 / 14:07:16 / cg"
cg@2676
  2236
! !
cg@2676
  2237
cg@2676
  2238
!ProjectBuilderAssistantApplication methodsFor:'initialization & release'!
cg@2676
  2239
cg@2687
  2240
fileBrowserInstance
cg@2687
  2241
    "setup the embedded fileBrowser (in the last page)"
cg@2687
  2242
cg@2687
  2243
    |targetDirectory browser|
cg@2687
  2244
cg@2687
  2245
    targetDirectory := projectBuilder packageBuildDirectory.
cg@2687
  2246
cg@2687
  2247
    browser := FileBrowserV2 new.
cg@2687
  2248
    browser onDirectory:targetDirectory.
cg@2724
  2249
    OperatingSystem isMSWINDOWSlike ifTrue:[
cg@2724
  2250
        browser filter:'*.exe;*.com'.
cg@2724
  2251
    ] ifFalse:[
cg@2724
  2252
        browser filter:'*'.
cg@2724
  2253
    ].
cg@2687
  2254
    ^ browser.
cg@2687
  2255
!
cg@2687
  2256
cg@2897
  2257
openOn:aProjectDefinitionClass
cg@2897
  2258
    |type apps startupClass|
cg@2897
  2259
cg@2897
  2260
    self allButOpen.
cg@2897
  2261
    aProjectDefinitionClass isLibraryDefinition ifTrue:[
cg@2897
  2262
        type := ProjectDefinition libraryType
cg@2897
  2263
    ] ifFalse:[
cg@2897
  2264
        aProjectDefinitionClass isGUIApplication ifTrue:[
cg@2897
  2265
            type := ProjectDefinition guiApplicationType
cg@2897
  2266
        ] ifFalse:[
cg@2897
  2267
            type := ProjectDefinition nonGuiApplicationType
cg@2897
  2268
        ]
cg@2897
  2269
    ].
cg@2897
  2270
    self projectTypeHolder value:type.
cg@2897
  2271
    self hideSTXProjects value:false.
cg@2897
  2272
    selectedProjectDefinition := aProjectDefinitionClass.
cg@2897
  2273
    self selectedProjectIndexHolder value:(self listOfMatchingPackageIds value indexOf:aProjectDefinitionClass package).
cg@2897
  2274
    self hasProjectSelectedHolder value:true.
cg@2897
  2275
cg@2897
  2276
    self gotoPage:3.
cg@2897
  2277
    type == ProjectDefinition guiApplicationType ifTrue:[
cg@2897
  2278
        (startupClass := aProjectDefinitionClass startupClass) notNil ifTrue:[
cg@2897
  2279
            selectedStartupClass := startupClass.
cg@2897
  2280
            self gotoPage:4.
cg@2897
  2281
        ]. 
cg@2897
  2282
"/    apps := (aProjectDefinitionClass classes select:[:cls | cls isKindOf:ApplicationModel])
cg@2897
  2283
    ].
cg@2897
  2284
    self openWindow.
cg@2897
  2285
cg@2897
  2286
    "Created: / 20-07-2012 / 12:34:02 / cg"
cg@2897
  2287
!
cg@2897
  2288
cg@2897
  2289
openOnPackage:aPackageId
cg@2897
  2290
    self allButOpen.
cg@2897
  2291
    self projectTypeHolder value:(ProjectDefinition guiApplicationType).
cg@2897
  2292
    self hideSTXProjects value:false.
cg@2897
  2293
    self selectedProjectIndexHolder value:(self listOfMatchingPackageIds indexOf:aPackageId).
cg@2897
  2294
    self hasProjectSelectedHolder value:true.
cg@2897
  2295
    self gotoPage:2.
cg@2897
  2296
    self openWindow.
cg@2897
  2297
cg@2897
  2298
    "Created: / 20-07-2012 / 13:24:38 / cg"
cg@2897
  2299
!
cg@2897
  2300
cg@2676
  2301
postBuildMakeOutputWindow:aView
cg@2676
  2302
    makeOutputWindow := aView
cg@2676
  2303
!
cg@2676
  2304
fm@2705
  2305
postBuildNewProjectsNameListExtendedComboBox:anExtendedComboBox
fm@2697
  2306
fm@2697
  2307
    |menu|
fm@2697
  2308
fm@2697
  2309
    menu := SubCanvas new.
fm@2697
  2310
    menu client:self spec:#newProjectsNameListSpec builder:nil.
fm@2705
  2311
    anExtendedComboBox closeOnSelect: false.
fm@2705
  2312
    anExtendedComboBox menuWidget:menu.
fm@2697
  2313
fm@2705
  2314
    anExtendedComboBox editor 
fm@2697
  2315
            immediateAccept:true;
fm@2697
  2316
            acceptOnLeave:true;
fm@2697
  2317
            acceptOnLostFocus:true;
fm@2697
  2318
            acceptOnPointerLeave:true;
fm@2697
  2319
            acceptOnReturn:true;
fm@2697
  2320
            acceptOnTab:true.
fm@2705
  2321
fm@2705
  2322
    newProjectsNameListExtendedComboBox := anExtendedComboBox.
fm@2697
  2323
!
fm@2697
  2324
cg@2676
  2325
postBuildWith:aBuilder
cg@2676
  2326
    super postBuildWith:aBuilder.
cg@2676
  2327
    self updateListOfMatchingProjects.
fm@2697
  2328
    self updateListOfNewProjectsName.
cg@2676
  2329
cg@2676
  2330
    Smalltalk addDependent:self.
cg@2676
  2331
!
cg@2676
  2332
cg@2676
  2333
release
cg@2676
  2334
    Smalltalk removeDependent:self.
cg@2676
  2335
    super release
cg@2676
  2336
! !
cg@2676
  2337
cg@2676
  2338
!ProjectBuilderAssistantApplication methodsFor:'menu actions'!
cg@2676
  2339
cg@2676
  2340
openDocumentation
cg@2676
  2341
   self openHTMLDocument:'tools/misc/TOP.html#PACKAGER'.
cg@2659
  2342
! !
cg@2659
  2343
cg@2636
  2344
!ProjectBuilderAssistantApplication methodsFor:'private'!
cg@2636
  2345
cg@2676
  2346
commentFromClass:aClass
cg@2676
  2347
    |docMethod comment indents minIndent maxLineLength|
cg@2636
  2348
cg@2636
  2349
    docMethod := aClass class compiledMethodAt:#documentation.
cg@2636
  2350
    docMethod notNil ifTrue:[
cg@2636
  2351
        comment := docMethod comment.
cg@2636
  2352
        comment := comment asStringCollection 
cg@2636
  2353
                        collect:[:line | line withoutTrailingSeparators].
cg@2636
  2354
        [comment notEmpty and:[comment first isBlank]] whileTrue:[ comment removeFirst ].
cg@2636
  2355
        maxLineLength := (comment collect:[:line | line size]) max.
cg@2636
  2356
        indents := comment collect:[:line | 
cg@2636
  2357
                                        line isEmptyOrNil
cg@2636
  2358
                                            ifTrue:[maxLineLength]
cg@2636
  2359
                                            ifFalse:[ line findFirst:[:ch | ch isSeparator not]]].
cg@2636
  2360
        (minIndent := indents min) > 1 ifTrue:[
cg@2636
  2361
            comment := comment collect:[:line | line copyFrom:minIndent].
cg@2636
  2362
        ].
cg@2636
  2363
        comment := comment asString.
cg@2636
  2364
    ].
cg@2636
  2365
    ^ comment
cg@2659
  2366
!
cg@2659
  2367
cg@2676
  2368
generatePackageContentsMethods
cg@2676
  2369
    <resource: #uiCallback>
cg@2676
  2370
cg@2676
  2371
    Class packageQuerySignal answer:(selectedProjectDefinition package)
cg@2676
  2372
    do:[
cg@2676
  2373
        selectedProjectDefinition 
cg@2676
  2374
            forEachContentsMethodsCodeToCompileDo:[:code :category |
cg@2832
  2375
                    SmalltalkCodeGeneratorTool
cg@2676
  2376
                        compile:code
cg@2676
  2377
                        forClass:selectedProjectDefinition theMetaclass
cg@2676
  2378
                        inCategory:category.
cg@2676
  2379
                ]
cg@2676
  2380
            ignoreOldDefinition:true
cg@2659
  2381
    ].
cg@2676
  2382
    self updateListOfClassesInProject
cg@2832
  2383
cg@2832
  2384
    "Modified: / 31-01-2011 / 18:29:44 / cg"
cg@2659
  2385
!
cg@2659
  2386
cg@2676
  2387
hasApplicationSelected
cg@2676
  2388
    ^ self selectedApplicationIndexHolder value notNil
cg@2659
  2389
!
cg@2659
  2390
cg@2676
  2391
hasBuildDirectorySpecified
cg@2676
  2392
    ^ self buildDirectoryHolder value notEmptyOrNil
cg@2676
  2393
!
cg@2676
  2394
cg@2676
  2395
hasProjectBuilder
cg@2676
  2396
    ^ projectBuilder notNil
cg@2676
  2397
!
cg@2676
  2398
cg@2676
  2399
hasProjectSelected
cg@2676
  2400
    ^ self selectedProjectIndexHolder value notNil
cg@2676
  2401
!
cg@2676
  2402
cg@2676
  2403
hasStartupClassSelected
cg@2676
  2404
    ^ self selectedStartupClassIndexHolder value notNil
cg@2636
  2405
! !
cg@2636
  2406
cg@2656
  2407
!ProjectBuilderAssistantApplication methodsFor:'queries'!
cg@2656
  2408
cg@2676
  2409
canEnterApplicationSelection
cg@2857
  2410
    self hasProjectSelected ifFalse:[
cg@2857
  2411
        self infoHolder value:'no project selected'. 
cg@2857
  2412
        ^ false
cg@2857
  2413
    ].
cg@2857
  2414
    ^ true
cg@2857
  2415
cg@2857
  2416
    "Modified: / 23-08-2011 / 12:12:35 / cg"
cg@2656
  2417
!
cg@2656
  2418
cg@2676
  2419
canEnterBuild
cg@2857
  2420
    self hasBuildDirectorySpecified ifFalse:[
cg@2857
  2421
        self infoHolder value:'no build directory specified'. 
cg@2857
  2422
        ^ false
cg@2857
  2423
    ].
cg@2857
  2424
    ^ true
cg@2857
  2425
cg@2857
  2426
    "Modified: / 23-08-2011 / 12:13:29 / cg"
cg@2656
  2427
!
cg@2656
  2428
cg@2659
  2429
canEnterContentsSelection
cg@2897
  2430
    |prj cls impl mthd|
cg@2857
  2431
cg@2857
  2432
    self hasProjectSelected ifFalse:[
cg@2857
  2433
        self infoHolder value:'no project selected'. 
cg@2857
  2434
        ^ false
cg@2857
  2435
    ].
cg@2857
  2436
    "self hasApplicationSelected ifFalse:[^ false]." 
cg@2857
  2437
    (self projectTypeIsLibrary or:[self hasStartupClassSelected]) ifFalse:[
cg@2857
  2438
        self infoHolder value:'must be either library or have a startup class'. 
cg@2857
  2439
        ^ false
cg@2857
  2440
    ].
cg@2857
  2441
    prj := self selectedProjectDefinition.
cg@2857
  2442
    ([prj startupClassName] on:Error do:nil) notNil ifFalse:[
cg@2857
  2443
        self infoHolder value:'must have a startup class'. 
cg@2857
  2444
        ^ false
cg@2857
  2445
    ].
cg@2857
  2446
    ([prj startupSelector] on:Error do:nil) notNil ifFalse:[
cg@2857
  2447
        self infoHolder value:'must have a startup selector'. 
cg@2857
  2448
        ^ false
cg@2857
  2449
    ].
cg@2857
  2450
    (prj class compiledMethodAt:#startupSelector) isNil ifTrue:[
cg@2857
  2451
        self infoHolder value:('inherited startup selector is "%1"' bindWith:prj startupSelector). 
cg@2864
  2452
        impl := prj class whichClassImplements:#startupSelector.
cg@2865
  2453
        impl isNil ifTrue:[
cg@2865
  2454
            self infoHolder value:('inherited startup selector (%1) not implemented in %2' 
cg@2865
  2455
                                    bindWith:prj startupSelector
cg@2865
  2456
                                    with:prj class name). 
cg@2864
  2457
            ^ false
cg@2864
  2458
        ].
cg@2857
  2459
    ].
cg@2897
  2460
    (mthd := prj class compiledMethodAt:#startupClassName) package == prj package ifFalse:[
cg@2897
  2461
        mthd package == PackageId noProjectID ifFalse:[
cg@2872
  2462
            self infoHolder value:('startup class method (#startupClassName) of %3 must be in package "%1" (is in "%2")' 
cg@2872
  2463
                bindWith:prj package
cg@2872
  2464
                with:(prj class compiledMethodAt:#startupClassName) package
cg@2872
  2465
                with:prj class name). 
cg@2872
  2466
            ^ false
cg@2872
  2467
        ].
cg@2857
  2468
    ].
cg@2897
  2469
    (mthd := prj class compiledMethodAt:#startupSelector) notNil ifTrue:[
cg@2897
  2470
        mthd package == prj package ifFalse:[
cg@2897
  2471
            mthd package == PackageId noProjectID ifFalse:[
cg@2872
  2472
                self infoHolder value:('startup class method (#startupSelector) of %3 must be in package "%1" (is in "%2")' 
cg@2872
  2473
                    bindWith:prj package
cg@2897
  2474
                    with:mthd package 
cg@2872
  2475
                    with:prj class name). 
cg@2872
  2476
                ^ false
cg@2872
  2477
            ]
cg@2857
  2478
        ].
cg@2857
  2479
    ].
cg@2864
  2480
    cls := Smalltalk classNamed:prj startupClassName.
cg@2864
  2481
    cls isNil ifTrue:[
cg@2864
  2482
        self infoHolder value:('startup class "%1" does not exist' bindWith:prj startupClassName).
cg@2864
  2483
        ^ false.
cg@2864
  2484
    ].
cg@2864
  2485
    (cls implements:(prj startupSelector)) ifFalse:[
cg@2865
  2486
        (cls respondsTo:(prj startupSelector)) ifFalse:[
cg@2865
  2487
            self infoHolder value:('startup class "%1" does not implement startup selector "%2"' 
cg@2865
  2488
                    bindWith:cls name
cg@2865
  2489
                    with:prj startupSelector). 
cg@2865
  2490
            ^ false
cg@2865
  2491
        ].
cg@2864
  2492
    ].
cg@2857
  2493
    ^ true.
cg@2857
  2494
cg@2897
  2495
    "Modified: / 20-07-2012 / 19:21:34 / cg"
cg@2659
  2496
!
cg@2659
  2497
cg@2676
  2498
canEnterDeploy
cg@2857
  2499
    self hasProjectBuilder ifFalse:[
cg@2857
  2500
        self infoHolder value:'no project builder specified'. 
cg@2857
  2501
        ^ false
cg@2857
  2502
    ].
cg@2857
  2503
    ^ true
cg@2857
  2504
cg@2857
  2505
    "Modified: / 23-08-2011 / 12:13:23 / cg"
cg@2656
  2506
!
cg@2656
  2507
cg@2872
  2508
canEnterPrerequisitesSelection
cg@2872
  2509
    |prj cls impl|
cg@2872
  2510
cg@2872
  2511
    self hasProjectSelected ifFalse:[
cg@2872
  2512
        self infoHolder value:'no project selected'. 
cg@2872
  2513
        ^ false
cg@2872
  2514
    ].
cg@2872
  2515
    ^ true.
cg@2872
  2516
cg@2872
  2517
    "Created: / 19-01-2012 / 15:37:30 / cg"
cg@2872
  2518
!
cg@2872
  2519
cg@2676
  2520
canEnterStartupClassSelection
cg@2857
  2521
    self hasProjectSelected ifFalse:[
cg@2857
  2522
        self infoHolder value:'no project selected'. 
cg@2857
  2523
        ^ false
cg@2857
  2524
    ].
cg@2676
  2525
    ^ self hasProjectSelected "and:[ self hasApplicationSelected ]"
cg@2857
  2526
cg@2857
  2527
    "Modified: / 23-08-2011 / 12:16:35 / cg"
fm@2696
  2528
!
fm@2696
  2529
cg@2724
  2530
isUnixOS
cg@2724
  2531
    ^ OperatingSystem isUNIXlike
cg@2724
  2532
!
cg@2724
  2533
cg@2720
  2534
isWindowsOS
cg@2720
  2535
    ^ OperatingSystem isMSWINDOWSlike
cg@2720
  2536
!
cg@2720
  2537
fm@2696
  2538
projectTypeIsGuiApplication
cg@2897
  2539
    ^ self projectTypeHolder value == ProjectDefinition guiApplicationType
cg@2897
  2540
cg@2897
  2541
    "Modified: / 20-07-2012 / 13:29:59 / cg"
fm@2696
  2542
!
fm@2696
  2543
fm@2696
  2544
projectTypeIsLibrary
cg@2897
  2545
    ^ self projectTypeHolder value == ProjectDefinition libraryType
cg@2897
  2546
cg@2897
  2547
    "Modified: / 20-07-2012 / 13:29:24 / cg"
fm@2696
  2548
!
fm@2696
  2549
fm@2696
  2550
projectTypeIsNotLibrary
fm@2696
  2551
    ^ self projectTypeIsLibrary not
cg@2656
  2552
! !
cg@2656
  2553
cg@2636
  2554
!ProjectBuilderAssistantApplication methodsFor:'specs'!
cg@2636
  2555
cg@2676
  2556
assistantSpec
cg@2703
  2557
    ^ self class assistantSpec
cg@2676
  2558
! !
cg@2676
  2559
cg@2676
  2560
!ProjectBuilderAssistantApplication methodsFor:'update'!
cg@2676
  2561
cg@2724
  2562
checkCompilerAvailability
cg@2724
  2563
    |cmd suite warnMsg1 warnMsg2 sep|
cg@2724
  2564
cg@2724
  2565
    cmd := 'cc'.
cg@2724
  2566
    suite := 'C-Compiler'.
cg@2724
  2567
    warnMsg1 := warnMsg2 := ''.
cg@2724
  2568
cg@2724
  2569
    self usedCompilerHolder value = 'bcc' ifTrue:[
cg@2724
  2570
        cmd := 'bcc32'.
cg@2724
  2571
        suite := 'Borland C-Compiler'.
cg@2724
  2572
    ].
cg@2724
  2573
    self usedCompilerHolder value = 'vc' ifTrue:[
cg@2724
  2574
        cmd := 'cl'.
cg@2724
  2575
        suite := 'Microsoft Visual C C-Compiler'.
cg@2724
  2576
        warnMsg2 := 'Due to bugs in this C-compiler, some classes may not be compilable.'.
cg@2724
  2577
    ].
cg@2724
  2578
    self usedCompilerHolder value = 'lcc' ifTrue:[
cg@2724
  2579
        cmd := 'lcc'.
cg@2724
  2580
        suite := 'LCC C-Compiler'.
cg@2724
  2581
        warnMsg2 := 'The LCC C-compiler suite is not yet supported (linkage).'.
cg@2724
  2582
    ].
cg@2724
  2583
    self usedCompilerHolder value = 'gcc' ifTrue:[
cg@2724
  2584
        cmd := 'gcc'.
cg@2724
  2585
        suite := 'GNU C-Compiler'.
cg@2724
  2586
        OperatingSystem isMSWINDOWSlike ifTrue:[
cg@2724
  2587
            warnMsg2 := 'The GNU C-compiler suite is not yet supported on MSDOS systems.'.
cg@2724
  2588
        ].
cg@2724
  2589
    ].
cg@2724
  2590
cg@2724
  2591
    (OperatingSystem canExecuteCommand:cmd) ifFalse:[
cg@2724
  2592
        warnMsg1 :=
cg@2724
  2593
'The "%1"-command seems to be not in your path.
cg@2724
  2594
Please ensure that you installed the 
cg@2724
  2595
"%2" compiler suite correctly.' bindWith:cmd with:suite.
cg@2724
  2596
    ].
cg@2724
  2597
cg@2724
  2598
    (warnMsg1 notEmpty or:[warnMsg2 notEmpty]) ifTrue:[
cg@2724
  2599
        sep := ''.
cg@2724
  2600
        (warnMsg2 notEmpty) ifTrue:[ sep := '\\' withCRs ].
cg@2724
  2601
cg@2724
  2602
        self compilerWarnMessageHolder value:('Warning:
cg@2724
  2603
cg@2724
  2604
',warnMsg1,sep,warnMsg2).
cg@2724
  2605
        self compilerWarnMessageVisibleHolder value:true.
cg@2724
  2606
    ] ifFalse:[
cg@2724
  2607
        self compilerWarnMessageVisibleHolder value:false
cg@2724
  2608
    ].
cg@2724
  2609
!
cg@2724
  2610
cg@2686
  2611
enterContentsSpecification
cg@2686
  2612
    |toAdd|
cg@2686
  2613
cg@2686
  2614
    self updateListOfClassesInProject.
cg@2686
  2615
cg@2686
  2616
    toAdd := OrderedCollection new.
cg@2686
  2617
cg@2686
  2618
    "/ ensure that startup & app-class are in the list
cg@2686
  2619
    selectedApplication notNil ifTrue:[
cg@2686
  2620
        (selectedProjectDefinition classNames includes:selectedApplication name) ifFalse:[
cg@2686
  2621
            toAdd add:selectedApplication.
cg@2686
  2622
        ].
cg@2686
  2623
    ].
cg@2686
  2624
    selectedStartupClass notNil ifTrue:[
cg@2686
  2625
        (selectedProjectDefinition classNames includes:selectedStartupClass name) ifFalse:[
cg@2686
  2626
            toAdd add:selectedStartupClass.
cg@2686
  2627
        ].
cg@2686
  2628
    ].
cg@2686
  2629
cg@2686
  2630
    selectedProjectDefinition includeClasses:toAdd usingCompiler:nil.
cg@2686
  2631
cg@2686
  2632
    self updateListOfClassesInProject.
cg@2686
  2633
!
cg@2686
  2634
cg@2872
  2635
enterPrerequisitesSpecification
cg@2872
  2636
    |toAdd|
cg@2872
  2637
cg@2872
  2638
    self updateListOfPrerequisitesInProject.
cg@2872
  2639
cg@2872
  2640
"/    toAdd := OrderedCollection new.
cg@2872
  2641
"/
cg@2872
  2642
"/    "/ ensure that startup & app-class are in the list
cg@2872
  2643
"/    selectedApplication notNil ifTrue:[
cg@2872
  2644
"/        (selectedProjectDefinition classNames includes:selectedApplication name) ifFalse:[
cg@2872
  2645
"/            toAdd add:selectedApplication.
cg@2872
  2646
"/        ].
cg@2872
  2647
"/    ].
cg@2872
  2648
"/    selectedStartupClass notNil ifTrue:[
cg@2872
  2649
"/        (selectedProjectDefinition classNames includes:selectedStartupClass name) ifFalse:[
cg@2872
  2650
"/            toAdd add:selectedStartupClass.
cg@2872
  2651
"/        ].
cg@2872
  2652
"/    ].
cg@2872
  2653
"/
cg@2872
  2654
"/    selectedProjectDefinition includeClasses:toAdd usingCompiler:nil.
cg@2872
  2655
"/
cg@2872
  2656
"/    self updateListOfClassesInProject.
cg@2872
  2657
cg@2872
  2658
    "Created: / 19-01-2012 / 15:36:47 / cg"
cg@2872
  2659
!
cg@2872
  2660
cg@2676
  2661
rememberMakeOutputsContents
cg@2676
  2662
    makeOutputHolder value:(makeOutputWindow contents)
cg@2646
  2663
!
cg@2646
  2664
cg@2724
  2665
rememberProjectAttributes
cg@2724
  2666
    self assert:selectedProjectDefinition notNil.
cg@2724
  2667
    Class withoutUpdatingChangesDo:[
cg@2724
  2668
        self productNameHolder value ~= selectedProjectDefinition productName ifTrue:[
cg@2724
  2669
            selectedProjectDefinition class compile:(selectedProjectDefinition 
cg@2724
  2670
                        productName_codeFor:(self productNameHolder value)).
cg@2724
  2671
        ].
cg@2724
  2672
        self companyNameHolder value ~= selectedProjectDefinition companyName ifTrue:[
cg@2724
  2673
            selectedProjectDefinition class compile:(selectedProjectDefinition 
cg@2724
  2674
                        companyName_codeFor:(self companyNameHolder value)).
cg@2724
  2675
        ]
cg@2724
  2676
    ].
cg@2724
  2677
!
cg@2724
  2678
cg@2676
  2679
restoreMakeOutputsContents
cg@2676
  2680
    makeOutputWindow contents:makeOutputHolder value
cg@2646
  2681
!
cg@2646