Tools__ProjectDefinitionEditor.st
author Claus Gittinger <cg@exept.de>
Wed, 06 Mar 2013 10:02:27 +0100
changeset 2963 7df17046fc89
parent 2727 e5f434daebb5
child 3523 25fa267c550a
permissions -rw-r--r--
class: UIPainterView changed: #findObjectAt: halts

"{ Package: 'stx:libtool2' }"

"{ NameSpace: Tools }"

ResourceSpecEditor subclass:#ProjectDefinitionEditor
	instanceVariableNames:'definitionClass classList extensionsList selectedClassIndexHolder
		classesTableColumns revisionNrHolder companyNameHolder
		fileMajorVersionNrHolder minorVersionNrHolder iconFileNameHolder
		fileReleaseNrHolder productNameHolder majorVersionNrHolder
		fileRevisionNrHolder fileDescriptionHolder releaseNrHolder
		fileMinorVersionNrHolder descriptionHolder legalCopyrightHolder
		isApplicationDefinitionHolder isNonGUIApplicationHolder
		startSinglethreadedHolder hasConsoleHolder shownHasConsoleHolder
		startupClassNameHolder startupSelectorHolder prerequisitesList
		classListHolder extensionsListHolder prerequisitesListHolder
		documentExtensionsListStringHolder stcOptimizationFlagsHolder
		ccOptimizationFlagsHolder'
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Tools'
!

Object subclass:#ClassListEntry
	instanceVariableNames:'className autoloaded win32 unix'
	classVariableNames:''
	poolDictionaries:''
	privateIn:ProjectDefinitionEditor
!

Object subclass:#ExtensionsListEntry
	instanceVariableNames:'className selector'
	classVariableNames:''
	poolDictionaries:''
	privateIn:ProjectDefinitionEditor
!

Object subclass:#PrerequisitesListEntry
	instanceVariableNames:'package'
	classVariableNames:''
	poolDictionaries:''
	privateIn:ProjectDefinitionEditor
!

!ProjectDefinitionEditor class methodsFor:'documentation'!

documentation
"
    unfinished app-definition editor

    [author:]
	cg (cg@FUSI)

    [instance variables:]

    [class variables:]

    [see also:]

"
!

examples
"
  Starting the application:
								[exBegin]
    (ProjectDefinitionEditor new
	definitionClass:stx_libbasic) open
								[exEnd]

								[exBegin]
    (ProjectDefinitionEditor new
	definitionClass:bosch_dapasx_application) open
								[exEnd]
"
! !

!ProjectDefinitionEditor class methodsFor:'help specs'!

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

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

    "
     UIHelpTool openOnClass:Tools::ProjectDefinitionEditor    
    "

    <resource: #help>

    ^ super flyByHelpSpec addPairsFrom:#(

#documentExtensions
'";"-separated list of file extensions'

)

    "Created: / 15-10-2006 / 14:34:57 / cg"
!

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

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

    "
     UIHelpTool openOnClass:Tools::ProjectDefinitionEditor    
    "

    <resource: #help>

    ^ super helpSpec addPairsFrom:#(

#documentExtensions
'";"-separated list of file extensions'

)
! !

!ProjectDefinitionEditor class methodsFor:'interface specs'!

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

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

    "
     UIPainter new openOnClass:Tools::ProjectDefinitionEditor andSelector:#classesSpec
     Tools::ProjectDefinitionEditor new openInterface:#classesSpec
    "

    <resource: #canvas>

    ^
     #(FullSpec
	name: classesSpec
	window:
       (WindowSpec
	  label: 'NewApplication'
	  name: 'NewApplication'
	  min: (Point 0 0)
	  bounds: (Rectangle 0 0 300 300)
	)
	component:
       (SpecCollection
	  collection: (
	   (DataSetSpec
	      name: 'ClassesTable'
	      layout: (LayoutFrame 0 0 0 0 0 1 0 1)
	      model: selectedClassIndexHolder
	      menu: classListMenu
	      hasHorizontalScrollBar: true
	      hasVerticalScrollBar: true
	      dataList: classListHolder
	      columnHolder: classesTableColumns
	    )
	   )

	)
      )

    "Modified: / 07-09-2006 / 11:35:14 / cg"
!

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

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

    "
     UIPainter new openOnClass:Tools::ProjectDefinitionEditor andSelector:#compilationSpec
     Tools::ProjectDefinitionEditor new openInterface:#compilationSpec
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: compilationSpec
        window: 
       (WindowSpec
          label: 'NewApplication'
          name: 'NewApplication'
          min: (Point 0 0)
          bounds: (Rectangle 0 0 433 300)
        )
        component: 
       (SpecCollection
          collection: (
           (FramedBoxSpec
              label: 'Optimization'
              name: 'FramedBox1'
              layout: (LayoutFrame 0 0 0 0 0 1 93 0)
              labelPosition: topLeft
              translateLabel: true
              component: 
             (SpecCollection
                collection: (
                 (LabelSpec
                    label: 'STC Optimization Flags:'
                    name: 'Label1'
                    layout: (LayoutFrame 0 0.0 7 0 160 0 29 0)
                    translateLabel: true
                    adjust: right
                  )
                 (ComboBoxSpec
                    name: 'STCOptimizationFlagsComboBox'
                    layout: (LayoutFrame 162 0.0 5 0 0 1.0 27 0)
                    model: stcOptimizationFlagsHolder
                    acceptOnPointerLeave: false
                    comboList: stcOptimizationFlagList
                    postBuildCallback: flagHolderBuilt:
                  )
                 (LabelSpec
                    label: 'CC Optimization Flags:'
                    name: 'Label2'
                    layout: (LayoutFrame 0 0.0 35 0 160 0 57 0)
                    translateLabel: true
                    adjust: right
                  )
                 (ComboBoxSpec
                    name: 'CCOptimizationFlagsComboBox'
                    layout: (LayoutFrame 162 0.0 33 0 0 1.0 55 0)
                    model: ccOptimizationFlagsHolder
                    acceptOnPointerLeave: false
                    comboList: ccOptimizationFlagList
                    postBuildCallback: flagHolderBuilt:
                  )
                 )
               
              )
            )
           (FramedBoxSpec
              label: 'Includes'
              name: 'FramedBox2'
              layout: (LayoutFrame 0 0 98 0 0 1 160 0)
              labelPosition: topLeft
              translateLabel: true
              component: 
             (SpecCollection
                collection: (
                 (LabelSpec
                    label: 'Additional Includes:'
                    name: 'Label3'
                    layout: (LayoutFrame 0 0.0 7 0 160 0 29 0)
                    translateLabel: true
                    adjust: right
                  )
                 (InputFieldSpec
                    name: 'IncludeFlagsEntryField'
                    layout: (LayoutFrame 162 0.0 5 0 0 1.0 27 0)
                    model: includeFlagsHolder
                    acceptOnReturn: true
                    acceptOnTab: true
                    acceptOnLostFocus: true
                    acceptOnPointerLeave: false
                  )
                 )
               
              )
            )
           )
         
        )
      )
!

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

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

    "
     UIPainter new openOnClass:ApplicationDefinitionBuilder andSelector:#descriptionSpec
     ApplicationDefinitionBuilder new openInterface:#descriptionSpec
    "

    <resource: #canvas>

    ^
     #(FullSpec
        name: descriptionSpec
        window:
       (WindowSpec
          label: 'NewApplication'
          name: 'NewApplication'
          min: (Point 0 0)
          bounds: (Rectangle 0 0 433 300)
        )
        component:
       (SpecCollection
          collection: (
           (LabelSpec
              label: 'Company:'
              name: 'CompanyLabel'
              layout: (LayoutFrame 2 0.0 13 0 160 0 35 0)
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'CompanyEntryField'
              layout: (LayoutFrame 162 0.0 12 0 -2 1.0 34 0)
              model: companyNameHolder
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (LabelSpec
              label: 'Description:'
              name: 'DescriptionLabel'
              layout: (LayoutFrame 2 0.0 39 0 160 0 61 0)
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'DescriptionEntryField'
              layout: (LayoutFrame 162 0.0 38 0 -2 1.0 60 0)
              model: descriptionHolder
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (LabelSpec
              label: 'ProductName:'
              name: 'ProductNameLabel'
              layout: (LayoutFrame 2 0.0 65 0 160 0 87 0)
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'ProductNameEntryField'
              layout: (LayoutFrame 162 0.0 64 0 -2 1.0 86 0)
              model: productNameHolder
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (LabelSpec
              label: 'ProductVersion:'
              name: 'ProductVersionLabel'
              layout: (LayoutFrame 2 0.0 91 0 160 0 113 0)
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'MajorVersionNrEntryField'
              layout: (LayoutFrame 162 0.0 90 0 182 0.0 112 0)
              model: majorVersionNrHolder
              type: number
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (InputFieldSpec
              name: 'MinorVersionNrEntryField'
              layout: (LayoutFrame 184 0.0 90 0 204 0.0 112 0)
              model: minorVersionNrHolder
              type: numberOrNil
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (InputFieldSpec
              name: 'RevisionNrEntryField'
              layout: (LayoutFrame 206 0.0 90 0 226 0.0 112 0)
              model: revisionNrHolder
              type: number
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (InputFieldSpec
              name: 'ReleaseNrEntryField'
              layout: (LayoutFrame 228 0.0 90 0 248 0.0 112 0)
              model: releaseNrHolder
              type: number
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (LabelSpec
              label: 'LegalCopyright:'
              name: 'LegalCopyrightLabel'
              layout: (LayoutFrame 2 0.0 119 0 160 0 141 0)
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'LegalCopyrightEntryField'
              layout: (LayoutFrame 162 0.0 118 0 -2 1.0 140 0)
              model: legalCopyrightHolder
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (LabelSpec
              label: 'FileDescriptionDescription:'
              name: 'FileDescriptionLabel'
              layout: (LayoutFrame 2 0.0 161 0 160 0 183 0)
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'FileDescriptionEntryField'
              layout: (LayoutFrame 162 0.0 160 0 -2 1.0 182 0)
              model: fileDescriptionHolder
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (LabelSpec
              label: 'FileVersion:'
              name: 'FileVersionLabel'
              layout: (LayoutFrame 2 0.0 187 0 160 0 209 0)
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'FileMajorVersionNrEntryField'
              layout: (LayoutFrame 162 0.0 186 0 182 0.0 208 0)
              model: fileMajorVersionNrHolder
              type: number
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (InputFieldSpec
              name: 'FileMinorVersionNrEntryField'
              layout: (LayoutFrame 184 0.0 186 0 204 0.0 208 0)
              model: fileMinorVersionNrHolder
              type: number
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (InputFieldSpec
              name: 'FileRevisionNrEntryField'
              layout: (LayoutFrame 206 0.0 186 0 226 0.0 208 0)
              model: fileRevisionNrHolder
              type: number
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (InputFieldSpec
              name: 'FileReleaseNrEntryField'
              layout: (LayoutFrame 228 0.0 186 0 248 0.0 208 0)
              model: fileReleaseNrHolder
              type: number
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           (LabelSpec
              label: 'Icon Filename:'
              name: 'IconFileNameLabel'
              layout: (LayoutFrame 2 0.0 236 0 160 0 258 0)
              visibilityChannel: isApplicationDefinitionHolder
              translateLabel: true
              adjust: right
            )
           (InputFieldSpec
              name: 'IconFileNameEntryField'
              layout: (LayoutFrame 162 0.0 234 0 -2 1.0 256 0)
              visibilityChannel: isApplicationDefinitionHolder
              model: iconFileNameHolder
              acceptOnReturn: true
              acceptOnTab: true
              acceptOnLostFocus: true
              acceptOnPointerLeave: false
            )
           )

        )
      )
!

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

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

    "
     UIPainter new openOnClass:ApplicationDefinitionEditor andSelector:#extensionsSpec
     ApplicationDefinitionEditor new openInterface:#extensionsSpec
    "

    <resource: #canvas>

    ^
     #(FullSpec
	name: extensionsSpec
	window:
       (WindowSpec
	  label: 'NewApplication'
	  name: 'NewApplication'
	  min: (Point 0 0)
	  bounds: (Rectangle 0 0 300 300)
	)
	component:
       (SpecCollection
	  collection: (
	   (DataSetSpec
	      name: 'ExtensionsTable'
	      layout: (LayoutFrame 0 0 0 0 0 1 0 1)
	      model: selectedExtensionIndexHolder
	      hasHorizontalScrollBar: true
	      hasVerticalScrollBar: true
	      dataList: extensionsListHolder
	      columnHolder: extensionsTableColumns
	    )
	   )

	)
      )

    "Modified: / 07-09-2006 / 11:35:17 / cg"
!

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

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

    "
     UIPainter new openOnClass:ApplicationDefinitionEditor andSelector:#extensionsSpec
     ApplicationDefinitionEditor new openInterface:#extensionsSpec
    "

    <resource: #canvas>

    ^
     #(FullSpec
	name: extensionsSpec
	window:
       (WindowSpec
	  label: 'NewApplication'
	  name: 'NewApplication'
	  min: (Point 0 0)
	  bounds: (Rectangle 0 0 300 300)
	)
	component:
       (SpecCollection
	  collection: (
	   (DataSetSpec
	      name: 'ExtensionsTable'
	      layout: (LayoutFrame 0 0 0 0 0 1 0 1)
	      model: selectedPrerequisitesIndexHolder
	      hasHorizontalScrollBar: true
	      hasVerticalScrollBar: true
	      dataList: prerequisitesListHolder
	      columnHolder: prerequisitesTableColumns
	    )
	   )

	)
      )

    "Created: / 05-09-2006 / 13:21:32 / cg"
    "Modified: / 07-09-2006 / 11:35:20 / cg"
!

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

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

    "
     UIPainter new openOnClass:Tools::ProjectDefinitionEditor andSelector:#startupSpec
     Tools::ProjectDefinitionEditor new openInterface:#startupSpec
    "

    <resource: #canvas>

    ^ 
     #(FullSpec
        name: startupSpec
        window: 
       (WindowSpec
          label: 'NewApplication'
          name: 'NewApplication'
          min: (Point 0 0)
          bounds: (Rectangle 0 0 433 300)
        )
        component: 
       (SpecCollection
          collection: (
           (FramedBoxSpec
              label: 'Startup'
              name: 'StartupFrame'
              layout: (LayoutFrame 0 0 0 0 0 1 93 0)
              labelPosition: topLeft
              translateLabel: true
              component: 
             (SpecCollection
                collection: (
                 (LabelSpec
                    label: 'Startup Class:'
                    name: 'Label1'
                    layout: (LayoutFrame 0 0.0 7 0 160 0 29 0)
                    translateLabel: true
                    adjust: right
                  )
                 (InputFieldSpec
                    name: 'StartupClassEntryField'
                    layout: (LayoutFrame 162 0.0 5 0 0 1.0 27 0)
                    model: startupClassNameHolder
                    acceptOnReturn: true
                    acceptOnTab: true
                    acceptOnLostFocus: true
                    acceptOnPointerLeave: false
                  )
                 (LabelSpec
                    label: 'Startup Selector:'
                    name: 'Label2'
                    layout: (LayoutFrame 0 0.0 35 0 160 0 57 0)
                    translateLabel: true
                    adjust: right
                  )
                 (InputFieldSpec
                    name: 'StartupSelectorEntryField'
                    layout: (LayoutFrame 162 0.0 33 0 0 1.0 55 0)
                    model: startupSelectorHolder
                    acceptOnReturn: true
                    acceptOnTab: true
                    acceptOnLostFocus: true
                    acceptOnPointerLeave: false
                  )
                 )
               
              )
            )
           (FramedBoxSpec
              label: 'Execution'
              name: 'ExecutionFrame'
              layout: (LayoutFrame 0 0 94 0 0 1 176 0)
              labelPosition: topLeft
              translateLabel: true
              component: 
             (SpecCollection
                collection: (
                 (CheckBoxSpec
                    label: 'Non-GUI Application'
                    name: 'Non-GUI CheckBox'
                    layout: (LayoutFrame 0 0.0 7 0 0 0.5 29 0)
                    model: isNonGUIApplicationHolder
                    translateLabel: true
                  )
                 (CheckBoxSpec
                    label: 'Singlethreaded'
                    name: 'SinglethreadedCheckBox'
                    layout: (LayoutFrame 0 0.5 7 0 0 1 29 0)
                    enableChannel: isNonGUIApplicationHolder
                    model: startSinglethreadedHolder
                    translateLabel: true
                  )
                 (CheckBoxSpec
                    label: 'Has Console'
                    name: 'HasConsoleCheckBox1'
                    layout: (LayoutFrame 0 0.5 34 0 0 1 56 0)
                    enableChannel: isGUIApplicationHolder
                    model: shownHasConsoleHolder
                    translateLabel: true
                  )
                 )
               
              )
            )
           (FramedBoxSpec
              label: 'File Extensions'
              name: 'FileExtensionsFrame'
              layout: (LayoutFrame 0 0 177 0 0 1 237 0)
              labelPosition: topLeft
              translateLabel: true
              component: 
             (SpecCollection
                collection: (
                 (LabelSpec
                    label: 'Document Extensions:'
                    name: 'Label3'
                    layout: (LayoutFrame 0 0.0 7 0 160 0 29 0)
                    activeHelpKey: documentExtensions
                    translateLabel: true
                    adjust: right
                  )
                 (InputFieldSpec
                    activeHelpKey: documentExtensions
                    name: 'EntryField1'
                    layout: (LayoutFrame 162 0.0 5 0 0 1.0 27 0)
                    model: documentExtensionsListStringHolder
                    type: string
                    acceptOnReturn: true
                    acceptOnTab: true
                    acceptOnLostFocus: true
                    acceptOnPointerLeave: false
                  )
                 )
               
              )
            )
           )
         
        )
      )

    "Modified: / 15-10-2006 / 14:35:12 / cg"
!

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

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

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

    <resource: #canvas>

    ^
     #(FullSpec
	name: windowSpec
	window:
       (WindowSpec
	  label: 'ApplicationDefinitionBuilder'
	  name: 'ApplicationDefinitionBuilder'
	  min: (Point 10 10)
	  max: (Point 1024 768)
	  bounds: (Rectangle 0 0 596 339)
	  menu: mainMenu
	)
	component:
       (SpecCollection
	  collection: (
	   (NoteBookViewSpec
	      name: 'NoteBook1'
	      layout: (LayoutFrame 0 0 0 0 0 1 0 1)
	      model: selectedTabIndexHolder
	      menu: tabList
	      useIndex: true
	    )
	   )

	)
      )

    "Modified: / 03-09-2006 / 10:57:33 / cg"
! !

!ProjectDefinitionEditor class methodsFor:'list specs'!

tabList
^ self  tabListForApplication.

    "Created: / 06-09-2006 / 13:38:03 / cg"
!

tabListForApplication
    "This resource specification was automatically generated
     by the TabListEditor of ST/X."

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

    "
     TabListEditor new openOnClass: self andSelector:#tabList
    "

    <resource: #tabList>

    ^     #(
       (TabItem
	  label: 'Description'
	  minorKey: descriptionSpec
	)
       (TabItem
	  label: 'Classes'
	  createNewBuilder: false
	  translateLabel: true
	  minorKey: classesSpec
	)
       (TabItem
	  label: 'Extensions'
	  minorKey: extensionsSpec
	)
       (TabItem
	  label: 'Prerequisites'
	  minorKey: prerequisitesSpec
	)
       (TabItem
	  label: 'Compilation'
	  minorKey: compilationSpec
	)
       (TabItem
	  label: 'Startup'
	  minorKey: startupSpec
	)
       )

      collect:[:aTab| TabItem new fromLiteralArrayEncoding:aTab ]

    "Created: / 05-09-2006 / 16:24:48 / cg"
    "Modified: / 06-09-2006 / 18:44:34 / cg"
!

tabListForLibrary
    "This resource specification was automatically generated
     by the TabListEditor of ST/X."

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

    "
     TabListEditor new openOnClass: self andSelector:#tabList
    "

    <resource: #tabList>

    ^     #(
       (TabItem
	  label: 'Description'
	  minorKey: descriptionSpec
	)
       (TabItem
	  label: 'Classes'
	  createNewBuilder: false
	  translateLabel: true
	  minorKey: classesSpec
	)
       (TabItem
	  label: 'Extensions'
	  minorKey: extensionsSpec
	)
       (TabItem
	  label: 'Prerequisites'
	  minorKey: prerequisitesSpec
	)
       (TabItem
	  label: 'Compilation'
	  minorKey: compilationSpec
	)
       )

      collect:[:aTab| TabItem new fromLiteralArrayEncoding:aTab ]

    "Created: / 05-09-2006 / 16:24:52 / cg"
    "Modified: / 06-09-2006 / 18:44:38 / cg"
! !

!ProjectDefinitionEditor class methodsFor:'menu specs'!

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

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

    "
     MenuEditor new openOnClass:Tools::ProjectDefinitionEditor andSelector:#classListMenu
     (Menu new fromLiteralArrayEncoding:(Tools::ProjectDefinitionEditor classListMenu)) startUp
    "

    <resource: #menu>

    ^
     #(Menu
	(
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Generate'
	    itemValue: menuGenerateClassList
	    translateLabel: true
	  )
	 (MenuItem
	    label: '-'
	  )
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Add...'
	    itemValue: menuAddClass
	    translateLabel: true
	  )
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Remove...'
	    itemValue: menuRemoveClass
	    translateLabel: true
	  )
	 )
	nil
	nil
      )
!

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

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

    "
     MenuEditor new openOnClass:Tools::ProjectDefinitionEditor andSelector:#extensionsListMenu
     (Menu new fromLiteralArrayEncoding:(Tools::ProjectDefinitionEditor extensionsListMenu)) startUp
    "

    <resource: #menu>

    ^
     #(Menu
	(
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Generate'
	    itemValue: menuGenerateExtensionsList
	    translateLabel: true
	  )
	 (MenuItem
	    label: '-'
	  )
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Add...'
	    itemValue: menuAddExtension
	    translateLabel: true
	  )
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Remove...'
	    itemValue: menuRemoveExtension
	    translateLabel: true
	  )
	 )
	nil
	nil
      )
!

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

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

    "
     MenuEditor new openOnClass:Tools::ProjectDefinitionEditor andSelector:#mainMenu
     (Menu new fromLiteralArrayEncoding:(Tools::ProjectDefinitionEditor mainMenu)) startUp
    "

    <resource: #menu>

    ^ 
     #(Menu
        (
         (MenuItem
            label: 'File'
            translateLabel: true
            submenu: 
           (Menu
              (
               (MenuItem
                  label: 'New Library'
                  itemValue: menuNewLibraryDefinition
                  translateLabel: true
                )
               (MenuItem
                  label: 'New Application'
                  itemValue: menuNewApplicationDefinition
                  translateLabel: true
                )
               (MenuItem
                  label: '-'
                )
               (MenuItem
                  label: 'Open...'
                  itemValue: menuOpen
                  translateLabel: true
                )
               (MenuItem
                  label: '-'
                )
               (MenuItem
                  enabled: hasDefinitionClassHolder
                  label: 'Save'
                  itemValue: menuSave
                  translateLabel: true
                )
               (MenuItem
                  enabled: hasDefinitionClassHolder
                  label: 'Save As...'
                  itemValue: menuSaveAs
                  translateLabel: true
                )
               (MenuItem
                  label: '-'
                )
               (MenuItem
                  label: 'Exit'
                  itemValue: closeRequest
                  translateLabel: true
                )
               )
              nil
              nil
            )
          )
         (MenuItem
            label: 'Definition'
            translateLabel: true
            submenu: 
           (Menu
              (
               (MenuItem
                  enabled: hasDefinitionClassHolder
                  label: 'Generate Definitions'
                  itemValue: menuGenerateProjectDefinitions
                  translateLabel: true
                )
               )
              nil
              nil
            )
          )
         (MenuItem
            label: 'Classes'
            translateLabel: true
            isVisible: classesMenuVisibleHolder
            submenuChannel: classListMenu
            keepLinkedMenu: true
          )
         (MenuItem
            label: 'Extensions'
            translateLabel: true
            isVisible: extensionsMenuVisibleHolder
            submenuChannel: extensionsListMenu
            keepLinkedMenu: true
          )
         (MenuItem
            label: 'Prerequisites'
            translateLabel: true
            isVisible: prerequisitesMenuVisibleHolder
            submenuChannel: prerequisitesListMenu
            keepLinkedMenu: true
          )
         (MenuItem
            label: 'MENU_Help'
            translateLabel: true
            startGroup: conditionalRight
            submenu: 
           (Menu
              (
               (MenuItem
                  label: 'Documentation'
                  itemValue: openDocumentation
                  translateLabel: true
                )
               (MenuItem
                  label: '-'
                )
               (MenuItem
                  label: 'About this Application...'
                  itemValue: openAboutThisApplication
                  translateLabel: true
                )
               )
              nil
              nil
            )
          )
         )
        nil
        nil
      )
!

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

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

    "
     MenuEditor new openOnClass:Tools::ProjectDefinitionEditor andSelector:#prerequisitesListMenu
     (Menu new fromLiteralArrayEncoding:(Tools::ProjectDefinitionEditor prerequisitesListMenu)) startUp
    "

    <resource: #menu>

    ^
     #(Menu
	(
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Generate'
	    itemValue: menuGeneratePrerequisitesList
	    translateLabel: true
	  )
	 (MenuItem
	    label: '-'
	  )
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Add...'
	    itemValue: menuAddPrerequisite
	    translateLabel: true
	  )
	 (MenuItem
	    enabled: hasDefinitionClassHolder
	    label: 'Remove...'
	    itemValue: menuRemovePrerequisite
	    translateLabel: true
	  )
	 )
	nil
	nil
      )
! !

!ProjectDefinitionEditor class methodsFor:'tableColumns specs'!

classesTableColumns
    "This resource specification was automatically generated
     by the DataSetBuilder of ST/X."

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

    "
     DataSetBuilder new openOnClass:Tools::ProjectDefinitionEditor andSelector:#classesTableColumns
    "

    <resource: #tableColumns>

    ^#(
      (DataSetColumnSpec
         label: 'Class'
         labelAlignment: left
         labelButtonType: Button
         model: className
         canSelect: false
       )
      (DataSetColumnSpec
         label: 'Auto'
         labelButtonType: Button
         editorType: CheckToggle
         rendererType: CheckToggle
         model: autoloaded
       )
      (DataSetColumnSpec
         label: 'Win32'
         labelButtonType: Button
         editorType: CheckToggle
         rendererType: CheckToggle
         model: win32
       )
      (DataSetColumnSpec
         label: 'Unix'
         labelButtonType: Button
         editorType: CheckToggle
         rendererType: CheckToggle
         model: unix
       )
      )
    
!

extensionsTableColumns
    "This resource specification was automatically generated
     by the DataSetBuilder of ST/X."

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

    "
     DataSetBuilder new openOnClass:Tools::ProjectDefinitionEditor andSelector:#extensionsTableColumns
    "

    <resource: #tableColumns>

    ^#(
      (DataSetColumnSpec
	 label: 'Class'
	 labelAlignment: left
	 labelButtonType: Button
	 model: className
	 canSelect: false
       )
      (DataSetColumnSpec
	 label: 'Selector'
	 labelAlignment: left
	 labelButtonType: Button
	 model: selector
	 canSelect: false
       )
      )

!

prerequisitesTableColumns
    "This resource specification was automatically generated
     by the DataSetBuilder of ST/X."

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

    "
     DataSetBuilder new openOnClass:Tools::ProjectDefinitionEditor andSelector:#prerequisitesTableColumns
    "

    <resource: #tableColumns>

    ^#(
      (DataSetColumnSpec
	 label: 'Package'
	 labelAlignment: left
	 labelButtonType: Button
	 model: package
       )
      )

! !

!ProjectDefinitionEditor methodsFor:'accessing'!

definitionClass
    ^ definitionClass

    "Created: / 04-09-2006 / 16:30:09 / cg"
!

definitionClass:aClass
    definitionClass := aClass.
    self refetchDefinitionValues.

    "Created: / 04-09-2006 / 16:30:18 / cg"
    "Modified: / 07-09-2006 / 12:26:57 / cg"
!

specClass:aClass
    super specClass:aClass.
    self definitionClass:aClass theNonMetaclass.

    "Created: / 06-09-2006 / 19:24:10 / cg"
! !

!ProjectDefinitionEditor methodsFor:'aspects'!

ccOptimizationFlagList
    ^ #(
        '-O'
        '-g'
    )

    "Created: / 15-10-2006 / 15:14:39 / cg"
!

ccOptimizationFlagsHolder
    ccOptimizationFlagsHolder isNil ifTrue:[
        ccOptimizationFlagsHolder := ValueHolder new.
    ].
    ^ ccOptimizationFlagsHolder

    "Created: / 15-10-2006 / 15:13:14 / cg"
!

classListHolder
    classListHolder isNil ifTrue:[
	classListHolder := #() asValue.
    ].
    ^ classListHolder.

    "Created: / 07-09-2006 / 11:34:35 / cg"
!

classesTableColumns
    classesTableColumns isNil ifTrue:[
	classesTableColumns := self class classesTableColumns asValue.
    ].
    ^ classesTableColumns.

    "Modified: / 04-09-2006 / 17:58:09 / cg"
!

companyNameHolder
    companyNameHolder isNil ifTrue:[
	companyNameHolder := ValueHolder new.
    ].
    ^ companyNameHolder.

    "Created: / 04-09-2006 / 17:58:02 / cg"
!

descriptionHolder
    descriptionHolder isNil ifTrue:[
	descriptionHolder := ValueHolder new.
    ].
    ^ descriptionHolder.

    "Modified: / 04-09-2006 / 17:58:15 / cg"
!

documentExtensionsListStringHolder
    documentExtensionsListStringHolder isNil ifTrue:[
        documentExtensionsListStringHolder := '' asValue.
    ].
    ^ documentExtensionsListStringHolder.

    "Created: / 15-10-2006 / 14:32:29 / cg"
!

extensionsListHolder
    extensionsListHolder isNil ifTrue:[
	extensionsListHolder := #() asValue.
    ].
    ^ extensionsListHolder.

    "Created: / 07-09-2006 / 11:34:50 / cg"
!

fileDescriptionHolder
    fileDescriptionHolder isNil ifTrue:[
	fileDescriptionHolder := ValueHolder new.
    ].
    ^ fileDescriptionHolder.

    "Modified: / 04-09-2006 / 17:58:19 / cg"
!

fileMajorVersionNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    fileMajorVersionNrHolder isNil ifTrue:[
	fileMajorVersionNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       fileMajorVersionNrHolder addDependent:self.
"/       fileMajorVersionNrHolder onChangeSend:#fileMajorVersionNrHolderChanged to:self.
    ].
    ^ fileMajorVersionNrHolder.
!

fileMinorVersionNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    fileMinorVersionNrHolder isNil ifTrue:[
	fileMinorVersionNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       fileMinorVersionNrHolder addDependent:self.
"/       fileMinorVersionNrHolder onChangeSend:#fileMinorVersionNrHolderChanged to:self.
    ].
    ^ fileMinorVersionNrHolder.
!

fileReleaseNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    fileReleaseNrHolder isNil ifTrue:[
	fileReleaseNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       fileReleaseNrHolder addDependent:self.
"/       fileReleaseNrHolder onChangeSend:#fileReleaseNrHolderChanged to:self.
    ].
    ^ fileReleaseNrHolder.
!

fileRevisionNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    fileRevisionNrHolder isNil ifTrue:[
	fileRevisionNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       fileRevisionNrHolder addDependent:self.
"/       fileRevisionNrHolder onChangeSend:#fileRevisionNrHolderChanged to:self.
    ].
    ^ fileRevisionNrHolder.
!

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

    "Created: / 20-09-2006 / 14:39:18 / cg"
!

iconFileNameHolder
    iconFileNameHolder isNil ifTrue:[
	iconFileNameHolder := ValueHolder new.
    ].
    ^ iconFileNameHolder.

    "Created: / 04-09-2006 / 18:01:22 / cg"
!

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

    "Created: / 04-09-2006 / 19:22:47 / cg"
!

isGUIApplicationHolder
    ^ BlockValue forLogicalNot:self isNonGUIApplicationHolder

    "Created: / 20-09-2006 / 14:38:32 / cg"
!

isNonGUIApplicationHolder
    isNonGUIApplicationHolder isNil ifTrue:[
        isNonGUIApplicationHolder := false asValue.
        isNonGUIApplicationHolder addDependent:self.
    ].
    ^ isNonGUIApplicationHolder.

    "Created: / 05-09-2006 / 13:34:31 / cg"
    "Modified: / 15-10-2006 / 14:00:03 / cg"
!

legalCopyrightHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    legalCopyrightHolder isNil ifTrue:[
	legalCopyrightHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       legalCopyrightHolder addDependent:self.
"/       legalCopyrightHolder onChangeSend:#legalCopyrightHolderChanged to:self.
    ].
    ^ legalCopyrightHolder.
!

majorVersionNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    majorVersionNrHolder isNil ifTrue:[
	majorVersionNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       majorVersionNrHolder addDependent:self.
"/       majorVersionNrHolder onChangeSend:#majorVersionNrHolderChanged to:self.
    ].
    ^ majorVersionNrHolder.
!

minorVersionNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    minorVersionNrHolder isNil ifTrue:[
	minorVersionNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       minorVersionNrHolder addDependent:self.
"/       minorVersionNrHolder onChangeSend:#minorVersionNrHolderChanged to:self.
    ].
    ^ minorVersionNrHolder.
!

prerequisitesListHolder
    prerequisitesListHolder isNil ifTrue:[
	prerequisitesListHolder := #() asValue.
    ].
    ^ prerequisitesListHolder.

    "Created: / 07-09-2006 / 11:35:03 / cg"
!

productNameHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    productNameHolder isNil ifTrue:[
	productNameHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       productNameHolder addDependent:self.
"/       productNameHolder onChangeSend:#productNameHolderChanged to:self.
    ].
    ^ productNameHolder.
!

releaseNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    releaseNrHolder isNil ifTrue:[
	releaseNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       releaseNrHolder addDependent:self.
"/       releaseNrHolder onChangeSend:#releaseNrHolderChanged to:self.
    ].
    ^ releaseNrHolder.
!

revisionNrHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    revisionNrHolder isNil ifTrue:[
	revisionNrHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       revisionNrHolder addDependent:self.
"/       revisionNrHolder onChangeSend:#revisionNrHolderChanged to:self.
    ].
    ^ revisionNrHolder.
!

selectedClassIndexHolder
    "automatically generated by UIPainter ..."

    "*** the code below creates a default model when invoked."
    "*** (which may not be the one you wanted)"
    "*** Please change as required and accept it in the browser."
    "*** (and replace this comment by something more useful ;-)"

    selectedClassIndexHolder isNil ifTrue:[
	selectedClassIndexHolder := ValueHolder new.
"/ if your app needs to be notified of changes, uncomment one of the lines below:
"/       selectedClassIndexHolder addDependent:self.
"/       selectedClassIndexHolder onChangeSend:#selectedClassIndexHolderChanged to:self.
    ].
    ^ selectedClassIndexHolder.
!

shownHasConsoleHolder
    shownHasConsoleHolder isNil ifTrue:[
        shownHasConsoleHolder := IndirectValue for:self hasConsoleHolder.
    ].
    ^ shownHasConsoleHolder

    "Created: / 15-10-2006 / 13:59:01 / cg"
!

shownHasConsoleValue
    ^ BlockValue 
        with:[:m1 :m2 | self isGUIApplicationHolder value not
                        or:[ self hasConsoleHolder value] ]
        argument:(self hasConsoleHolder)
        argument:(self isGUIApplicationHolder).

    "Created: / 15-10-2006 / 13:54:16 / cg"
!

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

    "Created: / 05-09-2006 / 13:34:54 / cg"
!

startupClassNameHolder
    startupClassNameHolder isNil ifTrue:[
	startupClassNameHolder := '' asValue.
    ].
    ^ startupClassNameHolder.

    "Created: / 06-09-2006 / 18:41:52 / cg"
!

startupSelectorHolder
    startupSelectorHolder isNil ifTrue:[
	startupSelectorHolder := '' asValue.
    ].
    ^ startupSelectorHolder.

    "Created: / 05-09-2006 / 13:34:20 / cg"
!

stcOptimizationFlagList
    ^ #(
        '+optSpace'
        '+optSpace2'
        '+optSpace3'
        '+optInline'
        '-optInline'
        '-inlineNew'
        '-inlineNot'
    )

    "Created: / 15-10-2006 / 15:14:29 / cg"
!

stcOptimizationFlagsHolder
    stcOptimizationFlagsHolder isNil ifTrue:[
        stcOptimizationFlagsHolder := ValueHolder new.
    ].
    ^ stcOptimizationFlagsHolder

    "Modified: / 15-10-2006 / 15:13:10 / cg"
!

tabList
    "Generated by the TabListEditor"

    |list|

    (list := builder bindingAt:#tabList) isNil ifTrue:[
	builder aspectAt:#tabList put:(list := self class tabListForApplication asValue).
    ].
    ^ list

    "Modified: / 06-09-2006 / 17:58:08 / cg"
! !

!ProjectDefinitionEditor methodsFor:'aspects-menu'!

classesMenuVisibleHolder
    ^ builder booleanValueAspectFor:#'classesMenuVisibleHolder'

    "Modified: / 03-09-2006 / 10:57:00 / cg"
!

extensionsMenuVisibleHolder
    ^ builder booleanValueAspectFor:#'extensionsMenuVisibleHolder'

    "Created: / 05-09-2006 / 13:03:16 / cg"
!

hasDefinitionClass
    ^ definitionClass notNil

    "Created: / 07-09-2006 / 12:29:10 / cg"
!

hasDefinitionClassHolder
    ^ [ self hasDefinitionClass ]

    "Created: / 07-09-2006 / 12:29:22 / cg"
!

prerequisitesMenuVisibleHolder
    ^ builder booleanValueAspectFor:#'prerequisitesMenuVisibleHolder'

    "Created: / 05-09-2006 / 13:26:45 / cg"
!

selectedTabIndexHolder
    |h|

    h := builder valueAspectFor:#'selectedTabIndexHolder' initialValue:nil.
    h addDependent:self.
    ^ h

    "Created: / 03-09-2006 / 10:58:05 / cg"
! !

!ProjectDefinitionEditor methodsFor:'change & update'!

fetchClassListEntries
    |entries|

    entries := OrderedCollection new.
    definitionClass
        classNamesAndAttributesDo:[:className :attributes |
            |entry|

            entry := ClassListEntry new.
            entry
                className:className
                autoloaded:(attributes includes:#autoload)
                win32:(attributes includes:#win32)
                unix:(attributes includes:#unix).
            entries add:entry.
        ].
    entries sort:[:a :b | a className < b className].
    ^ entries.

    "Created: / 05-09-2006 / 12:31:26 / cg"
    "Modified: / 21-11-2006 / 18:04:35 / cg"
!

fetchExtensionsListEntries
    |entries|

    entries := OrderedCollection new.
    definitionClass
	extensionMethodNames pairWiseDo:[:className :selector |
	    |entry|

	    entry := ExtensionsListEntry new.
	    entry className:className selector:selector.
	    entries add:entry.
	].

    ^ entries.

    "Created: / 06-09-2006 / 18:45:15 / cg"
!

fetchPrerequisitesListEntries
    |entries|

    entries := OrderedCollection new.
    definitionClass
	preRequisites do:[:packageName |
	    |entry|

	    entry := PrerequisitesListEntry new.
	    entry package:packageName.
	    entries add:entry.
	].

    ^ entries.

    "Created: / 06-09-2006 / 18:45:15 / cg"
    "Modified: / 07-09-2006 / 12:36:21 / cg"
!

fetchValues
    |definitionClass isApplicationDefinition startupClassName startupSelector|

    definitionClass := self definitionClass.
    definitionClass isNil ifTrue:[^ self ].

    isApplicationDefinition := definitionClass isApplicationDefinition.

    self isApplicationDefinitionHolder value:isApplicationDefinition.
    self isNonGUIApplicationHolder value:(isApplicationDefinition and:[definitionClass isGUIApplication not]).
    self hasConsoleHolder value:(isApplicationDefinition and:[definitionClass isConsoleApplication]).
    self startSinglethreadedHolder value:(isApplicationDefinition and:[definitionClass isSingleThreadedApplication]).

    isApplicationDefinition ifTrue:[
        startupClassName := definitionClass name.
        startupSelector := #start.

        Error handle:[:ex | ] do:[ startupClassName := definitionClass startupClassName].
        Error handle:[:ex | ] do:[ startupSelector := definitionClass startupSelector].
        self startupClassNameHolder value:startupClassName.
        self startupSelectorHolder value:startupSelector.

        self iconFileNameHolder value:(definitionClass applicationIconFileName).
        self tabList value:(self class tabListForApplication).
        self documentExtensionsListStringHolder value:(definitionClass documentExtensions asStringWith:';').
    ] ifFalse:[
        self tabList value:(self class tabListForLibrary).
    ].

    self companyNameHolder value:(definitionClass companyName).
    self descriptionHolder value:(definitionClass description).
    self legalCopyrightHolder value:(definitionClass legalCopyright).
    self productNameHolder value:(definitionClass productName).
    self majorVersionNrHolder value:(definitionClass majorVersionNr asInteger).
    self minorVersionNrHolder value:(definitionClass minorVersionNr asInteger).
    self revisionNrHolder value:(definitionClass revisionNr asInteger).
    self releaseNrHolder value:(definitionClass releaseNr asInteger).

    self fileDescriptionHolder value:(definitionClass fileDescription).
    self fileMajorVersionNrHolder value:(definitionClass fileMajorVersionNr asInteger).
    self fileMinorVersionNrHolder value:(definitionClass fileMinorVersionNr asInteger).
    self fileRevisionNrHolder value:(definitionClass fileRevisionNr asInteger).
    self fileReleaseNrHolder value:(definitionClass fileReleaseNr asInteger).

    self classListHolder value:(self fetchClassListEntries).
    self extensionsListHolder value:(self fetchExtensionsListEntries).
    self prerequisitesListHolder value:(self fetchPrerequisitesListEntries).

    self window notNil ifTrue:[
        self window
            label:(isApplicationDefinition
                    ifTrue:'Application'
                    ifFalse:'Library' )
                        , ' Definition: ',definitionClass name.
    ].

    "Created: / 04-09-2006 / 16:34:39 / cg"
    "Modified: / 15-10-2006 / 14:32:45 / cg"
!

refetchDefinitionValues
    self isApplicationDefinitionHolder value:( definitionClass isApplicationDefinition ).
    self fetchValues.

    "Created: / 07-09-2006 / 12:26:54 / cg"
!

update:something with:parameter from:changedObject
    changedObject == self selectedTabIndexHolder ifTrue:[
        self updateMenuVisibility.
        ^ self.
    ].
    changedObject == self isNonGUIApplicationHolder ifTrue:[
        changedObject value ifTrue:[
            "/ a NON-GUI application - always has a console
            self shownHasConsoleHolder valueHolder:true
        ] ifFalse:[
            "/ a GUI application - sometimes has a console
            self shownHasConsoleHolder valueHolder:(self hasConsoleHolder)
        ].
        ^ self.
    ].
    ^ super update:something with:parameter from:changedObject

    "Created: / 03-09-2006 / 10:59:42 / cg"
    "Modified: / 15-10-2006 / 14:08:23 / cg"
!

updateMenuVisibility
    self classesMenuVisibleHolder value:(self hasClassesTabSelected).
    self extensionsMenuVisibleHolder value:(self hasExtensionsTabSelected).
    self prerequisitesMenuVisibleHolder value:(self hasPrerequisitesTabSelected).

    "Created: / 03-09-2006 / 11:01:48 / cg"
    "Modified: / 05-09-2006 / 13:27:10 / cg"
! !

!ProjectDefinitionEditor methodsFor:'initialization & release'!

closeRequest
    (self hasUnsavedChanges) ifTrue:[
	(self confirm:(resources string:'Close without saving ?')) ifFalse:[
	    ^ self
	]
    ].

    ^ super closeRequest

    "Modified: / 03-09-2006 / 10:53:14 / cg"
!

flagHolderBuilt:aComboBox
    aComboBox menuSelectAction:[:txt |
        self updateFlagsIn:aComboBox from:txt
    ].

    "Created: / 15-10-2006 / 15:11:50 / cg"
!

postBuildWith:aBuilder
    super postBuildWith:aBuilder.
    self selectedTabIndexHolder value:1.
    self updateMenuVisibility.
    self fetchValues.

    "Modified: / 04-09-2006 / 16:28:09 / cg"
!

postOpenWith:aBuilder
    "This is a hook method generated by the Browser.
     It will be invoked right after the applications window has been opened.
     Add any app-specific actions here (starting background processes etc.).
     See also #postBuildWith:, which is invoked before opening."

    "/ add any code here ...

    ^ super postOpenWith:aBuilder
! !

!ProjectDefinitionEditor methodsFor:'menu actions'!

editNew:definitionClass
    |className class newPackage|

    self hasUnsavedChanges ifTrue:[
        self halt.
    ].
    className := Dialog
                    requestClassName:'Name of new Definition class'
                    okLabel:'Create'
                    initialAnswer:'private_myProject'.
    className isEmptyOrNil ifTrue:[^ self].

    class := Smalltalk classNamed:className.
    class notNil ifTrue:[
        (class isLibraryDefinition == (definitionClass == LibraryDefinition)) ifFalse:[
            Dialog warn:(resources
                            string:'A class named "%1" already exists as %2.'
                            with:className allBold
                            with:(class isLibraryDefinition 
                                    ifTrue:'Library'
                                    ifFalse:'Application')).
            ^ self
        ].
        Dialog warn:(resources
                            string:'A class named "%1" already exists. Editing the existing definition.'
                            with:className allBold).
    ] ifFalse:[
        newPackage := className copy replaceAll:$_ with:$/.
        newPackage replaceAll:$/ with:$:. 
        class := definitionClass newNamed:className package:newPackage.
    ].
    self definitionClass:class.

    "Created: / 15-10-2006 / 14:50:15 / cg"
!

menuGenerateProjectDefinitions
    |action|

    action := [:generator :defClass |
		    defClass theNonMetaclass
			forEachMethodsCodeToCompileDo:
			    [:code :category |
				generator
				    compile:code
				    forClass:defClass theMetaclass
				    inCategory:category.
			    ]
			ignoreOldDefinition:true
	       ].

    masterApplication notNil ifTrue:[
	masterApplication
	    generateUndoableChange:'Generate Project Definitions'
	    overClasses:(Array with:self definitionClass)
	    via:action.
    ] ifFalse:[
	action value:Compiler value:self definitionClass
    ].

    self refetchDefinitionValues

    "Created: / 07-09-2006 / 12:26:22 / cg"
!

menuNew
    "This method was generated by the Browser.
     It will be invoked when the menu-item 'new' is selected."

    "/ change below and add any actions as required here ...
    self warn:'no action for ''new'' available.'.
!

menuNewApplicationDefinition
    self editNew:ApplicationDefinition

    "Created: / 15-10-2006 / 14:49:53 / cg"
!

menuNewLibraryDefinition
    self editNew:LibraryDefinition

    "Created: / 15-10-2006 / 14:49:46 / cg"
!

menuOpen
    |projectID class answer|

    projectID := Dialog requestProject:'Project' initialAnswer:'' suggestions:nil.
    class := ProjectDefinition definitionClassForPackage:projectID.
    class isNil ifTrue:[
	answer := Dialog
	    confirmWithCancel:(resources string:'No Projectdefinition class exists for "%1".\\Create ?' with:projectID allBold)
	    labels:(resources array:#('Cancel' 'Create Library' 'Create Application' ))
	    values:#(nil LibraryDefinition ApplicationDefinition)
	    default:2
	    boxLabel:(resources string:'Create Projectdefinition').
	answer isNil ifTrue:[^ self].
    ].
    answer == #LibraryDefinition ifTrue:[
	class := LibraryDefinition definitionClassForPackage:projectID createIfAbsent:true
    ] ifFalse:[
	class := ApplicationDefinition definitionClassForPackage:projectID createIfAbsent:true
    ].
    self definitionClass:class.

    "Modified: / 07-09-2006 / 12:19:58 / cg"
!

menuRemoveClass
    |classListHolder|

    classListHolder := self classListHolder.
    classListHolder value removeIndex:(self selectedClassIndexHolder value).
    classListHolder changed.

    "Created: / 06-09-2006 / 21:31:05 / cg"
    "Modified: / 07-09-2006 / 11:35:44 / cg"
!

menuSave
    self menuSaveAs:definitionClass name

    "Modified: / 05-09-2006 / 13:48:27 / cg"
!

menuSaveAs
    |className class newPackage|

    className := Dialog
                    requestClassName:'Name of new Definition class'
                    okLabel:'Create'
                    initialAnswer:'private_myProject'.
    className isEmptyOrNil ifTrue:[^ self].
    class := Smalltalk classNamed:className.
    class notNil ifTrue:[
        Dialog warn:(resources
                            string:'A class named %1 already exists'
                            with:className).
        ^ self.
    ].
    newPackage := className copy replaceAll:$_ with:$/.
    newPackage replaceAll:$/ with:$:. 
    class := ApplicationDefinition newNamed:className package:newPackage.
    self menuSaveAs:class.

    "Modified: / 15-10-2006 / 14:47:53 / cg"
!

menuSaveAs:aClassName
    self halt.

    "Created: / 05-09-2006 / 13:48:03 / cg"
!

openAboutThisApplication
    "This method was generated by the Browser.
     It will be invoked when the menu-item 'help-about' is selected."

    "/ could open a customized aboutBox here ...
    super openAboutThisApplication
!

openDocumentation
    "This method was generated by the Browser.
     It will be invoked when the menu-item 'help-documentation' is selected."

    "/ change below as required ...

    "/ to open an HTML viewer on some document (under 'doc/online/<language>/' ):
    HTMLDocumentView openFullOnDocumentationFile:'TOP.html'.

    "/ add application-specific help files under the 'doc/online/<language>/help/appName'
    "/ directory, and open a viewer with:
    "/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'.
!

updateFlagsIn:aComboBox from:flag
    |s flags base negation|

    s := aComboBox editor contents.
    flags := s asCollectionOfWords.
    (flags includes:flag) ifFalse:[
        base := (flag copyFrom:2).
        negation := (flag startsWith:'+') 
                        ifTrue:[ ('-',base) ]
                        ifFalse:[ ('+',base) ].
        flags remove:negation ifAbsent:[].
        flags add:flag.
        aComboBox editor contents:(flags asStringWith:' ').
    ].

    "Created: / 15-10-2006 / 15:35:53 / cg"
! !

!ProjectDefinitionEditor methodsFor:'queries'!

hasClassesTabSelected
    ^ self selectedTabIndex == 2

    "Created: / 03-09-2006 / 11:00:39 / cg"
    "Modified: / 06-09-2006 / 21:20:21 / cg"
!

hasExtensionsTabSelected
    ^ self selectedTabIndex == 3

    "Created: / 05-09-2006 / 13:02:26 / cg"
    "Modified: / 06-09-2006 / 21:20:25 / cg"
!

hasPrerequisitesTabSelected
    ^ self selectedTabIndex == 4

    "Created: / 05-09-2006 / 13:27:16 / cg"
    "Modified: / 06-09-2006 / 21:20:33 / cg"
!

hasUnsavedChanges
     ^ false

    "Created: / 03-09-2006 / 10:53:05 / cg"
!

selectedClass
    |item|

    item := self classListHolder value at:(self selectedClassIndexHolder value).
self halt.

    "Created: / 06-09-2006 / 21:32:20 / cg"
    "Modified: / 07-09-2006 / 11:35:48 / cg"
!

selectedTabIndex
    ^ self selectedTabIndexHolder value

    "Created: / 03-09-2006 / 11:00:48 / cg"
! !

!ProjectDefinitionEditor::ClassListEntry methodsFor:'accessing'!

autoloaded
    ^ autoloaded
!

autoloaded:aBoolean
    autoloaded := aBoolean.

    "Modified: / 21-11-2006 / 18:05:26 / cg"
!

className
    ^ className
!

className:something
    className := something.
!

className:classNameArg autoloaded:autoloadedArg win32:win32Arg unix:unixArg
    className := classNameArg.
    autoloaded := autoloadedArg.
    win32 := win32Arg.
    unix := unixArg.
!

unix
    ^ unix
!

unix:aBoolean
    unix := aBoolean.

    "Modified: / 21-11-2006 / 18:05:32 / cg"
!

win32
    ^ win32
!

win32:aBoolean
    win32 := aBoolean.

    "Modified: / 21-11-2006 / 18:05:35 / cg"
! !

!ProjectDefinitionEditor::ExtensionsListEntry methodsFor:'accessing'!

className
    ^ className
!

className:classNameArg selector:selectorArg
    className := classNameArg.
    selector := selectorArg.
!

selector
    ^ selector
! !

!ProjectDefinitionEditor::PrerequisitesListEntry methodsFor:'accessing'!

package
    ^ package

    "Created: / 07-09-2006 / 12:23:17 / cg"
!

package:something
    package := something.

    "Created: / 07-09-2006 / 12:23:19 / cg"
! !

!ProjectDefinitionEditor class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !