From 6f7a22551b1fce6cb6b69342ffd6899ede79be70 Mon Sep 17 00:00:00 2001 From: Sergii Stoian Date: Fri, 11 Jun 2004 13:43:02 +0000 Subject: [PATCH] Start merging branches git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@19495 72102866-910b-0410-8b05-ffd578937521 --- .dist-ignore | 3 + AUTHORS | 8 - Documentation/ANNOUNCE | 59 + Documentation/AUTHORS | 8 + COPYING => Documentation/COPYING | 0 Documentation/ChangeLog | 87 + Documentation/ChangeLog-1 | 2092 +++++++++++++++++ INSTALL => Documentation/INSTALL | 0 Documentation/README | 28 + .../README.contributions | 0 Documentation/SCHEME | 67 + Documentation/TODO | 62 + GNUmakefile | 131 +- GNUmakefile.preamble | 18 +- .../{ProjectCenter_make.tiff => Build.tiff} | Bin Images/ButtonTile.tiff | Bin 9188 -> 6754 bytes .../{ProjectCenter_clean.tiff => Clean.tiff} | Bin .../{ProjectCenter_debug.tiff => Debug.tiff} | Bin Images/Editor.tiff | Bin 0 -> 5822 bytes Images/FileC.tiff | Bin 0 -> 9554 bytes Images/FileCH.tiff | Bin 0 -> 9554 bytes Images/FileH.tiff | Bin 0 -> 9554 bytes Images/FileHH.tiff | Bin 0 -> 9554 bytes Images/FileIcon_.c.tiff | Bin 3504 -> 0 bytes Images/FileIcon_.h.tiff | Bin 3502 -> 0 bytes Images/FileIcon_.m.tiff | Bin 3488 -> 0 bytes Images/FileM.tiff | Bin 0 -> 9554 bytes Images/FileMH.tiff | Bin 0 -> 9554 bytes Images/FileProject.tiff | Bin 0 -> 9587 bytes Images/{FileIcon_rtf.tiff => FileRTF.tiff} | Bin .../{ProjectCenter_files.tiff => Files.tiff} | Bin Images/{ProjectCenter_find.tiff => Find.tiff} | Bin ...ectCenter_settings.tiff => Inspector.tiff} | Bin ...rojectCenter_install.tiff => Install.tiff} | Bin Images/Options.tiff | Bin 0 -> 2098 bytes Images/ProjectCenter_build.tiff | Bin 6758 -> 0 bytes Images/{ProjectCenter_run.tiff => Run.tiff} | Bin Images/classSuitcase.tiff | Bin 0 -> 1106 bytes Images/classSuitcaseH.tiff | Bin 0 -> 1730 bytes Images/genericSuitcase.tiff | Bin 0 -> 1196 bytes Images/genericSuitcaseH.tiff | Bin 0 -> 1592 bytes Images/headerSuitcase.tiff | Bin 0 -> 1278 bytes Images/headerSuitcaseH.tiff | Bin 0 -> 1718 bytes Images/helpSuitcase.tiff | Bin 0 -> 3330 bytes Images/helpSuitcaseH.tiff | Bin 0 -> 1656 bytes Images/iconSuitcase.tiff | Bin 0 -> 6148 bytes Images/iconSuitcaseH.tiff | Bin 0 -> 6148 bytes Images/librarySuitcase.tiff | Bin 0 -> 2142 bytes Images/librarySuitcaseH.tiff | Bin 0 -> 2292 bytes Images/nibSuitcase.tiff | Bin 0 -> 6148 bytes Images/nibSuitcaseH.tiff | Bin 0 -> 5526 bytes Images/otherSuitcase.tiff | Bin 0 -> 1434 bytes Images/otherSuitcaseH.tiff | Bin 0 -> 1730 bytes Images/projectSuitcase.tiff | Bin 0 -> 2258 bytes Images/projectSuitcaseH.tiff | Bin 0 -> 2566 bytes Images/soundSuitcase.tiff | Bin 0 -> 6148 bytes Images/soundSuitcaseH.tiff | Bin 0 -> 6148 bytes Images/subprojectSuitcase.tiff | Bin 0 -> 2288 bytes Images/subprojectSuitcaseH.tiff | Bin 0 -> 2450 bytes Library/GNUmakefile | 128 + Library/GNUmakefile.postamble | 35 + Library/GNUmakefile.preamble | 71 + .../PCBuildPanel.h | 23 +- Library/PCBuildPanel.m | 150 ++ .../PCGormProj.h => Library/PCBundleLoader.h | 45 +- Library/PCBundleLoader.m | 170 ++ Library/PCButton.h | 59 + Library/PCButton.m | 272 +++ Library/PCDefines.h | 227 ++ Library/PCEditor.h | 108 + Library/PCEditor.m | 564 +++++ Library/PCEditorView+Highlighting.h | 44 + .../PCEditorView+Highlighting.m | 2 - {PCLib => Library}/PCEditorView.h | 10 +- {PCLib => Library}/PCEditorView.m | 69 +- .../PCFileCreator.h | 25 +- Library/PCFileCreator.m | 308 +++ {PCLib => Library}/PCFileManager.h | 81 +- Library/PCFileManager.m | 489 ++++ Library/PCLaunchPanel.h | 44 + Library/PCLaunchPanel.m | 148 ++ Library/PCLoadedFilesPanel.h | 44 + Library/PCLoadedFilesPanel.m | 150 ++ Library/PCMakefileFactory.h | 61 + Library/PCMakefileFactory.m | 331 +++ Library/PCProject.h | 220 ++ Library/PCProject.m | 1335 +++++++++++ .../PCProjectBrowser.h | 49 +- Library/PCProjectBrowser.m | 453 ++++ Library/PCProjectBuilder.h | 119 + Library/PCProjectBuilder.m | 795 +++++++ Library/PCProjectEditor.h | 111 + Library/PCProjectEditor.m | 509 ++++ Library/PCProjectInspector.h | 159 ++ Library/PCProjectInspector.m | 804 +++++++ Library/PCProjectLauncher.h | 93 + Library/PCProjectLauncher.m | 438 ++++ Library/PCProjectLoadedFiles.h | 61 + Library/PCProjectLoadedFiles.m | 336 +++ {PCLib => Library}/PCProjectManager.h | 213 +- Library/PCProjectManager.m | 1142 +++++++++ Library/PCProjectWindow.h | 122 + Library/PCProjectWindow.m | 935 ++++++++ {PCLib => Library}/PCServer.h | 2 - {PCLib => Library}/PCServer.m | 3 - {PCLib => Library}/PCSplitView.h | 0 {PCLib => Library}/PCSplitView.m | 0 {PCLib => Library}/PCTextFinder+UInterface.h | 2 - {PCLib => Library}/PCTextFinder+UInterface.m | 2 - {PCLib => Library}/PCTextFinder.h | 0 {PCLib => Library}/PCTextFinder.m | 0 {PCLib => Library}/PreferenceController.h | 2 - {PCLib => Library}/ProjectBuilder.h | 5 +- {PCLib => Library}/ProjectCenter.h | 30 +- {PCLib => Library}/ProjectComponent.h | 0 {PCLib => Library}/ProjectDebugger.h | 2 - {PCLib => Library}/ProjectDelegate.h | 0 {PCLib => Library}/ProjectEditor.h | 2 - {PCLib => Library}/ProjectType.h | 6 +- .../BuildAttributes.gorm/data.classes | 177 ++ .../BuildAttributes.gorm/objects.gorm | Bin 0 -> 11838 bytes .../FileAttributes.gorm/data.classes | 162 ++ .../FileAttributes.gorm/objects.gorm | Bin 0 -> 4362 bytes Library/Resources/GNUmakefile | 35 + Library/Resources/NewFile.gorm/data.classes | 163 ++ Library/Resources/NewFile.gorm/objects.gorm | Bin 0 -> 7411 bytes .../Resources/NewSubproject.gorm/data.classes | 164 ++ .../Resources/NewSubproject.gorm/objects.gorm | Bin 0 -> 6653 bytes .../ProjectDescription.gorm/data.classes | 173 ++ .../ProjectDescription.gorm/objects.gorm | Bin 0 -> 8208 bytes .../ProjectInspector.gorm/data.classes | 158 ++ .../ProjectInspector.gorm/objects.gorm | Bin 0 -> 2865 bytes Library/Resources/cfile.template | 25 + Library/Resources/cheader.template | 29 + .../Resources/class.template | 16 +- .../Resources}/gsmarkup.template | 0 .../Resources/header.template | 22 +- .../Resources/postamble.template | 0 .../Resources/protocol.template | 16 +- {PCLib => Library}/Server.h | 2 - Modules/ApplicationProject/GNUmakefile | 56 + .../ApplicationProject}/PCAppProj.h | 4 - Modules/ApplicationProject/PCAppProj.m | 206 ++ .../PCAppProject+Inspector.h | 68 + .../PCAppProject+Inspector.m | 487 ++++ Modules/ApplicationProject/PCAppProject.h | 99 + Modules/ApplicationProject/PCAppProject.m | 551 +++++ .../Resources/AppController.h | 52 + .../Resources/AppController.m | 86 + .../Resources/GNUmakefile.postamble | 40 + .../Resources}/GNUmakefile.preamble | 11 +- .../Resources/Inspector.gorm/data.classes | 181 ++ .../Resources/Inspector.gorm/objects.gorm | Bin 0 -> 11186 bytes .../Resources/Main.gorm/data.classes | 154 ++ .../Resources/Main.gorm/objects.gorm | Bin 0 -> 3625 bytes .../ApplicationProject/Resources/PC.project | 28 +- Modules/ApplicationProject/Resources/main.m | 32 + .../BundleProject}/GNUmakefile | 41 +- .../BundleProject}/PCBundleProj.h | 4 - Modules/BundleProject/PCBundleProj.m | 153 ++ .../BundleProject}/PCBundleProject.h | 33 +- Modules/BundleProject/PCBundleProject.m | 366 +++ .../Resources/Inspector.gorm/data.classes | 162 ++ .../Resources/Inspector.gorm/objects.gorm | Bin 0 -> 6197 bytes .../BundleProject/Resources/PC.project | 34 +- Modules/GNUmakefile | 20 + Modules/GNUmakefile.bundles | 12 + .../LibraryProject}/GNUmakefile | 28 +- .../LibraryProject}/PCLibProj.h | 4 - Modules/LibraryProject/PCLibProj.m | 162 ++ .../LibraryProject}/PCLibProject.h | 41 +- Modules/LibraryProject/PCLibProject.m | 343 +++ .../Resources/Inspector.gorm/data.classes | 156 ++ .../Resources/Inspector.gorm/objects.gorm | Bin 0 -> 4337 bytes Modules/LibraryProject/Resources/PC.project | 42 + .../LibraryProject/Resources}/Version | 0 Modules/RenaissanceProject/GNUmakefile | 69 + .../RenaissanceProject}/PCRenaissanceProj.h | 2 - .../RenaissanceProject/PCRenaissanceProj.m | 225 ++ .../PCRenaissanceProject+Inspector.h | 68 + .../PCRenaissanceProject+Inspector.m | 487 ++++ .../RenaissanceProject/PCRenaissanceProject.h | 99 + .../RenaissanceProject/PCRenaissanceProject.m | 563 +++++ .../Resources/AppController.h | 43 + .../Resources/AppController.m | 36 + .../Resources/Inspector.gorm/data.classes | 181 ++ .../Resources/Inspector.gorm/objects.gorm | Bin 0 -> 11202 bytes .../Resources}/Main.gsmarkup | 0 .../Resources/MainMenu-GNUstep.gsmarkup | 32 + .../Resources}/MainMenu-OSX.gsmarkup | 0 .../RenaissanceProject/Resources/PC.project | 34 +- .../RenaissanceProject/Resources/main.m | 42 +- .../ToolProject}/GNUmakefile | 28 +- .../ToolProject}/PCToolProj.h | 4 - Modules/ToolProject/PCToolProj.m | 173 ++ .../ToolProject}/PCToolProject.h | 46 +- Modules/ToolProject/PCToolProject.m | 401 ++++ .../Resources/Inspector.gorm/data.classes | 156 ++ .../Resources/Inspector.gorm/objects.gorm | Bin 0 -> 4332 bytes Modules/ToolProject/Resources/PC.project | 40 + .../ToolProject/Resources/main.m | 27 +- PCAppController.h | 67 +- PCAppController.m | 315 +-- PCAppProj/ChangeLog | 1 - PCAppProj/ChangeLog.old | 246 -- PCAppProj/English.lproj/InfoPlist.strings | Bin 584 -> 0 bytes PCAppProj/GNUmakefile | 69 - PCAppProj/Info.table | 29 - PCAppProj/PCAppProj.m | 194 -- PCAppProj/PCAppProj.pbproj/project.pbxproj | 427 ---- PCAppProj/PCAppProject.h | 85 - PCAppProj/PCAppProject.m | 354 --- PCAppProj/Templates/AppController.h | 39 - PCAppProj/Templates/AppController.m | 75 - PCAppProj/Templates/main.m | 103 - PCBaseFileTypes/ChangeLog | 1 - PCBaseFileTypes/ChangeLog.old | 163 -- .../English.lproj/InfoPlist.strings | Bin 620 -> 0 bytes PCBaseFileTypes/GNUmakefile | 69 - PCBaseFileTypes/PCBaseFileType.m | 368 --- .../PCBaseFileTypes.pbproj/project.pbxproj | 453 ---- PCBaseFileTypes/cfile.template | 11 - PCBaseFileTypes/cheader.template | 15 - PCBaseFileTypes/class.template | 15 - PCBaseFileTypes/nsviewclass.template | 28 - PCBaseFileTypes/nsviewheader.template | 28 - PCBaseFileTypes/protocol.template | 13 - PCBundleProj/ChangeLog | 1 - PCBundleProj/ChangeLog.old | 152 -- PCBundleProj/English.lproj/InfoPlist.strings | Bin 602 -> 0 bytes PCBundleProj/Info.table | 29 - PCBundleProj/PC.proj | 40 - PCBundleProj/PCBundleProj.m | 149 -- .../PCBundleProj.pbproj/project.pbxproj | 362 --- PCGormProj/ChangeLog | 1 - PCGormProj/ChangeLog.old | 137 -- PCGormProj/English.lproj/InfoPlist.strings | Bin 590 -> 0 bytes PCGormProj/Info.table | 29 - PCGormProj/PCGormProj.pbproj/project.pbxproj | 408 ---- PCGormProj/PCGormProject.h | 84 - PCGormProj/main.m | 12 - PCInfoController.h | 2 - PCInfoController.m | 2 - PCLib/ChangeLog | 1 - PCLib/ChangeLog.old | 676 ------ PCLib/English.lproj/InfoPlist.strings | Bin 560 -> 0 bytes PCLib/FileCreator.h | 44 - PCLib/PCBrowserController.m | 247 -- PCLib/PCEditor+UInterface.m | 138 -- PCLib/PCEditor.h | 80 - PCLib/PCEditor.m | 338 --- PCLib/PCEditorController.h | 73 - PCLib/PCEditorController.m | 304 --- PCLib/PCFileManager+UInterface.m | 173 -- PCLib/PCHistoryController.h | 45 - PCLib/PCHistoryController.m | 121 - PCLib/PCMakefileFactory.h | 86 - PCLib/PCProject+ComponentHandling.h | 44 - PCLib/PCProject.h | 317 --- PCLib/PCProject.m | 871 ------- PCLib/PCProjectEditor.h | 47 - PCLib/PCProjectEditor.m | 123 - PCLib/PCProjectManager+UInterface.m | 76 - PCLib/ProjectCenter.pbproj/project.pbxproj | 1144 --------- PCLibProj/ChangeLog | 1 - PCLibProj/ChangeLog.old | 179 -- PCLibProj/English.lproj/InfoPlist.strings | Bin 584 -> 0 bytes PCLibProj/Info.table | 29 - PCLibProj/PC.proj | 34 - PCLibProj/PCLibProj.m | 141 -- PCLibProj/PCLibProj.pbproj/project.pbxproj | 401 ---- PCLibProj/PCLibProject.m | 173 -- PCLogController.h | 31 +- PCLogController.m | 171 +- PCMenuController.h | 33 +- PCMenuController.m | 487 ++-- PCPrefController+UInterface.m | 456 ---- PCPrefController.h | 115 +- PCPrefController.m | 886 ++++--- PCRenaissanceProj/.cvsignore | 2 - PCRenaissanceProj/AppController.h | 25 - PCRenaissanceProj/AppController.m | 18 - PCRenaissanceProj/ChangeLog | 1 - PCRenaissanceProj/ChangeLog.old | 29 - .../English.lproj/InfoPlist.strings | Bin 632 -> 0 bytes PCRenaissanceProj/GNUmakefile | 72 - PCRenaissanceProj/Info.table | 29 - PCRenaissanceProj/MainMenu-GNUstep.gsmarkup | 55 - PCRenaissanceProj/PCRenaissanceProj.m | 191 -- .../PCRenaissanceProj.pbproj/project.pbxproj | 527 ----- PCRenaissanceProj/PCRenaissanceProj_Prefix.h | 8 - PCRenaissanceProj/PCRenaissanceProject.h | 85 - PCRenaissanceProj/main.m | 27 - PCToolProj/ChangeLog | 1 - PCToolProj/ChangeLog.old | 161 -- PCToolProj/English.lproj/InfoPlist.strings | Bin 590 -> 0 bytes PCToolProj/Info-project.plist | 12 - PCToolProj/Info.table | 29 - PCToolProj/PC.proj | 36 - PCToolProj/PCToolProj.m | 141 -- PCToolProj/PCToolProj.pbproj/project.pbxproj | 427 ---- PCToolProj/PCToolProject.m | 193 -- PCToolProj/main.m | 13 - ProjectCenter.pbproj/project.pbxproj | 876 ------- ProjectCenterIcon.icns | Bin 7441 -> 0 bytes ProjectCenterInfo.plist | 70 +- ProjectCenter_main.m | 529 +---- Resources/LogPanel.gorm/data.classes | 152 ++ Resources/LogPanel.gorm/objects.gorm | Bin 0 -> 2059 bytes Resources/Preferences.gorm/data.classes | 203 ++ Resources/Preferences.gorm/objects.gorm | Bin 0 -> 25821 bytes Resources/ProjectCenter.gorm/data.classes | 193 ++ Resources/ProjectCenter.gorm/objects.gorm | Bin 0 -> 36841 bytes 313 files changed, 22935 insertions(+), 15556 deletions(-) create mode 100644 .dist-ignore delete mode 100644 AUTHORS create mode 100644 Documentation/ANNOUNCE create mode 100644 Documentation/AUTHORS rename COPYING => Documentation/COPYING (100%) create mode 100644 Documentation/ChangeLog create mode 100644 Documentation/ChangeLog-1 rename INSTALL => Documentation/INSTALL (100%) create mode 100644 Documentation/README rename README.contributions => Documentation/README.contributions (100%) create mode 100644 Documentation/SCHEME create mode 100644 Documentation/TODO rename Images/{ProjectCenter_make.tiff => Build.tiff} (100%) rename Images/{ProjectCenter_clean.tiff => Clean.tiff} (100%) rename Images/{ProjectCenter_debug.tiff => Debug.tiff} (100%) create mode 100644 Images/Editor.tiff create mode 100644 Images/FileC.tiff create mode 100644 Images/FileCH.tiff create mode 100644 Images/FileH.tiff create mode 100644 Images/FileHH.tiff delete mode 100644 Images/FileIcon_.c.tiff delete mode 100644 Images/FileIcon_.h.tiff delete mode 100644 Images/FileIcon_.m.tiff create mode 100644 Images/FileM.tiff create mode 100644 Images/FileMH.tiff create mode 100644 Images/FileProject.tiff rename Images/{FileIcon_rtf.tiff => FileRTF.tiff} (100%) rename Images/{ProjectCenter_files.tiff => Files.tiff} (100%) rename Images/{ProjectCenter_find.tiff => Find.tiff} (100%) rename Images/{ProjectCenter_settings.tiff => Inspector.tiff} (100%) rename Images/{ProjectCenter_install.tiff => Install.tiff} (100%) create mode 100644 Images/Options.tiff delete mode 100644 Images/ProjectCenter_build.tiff rename Images/{ProjectCenter_run.tiff => Run.tiff} (100%) create mode 100644 Images/classSuitcase.tiff create mode 100644 Images/classSuitcaseH.tiff create mode 100644 Images/genericSuitcase.tiff create mode 100644 Images/genericSuitcaseH.tiff create mode 100644 Images/headerSuitcase.tiff create mode 100644 Images/headerSuitcaseH.tiff create mode 100644 Images/helpSuitcase.tiff create mode 100644 Images/helpSuitcaseH.tiff create mode 100644 Images/iconSuitcase.tiff create mode 100644 Images/iconSuitcaseH.tiff create mode 100644 Images/librarySuitcase.tiff create mode 100644 Images/librarySuitcaseH.tiff create mode 100644 Images/nibSuitcase.tiff create mode 100644 Images/nibSuitcaseH.tiff create mode 100644 Images/otherSuitcase.tiff create mode 100644 Images/otherSuitcaseH.tiff create mode 100644 Images/projectSuitcase.tiff create mode 100644 Images/projectSuitcaseH.tiff create mode 100644 Images/soundSuitcase.tiff create mode 100644 Images/soundSuitcaseH.tiff create mode 100644 Images/subprojectSuitcase.tiff create mode 100644 Images/subprojectSuitcaseH.tiff create mode 100644 Library/GNUmakefile create mode 100644 Library/GNUmakefile.postamble create mode 100644 Library/GNUmakefile.preamble rename PCPrefController+UInterface.h => Library/PCBuildPanel.h (70%) create mode 100644 Library/PCBuildPanel.m rename PCGormProj/PCGormProj.h => Library/PCBundleLoader.h (55%) create mode 100644 Library/PCBundleLoader.m create mode 100644 Library/PCButton.h create mode 100644 Library/PCButton.m create mode 100644 Library/PCDefines.h create mode 100644 Library/PCEditor.h create mode 100644 Library/PCEditor.m create mode 100644 Library/PCEditorView+Highlighting.h rename {PCLib => Library}/PCEditorView+Highlighting.m (99%) rename {PCLib => Library}/PCEditorView.h (96%) rename {PCLib => Library}/PCEditorView.m (73%) rename PCBaseFileTypes/PCBaseFileType.h => Library/PCFileCreator.h (64%) create mode 100644 Library/PCFileCreator.m rename {PCLib => Library}/PCFileManager.h (50%) create mode 100644 Library/PCFileManager.m create mode 100644 Library/PCLaunchPanel.h create mode 100644 Library/PCLaunchPanel.m create mode 100644 Library/PCLoadedFilesPanel.h create mode 100644 Library/PCLoadedFilesPanel.m create mode 100644 Library/PCMakefileFactory.h create mode 100644 Library/PCMakefileFactory.m create mode 100644 Library/PCProject.h create mode 100644 Library/PCProject.m rename PCLib/PCBrowserController.h => Library/PCProjectBrowser.h (53%) create mode 100644 Library/PCProjectBrowser.m create mode 100644 Library/PCProjectBuilder.h create mode 100644 Library/PCProjectBuilder.m create mode 100644 Library/PCProjectEditor.h create mode 100644 Library/PCProjectEditor.m create mode 100644 Library/PCProjectInspector.h create mode 100644 Library/PCProjectInspector.m create mode 100644 Library/PCProjectLauncher.h create mode 100644 Library/PCProjectLauncher.m create mode 100644 Library/PCProjectLoadedFiles.h create mode 100644 Library/PCProjectLoadedFiles.m rename {PCLib => Library}/PCProjectManager.h (50%) create mode 100644 Library/PCProjectManager.m create mode 100644 Library/PCProjectWindow.h create mode 100644 Library/PCProjectWindow.m rename {PCLib => Library}/PCServer.h (99%) rename {PCLib => Library}/PCServer.m (98%) rename {PCLib => Library}/PCSplitView.h (100%) rename {PCLib => Library}/PCSplitView.m (100%) rename {PCLib => Library}/PCTextFinder+UInterface.h (99%) rename {PCLib => Library}/PCTextFinder+UInterface.m (99%) rename {PCLib => Library}/PCTextFinder.h (100%) rename {PCLib => Library}/PCTextFinder.m (100%) rename {PCLib => Library}/PreferenceController.h (99%) rename {PCLib => Library}/ProjectBuilder.h (91%) rename {PCLib => Library}/ProjectCenter.h (84%) rename {PCLib => Library}/ProjectComponent.h (100%) rename {PCLib => Library}/ProjectDebugger.h (99%) rename {PCLib => Library}/ProjectDelegate.h (100%) rename {PCLib => Library}/ProjectEditor.h (99%) rename {PCLib => Library}/ProjectType.h (93%) create mode 100644 Library/Resources/BuildAttributes.gorm/data.classes create mode 100644 Library/Resources/BuildAttributes.gorm/objects.gorm create mode 100644 Library/Resources/FileAttributes.gorm/data.classes create mode 100644 Library/Resources/FileAttributes.gorm/objects.gorm create mode 100644 Library/Resources/GNUmakefile create mode 100644 Library/Resources/NewFile.gorm/data.classes create mode 100644 Library/Resources/NewFile.gorm/objects.gorm create mode 100644 Library/Resources/NewSubproject.gorm/data.classes create mode 100644 Library/Resources/NewSubproject.gorm/objects.gorm create mode 100644 Library/Resources/ProjectDescription.gorm/data.classes create mode 100644 Library/Resources/ProjectDescription.gorm/objects.gorm create mode 100644 Library/Resources/ProjectInspector.gorm/data.classes create mode 100644 Library/Resources/ProjectInspector.gorm/objects.gorm create mode 100644 Library/Resources/cfile.template create mode 100644 Library/Resources/cheader.template rename PCLib/PCProject+UInterface.h => Library/Resources/class.template (72%) rename {PCBaseFileTypes => Library/Resources}/gsmarkup.template (100%) rename PCLib/PCFileManager+UInterface.h => Library/Resources/header.template (72%) rename PCAppProj/Templates/GNUmakefile.postamble => Library/Resources/postamble.template (100%) rename PCLib/PCProjectManager+UInterface.h => Library/Resources/protocol.template (71%) rename {PCLib => Library}/Server.h (99%) create mode 100644 Modules/ApplicationProject/GNUmakefile rename {PCAppProj => Modules/ApplicationProject}/PCAppProj.h (97%) create mode 100644 Modules/ApplicationProject/PCAppProj.m create mode 100644 Modules/ApplicationProject/PCAppProject+Inspector.h create mode 100644 Modules/ApplicationProject/PCAppProject+Inspector.m create mode 100644 Modules/ApplicationProject/PCAppProject.h create mode 100644 Modules/ApplicationProject/PCAppProject.m create mode 100644 Modules/ApplicationProject/Resources/AppController.h create mode 100644 Modules/ApplicationProject/Resources/AppController.m create mode 100644 Modules/ApplicationProject/Resources/GNUmakefile.postamble rename {PCAppProj/Templates => Modules/ApplicationProject/Resources}/GNUmakefile.preamble (93%) create mode 100644 Modules/ApplicationProject/Resources/Inspector.gorm/data.classes create mode 100644 Modules/ApplicationProject/Resources/Inspector.gorm/objects.gorm create mode 100644 Modules/ApplicationProject/Resources/Main.gorm/data.classes create mode 100644 Modules/ApplicationProject/Resources/Main.gorm/objects.gorm rename PCAppProj/Templates/PC.proj => Modules/ApplicationProject/Resources/PC.project (61%) create mode 100644 Modules/ApplicationProject/Resources/main.m rename {PCBundleProj => Modules/BundleProject}/GNUmakefile (52%) rename {PCBundleProj => Modules/BundleProject}/PCBundleProj.h (97%) create mode 100644 Modules/BundleProject/PCBundleProj.m rename {PCBundleProj => Modules/BundleProject}/PCBundleProject.h (67%) create mode 100644 Modules/BundleProject/PCBundleProject.m create mode 100644 Modules/BundleProject/Resources/Inspector.gorm/data.classes create mode 100644 Modules/BundleProject/Resources/Inspector.gorm/objects.gorm rename PCGormProj/PC.proj => Modules/BundleProject/Resources/PC.project (55%) create mode 100644 Modules/GNUmakefile create mode 100644 Modules/GNUmakefile.bundles rename {PCLibProj => Modules/LibraryProject}/GNUmakefile (61%) rename {PCLibProj => Modules/LibraryProject}/PCLibProj.h (97%) create mode 100644 Modules/LibraryProject/PCLibProj.m rename {PCLibProj => Modules/LibraryProject}/PCLibProject.h (64%) create mode 100644 Modules/LibraryProject/PCLibProject.m create mode 100644 Modules/LibraryProject/Resources/Inspector.gorm/data.classes create mode 100644 Modules/LibraryProject/Resources/Inspector.gorm/objects.gorm create mode 100644 Modules/LibraryProject/Resources/PC.project rename {PCLibProj => Modules/LibraryProject/Resources}/Version (100%) create mode 100644 Modules/RenaissanceProject/GNUmakefile rename {PCRenaissanceProj => Modules/RenaissanceProject}/PCRenaissanceProj.h (98%) create mode 100644 Modules/RenaissanceProject/PCRenaissanceProj.m create mode 100644 Modules/RenaissanceProject/PCRenaissanceProject+Inspector.h create mode 100644 Modules/RenaissanceProject/PCRenaissanceProject+Inspector.m create mode 100644 Modules/RenaissanceProject/PCRenaissanceProject.h create mode 100644 Modules/RenaissanceProject/PCRenaissanceProject.m create mode 100644 Modules/RenaissanceProject/Resources/AppController.h create mode 100644 Modules/RenaissanceProject/Resources/AppController.m create mode 100644 Modules/RenaissanceProject/Resources/Inspector.gorm/data.classes create mode 100644 Modules/RenaissanceProject/Resources/Inspector.gorm/objects.gorm rename {PCRenaissanceProj => Modules/RenaissanceProject/Resources}/Main.gsmarkup (100%) create mode 100644 Modules/RenaissanceProject/Resources/MainMenu-GNUstep.gsmarkup rename {PCRenaissanceProj => Modules/RenaissanceProject/Resources}/MainMenu-OSX.gsmarkup (100%) rename PCRenaissanceProj/PC.proj => Modules/RenaissanceProject/Resources/PC.project (55%) rename PCLib/PCEditorView+Highlighting.h => Modules/RenaissanceProject/Resources/main.m (54%) rename {PCToolProj => Modules/ToolProject}/GNUmakefile (63%) rename {PCToolProj => Modules/ToolProject}/PCToolProj.h (97%) create mode 100644 Modules/ToolProject/PCToolProj.m rename {PCToolProj => Modules/ToolProject}/PCToolProject.h (58%) create mode 100644 Modules/ToolProject/PCToolProject.m create mode 100644 Modules/ToolProject/Resources/Inspector.gorm/data.classes create mode 100644 Modules/ToolProject/Resources/Inspector.gorm/objects.gorm create mode 100644 Modules/ToolProject/Resources/PC.project rename PCLib/PCEditor+UInterface.h => Modules/ToolProject/Resources/main.m (68%) delete mode 100644 PCAppProj/ChangeLog delete mode 100644 PCAppProj/ChangeLog.old delete mode 100644 PCAppProj/English.lproj/InfoPlist.strings delete mode 100644 PCAppProj/GNUmakefile delete mode 100644 PCAppProj/Info.table delete mode 100644 PCAppProj/PCAppProj.m delete mode 100644 PCAppProj/PCAppProj.pbproj/project.pbxproj delete mode 100644 PCAppProj/PCAppProject.h delete mode 100644 PCAppProj/PCAppProject.m delete mode 100644 PCAppProj/Templates/AppController.h delete mode 100644 PCAppProj/Templates/AppController.m delete mode 100644 PCAppProj/Templates/main.m delete mode 100644 PCBaseFileTypes/ChangeLog delete mode 100644 PCBaseFileTypes/ChangeLog.old delete mode 100644 PCBaseFileTypes/English.lproj/InfoPlist.strings delete mode 100644 PCBaseFileTypes/GNUmakefile delete mode 100644 PCBaseFileTypes/PCBaseFileType.m delete mode 100644 PCBaseFileTypes/PCBaseFileTypes.pbproj/project.pbxproj delete mode 100644 PCBaseFileTypes/cfile.template delete mode 100644 PCBaseFileTypes/cheader.template delete mode 100644 PCBaseFileTypes/class.template delete mode 100644 PCBaseFileTypes/nsviewclass.template delete mode 100644 PCBaseFileTypes/nsviewheader.template delete mode 100644 PCBaseFileTypes/protocol.template delete mode 100644 PCBundleProj/ChangeLog delete mode 100644 PCBundleProj/ChangeLog.old delete mode 100644 PCBundleProj/English.lproj/InfoPlist.strings delete mode 100644 PCBundleProj/Info.table delete mode 100644 PCBundleProj/PC.proj delete mode 100644 PCBundleProj/PCBundleProj.m delete mode 100644 PCBundleProj/PCBundleProj.pbproj/project.pbxproj delete mode 100644 PCGormProj/ChangeLog delete mode 100644 PCGormProj/ChangeLog.old delete mode 100644 PCGormProj/English.lproj/InfoPlist.strings delete mode 100644 PCGormProj/Info.table delete mode 100644 PCGormProj/PCGormProj.pbproj/project.pbxproj delete mode 100644 PCGormProj/PCGormProject.h delete mode 100644 PCGormProj/main.m delete mode 100644 PCLib/ChangeLog delete mode 100644 PCLib/ChangeLog.old delete mode 100644 PCLib/English.lproj/InfoPlist.strings delete mode 100644 PCLib/FileCreator.h delete mode 100644 PCLib/PCBrowserController.m delete mode 100644 PCLib/PCEditor+UInterface.m delete mode 100644 PCLib/PCEditor.h delete mode 100644 PCLib/PCEditor.m delete mode 100644 PCLib/PCEditorController.h delete mode 100644 PCLib/PCEditorController.m delete mode 100644 PCLib/PCFileManager+UInterface.m delete mode 100644 PCLib/PCHistoryController.h delete mode 100644 PCLib/PCHistoryController.m delete mode 100644 PCLib/PCMakefileFactory.h delete mode 100644 PCLib/PCProject+ComponentHandling.h delete mode 100644 PCLib/PCProject.h delete mode 100644 PCLib/PCProject.m delete mode 100644 PCLib/PCProjectEditor.h delete mode 100644 PCLib/PCProjectEditor.m delete mode 100644 PCLib/PCProjectManager+UInterface.m delete mode 100644 PCLib/ProjectCenter.pbproj/project.pbxproj delete mode 100644 PCLibProj/ChangeLog delete mode 100644 PCLibProj/ChangeLog.old delete mode 100644 PCLibProj/English.lproj/InfoPlist.strings delete mode 100644 PCLibProj/Info.table delete mode 100644 PCLibProj/PC.proj delete mode 100644 PCLibProj/PCLibProj.m delete mode 100644 PCLibProj/PCLibProj.pbproj/project.pbxproj delete mode 100644 PCLibProj/PCLibProject.m delete mode 100644 PCPrefController+UInterface.m delete mode 100644 PCRenaissanceProj/.cvsignore delete mode 100644 PCRenaissanceProj/AppController.h delete mode 100644 PCRenaissanceProj/AppController.m delete mode 100644 PCRenaissanceProj/ChangeLog delete mode 100644 PCRenaissanceProj/ChangeLog.old delete mode 100644 PCRenaissanceProj/English.lproj/InfoPlist.strings delete mode 100644 PCRenaissanceProj/GNUmakefile delete mode 100644 PCRenaissanceProj/Info.table delete mode 100644 PCRenaissanceProj/MainMenu-GNUstep.gsmarkup delete mode 100644 PCRenaissanceProj/PCRenaissanceProj.m delete mode 100644 PCRenaissanceProj/PCRenaissanceProj.pbproj/project.pbxproj delete mode 100644 PCRenaissanceProj/PCRenaissanceProj_Prefix.h delete mode 100644 PCRenaissanceProj/PCRenaissanceProject.h delete mode 100644 PCRenaissanceProj/main.m delete mode 100644 PCToolProj/ChangeLog delete mode 100644 PCToolProj/ChangeLog.old delete mode 100644 PCToolProj/English.lproj/InfoPlist.strings delete mode 100644 PCToolProj/Info-project.plist delete mode 100644 PCToolProj/Info.table delete mode 100644 PCToolProj/PC.proj delete mode 100644 PCToolProj/PCToolProj.m delete mode 100644 PCToolProj/PCToolProj.pbproj/project.pbxproj delete mode 100644 PCToolProj/PCToolProject.m delete mode 100644 PCToolProj/main.m delete mode 100644 ProjectCenter.pbproj/project.pbxproj delete mode 100644 ProjectCenterIcon.icns create mode 100644 Resources/LogPanel.gorm/data.classes create mode 100644 Resources/LogPanel.gorm/objects.gorm create mode 100644 Resources/Preferences.gorm/data.classes create mode 100644 Resources/Preferences.gorm/objects.gorm create mode 100644 Resources/ProjectCenter.gorm/data.classes create mode 100644 Resources/ProjectCenter.gorm/objects.gorm diff --git a/.dist-ignore b/.dist-ignore new file mode 100644 index 0000000..65f82d0 --- /dev/null +++ b/.dist-ignore @@ -0,0 +1,3 @@ +.gwdir +*.swp +*~ diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 53fb2ae..0000000 --- a/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -Philippe C.D. Robert -Adam Fedor -Pierre-Yves Rivaille -Nicola Perot -Richard Frith-Macdonald -David Ayers -Serg Stoyan - diff --git a/Documentation/ANNOUNCE b/Documentation/ANNOUNCE new file mode 100644 index 0000000..b9e29a7 --- /dev/null +++ b/Documentation/ANNOUNCE @@ -0,0 +1,59 @@ +Announcement +************ + +This is version 0.3.5 of ProjectCenter. + +What is ProjectCenter? +====================== + + ProjectCenter is a clone of the NEXTSTEP ProjectBuilder application for + GNUstep. + + ProjectCenter is covered under the GNU Public License. This means if you + make changes to these programs, you cannot charge a fee, other than + distribution fees, for others to use the program. You should read the + COPYING file for more information. + +Noteworthy changes in version `0.3.5'. +====================================== + + Many features have been polished and stabilised, see ChangeLog for the + complete list of changes. + +How can I get support for this software? +======================================== + + You may wish to use the GNUstep discussion mailing list for general +questions and discussion. Look at the GNUstep Web Pages for more +information regarding GNUstep resources + +Where can you get it? How can you compile it? +============================================== + + You can download sources and rpms (for some machines) from + ftp://ftp.gnustep.org/pub/gnustep/dev-apps/. + +Where do I send bug reports? +============================ + + Bug reports can be sent to . + +Obtaining GNU Software +====================== + + Check out the GNU web site. (`http://www.gnu.org/') + + Check out the GNUstep web site. (`http://www.gnustep.org/') + + Most GNU software is packed using the GNU `gzip' compression program. + Source code is available on most sites distributing GNU software. + + For information on how to order GNU software on tape, floppy or + cd-rom, or printed GNU manuals, check the file etc/ORDERS in the GNU + Emacs distribution or in GNUinfo/ORDERS on prep, or e-mail a request to: + + + By ordering your GNU software from the FSF, you help us continue to + develop more free software. Media revenues are our primary source of + support. Donations to FSF are deductible on US tax returns. + diff --git a/Documentation/AUTHORS b/Documentation/AUTHORS new file mode 100644 index 0000000..d381f03 --- /dev/null +++ b/Documentation/AUTHORS @@ -0,0 +1,8 @@ +Philippe C.D. Robert +Serg Stoyan +David Ayers +Richard Frith-Macdonald +Nicola Pero +Pierre-Yves Rivaille +Adam Fedor + diff --git a/COPYING b/Documentation/COPYING similarity index 100% rename from COPYING rename to Documentation/COPYING diff --git a/Documentation/ChangeLog b/Documentation/ChangeLog new file mode 100644 index 0000000..8e7c7e8 --- /dev/null +++ b/Documentation/ChangeLog @@ -0,0 +1,87 @@ +2004-06-09 Serg Stoyan + + * Library/PCProjectBrowser.[hm]: + (pathOfSelectedFile): renamed to pathToSelectedFile. + (nameOfSelectedCategory): implemented. Use it insetead PCProject's + -categoryForCategoryPath. + (pathToSelectedCategory): implemented. + (setPathForFile:category:): removed. + (reloadLastColumn): implemented. + + * Modules/ApplicationProject/PCAppProject.m: + (renameFile:toFile:): remove calling of PCProjectBrowser's + setPathForFile:category. + + * Modules/RenaissanceProject/ PCRenaissanceProject.m: + (renameFile:toFile:): ditto. + + * Library/PCLoadedFilesPanel.m: + * Library/PCBuildPanel.m: + * Library/PCLaunchPanel.m: + (activeProjectDidChange:): return if root project wasn't changed. + + * Library/PCProject.m: + (setProjectmanager:): don't set project components for subproject. + + +2004-06-02 Serg Stoyan + + * Library/PCProjectManager (openProjectAt:): get project name from + PC.project file instead of directory name. So project name and + directory name may differ. + + * Library/PCProjectLauncher.m (debug:): Debug application using + full path instead of "~/Application". + + * PCMenuController.m: disable "Tear-Off Editor Size" fields editing + if Project Editor is not tear-off or Editor is not "ProjectCenter". + Check only first arg of Editor value. + +2004-06-01 Serg Stoyan + + * Finished on-the-fly applying "Tear-Off Panels" preferences. + + * Implemented remembering windows and panels visibility on project + opening. + + * Various PCProject fixes. + + * Remove PC.project.backup if preference "Keep Project Backup File" + is not set. + +2004-05-27 Serg Stoyan + + * Finished support of external editors. + +2004-05-10 Serg Stoyan + + * Preferences interface created using GORM. + * Resources/Prefernces.gorm: added. + * PCPrefController+UInterface.[hm]: removed. + +2004-05-08 Serg Stoyan + + * Start new ChangeLog. Old ChangeLog resides in + Documentation/ChangeLog-1 new in Documentation/ChangeLog. + + * Summary of changes: + - massive overall refactoring and cleanup. Directory layout + of PC changed; + - ProjectWindow: implemented toolbar(hide/show); menu entry + implemented; + - ProjectInspector: PC*Project's parts moved into PC*Projects; + more or less finished; + - ProjectBuilder: switch from NSThread to NSTask method of + executing tasks; "Build", "Stop Build", "Clean" menu entries + implemented; + - ProjectLauncher: ditto; finished all related menu entries; + - LoadedFiles: Fully implemented; + - LogController: implemented; made use it; + - initial subprojects support added; + - more stability around the whole ProjectCenter; + - GORMified parts of PC now is: PC main menu, ProjectInspector, + "File->New in Project" panel, "Project-> New Subproject" + panel. + - "File->Rename" implemented; + - ProjectCenter library now framework. + diff --git a/Documentation/ChangeLog-1 b/Documentation/ChangeLog-1 new file mode 100644 index 0000000..49214ce --- /dev/null +++ b/Documentation/ChangeLog-1 @@ -0,0 +1,2092 @@ +2003-08-25 Philippe C.D. Robert + + * Fixing "stop logging" fix: PCProjectBuilder.m + +2003-08-25 Serg Stoyan + + * PCProjectBuilder.[hm]: stop logging when building/cleaning. + Cleanups + +2003-08-09 Philippe C.D. Robert + + * Support for an external debugger: PCLib/PCDefines.h, + PCAppController.m, PCPrefController.m, PCPrefController+UInterface.m, + PCPrefController.h, PCLib/PCProjectDebugger.m + +2003-08-03 Philippe C.D. Robert + + * Fixed typo: PCLib/PCProject+ComponentHandling.m, PCMenuController.m + +2003-08-01 Philippe C.D. Robert + + * Removed -Werror: GNUMakefile.preamble, GNUMakefile.bundles + * Added -methodSignatureForSelector: PCAppController.[hm] + +2003-07-10 Philippe C.D. Robert + + * Updated the ANNOUNCE text + * Added missing includes: PCLib/PCDataSource.m, PCLib/PCButton.m + * Added note in README about using ProjectCenter with Cocoa + * Disabled unused menu entries: ProjectCenter_main.m + * Some spelling corrections: PCMenuController.m + +2003-07-05 Philippe C.D. Robert + + * Uppercase key for interface category lookup: PCFileManager.m + * Adjusting UI elements: PCGormProject.m + * Adding proper header: PCLib/PCButton.h, PCLib/PCButton.m + * Code cleanup and corrected contact address: PCInfoController.m, + PCInfoController.h, PCLogController.m, PCLogController.h, + PCAppController.h, PCAppController.m, PCFindController.h, + PCFindController.m, PCMenuController.h, PCMenuController.m, + PCPrefController.m, PCPrefController.h PCLib/PCBundleLoader.m, + PCLib/PCDataSource.h, PCLib/PCDataSource.m + * Extracting UI creation into category: PCPrefController+UInterface.h, + PCPrefController+UInterface.m, PCPrefController.m, PCPrefController.h, + PCLib/PCProjectDebugger+UInterface.h, PCLib/PCProjectDebugger.h, + PCLib/PCProjectDebugger+UInterface.m, PCLib/PCProjectDebugger.m + * Disabling unused menu entries using defines: ProjectCenter_main.m + * Added missing files to project: PCLib/PCButton.h, PCLib/PCButton.m + * Updated version for PCLib: PCLib/Version + * Changed menu title to ProjectCenter: ProjectCenter_main.m + * Adjusting UI elements and cleaned up code: PCRenaissanceProject.m +2003-08-01 Philippe C.D. Robert + + * Removed -Werror: GNUMakefile.preamble, GNUMakefile.bundles + * Added -methodSignatureForSelector: PCAppController.[hm] + * Code cleanup: PCLib/PCFileManager.m, PCLib/PCProjectManager.m + +2003-07-10 Philippe C.D. Robert + + * Updated the ANNOUNCE text + * Added missing includes: PCLib/PCDataSource.m, PCLib/PCButton.m + * Added note in README about using ProjectCenter with Cocoa + * Disabled unused menu entries: ProjectCenter_main.m + * Some spelling corrections: PCMenuController.m + +2003-07-05 Philippe C.D. Robert + + * Uppercase key for interface category lookup: PCFileManager.m + * Adjusting UI elements: PCGormProject.m + * Adding proper header: PCLib/PCButton.h, PCLib/PCButton.m + * Code cleanup and corrected contact address: PCInfoController.m, + PCInfoController.h, PCLogController.m, PCLogController.h, + PCAppController.h, PCAppController.m, PCFindController.h, + PCFindController.m, PCMenuController.h, PCMenuController.m, + PCPrefController.m, PCPrefController.h PCLib/PCBundleLoader.m, + PCLib/PCDataSource.h, PCLib/PCDataSource.m + * Extracting UI creation into category: PCPrefController+UInterface.h, + PCPrefController+UInterface.m, PCPrefController.m, PCPrefController.h, + PCLib/PCProjectDebugger+UInterface.h, PCLib/PCProjectDebugger.h, + PCLib/PCProjectDebugger+UInterface.m, PCLib/PCProjectDebugger.m + * Disabling unused menu entries using defines: ProjectCenter_main.m + * Added missing files to project: PCLib/PCButton.h, PCLib/PCButton.m + * Updated version for PCLib: PCLib/Version + * Changed menu title to ProjectCenter: ProjectCenter_main.m + * Adjusting UI elements and cleaned up code: PCRenaissanceProject.m + +2003-07-04 Philippe C.D. Robert + + * Updated TODO, ANNOUNCE, README and INSTALL files + * PCProject+ComponentHandling.[hm]: Cleanup and fix + * PCProjectBuilder: Button state fix + +2003-07-04 Serg Stoyan + + * PCAppController.m: Change REL_LIB_PC and ABS_LIB_PC to ApplicationSupport dir. + * PCInfoController.m: + (init): Load Info-gnustep.plist instead of Info-project.plist. + (showInfoWindow:): Set title of info window to "Info". + * PCPrefController.m: + (_initUI): Move releasing of controls here from -dealloc. + (popupChnaged:): Don't retain views. + + * PCAppProj/PCAppProject.m: + (updateValuesFromProjectDict): Change size of appicon frame to 48x48. + Check PCAppIcon field value is not equal to @"". + + * PCLib/PCButton.m + (PCButton dealloc): Release tooltip window. + (PCButtonCell dealloc): Added. + + * PCLib/PCProject+UInterface.m: + (_initUI): Cleanup. fileIcon now NSImageView. + (setFileIcon:): Check for source of notification. Cleanup. + +2003-07-02 Serg Stoyan + + * PCAppProj/PCAppProj.m: + * PCBundleProj/PCBundleProj.m: + * PCGormProj/PCGormProj.m: + * PCLibProj/PCLibProj.m: + * PCRenaissanceProj/PCRenaissanceProj.m: + * PCToolProj/PCToolProj.m: + Set project type field to class description both in GNUstep and + non-GNUstep environment. Fixes bug #3393. + + * PCAppProj/PCAppProject.m: + (_initUI): Rearrangements of controls. Release control after adding + to superview. + + * PCLib/PCFileManager.m: + (showAddFileWindow): Handling of image, docs, models and non project + files added. Now images go into Images subdir, docs into Documentation, + .gorm files into $LANGUAGE.lproj subdir. + * PCLib/PCProject+UInterface.m: + (_initUI): Files' history list enabled back. Adjust size of history + list. Added some fileds, controls rearranged in Project Inspector. + Release of box added after adding to split. + * PCLib/PCProject.h: Added definition of new Inspector fields. + * PCLib/PCProject.m: + (updateValuesFromProjectDict): Set project's language. + (dealloc): Extra releases removed. + * PCLib/PCProjectBuilder.m: Stability improved via cleanup in build + task handling. + (topButtonPressed:): Removed. + * PCLib/PCProjectManager+UInterface.m: ProjectInspector content view + resized. Changed title from "Inspector" to "Project Inspector". + + * PCMenuController.m: + (validateMenuItem:): Return by default YES if no project loaded. + + * PCAppProj/PCAppProject.m: + (dealloc): Release of appClassField and appImageField removed. + +2003-06-20 Serg Stoyan + + * Images/ButtonTile.tiff: Added. + * GNUmakefile: Add Images/ButtonTile.tiff. + * ProjectCenterInfo.plist: Fixed order of authors. + + * PCLib/GNUmakefile: Added PCButton.[hm]. + * PCLib/PCButton.[hm]: Added and implemented. + * PCLib/PCBrowserController.h: PCBrowserDidSetPathNotification + delcaration added. + * PCLib/PCBrowserController.m: + (click:): Post PCBrowserDidSetPathNotification. + (doubleClick:): Idem. Return result instead of path. + * PCLib/PCProject+UInterface.m: Switch toolbar from matrix to number + of PCButtons. Added icon in top left corner that represents object + selected in browser. + (setFileIcon:): Added. Sets icon image according to the object + selected in browser. + * PCLib/PCProject.m: + (setProjectName:): Set label of icon to project name on loading. + * PCLib/PCProject.[mh]: Switch to using PCButtons. + (buildDidTerminate:): Check if notification object is build task + added. + * PCLib/PCProjectDebugger.[h]: Switch to using PCButtons. + +2003-05-30 Serg Stoyan + + * PCLib/PCEditor.[hm]: Added becomeFirstResponder. + * PCLib/PCEditorController.[hm]: Rename setBrowser: to + setBrowserPath:category:. + * PCLib/PCEditorController.m: + (activeEditor): Don't count on [project isEditorActive]. + * PCLib/PCEditorView.m: + (becomeFirstResponder): Call editor's becomeFirstResponder. + +2003-05-29 Serg Stoyan + + * PCMenuController.m: + (projectRemoveFiles:): Call removeFilesPermanently. + (fileSaveAs:): Implemented. + + * PCAppProj/PCAppProject.m: + (init): Initialize rootObjects and rootKeys arrays. Initialize + rootCategories dictionary with these arrays to preserve order of + categories in browser. "Non Project Files" category added. + (dealloc): Release rootObjects and rootKeys arrays. + (otherKeys): Added PCNonProject. + * PCBundleProj/PCBundleProject.m: Ditto. + * PCGormProj/PCGormProject.m: Ditto. + * PCLibProj/PCLibProject.m: Ditto. + * PCRenaissanceProj/PCRenaissanceProject.m: Ditto. + * PCToolProj/PCToolProject.m: Ditto. + + * PCLib/PCBrowserController.[hm]: Rename method setPathForFile: to + setPathForFile:category:. + * PCLib/PCBrowserController.m: + (isEditableCategory:file:): PCOtherSources, PCOtherResources and + PCNonProject to editable categories. + (projectDictDidChange:): Set path to category if there is no file + editing. + * PCLib/PCEditor.[hm]: Added _category ivar. Every editor now holds + category of the file being edited. Added methods category and + setCategory:. Removed saveFileAs: method. + * PCLib/PCEditorController.[hm]: Added and implemented method + closeEditorForFile:. + * PCLib/PCEditorController.m: + (editorDidClose:): Call [PCBrowserController projectDictDidChange:] + instead of [self setBrowserPath:]. + * PCLib/PCProject.h: Added PCNonProject contant. Added rootObjects, + rootKeys ivars. Removed categoryForFile: method. Renamed + removeSelectedFilePermanently: to removeSelectedFilesPermanently:. + * PCLib/PCProject.m: + (fileExtensionsForCategory:): Removed .m and .M extenstions from + PCOtherSources category. + (browserDidClickFile:category:): Setting category to editor added. + (removeFile:forKey:): Close editor when file removed. + (contentAtKeyPath:): Return rootKeys instead of all keys of rootCategories dictionary. + (removeFilesPermanently:): Call removeSelectedFilesPermanently: + (after renaming). + +2003-05-23 Serg Stoyan + + * PCMenuController.h: Added fileOpenQuickly:, fileNewUntitled: + methods. + * PCMenuController.m: + (projectSaveFiles:): Call [projectManager saveAllFiles]. + (openFile:): Check existance of opening file and call + [PCEditorController openFileInEditor:] here. + (fileSaveTo:): Implemented. + (fileRevertToSaved:): Call [projectManager revertFileToSaved]. + (fileOpenQuickly:): Added with alert panel. + (fileNewUntitled:): Ditto. + (validateMenuItem:): "File" menu items enabled for external editor + window. + + * ProjectCenter_main.m: (createMenu): Added actions to + "Open Quickly..." and "New Untitled" menu items. + + * PCLib/PCBrowserController.[hm]: setPathForFile: method added. + Removed browser:willDisplayCell:atRow:column: and + browser:selectCellWithString:inColumn: methods. + + * PCLib/PCBrowserController.m: + (click:): Don't load file into editor if multiple files selected. + + * PCLib/PCEditor+UInterface.m: + (_initUI): Set delegate for window to self. Removed bezel border. + Set text container added. Cleanup. + + * PCLib/PCEditor.[hm]: Added methods internalView, externalView, + setPath:, isEdited, saveFileAs:, saveFileTo:, revertFileToSaved, + closeFile:, editorShouldClose, windowShouldClose: + + * PCLib/PCEditor.m: + (setDelegate:): Set delegate for internal and external text views. + (revertFileToSaved): Set attributes to saved text before loading + into text view. + + * PCLib/PCEditorController.[hm]: Added methods saveFileAs:, + saveFileTo:, closeFile:, revertFileToSaved, setBrowserPath:. + + * PCLib/PCEditorController.m: + (openFileInEditor:): Set delegate to editor. + (closeAllEditors): Call PCEditor closeFile instead of + editor's window performClose. + (editorDidClose): After closing editor, show next in list. Set + to / if no editors left. + + * PCLib/PCEditorView.m: becomeFirstResponder method added. + + * PCLib/PCProject.[hm]: categoryForFile:, projectEditor, + editorController methodd added. saveFile, saveAllFiles, + saveAllFilesIfNeeded, revertFile methods removed. + + * PCLib/PCProjectDebugger.h: textAttributes ivar added. + logString:error: and logString:error:newLine: methods removed. + logString:newLine: added. + + * PCLib/PCProjectDebugger.m: Cleanup. Error view removed. + + * PCLib/PCProjectEditor.m: Removed horizonal scroller. + + * PCLib/PCProjectManager.[hm]: saveAllFiles, saveFileAs:, + saveFileTo:, revertFileToSaved, closeFile, activeProject, + projectPath, selectedFileName methods added. + +2003-05-16 Serg Stoyan + + * GNUmakefile: Remove PCAppController+MenuHandling.h and + PCAppController+MenuHandling.m. + * GNUmakefile.bundles: Add -Wall -Werror options to + ADDITIONAL_CFLAGS, ADDITIONAL_CPPFLAGS and ADDITIONAL_OBJCFLAGS. + * GNUmakefile.preamble: Ditto. + * PCAppController.h: infoController and menuController definitions + added. + * PCAppController.m: respondsToSelector:, forwardInvocation:, + infoController, menuController methods added. + * PCMenuController.h: Rename all action methods in form like + openFile into fileOpen to avoid name conflict with PCLib/ objects's + methods. + * ProjectCenter_main.m: Ditto. Remove unused format_font ivar. + * PCMenuController.m: Ditto. + (projectSaveAs:): Added alert panel. + (projectRemoveFiles:): Ability to remove multiple files added. + (fileSaveAs:): Added alert panel. + (fileSaveTo:): Ditto. + (fileClose:): Ditto. + (validateMenuItem:): Fixes related to "File" menu items. + * PCPrefController.m: + (_initUI): Increase prefEmptyView height by 2 pixels. + + * PCLib/PCBrowserController.h: selectedFiles method added. + * PCLib/PCBrowserController.m: + (selectedFiles): Added. Returns array of selected filenames. + * PCLib/PCBundleLoader.m: + (loadBundlesAtPath:): Added parentheses around assignment used as + truth value to avoid warning. + * PCLib/PCDataSource.m: + (init): Ditto. + * PCLib/PCEditorController.h: Added activeEditor method. + * PCLib/PCEditorController.m: + (activeEditor): Implemented. Returns current editor displayed in + project window. + (internalEditorForFile:): Added parentheses around assignment used + as truth value to avoid warning. + (saveFile): Use activeEditor. + (revertFile): Ditto. + * PCLib/PCFileManager.m: + (showAddFileWindow): Initialize ivars to avoid warning. Added + parentheses around assignment used as truth value to avoid warning. + * PCLib/PCProject.m: + (removeSelectedFilePermanently:): Initialize ivars to avoid warning. + Added ability to remove multiple files. + * PCLib/PCProjectBuilder.m: + (_createComponentView): Remove unused box and separateView ivars. + * PCLib/PCProjectDebugger.m + (_createComponentView): Remove unused split, scrollView1 and box + ivars. + (run:): Initialize tn ivar. + * PCLib/ProjectDelegate.h: Added. Declare ProjectDelegate protocol. + * PCLib/PCProjectManager.h: Added ProjectDelegate protocol. delegate + conforms to ProjectDelegate protocol. + * PCLib/PCProjectManager.m + (saveProjectAs:): Removed alert panel. + +2003-05-11 Philippe C.D. Robert + + * PCFileManager.m: + Directories can be chosen in case of interfaces. + +2003-05-08 Serg Stoyan + + * PCMenuController.m: + (validateMenuItem:): Update to the current set of menu items. + * ProjectCenter_main.m: + (createMenu): Set saveFiles: action to "Save Files..." menu item. + * ProjectCenterInfo.plist: Update authors' e-mails. + + * PCBaseFileTypes/PCBaseFileType.m: + (createFileOfType:type:project): Initializing newFile ivar before + creating file. Cleanup. + + * PCLib/PCFileManager+UInterface.m: + (_initUI): Set spacing between buttons to 8. + * PCLib/PCFileManager.m: + (showAddFileWindow): Reformatting. + * PCLib/PCProject.m: + (save): Removed calling to [self saveAllFiles]. + * PCLib/PCProjectManager.m: + (saveProject): Removed saving all files. + (saveFiles): Call [activeProject saveAllFiles] added. + * PCLib/PCBrowserController.m: + (setBrowser:): Change setAllowsMultipleSelection to YES. + * PCLib/PCProject+UInterface.m: + (_initUI): Removed setting browser characteristics code. + +2003-05-07 Serg Stoyan + + * ProjectCenter: Files moved to root directory. + * ProjectCenterInfo.plist: List of authors updated. + * GNUmakefile: Don't create ProjectCenter link to . dir. + * GNUmakefile.postamble: Add removing headers after uninstall. + * GNUmakefile.bundles: Added. This file is included by bundle's + GNUmakefile. + + * Removed all unused GNUmakefile.preamble, GNUmakefile.postamble, + .pcproj and plist files. + * Add include ../GNUmakefile.bundles to all bundles' GNUmakefiles. + +2003-05-06 Serg Stoyan + + * PCAppProj/Templates: Created. AppController.h, AppController.m, + PC.proj, main.m moved here. Added GNUmakefile.preamble and + GNUmakefile.postamble files. + * PCAppProj/Templates/PC.proj: Changed MAKEFILEDIR to + $(GNUSTEP_MAKEFILES). + * PCAppProj/GNUmakefile: Changed resources' locations to new. + * PCAppProj/Info-project.plist: Removed. + +2003-05-05 Serg Stoyan + + * GNUmakefile: Place ProjectCenter subproject after PCLib. + * pcproj_bundle.make: Added. + + * PCAppProj/GNUmakefile: Added include pcproj_bundle.make. + * PCBaseFileTypes/GNUmakefile: Ditto. + * PCBundleProj/GNUmakefile: Ditto. + * PCGormProj/GNUmakefile: Ditto. + * PCLibProj/GNUmakefile: Ditto. + * PCRenaissanceProj/GNUmakefile: Ditto. + * PCToolProj/GNUmakefile: Ditto. + + * PCLib/PCBundleLoader.h: + (loadBundlesAtPath:): Added. + * PCLib/PCBundleLoader.m: + (loadBundles): First load bundles from main bundle's resource + directory, then load third party bundles from directory + Library/ApplicationSupport/ProjectCenter. + (loadBundlesAtPath:): Added. Loads bundles from specified directory. + +2003-05-02 Serg Stoyan + + * PCLib/PCProjectBuilder.h: + * PCLib/PCProjectBuilder.m: + Rename buildPanelCreate: to createBuildPanel. Add buildPanel method. + (_createBuildPanel): Add setHidesOnDeactivate: NO. + + * PCLib/PCProjectDebugger.h: + * PCLib/PCProjectDebugger.m: + Rename launchPanelCreate: to createLaunchPanel. Add launchPanel method. + (_createLaunchPanel): Add setHidesOnDeactivate:NO and + setReleasedWhenClosed:NO. + + * PCLib/PCProject+ComponentHandling.m: + (showBuildView): Fix methods calling according to the above changes. + (showRunView): Ditto. + + * PCLib/PCProject.m: + (windowWillClose:): Close build and debugger panels if any. + +2003-05-01 Serg Stoyan + + * PCLib/PCProjectBuilder.h: + * PCLib/PCProjectBuilder.m: + Building was made a separate task. + + * PCLib/PCProjectManager.m: + (createProjectOfType:): Add pcproj filename before adding to + loadedProjects array. + + * ProjectCenter/Images/Stop.tiff: Added. + * ProjectCenter/GNUmakefile: Added Stop.tiff to resources. + + * ProjectCenter/PCPrefController.m: + (showPrefWindow:): Set successField and failureField values from + defaults. + +2003-04-28 Adam Fedor + + * PCLib/PCMakefileFactory.m (-appendOtherSources): Changed from + appendCFiles. + (-appendHeaders:forTarget:, -appendClasses:forTarget:, + -appendOtherSources:forTarget): New. + (-appendHeaders:, -appendClasses:, -appendOtherSources:, + -appendLibraryHeaders:, appendLibraryClasses:, + appendLibraryOtherSources:): Use them. + * PCLib/PCProject.m (-fileExtensionsForCategory): Add .m to + PCOtherSources. + * PCAppProj/PCAppProject.m (-writeMakefile): Use appendOtherSources: + * PCBundleProj/PCBundleProject.m, PCGormProj/PCGormProject.m, + PCLibProj/PCLibProject.m, PCRenaissanceProj/PCRenaissanceProject.m, + PCToolProj/PCToolProject.m: Idem. + +2003-04-27 Adam Fedor + + * PCAppProj/PCAppProj.pcproj, PCBaseFileTypes/PCBaseFileTypes.pcproj, + PCBundleProj/PCBundleProj.pcproj, PCGormProj/PCGormProj.pcproj, + PCLib/ProjectCenter.pcproj, PCLibProj/PCLibProj.pcproj, + PCRenaissanceProj/PCRenaissanceProj.pcproj, + PCToolProj/PCToolProj.pcproj, ProjectCenter/ProjectCenter.pcproj: + Change $(GNUSTEP_SYSTEM_ROOT)/Makefiles to $(GNUSTEP_MAKEFILES) + +2003-04-23 Serg Stoyan + + * PCLib/PCDefines.h: SeparateBuilder, SeparateLauncher, + SeparateEditor defines were added. + + * PCLib/PCProject+ComponentHandling.m: Added ability to display + ProjectBuilder as separate panel or as view inside main project + window. + + * PCLib/PCProject+UInterface.m: Ditto. + + * PCLib/PCProjectBuilder.m: Ditto. + + * PCLib/PCProjectBuilder.h: Ditto. + + * PCLib/PCProject.m: + (windowWillClose:): Removed calling showBuildView: hack. + + * PCLib/PCProjectManager.m: + (loadProjectAt:): Removed centering project window. + + * ProjectCenter/PCPrefController.h: separateBuilder separateLauncher, + id separateEditor defines added. + + * ProjectCenter/PCPrefController.m: Added new section "Interface". + Moved "Use external Editor" and "Prompt when quitting" from + "Miscellaneous" section into "Interface" section. Cleanup. + + * ChangLogs in all subprojects moved to ChangeLog.old files. + All changes should go into this ChangeLog only. + + * PCAppProj/PCAppProject.m: Added PCProject+UInterface.h include. + * PCBundleProj/PCBundleProject.m: Ditto. + * PCGormProj/PCGormProject.m: Ditto. + * PCLibProj/PCLibProject.m: Ditto. + * PCRenaissanceProj/PCRenaissanceProject.m: Ditto. + * PCToolProj/PCToolProject.m: Ditto. + +2003-01-25 Daniel Luederwald + + * GNUmakefile (SUBPROJECTS): New project PCRenaissanceProj + +2002-10-06 15:45 probert + + * AUTHORS, PCLib/PCEditor.h, PCLib/PCEditor.m, + PCLib/PCEditorView.m, PCLib/PCProjectEditor.h, + PCLib/PCProjectEditor.m, ProjectCenter/ProjectCenterInfo.plist, + ProjectCenter/ProjectCenter_main.m: Updated the AUTHORS file and + applied David Ayers' patch. + +2002-08-10 16:24 probert + + * AUTHORS: Added the AUTHORS file + +2002-08-10 14:10 probert + + * PCLib/PCEditor.m: Applied patch sent in by O. Kornilov to avoid + exception when clicking on file name in browser + +2002-08-10 13:41 probert + + * PCLib/PCEditorView+Highlighting.m: Removed call to super's + initialize + +2002-06-01 16:00 probert + + * INSTALL, PCAppProj/ChangeLog, PCBaseFileTypes/ChangeLog, + PCBundleProj/ChangeLog, PCGormProj/ChangeLog, PCLib/ChangeLog, + PCLibProj/ChangeLog, PCToolProj/ChangeLog, ProjectCenter/ChangeLog: + Updated ChangeLogs + +2002-06-01 15:56 probert + + * PCBaseFileTypes/GNUmakefile, + PCBaseFileTypes/PCBaseFileTypes.pcproj, PCBundleProj/GNUmakefile, + PCBundleProj/PCBundleProj.pcproj, PCGormProj/GNUmakefile, + PCGormProj/PCGormProj.pcproj, PCLibProj/GNUmakefile, + PCLibProj/PCLibProj.pcproj, PCToolProj/GNUmakefile, + PCToolProj/PCToolProj.pcproj: Installation into + GNUSPTE_INSTALLATION_DIR + +2002-06-01 15:55 probert + + * PCLib/PCMakefileFactory.m: Code cleanup + +2002-06-01 15:54 probert + + * ProjectCenter/: GNUmakefile, ProjectCenter.pcproj, + ProjectCenterInfo.plist: New version 0.3.0 + +2002-06-01 15:53 probert + + * PCAppProj/: GNUmakefile, PCAppProj.pcproj, PCAppProject.m: Fixed + a bug in the app makefile creation + +2002-06-01 15:46 probert + + * PCLib/: GNUmakefile, PCBundleLoader.m, PCMakefileFactory.m, + ProjectCenter.pcproj: Fixed a bug in the lib makefile creation + part. + +2002-06-01 15:07 probert + + * PCBundleProj/: PC.proj, PCBundleProject.m: The default + installation path prefix for bundles is now set to + $GNUSTEP_INSTALLATION_DIR + +2002-04-26 05:12 fedor + + * PCAppProj/ChangeLog, PCAppProj/PCAppProject.m, + PCBundleProj/ChangeLog, PCBundleProj/PCBundleProject.m, + PCGormProj/ChangeLog, PCGormProj/PCGormProject.m, PCLib/ChangeLog, + PCLib/GNUmakefile, PCLib/PCBrowserController.m, + PCLib/PCHistoryController.m, PCLib/PCProject.m, + PCLib/PCProjectManager.m, PCLibProj/ChangeLog, + PCLibProj/PCLibProject.m, PCToolProj/ChangeLog, + PCToolProj/PCToolProject.m: removed bunches of duplicate calls, + retains and releases. + +2002-04-25 23:12 fedor + + * PCLib/: ChangeLog, PCBrowserController.m, PCHistoryController.m: + Retain browser + +2002-03-25 20:37 probert + + * NEWS, PCAppProj/ChangeLog, PCBaseFileTypes/ChangeLog, + PCBundleProj/ChangeLog, PCGormProj/ChangeLog, PCLib/ChangeLog, + PCLib/Version, PCLibProj/ChangeLog, PCToolProj/ChangeLog, + ProjectCenter/ChangeLog, ProjectCenter/ProjectCenterInfo.plist: + ChangeLog updates + +2002-03-04 11:19 CaS + + * ChangeLog, ProjectCenter/PCMenuController.m: Tidy save panel a + bit. + +2002-03-03 16:31 probert + + * PCLibProj/PCLibProject.m: Forgot to include the Version file - + fixed. + +2002-03-03 14:47 probert + + * PCLib/: PCHistoryController.m, PCProject.m: Fixed mem leak in the + history controller. + +2002-03-03 14:45 probert + + * ProjectCenter/ProjectCenter_main.m: Removed conflicting + keybindings ( font and find panel ) + +2002-03-02 14:58 probert + + * ProjectCenter/ProjectCenter_main.m: The font menu is back ( + needed by the file editors ) + +2002-03-02 14:58 probert + + * PCLib/: PCEditor.m, PCEditorView.m: Editors should now use the + font panel. + +2002-03-02 14:15 probert + + * PCLib/: PCEditor.h, PCEditor.m, PCEditorController.m: Using + saveFileIfNeeded instead of saveFile. + +2002-03-02 14:11 probert + + * PCLib/: PCEditorController.h, PCEditorController.m, PCProject.m, + PCProjectManager.m: The timed safe mechanism now also saves all + project files, if needed. + +2002-03-01 16:32 probert + + * PCToolProj/: GNUmakefile, PCToolMakefileFactory.h, + PCToolMakefileFactory.m, PCToolProj.pcproj, PCToolProject.m: This + project now uses the makefile factory too. + +2002-03-01 16:19 probert + + * PCLib/: PCMakefileFactory.h, PCMakefileFactory.m: Added support + for tool projects. + +2002-03-01 16:06 probert + + * PCLibProj/: GNUmakefile, PCLibMakefileFactory.h, + PCLibMakefileFactory.m, PCLibProj.pcproj, PCLibProject.m: This + project now uses the makefile factory too. + +2002-03-01 15:58 probert + + * PCLib/: PCMakefileFactory.h, PCMakefileFactory.m: Support for + libraries added. + +2002-03-01 15:38 probert + + * PCGormProj/: GNUmakefile, PCGormMakefileFactory.h, + PCGormMakefileFactory.m, PCGormProj.pcproj, PCGormProject.m: This + project now uses the makefile factory too. + +2002-03-01 15:22 probert + + * PCBundleProj/PCBundleProj.m: Fix to avoid warning + +2002-03-01 15:18 probert + + * PCLib/: PCMakefileFactory.h, PCMakefileFactory.m: Support for + bundles + +2002-03-01 15:18 probert + + * PCBundleProj/: GNUmakefile, PCBundleMakefileFactory.h, + PCBundleMakefileFactory.m, PCBundleProj.pcproj, PCBundleProject.m: + The project now uses the shared makefile factory too. + +2002-03-01 14:30 probert + + * PCAppProj/PCAppProject.m: Removed old include statements. + +2002-03-01 14:28 probert + + * PCAppProj/: GNUmakefile, PCAppMakefileFactory.h, + PCAppMakefileFactory.m, PCAppProj.pcproj, PCAppProject.m: The + project now uses the makefile factory to create makefiles. + +2002-03-01 11:39 probert + + * PCLib/: GNUmakefile, PCMakefileFactory.h, PCMakefileFactory.m, + ProjectCenter.h, ProjectCenter.pcproj: Began to clean up the + makefile creation code. Introduced a shared factory for that + purpose which implements basic stuff used by all projects. + +2002-02-22 19:48 probert + + * PCLib/PCEditorController.m: Fixed a bug which caused PC to crash + when an external GS editor was used, thx to Richard for pointing me + to the right place! + +2002-02-21 22:26 probert + + * PCLib/PCProjectManager.m: Removed annoying alert panel raised + upon saving all projects + +2002-02-21 22:17 probert + + * PCLib/: GNUmakefile, PCBrowserController.m, + PCHistoryController.h, PCHistoryController.m, PCProject.h, + PCProject.m, ProjectCenter.h, ProjectCenter.pcproj: First attempt + of integrating a history browser for better file navigation. There + are still bugs though... + +2002-02-21 13:50 probert + + * PCLib/PCEditorController.m: When a GNUstep app is used as + external editor, NSWorkspace is used to open the file using the + repsective app. + +2002-02-21 13:25 probert + + * ProjectCenter/PCAppController.m: Fixed a bug which prevented the + app to load a project when being told via application:openfile: + +2002-02-21 12:41 probert + + * ProjectCenter/PCMenuController.m: The path for creating new + projects is now maintained by a separate defaults entry. + +2002-02-21 12:29 probert + + * PCLib/PCProject.m: Removing a file causes the browser to be + updated + +2002-02-21 12:25 probert + + * PCLib/: PCBrowserController.m, PCProject.m: If the project + changes the browser reloads the correct column. + +2002-02-21 11:45 probert + + * PCLib/PCProject+ComponentHandling.h, + PCLib/PCProject+ComponentHandling.m, PCLib/PCProject.h, + PCLib/PCProject.m, ProjectCenter/PCAppController+MenuHandling.h, + ProjectCenter/PCAppController+MenuHandling.m, + ProjectCenter/PCMenuController.m, + ProjectCenter/ProjectCenter_main.m: All project components are now + accessible via menu entry. Furthermore it is also possible to + launch the selected target via menu entry. + +2002-02-21 11:15 probert + + * PCLib/: PCEditorController.h, PCEditorController.m, PCProject.m: + Single click always invokes the internal editor now. + +2002-02-21 11:05 probert + + * PCLib/: PCBrowserController.h, PCBrowserController.m, + PCProject.h, PCProject.m: Cleaned up the code which is called upon + seleting a file in the project browser. Now libraries etc. do not + show up in the internal editor anymore. + +2002-02-17 21:10 probert + + * PCBaseFileTypes/ChangeLog, PCGormProj/ChangeLog, PCLib/ChangeLog, + ProjectCenter/ChangeLog: Updated the ChangeLog files + +2002-02-17 21:03 probert + + * ProjectCenter/: PCPrefController.h, PCPrefController.m: Added a + new preference panel related to code editing. For now there is only + 1 option available, the tab behaviour. + +2002-02-17 21:02 probert + + * PCLib/PCDefines.h: Added the TabBehaviour define required by the + preferences + +2002-02-17 18:40 probert + + * PCLib/: GNUmakefile, PCEditorView+Highlighting.h, + PCEditorView+Highlighting.m, PCEditorView.h, PCEditorView.m, + ProjectCenter.h, ProjectCenter.pcproj: Moved the (deprecated) + highlighting code into PCEditorView+Highlighting and implemented + tab (\t) capabilities. + +2002-02-17 14:14 probert + + * PCLib/: PCEditor.m, PCEditorController.m, PCEditorView.m, + PCProject.m, PCProjectEditor.m, PCProjectManager.m: Fixed 2 bugs + which caused a severe crash. + +2002-02-16 22:21 probert + + * PCGormProj/baseInterface.gorm: Enhanced the default menu entries + by adding standard submenu. + +2002-02-16 22:12 probert + + * PCGormProj/: baseInterface.classes, baseInterface.gorm: Updated + the Gorm generated files using the latest Gorm CVS code. + +2002-02-16 21:46 probert + + * PCLib/: PCBrowserController.m, PCFileManager.h, PCFileManager.m, + PCProject+ComponentHandling.m, PCProjectEditor.m: Enhanced the 'new + file window' by adding a description view. + +2002-02-16 21:43 probert + + * PCBaseFileTypes/: GNUmakefile, PCBaseFileType.m, + PCBaseFileTypes.pcproj, nsviewclass.template, + nsviewheader.template: Added support for a NSView subclass + template. Also added a description to every file template. + +2002-02-12 22:44 probert + + * PCLib/PCProject.m: Fixed the bug that when clicking on a source + file for the first time, the editor did not display the file's + content. + +2002-02-12 21:14 probert + + * ProjectCenter/ProjectCenterInfo.plist: Updated copyright + message... + +2002-02-12 21:05 probert + + * PCLib/: PCProjectBuilder.m, PCProjectDebugger.h, + PCProjectDebugger.m: Added a launch target popup which lets the + user choose between the default or the debug target. + +2002-02-11 23:19 probert + + * PCLib/GNUmakefile, PCLib/PCEditor.h, PCLib/PCEditor.m, + PCLib/PCEditorController.m, PCLib/PCEditorView.h, + PCLib/PCEditorView.m, PCLib/PCFileManager.m, + PCLib/PCProject+ComponentHandling.h, + PCLib/PCProject+ComponentHandling.m, PCLib/PCProject.h, + PCLib/PCProject.m, PCLib/PCProjectBuilder.h, + PCLib/PCProjectBuilder.m, PCLib/PCProjectDebugger.h, + PCLib/PCProjectEditor.h, PCLib/PCProjectEditor.m, + PCLib/ProjectCenter.h, PCLib/ProjectCenter.pcproj, + PCLib/ProjectComponent.h, + ProjectCenter/PCAppController+MenuHandling.m: Began to work on + support for an integrated editor, thus much has been rewritten + related to editor handling. This is work in progress... Every + PCProject component now has to conform to the ProjectComponent + protocol. Syntax highlighting is disabled for now, this will + undergo a major rewrite soon. Furthermore I separated the + component handling stuff from the main class file and put it into + PCProject+ComponentHandling. + +2002-02-03 20:31 probert + + * PCLib/: PCEditor.h, PCEditor.m, PCProject.m, PCTextFinder.m: + Optimised text edition reflection. Embedded editing will need more + changes in that respect, I fear... + +2002-02-03 17:31 probert + + * ProjectCenter/: PCAppController+MenuHandling.h, + PCAppController+MenuHandling.m, PCAppController.m, + PCMenuController.m, ProjectCenter_main.m: Integrated the text + finder into the menu structure and cleaned up some parts of the + code related to menus. + +2002-02-03 17:30 probert + + * PCLib/: GNUmakefile, PCEditor.m, PCTextFinder.h, PCTextFinder.m, + ProjectCenter.h, ProjectCenter.pcproj: Added a text finder to + ProjectCenter (based on Ali Ozer's code). + +2002-02-02 22:15 probert + + * ProjectCenter/: PCAppController+MenuHandling.h, + PCAppController+MenuHandling.m, PCMenuController.h, + PCMenuController.m, ProjectCenter_main.m: Menus are now + enabled/disabled whenever they should... + +2002-02-02 22:13 probert + + * PCLib/PCDefines.h: Defines belong into PCDefines.h now + +2002-02-02 22:12 probert + + * PCLib/: GNUmakefile, PCBrowserController.h, PCBundleLoader.h, + PCEditor.h, PCEditor.m, PCEditorView.m, PCFileManager.h, + PCProject.h, PCProjectBuilder.h, PCProjectManager.h, + PCProjectManager.m, PCServer.h, PreferenceController.h, + ProjectBuilder.h, ProjectCenter.h, ProjectCenter.pcproj, + ProjectDebugger.h, ProjectEditor.h, Server.h: Cleaned up the header + files ( added ifndef/define statements ), splitted the + ProjectCenter.h header and some other cleanups. Editor now send + notifications whenever they become or resign key. + +2002-02-02 20:21 probert + + * PCLib/PCBrowserController.m, PCLib/PCEditor.h, PCLib/PCEditor.m, + PCLib/PCEditorController.h, PCLib/PCEditorController.m, + PCLib/PCEditorView.h, PCLib/PCEditorView.m, PCLib/PCProject.h, + PCLib/PCProject.m, PCLib/PCProjectManager.m, + ProjectCenter/PCAppController.m: Kind of implemented saving and + reverting of common files. A long way to go, but for now it + works... + +2002-02-02 18:56 probert + + * PCLib/: GNUmakefile, PCBrowserController.h, + PCBrowserController.m, PCBundleLoader.h, PCBundleLoader.m, + PCEditor.h, PCEditor.m, PCEditorController.h, PCEditorController.m, + PCEditorView.h, PCEditorView.m, PCProject.h, PCProject.m, + PCProjectManager.m, PCServer.h, PCServer.m, ProjectCenter.pcproj: + Rewriting the entire editor code. Hence introduced a + PCEditorController and cleaned up the PCServer class. Every project + now has a controller which controls all editors. Editors itself use + an editor view to display the files or external editors. + +2002-01-29 22:46 probert + + * PCLib/: PCEditor.h, PCEditor.m, PCProjectManager.m: Fixed a bug + preventing reopening projects. Also added 2 methods which will be + used to make an editor embedded. + +2002-01-29 22:29 probert + + * PCLib/: GNUmakefile, PCEditor.h, PCEditor.m, PCServer.h, + PCServer.m, ProjectCenter.pcproj: Cleaning up the internal editor + code. More to come... + +2002-01-27 14:55 probert + + * PCLib/: GNUmakefile, PCProject.m, PCProjectDebugger.m, + PCSplitView.h, PCSplitView.m, ProjectCenter.pcproj: Using a + customised split view instead of a NSSplitView - more to come... + +2002-01-27 14:37 probert + + * PCLib/PCProject.m: Minor UI enhancement: main button alignement + adjusted. + +2002-01-27 14:32 probert + + * PCLib/: PCProject.m, PCProjectBuilder.h, PCProjectBuilder.m, + PCProjectDebugger.m: Removed unneeded buttons, added a title to the + remaining ones and introduced a splitview between the project + browser and component view. In the build view a popup button is now + used for build targets. + +2002-01-20 12:02 probert + + * GNUmakefile: Cleanup of the toplevel makefile + +2002-01-19 12:54 nico + + * ChangeLog, GNUmakefile: Minor change to make it compile again + +2002-01-07 16:36 probert + + * PCGormProj/PC.proj, PCAppProj/PC.proj: Somehow + $(GNUSTEP_LOCAL_ROOT) is enough for the install path to be correct. + +2002-01-07 16:05 probert + + * PCAppProj/ChangeLog, PCBaseFileTypes/ChangeLog, + PCBundleProj/ChangeLog, PCGormProj/ChangeLog, PCLib/ChangeLog, + PCLibProj/ChangeLog, PCToolProj/ChangeLog, ProjectCenter/ChangeLog: + Updated all ChangeLog files (using cvs2cl.pl) + +2002-01-07 16:01 probert + + * PCAppProj/GNUmakefile, PCAppProj/PCAppProj.pcproj, + PCBaseFileTypes/GNUmakefile, + PCBaseFileTypes/PCBaseFileTypes.pcproj, PCBundleProj/GNUmakefile, + PCBundleProj/PCBundleProj.pcproj, PCGormProj/GNUmakefile, + PCGormProj/GNUmakefile.preamble, PCGormProj/PCGormProj.pcproj, + PCLibProj/GNUmakefile, PCLibProj/PCLibProj.pcproj, + PCToolProj/GNUmakefile, PCToolProj/PCToolProj.pcproj: Added + libProjectCenter to the bundle's library link settings. + +2002-01-07 11:00 probert + + * Version, PCLib/GNUmakefile, PCLib/PCBrowserController.m, + PCLib/PCEditorView.m, PCLib/PCFileManager.m, + PCLib/ProjectCenter.pcproj, PCLib/Version: PCLib is now maintained + by ProjectCenter as well! + +2002-01-07 10:37 probert + + * PCAppProj/PC.project, PCAppProj/PCAppProj.m, + PCAppProj/PCAppProj.pcproj, PCBaseFileTypes/PC.project, + PCBaseFileTypes/PCBaseFileTypes.pcproj, PCBundleProj/PC.project, + PCBundleProj/PCBundleProj.m, PCBundleProj/PCBundleProj.pcproj, + PCGormProj/PC.project, PCGormProj/PCGormProj.m, + PCGormProj/PCGormProj.pcproj, PCLib/PCProject.m, + PCLib/PCProjectManager.m, PCLibProj/PC.project, + PCLibProj/PCLibProj.m, PCLibProj/PCLibProj.pcproj, + PCToolProj/PC.project, PCToolProj/PCToolProj.m, + PCToolProj/PCToolProj.pcproj, ProjectCenter/PC.project, + ProjectCenter/PCMenuController.m, + ProjectCenter/ProjectCenter.pcproj, + ProjectCenter/ProjectCenterInfo.plist: ProjectCenter now stores the + project files under PROJECTNAME.pcproj to avoid name clashes. + +2002-01-07 05:40 fedor + + * PCGormProj/: ChangeLog, GNUmakefile.preamble: Include + -lProjectCenter correctly + +2002-01-02 18:51 probert + + * PCAppProj/PC.proj, PCAppProj/PC.project, + PCBaseFileTypes/PC.project, PCBundleProj/PC.proj, + PCBundleProj/PC.project, PCGormProj/PC.proj, PCGormProj/PC.project, + PCLibProj/PC.proj, PCLibProj/PC.project, PCToolProj/PC.proj, + PCToolProj/PC.project, ProjectCenter/PC.project: Changed the build + tool entry to /usr/bin/make in all project files and templates. + +2002-01-02 18:43 probert + + * PCLib/: PCProject.m, PCProjectBuilder.m: The build tool can now + be customised. Make sure to enter a valid path in the inspector + field! + +2002-01-02 18:33 probert + + * PCLib/GNUmakefile: The library now gets installed in the proper + directory as well. + +2002-01-02 17:37 probert + + * PCGormProj/ChangeLog: Added the ChangeLog for the Gorm App + project + +2002-01-02 17:33 probert + + * PCGormProj/PCGormMakefileFactory.m, + PCLibProj/PCLibMakefileFactory.m, + PCToolProj/PCToolMakefileFactory.m: Libraries, Gorm apps and tools + use the install path now, too. + +2002-01-02 17:05 probert + + * PCAppProj/GNUmakefile, PCAppProj/PC.proj, PCAppProj/PC.project, + PCAppProj/PCAppMakefileFactory.m, PCAppProj/PCAppProject.m, + PCBaseFileTypes/GNUmakefile, PCBaseFileTypes/PC.project, + PCBundleProj/GNUmakefile, PCBundleProj/PC.proj, + PCBundleProj/PC.project, PCBundleProj/PCBundleMakefileFactory.m, + PCBundleProj/PCBundleProject.m, PCGormProj/GNUmakefile, + PCGormProj/PC.proj, PCGormProj/PC.project, + PCGormProj/PCGormProject.m, PCLib/PCProject.h, PCLib/PCProject.m, + PCLib/PCProjectBuilder.m, PCLib/PCProjectManager.m, + PCLibProj/GNUmakefile, PCLibProj/LibProject.gmodel, + PCLibProj/PC.proj, PCLibProj/PC.project, PCToolProj/GNUmakefile, + PCToolProj/PC.proj, PCToolProj/PC.project, + ProjectCenter/GNUmakefile, ProjectCenter/PC.project: The inspector + now handles the installation path and other settings. Furthermore + it does not save changes automatically but marks the project as + being edited. Upon 'save' the project file and GNUmakefile are + being saved, not before! In addition the various PC* bundles are + now maintained by ProjectCenter itself. The installation path for + ProjectCenter.app is corrected to the SYSTEM ROOT as well. + +2002-01-02 13:13 probert + + * INSTALL, PCAppProj/AppController.h, PCAppProj/AppController.m, + PCAppProj/GNUmakefile, PCAppProj/PC.proj, + PCBaseFileTypes/GNUmakefile, PCBundleProj/GNUmakefile, + PCBundleProj/PC.proj, PCGormProj/GNUmakefile, PCGormProj/PC.proj, + PCLib/PCBundleLoader.m, PCLibProj/GNUmakefile, PCLibProj/PC.proj, + PCToolProj/GNUmakefile, PCToolProj/PC.proj, + ProjectCenter/PCAppController.m: All bundles and libProjectCenter + are now installed under GNUSTEP_SYSTEM_ROOT. Also the PC.proj + templates have now a correct install path default value. + +2002-01-01 19:21 probert + + * PCLib/PCProjectBuilder.m: Added a new button for the build target + 'dist' in the builder panel + +2002-01-01 19:09 probert + + * ProjectCenter/: GNUmakefile, PC.project, ProjectCenter_dist.tiff, + ProjectCenter_rpm.tiff: Added the icon for creating a tar.gz dist + and updated the project files using the latest CVS code. + +2002-01-01 18:27 probert + + * Version, PCAppProj/PC.proj, PCAppProj/PCAppProject.h, + PCAppProj/PCAppProject.m, PCBundleProj/PC.proj, + PCBundleProj/PCBundleProject.h, PCBundleProj/PCBundleProject.m, + PCGormProj/PC.proj, PCGormProj/PCGormProject.h, + PCGormProj/PCGormProject.m, PCLib/PCProject.h, PCLib/PCProject.m, + PCLib/PCProjectBuilder.m, PCLib/PCProjectManager.m, + PCLibProj/PC.proj, PCLibProj/PCLibProject.h, + PCLibProj/PCLibProject.m, PCToolProj/PC.proj, + PCToolProj/PCToolProject.h, PCToolProj/PCToolProject.m, + ProjectCenter/ProjectCenterInfo.plist: ProjectCenter now validates + project dictionaries and updates them if requested. I also added + new keys tp the PC.project files in order to be able to generate + valid *.spec.in files needed when building RPMs. + +2001-12-29 16:56 probert + + * ANNOUNCE: Updated ANNOUNCE file + +2001-12-29 16:44 probert + + * NEWS: Updated NEWS for 0.2.6 + +2001-12-29 16:37 probert + + * ChangeLog, Version, PCAppProj/ChangeLog, + PCBaseFileTypes/ChangeLog, PCBundleProj/ChangeLog, PCLib/ChangeLog, + PCLibProj/ChangeLog, PCToolProj/ChangeLog, ProjectCenter/ChangeLog, + ProjectCenter/ProjectCenterInfo.plist: Removed the toplevel + ChangeLog, updated the ChangeLogs in the subdirectories and raised + the version number to 0.2.6. + +2001-12-29 16:28 probert + + * ProjectCenter/PCPrefController.h, + ProjectCenter/PCPrefController.m, PCLib/PCProjectManager.h, + PCLib/PCProjectManager.m: Automatic, periodic saving of all open + projectfiles is now supported. + +2001-12-29 15:41 probert + + * PCLib/PCProject.m: Fixed some minor issues with file backup + handling + +2001-12-29 15:10 probert + + * ProjectCenter/: PCAppController+MenuHandling.h, + PCAppController+MenuHandling.m, PCAppController.m, + PCMenuController.h, PCMenuController.m, PCPrefController.h, + PCPrefController.m, ProjectCenter_main.m: Implemented more + preference handling and cleaned up some ugly parts of the code. + Removed the loadedProjectsWindow feature, it just does not make any + sense. + +2001-12-29 15:09 probert + + * PCLib/: PCProject.m, PCProjectManager.h, PCProjectManager.m, + ProjectCenter.h: Cleaned up the writeMakefile method and + implemented the save stuff the way it should be. Some additions for + proper preference handling have been made as well. + +2001-12-29 15:07 probert + + * PCLibProj/PCLibProject.m: leaned up the writeMakefile method + +2001-12-29 15:06 probert + + * PCAppProj/PCAppProj.m, PCAppProj/PCAppProject.m, + PCBundleProj/PCBundleProject.m, PCGormProj/PCGormProject.m, + PCToolProj/PCToolProject.m: Cleaned up the writeMakefile method + +2001-12-28 15:11 probert + + * PCLib/PCProjectDebugger.m: Fixed a typo and altered matrix button + behaviour + +2001-12-28 15:11 probert + + * ProjectCenter/: GNUmakefile, PC.project: Added the missing rpm + icon + +2001-12-28 14:46 probert + + * PCBaseFileTypes/: cfile.template, cheader.template, + class.template, header.template, protocol.template: Updated the + header information for all created file types + +2001-09-25 17:46 fedor + + * ChangeLog, PCGormProj/GNUmakefile.preamble: Include proper header + dirs + +2001-08-03 16:31 probert + + * INSTALL, ProjectCenter/ProjectCenterInfo.plist: Minor changes + +2001-08-03 16:23 probert + + * Version, PCAppProj/AppController.h, PCAppProj/AppController.m, + PCAppProj/PCAppMakefileFactory.h, PCAppProj/PCAppMakefileFactory.m, + PCAppProj/PCAppProj.h, PCAppProj/PCAppProj.m, + PCAppProj/PCAppProject.h, PCAppProj/PCAppProject.m, + PCBaseFileTypes/PCBaseFileType.h, PCBaseFileTypes/PCBaseFileType.m, + PCBundleProj/PCBundleMakefileFactory.h, + PCBundleProj/PCBundleMakefileFactory.m, + PCBundleProj/PCBundleProj.h, PCBundleProj/PCBundleProj.m, + PCBundleProj/PCBundleProject.h, PCBundleProj/PCBundleProject.m, + PCGormProj/PCGormMakefileFactory.h, + PCGormProj/PCGormMakefileFactory.m, PCGormProj/PCGormProj.h, + PCGormProj/PCGormProj.m, PCGormProj/PCGormProject.h, + PCGormProj/PCGormProject.m, PCLib/FileCreator.h, + PCLib/PCBrowserController.h, PCLib/PCBrowserController.m, + PCLib/PCBundleLoader.h, PCLib/PCBundleLoader.m, + PCLib/PCDataSource.h, PCLib/PCDataSource.m, PCLib/PCEditorView.h, + PCLib/PCEditorView.m, PCLib/PCFileManager.h, PCLib/PCFileManager.m, + PCLib/PCProject.h, PCLib/PCProject.m, PCLib/PCProjectBuilder.h, + PCLib/PCProjectBuilder.m, PCLib/PCProjectDebugger.h, + PCLib/PCProjectDebugger.m, PCLib/PCProjectManager.h, + PCLib/PCProjectManager.m, PCLib/PCServer.h, PCLib/PCServer.m, + PCLib/PreferenceController.h, PCLib/ProjectBuilder.h, + PCLib/ProjectCenter.h, PCLib/ProjectDebugger.h, + PCLib/ProjectEditor.h, PCLib/ProjectType.h, PCLib/Server.h, + PCLibProj/PCLibMakefileFactory.h, PCLibProj/PCLibMakefileFactory.m, + PCLibProj/PCLibProj.h, PCLibProj/PCLibProj.m, + PCLibProj/PCLibProject.h, PCLibProj/PCLibProject.m, + PCToolProj/PCToolMakefileFactory.h, + PCToolProj/PCToolMakefileFactory.m, PCToolProj/PCToolProj.h, + PCToolProj/PCToolProj.m, PCToolProj/PCToolProject.h, + PCToolProj/PCToolProject.m, + ProjectCenter/PCAppController+MenuHandling.h, + ProjectCenter/PCAppController+MenuHandling.m, + ProjectCenter/PCAppController.h, ProjectCenter/PCAppController.m, + ProjectCenter/PCFindController.h, ProjectCenter/PCFindController.m, + ProjectCenter/PCInfoController.h, ProjectCenter/PCInfoController.m, + ProjectCenter/PCLogController.h, ProjectCenter/PCLogController.m, + ProjectCenter/PCMenuController.h, ProjectCenter/PCMenuController.m, + ProjectCenter/PCPrefController.h, ProjectCenter/PCPrefController.m, + ProjectCenter/ProjectCenter_main.m: New version - now copyrighted + by the FSF + +2001-08-01 18:27 probert + + * PCLib/PCEditorView.m: Better highlighting of keywords + +2001-08-01 18:27 probert + + * PCBaseFileTypes/: PCBaseFileType.m, cheader.template, + header.template: Better templates for headers + +2001-08-01 15:12 probert + + * PCBaseFileTypes/: PCBaseFileType.m, cheader.template, + header.template: optimised include behaviour + +2001-08-01 14:43 probert + + * ProjectCenter/: ChangeLog, ProjectCenterInfo.plist: Some updated + information regarding the version + +2001-08-01 14:43 probert + + * ChangeLog: Removed the toplevel ChangeLog file + +2001-08-01 14:35 probert + + * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, + INSTALL, NEWS, README, PCAppProj/GNUmakefile, + PCAppProj/GNUmakefile.postamble, PCAppProj/GNUmakefile.preamble, + PCAppProj/PCAppMakefileFactory.m, PCBaseFileTypes/GNUmakefile, + PCBaseFileTypes/GNUmakefile.preamble, PCBundleProj/GNUmakefile, + PCBundleProj/GNUmakefile.postamble, + PCBundleProj/GNUmakefile.preamble, + PCBundleProj/PCBundleMakefileFactory.m, PCGormProj/GNUmakefile, + PCGormProj/GNUmakefile.postamble, PCGormProj/GNUmakefile.preamble, + PCGormProj/PCGormMakefileFactory.m, PCLib/GNUmakefile, + PCLib/GNUmakefile.postamble, PCLib/GNUmakefile.preamble, + PCLibProj/GNUmakefile, PCLibProj/GNUmakefile.postamble, + PCLibProj/GNUmakefile.preamble, PCLibProj/PCLibMakefileFactory.m, + PCLibProj/h.template, PCToolProj/GNUmakefile, + PCToolProj/GNUmakefile.postamble, PCToolProj/GNUmakefile.preamble, + PCToolProj/PCToolMakefileFactory.m, ProjectCenter/GNUmakefile, + ProjectCenter/GNUmakefile.postamble, + ProjectCenter/GNUmakefile.preamble: New copyright information and + minor template additions + +2001-07-15 13:41 probert + + * ChangeLog: Added ChangeLog file + +2001-07-07 13:56 probert + + * ProjectCenter/: PCAppController.m, ProjectCenterInfo.plist: + Default editor is now vi, new version number added + +2001-07-07 13:56 probert + + * Version: New version 0.2.4 + +2001-07-07 13:48 probert + + * ProjectCenter/: GNUmakefile, ProjectCenter_main.m: Little GUI + modifications + +2001-07-07 13:48 probert + + * PCLib/: PCProjectDebugger.m, PCServer.m: Little GUI + modifications, done by Pierre-Yves Rivaille + +2001-07-07 13:48 probert + + * PCGormProj/: GNUmakefile, GNUmakefile.postamble, + GNUmakefile.preamble, Info-project.plist, Info.table, PC.proj, + PCGormMakefileFactory.h, PCGormMakefileFactory.m, PCGormProj.h, + PCGormProj.m, PCGormProject.h, PCGormProject.m, + baseInterface.classes, baseInterface.gorm, h.template, m.template, + main.m: Added the GormApplication project, done by Pierre-Yves + Rivaille + +2001-07-07 13:47 probert + + * GNUmakefile: [no log message] + +2001-07-01 21:02 probert + + * PCBaseFileTypes/GNUmakefile.preamble, + PCLib/GNUmakefile.postamble: Added makefile + +2001-07-01 21:01 probert + + * PCAppProj/GNUmakefile, PCAppProj/GNUmakefile.preamble, + PCBaseFileTypes/GNUmakefile, PCBundleProj/GNUmakefile, + PCBundleProj/GNUmakefile.preamble, PCLib/GNUmakefile, + PCLib/GNUmakefile.preamble, PCLibProj/GNUmakefile, + PCLibProj/GNUmakefile.preamble, PCToolProj/GNUmakefile, + PCToolProj/GNUmakefile.preamble, + ProjectCenter/GNUmakefile.preamble: Applied patch from Adam Fedor + +2001-07-01 21:01 probert + + * ANNOUNCE: Minor update + +2001-01-29 13:17 robert + + * PCLib/: PCEditorView.m, PCProjectBuilder.m, PCServer.m: new + textview code required some changes + +2001-01-26 09:45 robert + + * ProjectCenter/: GNUmakefile, Info-project.plist, PC.project, + ProjectCenterInfo.plist: updated the PC.project file and renamed + the plist file + +2001-01-20 11:48 robert + + * PCAppProj/PCAppMakefileFactory.m: Fixed the ADDITIONAL_GUI_LIBS + line - this time it should be 100% OK + +2001-01-19 11:33 robert + + * PCAppProj/PCAppMakefileFactory.m: using LDFLAGS instead of + ADDITIONAL_GUI_LIBS solves the linker problem + +2001-01-14 18:54 robert + + * PCAppProj/ChangeLog, PCBaseFileTypes/ChangeLog, + PCBundleProj/ChangeLog, PCLib/ChangeLog, PCLibProj/ChangeLog, + PCToolProj/ChangeLog, ProjectCenter/ChangeLog: Updated the + ChangeLogs + +2001-01-14 18:01 robert + + * PCLib/PB.project: removing old PB stuff + +2001-01-14 17:57 robert + + * PCLib/: PCProjectBuilder.m, PCProjectDebugger.h, + PCProjectDebugger.m: Major improvements to the launch/debugger part + +2001-01-14 17:23 robert + + * PCLib/: Makefile, Makefile.postamble, Makefile.preamble: removed + old PB stuff + +2001-01-14 17:20 robert + + * Version: new version... + +2001-01-14 17:19 robert + + * ProjectCenter/ProjectCenter_main.m: cleanup in main() + +2001-01-14 17:15 robert + + * PCBaseFileTypes/: Makefile, Makefile.postamble, + Makefile.preamble, PB.project, PCBaseFileType.m: removed old PB + stuff and rearranged the file types + +2001-01-14 17:08 robert + + * PCAppProj/PCAppProject.m, PCBundleProj/PCBundleProject.m, + PCLibProj/PCLibProject.m, PCToolProj/PCToolProject.m: Added the + supporting files category + +2001-01-14 16:53 robert + + * PCLib/PCProject.m: Fixed some mem leaks + +2001-01-14 16:38 robert + + * ProjectCenter/: PCPrefController.h, PCPrefController.m: UI + cleanup and optimisation + +2001-01-14 16:08 robert + + * PCBundleProj/: PCBundleProject.h, PCBundleProject.m: the + principal class can now be set using the GUI + +2001-01-14 16:07 robert + + * PCAppProj/: PCAppProject.h, PCAppProject.m: teh application class + can now be set - althoug still ignored by the makefile + +2001-01-13 21:46 robert + + * PCBundleProj/PCBundleMakefileFactory.m, PCLib/PCFileManager.m, + PCLib/PCProject.m: fix in the bundle project related to the + principal class. + +2001-01-13 16:56 robert + + * PCBundleProj/PCBundleMakefileFactory.m: the principal class + should now be set in any cases + +2001-01-11 20:21 robert + + * PCLib/: PCProjectBuilder.m, PCProjectDebugger.m: some more + textview handling...sigh + +2001-01-11 19:42 robert + + * PCLib/: PCProjectBuilder.m, PCProjectDebugger.h, + PCProjectDebugger.m: Added a primitive app/too launcher/debugger + +2001-01-10 16:19 robert + + * Version, PCBundleProj/PCBundleMakefileFactory.m, + PCLib/PCProjectBuilder.h, PCLib/PCProjectBuilder.m, + ProjectCenter/GNUmakefile, ProjectCenter/ProjectCenter_rpm.tiff: + Initial support for RPM SPEC file creation + +2001-01-10 15:19 robert + + * PCToolProj/PCToolMakefileFactory.m: inclusion of PACKAGE_NAME + +2001-01-10 15:18 robert + + * PCAppProj/: Makefile, Makefile.postamble, Makefile.preamble, + PB.project, PCAppMakefileFactory.m: no PB support anymore, + inclusion of PACKAGE_NAME + +2001-01-10 15:17 robert + + * PCLibProj/: Makefile, Makefile.postamble, Makefile.preamble, + PB.project: no PB support anymore + +2001-01-10 14:10 robert + + * PCAppProj/main.m: applied the patch of nicola + +2001-01-10 13:56 robert + + * PCAppProj/AppController.m: default is YES in + applicationShouldTerminate: + +2001-01-07 15:43 robert + + * PCAppProj/PCAppProject.m, PCLib/PCProjectManager.h, + PCLib/PCProjectManager.m, ProjectCenter/Info-project.plist, + ProjectCenter/PCAppController+MenuHandling.m: some more minor fix + and cleanup work + +2001-01-07 15:11 robert + + * PCLib/PCBrowserController.m: removed unneeded log + +2001-01-07 15:10 robert + + * PCLib/PCProjectManager.m: logs only when in DEBUG + +2001-01-07 15:07 robert + + * PCLib/PCBrowserController.m: opening files using the workspace + now works a little bit better... + +2001-01-07 14:44 robert + + * PCLib/: PCServer.h, PCServer.m: reopening a file in the internal + editor now works w/o crashing + +2001-01-07 13:12 robert + + * PCLib/: PCBrowserController.m, PCProject.m, PCProjectManager.m: + reopening projects is now possible - finally... + +2001-01-07 12:36 robert + + * PCAppProj/PCAppProject.m: somehow the makefile was not being + written...?! + +2001-01-06 17:46 robert + + * INSTALL: slight correction + +2001-01-06 17:44 robert + + * PCAppProj/: PCAppProject.h, PCAppProject.m: AppIcons are now + set/cleaned correctly + +2001-01-06 17:26 robert + + * PCLib/: PCProject.h, PCProject.m, PCServer.m: minor bugfix in the + editor textview and new method to copy files into proj + +2001-01-03 07:38 robert + + * PCAppProj/: AppController.h, AppController.m: fixed a typo + +2000-11-10 19:27 robert + + * PCAppProj/PCAppProject.h, PCAppProj/PCAppProject.m, + PCBundleProj/PCBundleProject.h, PCBundleProj/PCBundleProject.m, + PCLib/PCProject.h, PCLib/PCProject.m, PCLib/PCProjectManager.m, + PCLibProj/PCLibProject.h, PCLibProj/PCLibProject.m, + PCToolProj/PCToolProject.h, PCToolProj/PCToolProject.m, + ProjectCenter/PCPrefController.m: some daily work... + +2000-11-10 15:07 robert + + * PCAppProj/ChangeLog, PCBaseFileTypes/ChangeLog, + PCBundleProj/ChangeLog, PCLibProj/ChangeLog, PCToolProj/ChangeLog: + changelog for 0.2 + +2000-11-10 15:07 robert + + * PCLib/ChangeLog, ProjectCenter/ChangeLog: changelog for 0.2.0 + +2000-11-04 18:11 robert + + * ProjectCenter/PCPrefController.m: some interface changes + +2000-11-04 17:48 robert + + * ProjectCenter/: PCAppController.m, PCPrefController.m: the bundle + path is now depending on the GNUSTEP_LOCAL_ROOT env variable + +2000-11-04 17:47 robert + + * PCLib/PCBundleLoader.m: the bundle path is now depending on the + env variable + +2000-11-04 14:22 robert + + * PCBundleProj/: GNUmakefile, GNUmakefile.postamble, + GNUmakefile.preamble, Info.table, PC.proj, + PCBundleMakefileFactory.h, PCBundleMakefileFactory.m, + PCBundleProj.h, PCBundleProj.m, PCBundleProject.h, + PCBundleProject.m: the new bundle project type - probably not 100% + correct but working + +2000-11-04 14:21 robert + + * GNUmakefile: Added the bundle project type + +2000-11-04 14:20 robert + + * PCLib/: PCProject.h, PCProject.m: projects are by default not + executable + +2000-11-04 13:41 robert + + * PCToolProj/: PCToolProject.h, PCToolProject.m: The project type + is executable + +2000-11-04 13:41 robert + + * PCAppProj/: PCAppProj.m, PCAppProject.h, PCAppProject.m: we do + not use gmodels, and the project is executable + +2000-11-02 11:21 robert + + * PCLib/: PCProject.m, PCProjectBuilder.m: 2 lines of information + when launching... + +2000-11-01 11:38 robert + + * PCLib/: PCBrowserController.m, PCProject.m: removed logs + +2000-10-29 21:17 robert + + * PCLib/: PCProjectDebugger.h, PCProjectDebugger.m: added the class + which will one day become a simple gdb frontend + +2000-10-29 21:15 robert + + * PCLib/: GNUmakefile, PCBrowserController.m, PCProject.h, + PCProject.m, PCProjectBuilder.h, PCProjectBuilder.m, + ProjectCenter.h: new style interface - simpler but hopefully more + usable + +2000-10-29 13:16 robert + + * ProjectCenter/Info-project.plist: some GWorkspace additions + +2000-10-29 13:01 robert + + * ProjectCenter/Info-project.plist: 0.2 coming soon + +2000-10-29 13:00 robert + + * ANNOUNCE, INSTALL, README, Version, + PCBaseFileTypes/protocol.template: updated textfiles and new + version coming soon... + +2000-10-29 13:00 robert + + * PCLib/: PCBundleLoader.m, PCProject.m, PCProjectBuilder.h, + PCProjectBuilder.m, PCServer.h, PCServer.m: build logging now + works, as well as some enhancements when using the internal + 'editor' + +2000-10-27 19:15 robert + + * PCLib/: PCProject.h, PCProject.m: removed the 2 popups, which are + not needed on the top right side + +2000-10-26 11:12 robert + + * PCLib/PCProject.m: more image files are allowed now + +2000-10-20 20:20 robert + + * ProjectCenter/: Makefile, Makefile.postamble, Makefile.preamble, + PB.project: remove old PB support + +2000-10-20 20:18 robert + + * ProjectCenter/PC.project: updated project file + +2000-10-20 20:13 robert + + * PCLib/: PCProject.h, PCProjectBuilder.m: new build images in the + build panel + +2000-10-20 20:13 robert + + * ProjectCenter/: GNUmakefile, ProjectCenter_clean.tiff, + ProjectCenter_debug.tiff, ProjectCenter_install.tiff, + ProjectCenter_make.tiff, ProjectCenter_profile.tiff: added build + images + +2000-10-20 17:18 robert + + * PCBaseFileTypes/GNUmakefile, PCBaseFileTypes/PCBaseFileType.m, + PCBaseFileTypes/protocol.template, PCLib/PCEditorView.m, + PCLib/PCProject.m, ProjectCenter/PCAppController.m: Support for + protocols in file creation + +2000-10-20 16:49 robert + + * PCAppProj/: PCAppMakefileFactory.m, PCAppProj.m, PCAppProject.h, + PCAppProject.m: some more UI + +2000-10-15 20:29 robert + + * PCAppProj/PCAppProject.m, PCLibProj/PCLibProject.m, + PCToolProj/PCToolProject.m: some code improvements regarding the + inspector + +2000-10-15 20:24 robert + + * PCLib/: PCBrowserController.m, PCProject.h, PCProject.m, + PCProjectBuilder.m, PCProjectManager.m: More UI enhancements - not + really functional yet + +2000-10-15 20:23 robert + + * ProjectCenter/: PCAppController.h, PCAppController.m: modified + launching behaviour + +2000-10-15 14:36 robert + + * PCAppProj/: AppController.h, AppController.m, main.m: fixed the + info panel issue + +2000-10-15 14:27 robert + + * INSTALL, PCLib/PCBrowserController.m, PCLib/PCProject.m, + PCLib/PCProjectBuilder.h, PCLib/PCProjectBuilder.m, + PCLib/PCProjectManager.m: typo and note about GNUstep version added + +2000-10-15 14:25 robert + + * PCAppProj/PCAppProj.m: Added the plist file to "Other Resources" + +2000-10-15 14:25 robert + + * ProjectCenter/PCPrefController.m: UI improvement + +2000-10-11 15:15 robert + + * PCToolProj/PCToolProject.m: daily work + +2000-10-11 09:35 robert + + * PCAppProj/: AppController.h, AppController.m: removed old method + +2000-10-11 09:33 robert + + * PCAppProj/: AppController.h, AppController.m, PCAppProj.m, + main.m: new info panel approach - uch simpler, thanks Nicola! + +2000-09-24 15:37 robert + + * PCLibProj/PCLibProject.m: minor UI issue + +2000-09-23 17:45 robert + + * PCLibProj/PCLibMakefileFactory.m: another issue... + +2000-09-23 16:24 robert + + * PCLibProj/: PCLibMakefileFactory.m, PCLibProject.m: Fixed some + makefile issues + +2000-09-22 19:11 robert + + * PCLib/: PCProject.h, PCProject.m: minor UI changes + +2000-09-22 12:33 robert + + * PCLib/: PCBrowserController.m, PCProject.h, PCProject.m, + PCProjectBuilder.h, PCProjectBuilder.m: some UI modifications + +2000-09-22 11:24 robert + + * PCToolProj/PCToolMakefileFactory.m: Fix in the makefile + generation section + +2000-09-21 09:36 robert + + * PCLib/PCBundleLoader.m: bundle path issues + +2000-09-21 09:32 robert + + * ProjectCenter/PCPrefController.m: bundle path issue now fixed, + hopefully... + +2000-09-21 09:17 robert + + * INSTALL: better install file + +2000-09-21 09:07 robert + + * PCLibProj/: PCLibMakefileFactory.m, PCLibProj.m: removed the + English.lproj stuff in libs + +2000-09-21 07:42 robert + + * ProjectCenter/: PCAppController.m, PCPrefController.m: open file + now works, too + +2000-09-21 07:42 robert + + * PCLib/: PCProjectManager.h, PCProjectManager.m: daily work + +2000-09-21 07:20 robert + + * PCLib/PCFileManager.m: daily work + +2000-09-21 07:16 robert + + * PCLib/PCEditorView.m: @end is now highlighted, too + +2000-09-20 17:53 robert + + * Version: Version 0.1 + +2000-09-20 17:50 robert + + * ProjectCenter/ChangeLog, PCLib/ChangeLog, PCAppProj/ChangeLog, + PCLibProj/ChangeLog, PCBaseFileTypes/ChangeLog: Added a changelog + +2000-09-20 17:46 robert + + * ProjectCenter/ProjectCenter_main.m: Added the font panel stuff + +2000-09-20 17:46 robert + + * PCLib/: GNUmakefile, PCBrowserController.m, PCEditorView.h, + PCEditorView.m, PCProject.h, PCProject.m, PCServer.m, + ProjectCenter.h: Added a first editor with syntax highlighting + +2000-09-20 12:35 robert + + * ProjectCenter/PCPrefController.m: some more work on the + preferences + +2000-09-20 11:59 robert + + * PCLib/PCProjectBuilder.m: daily work + +2000-09-20 11:53 robert + + * PCLib/: PCProject.m, PCProjectBuilder.m: minor UI changes + (scrollers in scrollviews) + +2000-09-20 10:50 robert + + * PCAppProj/: AppController.h, AppController.m, + PCAppMakefileFactory.m, PCAppProj.m, main.m: enhanced the created + app to support GC and an info panel and more ... + +2000-09-19 17:39 robert + + * PCLib/: PCProject.m, PCProjectBuilder.m: sizeToCells was missing + ... + +2000-09-17 16:40 robert + + * PCLib/PCProject.h, PCLib/PCProject.m, PCLib/PCProjectBuilder.m, + ProjectCenter/PCPrefController.h, ProjectCenter/PCPrefController.m: + Basic preferences handling + +2000-09-17 14:14 robert + + * PCAppProj/: PCAppProject.h, PCAppProject.m: daily work + +2000-09-17 14:13 robert + + * PCLibProj/PCLibMakefileFactory.m: makefile improvements + +2000-09-17 14:13 robert + + * PCLib/: PCBrowserController.h, PCBrowserController.m, + PCFileManager.h, PCFileManager.m, PCProject.h, PCProject.m, + PCProjectBuilder.h, PCProjectBuilder.m, PCProjectManager.h, + PCProjectManager.m, PCServer.h, PCServer.m, ProjectCenter.h, + Server.h: Implemented a first 'editor', UI enhancements and other + nice things + +2000-09-17 14:12 robert + + * ProjectCenter/: GNUmakefile, Info-project.plist, + PCAppController+MenuHandling.h, PCAppController+MenuHandling.m, + PCAppController.m, PCMenuController.m, ProjectCenter_main.m, + ProjectCentre_build.tiff, ProjectCentre_find.tiff, + ProjectCentre_prefs.tiff, ProjectCentre_settings.tiff, + ProjectCentre_uml.tiff: Updated some images, fixed some bugs and + enhanced the featurelist... + +2000-09-14 11:04 robert + + * ProjectCenter/PCAppController.m: another minor flaw + +2000-09-14 10:54 robert + + * PCAppProj/: AppController.h, AppController.m, AppProject.gmodel, + GNUmakefile, Main.gmodel, PC.proj, PCAppMakefileFactory.m, main.m: + apps now don't use gmodels anymore + +2000-09-14 10:28 robert + + * ProjectCenter/PCAppController.m: fixed some bugs introduced by + removing the gmodel + +2000-09-13 12:45 robert + + * PCBaseFileTypes/PCBaseFileType.m, ProjectCenter/GNUmakefile, + ProjectCenter/PCAppController+MenuHandling.h, + ProjectCenter/PCAppController+MenuHandling.m, + ProjectCenter/PCAppController.h, ProjectCenter/PCAppController.m, + ProjectCenter/PCMenuController.h, ProjectCenter/PCMenuController.m, + ProjectCenter/ProjectCenter_main.m, + ProjectCenter/English.lproj/ProjectCenter.gmodel: removed the + gmodels completely from ProjectCenter.app + +2000-09-03 22:10 robert + + * Version, PCAppProj/GNUmakefile.preamble, PCLib/GNUmakefile, + PCToolProj/GNUmakefile.preamble: renamed libPC into + libProjectCenter + +2000-09-03 21:59 robert + + * ProjectCenter/: GNUmakefile.preamble, PC.project, + PCAppController.m: minor stuff + +2000-09-03 21:15 robert + + * ProjectCenter/PCAppController.m: New DO code + +2000-08-28 21:04 robert + + * PCLib/: PCBrowserController.m, PCFileManager.h: The class and + header files are now being displayed + +2000-08-27 21:11 robert + + * Version, ANNOUNCE, INSTALL, README, COPYING, GNUmakefile, + GNUmakefile.postamble, GNUmakefile.preamble, + PCAppProj/Makefile.preamble, PCAppProj/PB.project, + PCAppProj/PCAppProj.h, PCAppProj/Makefile, PCAppProj/h.template, + PCAppProj/m.template, PCAppProj/Info.table, PCAppProj/PCAppProj.m, + PCAppProj/Makefile.postamble, PCAppProj/PCAppProject.h, + PCAppProj/PCAppProject.m, PCAppProj/GNUmakefile.postamble, + PCAppProj/GNUmakefile.preamble, PCAppProj/PC.proj, + PCAppProj/main.m, PCAppProj/PCAppMakefileFactory.h, + PCAppProj/PCAppMakefileFactory.m, PCAppProj/AppProject.gmodel, + PCAppProj/GNUmakefile, PCAppProj/AppController.h, + PCAppProj/AppController.m, PCAppProj/Info-project.plist, + PCAppProj/Main.gmodel, PCBaseFileTypes/Makefile, + PCBaseFileTypes/Makefile.postamble, + PCBaseFileTypes/Makefile.preamble, PCBaseFileTypes/PB.project, + PCBaseFileTypes/PCBaseFileType.h, PCBaseFileTypes/PCBaseFileType.m, + PCBaseFileTypes/FileIcon_.m.tiff, PCBaseFileTypes/FileIcon_.h.tiff, + PCBaseFileTypes/FileIcon_.c.tiff, PCBaseFileTypes/GNUmakefile, + PCBaseFileTypes/cfile.template, PCBaseFileTypes/cheader.template, + PCBaseFileTypes/class.template, PCBaseFileTypes/header.template, + PCLib/Makefile.preamble, PCLib/PB.project, PCLib/h.template, + PCLib/m.template, PCLib/Makefile, PCLib/Makefile.postamble, + PCLib/ProjectEditor.h, PCLib/Server.h, PCLib/PCServer.h, + PCLib/PCServer.m, PCLib/ProjectCenter.h, PCLib/ProjectDebugger.h, + PCLib/ProjectType.h, PCLib/PCProjectManager.m, + PCLib/PCProjectManager.h, PCLib/PCBundleLoader.h, + PCLib/PCBundleLoader.m, PCLib/PreferenceController.h, + PCLib/ProjectBuilder.h, PCLib/PCBrowserController.h, + PCLib/PCDataSource.h, PCLib/PCDataSource.m, PCLib/PCProject.h, + PCLib/PCFileManager.h, PCLib/PCProject.m, PCLib/PCFileManager.m, + PCLib/FileCreator.h, PCLib/GNUmakefile, PCLib/GNUmakefile.preamble, + PCLib/PCBrowserController.m, PCLib/PCProjectBuilder.h, + PCLib/PCProjectBuilder.m, ProjectCenter/Makefile.preamble, + ProjectCenter/PB.project, ProjectCenter/h.template, + ProjectCenter/m.template, ProjectCenter/Makefile, + ProjectCenter/ProjectCenter_main.m, + ProjectCenter/Makefile.postamble, ProjectCenter/PCAppController.h, + ProjectCenter/PCAppController.m, ProjectCenter/PCPrefController.h, + ProjectCenter/PCPrefController.m, ProjectCenter/PCFindController.h, + ProjectCenter/PCFindController.m, ProjectCenter/PCInfoController.h, + ProjectCenter/PCInfoController.m, ProjectCenter/PCLogController.h, + ProjectCenter/PCLogController.m, ProjectCenter/PCMenuController.h, + ProjectCenter/ProjectCenter.tiff, ProjectCenter/PCMenuController.m, + ProjectCenter/GNUmakefile, ProjectCenter/GNUmakefile.postamble, + ProjectCenter/GNUmakefile.preamble, ProjectCenter/PC.project, + ProjectCenter/FileIcon_.m.tiff, + ProjectCenter/ProjectCentre_documentation.tiff, + ProjectCenter/ProjectCentre_cvs.tiff, + ProjectCenter/ProjectCentre_prefs.tiff, + ProjectCenter/ProjectCenter.app.tiff, + ProjectCenter/FileIcon_rtf.tiff, + ProjectCenter/ProjectCentre_files.tiff, + ProjectCenter/FileIcon_.c.tiff, + ProjectCenter/ProjectCentre_clean.tiff, + ProjectCenter/ProjectCentre_find.tiff, + ProjectCenter/FileIcon_.h.tiff, ProjectCenter/Info-project.plist, + ProjectCenter/ProjectCentre_add.tiff, + ProjectCenter/ProjectCentre_build.tiff, + ProjectCenter/ProjectCentre_run.tiff, + ProjectCenter/ProjectCentre_uml.tiff, + PCLibProj/PCLibMakefileFactory.h, PCLibProj/PCLibProj.h, + ProjectCenter/English.lproj/ProjectCenter.gmodel, + PCLibProj/GNUmakefile, PCLibProj/GNUmakefile.postamble, + PCLibProj/GNUmakefile.preamble, PCLibProj/Info.table, + PCLibProj/PCLibProj.m, PCLibProj/Makefile, + PCLibProj/Makefile.postamble, PCLibProj/Makefile.preamble, + PCLibProj/PB.project, PCLibProj/PC.proj, + PCLibProj/PCLibMakefileFactory.m, PCLibProj/PCLibProject.h, + PCLibProj/PCLibProject.m, PCLibProj/h.template, + PCLibProj/m.template, PCLibProj/LibProject.gmodel, + PCLibProj/Version, PCToolProj/PCToolProj.h, + PCToolProj/PCToolProj.m, PCToolProj/h.template, + PCToolProj/m.template, PCToolProj/Info.table, + PCToolProj/PCToolProject.m, PCToolProj/GNUmakefile.postamble, + PCToolProj/GNUmakefile.preamble, PCToolProj/PCToolProject.h, + PCToolProj/main.m, PCToolProj/PCToolMakefileFactory.m, + PCToolProj/GNUmakefile, PCToolProj/Info-project.plist, + PCToolProj/PC.proj, PCToolProj/PCToolMakefileFactory.h: Initial + revision + +2000-08-27 21:11 robert + + * Version, ANNOUNCE, INSTALL, README, COPYING, GNUmakefile, + GNUmakefile.postamble, GNUmakefile.preamble, + PCAppProj/Makefile.preamble, PCAppProj/PB.project, + PCAppProj/PCAppProj.h, PCAppProj/Makefile, PCAppProj/h.template, + PCAppProj/m.template, PCAppProj/Info.table, PCAppProj/PCAppProj.m, + PCAppProj/Makefile.postamble, PCAppProj/PCAppProject.h, + PCAppProj/PCAppProject.m, PCAppProj/GNUmakefile.postamble, + PCAppProj/GNUmakefile.preamble, PCAppProj/PC.proj, + PCAppProj/main.m, PCAppProj/PCAppMakefileFactory.h, + PCAppProj/PCAppMakefileFactory.m, PCAppProj/AppProject.gmodel, + PCAppProj/GNUmakefile, PCAppProj/AppController.h, + PCAppProj/AppController.m, PCAppProj/Info-project.plist, + PCAppProj/Main.gmodel, PCBaseFileTypes/Makefile, + PCBaseFileTypes/Makefile.postamble, + PCBaseFileTypes/Makefile.preamble, PCBaseFileTypes/PB.project, + PCBaseFileTypes/PCBaseFileType.h, PCBaseFileTypes/PCBaseFileType.m, + PCBaseFileTypes/FileIcon_.m.tiff, PCBaseFileTypes/FileIcon_.h.tiff, + PCBaseFileTypes/FileIcon_.c.tiff, PCBaseFileTypes/GNUmakefile, + PCBaseFileTypes/cfile.template, PCBaseFileTypes/cheader.template, + PCBaseFileTypes/class.template, PCBaseFileTypes/header.template, + PCLib/Makefile.preamble, PCLib/PB.project, PCLib/h.template, + PCLib/m.template, PCLib/Makefile, PCLib/Makefile.postamble, + PCLib/ProjectEditor.h, PCLib/Server.h, PCLib/PCServer.h, + PCLib/PCServer.m, PCLib/ProjectCenter.h, PCLib/ProjectDebugger.h, + PCLib/ProjectType.h, PCLib/PCProjectManager.m, + PCLib/PCProjectManager.h, PCLib/PCBundleLoader.h, + PCLib/PCBundleLoader.m, PCLib/PreferenceController.h, + PCLib/ProjectBuilder.h, PCLib/PCBrowserController.h, + PCLib/PCDataSource.h, PCLib/PCDataSource.m, PCLib/PCProject.h, + PCLib/PCFileManager.h, PCLib/PCProject.m, PCLib/PCFileManager.m, + PCLib/FileCreator.h, PCLib/GNUmakefile, PCLib/GNUmakefile.preamble, + PCLib/PCBrowserController.m, PCLib/PCProjectBuilder.h, + PCLib/PCProjectBuilder.m, ProjectCenter/Makefile.preamble, + ProjectCenter/PB.project, ProjectCenter/h.template, + ProjectCenter/m.template, ProjectCenter/Makefile, + ProjectCenter/ProjectCenter_main.m, + ProjectCenter/Makefile.postamble, ProjectCenter/PCAppController.h, + ProjectCenter/PCAppController.m, ProjectCenter/PCPrefController.h, + ProjectCenter/PCPrefController.m, ProjectCenter/PCFindController.h, + ProjectCenter/PCFindController.m, ProjectCenter/PCInfoController.h, + ProjectCenter/PCInfoController.m, ProjectCenter/PCLogController.h, + ProjectCenter/PCLogController.m, ProjectCenter/PCMenuController.h, + ProjectCenter/ProjectCenter.tiff, ProjectCenter/PCMenuController.m, + ProjectCenter/GNUmakefile, ProjectCenter/GNUmakefile.postamble, + ProjectCenter/GNUmakefile.preamble, ProjectCenter/PC.project, + ProjectCenter/FileIcon_.m.tiff, + ProjectCenter/ProjectCentre_documentation.tiff, + ProjectCenter/ProjectCentre_cvs.tiff, + ProjectCenter/ProjectCentre_prefs.tiff, + ProjectCenter/ProjectCenter.app.tiff, + ProjectCenter/FileIcon_rtf.tiff, + ProjectCenter/ProjectCentre_files.tiff, + ProjectCenter/FileIcon_.c.tiff, + ProjectCenter/ProjectCentre_clean.tiff, + ProjectCenter/ProjectCentre_find.tiff, + ProjectCenter/FileIcon_.h.tiff, ProjectCenter/Info-project.plist, + ProjectCenter/ProjectCentre_add.tiff, + ProjectCenter/ProjectCentre_build.tiff, + ProjectCenter/ProjectCentre_run.tiff, + ProjectCenter/ProjectCentre_uml.tiff, + PCLibProj/PCLibMakefileFactory.h, PCLibProj/PCLibProj.h, + ProjectCenter/English.lproj/ProjectCenter.gmodel, + PCLibProj/GNUmakefile, PCLibProj/GNUmakefile.postamble, + PCLibProj/GNUmakefile.preamble, PCLibProj/Info.table, + PCLibProj/PCLibProj.m, PCLibProj/Makefile, + PCLibProj/Makefile.postamble, PCLibProj/Makefile.preamble, + PCLibProj/PB.project, PCLibProj/PC.proj, + PCLibProj/PCLibMakefileFactory.m, PCLibProj/PCLibProject.h, + PCLibProj/PCLibProject.m, PCLibProj/h.template, + PCLibProj/m.template, PCLibProj/LibProject.gmodel, + PCLibProj/Version, PCToolProj/PCToolProj.h, + PCToolProj/PCToolProj.m, PCToolProj/h.template, + PCToolProj/m.template, PCToolProj/Info.table, + PCToolProj/PCToolProject.m, PCToolProj/GNUmakefile.postamble, + PCToolProj/GNUmakefile.preamble, PCToolProj/PCToolProject.h, + PCToolProj/main.m, PCToolProj/PCToolMakefileFactory.m, + PCToolProj/GNUmakefile, PCToolProj/Info-project.plist, + PCToolProj/PC.proj, PCToolProj/PCToolMakefileFactory.h: Initial + import + diff --git a/INSTALL b/Documentation/INSTALL similarity index 100% rename from INSTALL rename to Documentation/INSTALL diff --git a/Documentation/README b/Documentation/README new file mode 100644 index 0000000..0abe8d6 --- /dev/null +++ b/Documentation/README @@ -0,0 +1,28 @@ + + ProjectCenter + ============= + + This is ProjectCenter, the GNUstep IDE which is part of the GNUstep + project and is copyrighted by the Free Softare Foundation. ProjectCenter + is released under the GPL - see 'COPYING' for the details. + + Further information can be found on the GNUstep site at www.gnustep.org + on the ProjectCenter page + + http://www.gnustep.org/developers/ProjectCenter.html + + For the installation instructions read the INSTALL file. + For a list of upcoming and/or planned features read the TODO file. + For a list of changes in released versions read the ANNOUNCE file. + + The main author of ProjectCenter is Philippe C.D. Robert, but others + have contributed a lot to the current state of the project: + + Code - Pierre-Yves Rivaille + Nicola Perot + Richard Frith-Macdonald + Adam Fedor + Serg Stoyan + + UI - Many of the icons have been created by Andrew Lindsay + diff --git a/README.contributions b/Documentation/README.contributions similarity index 100% rename from README.contributions rename to Documentation/README.contributions diff --git a/Documentation/SCHEME b/Documentation/SCHEME new file mode 100644 index 0000000..b547565 --- /dev/null +++ b/Documentation/SCHEME @@ -0,0 +1,67 @@ + +- PCProjectInspector + | + +- PCLoadedFilesPanel + | + +- PCBuildPanel + | + +- PCLaunchPanel + | + +- [SI]PCFindPanel +PCAppController-\ | +| ----- PCProjectManager +PCMenuController/ | || + | PCProject + | | + | +- PCProjectWindow + | | + | +- PCProjectBrowser + | | + | +- PCProjectLoadedFiles + | | + | +- PCProjectBuilder + | | + | +- PCProjectLauncher + | | + | +- [SI]PCProjectFinder + | | + | +- PCProjectEditor + | || + | PCEditor + | | + | +- PCEditorView + | + PCTextFinder + | + PCFileManager + | + +- PCFileCreator + +------------------------------ +Other (controls, tools, etc.): +------------------------------ +PCButton +PCSplitView +PCOutputView (Should be implemented. Used by e.g. Project Builder) +PCBundleLoader (Used in ProjectCenter application) +PCMakefileFactory (Used in PC*Project bundles) +PCServer (don't used) + +---------- +THOUGHTS: +---------- +- test Projects and Files operations (Project and File menu entries); +- GORMify Prefernces; +- make PC prefernces changes applying immediately after changing; +- finish Preferences; +- remember ProjectWindow, BuildPanel, LaunchPanel, LoadedFilesPanel + geometry and visibility on per project basis; +- remember splitviews geometry on per project basis; +- try to incorporate CodeEditor approach +- implement PCProjectFinder and PCFindPanel GUI; + +- "Edit" menu should be completely provided by Editor part; +- "Add Files" panel should provide selection of type and "Choose Folders" + and "Add Class", "Add Header" and so on checkbox; +- "New File in Project..." panel should provide "Create Header", + "Create Class" and so on checkbox. + diff --git a/Documentation/TODO b/Documentation/TODO new file mode 100644 index 0000000..db2774d --- /dev/null +++ b/Documentation/TODO @@ -0,0 +1,62 @@ +TODO +**** + +This is the GNUstep ProjectCenter TODO list. "+" means that this task +is done. Feel free to propose changes to this list or make suggestions! + +ProjectCenter 0.4 Owner +----------------- ------ + ++ Review and cleanup of PC project bundles/templates stoyan ++ Finish Project Inspector stoyan ++ Inspector UI using Gorm stoyan ++ File creation (File->New in project) cleanup and finishing stoyan +- Initial suprojects support stoyan ++ Finish support of external editors stoyan ++ Preferences enhancements and UI using Gorm stoyan ++ Remember project windows and panels in PC.project stoyan + +ProjectCenter 0.5 +----------------- + +- Redesign Info panel stoyan +- ProjectBuilder enhancements (warnings,errors,options etc.) stoyan +- ProjectLauncher enhancements (debug) stoyan +- Finish ProjectWindow and its contents (Browser, FileIcon) stoyan +- Editor enhancements robert + +ProjectCenter 0.6 +----------------- + +- More options for file creation ??? +- ProjectCenter localization robert +- Localization support for GUI based projects robert +- Direct code documentation (using autogsdoc) ??? +- Better integration with other tools + (Gorm, CodeEditor, EasyDiff) ??? + +ProjectCenter 0.7 +----------------- + +- Initial user documentation ??? +- Initial support for integrated debugging ??? +- Optimised support for integrated debugging ??? +- More project customisation possibilities ??? +- CVS integration ??? + +ProjectCenter 0.8 +----------------- + +- An initial project wide find feature ??? + +ProjectCenter 0.9 +----------------- + +- An initial class browser/documentation feature ??? + +ProjectCenter 1.0 +----------------- + + Version 1.0 is aimed at stabilising and optimising existing +features. There will not be any new features since 0.9. + diff --git a/GNUmakefile b/GNUmakefile index 1f46d86..b36f31a 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,120 +1,119 @@ # -# GNUmakefile - Generated by ProjectCenter -# Written by Philippe C.D. Robert -# -# NOTE: Do NOT change this file -- ProjectCenter maintains it! -# -# Put all of your customisations in GNUmakefile.preamble and -# GNUmakefile.postamble +# GNUmakefile # include $(GNUSTEP_MAKEFILES)/common.make GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT) +# +# Main application +# +PACKAGE_NAME = ProjectCenter +APP_NAME = ProjectCenter +ProjectCenter_APPLICATION_ICON = Images/ProjectCenter.tiff +VERSION = 0.4 +COMPRESSION = gzip # # Subprojects # -SUBPROJECTS = \ - PCLib \ - PCAppProj \ - PCGormProj \ - PCBundleProj \ - PCToolProj \ - PCLibProj \ - PCBaseFileTypes \ - PCRenaissanceProj - -# -# Main application -# - -PACKAGE_NAME = ProjectCenter -APP_NAME = ProjectCenter -ProjectCenter_APPLICATION_ICON = Images/ProjectCenter.tiff - - -# -# Additional libraries -# - -ADDITIONAL_GUI_LIBS += -lProjectCenter +SUBPROJECTS = \ + Library \ + Modules \ # # Resource files # - ProjectCenter_RESOURCE_FILES = \ +Resources/ProjectCenter.gorm \ +Resources/LogPanel.gorm \ +Resources/Preferences.gorm \ ProjectCenterInfo.plist \ -Images/ButtonTile.tiff \ -Images/FileIcon_.c.tiff \ -Images/FileIcon_.h.tiff \ -Images/FileIcon_.m.tiff \ -Images/FileIcon_rtf.tiff \ Images/ProjectCenter.tiff \ +Images/ButtonTile.tiff \ +Images/FileC.tiff \ +Images/FileCH.tiff \ +Images/FileH.tiff \ +Images/FileHH.tiff \ +Images/FileM.tiff \ +Images/FileMH.tiff \ +Images/FileRTF.tiff \ +Images/FileProject.tiff \ +Images/Build.tiff \ +Images/Clean.tiff \ +Images/Debug.tiff \ +Images/Files.tiff \ +Images/Find.tiff \ +Images/Inspector.tiff \ +Images/Install.tiff \ +Images/MultiFiles.tiff \ +Images/Options.tiff \ +Images/Run.tiff \ +Images/Stop.tiff \ +Images/Editor.tiff \ Images/ProjectCenter_add.tiff \ -Images/ProjectCenter_build.tiff \ -Images/ProjectCenter_clean.tiff \ Images/ProjectCenter_cvs.tiff \ -Images/ProjectCenter_debug.tiff \ Images/ProjectCenter_dist.tiff \ Images/ProjectCenter_documentation.tiff \ -Images/ProjectCenter_files.tiff \ -Images/ProjectCenter_find.tiff \ -Images/ProjectCenter_install.tiff \ -Images/ProjectCenter_make.tiff \ -Images/ProjectCenter_prefs.tiff \ Images/ProjectCenter_profile.tiff \ Images/ProjectCenter_rpm.tiff \ -Images/ProjectCenter_run.tiff \ -Images/ProjectCenter_settings.tiff \ Images/ProjectCenter_uml.tiff \ -Images/Stop.tiff \ -PCAppProj/PCAppProj.bundle \ -PCGormProj/PCGormProj.bundle \ -PCBundleProj/PCBundleProj.bundle \ -PCToolProj/PCToolProj.bundle \ -PCLibProj/PCLibProj.bundle \ -PCBaseFileTypes/PCBaseFileTypes.bundle \ -PCRenaissanceProj/PCRenaissanceProj.bundle +Images/classSuitcase.tiff \ +Images/classSuitcaseH.tiff \ +Images/genericSuitcase.tiff \ +Images/genericSuitcaseH.tiff \ +Images/headerSuitcase.tiff \ +Images/headerSuitcaseH.tiff \ +Images/helpSuitcase.tiff \ +Images/helpSuitcaseH.tiff \ +Images/iconSuitcase.tiff \ +Images/iconSuitcaseH.tiff \ +Images/librarySuitcase.tiff \ +Images/librarySuitcaseH.tiff \ +Images/nibSuitcase.tiff \ +Images/nibSuitcaseH.tiff \ +Images/otherSuitcase.tiff \ +Images/otherSuitcaseH.tiff \ +Images/projectSuitcase.tiff \ +Images/projectSuitcaseH.tiff \ +Images/soundSuitcase.tiff \ +Images/soundSuitcaseH.tiff \ +Images/subprojectSuitcase.tiff \ +Images/subprojectSuitcaseH.tiff \ +Modules/ApplicationProject/ApplicationProject.bundle \ +Modules/BundleProject/BundleProject.bundle \ +Modules/LibraryProject/LibraryProject.bundle \ +Modules/RenaissanceProject/RenaissanceProject.bundle \ +Modules/ToolProject/ToolProject.bundle + # # Header files # - ProjectCenter_HEADERS = \ PCAppController.h \ -PCFindController.h \ PCInfoController.h \ PCLogController.h \ PCMenuController.h \ -PCPrefController.h \ -PCPrefController+UInterface.h +PCPrefController.h # # Class files # - ProjectCenter_OBJC_FILES = \ PCAppController.m \ -PCFindController.m \ PCInfoController.m \ PCLogController.m \ PCMenuController.m \ PCPrefController.m \ -PCPrefController+UInterface.m \ ProjectCenter_main.m # # C files # - ProjectCenter_C_FILES = -include GNUmakefile.preamble - include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make - -include GNUmakefile.postamble - diff --git a/GNUmakefile.preamble b/GNUmakefile.preamble index 4cfe4e2..2532fad 100644 --- a/GNUmakefile.preamble +++ b/GNUmakefile.preamble @@ -24,15 +24,6 @@ # If not, write to the Free Software Foundation, # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# Makefile.preamble -# -# Project specific makefile variables, and additional -# -# Do not put any Makefile rules in this file, instead they should -# be put into Makefile.postamble. -# - # # Flags dealing with compiling and linking # @@ -41,19 +32,20 @@ ADDITIONAL_CPPFLAGS += -Wall # Additional flags to pass to the Objective-C compiler -ADDITIONAL_OBJCFLAGS += -Wall +ADDITIONAL_OBJCFLAGS += -Wall -Werror # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -Wall # Additional include directories the compiler should search -ADDITIONAL_INCLUDE_DIRS += -I./PCLib +ADDITIONAL_INCLUDE_DIRS += -I./Library # Additional LDFLAGS to pass to the linker -#ADDITIONAL_LDFLAGS += +ADDITIONAL_LDFLAGS += -lProjectCenter # Additional library directories the linker should search -ADDITIONAL_LIB_DIRS += -L./PCLib/$(GNUSTEP_OBJ_DIR) +#ADDITIONAL_LIB_DIRS += -L./Library/$(GNUSTEP_OBJ_DIR) +ADDITIONAL_LIB_DIRS += -L./Library/ProjectCenter.framework/Versions/Current ADDITIONAL_TOOL_LIBS += diff --git a/Images/ProjectCenter_make.tiff b/Images/Build.tiff similarity index 100% rename from Images/ProjectCenter_make.tiff rename to Images/Build.tiff diff --git a/Images/ButtonTile.tiff b/Images/ButtonTile.tiff index b19582b48ca8dfae2b3c3d2cf74fc72399aa4c36..a74514c063ef39d36716cc5f888a67d74659f8e9 100644 GIT binary patch literal 6754 zcmd6s$xjne9LHY)4Hr!$5hHr&k(lUk;ON1~0eip@f){U%4i+P=X@{sM+CnKUrF5aJ zEu}!qQugi(YuWx1kNye%d{YNgm8Hupug%MR-^-AtT7{F*WLVtfh3=9l_$z+1T!9g&a%`h}H1Qv@0tX3-w4-bRQW`mKD5wP3s`8GN_ z3J!+@oK7dWTrP0C-7q#b1|E+G#>dBDVqyX&CnsTQY6_;Or(tGh2E1M`_~1YmxC9u^iBh-O<{TqO3nv24L$kjUTkf-MvZ5%+&9WLsKVB5E%D%eK6{ zOw2sJjBRCQg@`reDz??tRms=4>)68Ku%v76O>8WmRQp0PY-?+4lI&THjvmIV)5`rz6O!86#3dNR6r7EsZg=9;o(-qau zLbI`a<<|9Luw^otvOEW|*s|Gd$$p5KY`eR=C3!Vsv+eEe740KQ!M4A@UzEos72CnV z!Hxc#lx&BGhu3<8QnMW$9l=$;B?)Y~T<%g&l@zw)b!2mU0H#y!ny{JeaCN1s=0CYn%kVN!upP^ z3boV>I8CYN}nU`AENGbX4o>H#&y?d@;~Ms~K8L zDSDJ2XdU&kmti#O&hAh2)8?kH%}vjk?yfF`TC}v1q2J5DbTcY>r;3)hD%#rF+r7e# IeJuIoFEOH5@Bjb+ literal 9188 zcmdU#M{m?n6ooyZhz&>}0TQr?V1ro1e*uvNL;@7i_JJ6Z2of}Lgjl8b-h1!8_ul)C zCBKD>kMSEldpv+AFUdI3)jW@8oKHvB_q=;wqM{y2MfW8sH8qtGX=!Pco}Nw_85xwB znMqk$S$bq=XH!m24&~%+?QBY7og@uJwR8&O8#l=)oQldv`X(^SJl~H+l zIaO3tP-SH$RaI5#QC(e4H8nLeUmM7T5 zTKBQc<3;HWtr6g!n3yo_zk|*1^WdJGob>e#p}-BVM6mkJ>WNiva8FH5nR=Z-^#r|+ zwclYLFDg%*a!*fB`+5eqaf6*PTl-7q@uKvG=h*p9FnWV~W@bk3iQULOJ3H&w&j+hF zdU?K|XTBp+Z)lAG_uSl^X%68g?)mw7-~8lX+?bv4^AqMfBK3ynFyCQykmWY7H@FuT z7ECjrK+k0;axX3}ntBF)Ud8ISNN#wJo$ol+8{7z{wcEItmX`F{peSz4st|nNz&u`* z-e5*7FE5+snkUJVv*un|S@F$dLxmf)o7HbtPmtTZ-r!zcUGi#( zcEY{3wq~07xQTmxecjaSu(>_&J0kT)uY<7qj#ItCjbK{4jeBEbLq8)C#f@1Ng70^j z$BWV%%!tj+P2c&>N%Q2axwp2qY|o?u)f0G*o$rX`hUXwy9Yj4rZu5GBdwYAE{#Wl% zY< z9~~X}&8qk_K)%-zr8hjs&Uc*X4esOPW4a;zk}gUf$@uYH(ATnd>EYI4+WMmQUcv)O zx?sGI?_4(4VcPntCro;-y?V9JT+`OKwDpR%zV7*R|0~+{4eq-)jWzCj%UD0w*0+t% zXKDW-bH{T@=lP-C=dQ8-sjcsE_jzcn!SITEU%Qm97{78#vR95v`l86mYSQ`oHd$4^%8~D0N4!so{~Rkvdy^8B4{D^6s48AL>PyTgC0TxwqN+)WZ{j~I5o-L$ ik5Z&piBXl<@Ne;IT=<(fCH!gBi)j3@XIelM{q;9x1%-70 diff --git a/Images/ProjectCenter_clean.tiff b/Images/Clean.tiff similarity index 100% rename from Images/ProjectCenter_clean.tiff rename to Images/Clean.tiff diff --git a/Images/ProjectCenter_debug.tiff b/Images/Debug.tiff similarity index 100% rename from Images/ProjectCenter_debug.tiff rename to Images/Debug.tiff diff --git a/Images/Editor.tiff b/Images/Editor.tiff new file mode 100644 index 0000000000000000000000000000000000000000..c21222e760c109ec8d3e4cd4d4394850dfb9eaa1 GIT binary patch literal 5822 zcmeI0O=`kG6vroOi<=fJXrb+5HigoKlOqJAwJEd&`>~H?tN}kt5|Qpaf=id4pv#`4 zNAL)9g3|ZKi9`?J%wiJ8_kUwD^W)E(8Hn%Sl3|0`%Q|2kunt%U40AwGR|wY?L9HfC zKoiuHJi_(FoKoPTTDexMm5>+sBzZ_pcpAM5f&l#x7?BPAF@*=Y3QbEn75&LsRG&5; zv4%A^cemc?=Ycf_JPTK@d7+)>cjM2(-PDhEo^|ezDLkh7W9w&sQ^DF5hSZNdA0&@i z^&`(zL-wECBa9~OKUhy{|J$Ay`!#mx9KC@#WmEdl2s`uTJSMR0fZ4=4U>&dyXmX%V z{z!#5`RqTAfIf-ZrsK;L7Nkh1E>caD`Vfj)6c>EeXgF5;0y4Db0m4bVVp~)e?VUq#<@`%8M=jjNJ&-QY?>x)Fd1={W|OaQ z%*K4iI?r!u#y?s6{iW5L#>0pO?N%=d#}WSPkHQb0vb!kGCP^!c`+d?*c$o2s&f;u9 SUk99a{HFk?d4Ps?$oLN^^7t75 literal 0 HcmV?d00001 diff --git a/Images/FileC.tiff b/Images/FileC.tiff new file mode 100644 index 0000000000000000000000000000000000000000..a5db07700a5d65d4ef821000e93d729c3ba5f257 GIT binary patch literal 9554 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 literal 0 HcmV?d00001 diff --git a/Images/FileIcon_.c.tiff b/Images/FileIcon_.c.tiff deleted file mode 100644 index 296c425c1181eb812b58ac3de2532470cee1834e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3504 zcmYk9d05if8pnUE0?MX{YYJu#nYk2s9W?`YiQKoEG$7PmQ=`VLxh!JhR%&8mR%mXS zIcV0H=^ZRHTP&@nv1T;T+!|Y)$g~u%_dfkG&w0*sKIe1Z@B5s8-+%yH;Ef&t2mn&B zi!~9gBlctmcXFNAVI|(25SNTdyVXL&{rJpF`rAy3?@pA?>Q&I!l`^L z5uFl&y2gPsCBd^T$GFmngZw{?-+z?;rv1J<qYJN1*mdJV8KNNL&+<( znb)RBPMNe?n&>Pwn^fLiYBH=$SgONa3q*EMsL(752UH(8Yyt~9Q zDoBpid7B&HZp0?tVk{fMduNhEFWyhat76tQE_GW~=`3|x$QqYAh_c{L#*Hd9 zxeyDDw`Sri9Z25$E=(QpF_N*7JiZKsOkadL4U2KK$wiN-Uxm8R2yx%MmYFL)s%60I zxK)<|-W3MVHnr*!+SWl5JNeaMr#k-Gn(|v|(5o9e^t~FC{x_GKj-Jqg>98$$7t&jx}@yc92e!x3+ubuKzj|+0E-JWp+F& zqt?46%|CNKJH6CL4xd_#PKW?)>Q5D)-gq_I9c1m9^t``Z{e9r+j@Y=MFqM~?aSaTL zBl@kNy^Sg^Y4_$l#HU~h(@XJ~^1P)znA6isj(B|IqSgR2y=3jCZ?q+!M}Jgy0~zx< zzn^R>B?TQf>)j}G*cXQL=U(_EJ%AsKuTSS!kqObbp2C>|87-`gOt_eV4OyyCTY zRxR=n*@?zw+C#VqllvP@KM#JcpRF;SI*{}tm})gTQz!s6B{ZozH(Su64LN%JT#)la z&&rx3LT(fyL~E4WRiP(J9Yc^fow+m%gZ(SB+v$6B2!~!AW1o9>YF=y^Qh6QOxa=;R zjyCTtNwqsD+tu3M<>npzI+mtMJT-3&J0}PSv%h!HSrED0Dqu#;@HlpDS_=_HV5yd~ ztxK9VLgvuI`TR=d%md>IDz`YK&JHzTYz~*PIZ)g)!#dAXQiE_YcM)Ka*LJcF@K+ z_X+pWdRgSPilDX9}fuWaaG+Jr>7DHvaMu4fL2^kd$KR zbc-0udIi5co?-DXZ&}m?bKm4cH=*O7J8li-VIj-5D3{yY8(S6|!^Y10${Waf!40qg zBKJo zXP8&QGVkstmpDI2Z?%odz4^Bg&%<2^iJ}LMnu=Hi2eAb^?~I>}u7{TW96t4#WpyoU zwYqnaeFx9#J>=sly6bK5eLF1qP!exYE-{rn>_ppW_TJ}28OAo{eL@3z1Y(2;K%BWil zUy^S37BWM?>|b6dP^ER}GA>Ro`t40gkN|2ZWr^iqNf1AO;7d~kltrM~ixaeH32T8wQ4ll)8 z@Cf=_Msn-n>BQ++k_g<=X9dg^S@woGS;O^&v35_D5VhcAC!A z2<$fWe*Zu+7m;f7d`GV0XhK!mi8)8W|DZY&ZWD?J3fgF2kbW#UEmp@1z(3aLD+}bk zM-XsZV`ZjCGN52S8*DQEl1K%=eF1Z5{n)F;C@E;6R!3>>EPn%;;n@ZARxt5)^k{fv z6Hy+_-B7zHp1NnU{pbnLqf-oVV{C=~?-?Zc{TE!9kDK%{}( zRYtal_?4pBB=DPy(1F)~ziE>5tIUM4huHq`jgf{b zM%ui&<&+1P9DkI~Mm7b;k;Ajqfe>y1LEx;f*2)X?P=E!}rU`59T2pVQuiVl`x48k* z>XRHr57Fo=(W9_CFv=|)%eH~l0LJbl*@wpugCC!IvbVQAAh8@al|*3eGN*GP{fx9a z(LtMqgAH0kz(vevK)7WDnzJH6@*_|MQl9h$-g!4y3UqO8A*^Q5DzRv+Fu-|KpaJJa zBL(CQq-L;xrFr0!_y=Q;cV3~0B&Id{2sKu)!aW8wMyS81IQ~n>@O3%9OPZn7AMTeo zV`QXqP;IBN@=erVi%0R}H=N!mTd+2%(SHfX2gq84l7t{@kxH9#{gTT;f%i5acHorj z3yupw80g>#Ug_OTc81hj6G+bTUY||(3u;KzP})gQ=A1EYCMX$qR}X2S*5VX17}h4x zDc^j792_!)qeW*K02@OwZ{Pe%DM_mxFT(@rdud;w0mrc<+F>C8Y2e^#)V*{lgb}a9 zBEpC3FmX7n+MCv1*?O?N#BJjjogE^`TS^>rU)qvSW{|ZQ zIrp$&05aXJ2e|gLL||67rAh%Qj7QO^`GRWjEDb}7?#&dx4eQf99yD&p<9G&i4cXz) z02v$QN!{!@-s{Q1dUiN@b+|9L7nKoqc=P=2N+o0SMLo~LFJ~6|lt*ebKll>%`BD>o zd8t0nGJL}i`E~?;va+Ce2yTUoekYt5dsgVL$qk_92ZR>~l$QqZY63bg2D}fZSn1I< zii_p#RhsL+Q*Z9nTw_viFvEM8<-JVaFtg(+Qxn2?Ho8lr4x~;7@@4}&-Ue#sgQ%Z^ zcuPSYD}h#E3;=*200;m8$F&Xm2ZPrby5=g;008;sVQY8zHwLdU9t8b=7O}>L-~9hF z#BaWNjg7wX_}V;W3WEK=UcT1T>>D?&vH7>`|NcSwNB_`&__Zeh@ofo~Q2_3{wfXGZ F`Cqkx$=Uz_ diff --git a/Images/FileIcon_.h.tiff b/Images/FileIcon_.h.tiff deleted file mode 100644 index 0f920b101f944771bc58001bb531450f844fb968..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3502 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 E7tO+|r~m)} literal 0 HcmV?d00001 diff --git a/Images/FileIcon_rtf.tiff b/Images/FileRTF.tiff similarity index 100% rename from Images/FileIcon_rtf.tiff rename to Images/FileRTF.tiff diff --git a/Images/ProjectCenter_files.tiff b/Images/Files.tiff similarity index 100% rename from Images/ProjectCenter_files.tiff rename to Images/Files.tiff diff --git a/Images/ProjectCenter_find.tiff b/Images/Find.tiff similarity index 100% rename from Images/ProjectCenter_find.tiff rename to Images/Find.tiff diff --git a/Images/ProjectCenter_settings.tiff b/Images/Inspector.tiff similarity index 100% rename from Images/ProjectCenter_settings.tiff rename to Images/Inspector.tiff diff --git a/Images/ProjectCenter_install.tiff b/Images/Install.tiff similarity index 100% rename from Images/ProjectCenter_install.tiff rename to Images/Install.tiff diff --git a/Images/Options.tiff b/Images/Options.tiff new file mode 100644 index 0000000000000000000000000000000000000000..6f5bb9a716d60c2e9564b3cfcd8440b7da446731 GIT binary patch literal 2098 zcmai#2~-nz9>@Qa3CRQlggXR~0lANw5D?Ia0YVm7kpL=KC=Cb;U6Hk0S0f%|0*etT za*3s|666MvLj+WmtH@13ai7|!#K^j!T#G4!BHgKV)!ny!egF5H`OfcszyIUSywCXi z16u%~6fr;ruI74beF>m2d?;cD#<(Sqy z#H-V_xh4LzKgd4lEIa9nS76H|y#z7SGzA9s8~xXb#c#JyU!#zdJ>>P3;Y^5eUg+RbuDE&I zM8eAk!V|_Zu|vl4o$Mbuf4Wtmzuf(aldQ}CelRc9l5KJ#V8i@sI``3232&WE`Vf^W z9O=H0DLv>;06-lA00#JL02cTK`bZPrY68Fq1i$O6;2zRDjRzr3K*Y27Gz3RT_gx=< zg7n_@aR+q>(tq#S3^4#c1HKj@ctVEnwI5{kQP%n+9rR%>0Lbxp7Qw3*uXeoJfa=@T8~W}fG7mFr8?Y9J88#h(v_ z%&nB%C~}D%hz$~?DA78Z-GtKR_3@kXFH5re&#oN2_ElVf*T#AubM!|{EECdKy2ue& zDA2RBI58Y~`QGfNFz@EO360weazd^)J-`l}>3w?c&9h}~iqu5Tq#L|Ki15$>W)s!) zv;62k@8Oh(IGh`bDLm3*thsj5tK$6O=d-hGhH9sa7F?E{7`g%6-UXJD8j_j6Ls72w zIGK~|QA%g{qlG&>?sgQ(7ep~ku8gQKw8g|(y3V))O3#I`lUr_ znN8M~^hxJ4LS{mS;}=cX=_z^!mRw1v<@DALoxmzc#~_F|&mQdp--kW;N){u0?p%P- z&toZ-bb9TergAHd-PPB)xnsYR8qq@#RgIX?q^cZQjNm8lZ!77-UR209-yVI*BHgLxR zj~+!!aXb%X*6NHa0JfF+DXcyjeDQ2q(K_b?v0)N{+^Rn~Vm#0j!7lPid-#DN>E5{?=$w z92Z__hDtY?jBW8TA$Pm2Arf@#5%$+{39&YCWY({2e3tFYEm9iHd#R6B6YT=~=!+3k zdCINZa}=4SY@-#u{S|c>;>j?Pp$M#{-bf6}-f4&99{0q8Z*(&}rK&`d$onqQWXgt(HDfSg2#kRWRU+IVP!X{a*yL?S%T> zOKOpq2p5KxG_;l5c}I#0X(zjpz1mW39etSUm>P(1itn5dS7ps$kqz%M4?<-`)dU=`p>b%R`qFGu-+Z zz2=*9d|{nZsvnKH%CW9}Jo;MdDaTTCWZcdwn7~>Sw&e){ZHz!> zZyo5Bfv12FjQ<|74OeU2Ish3fAH`DcKj3z0!obs8v_qRBYa~xs(U(Wx`^ItgsGq;1@a~@B8;5>Nvj`O%j e#ozzt_UTLiC?NtgEZ5-@ku<+kpcIx-MP1 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 a29o(fNa8>#pnD*&;SU#sfI6@QfzkkXlGnok literal 0 HcmV?d00001 diff --git a/Images/classSuitcaseH.tiff b/Images/classSuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..3b06e769f235db7e958377e0178c1b268f61aa9b GIT binary patch literal 1730 zcmYk7c{JO37sh`P#4@#2w3rsH+AGH1DY1n)YDp-yS3?)a&{m007(v6j8>?GRGhZ zmT1)5>xQSqA0qsmjLR%O{Y|8f*ljVwH4v&~;TelPqJ>H(eMa|!eSRSb(ml;G_S!yh zQON3@lDKDXW>SPwT^~Com}FdlRLKxr!iBflt1`N`^{Z{q#PrWj?NCaZv}$^#zH9>s zGdHr^3qw(F(t8ZyqSx~4oo8nL%?f`T)$NVh!dtIl+)bnx(Q!1ij=vIKSMe}{9qO8& zhE&h)o6~I!`h>igIWQL*5Whvo>z#N=_(mb5>R?KP0-Ao6VJE#Ay=|C>o9pv69P;P4 z*t(gC1r;T3|BOe%$o=B$TK`-54Ou#{6xO(3U15pyU>sS*yqsY|KWq z>8FA8hKY^sJ=4RYo{8^=aAefINrBH2_|>P^+Yc6ES6)`_!jTDz-#d`>WRbQ%XlEfE zABNP$tTgo$zr8;1DaED+&%<}RNMP=c^*2z#>V%#Ev9q!eJ5^*l&L)Osf;*BV@`*?OZILXhDJR7Hb zMMA;PbG;p(={|3|Zsz;gQ6TB_$ckgk(3}40VACw)7;A4KSGmQ(O>I}=tw=`)qR&?U zbYwD@dCQ^L#shybeVrki%VEKx8s=k#&ng#o-qcY7-_1R(`2DSEL&E&F&{r6#6F*SD z9DQZ5Avh1uXYne}o=|M! zxxTghZWcmqG__Hk7`{{6go$P^voHl_cEcM!!TNPqiS$G&VWC0Fa;>>2gb{(oM0ZE* zkKEyG`5nf8z9YZx(&_Jy4b2QYe_2UeAD(Bh7=5~}o*8|nvT*o12n(ZP)nADjQDV$k zT=7FU&Uf5I`qcJ*OwGhD-nZw=EO>!+(kXfMg4eRLZ)=Fy?xcxetc13J`C|@vGVIu~ zZz{s=bWQ%^GFjYQ4(Xg;{uNtGAzi+Cx7Ki$aB*G+L8lOE`OrrMjn#U9s+O}l87M#A zaaq6D{$$){5s)jykX^2YLhiYoDpA8IP~qp^8eVXpt8x%$Imtdy%|f%59=#WF0MFS*o+T04a# zawVs-V2nT73{=Y4PvYiPlV9Q|%4x&d79<$cw#7(=+f{Hm+ru%k$!M;5^$Cq65w~XU zFC1HCV4ag-Y5xBBTst!V(ZPMDMVNRu3R%n*yYCPsU{$dXku^VvLoLc$2c!xWOT$x8 z>nCGV5%G{2T_uO#S}vU4P0gk|6&7yh1#N9_jyjWR7%KUhs({Ugw$R tKmz~G*YYyukN6#re?Id5yNB8j`OZJ+ycTbt|G)ctB7lS{?_wSO{{ZY|3myOf literal 0 HcmV?d00001 diff --git a/Images/genericSuitcase.tiff b/Images/genericSuitcase.tiff new file mode 100644 index 0000000000000000000000000000000000000000..dd7ab41fae073768a1d3e9463e6abd7eca8faccf GIT binary patch literal 1196 zcmebD)M9wX%)rpVpb%i8BF4+!;*=P$BgIUXzr!Ud&|-<_pa1o{AAOv0C(BT-&;9Z0 zrGLVF)s=)#wR}?e7p^(|^wLQyQ%)uLGc-S$RQbeAFGPOI$%g_J4)!jKgEYQG#j4G8 zSQx0jQDo=8eBJ41wOM`~S;Hj1=1h)pw9K~EnjGz~ODnf#-A+_2&-JT=&Idk)!0`nT(@9eoXi?iLFe@*qDd%mg2 z_0Qg1DNb=`@e9ZPof6-9>;3oLw)@`KpNRihVYAPkfA;M+Uw`eDdv}(5iv82<#t(Tn zZy)$?zy1#^!-3`+MrMZs7jEW*6MUqZmg+5D_Q&+V?{)S2_$Qy|-8bQiHJ`H~i><)n z^&8?8S>Kl@`pDGKUO%g$;Vij zBVfsF(FKJ)nVQEgEm^8{(4a?C)^u%6HIGX%m!aXA$vS6^&k9@es2>RwnW=8se~VlD zz-FJf*5?@*>0{<|hx z-Cy>a^aPu7$Q%0yKjGIk-NI9R(HPfzE6s+Gz+v2+2(OyS9J?lbXd~19{Y&oh#T^? zdp;U0pAg=_TFZQ=`0AOSREgB9$yaW){E>fV)li@QY{#2UmvpmrmaFg2_!T|>g_ZQd z!Uwl>Z?>k+DET=ffOB1Dciefq&1=&u_t}U)|Mkz=D|6jFF8!C*cEM#a#ct8%FMs{Y zUX>?ew{z#UsC$OAPbnWMwXRmkc{`o0p!HNpr>NER~ zXzcqR61$%LcDZ=m@97^kw=KVzcF9iv;g2|d*^@u!*$1CmwyHmNVVPuk`OBxblQwVv zVa!*#yE^Xq_T4MI*jDbViq|{(`HorC#V)5;?X#wq&I!N!v(7gC`R}^@{GWf6$Y1~U zU%v8cZHvhIX_JZ>yDa1zK4`HV*ul-zP{Yx1!Hvz)LX|~f4`1VkAohdHGD;L#6k7uN zgq$LLIUl-cDjs2B;A3E5WM*JwU|=u+Vn!r36OhdU6q^Dhn4#jVKt3Ck%>-l%GO~d6 zasb()P;rnRF{pSb&|q;W`!297kz!;8tDgf@Bn@RR0kUPFdO_~cKr%lFNgOBzbPohJ O{NZ8{PzRPxP#OSFBksNc literal 0 HcmV?d00001 diff --git a/Images/genericSuitcaseH.tiff b/Images/genericSuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..e54433475b8965c99b270568893df9c1ca69af91 GIT binary patch literal 1592 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 literal 0 HcmV?d00001 diff --git a/Images/headerSuitcaseH.tiff b/Images/headerSuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..02bb3f4a22e04ea015f23d572f1eea9aef3f8bc9 GIT binary patch literal 1718 zcmYk7e>@ZTAICSp7V~2`)ah#!x0!`jSc`^ZU$kYLt^D2)R@UM;$xTu&`JNv$KS~H+ zKiZt!oJb{$-Q;H?D{?qrlsfqpHD+_W`}(8D=kb1go{!i2{dzs#|GmAv5rAcN0N^sf zoQSqG)&ZrvhY?#(JN`@Wx<@z(UG0|Cmf96TYMo7Ven=CaCOO4FM0vmpHD}$n>PWUl zy>qAsS#7t0pl-|f)|d?i1zONE4M}pvdQ_3&Yk?u(6uVZEU>s@R_wA2pwT5pZ*bk$T zg}6vph&(wg>Q>ugWS$6l+YdN{Rh3+dwS}0PGRbg@d&QZ2M zqQ$dutsNYpjaKf_k4IV;V~&>QMBl^g8a7v;pjqPoSzHR6V&YBTjbm6Z3-8ym982!D zyiK_`I@laQf~4ASzaZ5Y$zX^a=$o}8ax>cTvVOhw%?aD5G5i+`88evdlT9JaniFs_ zd4o9V`Kd&Hdnx15+a;-7A+*a~TH6u|ROh9<97w1IXbEMIm9Hwh33{aR^YZ2~V#$=2 zFdS*G5XDwoX^RAHSlt6}Hzrpd&M}Q&bqq+4$+{qhQW=hvb;h(SuK(QLCwF92HFU#K z?jnX*4chPid?Xj#^BslT(6h>{kixsWuZ@W9oCD{qbHiQi`VF-^IoK7^XS1ivcuKk( zC%$qQhFBmz@{GILqc0j}`&{UqE|nZ`;;y~Vwx)dTf~d;3j5NC*#{R{;gXOANLRO_{ z+vqHcwR7qV=4@a-x%%7323LZf*Se6BgoN^Sf`9gq(T^S+{2y!`a{|M89MpNZ*@-}% zAHd}JpZU$&WrRZ+GbTEOT&nel4}@ov^nx{mC%3H|i0NKjzYC z^Pj}mDB%ZLqGW)zck0mK#|a&;`y;59MUy+@@4&w;%V~RF#kynw$G(3YO&tfz@0{;q z5h9?OFC04qdYkhOd1W8=n#!L|njgIJ_G0@%1tRl9l)Z^4=zc>vWF~oRQKnelUS_A7 z^nBc!@)fOb38ROWWx{_a>+$e)r6Qi=WD-q*wbtFPP@RBQvQyPoq^oI#0c- zpNHBnLUtC$;~4##{KGXIT2c6E==IoChc|%h>K~Ki2*p1ielzl}^ab6H`@|jG<5mdM z5WF;A)dz{-zPHkxQ3U=v_Rhjad4d|O?>Ws4zMEF+9&C~ki*<*qDJuL{Gf9SsD>{@5 zpjnhT!GwUfj3+IpcJU(^S{(}1SsL8eD zr{A6xht^ZMO(%WC{s?)T6|U}pAR?GpHE|JcS^M}^-3pDVo+_ZOb`*eh=u9hiBym1d zt1*<1Oyfs;Z+4Fzw~Azz6*n2P`o>1Kx_rti@14vU4kRbJy6OS|Kve(`007u43-|@A zC|OOZ-PQmARCjdcVE}0Cu!@rPfolJFcPZIuNB`SnyrWZlJj8Vhh21GQ5jg?|Ea@qdi*uqpn!xB!%OJlL!A^3+_ zS%{=jB;XOkxgO*9=7+a?`$J+bEOT#mX5O1`zW2@S+~($UdU=oNEuPPGro4~pD=J~U z)t6D&msQsD-=$~tg_L^2Ljr$Y1b!Q(Xru5DeP=YJSA$f?5jGyIQhn+9llNjjj}O8q zH@?{4mzS7*dypQ^p%r=9N2V{-JVzX< zmIsG!yoa10*=*9YXS5-9js~cBnr%HLP8zmRVb7z}Y2M(bf?$^wU5a63D71 zKT|+y*mGz{O~mo{3^^?m_uYZAxh#%giA7;7BD>2fCAMmqV$K+v%c-%KbxLdG><6ba zk>_>#ia=CkzZRAHvPx%VfqhP3rabZ+#AUwul^kKOv&<{00gQ&-r(tl$GIf`^ak~0H zC7nBUH}HbHPZKXV4vc`v*Ua#1=Jt+06UrNpuT!=9Y2b#T)N-T!s!pIrUD(;mr!HT( z+`>!O2e)FQ(|`R|9nKR9O4kSe3S6aBsfaIQhN+$6;WCTs0~6X7iZV)yyv^eJU~u!r zXPfVqER+V#Pt;d!{TJ$w?RcL1SuW=5Tsyje!92&m?@;?G Hk+XjQQW^8? literal 0 HcmV?d00001 diff --git a/Images/helpSuitcaseH.tiff b/Images/helpSuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..51c66d94be0b3dbac526bed63f60f9dc35e4e861 GIT binary patch literal 1656 zcmYk7eK-?(8^<>| zFAF*GNNG4?GG|U$k>%M-U>wEvc-|PPC{$a6JfEHx{fC_-% zU5|k^Rp=g3`1TkVQ>_AYbbxD(yLjox?$^E>f^;i1l&$u=yYxqQ^K$<0FgL%-yFit` z*%8;!&0WG_*1)uOCJK3qgNH6pn1Tvjt8nIJpm|C<&kri-+jMHg9?cn&OmA_kpV~AH z=>D+@KqHB4;zJkpu+o=FjFX`Yty}*>lAax2I`Ok~0(<)T`J}U_4t$8p>y5G}9m$44 zWErB=pvn@Q<;}r4*pmb??qs=eE;Wv}!OwOyC}4czGK%e!?kB`Og@Z+fZR3|+?oj3i zBV9&GO70uqmy>~<{7sW=oE>{eYuRRU(Fb>5IG^@pr}2RY<=jZTb4Wj>gkjIo_my~F zH4r7O{(uk*um5LibyJFvar&p$WT$aing3Ou(a!#SFQ#kv&)mi4`t8#=I%KT}$1mE) zOYSvO=@}li-0x}a2>H}%8=@=fPJDlQRW(`~3N9#1i#7C4VUY~_e&b#=@k!w(9i#%t zYKpFxEp`{JX_*&|uqg?*?FPOuf3h5SRddh!+dysuq~WMBPWRb$Siy={^tOZJke=V@ z0Nab4Y}D@|od)w^CR%z&@B||j&E>EirGsK5jC_Cfzg z(iAvn#xT+jQya?s=(a?1fQ(Wpz9>TLNn317n!cL#t2BQDy=RXvv8n@BXk&!Yv4tzh zASN5?@@w>t{V3)}j~*g;S>hA%>K|_oM{?F!w0Jy(a+ffDNUTD`4v;6!lmNYJ@; zFJWR(Mr=47Ll`=t*v?wHj(5}7e|t&LzjO6+xQH?CeAX2Nw0*~B>7 z@eSj3;#3!<$nQIXghfAB$f!#148G}5NOV1J$qa3C=Gh&)6{3~uMRYc!MzX!3G?G*2 ztlf7N_4>GuR*mgDE$KHCi{7;(qUiY>UsPi&X4_@xu8!ilgNifS5peabwI@vp#^9$- zACF}BKTddSKJsWjq*t?KaQjvS2WfBWSUZUVe6%b5C0o|@iLA|Q)|lDdbxfX->Am>; zER)xlVnT%Szf3-`?MXH{;r8qP>a8f%UV_KjG4mJWkzJ)dn+doj$)gBIwVkW}uhS`Y z$hT|Z4-zLc-c9Ac%cv6Oh}Xlf7r)7*gYuOA|g5@nG>s*LkXOHQ+ztP7(cgV?B27v7g6 z%m^_D(K>l}KLH$nO^R*K*OZiKs^{N2ZYnsG^eK131Hw~NAe%F^>$ST#LRF{9&};UM z2B@CYPE|bu&BFxw1iG$O)r(3GP$l+anCmk(n1V(3^>Vs)jPh_3?F`8B+D3!^)Z^eH zhx5K(wRPZGrATH#7R)RELq#zx0t9((jFPY%K|j!oj)-mY<9=3#RJ)h_HsR)T6dhlv zZB|Sr^U)HPf2B>~m4`bn{RL)+YQoB{lyNH|->(EJWK}`(=9GMzpPPm`rI&F7A{=iV z>#f+jRIZ!L8~76yZ$w49l^fDDy0hPhk?vKT34<$bdbh<|b>?9~;e&-p2SF4Q>Rro0 zjl=r+hCk^{vj;nj>YPntcr2zGR$!FZ7R!&ky-ctxM|r3Z0GZ~X+A(mn&H+yg-0f+^ zywGT_+gx}1!o?kz8lzdn1=h^nTyh_T6z~mjQ=>!=Z#4`z_Ovjzx+74l48Rf;#hqH} zD=tj>8bW!zY@hiE2BzEbEvC*Dm*sDpCcIht&s>V-ztJsMZqQ6TUtT@>0Nq$sZUx27 zN!+V1X5Ag>363|D4xgfb@FToR#l%z2)UmzmgWwMdR-J(j`U#azh9Wd0uD3Ubx~D*f$Mm9zey{+9>5rw7S{4feQRZaxT9{`-BLJkxlOljUr(=lyFA bi?8wnztZI``8@wWROvo|HdOx4?A`wZD^JY? literal 0 HcmV?d00001 diff --git a/Images/iconSuitcase.tiff b/Images/iconSuitcase.tiff new file mode 100644 index 0000000000000000000000000000000000000000..052c02f82422c062efdf710d0f54611e3db157c1 GIT binary patch literal 6148 zcmeHLO>7!R6yEhuRYgh+#*wAA5>+8;m5Zww5-Arf8sZ=clO9%$dWltudsT@XdZ}c2`rghiEQTdcW4BV39ld>z zVdi_^d_0z6u3r}}3c^%P7;^;~WB2U$KbK|seLMbD5X2>n&&l#HvYbi4d%{&sd!}jH zs-}G>{4Q@igZ|YAnJ*@x&%Wkn0FPe>>2pr6cK;v54=tEOYwp81TuWzoET?by{S!R? zBym0-U*>T}PRloD?J@Ae=`Xgvk>#7bU)#EUN4CebiVu4I_x=4bzNz!Q{@b_LHSKFY z_s-UOv1P}aw$o}maa-Hjxyi>gcbcsYyML>wZ4~WzqxD%2rwM}`%yocw;ycZLE>PRy z(6&AizFtRAPdz_%X})yULcv?w!Z?jv5I&{HHn0lu3p<98$Nhp}LJWKPB{%{2NmuL| z&fdgan14}+16QsWuK2Mle)TdsD+D`2`ioupox=qKMWS%a>agO3g%7- z!t_P)yxkA4#Q9$TCGj0$+QJv6uZr*X;$`tY*Z7ZI@y$NIAk44A+_xdcHLxYi&K%qm zgb#g!ZRR$W&D@t@C*jvp$Q^9K;lHWe1>}>mc*;VD3|xPQKXN|_L;lMPr^r8s{1?Ga zPyb~=U+&e={D#pmA~XzHLL@@M zBu*uWU@fpNFa<53PNW?E&iCgy{4eNXy=;^WNl)k!{uxV{l94bk8wn$7tQ%!>-H7TD{Q`~ZSp$89Y8_l#me$5*Yf5rCQl&nX(>*^@LT2zgz#6*vi=YFLn#vdZ*bbo3&2GESm*0->I8T zGYR~YkR@qI;3e~l5g|kTQGcwTG5R;V^)9ZV)X9)b3kjv%!G>81M&4Qnt|h5wj3{yV zyY&bD(7c|Xj0GTj$Zp|SC>4%HauP+}SuhEZCH*p}bD2ieA^xC0qA!loKSQ%LPqPG! zmS|Zo>jk)1^omij<036!)02wB|A_vO!JGdzlBKs`{w=^qlv@N0Uy}?;k}Nk>B3IPN zaQ%S(aX`o4X0Q5hnJq&DYZ`Uh)LT0GnqH@My-Z4^pq5Al)>9yPlIZbw>%V3x|=X z@9&`g@z~lJ{VOyND%40BtWMB3X$vsxRtEGnz(y+#^XK}*p4D6byJ`t`Ol7qJ$W^tb zZi9VKcImFZOWRZfuUWoLOCI`<=U)SEfJ|zZZIcFM!UoDfYa_b8OP2{~zI{|KNVc(e=2V^H1CAoC1H;KgGH8=O=#F zSWzeCot-VB!+8YO$_&=a$$5_a=Kh~6@UjyuIH8*VW8?`Io>cJ@EI8MiUhSP=!3_HZ j3;Jh;{t4FnpZyc8`GejG7M_ZEo?wAKQ+9JstZe@`J%}tS literal 0 HcmV?d00001 diff --git a/Images/iconSuitcaseH.tiff b/Images/iconSuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..a2353ef841ee80af146ac061d25eec7ff7912041 GIT binary patch literal 6148 zcmds5O>7&-6`qysA}A1(G)V|(18hRkXpqa+lw>EltZV)`27+xQF6kZuqJS;ax$H?2 zdDco8%QjPPNHX4v};Iu77_`Rn-@LJRn54g!qiA-dELX5$=)K zP4iEtXEG&` zAF5XoudjY=njfjlgnX-Ba#KLO1V-E=ihoJSbE71m35bxvzTXqG`InCYdN_v2J0fF- z|6p+>-w5P#K*9-i)J_yfeI12oBfg`UgxB|v#G$kO$h+Gop|hjM&+`Hyvv6A=KZhS7 zf@fSjL!b$>{&jd*_)!EW$SLSML&)h@gtUJh&V;$q^_=h%a@w^|PQNbvbc8PpFGQYy zIf9o%`-IHFXM^9t%oUJJuKf7%yM+8KP6ADS=tsMK$ocRn*|koVf4j|jL8&MO8DxSM zVkh%($Sd-Sl8D8{N#fl*eg=PY_N=b4s)ey~UQq-wJRi?tTQ4XH@u=Jia@6xf=P%Zd zv8|7{Ltc>M;`p`b*@_~>qUTYZlX6n%!T*$p)6s1`Cof2usQux#-qj}aJc;|KUF&Lx zd;y}*h|&1ldR!F51jxxX=ab^cm;?~DUeSsm&#DtKjQ_Gc#t-l65PJ;cS6%Bx?OAm~ z5WhG64|vHc+83;% zwZvAfroC!kV2kXWvBb(2>MS#DFSnE%zxN&U9siGbZ`g8fIt{yIcbvcS zKMqTF&AJI5Yc_bcYHV+K0lb_u&QSsQfd=p4J1)d9hvV?ybasY)XU8eqRjX!It&*=> zz*>p5Ez_>DCCF!qh5VNxm*eu^9CnhfSyHlxR*WYE7r%Yyexpn6>KW<9h*5aj~pdDaMY1U)$vIGtU3KoR#P0 zBuG|XR6yz_qXyP$))n}@$V%*jfo%!muhBBa*lRS(f8nX)zh>MtY81q17%ij88Xzs! zvRbUkZUMdp*MCJDtYwVHKjL40`uMLI*TBOyumX*N2ElV+0%9#wh*>Yui+b4*MDH5v zDF1oc8~KO^wLtgv^KmO^gcQ~w@R3#%7U{3ez zkI(;>wyjS`AbxR0$+_rW6rAz$0@?%}Bo5Y#Q_ z98{MLt7!#uR~62S#%S(xXMLQH33*A`)PsKOuZ|oN zx1lDa3Uw3fCsw%)te$Sog!<{#PS(WQ33Zi_Wndk9di`$wz zvKtCKqg)3;4fa_NtaXhZGg*)B7(Hwh&V6aqp3$K_O2~O7F9-du*K<&Z7bJWS;o1ks z(2cqZ)>W|X>8{bHTePijQT+PadY57Y>(F+XY3#6F`lYc43=sme`lw$XSkI4`349y^ zL)Vpx5(*(;8UBrR^=-PXVf#e?l>UK!rhTD*p?#y@)9)Ey(tC8*%^>WD3{~XlKQGV6 zo>c++(`XA4eg{G1f#$;%1^>^UT!10*{1f&G`8~t>Jq>v>`XGz{JN-5#p4i@zAcd+34SrYDG&HX3b!J2zK+QGtIu_Je|fX`EY3wEr0{a*&! BwnzW~ literal 0 HcmV?d00001 diff --git a/Images/librarySuitcase.tiff b/Images/librarySuitcase.tiff new file mode 100644 index 0000000000000000000000000000000000000000..a7ce4778ea88262af9746c11d1fd6fee349ada0f GIT binary patch literal 2142 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 literal 0 HcmV?d00001 diff --git a/Images/librarySuitcaseH.tiff b/Images/librarySuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..fb3187939c2298cf9443487b84f73e655afa0ed3 GIT binary patch literal 2292 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 Qlb=Wa*)-R literal 0 HcmV?d00001 diff --git a/Images/otherSuitcase.tiff b/Images/otherSuitcase.tiff new file mode 100644 index 0000000000000000000000000000000000000000..896bbf1d77797016033678afc61cfb6a3ee45063 GIT binary patch literal 1434 zcmYk6dpOg39LImd6i>`Hgpq{Yn&Uc`)M6H5&272mJ}NAS6NSx$IwBQkE;+8Hnt0H0 za&p8DW-7Tg*Aj&+=VWGQnu$59~?pkUPgrIb0_^RJSD;h zp)(1R@pzhJmo^q{69HKy+100@ElGp#EQIpQ(Q732yyfQDHii%74PtGgV{jSS(ZjPr zP&jZZ>wUsSfB92PBD$Wi5o~K<6*@Hes=9z?PT3RBts!fzXy>)h^47P&+cv+jIsA=I zG=$nd#pjN+^@x+7?aMkm-|`%E%uG{3s!N(I2R_Cl!ol52ak?`18haYWsAFGRshu}l zCLjzY0Y(Y)NDm8R{xBS(177*(PNpM|7Ny3zb%7+uS}l(&?d~c!Ti$CDos`W@upc#Js0hyL47H!m>@jnHwa{VV;bSKTKr4qkYzElZ z-`la88_cy)$nq>j=ef-Rv!Q>j*rvnEdQb9kg#;DdA}o1I8GRrv(!~3GmN=8uf(7F| zE*u&%9|%ja^&3qxqI!=O>EnGzBj^m5KGV%h;$3r^R0VuuWS<3_jiWgF%Wgrv2>QVR z5tD0L`F>t}%{n)1Vh0j9rAx61Vbiu!tZ_xy4&t;b@lDL&Kt4$u@2Y$S?rEi!l{}16 z!9)fL@7+uzJSM+6`rnk#9r;p8s zdR01drTVs*ToJ@7PjS&MFIbp`|cUW#q5XZC9hpqNj@C@$ZHEtFE2q zUP;LFmJ(azJzt5o%N7GKht|d1?yRr!zb%V}V+pMt=h*6A+r`6e=@079AdaWdmr+~< zc^uk%rm1g|4od1wJ=GV&PE8+a{Skqdt~(=ASPLeWhz&BLVB@`{$dclu-}xyVlNLT1 z=~c}QR7)=%f1b~7pIcQdAuZ9zo4S%JLggAJH>Q2g%9BI7XnpFzO(Aiw8z){SwUe-a z6m2db0tA}t)b@Bt6FziQD|!1J&tW7qiYHQIG>U>7rGVqj%2TV1Z6u7!7Y)YuQ_^K0 z#dG&++j9hRLoSO$Ewr~|sp%!M1C#E7X~=}vM<&kC7j(;m3 z-FQ0WFf^_9!=k-!ZEAIpdi;mz3 z8V0J_TkD8=e&i?-7pikCl09kX+zo0j&}oG?yxau7 zZ*$Bek+q)#Xw7J({?pbH*o&YHQS6})g0@naIOL_;JrKCFBxcnz~BDoN`eqOTqt499q-pY48P0w{!W*SB>Vhd8JqHel7ZwB@AUrw DwrOyv literal 0 HcmV?d00001 diff --git a/Images/otherSuitcaseH.tiff b/Images/otherSuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..553f2db6310e9bbf726c40ee44cb2e93f52b8647 GIT binary patch literal 1730 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 Fe**un2$TQ- literal 0 HcmV?d00001 diff --git a/Images/soundSuitcase.tiff b/Images/soundSuitcase.tiff new file mode 100644 index 0000000000000000000000000000000000000000..591899461b3f3a92799146f9cc54776da366b303 GIT binary patch literal 6148 zcmeHL&x_ke6dvu55EhcPP0K=C@JcDP>}4A%r(7ItwUmXRQc1bG6x)u_>Qm#qy%zR=&irdX^${gw`fJ9{7Zdwh zC9|&?6=Px>MqkGFf2KTFdJ z*e_EXrm`mmk+2$h)x|OcdO2t3!jpHlBIZBj;WRha%bfizXTN?C-Ow0YMmLRph7T=g zFG+ie;ntQ@KZ3PuIlIhO(07Tk)h+G))Q^_7G4`9<2W(a5XRCL$565<0`zROxY0mz7 zlAp1S9rV49A-;s%ld^WY$Ji$&mTC5XzmAX3lH{aFejmNr{Ev^5#CAN#u0dvKZT-zg zI7_^m>y+0^)mfsR%{zl6c_OAUCW+^0)!EqX8pW5ZMROznWbEYRvFPz>IZNzXse0a@ z#kr2Qp4roy=A7kEPI|}=JY$|!J2@fzd4GN`!k_yRSdgi*TiYdx|11fcArG66AdAqhL)anP8UB!Wk$F*KJ2E>)Q2b~33Hu_1 z@YlDm5PyyETac^czmDwnas4cgds;)qKjFWK{~iybu2Acd>G{@2@_#vgVGmnFSyRG% zP9w})UpDbyYh1#AkJm@uknjhQ@jQs;e?R8K-xaq;)`&3svHskTLhK;ssDpX*M2P*R zcs`1M;K$xX`_H-h7rWR;yTTY562BW)MlIkE;h}j1krzD{#cQGPH?|uE_0x{rxF@=i zG1Mh~E7nJL9P+l%M{Uf*j?Llj1?w^9A3J*#s&A0>I28Xk1O7c(j zQ^3C-8_^@-2{&qpmgsUb>hRkUX$wBmcm{q*(>$j4tQ0>+$nT%@eH98DsLGLvH_H<~ zvQY*LVnl6WU^E+kifI6QB{FcIp9Ap^et& zUB}Zvw%h!+C?np&a}Q!m9b!JS@b7ZqlA?<{GOH;%JP@~}uZt`V2x%SFi#6aD;&ll5 zC(^}xLHygmPv6b?`jI@MXN!Bd4Ibc)(z(UkyvrMCd(b*G#ZfzeN4{y2Sz?!dXDIxx zWGK&n_CB`xE=I7?pRiP#Chwr9$4fMhFpyck)7-@9S)W%m@vrdb_y?v*9k-i$({Koj z-Yh#bj}|A5b!hr34r?%pS2dKi75{e4eWiZ#7`nXTm`%cIIfm24@0$+B!+eC@>|VN$ zru^eK>kR%e4;o2#8V>R7I;PYCr#3M{a=zyCKEm&Up=w0e;?*Ealf^ep~TR_>1_znBP3tvuwrxsf8ZKmF$^;$PvvjOU`~WB&2KhxUhsJ?)yMrXflDLc+1s^zM-4q2d9ncscBbp|dw!NLjE#@{nfu;`>ponYZyYjtOQf`uOG k2^RbnHaWrC_-As0wQ)K=!J<>K!V@g;vy$G~iB+oq1;N(XmH+?% literal 0 HcmV?d00001 diff --git a/Images/soundSuitcaseH.tiff b/Images/soundSuitcaseH.tiff new file mode 100644 index 0000000000000000000000000000000000000000..e0799bf981eaab718e64dbe8edaa79d9b57e40fd GIT binary patch literal 6148 zcmds5J#5=X6h8W=2#O{W4H*X70*vJX4YDvH8=%R;*rb6pK)^cYdF5hdy#R%jkr`rJ zn>w_xJ1JwM44Nws^wuE;j26mN6q&jdE!;p^0tCLk$2*EgTS^^EOLM~0`|f!6?z@kV zC+hCpA(si6s*|@AgLD2+UawM0FG}1cM7xRj0;RuDy0#40$cvEgHc$5)8ZuJYtcW!FC~5hwchI_4o~n)iF*gU*ZU6R^ZlM5^?D_N z?Sj+C)cY}xDRuu$VQVVG zKY9v&)D_ae_p3+U=ZOX=!?)dQef+q49q{rBHeBqUhwsH;1!|umURm@OJ;WeCV9#5j zmr9d>0eU*URhs<%=3>b!&6c#U2zgFRrRCXKN^c_$W)af6g#1ARiV*QNz)4B4fb?rZ z&h;00CSbr4_vFY3@IMj*6u5v$6eVZ)dyAFzDv&#=2qStmj*8W}hT%zNZWWWPeQzkv zCfif)-5$v%8=gPsH9{ugvPQ1Jm!{x}1Wyq7Xp^!XI%^*&SSM33c7l-U%i64LhnhCm zZ@09M$#fE*OyAHx>Ek8sQ>FhU1>eo$6EX*n4L%1Gx4>>D_Tig{gnV8ksVDDysn?G< zKOAPAc(nD`>zsRj;Cl|(0IwBBo8gED&Z@5$ipC%l*G|8J-(T#;JI#A6Z!Y&nX)DHnq0uYX!BgV#~D5YzFx#ACAY@Bg?VP zvKs$zJKAA`bsnVs+uC;65x0ST*--h{qoSc1I@su*^FjQPlLkh^fGvZa)$0Z1zvSff z;X4s?c@0zZo7Y65lz{H63 zn;xWSkk<^+3j372Z&H8QS(NyazsUc592#T2l6(t{^|Yk?(RX5eZc_d8{MGzV$8wI` zMNCxbX(UOYSRqCZBW2grRb?!;oI zv<^X` z9FeVAPUZM3`g^Cyf1x>Y-)&c7aaV=*yZt+y=ikqN=d}4R_@>cQ{t@ z9`2}t*fVAR1OFoM-wZb-_fdT{ESvZ~B=~!R|DjBRF?i~iO%Hz4<^Ch}-(uU*cntU( ztG<=o1AOm8{Rw#%Z?P?y;keZrqHS})wc~x$y5)Gj>)`tnzPFody8$dV;0$Q z6=v9Em4@4{oxFa$Kh!sv>sXNWS54eMQ~rePAHcnb2oJ!}(+IuWoQZ=*ja8$W*lO2U zEm~*?O{_1ptC8A29rpmDqCm-QMplt zc9=QJ+P%nyS~d>H+pxo+?#X|KM1P!NKdy%N!fI$UiSx5CPx$S3#ws0s4c-=(vI(8kJ;*N>~YPh)luCVE{E44OR(VHUsn1 zaGuRT4eL70?}h7t#RnOB&b;YCj%tOnnMTJMI_-)Ny?p2mM!_t9KD5CH;C1QC;9Xyb zHte?~eL7Bf3-)2##QT78)3Se1NupAi1*4uJB^-i0UF?JJYU zKLUl;VSL_jKfyK^v^;)oSREA#9QB`wkqs0wuAYcb z$kR6N-{Y{8?9)~J@BDwAV8IF1++PDvu<)cxoM6GZ*7WWE2^NfyCs@!vL$VXBxmVc< Y*4&%^2^OA;4L!jEJ*VU+J+YGhUkGA+w*UYD literal 0 HcmV?d00001 diff --git a/Images/subprojectSuitcase.tiff b/Images/subprojectSuitcase.tiff new file mode 100644 index 0000000000000000000000000000000000000000..1a0ba73209956fa27553c0cc08d597d6aba838de GIT binary patch literal 2288 zcmai#3pCW*9>@QG&l$={Q$lh5-~C(P-`;Ee_Fn5_Zx8GO05Bp7 zP$3#?Y+f%7tKlDjpnHm8^0-$V6{r|QF23}Lz#E0(0^4_`+G{Hmrm7Kv?KWgG-VpDU z%85dw`tWe+x&rb;K5@HYMiH_Hx?3jFno25yXKZ~Ox^|=6-?2Gq?bK^7x8Qhli3xo5 z_JP9Q_scW&1ZkaGaEhMshQ zII~3oUKYU7FH$+C0F?bkJ>b-t_f8%?UOtDRwzoeqnd91qu=2D>%cHO)1tR(>GKxg^p@4!OY9d<|BJ9 z+uw|vf|%QDXIuGb;uZ;68>HjJ=Mt#;>2?L(0dV|&wOANivwgNAsV&$Y`80o6e)Vji zU*@Zw`-_fRW4&%W6ffwY%{M6@M0C7celfYssP@tgzQW$M8eKCItn}#3*6@V-(IA>h zike}3?ZBSo%*M$F%J<@Doo~IVy`J&V|1LU_efB~4!*z}GWBZ4PxHZ4NSXzGf@l4u~ zx3TH9rwfU-Z>NL|8V>wwgifPlg{#(xUw<#|_>%0DiifJ?lxbcxE-24a zt|6Y3N~npuIdb>=~PY5l}^~{-KyTx3bPJDmRZ8>4Qz)cVmCjz zoB7bFGEw7-ZrjD;FB=-V5`ACcFHv+16KCUw=W@v@)tdF4Zea$5+er!^8i~1l86x@Y zbIaISiI4Ve{N)A&DEI#ZlNGxrOQ;=G>{U?Gq9@ zt!bsz&Vm<1OtK|5(qB3gi!CbCj_zR79I8(f$j+@b04WUcB)%|kedA`@S4~sy+_Z9C zoTBJk;N#e5lS_X&&rJ3^?7x~H(5AAgN7x>-C^Q;2-ois(kBN|D{_+0M_471pES<;- zORaacFj9Z?8|u78gqx30=*fZe7YPW?@FEJ4bjbn{cF2f+eyrzo>=&uQg~FO+htnH{ z6a8llC1Z{#IU~-G%{#lKjTj1i65PwH^w_4UgSg_+BWnkf1tuPDd9}JqF+&Y2Ecxsm%5-vp43bI)q_$gPUjP}%*d{u~3 zAd&%FSc66Lg&tbwzJCbHvrNR_%A4!OE@E}>En#?;(tqZh$t!q6nTqTP=dbma;ikmr zA}+4ka(tlzEps19K{@tQy7lj6$g7r%|3F@`jN~m}kDZB#G2jFIHG0?lwEPQ&Xw#zRQ7R5^V`lSLGHXjM^g>{v|wU51K{WErpoNNme)tdtQr0 zW>efa#254(zj$=BQ<7pfuq}}LwwlHXE2L+rU$9Mj$ftxfmP++J=B9;qOn8RxXZkCA z1yuD0f0|$y)}C@GSUsmp%tC+At)(Jb_onRlWwMla+~P%j9HZrw*P1`R&n>c}(kD%$ zIq;zM-K2}Y$qK`(sjMK6=Jx|S$#wFGc$$N3gEH#)zFn5*@rqV?sCcr0y@qOUpBngGr2{+R5yHpkIWYo2~T(A zN@5GClIl5Vu1n4fWkz?v4vNV&(k>?HDutI$N)8z5{B!I^=}ZZ=$IPY~bHPTFn3)pr zTy4C>sAPZIgT93J{l!ebjNZzMewpzLS4mQ+bLCn6b!k%oGvZE~B%fz0>4h?5-YrvW zGKdZ=yZ86#$HM@Mv#G80m`Hd59&&~p2s~MF0S9alKtF-oUW8iAe{&vERC>eZt z8rdWjVio}ymc*SdAYK--Il{PUB4TB~794=(Cd-a%WBP5tK^3X)oPm#yvf}-T6|GV% zhYD3PH`xa|a|w^oP1KJVQF!^2Dc*hQM3xA}%5AHC?_Tzjl!>$TSBn+cOR^AFt?cgE z8K!Wu%!E}WD@_+pHU;|^lh9D<);88F@r9%j4%YgjC@@$FpClF~Ed2A;nL*VVyaz$L zv}LHUmLy+z1Y|iO*IgZU%V<{N32&UXM2e{>PX*saV50fkgdv{=Ow?9uSEH2 zdm= z_iK#7I^i2#RD@s&`p#$6N^~lT;o8$nTYcUdg2~3BL&taK!;hxx&ny?AG%GAbU>{fB zslgF@s3IPusg3QMkJcsyJ5^@?O8~l&mRL4 zid!QT7G!O|mr{-$^;CFfjNXQNbLD5xr+rQ-qq|;VWQ$3<(cTH(1OBX`+Hs16D!*a= ztfKW7x91L-v4(X7!70*o-hi9Zjx5;cbn(D~QgFqPFhdcUM4dr}U7GeW6IifqO4-P3 zt?*UNmED9SQ{Hw3o_B(WD;|sy?rq9wn`R;xHh$gDFYu@yfo<--yAQefWRe~~Ys;BA z?B!E#K{6n0yy9fh^;tup zj739!39rXTXU{dsiFpb3!bh&7>#8)*@t7_vgLu%!FXP6$U?Fa0J?n>i~_6|(&N}ezg z+=^Np--{JHiBGVvJRgP5EH6r0zEl>oB)%x$M;LTj#CV+P@EivqEg7{)+hXE}%5_3I z8yj)_w{)bndH0?SM-8!LkkB1q0PNXB?N@nBjP_UQy{4xx^1rJ0ofaD1ltS8%T|KQz zBE&nkgmG>LybnA)_r4$)>3nTeavJk=5oeitGtZ)@W|8VR@ydCNq(4v$)JtTi3Y52+# zHrjmSl2DBDV?&|h85Bb@ab~+k%`$fOxIH|2nXM67rm|t+do}=<->>xtZrFAV!?+M^ zKh{MGi`)tDCd`^zJA}^#_=cOm4>V{0{9!^oyqLCQFPr3zX}L>wk5wrq&lWMXpS}S= znGPwl`-qEkbzoHAK**dz#A-7{`^9P~-{~Q5T5yKi(nCf_q^MqPD{|vPxvT0%bGOf1 z=8;1ugM`MSr?x`r3v%TT#2a(#6M6#Ab$?LxnGe<~s9xA*4JR)KGv?|R_fCB6Kn}ZS z&gV-t@+h|j<@3GUU_p97l%+C2%D=5bj=y2At#4SWLQ8wa~ZuSE10pJ!XNUYCmBG1OP{k)?O> zcL*PFq9`iy@FgL=aSs@+PbdC&_7m;$T4$0T5ENjg7V2uwC|V!>#U96h8=$+B0~aJNx@Z0ON4WxQPd*}YIS6;p26<`TV} ziWv88An7zGrY9!F0ilXV()lmupt0{AK;F_y;HoM88a`HYk65wrteq;qN3< zgTlJ9Ui1DA&oiaeCsHL%?}~t6^_YPEFAtf#I~@F9dH6T?{>8(;`Ih*dhs?we n9)gJ9c*yh|!v5gl;iw-xJe>HQhfEjffAWw?K=8Nr9~}G(Ks4{J literal 0 HcmV?d00001 diff --git a/Library/GNUmakefile b/Library/GNUmakefile new file mode 100644 index 0000000..198ff11 --- /dev/null +++ b/Library/GNUmakefile @@ -0,0 +1,128 @@ +# +# GNUmakefile - Generated by ProjectCenter +# + +include $(GNUSTEP_MAKEFILES)/common.make +GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT) + + +# +# Library +# +#LIBRARY_VAR = PROJECTCENTER +#PACKAGE_NAME = ProjectCenter + +#VERSION = 0.4.0 +FRAMEWORK_NAME = ProjectCenter +ProjectCenter_CURRENT_VERSION_NAME = 0.4.0 +ProjectCenter_DEPLOY_WITH_CURRENT_VERSION = yes + +#libProjectCenter_HEADER_FILES_INSTALL_DIR = ProjectCenter +#HEADERS_INSTALL = $(libProjectCenter_HEADER_FILES) + +ProjectCenter_LIBRARIES_DEPEND_UPON += -lgnustep-gui + +# +# Subprojects +# +#SUBPROJECTS = Resources + +# +# Header files +# + +ProjectCenter_HEADER_FILES = \ + PCBundleLoader.h \ + PCFileManager.h \ + PCFileCreator.h \ + PCServer.h \ + PCMakefileFactory.h \ + PCSplitView.h \ + PCButton.h \ + \ + PCProjectManager.h \ + PCBuildPanel.h \ + PCLaunchPanel.h \ + PCLoadedFilesPanel.h \ + PCProject.h \ + PCProjectWindow.h \ + PCProjectInspector.h \ + PCProjectBuilder.h \ + PCProjectLauncher.h \ + PCProjectEditor.h \ + \ + PCProjectBrowser.h \ + PCProjectLoadedFiles.h \ + \ + PCEditor.h \ + PCEditorView.h \ + PCEditorView+Highlighting.h \ + PCTextFinder.h \ + PCTextFinder+UInterface.h \ + \ + PCDefines.h \ + PreferenceController.h \ + ProjectBuilder.h \ + ProjectCenter.h \ + ProjectEditor.h \ + ProjectType.h \ + Server.h \ + ProjectComponent.h + +# +# Class files +# + +ProjectCenter_OBJC_FILES = \ + PCBundleLoader.m \ + PCFileManager.m \ + PCFileCreator.m \ + PCServer.m \ + PCMakefileFactory.m \ + PCSplitView.m \ + PCButton.m \ + \ + PCProjectManager.m \ + PCBuildPanel.m \ + PCLaunchPanel.m \ + PCLoadedFilesPanel.m \ + PCProject.m \ + PCProjectWindow.m \ + PCProjectInspector.m \ + PCProjectBuilder.m \ + PCProjectLauncher.m \ + PCProjectEditor.m \ + \ + PCProjectBrowser.m \ + PCProjectLoadedFiles.m \ + \ + PCEditor.m \ + PCEditorView.m \ + PCEditorView+Highlighting.m \ + PCTextFinder.m \ + PCTextFinder+UInterface.m + +# +# Resources +# +ProjectCenter_RESOURCE_FILES = \ + Resources/NewSubproject.gorm \ + Resources/NewFile.gorm \ + Resources/ProjectInspector.gorm \ + Resources/BuildAttributes.gorm \ + Resources/ProjectDescription.gorm \ + Resources/FileAttributes.gorm \ + Resources/cfile.template \ + Resources/cheader.template \ + Resources/class.template \ + Resources/gsmarkup.template \ + Resources/header.template \ + Resources/postamble.template \ + Resources/protocol.template + +-include GNUmakefile.preamble + +include $(GNUSTEP_MAKEFILES)/framework.make +include $(GNUSTEP_MAKEFILES)/aggregate.make + +-include GNUmakefile.postamble diff --git a/Library/GNUmakefile.postamble b/Library/GNUmakefile.postamble new file mode 100644 index 0000000..1dcf7bf --- /dev/null +++ b/Library/GNUmakefile.postamble @@ -0,0 +1,35 @@ +# +# GNUmakefile.postamble +# +# Copyright (C) 2001 Free Software Foundation, Inc. +# +# Author: Philippe C.D. Robert +# +# This file is part of GNUstep +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. +# If not, write to the Free Software Foundation, +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +before-all:: + rm -f ProjectCenter + $(LN_S) . ProjectCenter + +after-clean:: + rm -f ProjectCenter + +after-uninstall:: + rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Headers/ProjectCenter + rm -rf $(GNUSTEP_SYSTEM_ROOT)/Library/Libraries/Resources/ProjectCenter + diff --git a/Library/GNUmakefile.preamble b/Library/GNUmakefile.preamble new file mode 100644 index 0000000..11b8760 --- /dev/null +++ b/Library/GNUmakefile.preamble @@ -0,0 +1,71 @@ +# GNUmakefile.preamble +# +# Copyright (C) 2001 Free Software Foundation, Inc. +# +# Author: Philippe C.D. Robert +# +# This file is part of GNUstep +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# If you are interested in a warranty or support for this source code, +# contact Scott Christley at scottc@net-community.com +# +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. +# If not, write to the Free Software Foundation, +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# +# Makefile.preamble +# +# Project specific makefile variables, and additional +# +# Do not put any Makefile rules in this file, instead they should +# be put into Makefile.postamble. +# + +# +# Flags dealing with compiling and linking +# + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += -Wall -Werror + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += -Wall -Werror + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += -Wall -Werror + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += -I../ + +# Additional LDFLAGS to pass to the linker +#ADDITIONAL_LDFLAGS += + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += -L../ProjectCenter/$(GNUSTEP_OBJ_DIR) + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS += + +# +# Local configuration +# + + diff --git a/PCPrefController+UInterface.h b/Library/PCBuildPanel.h similarity index 70% rename from PCPrefController+UInterface.h rename to Library/PCBuildPanel.h index c72238c..0ca38c8 100644 --- a/PCPrefController+UInterface.h +++ b/Library/PCBuildPanel.h @@ -3,7 +3,7 @@ Copyright (C) 2003 Free Software Foundation - Author: Philippe C.D. Robert + Author: Serg Stoyan This file is part of GNUstep. @@ -20,20 +20,25 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#ifndef __PCPREFCONTROLLER_UINTERFACE_H -#define __PCPREFCONTROLLER_UINTERFACE_H +#ifndef _PCBuildPanel_h +#define _PCBuildPanel_h -#include "PCPrefController.h" +#include -@interface PCPrefController (UInterface) +@class PCProjectManager; -- (void)_initUI; +@interface PCBuildPanel : NSPanel +{ + PCProjectManager *projectManager; + PCProject *currentProject; + NSBox *contentBox; + NSBox *emptyBox; +} + +- (id)initWithProjectManager:(PCProjectManager *)aManager; @end #endif - diff --git a/Library/PCBuildPanel.m b/Library/PCBuildPanel.m new file mode 100644 index 0000000..c2d0854 --- /dev/null +++ b/Library/PCBuildPanel.m @@ -0,0 +1,150 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCProjectManager.h" +#include "PCProject.h" +#include "PCProjectBuilder.h" +#include "PCBuildPanel.h" + +#include "PCLogController.h" + +@implementation PCBuildPanel + +- (id)initWithProjectManager:(PCProjectManager *)aManager +{ + PCProjectBuilder *projectBuilder = nil; + PCProject *activeProject = nil; + + projectManager = aManager; + activeProject = [projectManager rootActiveProject]; + projectBuilder = [activeProject projectBuilder]; + + self = [super initWithContentRect: NSMakeRect (0, 300, 480, 322) + styleMask: (NSTitledWindowMask + | NSClosableWindowMask + | NSResizableWindowMask) + backing: NSBackingStoreRetained + defer: YES]; + [self setMinSize: NSMakeSize(440, 222)]; + [self setFrameAutosaveName: @"ProjectBuilder"]; + [self setReleasedWhenClosed: NO]; + [self setHidesOnDeactivate: NO]; + [self setTitle: [NSString stringWithFormat: + @"%@ - Project Build", [activeProject projectName]]]; + + // Panel's content view + contentBox = [[NSBox alloc] init]; + [contentBox setContentViewMargins:NSMakeSize(8.0, 0.0)]; + [contentBox setTitlePosition:NSNoTitle]; + [contentBox setBorderType:NSNoBorder]; + [super setContentView:contentBox]; + + // Empty content view of contentBox + emptyBox = [[NSBox alloc] init]; + [emptyBox setContentViewMargins:NSMakeSize(0.0, 0.0)]; + [emptyBox setTitlePosition:NSNoTitle]; + [emptyBox setBorderType:NSLineBorder]; + [contentBox setContentView:emptyBox]; + + // Track project switching + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(activeProjectDidChange:) + name:PCActiveProjectDidChangeNotification + object:nil]; + + if (![self setFrameUsingName: @"ProjectBuilder"]) + { + [self center]; + } + + return self; +} + +- (void)dealloc +{ + NSLog(@"PCBuildPanel: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [super dealloc]; +} + +- (void)orderFront:(id)sender +{ + PCProject *activeProject = [projectManager rootActiveProject]; + NSView *builderView = [[activeProject projectBuilder] componentView]; + + if (!([contentBox contentView] == builderView)) + { + [contentBox setContentView:builderView]; + [contentBox display]; + } + + PCLogInfo(self, @"orderFront: %@ -> %@", + builderView, [builderView superview]); + + [super orderFront:self]; +} + +- (void)close +{ + PCLogInfo(self, @"close: %@", [contentBox contentView]); + + [contentBox setContentView:emptyBox]; + + PCLogInfo(self, @"close: %@", [contentBox contentView]); + + [super close]; +} + +- (void)activeProjectDidChange:(NSNotification *)aNotif +{ + PCProject *rootProject = [projectManager rootActiveProject]; + + if (rootProject == currentProject) + { + return; + } + + currentProject = rootProject; + + PCLogInfo(self, @"activeProjectDidChange to: %@", + [rootProject projectName]); + + if (!rootProject) + { + [contentBox setContentView:emptyBox]; + } + else + { + [self setTitle: [NSString stringWithFormat: + @"%@ - Project Build", [rootProject projectName]]]; + [contentBox + setContentView:[[rootProject projectBuilder] componentView]]; + } +} + +@end + diff --git a/PCGormProj/PCGormProj.h b/Library/PCBundleLoader.h similarity index 55% rename from PCGormProj/PCGormProj.h rename to Library/PCBundleLoader.h index a918254..7c22017 100644 --- a/PCGormProj/PCGormProj.h +++ b/Library/PCBundleLoader.h @@ -1,9 +1,9 @@ /* GNUstep ProjectCenter - http://www.gnustep.org - Copyright (C) 2001 Free Software Foundation + Copyright (C) 2000-2002 Free Software Foundation - Author: Philippe C.D. Robert + Author: Philippe C.D. Robert This file is part of GNUstep. @@ -22,29 +22,48 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ -#ifndef _PCGORMPROJ_H -#define _PCGORMPROJ_H +#ifndef _PCBUNDLELOADER_H +#define _PCBUNDLELOADER_H + +/* + Description: + + PCBundleLoader loads all PC bundles from all the paths that are stored in the + defaults under the key BundlePaths. + + */ #include -#include -@interface PCGormProj : NSObject +@interface PCBundleLoader : NSObject { + id delegate; // The PCAppController! + + NSMutableArray *loadedBundles; } //---------------------------------------------------------------------------- -// ProjectType +// Init and free methods //---------------------------------------------------------------------------- -+ (id)sharedCreator; +- (id)init; +- (void)dealloc; -- (Class)projectClass; +- (id)delegate; +- (void)setDelegate:(id)aDelegate; -- (NSString *)projectTypeName; -- (NSDictionary *)typeTable; +// Load all bundles found in the BundlePaths +- (void)loadBundles; +- (void)loadBundlesAtPath: (NSString *)path; -- (PCProject *)createProjectAt:(NSString *)path; -- (PCProject *)openProjectAt:(NSString *)path; +// Returns all loaded ProjectCenter bundles. +- (NSArray *)loadedBundles; + +@end + +@interface NSObject (BundleLoaderDelegates) + +- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle; @end diff --git a/Library/PCBundleLoader.m b/Library/PCBundleLoader.m new file mode 100644 index 0000000..e83ad17 --- /dev/null +++ b/Library/PCBundleLoader.m @@ -0,0 +1,170 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCBundleLoader.h" +#include "PCDefines.h" +#include "PreferenceController.h" +#include "ProjectEditor.h" +#include "ProjectDebugger.h" + +#include "PCLogController.h" + +@interface PCBundleLoader (PrivateLoader) + +- (void)loadAdditionalBundlesAt:(NSString *)path; + +@end + +@implementation PCBundleLoader (PrivateLoader) + +- (void)loadAdditionalBundlesAt:(NSString *)path +{ + NSBundle *bundle; + + NSAssert(path,@"No valid bundle path specified!"); + + PCLogInfo(self, @"Loading bundle %@...", path); + + if ((bundle = [NSBundle bundleWithPath:path])) + { + [loadedBundles addObject:bundle]; + PCLogInfo(self, @"Bundle %@ successfully loaded!", path); + + if (delegate + && + [delegate respondsToSelector:@selector(bundleLoader:didLoadBundle:)]) + { + [delegate bundleLoader:self didLoadBundle:bundle]; + } + } + else + { + NSRunAlertPanel(@"Attention!", + @"Could not load %@!", + @"OK",nil,nil,path); + } +} + +@end + +@implementation PCBundleLoader + +//---------------------------------------------------------------------------- +// Init and free methods +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) { + loadedBundles = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)dealloc +{ + RELEASE(loadedBundles); + + [super dealloc]; +} + +- (id)delegate +{ + return delegate; +} + +- (void)setDelegate:(id)aDelegate +{ + delegate = aDelegate; +} + +- (void) loadBundles +{ + NSString *path = nil; + + // Load bundles that comes with ProjectCenter + path = [[NSBundle mainBundle] resourcePath]; + if (![[NSFileManager defaultManager] fileExistsAtPath: path]) + { + [NSException raise: @"PCBundleLoaderPathException" + format: @"No valid bundles at path:\n%@", path]; + return; + } + [self loadBundlesAtPath: path]; + + // Load third party bundles + path = [[NSUserDefaults standardUserDefaults] objectForKey:BundlePaths]; + if (!path || [path isEqualToString: @""]) + { + NSDictionary *env = [[NSProcessInfo processInfo] environment]; + NSString *prefix = [env objectForKey: @"GNUSTEP_SYSTEM_ROOT"]; + + path = [prefix stringByAppendingPathComponent: + @"Library/ApplicationSupport/ProjectCenter"]; + + [[NSUserDefaults standardUserDefaults] setObject: path + forKey: BundlePaths]; + [[NSUserDefaults standardUserDefaults] synchronize]; + } + + if (![[NSFileManager defaultManager] fileExistsAtPath: path]) + { + PCLogInfo(self, @"No third party bundles at %@", path); + return; + } + else + { + PCLogInfo(self, @"Loading bundles at %@", path); + } + + [self loadBundlesAtPath: path]; +} + +- (void) loadBundlesAtPath: (NSString *)path +{ + NSEnumerator *enumerator; + NSString *bundleName; + NSArray *dir; + + dir = [[NSFileManager defaultManager] directoryContentsAtPath: path]; + enumerator = [dir objectEnumerator]; + + while ((bundleName = [enumerator nextObject])) + { + if ([[bundleName pathExtension] isEqualToString:@"bundle"]) + { + NSString *fullPath; + + fullPath = [NSString stringWithFormat:@"%@/%@",path,bundleName]; + [self loadAdditionalBundlesAt:fullPath]; + } + } +} + +- (NSArray *)loadedBundles +{ + return loadedBundles; +} + +@end diff --git a/Library/PCButton.h b/Library/PCButton.h new file mode 100644 index 0000000..182aa8c --- /dev/null +++ b/Library/PCButton.h @@ -0,0 +1,59 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCBUTTON_H_ +#define _PCBUTTON_H_ + +#include + +/* + * Button + */ +@interface PCButton : NSButton +{ + NSTrackingRectTag tRectTag; + NSTimer *ttTimer; + NSWindow *ttWindow; + NSPoint mouseLocation; + + BOOL _hasTooltip; +} + +- (void)setShowTooltip:(BOOL)yn; + +- (void)updateTrackingRect; + +@end + +/* + * Button Cell + */ +@interface PCButtonCell : NSButtonCell +{ + NSImage *tile; +} + +@end + +#endif diff --git a/Library/PCButton.m b/Library/PCButton.m new file mode 100644 index 0000000..2a8ead0 --- /dev/null +++ b/Library/PCButton.m @@ -0,0 +1,272 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCButton.h" +#include "PCDefines.h" + +@implementation PCButton + +- (id)initWithFrame:(NSRect)frameRect +{ + self = [super initWithFrame:frameRect]; + [self setCell:[[PCButtonCell alloc] init]]; + [self setImagePosition: NSImageOnly]; + [self setFont: [NSFont systemFontOfSize: 10.0]]; + + ttTimer = nil; + ttWindow = nil; + + return self; +} + +- (void)dealloc +{ + if (_hasTooltip) + { + [[self superview] removeTrackingRect:tRectTag]; + [ttTimer invalidate]; + ttTimer = nil; + RELEASE(ttTimer); + } + + if (ttWindow != nil) + { + RELEASE(ttWindow); + } + + [super dealloc]; +} + +- (void)setFrame:(NSRect)frameRect +{ +// NSLog (@"setFrame"); + [super setFrame:frameRect]; + + if (_hasTooltip) + { + [self updateTrackingRect]; + } +} + +- (void)setShowTooltip:(BOOL)yn +{ + _hasTooltip = yn; + if (_hasTooltip) + { + tRectTag = [[self superview] addTrackingRect:[self frame] + owner:self + userData:nil + assumeInside:NO]; + [[self window] setAcceptsMouseMovedEvents:YES]; + } +} + +- (void)updateTrackingRect +{ + [[self superview] removeTrackingRect:tRectTag]; + tRectTag = [[self superview] addTrackingRect:[self frame] + owner:self + userData:nil + assumeInside:NO]; +} + +- (void)showTooltip:(NSTimer *)timer +{ + NSAttributedString *attributedTitle = [self attributedTitle]; + NSSize titleSize = [attributedTitle size]; + +// NSLog (@"showTooltip"); + if (ttWindow == nil) + { + NSTextField *ttText; + NSRect windowRect; + NSRect titleRect; + NSRect contentRect; + + windowRect = NSMakeRect(mouseLocation.x, + mouseLocation.y-16-(titleSize.height+3), + titleSize.width+10, titleSize.height+3); + + titleRect = NSMakeRect(0,0, titleSize.width+10,titleSize.height+3); +/* windowRect = NSMakeRect(mouseLocation.x, + mouseLocation.y-16-(titleSize.height+3), + titleSize.width, titleSize.height); + titleRect = NSMakeRect(0,0, titleSize.width,titleSize.height);*/ + contentRect = [NSWindow frameRectForContentRect:titleRect + styleMask:NSBorderlessWindowMask]; + + ttWindow = [[NSWindow alloc] initWithContentRect:windowRect + styleMask:NSBorderlessWindowMask + backing:NSBackingStoreRetained + defer:YES]; + [ttWindow setExcludedFromWindowsMenu:YES]; + + ttText = [[NSTextField alloc] initWithFrame:contentRect]; + [ttText setEditable:NO]; + [ttText setSelectable:NO]; + [ttText setBezeled:NO]; + [ttText setBordered:YES]; + [ttText setBackgroundColor:[NSColor colorWithDeviceRed:1.0 + green:1.0 + blue:0.80 + alpha:1.0]]; + [ttText setFont:[self font]]; + [ttText setStringValue:[self title]]; + [[ttWindow contentView] addSubview:ttText]; + } + else if (![ttWindow isVisible]) + { + [ttWindow setFrameOrigin: + NSMakePoint(mouseLocation.x, + mouseLocation.y-16-(titleSize.height+3))]; + [ttWindow orderFront:self]; + } +} + +- (void)mouseEntered:(NSEvent *)theEvent +{ + // NSLog (@"mouseEntered"); + + if (ttTimer == nil) + { + ttTimer = [NSTimer + scheduledTimerWithTimeInterval:0.5 + target:self + selector:@selector(showTooltip:) + userInfo:nil + repeats:YES]; + } +} + +- (void)mouseExited:(NSEvent *)theEvent +{ +// NSLog (@"mouseExited"); + + if (ttTimer != nil) + { +// NSLog (@"-- invalidate"); + [ttTimer invalidate]; + ttTimer = nil; + } +} + +- (void)mouseDown:(NSEvent *)theEvent +{ +// NSLog (@"mouseDown"); + + if (ttTimer != nil) + { +// NSLog (@"-- invalidate"); + [ttTimer invalidate]; + ttTimer = nil; + } + + [super mouseDown:theEvent]; +} + +- (void)mouseMoved:(NSEvent *)theEvent +{ + mouseLocation = [NSEvent mouseLocation]; +// NSLog (@"mouseMoved %f %f", mouseLocation.x, mouseLocation.y); + if (ttWindow && [ttWindow isVisible]) + { + [ttWindow orderOut:self]; + } +} + +@end + +@implementation PCButtonCell + +- (id)init +{ + self = [super init]; + tile = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] + pathForImageResource:@"ButtonTile"]]; + + return self; +} + +- (void)dealloc +{ + RELEASE(tile); + + [super dealloc]; +} + +- (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView*)controlView +{ + [super drawInteriorWithFrame: cellFrame inView: controlView]; + + if (!_cell.is_highlighted) + { + NSPoint position; + NSImage *imageToDisplay; + unsigned mask = 0; + + if ([controlView isFlipped]) + { + position = NSMakePoint(cellFrame.origin.x+1, + cellFrame.size.height-2); + } + else + { + position = NSMakePoint(1, 2); + } + + // Tile + [tile compositeToPoint:position + operation:NSCompositeSourceOver]; + + if (_cell.state) + mask = _showAltStateMask; + + // Image + [_cell_image setBackgroundColor:[NSColor clearColor]]; + [_altImage setBackgroundColor:[NSColor clearColor]]; + if (mask & NSContentsCellMask) + { + imageToDisplay = _altImage; + } + else + { + imageToDisplay = _cell_image; + } + + position.x = (cellFrame.size.width - [_cell_image size].width)/2; + position.y = (cellFrame.size.height - [_cell_image size].height)/2; + if (_cell.is_disabled) + { + [_cell_image dissolveToPoint:position fraction:0.5]; + } + else + { + [imageToDisplay compositeToPoint:position + operation:NSCompositeSourceOver]; + } + } +} + +@end + diff --git a/Library/PCDefines.h b/Library/PCDefines.h new file mode 100644 index 0000000..c18a6b5 --- /dev/null +++ b/Library/PCDefines.h @@ -0,0 +1,227 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCDefines_h_ +#define _PCDefines_h_ + +#define PC_EXTERN extern +#define PRIVATE_EXTERN __private_extern__ + +#define SuccessSound @"SuccessSound" +#define FailureSound @"FailureSound" +#define RootBuildDirectory @"RootBuildDirectory" +#define PromptOnClean @"PromtOnClean" +#define SaveOnQuit @"SaveOnQuit" +#define KeepBackup @"KeepBackup" +#define AutoSavePeriod @"AutoSavePeriod" +#define TabBehaviour @"TabBehaviour" +#define TabSpaces @"TabSpaces" +#define PromptOnQuit @"PromtOnQuit" +#define DeleteCacheWhenQuitting @"DeleteBuildCacheWhenQuitting" +#define FullPathInFilePanels @"FullPathInFilePanels" +#define Debugger @"Debugger" +#define Editor @"Editor" +#define SeparateBuilder @"SeparateBuilder" +#define SeparateLauncher @"SeparateLauncher" +#define SeparateLoadedFiles @"SeparateLoadedFiles" +#define SeparateEditor @"SeparateEditor" +#define EditorLines @"EditorLines" +#define EditorColumns @"EditorColumns" +#define RememberWindows @"RememberWindows" +#define DisplayLog @"DisplayLog" + +#define Compiler @"Compiler" +#define BundlePaths @"BundlePaths" + +#define PCAppDidInitNotification @"PCAppDidInit" +#define PCAppWillTerminateNotification @"PCAppWillTerminate" + +#define NIB_NOT_FOUND_EXCEPTION @"NibNotFoundException" +#define UNKNOWN_PROJECT_TYPE_EXCEPTION @"UnknownProjectTypeException" +#define NOT_A_PROJECT_TYPE_EXCEPTION @"NoProjectTypeCreatorException" +#define PROJECT_CREATION_EXCEPTION @"ProjectCreationException" +#define PROJECT_OPEN_FAILED_EXCEPTION @"ProjectOpenFailedException" +#define PROJECT_SAVE_FAILED_EXCEPTION @"ProjectSaveFailedException" +#define BUNDLE_MANAGER_EXCEPTION @"BundleManagerException" + +//============================================================================= +// ==== MacOS X portability defines +//============================================================================= +#ifndef GNUSTEP_BASE_VERSION + +#define RETAIN(object) [object retain] +#define RELEASE(object) [object release] +#define AUTORELEASE(object) [object autorelease] +#define TEST_RELEASE(object) ({ if (object) [object release]; }) +#define ASSIGN(object,value) ({\ +id __value = (id)(value); \ +id __object = (id)(object); \ +if (__value != __object) \ + { \ + if (__value != nil) \ + { \ + [__value retain]; \ + } \ + object = __value; \ + if (__object != nil) \ + { \ + [__object release]; \ + } \ + } \ +}) +#define DESTROY(object) ({ \ + if (object) \ + { \ + id __o = object; \ + object = nil; \ + [__o release]; \ + } \ +}) + +#define NSLocalizedString(key, comment) \ + [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil] + +#define _(X) NSLocalizedString (X, @"") + +#endif // GNUSTEP_BASE_VERSION + +// +// ==== From PCProject.h +// +#ifndef IMAGE +#define IMAGE(X) [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForImageResource:(X)]] autorelease] +#endif + +//============================================================================= +// ==== DEFINES +//============================================================================= + +#define BUILD_ARGS_KEY @"BuildArgsKey" +#define BUILD_HOST_KEY @"BuildHostKey" + +#define TARGET_MAKE @"Make" +#define TARGET_MAKE_DEBUG @"MakeDebug" +#define TARGET_MAKE_PROFILE @"MakeProfile" +#define TARGET_MAKE_INSTALL @"MakeInstall" +#define TARGET_MAKE_CLEAN @"MakeClean" +#define TARGET_MAKE_RPM @"MakeRPM" + +#define BUILD_TAG 0 +#define LAUNCH_TAG 1 +#define EDITOR_TAG 2 +#define FILES_TAG 3 +#define FIND_TAG 4 +#define INSPECTOR_TAG 5 + +//============================================================================= +// ==== Not used yet +//============================================================================= + +#define TOUCHED_NOTHING (0) +#define TOUCHED_EVERYTHING (1 << 0) +#define TOUCHED_PROJECT_NAME (1 << 1) +#define TOUCHED_LANGUAGE (1 << 2) +#define TOUCHED_PROJECT_TYPE (1 << 3) +#define TOUCHED_INSTALL_DIR (1 << 4) +#define TOUCHED_ICON_NAMES (1 << 5) +#define TOUCHED_FILES (1 << 6) +#define TOUCHED_MAINNIB (1 << 7) +#define TOUCHED_PRINCIPALCLASS (1 << 8) +#define TOUCHED_TARGETS (1 << 9) +#define TOUCHED_PB_PROJECT (1 << 10) +#define TOUCHED_SYST_EXT (1 << 11) +#define TOUCHED_EXTENSION (1 << 12) +#define TOUCHED_PATHS (1 << 13) + +typedef int PCProjInfoBits; + +//============================================================================= +// ==== Project keys +//============================================================================= + +#include + +static NSString * const PCClasses = @"CLASS_FILES"; +static NSString * const PCHeaders = @"HEADER_FILES"; +static NSString * const PCOtherSources = @"OTHER_SOURCES"; +static NSString * const PCInterfaces = @"INTERFACES"; +static NSString * const PCImages = @"IMAGES"; +static NSString * const PCOtherResources = @"OTHER_RESOURCES"; +static NSString * const PCSubprojects = @"SUBPROJECTS"; +static NSString * const PCDocuFiles = @"DOCU_FILES"; +static NSString * const PCSupportingFiles = @"SUPPORTING_FILES"; +static NSString * const PCLibraries = @"LIBRARIES"; +static NSString * const PCNonProject = @"NON_PROJECT_FILES"; +static NSString * const PCGSMarkupFiles = @"INTERFACES"; + +static NSString * const PCBuildTool = @"BUILDTOOL"; +static NSString * const PCCompilerOptions = @"COMPILEROPTIONS"; +static NSString * const PCPreprocessorOptions = @"CPPOPTIONS"; +static NSString * const PCCreationDate = @"CREATION_DATE"; +static NSString * const PCInstallDir = @"INSTALLDIR"; +static NSString * const PCLinkerOptions = @"LINKEROPTIONS"; +static NSString * const PCLastEditing = @"LAST_EDITING"; +static NSString * const PCObjCCompilerOptions = @"OBJC_COMPILEROPTIONS"; +static NSString * const PCPrincipalClass = @"PRINCIPAL_CLASS"; +static NSString * const PCAuthors = @"PROJECT_AUTHORS"; +static NSString * const PCCopyright = @"PROJECT_COPYRIGHT"; +static NSString * const PCCopyrightDescription = @"PROJECT_COPYRIGHT_DESC"; +static NSString * const PCProjectCreator = @"PROJECT_CREATOR"; +static NSString * const PCDescription = @"PROJECT_DESCRIPTION"; +static NSString * const PCDocumentExtensions = @"PROJECT_DOCUMENTEXTENSIONS"; +static NSString * const PCGroup = @"PROJECT_GROUP"; +static NSString * const PCProjectMaintainer = @"PROJECT_MAINTAINER"; +static NSString * const PCProjectName = @"PROJECT_NAME"; +static NSString * const PCRelease = @"PROJECT_RELEASE"; +static NSString * const PCSource = @"PROJECT_SOURCE"; +static NSString * const PCSummary = @"PROJECT_SUMMARY"; +static NSString * const PCProjectType = @"PROJECT_TYPE"; +static NSString * const PCVersion = @"PROJECT_VERSION"; +static NSString * const PCURL = @"PROJECT_URL"; +static NSString * const PCSearchHeaders = @"SEARCH_HEADER_DIRS"; +static NSString * const PCSearchLibs = @"SEARCH_LIB_DIRS"; + +// Application specific +static NSString * const PCAppIcon = @"APPLICATIONICON"; +static NSString * const PCMainInterfaceFile = @"MAININTERFACE"; +static NSString * const PCHelpFile = @"HELP_FILE"; + +// Library specific +static NSString * const PCHeadersToInstall = @"HEADERS_TO_INSTALL"; +static NSString * const PCHeadersInstallDir = @"HEADERS_INSTALL_DIR"; + +// Bundle specific +static NSString * const PCBundleExtension = @"BUNDLE_EXTENSION"; + +// Tool specific +static NSString * const PCToolIcon = @"TOOLICON"; + +static NSString * const PCPackageName = @"PACKAGE_NAME"; +static NSString * const PCLibraryVar = @"LIBRARY_VAR"; + +// Will be removed +static NSString * const PCProjectBuilderClass = @"PROJECT_BUILDER"; + +#endif // _PCDEFINES_H_ + diff --git a/Library/PCEditor.h b/Library/PCEditor.h new file mode 100644 index 0000000..8e934e1 --- /dev/null +++ b/Library/PCEditor.h @@ -0,0 +1,108 @@ +/* + * PCEditor.h created by probert on 2002-01-29 20:37:28 +0000 + * + * Project ProjectCenter + * + * Created with ProjectCenter - http://www.gnustep.org + * + * $Id$ + */ + +#ifndef _PCEditor_h_ +#define _PCEditor_h_ + +#include + +@class PCProjectEditor; +@class PCEditorView; + +@interface PCEditor : NSObject +{ + PCProjectEditor *projectEditor; + + NSScrollView *_extScrollView; + PCEditorView *_extEditorView; + NSScrollView *_intScrollView; + PCEditorView *_intEditorView; + NSTextStorage *_storage; + NSMutableString *_path; + NSString *_categoryPath; + NSWindow *_window; + + BOOL _isEdited; + BOOL _isWindowed; + BOOL _isExternal; +} + +// =========================================================================== +// ==== Initialization +// =========================================================================== +- (id)initWithPath:(NSString *)file + categoryPath:(NSString *)categoryPath + projectEditor:(PCProjectEditor *)projectEditor; +- (id)initExternalEditor:(NSString *)editor + withPath:(NSString *)file + projectEditor:(PCProjectEditor *)aProjectEditor; +- (void)dealloc; +- (void)show; + +- (void)setWindowed:(BOOL)yn; +- (BOOL)isWindowed; + +// =========================================================================== +// ==== Accessor methods +// =========================================================================== +- (PCProjectEditor *)projectEditor; +- (NSWindow *)editorWindow; +- (PCEditorView *)editorView; +- (NSView *)componentView; +- (NSString *)path; +- (void)setPath:(NSString *)path; +- (NSString *)categoryPath; +- (BOOL)isEdited; +- (void)setIsEdited:(BOOL)yn; + +// =========================================================================== +// ==== Object managment +// =========================================================================== +- (BOOL)saveFileIfNeeded; +- (BOOL)saveFile; +- (BOOL)saveFileTo:(NSString *)path; +- (BOOL)revertFileToSaved; +- (BOOL)closeFile:(id)sender save:(BOOL)save; + +- (BOOL)editorShouldClose; + +// =========================================================================== +// ==== Window delegate +// =========================================================================== +- (BOOL)windowShouldClose:(id)sender; +- (void)windowDidBecomeKey:(NSNotification *)aNotification; +- (void)windowDidResignKey:(NSNotification *)aNotification; + +// =========================================================================== +// ==== TextView (_intEditorView, _extEditorView) delegate +// =========================================================================== +- (void)textDidChange:(NSNotification *)aNotification; +- (BOOL)becomeFirstResponder; +- (BOOL)resignFirstResponder; + +@end + +@interface PCEditor (UInterface) + +- (void)_createWindow; +- (void)_createInternalView; +- (PCEditorView *)_createEditorViewWithFrame:(NSRect)fr; + +@end + +/*@interface NSObject (PCEditorDelegate) + +- (void)editorDidClose:(id)sender; +- (void)setBrowserPath:(NSString *)file category:(NSString *)category; + +@end*/ + +#endif // _PCEDITOR_H_ + diff --git a/Library/PCEditor.m b/Library/PCEditor.m new file mode 100644 index 0000000..730838e --- /dev/null +++ b/Library/PCEditor.m @@ -0,0 +1,564 @@ +/* + * PCEditor.m created by probert on 2002-01-29 20:37:27 +0000 + * + * Project ProjectCenter + * + * Created with ProjectCenter - http://www.gnustep.org + * + * $Id$ + */ + +#include "PCDefines.h" +#include "PCProjectEditor.h" +#include "PCEditor.h" +#include "PCEditorView.h" +#include "ProjectComponent.h" + +#include "PCLogController.h" + +@implementation PCEditor (UInterface) + +- (void)_createWindow +{ + unsigned int style; + NSRect rect; + float windowWidth; + + PCLogInfo(self, @"[_createWindow]"); + + style = NSTitledWindowMask + | NSClosableWindowMask + | NSMiniaturizableWindowMask + | NSResizableWindowMask; + + windowWidth = [[NSFont userFixedPitchFontOfSize:0.0] widthOfString:@"A"]; + windowWidth *= 80; + windowWidth += 35+80; + rect = NSMakeRect(100,100,windowWidth,320); + + _window = [[NSWindow alloc] initWithContentRect:rect + styleMask:style + backing:NSBackingStoreBuffered + defer:YES]; + [_window setReleasedWhenClosed:YES]; + [_window setMinSize:NSMakeSize(512,320)]; + [_window setDelegate:self]; + rect = [[_window contentView] frame]; + + // Scroll view + _extScrollView = [[NSScrollView alloc] initWithFrame:rect]; + [_extScrollView setHasHorizontalScroller:NO]; + [_extScrollView setHasVerticalScroller:YES]; + [_extScrollView setAutoresizingMask: + (NSViewWidthSizable|NSViewHeightSizable)]; + rect = [[_extScrollView contentView] frame]; + + // Editor view + _extEditorView = [self _createEditorViewWithFrame:rect]; + + // Include editor view + [_extScrollView setDocumentView:_extEditorView]; + [_extEditorView setNeedsDisplay:YES]; + RELEASE(_extEditorView); + + // Include scroll view + [_window setContentView:_extScrollView]; + [_window makeFirstResponder:_extEditorView]; + RELEASE(_extScrollView); +} + +- (void)_createInternalView +{ + NSRect rect = NSMakeRect(0,0,512,320); + + // Scroll view + _intScrollView = [[NSScrollView alloc] initWithFrame:rect]; + [_intScrollView setHasHorizontalScroller:NO]; + [_intScrollView setHasVerticalScroller:YES]; + [_intScrollView setBorderType:NSBezelBorder]; + [_intScrollView setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)]; + rect = [[_intScrollView contentView] frame]; + + // Text view + _intEditorView = [self _createEditorViewWithFrame:rect]; + + /* + * Setting up ext view / scroll view / window + */ + [_intScrollView setDocumentView:_intEditorView]; + [_intEditorView setNeedsDisplay:YES]; + RELEASE(_intEditorView); +} + +- (PCEditorView *)_createEditorViewWithFrame:(NSRect)fr +{ + PCEditorView *ev; + NSTextContainer *tc; + NSLayoutManager *lm; + + /* + * setting up the objects needed to manage the view but using the + * shared textStorage. + */ + + lm = [[NSLayoutManager alloc] init]; + tc = [[NSTextContainer alloc] initWithContainerSize:fr.size]; + [lm addTextContainer:tc]; + RELEASE(tc); + + [_storage addLayoutManager:lm]; + RELEASE(lm); + + ev = [[PCEditorView alloc] initWithFrame:fr textContainer:tc]; + [ev setEditor:self]; + + [ev setMinSize:NSMakeSize( 0, 0)]; + [ev setMaxSize:NSMakeSize(1e7, 1e7)]; + [ev setRichText:YES]; + [ev setEditable:YES]; + [ev setVerticallyResizable:YES]; + [ev setHorizontallyResizable:NO]; + [ev setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; + [ev setTextContainerInset:NSMakeSize( 5, 5)]; + [[ev textContainer] setWidthTracksTextView:YES]; + + [[ev textContainer] setContainerSize:NSMakeSize(fr.size.width, 1e7)]; + + return AUTORELEASE(ev); +} + +@end + +@implementation PCEditor + +// =========================================================================== +// ==== Initialization +// =========================================================================== + +- (id)initWithPath:(NSString *)file + categoryPath:(NSString *)categoryPath + projectEditor:(PCProjectEditor *)aProjectEditor +{ + if ((self = [super init])) + { + NSString *t; + NSAttributedString *as; + NSDictionary *at; + NSFont *ft; + + projectEditor = aProjectEditor; + _isEdited = NO; + _isWindowed = NO; + _window = nil; + _path = [file copy]; + _categoryPath = [categoryPath copy]; + + ft = [NSFont userFixedPitchFontOfSize:0.0]; + at = [NSDictionary dictionaryWithObject:ft forKey:NSFontAttributeName]; + t = [NSString stringWithContentsOfFile:file]; + as = [[NSAttributedString alloc] initWithString:t attributes:at]; + + _storage = [[NSTextStorage alloc] init]; + [_storage setAttributedString:as]; + RELEASE(as); + + if (categoryPath) // category == nil if we're non project editor + { + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + + if (![[ud objectForKey:SeparateEditor] isEqualToString:@"YES"]) + { + [self _createInternalView]; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(textDidChange:) + name:NSTextDidChangeNotification + object:_intEditorView]; + } + } + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(textDidChange:) + name:NSTextDidChangeNotification + object:_extEditorView]; + + // Inform about file opening + [[NSNotificationCenter defaultCenter] + postNotificationName:PCEditorDidOpenNotification + object:self]; + } + + return self; +} + +- (id)initExternalEditor:(NSString *)editor + withPath:(NSString *)file + projectEditor:(PCProjectEditor *)aProjectEditor +{ + NSTask *editorTask = nil; + NSArray *ea = nil; + NSMutableArray *args = nil; + NSString *app = nil; + + if (!(self = [super init])) + { + return nil; + } + + projectEditor = aProjectEditor; + _extScrollView = nil; + _extEditorView = nil; + _intScrollView = nil; + _intEditorView = nil; + _storage = nil; + _path = [file copy]; + _categoryPath = nil; + _window = nil; + + _isEdited = NO; + _isWindowed = NO; + _isExternal = YES; + + // Task + ea = [editor componentsSeparatedByString:@" "]; + args = [NSMutableArray arrayWithArray:ea]; + app = [ea objectAtIndex:0]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector (externalEditorDidClose:) + name:NSTaskDidTerminateNotification + object:nil]; + + editorTask = [[NSTask alloc] init]; + [editorTask setLaunchPath:app]; + [args removeObjectAtIndex:0]; + [args addObject:file]; + [editorTask setArguments:args]; + + [editorTask launch]; +// AUTORELEASE(editorTask); + + // Inform about file opening + [[NSNotificationCenter defaultCenter] + postNotificationName:PCEditorDidOpenNotification + object:self]; + + return self; +} + +- (void)externalEditorDidClose:(NSNotification *)aNotif +{ + NSString *path = [[[aNotif object] arguments] lastObject]; + + if (![path isEqualToString:_path]) + { + PCLogError(self, @"external editor task terminated"); + return; + } + + PCLogStatus(self, @"Our Editor task terminated"); + + // Inform about closing + [[NSNotificationCenter defaultCenter] + postNotificationName:PCEditorDidCloseNotification + object:self]; +} + +- (void)dealloc +{ + NSLog(@"PCEditor: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + // _window is setReleasedWhenClosed:YES + RELEASE(_path); + RELEASE(_categoryPath); + RELEASE(_intScrollView); + + [super dealloc]; +} + +- (void)show +{ + if (_isWindowed) + { + [_window makeKeyAndOrderFront:nil]; + } +} + +- (void)setWindowed:(BOOL)yn +{ + if ( (yn && _isWindowed) || (!yn && !_isWindowed) ) + { + return; + } + + if (yn && !_isWindowed) + { + [self _createWindow]; + [_window setTitle:[NSString stringWithFormat: @"%@", + [_path stringByAbbreviatingWithTildeInPath]]]; + } + else if (!yn && _isWindowed) + { + [_window close]; + } + + _isWindowed = yn; +} + +- (BOOL)isWindowed +{ + return _isWindowed; +} + +// =========================================================================== +// ==== Accessor methods +// =========================================================================== + +- (PCProjectEditor *)projectEditor +{ + return projectEditor; +} + +- (NSWindow *)editorWindow +{ + return _window; +} + +- (PCEditorView *)editorView +{ + return _intEditorView; +} + +- (NSView *)componentView +{ + return _intScrollView; +} + +- (NSString *)path +{ + return _path; +} + +- (void)setPath:(NSString *)path +{ + [_path autorelease]; + _path = [path copy]; +} + +- (NSString *)categoryPath +{ + return _categoryPath; +} + +- (BOOL)isEdited +{ + return _isEdited; +} + +- (void)setIsEdited:(BOOL)yn +{ + if (_window) + { + [_window setDocumentEdited:yn]; + } + _isEdited = yn; +} + +// =========================================================================== +// ==== Object managment +// =========================================================================== + +- (BOOL)saveFileIfNeeded +{ + if ((_isEdited)) + { + return [self saveFile]; + } + + return YES; +} + +- (BOOL)saveFile +{ + [self setIsEdited:NO]; + + // Operate on the text storage! + return [[_storage string] writeToFile:_path atomically:YES]; +} + +- (BOOL)saveFileTo:(NSString *)path +{ + // Operate on the text storage! + return [[_storage string] writeToFile:path atomically:YES]; +} + +- (BOOL)revertFileToSaved +{ + NSString *text = [NSString stringWithContentsOfFile:_path]; + NSAttributedString *as = nil; + NSDictionary *at = nil; + NSFont *ft = nil; + + // This is temporary + ft = [NSFont userFixedPitchFontOfSize:0.0]; + at = [NSDictionary dictionaryWithObject:ft forKey:NSFontAttributeName]; + as = [[NSAttributedString alloc] initWithString:text attributes:at]; + + [self setIsEdited:NO]; + + // Operate on the text storage! + [_storage setAttributedString:as]; + RELEASE(as); + + [_intEditorView setNeedsDisplay:YES]; + [_extEditorView setNeedsDisplay:YES]; + + return YES; +} + +- (BOOL)closeFile:(id)sender save:(BOOL)save +{ + if ((save == NO) || [self editorShouldClose]) + { + // Close window first if visible + if (_isWindowed && [_window isVisible] && (sender != _window)) + { + [_window close]; + } + + // Inform about closing + [[NSNotificationCenter defaultCenter] + postNotificationName:PCEditorDidCloseNotification + object:self]; + + return YES; + } + + return NO; +} + +- (BOOL)editorShouldClose +{ + if (_isEdited) + { + BOOL ret; + + if (_isWindowed && [_window isVisible]) + { + [_window makeKeyAndOrderFront:self]; + } + + ret = NSRunAlertPanel(@"Close File", + @"File %@ has been modified", + @"Save and Close", @"Don't save", @"Cancel", + [_path lastPathComponent]); + + if (ret == YES) + { + if ([self saveFile] == NO) + { + NSRunAlertPanel(@"Alert", + @"Error when saving file '%@'!", + @"OK", nil, nil, [_path lastPathComponent]); + return NO; + } + else + { + return YES; + } + } + else if (ret == NO) // Close but don't save + { + return YES; + } + else // Cancel closing + { + return NO; + } + + [self setIsEdited:NO]; + } + + return YES; +} + +// =========================================================================== +// ==== Window delegate +// =========================================================================== + +- (BOOL)windowShouldClose:(id)sender +{ + if ([sender isEqual:_window]) + { + if (_intScrollView) + { + // Just close if this file also displayed in int view + _isWindowed = NO; + return YES; + } + else + { + return [self closeFile:_window save:YES]; + } + } + + return NO; +} + +- (void)windowDidBecomeKey:(NSNotification *)aNotification +{ + if ([[aNotification object] isEqual:_window] && [_window isVisible]) + { + [_window makeFirstResponder:_extEditorView]; + } +} + +- (void)windowDidResignKey:(NSNotification *)aNotification +{ + if ([[aNotification object] isEqual:_window] && [_window isVisible]) + { + [_window makeFirstResponder:_window]; + } +} + +// =========================================================================== +// ==== TextView (_intEditorView, _extEditorView) delegate +// =========================================================================== + +- (void)textDidChange:(NSNotification *)aNotification +{ + id object = [aNotification object]; + + + if ([object isKindOfClass:[PCEditorView class]] + && (object == _intEditorView || object == _extEditorView)) + { + [self setIsEdited:YES]; + } +} + +- (BOOL)becomeFirstResponder +{ + NSLog(@"PCEditor: becomeFirstResponder"); + [[NSNotificationCenter defaultCenter] + postNotificationName:PCEditorDidBecomeActiveNotification + object:self]; + + return YES; +} + +- (BOOL)resignFirstResponder +{ + [[NSNotificationCenter defaultCenter] + postNotificationName:PCEditorDidResignActiveNotification + object:self]; + + return YES; +} + +@end + diff --git a/Library/PCEditorView+Highlighting.h b/Library/PCEditorView+Highlighting.h new file mode 100644 index 0000000..5832a83 --- /dev/null +++ b/Library/PCEditorView+Highlighting.h @@ -0,0 +1,44 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCEDITORVIEW_HIGHLIGHTING_H +#define _PCEDITORVIEW_HIGHLIGHTING_H + +#include + +@class PCEditorView; + +@interface PCEditorView (Highlighting) + +- (void)colouriseKeyword:(NSString *)keyword; +- (void)colouriseKeywords:(NSArray *)keywords; + +- (void)colouriseStrings; +- (void)colouriseCharStrings; +- (void)colouriseComments; +- (void)colouriseCPPComments; + +@end + +#endif diff --git a/PCLib/PCEditorView+Highlighting.m b/Library/PCEditorView+Highlighting.m similarity index 99% rename from PCLib/PCEditorView+Highlighting.m rename to Library/PCEditorView+Highlighting.m index 01ee4d6..2a3f377 100644 --- a/PCLib/PCEditorView+Highlighting.m +++ b/Library/PCEditorView+Highlighting.m @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCEditorView.h" diff --git a/PCLib/PCEditorView.h b/Library/PCEditorView.h similarity index 96% rename from PCLib/PCEditorView.h rename to Library/PCEditorView.h index f9df737..e0636d6 100644 --- a/PCLib/PCEditorView.h +++ b/Library/PCEditorView.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCEDITORVIEW_H @@ -40,12 +38,10 @@ typedef enum _PCTabFlags { @interface PCEditorView : NSTextView { + PCEditor *editor; NSScanner *scanner; - - @private - NSRange range; - NSArray *_keywords; - PCEditor *editor; + NSRange range; + NSArray *_keywords; #ifndef GNUSTEP_BASE_VERSION id _textStorage; diff --git a/PCLib/PCEditorView.m b/Library/PCEditorView.m similarity index 73% rename from PCLib/PCEditorView.m rename to Library/PCEditorView.m index 55e8a9c..47edaab 100644 --- a/PCLib/PCEditorView.m +++ b/Library/PCEditorView.m @@ -20,25 +20,36 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#include "PCEditorView.h" #include "PCEditor.h" +#include "PCEditorView.h" #include "PCEditorView+Highlighting.h" -#include "PCEditorController.h" @implementation PCEditorView static BOOL shouldHighlight = NO; static int _tabFlags = PCTab4Sp; -- (BOOL) becomeFirstResponder +- (BOOL)becomeFirstResponder { return [editor becomeFirstResponder]; } +- (BOOL)resignFirstResponder +{ + return [editor resignFirstResponder]; +} + +- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent +{ + return YES; +} + +//============================================================================= +// ==== Class methods +//============================================================================= + + (void)setTabBehaviour:(int)tabFlags { _tabFlags = tabFlags; @@ -59,6 +70,10 @@ static int _tabFlags = PCTab4Sp; return shouldHighlight; } +//============================================================================= +// ==== Init +//============================================================================= + - (id)initWithFrame:(NSRect)frameRect textContainer:(NSTextContainer*)tc { if ((self = [super initWithFrame:frameRect textContainer:tc])) @@ -94,55 +109,59 @@ static int _tabFlags = PCTab4Sp; - (void)dealloc { if (scanner) - { - [scanner release]; - } + { + [scanner release]; + } + [_keywords release]; [super dealloc]; } +//============================================================================= +// ==== Accessor methods +//============================================================================= + - (void)setEditor:(PCEditor *)anEditor { - editor = anEditor; + editor = anEditor; } - (void)setString:(NSString *)aString { - [scanner autorelease]; - scanner = [[NSScanner alloc] initWithString:aString]; + [scanner autorelease]; + scanner = [[NSScanner alloc] initWithString:aString]; - [super setString:aString]; + [super setString:aString]; - if( shouldHighlight ) + if( shouldHighlight ) { - [self highlightText]; + [self highlightText]; } } -- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent -{ - return YES; -} +//============================================================================= +// ==== Text handling +//============================================================================= - (void)insertText:(id)aString { - NSRange txtRange = NSMakeRange(0, [[self textStorage] length]); + NSRange txtRange = NSMakeRange(0, [[self textStorage] length]); - [super insertText:aString]; + [super insertText:aString]; - if( shouldHighlight ) + if( shouldHighlight ) { - [[self textStorage] invalidateAttributesInRange:txtRange]; - [self highlightTextInRange:txtRange]; + [[self textStorage] invalidateAttributesInRange:txtRange]; + [self highlightTextInRange:txtRange]; } } - (void)highlightText { - NSRange txtRange = NSMakeRange(0, [[self textStorage] length]); + NSRange txtRange = NSMakeRange(0, [[self textStorage] length]); - [self highlightTextInRange:txtRange]; + [self highlightTextInRange:txtRange]; } - (void)highlightTextInRange:(NSRange)txtRange diff --git a/PCBaseFileTypes/PCBaseFileType.h b/Library/PCFileCreator.h similarity index 64% rename from PCBaseFileTypes/PCBaseFileType.h rename to Library/PCFileCreator.h index c8c6117..3de68a4 100644 --- a/PCBaseFileTypes/PCBaseFileType.h +++ b/Library/PCFileCreator.h @@ -20,19 +20,23 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#ifndef _PCBASEFILETYPE_H -#define _PCBASEFILETYPE_H +#ifndef _PCFileCreator_h +#define _PCFileCreator_h #include -#include + +#define ProtocolFile @"Objective-C Protocol" +#define ObjCClass @"Objective-C Class" +#define ObjCHeader @"Objective-C Header" +#define CFile @"C File" +#define CHeader @"C Header" +#define GSMarkupFile @"GNUstep Markup" @class PCProject; -@interface PCBaseFileType : NSObject +@interface PCFileCreator : NSObject { NSMutableString *file; } @@ -42,10 +46,13 @@ - (NSString *)name; - (NSDictionary *)creatorDictionary; -- (NSDictionary *)createFileOfType:(NSString *)type path:(NSString *)path project:(PCProject *)aProject; - // The implementation needs some heavy cleanup! +// The implementation needs some heavy cleanup! +- (NSDictionary *)createFileOfType:(NSString *)type + path:(NSString *)path + project:(PCProject *)aProject; -- (void)replaceTagsInFileAtPath:(NSString *)newFile withProject:(PCProject *)aProject type:(NSString *)aType; +- (void)replaceTagsInFileAtPath:(NSString *)newFile + withProject:(PCProject *)aProject; @end diff --git a/Library/PCFileCreator.m b/Library/PCFileCreator.m new file mode 100644 index 0000000..4c18bff --- /dev/null +++ b/Library/PCFileCreator.m @@ -0,0 +1,308 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCDefines.h" +#include "PCFileCreator.h" +#include "PCProject.h" + +#include "PCLogController.h" + +@implementation PCFileCreator + +static PCFileCreator *_creator = nil; +static NSString *_name = @"FileCreator"; +static NSDictionary *dict = nil; + ++ (id)sharedCreator +{ + if (!_creator) + { + NSDictionary *classDict; + NSDictionary *headerDict; + NSDictionary *ccDict; + NSDictionary *chDict; + NSDictionary *protocolDict; + NSDictionary *gsmarkupDict; + NSString *descr; + + _creator = [[[self class] alloc] init]; + + // Setting up the dictionary needed for registration! + descr = [NSString stringWithString:@"Generic Objective-C class.\n\nThis is a plain subclass of NSObject which includes only Foundation.h."]; + classDict = [NSDictionary dictionaryWithObjectsAndKeys: + _creator,@"Creator", + PCClasses,@"ProjectKey", + descr,@"TypeDescription", + nil]; + + descr = [NSString stringWithString:@"Generic Objective-C header.\n\nThis is a plain interface subclassing NSObject. The file includes Foundation.h"]; + headerDict =[NSDictionary dictionaryWithObjectsAndKeys: + _creator,@"Creator", + PCHeaders,@"ProjectKey", + descr,@"TypeDescription", + nil]; + + descr = [NSString stringWithString:@"Generic ANSI-C implementation file.\n\nThis file contains no Objective-C dependency in any form."]; + ccDict = [NSDictionary dictionaryWithObjectsAndKeys: + _creator,@"Creator", + PCOtherSources,@"ProjectKey", + descr,@"TypeDescription", + nil]; + + descr = [NSString stringWithString:@"Generic ANSI-C header.\n\nThis file contains no Objective-C dependency in any form."]; + chDict = [NSDictionary dictionaryWithObjectsAndKeys: + _creator,@"Creator", + PCHeaders,@"ProjectKey", + descr,@"TypeDescription", + nil]; + + descr = [NSString stringWithString:@"Generic Objective-C protocol.\n\nThis is common Objective-C protocol, comparable i.e. to a Java interface."]; + protocolDict = [NSDictionary dictionaryWithObjectsAndKeys: + _creator,@"Creator", + PCHeaders,@"ProjectKey", + descr,@"TypeDescription", + nil]; + + descr = [NSString stringWithString:@"Generic GSMarkup File.\n\nThis is the interface description of GNUstep Renaissance."]; + gsmarkupDict =[NSDictionary dictionaryWithObjectsAndKeys: + _creator,@"Creator", + PCGSMarkupFiles,@"ProjectKey", + descr,@"TypeDescription", + nil]; + + + dict = [[NSDictionary alloc] initWithObjectsAndKeys: + ccDict,CFile, + chDict,CHeader, + protocolDict,ProtocolFile, + headerDict,ObjCHeader, + classDict,ObjCClass, + gsmarkupDict,GSMarkupFile, + nil]; + } + + return _creator; +} + +- (NSString *)name +{ + return _name; +} + +- (NSDictionary *)creatorDictionary +{ + return dict; +} + +- (NSDictionary *)createFileOfType:(NSString *)type + path:(NSString *)path + project:(PCProject *)aProject +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *_file; + NSString *newFile = nil; + NSMutableDictionary *files; + NSBundle *bundle; + + // A class and possibly a header + files = [NSMutableDictionary dictionaryWithCapacity:2]; + + PCLogStatus(self, @"create %@ at %@", type, path); + + bundle = [NSBundle bundleForClass:[self class]]; + newFile = [path copy]; + + /* + * Objective-C Class + */ + if ([type isEqualToString:ObjCClass]) + { + _file = [bundle pathForResource:@"class" ofType:@"template"]; + if ([[path pathExtension] isEqual: @"m"] == NO) + { + newFile = [path stringByAppendingPathExtension:@"m"]; + } + [fm copyPath:_file toPath:newFile handler:nil]; + [files setObject:ObjCClass forKey:newFile]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject]; + + // Header must be created as well! + newFile = [path stringByAppendingPathExtension:@"h"]; + _file = [bundle pathForResource:@"header" ofType:@"template"]; + [fm copyPath:_file toPath:newFile handler:nil]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject]; + [files setObject:ObjCHeader forKey:newFile]; + } + /* + * Objective-C Header + */ + else if ([type isEqualToString:ObjCHeader]) + { + _file = [bundle pathForResource:@"header" ofType:@"template"]; + if ([[path pathExtension] isEqual: @"h"] == NO) + { + newFile = [path stringByAppendingPathExtension:@"h"]; + } + [fm copyPath:_file toPath:newFile handler:nil]; + [self replaceTagsInFileAtPath:newFile withProject:aProject]; + [files setObject:ObjCHeader forKey:newFile]; + } + + /* + * C File + */ + else if ([type isEqualToString:CFile]) + { + _file = [bundle pathForResource:@"cfile" ofType:@"template"]; + if ([[path pathExtension] isEqual: @"c"] == NO) + { + newFile = [path stringByAppendingPathExtension:@"c"]; + } + [fm copyPath:_file toPath:newFile handler:nil]; + [files setObject:CFile forKey:newFile]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject]; + + // Header should be created as well. + newFile = [path stringByAppendingPathExtension:@"h"]; + _file = [bundle pathForResource:@"cheader" ofType:@"template"]; + [fm copyPath:_file toPath:newFile handler:nil]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject]; + [files setObject:CHeader forKey:newFile]; + } + /* + * C Header + */ + else if ([type isEqualToString:CHeader]) + { + _file = [bundle pathForResource:@"cheader" ofType:@"template"]; + if ([[path pathExtension] isEqual: @"h"] == NO) + { + newFile = [path stringByAppendingPathExtension:@"h"]; + } + [fm copyPath:_file toPath:newFile handler:nil]; + [self replaceTagsInFileAtPath:newFile withProject:aProject]; + [files setObject:CHeader forKey:newFile]; + } + /* + * GSMarkup + */ + else if ([type isEqualToString:GSMarkupFile]) + { + _file = [bundle pathForResource:@"gsmarkup" ofType:@"template"]; + if ([[path pathExtension] isEqual: @"gsmarkup"] == NO) + { + newFile = [path stringByAppendingPathExtension:@"gsmarkup"]; + } + [fm copyPath:_file toPath:newFile handler:nil]; + [files setObject:GSMarkupFile forKey:newFile]; + } + /* + * Objective-C Protocol + */ + else if ([type isEqualToString:ProtocolFile]) + { + _file = [bundle pathForResource:@"protocol" ofType:@"template"]; + if ([[path pathExtension] isEqual: @"h"] == NO) + { + newFile = [path stringByAppendingPathExtension:@"h"]; + } + [fm copyPath:_file toPath:newFile handler:nil]; + [self replaceTagsInFileAtPath:newFile withProject:aProject]; + [files setObject:ProtocolFile forKey:newFile]; + } + /* + * Notify the browser! + */ + [[NSNotificationCenter defaultCenter] + postNotificationName:@"ProjectDictDidChangeNotification" + object:self]; + + return files; +} + +- (void)replaceTagsInFileAtPath:(NSString *)newFile + withProject:(PCProject *)aProject +{ + NSString *projectName = [aProject projectName]; + NSString *date = [[NSCalendarDate calendarDate] description]; + int year = [[NSCalendarDate calendarDate] yearOfCommonEra]; + NSString *aFile = [newFile lastPathComponent]; + NSString *UCfn = [[aFile stringByDeletingPathExtension] uppercaseString]; + NSString *fn = [aFile stringByDeletingPathExtension]; + NSRange subRange; + + file = [[NSMutableString stringWithContentsOfFile:newFile] retain]; + + while ((subRange = [file rangeOfString:@"$FULLFILENAME$"]).length) + { + [file replaceCharactersInRange:subRange withString:aFile]; + } + + while ((subRange = [file rangeOfString:@"$FILENAME$"]).length) + { + [file replaceCharactersInRange:subRange withString:fn]; + } + + while ((subRange = [file rangeOfString:@"$UCFILENAME$"]).length) + { + [file replaceCharactersInRange:subRange withString:UCfn]; + } + + while ((subRange = [file rangeOfString:@"$USERNAME$"]).length) + { + [file replaceCharactersInRange:subRange withString:NSUserName()]; + } + + while ((subRange = [file rangeOfString:@"$FULLUSERNAME$"]).length) + { + [file replaceCharactersInRange:subRange withString:NSFullUserName()]; + } + + while ((subRange = [file rangeOfString:@"$PROJECTNAME$"]).length) + { + [file replaceCharactersInRange:subRange withString:projectName]; + } + + while ((subRange = [file rangeOfString:@"$DATE$"]).length) + { + [file replaceCharactersInRange:subRange withString:date]; + } + + while ((subRange = [file rangeOfString:@"$YEAR$"]).length) + { + [file replaceCharactersInRange:subRange + withString:[[NSNumber numberWithInt:year] stringValue]]; + } + + [file writeToFile:newFile atomically:YES]; + [file autorelease]; +} + +@end + + diff --git a/PCLib/PCFileManager.h b/Library/PCFileManager.h similarity index 50% rename from PCLib/PCFileManager.h rename to Library/PCFileManager.h index 0a9898d..69b7c66 100644 --- a/PCLib/PCFileManager.h +++ b/Library/PCFileManager.h @@ -20,26 +20,36 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#ifndef _PCFILEMANAGER_H -#define _PCFILEMANAGER_H +#ifndef _PCFileManager_h +#define _PCFileManager_h #include +#include + +@class PCProject; +@class PCProjectManager; @interface PCFileManager : NSObject { - id newFileWindow; - id fileTypePopup; - id newFileName; - id descrView; + PCProjectManager *projectManager; + id delegate; // PCProjectManager - id delegate; // PCProjectManager + NSDictionary *creators; - NSMutableDictionary *creators; - NSMutableDictionary *typeDescr; + // New File in Project panel + IBOutlet NSPanel *newFilePanel; + IBOutlet NSImageView *nfImage; + IBOutlet NSPopUpButton *nfTypePB; + IBOutlet NSTextView *nfDescriptionTV; + IBOutlet NSTextField *nfNameField; + IBOutlet NSButton *nfCancleButton; + IBOutlet NSButton *nfCreateButton; + + NSOpenPanel *addFilesPanel; + NSBox *fileTypeAccessaryView; + NSPopUpButton *fileTypePopup; } //============================================================================== @@ -52,46 +62,43 @@ // ==== Init and free //============================================================================== -- (id)init; +- (id)initWithProjectManager:(PCProjectManager *)aProjectManager; - (void)dealloc; -- (void)awakeFromNib; - -// =========================================================================== -// ==== Delegate -// =========================================================================== - -- (id)delegate; -- (void)setDelegate:(id)aDelegate; - // =========================================================================== // ==== File stuff // =========================================================================== -- (void)showAddFileWindow; +// Shows NSOpenPanel and return selected files if any +- (NSMutableArray *)filesForOpenOfType:(NSArray *)types + multiple:(BOOL)yn + title:(NSString *)title + accView:(NSView *)accessoryView; + +- (NSString *)fileForSaveOfType:(NSArray *)types + title:(NSString *)title + accView:(NSView *)accessoryView; -- (void)showNewFileWindow; -- (void)buttonsPressed:(id)sender; -- (void)popupChanged:(id)sender; +// Return NO if coping of any file failed +- (BOOL)copyFiles:(NSArray *)files intoDirectory:(NSString *)directory; + +// Return NO if removing of any file failed +- (BOOL)removeFiles:(NSArray *)files fromDirectory:(NSString *)directory; - (void)createFile; -- (void)registerCreatorsWithObjectsAndKeys:(NSDictionary *)dict; - @end -@interface NSObject (FileManagerDelegates) +@interface PCFileManager (UInterface) -- (NSString *)fileManager:(id)sender willCreateFile:(NSString *)aFile withKey:(NSString *)key; - // Returns the correct, full path - or nil! +- (void)showNewFilePanel; +- (void)closeNewFilePanel:(id)sender; +- (void)createFile:(id)sender; +- (void)newFilePopupChanged:(id)sender; -- (void)fileManager:(id)sender didCreateFile:(NSString *)aFile withKey:(NSString *)key; - -- (id)fileManagerWillAddFiles:(id)sender; - // Is invoked to get the currently active project! - -- (BOOL)fileManager:(id)sender shouldAddFile:(NSString *)file forKey:(NSString *)key; -- (void)fileManager:(id)sender didAddFile:(NSString *)file forKey:(NSString *)key; +- (void)_createAddFilesPanel; +- (NSMutableArray *)filesForAdd; +- (void)filesForAddPopupClicked:(id)sender; @end diff --git a/Library/PCFileManager.m b/Library/PCFileManager.m new file mode 100644 index 0000000..794d61a --- /dev/null +++ b/Library/PCFileManager.m @@ -0,0 +1,489 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCDefines.h" +#include "PCFileManager.h" +#include "PCFileCreator.h" +#include "PCProjectManager.h" +#include "PCProject.h" +#include "PCProjectBrowser.h" +#include "PCServer.h" + +#include "PCLogController.h" + +@implementation PCFileManager + +// =========================================================================== +// ==== Class methods +// =========================================================================== + +static PCFileManager *_mgr = nil; + ++ (PCFileManager *)fileManager +{ + if (!_mgr) + { + _mgr = [[PCFileManager alloc] init]; + } + + return _mgr; +} + +// =========================================================================== +// ==== Init and free +// =========================================================================== + +- (id)initWithProjectManager:(PCProjectManager *)aProjectManager +{ + if ((self = [super init])) + { + projectManager = aProjectManager; + creators = [[PCFileCreator sharedCreator] creatorDictionary]; + RETAIN(creators); + } + return self; +} + +- (void)dealloc +{ + RELEASE(creators); + RELEASE(newFilePanel); + + [super dealloc]; +} + +// =========================================================================== +// ==== File stuff +// =========================================================================== + +- (NSMutableArray *)filesForOpenOfType:(NSArray *)types + multiple:(BOOL)yn + title:(NSString *)title + accView:(NSView *)accessoryView +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + NSString *lastOpenDir = [ud objectForKey:@"LastOpenDirectory"]; + NSOpenPanel *openPanel = nil; + int retval; + + openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:yn]; + [openPanel setCanChooseFiles:YES]; + [openPanel setCanChooseDirectories:NO]; +// [openPanel setDelegate:self]; + [openPanel setTitle:title]; + [openPanel setAccessoryView:accessoryView]; + + if (!lastOpenDir) + { + lastOpenDir = NSHomeDirectory(); + } + + retval = [openPanel runModalForDirectory:lastOpenDir file:nil types:types]; + if (retval == NSOKButton) + { + [ud setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + return [[[openPanel filenames] mutableCopy] autorelease]; + } + + return nil; +} + +- (NSString *)fileForSaveOfType:(NSArray *)types + title:(NSString *)title + accView:(NSView *)accessoryView +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + NSString *lastOpenDir = [ud objectForKey:@"LastOpenDirectory"]; + NSSavePanel *savePanel = nil; + int retval; + + savePanel = [NSSavePanel savePanel]; + [savePanel setDelegate:self]; + [savePanel setTitle:title]; +// [savePanel setAccessoryView:nil]; + [savePanel setAccessoryView:accessoryView]; + + if (!lastOpenDir) + { + lastOpenDir = NSHomeDirectory(); + } + + retval = [savePanel runModalForDirectory:lastOpenDir file:nil]; + if (retval == NSOKButton) + { + [ud setObject:[savePanel directory] forKey:@"LastOpenDirectory"]; + return [[[savePanel filename] mutableCopy] autorelease]; + } + + return nil; +} + +- (BOOL)copyFiles:(NSArray *)files intoDirectory:(NSString *)directory +{ + NSEnumerator *enumerator; + NSString *file = nil; + NSString *fileName = nil; + NSString *path = nil; + + if (!files) + { + return NO; + } + + enumerator = [files objectEnumerator]; + while ((file = [enumerator nextObject])) + { + NSFileManager *fm = [NSFileManager defaultManager]; + + fileName = [file lastPathComponent]; + path = [directory stringByAppendingPathComponent:fileName]; + + if (![fm fileExistsAtPath:path]) + { + if (![fm copyPath:file toPath:path handler:nil]) + { + return NO; + } + } + } + + return YES; +} + +- (BOOL)removeFiles:(NSArray *)files fromDirectory:(NSString *)directory +{ + NSEnumerator *filesEnum = nil; + NSString *file = nil; + NSString *path = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + if (!files) + { + return NO; + } + + filesEnum = [files objectEnumerator]; + while ((file = [filesEnum nextObject])) + { + path = [directory stringByAppendingPathComponent:file]; + if (![fm removeFileAtPath:path handler:nil]) + { + return NO; + } + } + return YES; +} + +- (void)createFile +{ + NSString *path = nil; + NSString *fileName = [nfNameField stringValue]; + NSString *fileType = [nfTypePB titleOfSelectedItem]; + NSString *key = [[creators objectForKey:fileType] objectForKey:@"ProjectKey"]; + + PCLogInfo(self, @"[createFile] %@", fileName); + + path = [projectManager fileManager:self + willCreateFile:fileName + withKey:key]; + + PCLogInfo(self, @"creating file at %@", path); + + // Create file + if (path) + { + NSDictionary *newFiles = nil;; + PCFileCreator *creator = nil; + PCProject *project = [projectManager activeProject]; + NSEnumerator *enumerator; + NSString *aFile; + + creator = [[creators objectForKey:fileType] objectForKey:@"Creator"]; + if (!creator) + { + NSRunAlertPanel(@"Attention!", + @"Could not create %@. The creator is missing!", + @"OK",nil,nil,fileName); + return; + } + + // Do it finally... + newFiles = [creator createFileOfType:fileType path:path project:project]; + + // Key: name of file + enumerator = [[newFiles allKeys] objectEnumerator]; + while ((aFile = [enumerator nextObject])) + { + NSString *theType = [newFiles objectForKey:aFile]; + NSString *theKey = [[creators objectForKey:theType] + objectForKey:@"ProjectKey"]; + + [projectManager fileManager:self didCreateFile:aFile withKey:theKey]; + } + } +} + +@end + +@implementation PCFileManager (UInterface) + +// -- "New File in Project" Panel +- (void)showNewFilePanel +{ + if (!newFilePanel) + { + if ([NSBundle loadNibNamed:@"NewFile" owner:self] == NO) + { + PCLogError(self, @"error loading NewFile NIB!"); + return; + } + [newFilePanel setFrameAutosaveName:@"NewFile"]; + if (![newFilePanel setFrameUsingName: @"NewFile"]) + { + [newFilePanel center]; + } + [newFilePanel center]; + [nfImage setImage:[NSApp applicationIconImage]]; + [nfTypePB setRefusesFirstResponder:YES]; + [nfTypePB removeAllItems]; + [nfTypePB addItemsWithTitles: + [[creators allKeys] + sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]]; + [nfTypePB selectItemAtIndex:0]; + [nfCancleButton setRefusesFirstResponder:YES]; + [nfCreateButton setRefusesFirstResponder:YES]; + } + + [self newFilePopupChanged:nfTypePB]; + + [newFilePanel makeKeyAndOrderFront:self]; + [nfNameField setStringValue:@""]; + [newFilePanel makeFirstResponder:nfNameField]; +} + +- (void)closeNewFilePanel:(id)sender +{ + [newFilePanel orderOut:self]; +} + +- (void)createFile:(id)sender +{ + [self createFile]; + [self closeNewFilePanel:self]; +} + +- (void)newFilePopupChanged:(id)sender +{ + NSString *type = [sender titleOfSelectedItem]; + + if (type) + { + [nfDescriptionTV setString: + [[creators objectForKey:type] objectForKey:@"TypeDescription"]]; + } +} + +- (void)controlTextDidChange:(NSNotification *)aNotif +{ + if ([aNotif object] != nfNameField) + { + return; + } + + // TODO: Add check for valid file names + if ([[nfNameField stringValue] length] > 0) + { + [nfCreateButton setEnabled:YES]; + } + else + { + [nfCreateButton setEnabled:NO]; + } +} + +// --- "Add Files..." panel +- (void)_createAddFilesPanel +{ + if (addFilesPanel == nil) + { + NSRect fr = NSMakeRect(20,30,160,21); + PCProject *project = [projectManager activeProject]; + + // File type popup + fileTypePopup = [[NSPopUpButton alloc] initWithFrame:fr pullsDown:NO]; + [fileTypePopup setAutoenablesItems:NO]; + [fileTypePopup setTarget:self]; + [fileTypePopup setAction:@selector(filesForAddPopupClicked:)]; + [fileTypePopup addItemsWithTitles:[project rootCategories]]; + [fileTypePopup selectItemAtIndex:0]; + + fileTypeAccessaryView = [[NSBox alloc] init]; + [fileTypeAccessaryView setTitle:@"File Types"]; + [fileTypeAccessaryView setTitlePosition:NSAtTop]; + [fileTypeAccessaryView setBorderType:NSGrooveBorder]; + [fileTypeAccessaryView addSubview:fileTypePopup]; + [fileTypeAccessaryView sizeToFit]; + [fileTypeAccessaryView setAutoresizingMask:NSViewMinXMargin + | NSViewMaxXMargin]; + RELEASE(fileTypePopup); + + // Panel + addFilesPanel = [NSOpenPanel openPanel]; + [addFilesPanel setAllowsMultipleSelection:YES]; + [addFilesPanel setCanChooseFiles:YES]; + [addFilesPanel setCanChooseDirectories:NO]; + [addFilesPanel setDelegate:self]; + [addFilesPanel setAccessoryView:fileTypeAccessaryView]; + } +} + +- (NSMutableArray *)filesForAdd +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + NSString *lastOpenDir = [ud objectForKey:@"LastOpenDirectory"]; + PCProject *project = [projectManager rootActiveProject]; + NSString *selectedCategory = nil; + int retval; + + [self _createAddFilesPanel]; + selectedCategory = [[project projectBrowser] nameOfSelectedCategory]; + if ([selectedCategory isEqualToString:@"Subprojects"]) + { + [addFilesPanel setCanChooseFiles:NO]; + [addFilesPanel setCanChooseDirectories:YES]; + } + [fileTypePopup selectItemWithTitle:selectedCategory]; + + [self filesForAddPopupClicked:self]; + + if (!lastOpenDir) + { + lastOpenDir = NSHomeDirectory(); + } + + retval = [addFilesPanel runModalForDirectory:lastOpenDir + file:nil + types:nil]; + if (retval == NSOKButton) + { + [ud setObject:[addFilesPanel directory] forKey:@"LastOpenDirectory"]; + return [[addFilesPanel filenames] mutableCopy]; + } + + return nil; +} + +- (void)filesForAddPopupClicked:(id)sender +{ + NSString *fileType = [fileTypePopup titleOfSelectedItem]; + + [addFilesPanel setTitle:[NSString stringWithFormat:@"Add %@",fileType]]; + + if ([fileType isEqualToString:@"Interfaces"]) + { + [addFilesPanel setCanChooseDirectories:YES]; + } + + [addFilesPanel display]; +} + +// ============================================================================ +// ==== NSOpenPanel and NSSavePanel delegate +// ============================================================================ + +// If file name already in project -- don't show it! +- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename +{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + PCProject *project = [projectManager activeProject]; + NSArray *fileTypes = nil; + NSString *fileType = nil; + NSString *categoryKey = nil; + BOOL isDir; + + if (sender != addFilesPanel) + { + // This is not "Add Files" panel (Open... or Save...) + return YES; + } + + // Directories must be shown + if ([fileManager fileExistsAtPath:filename isDirectory:&isDir] && isDir) + { + return YES; + } + + if (!(fileType = [fileTypePopup titleOfSelectedItem])) + { + PCLogWarning(self, @"Selected File type is nil!"); + return YES; + } + + categoryKey = [project keyForCategory:fileType]; + + fileTypes = [project fileTypesForCategoryKey:categoryKey]; + if (fileTypes == nil) + { + PCLogWarning(self, + @"Project file types is nil! Category: %@", categoryKey); + return YES; + } + + if (fileTypes && [fileTypes containsObject:[filename pathExtension]]) + { + NSString *filePath; + NSString *projectPath; + + filePath = [[filename stringByDeletingLastPathComponent] + stringByResolvingSymlinksInPath]; + projectPath = [[project projectPath] stringByResolvingSymlinksInPath]; + + if ([filePath isEqualToString:projectPath]) + { + return NO; + } + return YES; + } + + return NO; +} + +// Test if we should accept file name selected or entered +- (BOOL)panel:(id)sender isValidFilename:(NSString *)filename +{ + if ([[sender className] isEqualToString:@"NSOpenPanel"]) + { + ; + } + else if ([[sender className] isEqualToString:@"NSSavePanel"]) + { + ; + } + + return YES; +} + +@end + diff --git a/Library/PCLaunchPanel.h b/Library/PCLaunchPanel.h new file mode 100644 index 0000000..b2dfefc --- /dev/null +++ b/Library/PCLaunchPanel.h @@ -0,0 +1,44 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCLaunchPanel_h +#define _PCLaunchPanel_h + +#include + +@class PCProjectManager; + +@interface PCLaunchPanel : NSPanel +{ + PCProjectManager *projectManager; + PCProject *currentProject; + NSBox *contentBox; + NSBox *emptyBox; +} + +- (id)initWithProjectManager:(PCProjectManager *)aManager; + +@end + +#endif diff --git a/Library/PCLaunchPanel.m b/Library/PCLaunchPanel.m new file mode 100644 index 0000000..cbfb2ae --- /dev/null +++ b/Library/PCLaunchPanel.m @@ -0,0 +1,148 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCProjectManager.h" +#include "PCProject.h" +#include "PCProjectLauncher.h" +#include "PCLaunchPanel.h" + +#include "PCLogController.h" + +@implementation PCLaunchPanel + +- (id)initWithProjectManager:(PCProjectManager *)aManager +{ + PCProjectLauncher *projectLauncher = nil; + PCProject *activeProject = nil; + + projectManager = aManager; + activeProject = [projectManager rootActiveProject]; + projectLauncher = [activeProject projectLauncher]; + + projectLauncher = [[aManager activeProject] projectLauncher]; + + self = [super initWithContentRect: NSMakeRect (0, 300, 480, 322) + styleMask: (NSTitledWindowMask + | NSClosableWindowMask + | NSResizableWindowMask) + backing: NSBackingStoreRetained + defer: YES]; + [self setMinSize: NSMakeSize(440, 222)]; + [self setFrameAutosaveName: @"ProjectLauncher"]; + [self setReleasedWhenClosed: NO]; + [self setHidesOnDeactivate: NO]; + [self setTitle: [NSString stringWithFormat: + @"%@ - Launch", [activeProject projectName]]]; + + contentBox = [[NSBox alloc] init]; + [contentBox setContentViewMargins:NSMakeSize(8.0, 0.0)]; + [contentBox setTitlePosition:NSNoTitle]; + [contentBox setBorderType:NSNoBorder]; + [super setContentView:contentBox]; + + // Empty content view of contentBox + emptyBox = [[NSBox alloc] init]; + [emptyBox setContentViewMargins:NSMakeSize(0.0, 0.0)]; + [emptyBox setTitlePosition:NSNoTitle]; + [emptyBox setBorderType:NSLineBorder]; + [contentBox setContentView:emptyBox]; + + // Track project switching + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(activeProjectDidChange:) + name:PCActiveProjectDidChangeNotification + object:nil]; + + if (![self setFrameUsingName: @"ProjectLauncher"]) + { + [self center]; + } + + return self; +} + +- (void)dealloc +{ + NSLog (@"PCLaunchPanel: dealloc"); + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [super dealloc]; +} + +- (void)orderFront:(id)sender +{ + PCProject *activeProject = [projectManager rootActiveProject]; + NSView *launcherView = [[activeProject projectLauncher] componentView]; + + if (!([contentBox contentView] == launcherView)) + { + [contentBox setContentView:launcherView]; + [contentBox display]; + } + + PCLogInfo(self, @"orderFront: %@ -> %@", + launcherView, [launcherView superview]); + + [super orderFront:self]; +} + +- (void)close +{ + PCLogInfo(self, @"close: %@", [contentBox contentView]); + + [contentBox setContentView:emptyBox]; + + PCLogInfo(self, @"close: %@", [contentBox contentView]); + + [super close]; +} + +- (void)activeProjectDidChange:(NSNotification *)aNotif +{ + PCProject *rootProject = [projectManager rootActiveProject]; + + if (rootProject == currentProject) + { + return; + } + + currentProject = rootProject; + + if (!rootProject) + { + [contentBox setContentView:emptyBox]; + } + else + { + [self setTitle: [NSString stringWithFormat: + @"%@ - Launch", [rootProject projectName]]]; + + [contentBox + setContentView:[[rootProject projectLauncher] componentView]]; + } +} + +@end + diff --git a/Library/PCLoadedFilesPanel.h b/Library/PCLoadedFilesPanel.h new file mode 100644 index 0000000..e9d0f2d --- /dev/null +++ b/Library/PCLoadedFilesPanel.h @@ -0,0 +1,44 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCLoadedFilesPanel_h +#define _PCLoadedFilesPanel_h + +#include + +@class PCProjectManager; + +@interface PCLoadedFilesPanel : NSPanel +{ + PCProjectManager *projectManager; + PCProject *currentProject; + NSBox *contentBox; + NSBox *emptyBox; +} + +- (id)initWithProjectManager:(PCProjectManager *)aManager; + +@end + +#endif diff --git a/Library/PCLoadedFilesPanel.m b/Library/PCLoadedFilesPanel.m new file mode 100644 index 0000000..68ea7aa --- /dev/null +++ b/Library/PCLoadedFilesPanel.m @@ -0,0 +1,150 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCProjectManager.h" +#include "PCProject.h" +#include "PCProjectLoadedFiles.h" +#include "PCLoadedFilesPanel.h" + +#include "PCLogController.h" + +@implementation PCLoadedFilesPanel + +- (id)initWithProjectManager:(PCProjectManager *)aManager +{ + PCProjectLoadedFiles *projectLoadedFiles = nil; + PCProject *activeProject = nil; + + projectManager = aManager; + activeProject = [projectManager rootActiveProject]; + currentProject = activeProject; + projectLoadedFiles = [activeProject projectLoadedFiles]; + + PCLogStatus(self, @"[init]"); + + self = [super initWithContentRect: NSMakeRect (0, 300, 220, 322) + styleMask: (NSTitledWindowMask + | NSClosableWindowMask + | NSResizableWindowMask) + backing: NSBackingStoreRetained + defer: YES]; +// [self setFloatingPanel:YES]; + [self setMinSize: NSMakeSize(120, 23)]; + [self setFrameAutosaveName: @"LoadedFiles"]; + [self setReleasedWhenClosed: NO]; + [self setHidesOnDeactivate: YES]; + [self setTitle: [NSString stringWithFormat: + @"%@ - Loaded Files", [activeProject projectName]]]; + + // Panel's content view + contentBox = [[NSBox alloc] init]; + [contentBox setContentViewMargins:NSMakeSize(0.0, 0.0)]; + [contentBox setTitlePosition:NSNoTitle]; + [contentBox setBorderType:NSNoBorder]; + [self setContentView:contentBox]; + + // Empty content view of contentBox + emptyBox = [[NSBox alloc] init]; + [emptyBox setContentViewMargins:NSMakeSize(0.0, 0.0)]; + [emptyBox setTitlePosition:NSNoTitle]; + [emptyBox setBorderType:NSLineBorder]; + [contentBox setContentView:emptyBox]; + + // Track project switching + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(activeProjectDidChange:) + name:PCActiveProjectDidChangeNotification + object:nil]; + + if (![self setFrameUsingName: @"LoadedFiles"]) + { + [self center]; + } + + return self; +} + +- (void)dealloc +{ + NSLog(@"PCLoadedFilesPanel: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [super dealloc]; +} + +- (void)orderFront:(id)sender +{ + PCProject *activeProject = [projectManager rootActiveProject]; + NSView *filesView = [[activeProject projectLoadedFiles] componentView]; + + if (!([contentBox contentView] == filesView)) + { + [contentBox setContentView:filesView]; + [contentBox display]; + } + + [super orderFront:self]; +} + +- (void)close +{ + [contentBox setContentView:emptyBox]; + + [super close]; +} + +- (void)activeProjectDidChange:(NSNotification *)aNotif +{ + PCProject *rootProject = [projectManager rootActiveProject]; + + PCLogInfo(self, @"rootProject %@ currentProject %@", + [rootProject projectName], [currentProject projectName]); + + if (rootProject == currentProject) + { + return; + } + + PCLogInfo(self, @"1--- rootProject %@ currentProject %@", + [rootProject projectName], [currentProject projectName]); + + currentProject = rootProject; + + if (!rootProject) + { + [contentBox setContentView:emptyBox]; + } + else + { + [self setTitle: [NSString stringWithFormat: + @"%@ - Loaded Files", [rootProject projectName]]]; + [contentBox + setContentView:[[rootProject projectLoadedFiles] componentView]]; + } +} + +@end + diff --git a/Library/PCMakefileFactory.h b/Library/PCMakefileFactory.h new file mode 100644 index 0000000..b242b83 --- /dev/null +++ b/Library/PCMakefileFactory.h @@ -0,0 +1,61 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCMAKEFILEFACTORY_H_ +#define _PCMAKEFILEFACTORY_H_ + +#include + +@class PCProject; + +@interface PCMakefileFactory : NSObject +{ + NSMutableString *mfile; + NSString *pnme; +} + ++ (PCMakefileFactory *)sharedFactory; + +- (void)createMakefileForProject:(NSString *)prName; +- (BOOL)createPreambleForProject:(PCProject *)project; +- (BOOL)createPostambleForProject:(PCProject *)project; + +- (void)appendString:(NSString *)aString; + +- (void)appendHeaders:(NSArray *)array; +- (void)appendHeaders:(NSArray *)array forTarget: (NSString *)target; +- (void)appendClasses:(NSArray *)array; +- (void)appendClasses:(NSArray *)array forTarget: (NSString *)target; +- (void)appendOtherSources:(NSArray *)array; +- (void)appendOtherSources:(NSArray *)array forTarget: (NSString *)target; +- (void)appendResources; +- (void)appendResourceItems:(NSArray *)array; +- (void)appendSubprojects:(NSArray*)array; + +- (NSData *)encodedMakefile; + +@end + +#endif // _PCMAKEFILEFACTORY_H_ + diff --git a/Library/PCMakefileFactory.m b/Library/PCMakefileFactory.m new file mode 100644 index 0000000..0e99860 --- /dev/null +++ b/Library/PCMakefileFactory.m @@ -0,0 +1,331 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCDefines.h" +#include "PCProject.h" +#include "PCMakefileFactory.h" + +#define COMMENT_HEADERS @"\n\n#\n# Header files\n#\n" +#define COMMENT_RESOURCES @"\n\n#\n# Resource files\n#\n" +#define COMMENT_CLASSES @"\n\n#\n# Class files\n#\n" +#define COMMENT_CFILES @"\n\n#\n# C files\n#\n" +#define COMMENT_SUBPROJECTS @"\n\n#\n# Subprojects\n#\n" +#define COMMENT_APP @"\n\n#\n# Main application\n#\n" +#define COMMENT_LIBRARIES @"\n\n#\n# Additional libraries\n#\n" +#define COMMENT_BUNDLE @"\n\n#\n# Bundle\n#\n" +#define COMMENT_LIBRARY @"\n\n#\n# Library\n#\n" +#define COMMENT_TOOL @"\n\n#\n# Tool\n#\n" + +@implementation PCMakefileFactory + +static PCMakefileFactory *_factory = nil; + ++ (PCMakefileFactory *)sharedFactory +{ + static BOOL isInitialised = NO; + + if( isInitialised == NO ) + { + _factory = [[PCMakefileFactory alloc] init]; + + isInitialised = YES; + } + + return _factory; +} + +- (void)createMakefileForProject:(NSString *)prName +{ + NSAssert( prName, @"No project name given!"); + + AUTORELEASE( mfile ); + mfile = [[NSMutableString alloc] init]; + + AUTORELEASE( pnme ); + pnme = [prName copy]; + + [mfile appendString:@"#\n"]; + [mfile appendString:@"# GNUmakefile - Generated by ProjectCenter\n"]; + [mfile appendString:@"#\n"]; + + [mfile appendString:@"\ninclude $(GNUSTEP_MAKEFILES)/common.make\n"]; +} + +- (BOOL)createPreambleForProject:(PCProject *)project +{ + NSMutableString *mfp = [[NSMutableString alloc] init]; + NSString *mfl = nil; + NSArray *array = nil; + NSDictionary *projectDict = [project projectDict]; + NSString *projectPath = [project projectPath]; + + // Create the new file + [mfp appendString:@"#\n"]; + [mfp appendString:@"# GNUmakefile.preamble - Generated by ProjectCenter\n"]; + [mfp appendString:@"#\n\n"]; + + // Preprocessor flags + [mfp appendString:@"# Additional flags to pass to the preprocessor\n"]; + [mfp appendString: + [NSString stringWithFormat:@"ADDITIONAL_CPPFLAGS += %@\n\n", + [projectDict objectForKey:PCPreprocessorOptions]]]; + + // Objective C compiler flags + [mfp appendString:@"# Additional flags to pass to Objective C compiler\n"]; + [mfp appendString: + [NSString stringWithFormat:@"ADDITIONAL_OBJCFLAGS += %@\n\n", + [projectDict objectForKey:PCObjCCompilerOptions]]]; + + // C compiler flags + [mfp appendString:@"# Additional flags to pass to C compiler\n"]; + [mfp appendString: + [NSString stringWithFormat:@"ADDITIONAL_CFLAGS += %@\n\n", + [projectDict objectForKey:PCCompilerOptions]]]; + + // Linker flags + [mfp appendString:@"# Additional flags to pass to the linker\n"]; + [mfp appendString: + [NSString stringWithFormat:@"ADDITIONAL_LDFLAGS += %@ ", + [projectDict objectForKey:PCLinkerOptions]]]; + array = [projectDict objectForKey:PCLibraries]; + if (array && [array count]) + { + NSString *tmp; + NSEnumerator *enumerator = [array objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + if (![tmp isEqualToString:@"gnustep-base"] && + ![tmp isEqualToString:@"gnustep-gui"]) + { + [mfp appendString:[NSString stringWithFormat:@"-l%@ ",tmp]]; + } + } + } + [mfp appendString:@"\n\n"]; + + // Directories where to search headers + [mfp appendString: + @"# Additional include directories the compiler should search\n"]; + [mfp appendString:@"ADDITIONAL_INCLUDE_DIRS += "]; + array = [projectDict objectForKey:PCSearchHeaders]; + if (array && [array count]) + { + NSString *tmp; + NSEnumerator *enumerator = [array objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + [mfp appendString:[NSString stringWithFormat:@"-I%@ ",tmp]]; + } + } + [mfp appendString:@"\n\n"]; + + // Directories where to search libraries + [mfp appendString: + @"# Additional library directories the linker should search\n"]; + [mfp appendString:@"ADDITIONAL_LIB_DIRS += "]; + array = [projectDict objectForKey:PCSearchLibs]; + if (array && [array count]) + { + NSString *tmp; + NSEnumerator *enumerator = [array objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + [mfp appendString:[NSString stringWithFormat:@"-L%@ ",tmp]]; + } + } + [mfp appendString:@"\n\n"]; + +// [mfp appendString:[projectDict objectForKey:PCLibraries]]; + + // Write the new file to disc! + mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile.preamble"]; + if ([mfp writeToFile:mfl atomically:YES]) + { + return YES; + } + + return NO; +} + +- (BOOL)createPostambleForProject:(PCProject *)project +{ + NSBundle *bundle = nil; + NSString *template = nil; + NSString *postamble = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + bundle = [NSBundle bundleForClass:[self class]]; + template = [bundle pathForResource:@"postamble" ofType:@"template"]; + postamble = [[project projectPath] + stringByAppendingPathComponent:@"GNUmakefile.postamble"]; + + return [fm copyPath:template toPath:postamble handler:nil]; +} + +- (void)appendString:(NSString *)aString +{ + NSAssert( mfile, @"No valid makefile available!"); + NSAssert( aString, @"No valid string!"); + + [mfile appendString:aString]; +} + +- (void)appendHeaders:(NSArray *)array +{ + [self appendHeaders: array forTarget: pnme]; +} + +- (void)appendHeaders:(NSArray *)array forTarget: (NSString *)target +{ + [self appendString:COMMENT_HEADERS]; + [self appendString:[NSString stringWithFormat:@"%@_HEADER_FILES = ", + target]]; + + if( array && [array count] ) + { + NSString *tmp; + NSEnumerator *enumerator = [array objectEnumerator]; + + while ( (tmp = [enumerator nextObject]) ) + { + [self appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + } +} + +- (void)appendClasses:(NSArray *)array +{ + [self appendClasses: array forTarget: pnme]; +} + +- (void)appendClasses:(NSArray *)array forTarget: (NSString *)target +{ + [self appendString:COMMENT_CLASSES]; + [self appendString:[NSString stringWithFormat:@"%@_OBJC_FILES = ", target]]; + + if( array && [array count] ) + { + NSString *tmp; + NSEnumerator *enumerator = [array objectEnumerator]; + + while ( (tmp = [enumerator nextObject] )) + { + [self appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + } +} + +- (void)appendOtherSources:(NSArray *)array +{ + [self appendOtherSources: array forTarget: pnme]; +} + +- (void)appendOtherSources:(NSArray *)array forTarget: (NSString *)target +{ + NSMutableArray *marray = nil; + NSEnumerator *oenum; + NSString *file; + + [self appendString:COMMENT_CFILES]; + [self appendString:[NSString stringWithFormat:@"%@_C_FILES = ", target]]; + if ( array == nil || [array count] == 0) + return; + + /* Other Sources can have both m files and c files (possibly others?). */ + oenum = [array objectEnumerator]; + while ((file = [oenum nextObject])) + { + if ([file hasSuffix: @".m"]) + { + if (marray == nil) + marray = [NSMutableArray arrayWithCapacity: 2]; + [marray addObject: file]; + } + else /* if ([f hasSuffix: @".c"]) */ + { + [self appendString:[NSString stringWithFormat:@"\\\n%@ ",file]]; + } + } + + [self appendString: @"\n"]; + [self appendString:[NSString stringWithFormat:@"%@_OBJC_FILES += ",pnme]]; + if ( marray ) + { + NSString *file; + NSEnumerator *enumerator = [marray objectEnumerator]; + + while ( (file = [enumerator nextObject]) ) + { + [self appendString:[NSString stringWithFormat:@"\\\n%@ ", file]]; + } + } +} + +- (void)appendResources +{ + [self appendString:COMMENT_RESOURCES]; + [self appendString:[NSString stringWithFormat:@"%@_RESOURCE_FILES = ",pnme]]; +} + +- (void)appendResourceItems:(NSArray *)array +{ + NSString *tmp; + NSEnumerator *enumerator = [array objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + [self appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } +} + +- (void)appendSubprojects:(NSArray*)array +{ + [self appendString:COMMENT_SUBPROJECTS]; + [self appendString:@"SUBPROJECTS = "]; + + if (array && [array count]) + { + NSString *tmp; + NSEnumerator *enumerator = [array objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + tmp = [tmp stringByAppendingPathExtension:@"subproj"]; + [self appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + } +} + +- (NSData *)encodedMakefile +{ + NSAssert( mfile, @"No valid makefile available!"); + + return [mfile dataUsingEncoding:[NSString defaultCStringEncoding]]; +} + +@end + diff --git a/Library/PCProject.h b/Library/PCProject.h new file mode 100644 index 0000000..92c116c --- /dev/null +++ b/Library/PCProject.h @@ -0,0 +1,220 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCProject_h_ +#define _PCProject_h_ + +#include + +#include "PCProjectManager.h" + +@class PCProjectManager; +@class PCProjectWindow; +@class PCProjectBrowser; +@class PCProjectLoadedFiles; + +@class PCProjectInspector; +@class PCProjectBuilder; +@class PCProjectLauncher; +@class PCProjectEditor; + +#ifndef GNUSTEP_BASE_VERSION +@protocol ProjectBuilder; +#else +#include +#endif + +extern NSString *PCProjectDictDidChangeNotification; +extern NSString *PCProjectDictDidSaveNotification; + +@interface PCProject : NSObject +{ + PCProjectManager *projectManager; + PCProjectWindow *projectWindow; + PCProjectBrowser *projectBrowser; + PCProjectLoadedFiles *projectLoadedFiles; + PCProjectEditor *projectEditor; + PCProjectBuilder *projectBuilder; + PCProjectLauncher *projectLauncher; + + NSView *builderContentView; + NSView *debuggerContentView; + + NSMutableDictionary *projectDict; + NSString *projectName; + NSString *projectPath; + + NSArray *rootKeys; // e.g. CLASS_FILES + NSArray *rootCategories; // e.g. Classes + NSDictionary *rootEntries; // Initialised by subclasses + NSMutableDictionary *buildOptions; + + BOOL editorIsActive; + + PCProject *activeSubproject; + + // Subproject + NSMutableArray *loadedSubprojects; + BOOL isSubproject; + PCProject *rootProject; + PCProject *superProject; +} + +// ============================================================================ +// ==== Init and free +// ============================================================================ + +- (id)init; +- (id)initWithProjectDictionary:(NSDictionary *)dict path:(NSString *)path; +- (PCProjectManager *)projectManager; +- (void)setProjectManager:(PCProjectManager *)aManager; +- (BOOL)close:(id)sender; +- (void)dealloc; + +- (BOOL)saveProjectWindowsAndPanels; + +// ============================================================================ +// ==== Accessory methods +// ============================================================================ + +- (PCProjectManager *)projectManager; +- (PCProjectWindow *)projectWindow; +- (PCProjectBrowser *)projectBrowser; +- (PCProjectLoadedFiles *)projectLoadedFiles; +- (PCProjectBuilder *)projectBuilder; +- (PCProjectLauncher *)projectLauncher; +- (PCProjectEditor *)projectEditor; + +- (void)setProjectDictObject:(id)object forKey:(NSString *)key; +- (NSString *)projectName; +- (void)setProjectName:(NSString *)aName; +- (BOOL)isProjectChanged; + +// =========================================================================== +// ==== Can be overriden +// =========================================================================== + +// Project Attributes Inspector +- (NSView *)projectAttributesView; + +- (Class)builderClass; +- (NSString *)projectDescription; // Project type +- (BOOL)isExecutable; +- (NSString *)execToolName; + +- (NSArray *)buildTargets; +- (NSArray *)sourceFileKeys; +- (NSArray *)resourceFileKeys; +- (NSArray *)otherKeys; +- (NSArray *)allowableSubprojectTypes; +- (NSArray *)defaultLocalizableKeys; +- (NSArray *)localizableKeys; + +- (BOOL)isEditableCategory:(NSString *)category; +- (NSArray *)fileTypesForCategoryKey:(NSString *)key; +- (NSString *)categoryKeyForFileType:(NSString *)type; +- (NSString *)dirForCategoryKey:(NSString *)key; +- (NSString *)complementaryTypeForType:(NSString *)type; + +// Subclasses need to call this before their customised implementation! +- (BOOL)writeMakefile; + +// ============================================================================ +// ==== File Handling +// ============================================================================ + +// Remove path from "file" and handle special cases like libraries +- (NSString *)projectFileFromFile:(NSString *)file forKey:(NSString *)type; + +// Returns YES if type is a valid key and file is not contained in the +// project already +- (BOOL)doesAcceptFile:(NSString *)file forKey:(NSString *)key; + +- (BOOL)addAndCopyFiles:(NSArray *)files forKey:(NSString *)key; +- (void)addFiles:(NSArray *)files forKey:(NSString *)key; +- (BOOL)removeFiles:(NSArray *)files forKey:(NSString *)key; +- (BOOL)renameFile:(NSString *)fromFile toFile:(NSString *)toFile; + +// ============================================================================ +// ==== Project handling +// ============================================================================ + +- (BOOL)assignProjectDict:(NSDictionary *)aDict; +- (NSDictionary *)projectDict; + +- (void)setProjectPath:(NSString *)aPath; +- (NSString *)projectPath; + +- (NSArray *)rootKeys; +- (NSArray *)rootCategories; +- (NSDictionary *)rootEntries; +- (NSString *)keyForCategory:(NSString *)category; +- (NSString *)categoryForKey:(NSString *)key; + +- (BOOL)save; + +- (BOOL)writeSpecFile; + +- (BOOL)isValidDictionary:(NSDictionary *)aDict; +- (void)updateProjectDict; + +// Validates the project dictionary and inserts missing keys if needed. It +// calls isValidDictionary to validate. +- (void)validateProjectDict; + +// ============================================================================ +// ==== Subprojects +// ============================================================================ + +- (NSArray *)loadedSubprojects; +- (PCProject *)activeSubproject; + +- (BOOL)isSubproject; +- (void)setIsSubproject:(BOOL)yn; +- (PCProject *)superProject; +- (void)setSuperProject:(PCProject *)project; + +- (PCProject *)subprojectWithName:(NSString *)name; + +- (void)addSubproject:(PCProject *)aSubproject; +- (void)addSubprojectWithName:(NSString *)name; +- (BOOL)removeSubproject:(PCProject *)aSubproject; +- (BOOL)removeSubprojectWithName:(NSString *)subprojectName; + +@end + +@interface PCProject (CategoryPaths) + +- (NSArray *)contentAtCategoryPath:(NSString *)categoryPath; +- (BOOL)hasChildrenAtCategoryPath:(NSString *)keyPath; + +- (NSString *)rootCategoryForCategoryPath:(NSString *)categoryPath; +- (NSString *)categoryForCategoryPath:(NSString *)categoryPath; +- (NSString *)keyForRootCategoryInCategoryPath:(NSString *)categoryPath; +- (NSString *)keyForCategoryPath:(NSString *)categoryPath; + +@end + +#endif + diff --git a/Library/PCProject.m b/Library/PCProject.m new file mode 100644 index 0000000..9b0293f --- /dev/null +++ b/Library/PCProject.m @@ -0,0 +1,1335 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCFileManager.h" +#include "PCProject.h" +#include "PCDefines.h" +#include "ProjectBuilder.h" + +#include "PCProjectWindow.h" +#include "PCProjectBrowser.h" +#include "PCProjectLoadedFiles.h" + +#include "PCProjectInspector.h" +#include "PCProjectBuilder.h" +#include "PCProjectEditor.h" +#include "PCProjectLauncher.h" +#include "PCEditor.h" + +#include "PCLogController.h" + +NSString +*PCProjectDictDidChangeNotification = @"PCProjectDictDidChangeNotification"; +NSString +*PCProjectDictDidSaveNotification = @"PCProjectDictDidSaveNotification"; + +@implementation PCProject + +// ============================================================================ +// ==== Init and free +// ============================================================================ + +- (id)init +{ + if ((self = [super init])) + { + buildOptions = [[NSMutableDictionary alloc] init]; + projectBuilder = nil; + projectLauncher = nil; + + loadedSubprojects = [[NSMutableArray alloc] init]; + isSubproject = NO; + activeSubproject = nil; + } + + return self; +} + +- (id)initWithProjectDictionary:(NSDictionary *)dict path:(NSString *)path; +{ + NSAssert(dict,@"No valid project dictionary!"); + + if ((self = [self init])) + { + if ([[path lastPathComponent] isEqualToString:@"PC.project"]) + { + projectPath = [[path stringByDeletingLastPathComponent] copy]; + } + else + { + projectPath = [path copy]; + } + + PCLogStatus(self, @"initWithProjectDictionary"); + + if (![self assignProjectDict:dict]) + { + PCLogError(self, @"could not load the project..."); + [self autorelease]; + return nil; + } + [self save]; + } + + return self; +} + +- (void)setProjectManager:(PCProjectManager *)aManager +{ + projectManager = aManager; + + if (isSubproject) + { + return; + } + + if (!projectBrowser && !isSubproject) + { + projectBrowser = [[PCProjectBrowser alloc] initWithProject:self]; + } + + if (!projectLoadedFiles && !isSubproject) + { + projectLoadedFiles = [[PCProjectLoadedFiles alloc] initWithProject:self]; + } + + if (!projectEditor && !isSubproject) + { + projectEditor = [[PCProjectEditor alloc] initWithProject:self]; + } + + if (!projectWindow && !isSubproject) + { + projectWindow = [[PCProjectWindow alloc] initWithProject:self]; + } +} + +- (BOOL)close:(id)sender +{ + PCLogInfo(self, @"Closing %@ project", projectName); + + // Save visible windows and panels positions to project dictionary + if (isSubproject == NO) + { + [self saveProjectWindowsAndPanels]; + } + + // Project files (GNUmakefile, PC.project etc.) + if (isSubproject == NO && [self isProjectChanged] == YES) + { + int ret; + + ret = NSRunAlertPanel(@"Alert", + @"Project or subprojects are modified", + @"Save and Close",@"Don't save",@"Cancel"); + switch (ret) + { + case NSAlertDefaultReturn: + if ([self save] == NO) + { + return NO; + } + break; + + case NSAlertAlternateReturn: + break; + + case NSAlertOtherReturn: + return NO; + break; + } + } + + // Close subprojects + while ([loadedSubprojects count]) + { + [(PCProject *)[loadedSubprojects objectAtIndex:0] close:self]; + // We should release subproject here, because it retains us + // and we never reach -dealloc in other case. + [loadedSubprojects removeObjectAtIndex:0]; + } + + if (isSubproject == YES) + { + return YES; + } + + // Editors + // "Cancel" button on "Save Edited Files" panel selected + if ([projectEditor closeAllEditors] == NO) + { + return NO; + } + + // Project window + if (sender != projectWindow) + { + [projectWindow close]; + } + + // Remove self from loaded projects + [projectManager closeProject:self]; + + return YES; +} + +- (BOOL)saveProjectWindowsAndPanels +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + NSMutableDictionary *windows = [[NSMutableDictionary alloc] init]; + NSString *projectFile = nil; + NSMutableDictionary *projectFileDict = nil; + + projectFile = [projectPath stringByAppendingPathComponent:@"PC.project"]; + projectFileDict = [NSMutableDictionary + dictionaryWithContentsOfFile:projectFile]; + + // Project Window + [windows setObject:[projectWindow stringWithSavedFrame] + forKey:@"ProjectWindow"]; + if ([projectWindow isToolbarVisible] == YES) + { + [windows setObject:[NSString stringWithString:@"YES"] + forKey:@"ShowToolbar"]; + } + else + { + [windows setObject:[NSString stringWithString:@"NO"] + forKey:@"ShowToolbar"]; + } + + // Write to file and exit if prefernces wasn't set to save panels + if (![[ud objectForKey:RememberWindows] isEqualToString:@"YES"]) + { + [projectFileDict setObject:windows forKey:@"PC_WINDOWS"]; + [projectFileDict writeToFile:projectFile atomically:YES]; + return YES; + } + + + // Project Build + if (projectBuilder && [[projectManager buildPanel] isVisible]) + { + [windows setObject:[[projectManager buildPanel] stringWithSavedFrame] + forKey:@"ProjectBuild"]; + } + else + { + [windows removeObjectForKey:@"ProjectBuild"]; + } + + // Project Launch + if (projectLauncher && [[projectManager launchPanel] isVisible]) + { + [windows setObject:[[projectManager launchPanel] stringWithSavedFrame] + forKey:@"ProjectLaunch"]; + } + else + { + [windows removeObjectForKey:@"ProjectLaunch"]; + } + + // Project Inspector +/* if ([[projectManager inspectorPanel] isVisible]) + { + [windows setObject:[[projectManager inspectorPanel] stringWithSavedFrame] + forKey:@"ProjectInspector"]; + } + else + { + [windows removeObjectForKey:@"ProjectInspector"]; + }*/ + + // Loaded Files + if (projectLoadedFiles && [[projectManager loadedFilesPanel] isVisible]) + { + [windows + setObject:[[projectManager loadedFilesPanel] stringWithSavedFrame] + forKey:@"LoadedFiles"]; + } + else + { + [windows removeObjectForKey:@"LoadedFiles"]; + } + + // Set to project dict for case if project changed + // Don't notify about projectDict changes + [projectDict setObject:windows forKey:@"PC_WINDOWS"]; + + // Now save it directly to PC.project file + [projectFileDict setObject:windows forKey:@"PC_WINDOWS"]; + [projectFileDict writeToFile:projectFile atomically:YES]; + + PCLogInfo(self, @"Windows and geometries saved"); + + return YES; +} + +- (void)dealloc +{ + NSLog (@"PCProject %@: dealloc", projectName); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + RELEASE(projectName); + RELEASE(projectPath); + RELEASE(projectDict); + RELEASE(loadedSubprojects); + + // Initialized in -setProjectManager: + RELEASE(projectWindow); + RELEASE(projectBrowser); + RELEASE(projectLoadedFiles); + RELEASE(projectEditor); + + if (projectBuilder) RELEASE(projectBuilder); + if (projectLauncher) RELEASE(projectLauncher); + + RELEASE(buildOptions); + + if (isSubproject == YES) + { + RELEASE(rootProject); + RELEASE(superProject); + } + + [super dealloc]; +} + +// ============================================================================ +// ==== Accessory methods +// ============================================================================ + +- (PCProjectManager *)projectManager +{ + return projectManager; +} + +- (PCProjectWindow *)projectWindow +{ + return projectWindow; +} + +- (PCProjectBrowser *)projectBrowser +{ + return projectBrowser; +} + +- (PCProjectLoadedFiles *)projectLoadedFiles +{ + if (!projectLoadedFiles && !isSubproject) + { + projectLoadedFiles = [[PCProjectLoadedFiles alloc] initWithProject:self]; + } + + return projectLoadedFiles; +} + +- (PCProjectBuilder *)projectBuilder +{ + if (!projectBuilder && !isSubproject) + { + projectBuilder = [[PCProjectBuilder alloc] initWithProject:self]; + } + + return projectBuilder; +} + +- (PCProjectLauncher *)projectLauncher +{ + if (!projectLauncher && !isSubproject) + { + projectLauncher = [[PCProjectLauncher alloc] initWithProject:self]; + } + + return projectLauncher; +} + +- (PCProjectEditor *)projectEditor +{ + return projectEditor; +} + +- (void)setProjectDictObject:(id)object forKey:(NSString *)key +{ + id currentObject = [projectDict objectForKey:key]; + + if ([object isKindOfClass:[NSString class]] + && [currentObject isEqualToString:object]) + { + return; + } + + [projectDict setObject:object forKey:key]; + + [[NSNotificationCenter defaultCenter] + postNotificationName:PCProjectDictDidChangeNotification + object:self]; +} + +- (void)setProjectName:(NSString *)aName +{ + AUTORELEASE(projectName); + projectName = [aName copy]; + [projectWindow setFileIconTitle:projectName]; +} + +- (NSString *)projectName +{ + return projectName; +} + +- (BOOL)isProjectChanged +{ + return [projectWindow isDocumentEdited]; +} + +// ============================================================================ +// ==== Can be overriden +// ============================================================================ + +- (NSView *)projectAttributesView +{ + return nil; +} + +- (Class)builderClass +{ + return nil; +} + +- (NSString *)projectDescription +{ + return @"Abstract PCProject class!"; +} + +- (BOOL)isExecutable +{ + return NO; +} + +- (NSString *)execToolName +{ + return nil; +} + +- (NSArray *)buildTargets +{ + return nil; +} + +- (NSArray *)sourceFileKeys +{ + return nil; +} + +- (NSArray *)resourceFileKeys +{ + return nil; +} + +- (NSArray *)otherKeys +{ + return nil; +} + +- (NSArray *)allowableSubprojectTypes +{ + return nil; +} + +- (NSArray *)defaultLocalizableKeys +{ + return nil; +} + +- (NSArray *)localizableKeys +{ + return nil; +} + +- (BOOL)isEditableCategory:(NSString *)category +{ + NSString *key = [self keyForCategory:category]; + + if ([key isEqualToString:PCClasses] + || [key isEqualToString:PCHeaders] + || [key isEqualToString:PCSupportingFiles] + || [key isEqualToString:PCDocuFiles] + || [key isEqualToString:PCOtherSources] + || [key isEqualToString:PCOtherResources] + || [key isEqualToString:PCNonProject]) + { + return YES; + } + + return NO; +} + +- (NSArray *)fileTypesForCategoryKey:(NSString *)key +{ + return nil; +} + +- (NSString *)categoryKeyForFileType:(NSString *)type +{ + NSEnumerator *keysEnum = [rootKeys objectEnumerator]; + NSString *key = nil; + + while ((key = [keysEnum nextObject])) + { + if ([[self fileTypesForCategoryKey:key] containsObject:type]) + { + return key; + } + } + + return nil; +} + +- (NSString *)dirForCategoryKey:(NSString *)key +{ + return projectPath; +} + +- (NSString *)complementaryTypeForType:(NSString *)type +{ + if ([type isEqualToString:@"m"] || [type isEqualToString:@"c"]) + { + return [NSString stringWithString:@"h"]; + } + else if ([type isEqualToString:@"h"]) + { + return [NSString stringWithString:@"m"]; + } + + return nil; +} + +// Saves backup file +- (BOOL)writeMakefile +{ + NSString *mf = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + NSString *bu = [projectPath stringByAppendingPathComponent:@"GNUmakefile~"]; + NSFileManager *fm = [NSFileManager defaultManager]; + + if ([fm isReadableFileAtPath:mf]) + { + if ([fm isWritableFileAtPath:bu]) + { + [fm removeFileAtPath:bu handler:nil]; + } + + if (![fm copyPath:mf toPath:bu handler:nil]) + { + NSRunAlertPanel(@"Attention!", + @"Could not keep a backup of the GNUMakefile!", + @"OK",nil,nil); + } + } + + return YES; +} + +// ============================================================================ +// ==== File Handling +// ============================================================================ + +- (NSString *)projectFileFromFile:(NSString *)file forKey:(NSString *)type +{ + NSMutableString *projectFile = nil; + + projectFile = [NSMutableString stringWithString:[file lastPathComponent]]; + + if ([type isEqualToString:PCLibraries]) + { + [projectFile deleteCharactersInRange:NSMakeRange(0,3)]; + projectFile = + (NSMutableString*)[projectFile stringByDeletingPathExtension]; + } + + return projectFile; +} + +- (BOOL)doesAcceptFile:(NSString *)file forKey:(NSString *)type +{ + NSArray *projectFiles = [projectDict objectForKey:type]; + NSString *pFile = [self projectFileFromFile:file forKey:type]; + + if ([[projectDict allKeys] containsObject:type]) + { + if (![projectFiles containsObject:pFile]) + { + return YES; + } + } + + return NO; +} + +- (BOOL)addAndCopyFiles:(NSArray *)files forKey:(NSString *)key +{ + NSEnumerator *fileEnum = [files objectEnumerator]; + NSString *file = nil; + NSMutableArray *fileList = [[files mutableCopy] autorelease]; + NSString *complementaryType = nil; + NSString *complementaryKey = nil; + NSString *complementaryDir = nil; + NSMutableArray *complementaryFiles = [NSMutableArray array]; + PCFileManager *fileManager = [projectManager fileManager]; + NSString *directory = [self dirForCategoryKey:key]; + + complementaryType = [self + complementaryTypeForType:[[files objectAtIndex:0] pathExtension]]; + if (complementaryType) + { + complementaryKey = [self categoryKeyForFileType:complementaryType]; + complementaryDir = [self dirForCategoryKey:complementaryKey]; + } + + PCLogInfo(self, @"{%@} {addAndCopyFiles} %@", projectName, fileList); + + // Validate files + while ((file = [fileEnum nextObject])) + { + if (![self doesAcceptFile:file forKey:key]) + { + [fileList removeObject:file]; + } + else if (complementaryType != nil) + { + NSString *compFile = nil; + + compFile = [[file stringByDeletingPathExtension] + stringByAppendingPathExtension:complementaryType]; + if ([[NSFileManager defaultManager] fileExistsAtPath:compFile] + && [self doesAcceptFile:compFile forKey:complementaryKey]) + { + [complementaryFiles addObject:compFile]; + } + } + } + + PCLogInfo(self, @"{addAndCopyFiles} %@", fileList); + + // Copy files + if (![key isEqualToString:PCLibraries]) // Don't copy libraries + { + if (![fileManager copyFiles:fileList intoDirectory:directory]) + { + NSRunAlertPanel(@"Alert", + @"Error adding files to project %@!", + @"OK", nil, nil, projectName); + return NO; + } + + PCLogInfo(self, @"Complementary files: %@", complementaryFiles); + // Complementaries + if (![fileManager copyFiles:complementaryFiles + intoDirectory:complementaryDir]) + { + NSRunAlertPanel(@"Alert", + @"Error adding complementary files to project %@!", + @"OK", nil, nil, projectName); + return NO; + } + } + + // Add files to project + [self addFiles:fileList forKey:key]; + if ([complementaryFiles count] > 0) + { + [self addFiles:complementaryFiles forKey:complementaryKey]; + } + + return YES; +} + +- (void)addFiles:(NSArray *)files forKey:(NSString *)type +{ + NSEnumerator *enumerator = nil; + NSString *file = nil; + NSString *pFile = nil; + NSArray *types = [projectDict objectForKey:type]; + NSMutableArray *projectFiles = [NSMutableArray arrayWithArray:types]; + + enumerator = [files objectEnumerator]; + while ((file = [enumerator nextObject])) + { + pFile = [self projectFileFromFile:file forKey:type]; + [projectFiles addObject:pFile]; + } + + [self setProjectDictObject:projectFiles forKey:type]; +} + +- (BOOL)removeFiles:(NSArray *)files forKey:(NSString *)key +{ + NSEnumerator *enumerator = nil; + NSString *filePath = nil; + NSString *file = nil; + NSMutableArray *projectFiles = nil; + + // Remove files from project + projectFiles = [NSMutableArray arrayWithArray:[projectDict objectForKey:key]]; + enumerator = [files objectEnumerator]; + while ((file = [enumerator nextObject])) + { + if ([key isEqualToString:PCSubprojects]) + { + [self removeSubprojectWithName:file]; + } + [projectFiles removeObject:file]; + + // Close editor + filePath = [projectPath stringByAppendingPathComponent:file]; + [projectEditor closeEditorForFile:filePath]; + } + + [self setProjectDictObject:projectFiles forKey:key]; + + return YES; +} + +- (BOOL)renameFile:(NSString *)fromFile toFile:(NSString *)toFile +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *selectedCategory = nil; + NSString *selectedCategoryKey = nil; + NSString *fromPath = nil; + NSString *toPath = nil; + NSMutableDictionary *_pDict = nil; + NSString *_file = nil; + NSMutableArray *_array = nil; + BOOL saveToFile = NO; + + selectedCategory = [projectBrowser nameOfSelectedCategory]; + selectedCategoryKey = [[projectManager rootActiveProject] + keyForCategory:selectedCategory]; + + fromPath = [[self dirForCategoryKey:selectedCategoryKey] + stringByAppendingPathComponent:fromFile]; + toPath = [[self dirForCategoryKey:selectedCategoryKey] + stringByAppendingPathComponent:toFile]; + + PCLogInfo(self, @"{%@} move %@ to %@ category: %@", + projectName, fromPath, toPath, selectedCategory); + + if ([fm movePath:fromPath toPath:toPath handler:nil] == YES) + { + if ([self isProjectChanged]) + { + // Project already has changes + saveToFile = YES; + } + + // Make changes to projectDict + [self removeFiles:[NSArray arrayWithObjects:fromFile,nil] + forKey:selectedCategoryKey]; + [self addFiles:[NSArray arrayWithObjects:toFile,nil] + forKey:selectedCategoryKey]; + + // Put only this change to project file, leaving + // other changes in memory(projectDict) + if (saveToFile) + { + _file = [projectPath stringByAppendingPathComponent:@"PC.project"]; + _pDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + _array = [_pDict objectForKey:selectedCategoryKey]; + [_array removeObject:fromFile]; + [_array addObject:toFile]; + [_pDict setObject:_array forKey:selectedCategoryKey]; + [_pDict writeToFile:_file atomically:YES]; + } + else + { + [self save]; + } + + // Set browser path to new file name + [projectBrowser + setPath:[[projectBrowser pathToSelectedCategory] + stringByAppendingPathComponent:toFile]]; + } + + return YES; +} + +// ============================================================================ +// ==== Project handling +// ============================================================================ + +- (BOOL)assignProjectDict:(NSDictionary *)aDict +{ + NSAssert(aDict,@"No valid project dictionary!"); + + [projectDict autorelease]; + projectDict = [[NSMutableDictionary alloc] initWithDictionary:aDict]; + + PCLogInfo(self, @"assignProjectDict"); + + [self setProjectName:[projectDict objectForKey:PCProjectName]]; + [self writeMakefile]; + + // Notify on dictionary changes. Update the interface and so on. + [[NSNotificationCenter defaultCenter] + postNotificationName:PCProjectDictDidChangeNotification + object:self]; + + return YES; +} + +- (NSDictionary *)projectDict +{ + return (NSDictionary *)projectDict; +} + +- (void)setProjectPath:(NSString *)aPath +{ + [projectPath autorelease]; + projectPath = [aPath copy]; +} + +- (NSString *)projectPath +{ + return projectPath; +} + +- (NSArray *)rootKeys +{ + // e.g. CLASS_FILES + return rootKeys; +} + +- (NSArray *)rootCategories +{ + // e.g. Classes + return rootCategories; +} + +- (NSDictionary *)rootEntries +{ + return rootEntries; +} + +// Category - the name we see in project browser, e.g. "Classes" +// Key - the uppercase names located in PC.roject, e.g. "CLASS_FILES" +- (NSString *)keyForCategory:(NSString *)category +{ + int index = [rootCategories indexOfObject:category]; + + return [rootKeys objectAtIndex:index]; +} + +- (NSString *)categoryForKey:(NSString *)key +{ + return [rootEntries objectForKey:key]; +} + +- (BOOL)save +{ + NSString *file = [projectPath stringByAppendingPathComponent:@"PC.project"]; + NSString *backup = [file stringByAppendingPathExtension:@"backup"]; + NSFileManager *fm = [NSFileManager defaultManager]; + NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; + NSString *keepBackup = [defs objectForKey:KeepBackup]; + BOOL shouldKeep = [keepBackup isEqualToString:@"YES"]; + int spCount = [loadedSubprojects count]; + int i; + + for (i = 0; i < spCount; i++) + { + [[loadedSubprojects objectAtIndex:i] save]; + } + + // Remove backup file if exists + if ([fm fileExistsAtPath:backup] && ![fm removeFileAtPath:backup handler:nil]) + { + NSRunAlertPanel(@"Save project", + @"Error removing the old project backup!", + @"OK",nil,nil); + return NO; + } + + // Save backup + if (shouldKeep == YES && [fm isReadableFileAtPath:file]) + { + if ([fm copyPath:file toPath:backup handler:nil] == NO) + { + NSRunAlertPanel(@"Save project", + @"Error when saving project backup file!", + @"OK",nil,nil); + return NO; + } + } + + // Save project file + [projectDict setObject:[[NSCalendarDate date] description] + forKey:PCLastEditing]; + if ([projectDict writeToFile:file atomically:YES] == NO) + { + return NO; + } + + [[NSNotificationCenter defaultCenter] + postNotificationName:PCProjectDictDidSaveNotification + object:self]; + + // Save GNUmakefile + if ([self writeMakefile] == NO) + { + NSRunAlertPanel(@"Save project", + @"Error when writing makefile for project %@", + @"OK",nil,nil,projectName); + return NO; + } + + return YES; +} + +- (BOOL)writeSpecFile +{ + NSString *name = [projectDict objectForKey:PCProjectName]; + NSString *specInPath = [projectPath stringByAppendingPathComponent:name]; + NSMutableString *specIn = [NSMutableString string]; + + if( [[projectDict objectForKey:PCRelease] intValue] < 1 ) + { + NSRunAlertPanel(@"Spec Input File Creation!", + @"The Release entry seems to be wrong, please fix it!", + @"OK",nil,nil); + return NO; + } + + specInPath = [specInPath stringByAppendingPathExtension:@"spec.in"]; + + [specIn appendString:@"# Automatically generated by ProjectCenter.app\n"]; + [specIn appendString:@"#\nsummary: "]; + [specIn appendString:[projectDict objectForKey:PCSummary]]; + [specIn appendString:@"\nRelease: "]; + [specIn appendString:[projectDict objectForKey:PCRelease]]; + [specIn appendString:@"\nCopyright: "]; + [specIn appendString:[projectDict objectForKey:PCCopyright]]; + [specIn appendString:@"\nGroup: "]; + [specIn appendString:[projectDict objectForKey:PCGroup]]; + [specIn appendString:@"\nSource: "]; + [specIn appendString:[projectDict objectForKey:PCSource]]; + [specIn appendString:@"\n\n%description\n\n"]; + [specIn appendString:[projectDict objectForKey:PCDescription]]; + + return [specIn writeToFile:specInPath atomically:YES]; +} + +- (BOOL)isValidDictionary:(NSDictionary *)aDict +{ + NSString *_file; + NSString *key; + Class projClass = [self builderClass]; + NSDictionary *origin; + NSArray *keys; + NSEnumerator *enumerator; + + _file = [[NSBundle bundleForClass:projClass] pathForResource:@"PC" + ofType:@"project"]; + + origin = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + keys = [origin allKeys]; + + enumerator = [keys objectEnumerator]; + while ((key = [enumerator nextObject])) + { + if ([aDict objectForKey:key] == nil) + { + return NO; + } + } + + return YES; +} + +- (void)updateProjectDict +{ + Class projClass = [self builderClass]; + NSString *_file = nil; + NSString *key = nil; + NSDictionary *origin = nil; + NSArray *keys = nil; + NSEnumerator *enumerator = nil; + + _file = [[NSBundle bundleForClass:projClass] pathForResource:@"PC" + ofType:@"project"]; + + origin = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + keys = [origin allKeys]; + + enumerator = [keys objectEnumerator]; + while ((key = [enumerator nextObject])) + { + if ([projectDict objectForKey:key] == nil) + { + // Doesn't call setProjectDictObject:forKey for opimizations + [projectDict setObject:[origin objectForKey:key] forKey:key]; + } + } + + [self save]; +} + +- (void)validateProjectDict +{ + if ([self isValidDictionary:projectDict] == NO) + { + int ret = NSRunAlertPanel(@"Attention!", + @"The project file lacks some entries\nUpdate it automatically?", + @"Update",@"Leave",nil); + + if (ret == NSAlertDefaultReturn) + { + [self updateProjectDict]; + + NSRunAlertPanel(@"Project updated!", + @"The project file has been updated successfully!\nPlease make sure that all new project keys contain valid entries!", + @"OK",nil,nil); + } + } +} + +// ============================================================================ +// ==== Subprojects +// ============================================================================ + +- (NSArray *)loadedSubprojects +{ + return loadedSubprojects; +} + +- (PCProject *)activeSubproject +{ + return activeSubproject; +} + +- (BOOL)isSubproject +{ + return isSubproject; +} + +- (void)setIsSubproject:(BOOL)yn +{ + isSubproject = yn; +} + +- (PCProject *)superProject +{ + return superProject; +} + +- (void)setSuperProject:(PCProject *)project +{ + if (superProject != nil) + { + return; + } + + ASSIGN(superProject, project); + + // Assigning releases left part + ASSIGN(projectBrowser,[project projectBrowser]); + ASSIGN(projectLoadedFiles,[project projectLoadedFiles]); + ASSIGN(projectEditor,[project projectEditor]); + ASSIGN(projectWindow,[project projectWindow]); +} + +- (PCProject *)subprojectWithName:(NSString *)name +{ + int count = [loadedSubprojects count]; + int i; + PCProject *sp = nil; + NSString *spName = nil; + NSString *spFile = nil; + + // Subproject in project but not loaded + if ([[projectDict objectForKey:PCSubprojects] containsObject:name]) + { + PCLogInfo(self, @"{%@}Searching for loaded subproject: %@", + projectName, name); + // Search for subproject with name among loaded subprojects + for (i = 0; i < count; i++) + { + sp = [loadedSubprojects objectAtIndex:i]; + spName = [sp projectName]; + if ([spName isEqualToString:name]) + { + break; + } + sp = nil; + } + + // Subproject not found in array, load it + if (sp == nil) + { + spFile = [projectPath stringByAppendingPathComponent:name]; + spFile = [spFile stringByAppendingPathExtension:@"subproj"]; + spFile = [spFile stringByAppendingPathComponent:@"PC.project"]; + PCLogInfo(self, @"Not found! Load subproject: %@ at path: %@", + name, spFile); + sp = [projectManager loadProjectAt:spFile]; + if (sp) + { + [sp setIsSubproject:YES]; + [sp setSuperProject:self]; + [sp setProjectManager:projectManager]; + [loadedSubprojects addObject:sp]; + } + } + } + + return sp; +} + +- (void)addSubproject:(PCProject *)aSubproject +{ + NSMutableArray *_subprojects; + + if (!aSubproject) + { + return; + } + + _subprojects = [NSMutableArray + arrayWithArray:[projectDict objectForKey:PCSubprojects]]; + + [_subprojects addObject:[aSubproject projectName]]; + [loadedSubprojects addObject:aSubproject]; + [self setProjectDictObject:_subprojects forKey:PCSubprojects]; +} + +- (void)addSubprojectWithName:(NSString *)name +{ + NSMutableArray *_subprojects = nil; + + if (!name) + { + return; + } + + _subprojects = [NSMutableArray + arrayWithArray:[projectDict objectForKey:PCSubprojects]]; + [_subprojects addObject:name]; + [self setProjectDictObject:_subprojects forKey:PCSubprojects]; +} + +- (BOOL)removeSubprojectWithName:(NSString *)subprojectName +{ + NSString *extension = [subprojectName pathExtension]; + NSString *sName = subprojectName; + + if (extension && [extension isEqualToString:@"subproj"]) + { + sName = [subprojectName stringByDeletingPathExtension]; + } + + return [self removeSubproject:[self subprojectWithName:sName]]; +} + +- (BOOL)removeSubproject:(PCProject *)aSubproject +{ + if ([loadedSubprojects containsObject:aSubproject]) + { + [aSubproject close:self]; + [loadedSubprojects removeObject:aSubproject]; + } + + return YES; +} + +@end + +@implementation PCProject (CategoryPaths) +// TODO: Think about moving all category related methods into PCProjectBrowser + +- (NSArray *)contentAtCategoryPath:(NSString *)categoryPath +{ + NSString *key = [self keyForRootCategoryInCategoryPath:categoryPath]; + NSArray *pathArray = nil; + + pathArray = [categoryPath componentsSeparatedByString:@"/"]; + + PCLogInfo(self, @"{%@}{contentAtCategoryPath:} %@", + projectName, categoryPath); + + // Click on /Category + if ([pathArray count] == 2) + { + if ([projectManager activeProject] != self) + { + [projectManager setActiveProject:self]; + } + activeSubproject = nil; + } + + if ([categoryPath isEqualToString:@""] || [categoryPath isEqualToString:@"/"]) + { + if ([projectManager activeProject] != self) + { + [projectManager setActiveProject:self]; + } + return rootCategories; + } + else if ([key isEqualToString:PCSubprojects] && [pathArray count] > 2) + { // Click on "/Subprojects/Name+" + PCProject *_subproject = nil; + NSString *spCategoryPath = nil; + NSMutableArray *mCategoryPath = nil; + + mCategoryPath = [pathArray mutableCopy]; + + _subproject = [self subprojectWithName:[pathArray objectAtIndex:2]]; + activeSubproject = _subproject; + + [mCategoryPath removeObjectAtIndex:1]; + [mCategoryPath removeObjectAtIndex:1]; + + spCategoryPath = [mCategoryPath componentsJoinedByString:@"/"]; + + return [_subproject contentAtCategoryPath:spCategoryPath]; + } + + return [projectDict objectForKey:key]; +} + +- (BOOL)hasChildrenAtCategoryPath:(NSString *)categoryPath +{ + NSString *listEntry = nil; + NSString *categoryKey = nil; + NSString *category = nil; + PCProject *activeProject = [projectManager activeProject]; + + if (self != activeProject) + { + return [activeProject hasChildrenAtCategoryPath:categoryPath]; + } + + PCLogInfo(self, @"{%@} hasChildrenAtCategoryPath: %@", + [self projectName], categoryPath); + + listEntry = [[categoryPath componentsSeparatedByString:@"/"] lastObject]; + if ([rootCategories containsObject:listEntry]) + { + return YES; + } + + category = [projectBrowser nameOfSelectedCategory]; + categoryKey = [self keyForCategory:category]; + if ([categoryKey isEqualToString:PCSubprojects] + && [[projectDict objectForKey:PCSubprojects] containsObject:listEntry]) + { + return YES; + } + + return NO; +} + +- (NSString *)rootCategoryForCategoryPath:(NSString *)categoryPath +{ + NSArray *pathComponents = nil; + + if ([categoryPath isEqualToString:@"/"] || [categoryPath isEqualToString:@""]) + { + return nil; + } + + pathComponents = [categoryPath componentsSeparatedByString:@"/"]; + + return [pathComponents objectAtIndex:1]; +} + +- (NSString *)categoryForCategoryPath:(NSString *)categoryPath +{ + NSString *category = nil; + NSString *key = nil; + NSArray *pathComponents = nil; + int i = 0; + + category = [self rootCategoryForCategoryPath:categoryPath]; + if (category == nil) + { + return nil; + } + + key = [self keyForCategory:category]; + pathComponents = [categoryPath componentsSeparatedByString:@"/"]; + + if ([key isEqualToString:PCSubprojects]) + { + // /Subprojects/Name/Classes/Class.m, should return Classes + // 0 1 2 3 4 + // ("",Subprojects,Name,Classes,Class.m) + // 0 1 2 3 4 + // ("",Subprojects,Name,Subprojects,Name) + if ([pathComponents count] > 4 && activeSubproject) + { + i = [pathComponents count] - 1; + + for (; i >= 0; i--) + { + category = [pathComponents objectAtIndex:i]; + if ([[activeSubproject rootCategories] containsObject:category]) + { + return category; + } + } + } + } + + return category; +} + +- (NSString *)keyForRootCategoryInCategoryPath:(NSString *)categoryPath +{ + NSString *category = nil; + NSString *key = nil; + + if (categoryPath == nil + || [categoryPath isEqualToString:@""] + || [categoryPath isEqualToString:@"/"]) + { + return nil; + } + + category = [self rootCategoryForCategoryPath:categoryPath]; + key = [self keyForCategory:category]; + + PCLogInfo(self, @"{%@}(keyForRootCategoryInCategoryPath): %@ key:%@", + projectName, categoryPath, key); + + return key; +} + +- (NSString *)keyForCategoryPath:(NSString *)categoryPath +{ + return [self keyForCategory:[self categoryForCategoryPath:categoryPath]]; +} + +@end + diff --git a/PCLib/PCBrowserController.h b/Library/PCProjectBrowser.h similarity index 53% rename from PCLib/PCBrowserController.h rename to Library/PCProjectBrowser.h index 6f8e9a4..e08b77d 100644 --- a/PCLib/PCBrowserController.h +++ b/Library/PCProjectBrowser.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCBROWSERCONTROLLER_H @@ -33,34 +31,53 @@ extern NSString *PCBrowserDidSetPathNotification; @class PCProject; -@interface PCBrowserController : NSObject +@interface PCProjectBrowser : NSObject { - id browser; PCProject *project; + NSBrowser *browser; } +// ============================================================================ +// ==== Intialization & deallocation +// ============================================================================ + +- (id)initWithProject:(PCProject *)aProject; - (void)dealloc; +// ============================================================================ +// ==== Accessory methods +// ============================================================================ +- (NSView *)view; + +- (NSString *)nameOfSelectedFile; +- (NSString *)pathToSelectedFile; +- (NSString *)nameOfSelectedCategory; +- (NSString *)pathToSelectedCategory; +- (NSString *)nameOfSelectedRootCategory; + +- (NSArray *)selectedFiles; + +- (NSString *)path; +- (BOOL)setPath:(NSString *)path; +- (void)reloadLastColumn; + +// ============================================================================ +// ==== Actions +// ============================================================================ - (void)click:(id)sender; - (void)doubleClick:(id)sender; -- (BOOL)isEditableCategory:(NSString *)category file: (NSString *)title; - +// ============================================================================ +// ==== Notifications +// ============================================================================ - (void)projectDictDidChange:(NSNotification *)aNotif; -- (NSArray *)selectedFiles; -- (NSString *)nameOfSelectedFile; -- (NSString *)pathOfSelectedFile; - -- (void)setBrowser:(NSBrowser *)aBrowser; -- (void)setProject:(PCProject *)aProj; -- (BOOL)setPathForFile:(NSString *)file category:(NSString *)category; - @end -@interface PCBrowserController (ProjectBrowserDelegate) +@interface PCProjectBrowser (ProjectBrowserDelegate) -- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix; +- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column + inMatrix:(NSMatrix *)matrix; @end diff --git a/Library/PCProjectBrowser.m b/Library/PCProjectBrowser.m new file mode 100644 index 0000000..8433c66 --- /dev/null +++ b/Library/PCProjectBrowser.m @@ -0,0 +1,453 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCDefines.h" +#include "PCFileManager.h" +#include "PCProjectManager.h" +#include "PCProject.h" +#include "PCProjectBrowser.h" +#include "PCProjectEditor.h" + +#include "PCLogController.h" + +NSString *PCBrowserDidSetPathNotification = @"PCBrowserDidSetPathNotification"; + +@implementation PCProjectBrowser + +// ============================================================================ +// ==== Intialization & deallocation +// ============================================================================ + +- (id)initWithProject:(PCProject *)aProject +{ + if ((self = [super init])) + { + project = aProject; + + browser = [[NSBrowser alloc] initWithFrame:NSMakeRect(-1,251,562,128)]; + [browser setRefusesFirstResponder:YES]; + [browser setAutoresizingMask: NSViewWidthSizable | NSViewMinYMargin]; + [browser setTitled:NO]; + [browser setMaxVisibleColumns:4]; + [browser setSeparatesColumns:NO]; + [browser setAllowsMultipleSelection:YES]; + [browser setDelegate:self]; + [browser setTarget:self]; + [browser setAction:@selector(click:)]; + [browser setDoubleAction:@selector(doubleClick:)]; + [browser loadColumnZero]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(projectDictDidChange:) + name:PCProjectDictDidChangeNotification + object:nil]; + } + + return self; +} + +- (void)dealloc +{ + NSLog (@"PCProjectBrowser: dealloc"); + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + RELEASE(browser); + + [super dealloc]; +} + +// ============================================================================ +// ==== Accessory methods +// ============================================================================ + +- (NSView *)view +{ + return browser; +} + +// Returns nil if multiple files selected +- (NSString *)nameOfSelectedFile +{ + NSString *name = nil; + + if ([[browser selectedCells] count] == 1) + { + name = [[browser path] lastPathComponent]; + if ([name isEqualToString:[self nameOfSelectedCategory]]) + { + return nil; + } + } + + return name; +} + +// Returns nil if multiple files selected +- (NSString *)pathToSelectedFile +{ + NSString *name = nil; + NSString *path = nil; + + if ([[browser selectedCells] count] == 1) + { + name = [[browser path] lastPathComponent]; + if ([name isEqualToString:[self nameOfSelectedCategory]]) + { + path = nil; + } + else + { + path = [browser path]; + } + } + + return path; +} + +// Returns nil of multiple categories selected +- (NSString *)nameOfSelectedCategory +{ + NSString *name = nil; + NSArray *pathArray = [[browser path] componentsSeparatedByString:@"/"]; + PCProject *activeProject = [[project projectManager] activeProject]; + NSArray *rootCategories = [activeProject rootCategories]; + int i; + + if ([rootCategories containsObject:[pathArray lastObject]] + && [[browser selectedCells] count] > 1) + { + return nil; + } + + for (i = [pathArray count] - 1; i >= 0; i--) + { + if ([rootCategories containsObject:[pathArray objectAtIndex:i]]) + { + name = [pathArray objectAtIndex:i]; + break; + } + } + + return name; +} + +// Returns nil of multiple categories selected +- (NSString *)pathToSelectedCategory +{ + NSString *path = nil; + NSString *selectedCategory = [self nameOfSelectedCategory]; + NSMutableArray *bPathArray = nil; + int i; + + if (selectedCategory) + { + bPathArray = [NSMutableArray arrayWithArray:[[browser path] + componentsSeparatedByString:@"/"]]; + i = [bPathArray count] - 1; + while (![[bPathArray objectAtIndex:i] isEqualToString:selectedCategory]) + { + [bPathArray removeObjectAtIndex:i]; + i = [bPathArray count] - 1; + } + path = [bPathArray componentsJoinedByString:@"/"]; + } + + return path; +} + +- (NSString *)nameOfSelectedRootCategory +{ + NSString *categoryPath = [self pathToSelectedCategory]; + NSArray *pathComponents = nil; + + if ([categoryPath isEqualToString:@"/"] || [categoryPath isEqualToString:@""]) + { + return nil; + } + + pathComponents = [categoryPath componentsSeparatedByString:@"/"]; + + return [pathComponents objectAtIndex:1]; +} + +- (NSArray *)selectedFiles +{ + NSArray *cells = [browser selectedCells]; + NSMutableArray *files = [[NSMutableArray alloc] initWithCapacity: 1]; + int i; + int count = [cells count]; + PCProject *activeProject = [[project projectManager] activeProject]; + + // Return nil if categories selected + if ([cells count] == 0 + || [[activeProject rootCategories] + containsObject:[[cells objectAtIndex:0] stringValue]]) + { + return nil; + } + + for (i = 0; i < count; i++) + { + [files addObject: [[cells objectAtIndex: i] stringValue]]; + } + + return (NSArray *)files; +} + +- (NSString *)path +{ + return [browser path]; +} + +- (BOOL)setPath:(NSString *)path +{ + int selectedColumn; + NSMatrix *columnMatrix = nil; + BOOL res; + + if ([[browser path] isEqualToString: path]) + { + return YES; + } + + // HACK!!! NSBrowser needs fixing!!! + while ((selectedColumn = [browser selectedColumn]) >= 0) + { + columnMatrix = [browser matrixInColumn:selectedColumn]; + [columnMatrix deselectAllCells]; + } + // End of HACK + + PCLogInfo(self, @"[setPath]: %@", path); + + res = [browser setPath:path]; + + [[NSNotificationCenter defaultCenter] + postNotificationName:PCBrowserDidSetPathNotification + object:self]; + + return res; +} + +- (void)reloadLastColumn +{ + int column = [browser lastColumn]; + NSString *category = [self nameOfSelectedCategory]; + int selectedColumn = [browser selectedColumn]; + NSMatrix *colMatrix = [browser matrixInColumn:selectedColumn]; + int rowCount = 0, colCount = 0, spCount = 0; + PCProject *activeProject = [[project projectManager] activeProject]; + + [colMatrix getNumberOfRows:&rowCount columns:&colCount]; + spCount = [[[activeProject projectDict] objectForKey:PCSubprojects] count]; + + if ([category isEqualToString:@"Subprojects"] && rowCount != spCount + && ![[[browser selectedCell] stringValue] isEqualToString:@"Subprojects"]) + { + column = selectedColumn; + } + + [browser reloadColumn:column]; + + [[NSNotificationCenter defaultCenter] + postNotificationName:PCBrowserDidSetPathNotification + object:self]; +} + +// ============================================================================ +// ==== Actions +// ============================================================================ + +- (void)click:(id)sender +{ + NSUserDefaults *ud = nil; + NSString *category = nil; + NSString *fileName = nil; + NSString *filePath = nil; + NSString *key = nil; + PCProject *activeProject = nil; + + if (sender != browser) + { + return; + } + + if ([[sender selectedCell] isLeaf] && [[self selectedFiles] count] == 1) + { + ud = [NSUserDefaults standardUserDefaults]; + category = [self nameOfSelectedCategory]; + fileName = [[sender selectedCell] stringValue]; + + activeProject = [[project projectManager] activeProject]; + key = [activeProject keyForCategory:category]; + filePath = [activeProject dirForCategoryKey:key]; + filePath = [filePath stringByAppendingPathComponent:fileName]; + + PCLogInfo(self, @"[click] category: %@ filePath: %@", + category, filePath); + + if ([activeProject isEditableCategory:category]) + { + if (![[ud objectForKey:SeparateEditor] isEqualToString:@"YES"]) + { + [[project projectEditor] editorForFile:filePath + categoryPath:[browser path] + windowed:NO]; + } + } + } + + PCLogStatus(self, @"nameOfSelectedCategory: %@", + [self nameOfSelectedCategory]); + PCLogStatus(self, @"nameOfSelectedFile: %@", + [self nameOfSelectedFile]); + + [[NSNotificationCenter defaultCenter] + postNotificationName:PCBrowserDidSetPathNotification + object:self]; +} + +- (void)doubleClick:(id)sender +{ + id selectedCell; + + if (sender != browser) + { + return; + } + + selectedCell = [sender selectedCell]; + + if ([selectedCell isLeaf]) + { + NSString *category = [self nameOfSelectedCategory]; + NSString *fileName = [[sender selectedCell] stringValue]; + NSString *filePath = nil; + NSString *key = nil; + PCProject *activeProject = nil; + + activeProject = [[project projectManager] activeProject]; + key = [activeProject keyForCategory:category]; + filePath = [activeProject dirForCategoryKey:key]; + filePath = [filePath stringByAppendingPathComponent:fileName]; + + PCLogInfo(self, @"{doubleClick} filePath: %@", filePath); + + if ([activeProject isEditableCategory:category]) + { + [[project projectEditor] editorForFile:filePath + categoryPath:[browser path] + windowed:YES]; + } + else if ([[NSWorkspace sharedWorkspace] openFile:filePath] == NO) + { + NSRunAlertPanel(@"Attention!", + @"Could not open %@.", + @"OK",nil,nil,filePath); + } + } + else + { + if ([[selectedCell title] isEqualToString:@"Subprojects"]) + { + [[project projectManager] addSubproject]; + } + else + { + [[project projectManager] addProjectFiles]; + } + } +} + +// ============================================================================ +// ==== Notifications +// ============================================================================ + +- (void)projectDictDidChange:(NSNotification *)aNotif +{ + PCProject *changedProject = nil; + PCProject *activeProject = nil; + + if (!browser) + { + return; + } + + changedProject = [aNotif object]; + activeProject = [[project projectManager] activeProject]; + + if (changedProject == project || changedProject == activeProject) + { + [self reloadLastColumn]; + } +} + +@end + +@implementation PCProjectBrowser (ProjectBrowserDelegate) + +- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column + inMatrix:(NSMatrix *)matrix +{ + NSString *pathToCol = nil; + NSArray *files = nil; + int i = 0; + int count = 0; + + if (sender != browser || !matrix || ![matrix isKindOfClass:[NSMatrix class]]) + { + return; + } + + pathToCol = [sender pathToColumn:column]; + files = [project contentAtCategoryPath:pathToCol]; + if (files) + { + count = [files count]; + } + + for (i = 0; i < count; ++i) + { + NSMutableString *categoryPath = nil; + id cell; + + categoryPath = [NSMutableString stringWithString:pathToCol]; + + [matrix insertRow:i]; + + cell = [matrix cellAtRow:i column:0]; + [cell setStringValue:[files objectAtIndex:i]]; + + if (![categoryPath isEqualToString:@"/"]) + { + [categoryPath appendString:@"/"]; + } + [categoryPath appendString:[files objectAtIndex:i]]; + + [cell setLeaf:![project hasChildrenAtCategoryPath:categoryPath]]; + } +} + +@end diff --git a/Library/PCProjectBuilder.h b/Library/PCProjectBuilder.h new file mode 100644 index 0000000..51d24f3 --- /dev/null +++ b/Library/PCProjectBuilder.h @@ -0,0 +1,119 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCPROJECTBUILDER_H +#define _PCPROJECTBUILDER_H + +#include + +#ifndef GNUSTEP_BASE_VERSION +@protocol ProjectComponent; +#else +#include +#endif + +@class PCProject; +@class PCButton; + +@interface PCProjectBuilder : NSObject +{ + NSBox *componentView; + PCButton *buildButton; + PCButton *cleanButton; + PCButton *installButton; + PCButton *optionsButton; + id buildStatusField; + id targetField; + NSTextView *logOutput; + NSTextView *errorOutput; + + NSPopUpButton *popup; + + NSPanel *optionsPanel; + NSTextField *buildTargetHostField; + NSTextField *buildTargetArgsField; + + NSString *makePath; + + PCProject *currentProject; + NSDictionary *currentOptions; + + NSString *statusString; + NSMutableString *buildTarget; + NSMutableArray *buildArgs; + SEL postProcess; + NSTask *makeTask; + + NSFileHandle *readHandle; + NSFileHandle *errorReadHandle; + + BOOL _isBuilding; + BOOL _isCleaning; +} + +- (id)initWithProject:(PCProject *)aProject; +- (void)dealloc; + +- (NSView *)componentView; +- (void)setTooltips; + +// --- Accessory +- (BOOL)isBuilding; +- (BOOL)isCleaning; +- (void)performStartBuild; +- (void)performStartClean; +- (void)performStopBuild; + +// --- Actions +- (void)startBuild:(id)sender; +- (BOOL)stopBuild:(id)sender; +- (void)startClean:(id)sender; +- (void)build:(id)sender; +//- (void)buildDidTerminate; + +- (void)popupChanged:(id)sender; + +- (void)logStdOut:(NSNotification *)aNotif; +- (void)logErrOut:(NSNotification *)aNotif; + +- (void)copyPackageTo:(NSString *)path; + +@end + +@interface PCProjectBuilder (UserInterface) + +- (void) _createComponentView; +- (void) _createOptionsPanel; + +@end + +@interface PCProjectBuilder (BuildLogging) + +- (void)logString:(NSString *)string error:(BOOL)yn; +- (void)logString:(NSString *)string error:(BOOL)yn newLine:(BOOL)newLine; +- (void)logData:(NSData *)data error:(BOOL)yn; + +@end + +#endif diff --git a/Library/PCProjectBuilder.m b/Library/PCProjectBuilder.m new file mode 100644 index 0000000..a142d2f --- /dev/null +++ b/Library/PCProjectBuilder.m @@ -0,0 +1,795 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include + +#include "PCDefines.h" +#include "PCSplitView.h" +#include "PCButton.h" + +#include "PCProjectManager.h" +#include "PCProject.h" +#include "PCProjectBuilder.h" + +#include "PCLogController.h" + +#ifndef IMAGE +#define IMAGE(X) [NSImage imageNamed: X] +#endif + +#ifndef NOTIFICATION_CENTER +#define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter] +#endif + +@implementation PCProjectBuilder (UserInterface) + +- (void) _createComponentView +{ + NSSplitView *split; + NSScrollView *scrollView1; + NSScrollView *scrollView2; + id textField; + + componentView = [[NSBox alloc] initWithFrame: NSMakeRect(8,-1,464,322)]; + [componentView setTitlePosition: NSNoTitle]; + [componentView setBorderType: NSNoBorder]; + [componentView setAutoresizingMask: NSViewWidthSizable + | NSViewHeightSizable]; + [componentView setContentViewMargins: NSMakeSize (0.0, 0.0)]; + + /* + * 4 build Buttons + */ + buildButton = [[PCButton alloc] initWithFrame: NSMakeRect(0,271,43,43)]; + [buildButton setTitle: @"Build"]; + [buildButton setImage: IMAGE(@"Build")]; + [buildButton setAlternateImage: IMAGE(@"Stop")]; + [buildButton setTarget: self]; + [buildButton setAction: @selector(startBuild:)]; + [buildButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [buildButton setButtonType: NSToggleButton]; + [componentView addSubview: buildButton]; + RELEASE (buildButton); + + cleanButton = [[PCButton alloc] initWithFrame: NSMakeRect(44,271,43,43)]; + [cleanButton setTitle: @"Clean"]; + [cleanButton setImage: IMAGE(@"Clean")]; + [cleanButton setAlternateImage: IMAGE(@"Stop")]; + [cleanButton setTarget: self]; + [cleanButton setAction: @selector(startClean:)]; + [cleanButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [cleanButton setButtonType: NSToggleButton]; + [componentView addSubview: cleanButton]; + RELEASE (cleanButton); + + installButton = [[PCButton alloc] initWithFrame: NSMakeRect(88,271,43,43)]; + [installButton setTitle: @"Install"]; + [installButton setImage: IMAGE(@"Install")]; + [installButton setAlternateImage: IMAGE(@"Stop")]; + [installButton setTarget: self]; + [installButton setAction: @selector(startInstall:)]; + [installButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [installButton setButtonType: NSToggleButton]; + [componentView addSubview: installButton]; + RELEASE (installButton); + + optionsButton = [[PCButton alloc] initWithFrame: NSMakeRect(132,271,43,43)]; + [optionsButton setTitle: @"Options"]; + [optionsButton setImage: IMAGE(@"Options")]; + [optionsButton setTarget: self]; + [optionsButton setAction: @selector(showOptionsPanel:)]; + [optionsButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [optionsButton setButtonType: NSMomentaryPushButton]; + [componentView addSubview: optionsButton]; + RELEASE (optionsButton); + + /* + * Error and Log output + */ + scrollView1 = [[NSScrollView alloc] + initWithFrame:NSMakeRect (0, 0, 464, 120)]; + [scrollView1 setHasHorizontalScroller:NO]; + [scrollView1 setHasVerticalScroller:YES]; + [scrollView1 setBorderType: NSBezelBorder]; + [scrollView1 setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + + errorOutput = [[NSTextView alloc] + initWithFrame: [[scrollView1 contentView] frame]]; + [errorOutput setRichText: NO]; + [errorOutput setEditable: NO]; + [errorOutput setSelectable: YES]; + [errorOutput setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; + [errorOutput setBackgroundColor: [NSColor colorWithDeviceRed: 0.88 + green: 0.76 + blue: 0.60 + alpha: 1.0]]; + [errorOutput setHorizontallyResizable: NO]; + [errorOutput setVerticallyResizable: YES]; + [errorOutput setMinSize: NSMakeSize (0, 0)]; + [errorOutput setMaxSize: NSMakeSize (1E7, 1E7)]; + [[errorOutput textContainer] setContainerSize: + NSMakeSize ([errorOutput frame].size.width, 1e7)]; + + [[errorOutput textContainer] setWidthTracksTextView:YES]; + + [scrollView1 setDocumentView:errorOutput]; + RELEASE(errorOutput); + + /* + */ + scrollView2 = [[NSScrollView alloc] + initWithFrame:NSMakeRect (0, 0, 480, 133)]; + [scrollView2 setHasHorizontalScroller: NO]; + [scrollView2 setHasVerticalScroller: YES]; + [scrollView2 setBorderType: NSBezelBorder]; + [scrollView2 setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + + logOutput = [[NSTextView alloc] + initWithFrame:[[scrollView2 contentView] frame]]; + [logOutput setRichText:NO]; + [logOutput setEditable:NO]; + [logOutput setSelectable:YES]; + [logOutput setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; + [logOutput setBackgroundColor: [NSColor lightGrayColor]]; + [[logOutput textContainer] setWidthTracksTextView:YES]; + [[logOutput textContainer] setHeightTracksTextView:YES]; + [logOutput setHorizontallyResizable: NO]; + [logOutput setVerticallyResizable: YES]; + [logOutput setMinSize: NSMakeSize (0, 0)]; + [logOutput setMaxSize: NSMakeSize (1E7, 1E7)]; + [[logOutput textContainer] setContainerSize: + NSMakeSize ([logOutput frame].size.width, 1e7)]; + [[logOutput textContainer] setWidthTracksTextView:YES]; + + [scrollView2 setDocumentView:logOutput]; + RELEASE(logOutput); + + split = [[PCSplitView alloc] initWithFrame: NSMakeRect (0, 0, 464, 255)]; + [split setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; + + [split addSubview: scrollView1]; + RELEASE (scrollView1); + [split addSubview: scrollView2]; + RELEASE (scrollView2); + + [split adjustSubviews]; + [componentView addSubview: split]; + RELEASE (split); + + /* + * Target + */ + textField = [[NSTextField alloc] + initWithFrame: NSMakeRect (200, 293, 48, 21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setBezeled: NO]; + [textField setEditable: NO]; + [textField setSelectable: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Target:"]; + [textField setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [componentView addSubview: textField]; + RELEASE(textField); + + /* + * Target message + */ + targetField = [[NSTextField alloc] + initWithFrame:NSMakeRect(251, 293, 220, 21)]; + [targetField setAlignment: NSLeftTextAlignment]; + [targetField setBordered: NO]; + [targetField setEditable: NO]; + [targetField setBezeled: NO]; + [targetField setSelectable: NO]; + [targetField setDrawsBackground: NO]; + [targetField setStringValue: @"Default with args ' '"]; + [targetField setAutoresizingMask: (NSViewMaxXMargin | + NSViewWidthSizable | + NSViewMinYMargin)]; + [componentView addSubview:targetField]; + RELEASE (targetField); + + /* + * Status + */ + textField = [[NSTextField alloc] + initWithFrame: NSMakeRect (200, 270, 48, 21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setSelectable: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Status:"]; + [textField setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [componentView addSubview:textField]; + RELEASE(textField); + + /* + * Status message + */ + buildStatusField = [[NSTextField alloc] + initWithFrame: NSMakeRect (251, 270, 220, 21)]; + [buildStatusField setAlignment: NSLeftTextAlignment]; + [buildStatusField setBordered: NO]; + [buildStatusField setEditable: NO]; + [buildStatusField setSelectable: NO]; + [buildStatusField setBezeled: NO]; + [buildStatusField setDrawsBackground: NO]; + [buildStatusField setStringValue: @"Waiting..."]; + [buildStatusField setAutoresizingMask: (NSViewMaxXMargin | + NSViewWidthSizable | + NSViewMinYMargin)]; + [componentView addSubview: buildStatusField]; + RELEASE(buildStatusField); +} + +- (void) _createOptionsPanel +{ + NSView *cView = nil; + NSTextField *textField = nil; + + optionsPanel = [[NSPanel alloc] + initWithContentRect: NSMakeRect (100, 100, 300, 120) + styleMask: NSTitledWindowMask | NSClosableWindowMask + backing: NSBackingStoreBuffered + defer: YES]; + [optionsPanel setDelegate: self]; + [optionsPanel setReleasedWhenClosed: NO]; + [optionsPanel setTitle: @"Build Options"]; + cView = [optionsPanel contentView]; + + // Args + textField = [[NSTextField alloc] initWithFrame: NSMakeRect (8,91,60,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue: @"Arguments:"]; + [cView addSubview: textField]; + + RELEASE (textField); + + // Args message + buildTargetArgsField = [[NSTextField alloc] + initWithFrame: NSMakeRect (70, 91, 220, 21)]; + [buildTargetArgsField setAlignment: NSLeftTextAlignment]; + [buildTargetArgsField setBordered: NO]; + [buildTargetArgsField setEditable: YES]; + [buildTargetArgsField setBezeled: YES]; + [buildTargetArgsField setDrawsBackground: YES]; + [buildTargetArgsField setStringValue: @""]; + [buildTargetArgsField setDelegate: self]; + [buildTargetArgsField setTarget: self]; + [buildTargetArgsField setAction: @selector (setArguments:)]; + [cView addSubview: buildTargetArgsField]; + +// RELEASE (buildTargetArgsField); + + // Host + textField = [[NSTextField alloc] initWithFrame: NSMakeRect (8,67,60,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue: @"Host:"]; + [cView addSubview: textField]; + + RELEASE (textField); + + // Host message + buildTargetHostField = [[NSTextField alloc] + initWithFrame: NSMakeRect (70, 67, 220, 21)]; + [buildTargetHostField setAlignment: NSLeftTextAlignment]; + [buildTargetHostField setBordered: NO]; + [buildTargetHostField setEditable: YES]; + [buildTargetHostField setBezeled: YES]; + [buildTargetHostField setDrawsBackground: YES]; + [buildTargetHostField setStringValue: @"localhost"]; + [buildTargetHostField setDelegate: self]; + [buildTargetHostField setTarget: self]; + [buildTargetHostField setAction: @selector (setHost:)]; + [cView addSubview: buildTargetHostField]; + +// RELEASE (buildTargetArgsField); + + // Target + textField = [[NSTextField alloc] + initWithFrame: NSMakeRect (8, 40, 60, 21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setBezeled: NO]; + [textField setEditable: NO]; + [textField setSelectable: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue: @"Target:"]; + [textField setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [cView addSubview: textField]; + + RELEASE(textField); + + // Target popup + popup = [[NSPopUpButton alloc] + initWithFrame: NSMakeRect (70, 40, 220, 21)]; + [popup addItemWithTitle: @"Default"]; + [popup addItemWithTitle: @"Debug"]; + [popup addItemWithTitle: @"Profile"]; + [popup addItemWithTitle: @"Tarball"]; + [popup addItemWithTitle: @"RPM"]; + [popup setTarget: self]; + [popup setAction: @selector (popupChanged:)]; + [popup setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [cView addSubview: popup]; + + RELEASE (popup); +} + +@end + +@implementation PCProjectBuilder + +- (id)initWithProject:(PCProject *)aProject +{ + NSAssert(aProject, @"No project specified!"); + + PCLogInfo(self, @"initWithProject %@", [aProject projectName]); + + if ((self = [super init])) + { + currentProject = aProject; + makePath = [[aProject projectDict] objectForKey: PCBuildTool]; + + if ([makePath isEqualToString: @""]) + { + makePath = [NSString stringWithString: @"/usr/bin/make"]; + } + RETAIN(makePath); + + buildTarget = [[NSMutableString alloc] initWithString: @"Default"]; + buildArgs = [[NSMutableArray array] retain]; + postProcess = NULL; + makeTask = nil; + _isBuilding = NO; + _isCleaning = NO; + } + + return self; +} + +- (void)dealloc +{ + NSLog (@"PCProjectBuilder: dealloc"); + [buildTarget release]; + [buildArgs release]; + [makePath release]; + + PCLogInfo(self, @"componentView RC: %i", [componentView retainCount]); + PCLogInfo(self, @"RC: %i", [self retainCount]); + [componentView release]; + + [super dealloc]; +} + +- (NSView *)componentView +{ + if (!componentView) + { + [self _createComponentView]; + } + + return componentView; +} + +- (void)setTooltips +{ + [buildButton setShowTooltip:NO]; + [cleanButton setShowTooltip:NO]; + [installButton setShowTooltip:NO]; + [optionsButton setShowTooltip:NO]; +} + +// --- Accessory +- (BOOL)isBuilding +{ + return _isBuilding; +} + +- (BOOL)isCleaning +{ + return _isCleaning; +} + +- (void)performStartBuild +{ + if (!_isBuilding && !_isCleaning) + { + [buildButton performClick:self]; + } +} + +- (void)performStartClean +{ + if (!_isCleaning && !_isBuilding) + { + [cleanButton performClick:self]; + } +} + +- (void)performStopBuild +{ + if (_isBuilding) + { + [buildButton performClick:self]; + } + else if (_isCleaning) + { + [cleanButton performClick:self]; + } +} + +// --- GUI Actions +- (void)startBuild:(id)sender +{ + NSString *tFString = [targetField stringValue]; + NSArray *tFArray = [tFString componentsSeparatedByString: @" "]; + + if ([self stopBuild:self] == YES) + {// We've just stopped build process + return; + } + + [buildTarget setString: [tFArray objectAtIndex: 0]]; + + // Set build arguments + if ([buildTarget isEqualToString: @"Debug"]) + { + [buildArgs addObject: @"debug=yes"]; + } + else if ([buildTarget isEqualToString: @"Profile"]) + { + [buildArgs addObject: @"profile=yes"]; + [buildArgs addObject: @"static=yes"]; + } + else if ([buildTarget isEqualToString: @"Tarball"]) + { + [buildArgs addObject: @"dist"]; + } + else if ([buildTarget isEqualToString: @"RPM"]) + { + [buildArgs addObject: @"rpm"]; + postProcess = @selector (copyPackageTo:); + } + + statusString = [NSString stringWithString: @"Building..."]; + [buildTarget setString: @"Build"]; + [cleanButton setEnabled:NO]; + [installButton setEnabled:NO]; + [self build: self]; + _isBuilding = YES; +} + +- (BOOL)stopBuild:(id)sender +{ + // [makeTask isRunning] doesn't work here. + // "waitpid 7045, result -1, error No child processes" is printed. + if (makeTask) + { + PCLogStatus(self, @"task will terminate"); + [makeTask terminate]; + return YES; + } + + return NO; +} + +- (void)startClean:(id)sender +{ + if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] + objectForKey: PromptOnClean] isEqualToString: @"YES"]) + { + if (NSRunAlertPanel(@"Clean Project?", + @"Do you really want to clean project '%@'?", + @"Yes", + @"No", + nil, + [currentProject projectName]) + == NSAlertAlternateReturn) + { + [cleanButton setState: NSOffState]; + return; + } + } + [buildTarget setString: @"Clean"]; + statusString = [NSString stringWithString: @"Cleaning..."]; + [buildArgs addObject: @"distclean"]; + [buildButton setEnabled:NO]; + [installButton setEnabled:NO]; + [self build: self]; + _isCleaning = YES; +} + +- (void)startInstall:(id)sender +{ + [buildTarget setString: @"Install"]; + statusString = [NSString stringWithString: @"Installing..."]; + [buildArgs addObject: @"install"]; + [buildButton setEnabled:NO]; + [cleanButton setEnabled:NO]; + [self build: self]; +} + +- (void)showOptionsPanel:(id)sender +{ + if (!optionsPanel) + { + [self _createOptionsPanel]; + } + [optionsPanel orderFront: nil]; +} + +// --- Actions +- (void)build:(id)sender +{ + NSPipe *logPipe; + NSPipe *errorPipe; + NSDictionary *env = [[NSProcessInfo processInfo] environment]; + + // Support build options!!! + //NSDictionary *optionDict = [currentProject buildOptions]; + + // Checking prerequisites + if ([currentProject isProjectChanged]) + { + if (NSRunAlertPanel(@"Project Changed!", + @"Should it be saved first?", + @"Yes",@"No",nil) == NSAlertDefaultReturn) + { + [currentProject save]; + } + } + else + { + // Synchronize PC.project and generated files just for case + [currentProject save]; + } + + if( [buildTarget isEqualToString: @"RPM"] + && [env objectForKey:@"RPM_TOPDIR"] == nil ) + { + NSRunAlertPanel(@"Attention!", + @"First set the environment variable 'RPM_TOPDIR'!", + @"OK",nil,nil); + return; + } + + // Prepearing to building + logPipe = [NSPipe pipe]; + readHandle = [logPipe fileHandleForReading]; + [readHandle waitForDataInBackgroundAndNotify]; + + [NOTIFICATION_CENTER addObserver: self + selector: @selector (logStdOut:) + name: NSFileHandleDataAvailableNotification + object: readHandle]; + + errorPipe = [NSPipe pipe]; + errorReadHandle = [errorPipe fileHandleForReading]; + [errorReadHandle waitForDataInBackgroundAndNotify]; + + [NOTIFICATION_CENTER addObserver: self + selector: @selector (logErrOut:) + name: NSFileHandleDataAvailableNotification + object: errorReadHandle]; + + [buildStatusField setStringValue: statusString]; + + // Run make task + [logOutput setString: @""]; + [errorOutput setString: @""]; + + [NOTIFICATION_CENTER addObserver: self + selector: @selector (buildDidTerminate:) + name: NSTaskDidTerminateNotification + object: nil]; + + makeTask = [[NSTask alloc] init]; + [makeTask setArguments: buildArgs]; + [makeTask setCurrentDirectoryPath: [currentProject projectPath]]; + [makeTask setLaunchPath: makePath]; + + [makeTask setStandardOutput: logPipe]; + [makeTask setStandardError: errorPipe]; + + [makeTask launch]; +} + +- (void)buildDidTerminate:(NSNotification *)aNotif +{ + int status; + + if ([aNotif object] != makeTask) + { + return; + } + + [NOTIFICATION_CENTER removeObserver:self]; + + status = [makeTask terminationStatus]; + if (status == 0) + { + [self logString: + [NSString stringWithFormat: @"=== %@ succeeded!", buildTarget] + error: NO newLine: NO]; + [buildStatusField setStringValue: + [NSString stringWithFormat: + @"%@ - %@ succeeded...", [currentProject projectName], buildTarget]]; + } + else + { + [self logString: + [NSString stringWithFormat: @"=== %@ terminated!", buildTarget] + error: NO newLine: NO]; + [buildStatusField setStringValue: + [NSString stringWithFormat: + @"%@ - %@ terminated...", [currentProject projectName], buildTarget]]; + } + + // Rstore buttons state + if ([buildTarget isEqualToString: @"Build"]) + { + [buildButton setState: NSOffState]; + [cleanButton setEnabled: YES]; + [installButton setEnabled: YES]; + } + else if ([buildTarget isEqualToString: @"Clean"]) + { + [cleanButton setState: NSOffState]; + [buildButton setEnabled: YES]; + [installButton setEnabled: YES]; + } + else if ([buildTarget isEqualToString: @"Install"]) + { + [installButton setState: NSOffState]; + [buildButton setEnabled: YES]; + [cleanButton setEnabled: YES]; + } + + [buildArgs removeAllObjects]; + [buildTarget setString: @"Default"]; + + RELEASE(makeTask); + makeTask = nil; + + // Run post process if configured + if (status && postProcess) + { + [self performSelector: postProcess]; + postProcess = NULL; + } + + _isBuilding = NO; + _isCleaning = NO; +} + +- (void)popupChanged:(id)sender +{ + NSString *target = [targetField stringValue]; + + target = [NSString stringWithFormat: + @"%@ with args ' %@ '", + [popup titleOfSelectedItem], + [buildTargetArgsField stringValue]]; + + [targetField setStringValue: target]; + +} + +- (void)logStdOut:(NSNotification *)aNotif +{ + NSData *data; + + if ((data = [readHandle availableData])) + { + [self logData: data error: NO]; + } + + [readHandle waitForDataInBackgroundAndNotifyForModes: nil]; +} + +- (void)logErrOut:(NSNotification *)aNotif +{ + NSData *data; + + if ((data = [errorReadHandle availableData])) + { + [self logData:data error:YES]; + } + + [errorReadHandle waitForDataInBackgroundAndNotifyForModes:nil]; +} + +- (void)copyPackageTo:(NSString *)path +{ + NSString *source = nil; + NSString *dest = nil; + NSString *rpm = nil; + NSString *srcrpm = nil; + + // Copy the rpm files to the source directory + if (source) + { + [[NSFileManager defaultManager] copyPath:srcrpm toPath:dest handler:nil]; + [[NSFileManager defaultManager] copyPath:rpm toPath:dest handler:nil]; + } +} + +@end + +@implementation PCProjectBuilder (BuildLogging) + +- (void)logString: (NSString *)string + error: (BOOL)yn +{ + [self logString: string error: yn newLine: NO]; +} + +- (void)logString: (NSString *)str + error: (BOOL)yn + newLine: (BOOL)newLine +{ + NSTextView *out = (yn) ? errorOutput : logOutput; + + [out replaceCharactersInRange: + NSMakeRange ([[out string] length],0) withString: str]; + + if (newLine) + { + [out replaceCharactersInRange: + NSMakeRange ([[out string] length], 0) withString: @"\n"]; + } + else + { + [out replaceCharactersInRange: + NSMakeRange ([[out string] length], 0) withString: @" "]; + } + + [out scrollRangeToVisible: NSMakeRange([[out string] length], 0)]; + [out setNeedsDisplay: YES]; +} + +- (void)logData: (NSData *)data + error: (BOOL)yn +{ + NSString *s = [[NSString alloc] initWithData: data + encoding: [NSString defaultCStringEncoding]]; + + [self logString: s error: yn newLine: NO]; + RELEASE(s); +} + +@end + diff --git a/Library/PCProjectEditor.h b/Library/PCProjectEditor.h new file mode 100644 index 0000000..ff2e1ae --- /dev/null +++ b/Library/PCProjectEditor.h @@ -0,0 +1,111 @@ +/* + * PCProjectEditor.h created by probert on 2002-02-10 09:27:10 +0000 + * + * Project ProjectCenter + * + * Created with ProjectCenter - http://www.gnustep.org + * + * $Id$ + */ + +#ifndef _PCProjectEditor_h_ +#define _PCProjectEditor_h_ + +#include + +#include "PCProject.h" + +@class PCProject; +@class PCEditor; +@class PCEditorView; + +@class NSBox; +@class NSView; +@class NSScrollView; + +#ifndef GNUSTEP_BASE_VERSION +@protocol ProjectComponent; +#else +#include +#endif + +@interface PCProjectEditor : NSObject +{ + PCProject *project; + NSBox *componentView; + NSScrollView *scrollView; + + NSMutableDictionary *editorsDict; + PCEditor *activeEditor; +} + +// =========================================================================== +// ==== Class Methods +// =========================================================================== + ++ (PCEditor *)openFileInEditor:(NSString *)path; + +// =========================================================================== +// ==== Initialisation +// =========================================================================== + +- (id)initWithProject:(PCProject *)aProject; +- (void)dealloc; +- (NSView *)componentView; +- (PCProject *)project; + +// =========================================================================== +// ==== Project and Editor handling +// =========================================================================== + +- (PCEditor *)editorForFile:(NSString *)path + categoryPath:(NSString *)categoryPath + windowed:(BOOL)yn; +- (void)orderFrontEditorForFile:(NSString *)path; +- (PCEditor *)activeEditor; +- (void)setActiveEditor:(PCEditor *)anEditor; +- (NSArray *)allEditors; +- (void)closeActiveEditor:(id)sender; +- (void)closeEditorForFile:(NSString *)file; +- (BOOL)closeAllEditors; + +// =========================================================================== +// ==== File handling +// =========================================================================== + +- (BOOL)saveEditedFiles:(NSArray *)files; +- (BOOL)saveAllFiles; +- (BOOL)saveFile; +- (BOOL)saveFileAs:(NSString *)file; +- (BOOL)saveFileTo:(NSString *)file; +- (BOOL)revertFileToSaved; + +// =========================================================================== +// ==== Delegate +// =========================================================================== + +- (void)editorDidClose:(id)sender; +- (void)editorDidBecomeActive:(NSNotification *)aNotif; +- (void)editorDidResignActive:(NSNotification *)aNotif; + +@end + +extern NSString *PCEditorWillOpenNotification; +extern NSString *PCEditorDidOpenNotification; +extern NSString *PCEditorWillCloseNotification; +extern NSString *PCEditorDidCloseNotification; + +extern NSString *PCEditorDidBecomeActiveNotification; +extern NSString *PCEditorDidResignActiveNotification; + +/*extern NSString *PCEditorDidChangeNotification; +extern NSString *PCEditorWillSaveNotification; +extern NSString *PCEditorDidSaveNotification; +extern NSString *PCEditorSaveDidFailNotification; +extern NSString *PCEditorWillRevertNotification; +extern NSString *PCEditorDidRevertNotification; +extern NSString *PCEditorDeletedNotification; +extern NSString *PCEditorRenamedNotification;*/ + +#endif + diff --git a/Library/PCProjectEditor.m b/Library/PCProjectEditor.m new file mode 100644 index 0000000..9d32916 --- /dev/null +++ b/Library/PCProjectEditor.m @@ -0,0 +1,509 @@ +/* + * PCProjectEditor.m created by probert on 2002-02-10 09:27:09 +0000 + * + * Project ProjectCenter + * + * Created with ProjectCenter - http://www.gnustep.org + * + * $Id$ + */ + +#include "PCDefines.h" +#include "PCProjectWindow.h" +#include "PCProjectBrowser.h" +#include "PCProjectEditor.h" +#include "PCEditor.h" +#include "PCEditorView.h" +#include "ProjectComponent.h" + +#include "PCLogController.h" + +NSString *PCEditorDidOpenNotification = + @"PCEditorDidOpenNotification"; +NSString *PCEditorDidCloseNotification = + @"PCEditorDidCloseNotification"; + +NSString *PCEditorDidBecomeActiveNotification = + @"PCEditorDidBecomeActiveNotification"; +NSString *PCEditorDidResignActiveNotification = + @"PCEditorDidResignActiveNotification"; + +@interface PCProjectEditor (CreateUI) + +- (void) _createComponentView; + +@end + +@implementation PCProjectEditor (CreateUI) + +- (void) _createComponentView +{ + NSRect frame; + NSTextView *textView; + + frame = NSMakeRect(0,0,562,248); + componentView = [[NSBox alloc] initWithFrame:frame]; + [componentView setTitlePosition: NSNoTitle]; + [componentView setBorderType: NSNoBorder]; + [componentView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; + [componentView setContentViewMargins: NSMakeSize(0.0,0.0)]; + + frame = NSMakeRect (0, 0, 562, 40); + scrollView = [[NSScrollView alloc] initWithFrame:frame]; + [scrollView setHasHorizontalScroller: NO]; + [scrollView setHasVerticalScroller: YES]; + [scrollView setBorderType: NSBezelBorder]; + [scrollView setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)]; + + // This is a placeholder! + frame = [[scrollView contentView] frame]; + textView = [[NSTextView alloc] initWithFrame:frame]; + [textView setMinSize: NSMakeSize (0, 0)]; + [textView setMaxSize: NSMakeSize(1e7, 1e7)]; + [textView setRichText: NO]; + [textView setEditable: NO]; + [textView setSelectable: YES]; + [textView setVerticallyResizable: YES]; + [textView setHorizontallyResizable: NO]; + [textView setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)]; + [[textView textContainer] setWidthTracksTextView: YES]; + [scrollView setDocumentView: textView]; + RELEASE(textView); + + frame.size = NSMakeSize([scrollView contentSize].width,1e7); + [[textView textContainer] setContainerSize:frame.size]; + + [componentView setContentView:scrollView]; +// RELEASE(scrollView); + + [componentView sizeToFit]; +} + +@end + +@implementation PCProjectEditor +// =========================================================================== +// ==== Class Methods +// =========================================================================== + ++ (PCEditor *)openFileInEditor:(NSString *)path +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + NSString *editor = [ud objectForKey:Editor]; + + if (![editor isEqualToString:@"ProjectCenter"]) + { +// NSTask *editorTask; + NSArray *ea = [editor componentsSeparatedByString:@" "]; +// NSMutableArray *args = [NSMutableArray arrayWithArray:ea]; + NSString *app = [ea objectAtIndex: 0]; + + if ([[app pathExtension] isEqualToString:@"app"]) + { + BOOL ret = [[NSWorkspace sharedWorkspace] openFile:path + withApplication:app]; + + if (ret == NO) + { + PCLogError(self, @"Could not open %@ using %@", path, app); + } + + return nil; + } + + editor = [[PCEditor alloc] initExternalEditor:editor + withPath:path + projectEditor:self]; +/* editorTask = [[NSTask alloc] init]; + [editorTask setLaunchPath:app]; + [args removeObjectAtIndex:0]; + [args addObject:path]; + [editorTask setArguments:args]; + + AUTORELEASE(editorTask); + [editorTask launch];*/ + } + else + { + PCEditor *editor; + + editor = [[PCEditor alloc] initWithPath:path + categoryPath:nil + projectEditor:self]; + [editor setWindowed:YES]; + [editor show]; + + return editor; + } + + return nil; +} + +// =========================================================================== +// ==== Initialisation +// =========================================================================== + +- (id)initWithProject: (PCProject *)aProject +{ + NSAssert(aProject, @"No project specified!"); + + if ((self = [super init])) + { + PCLogStatus(self, @"[init]"); + project = aProject; + componentView = nil; + editorsDict = [[NSMutableDictionary alloc] init]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(editorDidClose:) + name:PCEditorDidCloseNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(editorDidBecomeActive:) + name:PCEditorDidBecomeActiveNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(editorDidResignActive:) + name:PCEditorDidResignActiveNotification + object:nil]; + } + + return self; +} + +- (void)dealloc +{ + NSLog (@"PCProjectEditor: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + if (componentView) + { + RELEASE(componentView); + } + + [self closeAllEditors]; + RELEASE(editorsDict); + + [super dealloc]; +} + +- (NSView *)componentView +{ + if (componentView == nil) + { + [self _createComponentView]; + } + + return componentView; +} + +- (PCProject *)project +{ + return project; +} + +// =========================================================================== +// ==== Project and Editor handling +// =========================================================================== + +- (PCEditor *)editorForFile:(NSString *)path + categoryPath:(NSString *)categoryPath + windowed:(BOOL)yn +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + NSString *ed = [ud objectForKey:Editor]; + PCEditor *editor; + + if (![ed isEqualToString:@"ProjectCenter"]) + { + editor = [[PCEditor alloc] initExternalEditor:ed + withPath:path + projectEditor:self]; + return editor; + } + + if (!(editor = [editorsDict objectForKey:path])) + { + editor = [[PCEditor alloc] initWithPath:path + categoryPath:categoryPath + projectEditor:self]; + [componentView setContentView:[editor componentView]]; + [[project projectWindow] makeFirstResponder:[editor editorView]]; + + [editorsDict setObject:editor forKey:path]; + RELEASE(editor); + } + + [editor setWindowed:yn]; + if (yn) + { + [editor show]; + } + + return editor; +} + +- (void)orderFrontEditorForFile:(NSString *)path +{ + PCEditor *editor = [editorsDict objectForKey:path]; + + NSLog(@"PCProjectEditor: orderFrontEditorForFile"); + + if ([editor isWindowed]) + { + [editor show]; + } + else + { + [componentView setContentView:[editor componentView]]; + [[project projectWindow] makeFirstResponder:[editor editorView]]; + } +} + +- (void)setActiveEditor:(PCEditor *)anEditor +{ + if (anEditor != activeEditor) + { + activeEditor = anEditor; + } +} + +- (PCEditor *)activeEditor +{ + return activeEditor; +} + +- (NSArray *)allEditors +{ + return [editorsDict allValues]; +} + +- (void)closeActiveEditor:(id)sender +{ + [[self activeEditor] closeFile:self save:YES]; +} + +- (void)closeEditorForFile:(NSString *)file +{ + PCEditor *editor; + + editor = [editorsDict objectForKey:file]; + [editor closeFile:self save:YES]; + [editorsDict removeObjectForKey:file]; +} + +- (BOOL)closeAllEditors +{ + NSEnumerator *enumerator = [editorsDict keyEnumerator]; + PCEditor *editor; + NSString *key; + NSMutableArray *editedFiles = [[NSMutableArray alloc] init]; + + while ((key = [enumerator nextObject])) + { + editor = [editorsDict objectForKey:key]; + if ([editor isEdited]) + { + [editedFiles addObject:[key lastPathComponent]]; + } + else + { + [editor closeFile:self save:YES]; + } + } + + // Order panel with list of changed files + if ([editedFiles count]) + { + if ([self saveEditedFiles:(NSArray *)editedFiles] == NO) + { + return NO; + } + } + + [editorsDict removeAllObjects]; + + return YES; +} + +// =========================================================================== +// ==== File handling +// =========================================================================== + +- (BOOL)saveEditedFiles:(NSArray *)files +{ + int ret; + + ret = NSRunAlertPanel(@"Alert", + @"Project has modified files\n%@", + @"Save and Close",@"Close",@"Don't close", + files); + switch (ret) + { + case NSAlertDefaultReturn: + if ([self saveAllFiles] == NO) + { + return NO; + } + break; + + case NSAlertAlternateReturn: + // Close files without saving + break; + + case NSAlertOtherReturn: + return NO; + break; + } + + return YES; +} + +- (BOOL)saveAllFiles +{ + NSEnumerator *enumerator = [editorsDict keyEnumerator]; + PCEditor *editor; + NSString *key; + BOOL ret = YES; + + while ((key = [enumerator nextObject])) + { + editor = [editorsDict objectForKey:key]; + + if ([editor saveFileIfNeeded] == NO) + { + ret = NO; + } + } + + return ret; +} + +- (BOOL)saveFile +{ + PCEditor *editor = [self activeEditor]; + + if (editor != nil) + { + return [editor saveFileIfNeeded]; + } + + return NO; +} + +- (BOOL)saveFileAs:(NSString *)file +{ + PCEditor *editor = [self activeEditor]; + + if (editor != nil) + { + BOOL res; + BOOL iw = [editor isWindowed]; + NSString *categoryPath = [editor categoryPath]; + + res = [editor saveFileTo:file]; + [editor closeFile:self save:NO]; + + [self editorForFile:file categoryPath:categoryPath windowed:iw]; + + return res; + } + + return NO; +} + +- (BOOL)saveFileTo:(NSString *)file +{ + PCEditor *editor = [self activeEditor]; + + if (editor != nil) + { + return [editor saveFileTo:file]; + } + + return NO; +} + +- (BOOL)revertFileToSaved +{ + PCEditor *editor = [self activeEditor]; + + if (editor != nil) + { + return [editor revertFileToSaved]; + } + + return NO; +} + +// =========================================================================== +// ==== Notifications +// =========================================================================== + +- (void)editorDidClose:(NSNotification *)aNotif +{ + PCEditor *editor = [aNotif object]; + + // It is not our editor + if ([editorsDict objectForKey:[editor path]] != editor) + { + return; + } + + [editorsDict removeObjectForKey:[editor path]]; + + if ([editorsDict count]) + { + NSString *lastEditorKey = [[editorsDict allKeys] lastObject]; + PCEditor *lastEditor = [editorsDict objectForKey:lastEditorKey]; + + lastEditorKey = [[editorsDict allKeys] lastObject]; + [componentView setContentView:[lastEditor componentView]]; +// [[project projectWindow] makeFirstResponder:[lastEditor editorView]]; + [self setActiveEditor:lastEditor]; + } + else + { +// [[project projectWindow] makeFirstResponder:scrollView]; + [componentView setContentView:scrollView]; + [self setActiveEditor:nil]; + } +} + +- (void)editorDidBecomeActive:(NSNotification *)aNotif +{ + PCEditor *editor = [aNotif object]; + NSString *categoryPath = nil; + + NSLog(@"PCPE: editorDidBecomeActive: %@", [editor path]); + + if ([editorsDict objectForKey:[editor path]] != editor + || activeEditor == editor) + { + return; + } + + categoryPath = [editor categoryPath]; + + [self setActiveEditor:editor]; + + if (categoryPath) + { + PCLogInfo(self, @"set browser path: %@", categoryPath); + [[project projectBrowser] setPath:categoryPath]; + } +} + +- (void)editorDidResignActive:(NSNotification *)aNotif +{ + [self setActiveEditor:nil]; +} + +@end + diff --git a/Library/PCProjectInspector.h b/Library/PCProjectInspector.h new file mode 100644 index 0000000..8954748 --- /dev/null +++ b/Library/PCProjectInspector.h @@ -0,0 +1,159 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCProjectInspector_h_ +#define _PCProjectInspector_h_ + +@class PCProjectManager; +@class PCProjectBrowser; + +@interface PCFileNameField : NSTextField +{ +} + +- (void)setEditableField:(BOOL)yn; +- (BOOL)textShouldSetEditable; + +@end + +@interface PCProjectInspector : NSObject +{ + PCProjectManager *projectManager; + PCProject *project; + NSDictionary *projectDict; + + IBOutlet NSPanel *inspectorPanel; + IBOutlet NSBox *contentView; + IBOutlet NSPopUpButton *inspectorPopup; + IBOutlet NSBox *inspectorView; + + // Build Attributes + IBOutlet NSBox *buildAttributesView; + IBOutlet NSTextField *projectNameLabel; + IBOutlet NSPopUpButton *searchOrderPopup; + IBOutlet NSScrollView *searchOrderScroll; + NSTableView *searchOrderList; + NSTableColumn *searchOrderColumn; + NSMutableArray *searchItems; + NSArray *searchHeaders; + NSArray *searchLibs; + IBOutlet NSTextField *searchOrderTF; + IBOutlet NSButton *searchOrderSet; + IBOutlet NSButton *searchOrderRemove; + IBOutlet NSButton *searchOrderAdd; + IBOutlet NSTextField *cppOptField; + IBOutlet NSTextField *objcOptField; + IBOutlet NSTextField *cOptField; + IBOutlet NSTextField *ldOptField; + IBOutlet NSTextField *installPathField; + IBOutlet NSTextField *toolField; + + // Project Attributes + // Suuplied by concrete project + NSView *projectAttributesView; + + // Project Description + IBOutlet NSBox *projectDescriptionView; + IBOutlet NSTextField *descriptionField; + IBOutlet NSTextField *releaseField; + IBOutlet NSTextField *licenseField; + IBOutlet NSTextField *licDescriptionField; + IBOutlet NSTextField *urlField; + NSTableView *authorsList; + NSTableColumn *authorsColumn; + IBOutlet NSScrollView *authorsScroll; + NSMutableArray *authorsItems; + IBOutlet NSButton *authorAdd; + IBOutlet NSButton *authorRemove; + IBOutlet NSButton *authorUp; + IBOutlet NSButton *authorDown; + + // File Attributes + IBOutlet NSBox *fileAttributesView; + IBOutlet NSImageView *fileIconView; + IBOutlet PCFileNameField *fileNameField; + NSString *fileName; +} + +// ============================================================================ +// ==== Intialization & deallocation +// ============================================================================ +- (id)initWithProjectManager:(PCProjectManager *)manager; +- (void)close; +- (void)dealloc; + +// ============================================================================ +// ==== Panel and contents +// ============================================================================ +- (BOOL)loadPanel; +- (NSPanel *)panel; +- (NSView *)contentView; + +// ============================================================================ +// ==== Actions +// ============================================================================ +- (void)inspectorPopupDidChange:(id)sender; +- (void)changeCommonProjectEntry:(id)sender; +- (void)selectSectionWithTitle:(NSString *)sectionTitle; + +// ============================================================================ +// ==== Notifications +// ============================================================================ +- (void)activeProjectDidChange:(NSNotification *)aNotif; +- (void)updateValues:(NSNotification *)aNotif; + +// ============================================================================ +// ==== Build Attributes +// ============================================================================ +- (void)createBuildAttributes; + +// ---------------------------------------------------------------------------- +// --- Search Order +// ---------------------------------------------------------------------------- +- (void)searchOrderPopupDidChange:(id)sender; +- (void)searchOrderDoubleClick:(id)sender; +- (void)searchOrderClick:(id)sender; +- (void)setSearchOrderButtonsState; +- (void)setSearchOrder:(id)sender; +- (void)removeSearchOrder:(id)sender; +- (void)addSearchOrder:(id)sender; +- (void)syncSearchOrder; + +// ============================================================================ +// ==== Project Description +// ============================================================================ +- (void)createProjectDescription; + +// ============================================================================ +// ==== File Attributes +// ============================================================================ +- (void)createFileAttributes; + +- (void)beginFileRename; +- (void)browserDidSetPath:(NSNotification *)aNotif; +- (void)setFANameAndIcon:(PCProjectBrowser *)browser; + +@end + +#endif diff --git a/Library/PCProjectInspector.m b/Library/PCProjectInspector.m new file mode 100644 index 0000000..d2cb22d --- /dev/null +++ b/Library/PCProjectInspector.m @@ -0,0 +1,804 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCDefines.h" +#include "PCProjectManager.h" +#include "PCProject.h" +#include "PCProjectBrowser.h" +#include "PCProjectWindow.h" +#include "PCProjectInspector.h" + +#include "PCLogController.h" + +@implementation PCFileNameField + +- (void)setEditableField:(BOOL)yn +{ + NSRect frame = [self frame]; + + if ([self textShouldSetEditable] == NO) + { + return; + } + + if (yn == YES) + { + frame.size.width += 4; + frame.origin.x -= 4; + [self setFrame:frame]; + + [self setBordered:YES]; + [self setBackgroundColor:[NSColor whiteColor]]; + [self setEditable:YES]; + [self setNeedsDisplay:YES]; + [[self superview] setNeedsDisplay:YES]; + } + else + { + frame.size.width -= 4; + frame.origin.x += 4; + [self setFrame:frame]; + + [self setBackgroundColor:[NSColor lightGrayColor]]; + [self setBordered:NO]; + [self setEditable:NO]; + [self setNeedsDisplay:YES]; + [[self superview] setNeedsDisplay:YES]; + } +} + +- (void)mouseDown:(NSEvent *)theEvent +{ + [self setEditableField:YES]; + [super mouseDown:theEvent]; +} + +- (BOOL)textShouldSetEditable +{ + NSString *text = [self stringValue]; + + if ([text isEqualToString:@"No files selected"] + || [text isEqualToString:@"Multiple files selected"]) + { + return NO; + } + + return YES; +} + +- (void)textDidEndEditing:(NSNotification *)aNotification +{ + [self setEditableField:NO]; + [super textDidEndEditing:aNotification]; +} + +@end + +@implementation PCProjectInspector + +// ============================================================================ +// ==== Intialization & deallocation +// ============================================================================ + +- (id)initWithProjectManager:(PCProjectManager *)manager +{ + projectManager = manager; + + [self loadPanel]; + + // Track project switching + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(activeProjectDidChange:) + name:PCActiveProjectDidChangeNotification + object:nil]; + + [self inspectorPopupDidChange:inspectorPopup]; + + return self; +} + +- (void)close +{ + [inspectorPanel performClose:self]; +} + +- (void)dealloc +{ + NSLog (@"PCProjectInspector: dealloc"); + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + RELEASE(buildAttributesView); + RELEASE(projectAttributesView); + RELEASE(projectDescriptionView); + RELEASE(fileAttributesView); + + RELEASE(inspectorPanel); + RELEASE(fileName); + + [super dealloc]; +} + +// ============================================================================ +// ==== Panel & contents +// ============================================================================ + +- (BOOL)loadPanel +{ + if ([NSBundle loadNibNamed:@"ProjectInspector" owner:self] == NO) + { + PCLogError(self, @"error loading NIB file!"); + return NO; + } + + // Panel + [inspectorPanel setFrameAutosaveName:@"ProjectInspector"]; + [inspectorPanel setFrameUsingName:@"ProjectInspector"]; + + // PopUp + [inspectorPopup removeAllItems]; + [inspectorPopup addItemWithTitle:@"Build Attributes"]; + [inspectorPopup addItemWithTitle:@"Project Attributes"]; + [inspectorPopup addItemWithTitle:@"Project Description"]; + [inspectorPopup addItemWithTitle:@"File Attributes"]; + [inspectorPopup selectItemAtIndex:0]; + + // Build Attributes + [self createBuildAttributes]; + + // Project Description + [self createProjectDescription]; + + // File Attributes + [self createFileAttributes]; + + [self activeProjectDidChange:nil]; + + return YES; +} + +- (NSPanel *)panel +{ + if (!inspectorPanel && ([self loadPanel] == NO)) + { + return nil; + } + + return inspectorPanel; +} + +- (NSView *)contentView +{ + if (!contentView && ([self loadPanel] == NO)) + { + return nil; + } + + return contentView; +} + +// ============================================================================ +// ==== Actions +// ============================================================================ + +- (void)inspectorPopupDidChange:(id)sender +{ + switch([sender indexOfSelectedItem]) + { + case 0: + [inspectorView setContentView:buildAttributesView]; + break; + case 1: + [inspectorView setContentView: projectAttributesView]; + break; + case 2: + [inspectorView setContentView: projectDescriptionView]; + break; + case 3: + [inspectorView setContentView:fileAttributesView]; + break; + } + + [inspectorView display]; +} + +- (void)changeCommonProjectEntry:(id)sender +{ + NSString *newEntry = [sender stringValue]; + + // Build Atributes + if (sender == installPathField + && ![[[project projectDict] objectForKey:PCInstallDir] isEqualToString:newEntry]) + { + [project setProjectDictObject:newEntry forKey:PCInstallDir]; + } + else if (sender == toolField) + { + [project setProjectDictObject:newEntry forKey:PCBuildTool]; + + if (![[NSFileManager defaultManager] isExecutableFileAtPath:newEntry]) + { + NSRunAlertPanel(@"Build Tool Error!", + @"No valid executable found at '%@'!", + @"OK",nil,nil,newEntry); + } + } + else if (sender == cppOptField) + { + [project setProjectDictObject:newEntry forKey:PCPreprocessorOptions]; + } + else if (sender == objcOptField) + { + [project setProjectDictObject:newEntry forKey:PCObjCCompilerOptions]; + } + else if (sender == cOptField) + { + [project setProjectDictObject:newEntry forKey:PCCompilerOptions]; + } + else if ( sender == ldOptField ) + { + [project setProjectDictObject:newEntry forKey:PCLinkerOptions]; + } + // Project Description + else if ( sender == descriptionField ) + { + [project setProjectDictObject:newEntry forKey:PCDescription]; + } + else if ( sender == releaseField ) + { + [project setProjectDictObject:newEntry forKey:PCRelease]; + } + else if ( sender == licenseField ) + { + [project setProjectDictObject:newEntry forKey:PCCopyright]; + } + else if ( sender == licDescriptionField ) + { + [project setProjectDictObject:newEntry forKey:PCCopyrightDescription]; + } + else if ( sender == urlField ) + { + [project setProjectDictObject:newEntry forKey:PCURL]; + } +} + +- (void)selectSectionWithTitle:(NSString *)sectionTitle +{ + [inspectorPopup selectItemWithTitle:sectionTitle]; + [self inspectorPopupDidChange:inspectorPopup]; +} + +// ============================================================================ +// ==== Notifications +// ============================================================================ + +- (void)activeProjectDidChange:(NSNotification *)aNotif +{ + project = [projectManager activeProject]; + projectDict = [project projectDict]; + + PCLogStatus(self, @"Active projectChanged to %@", + [[project projectDict] objectForKey:PCProjectName]); + + [inspectorPanel setTitle: [NSString stringWithFormat: + @"%@ - Project Inspector", [project projectName]]]; + + // 1. Get custom project attributes view + projectAttributesView = [project projectAttributesView]; + + // 2. Update values in UI elements + [self updateValues:nil]; + + // 3. Display current view + [self inspectorPopupDidChange:inspectorPopup]; +} + +- (void)updateValues:(NSNotification *)aNotif +{ + // Build Attributes view + searchHeaders = [projectDict objectForKey:PCSearchHeaders]; + searchLibs = [projectDict objectForKey:PCSearchLibs]; + [self searchOrderPopupDidChange:searchOrderPopup]; + + [projectNameLabel setStringValue:[project projectName]]; + + [cppOptField setStringValue: + [projectDict objectForKey:PCPreprocessorOptions]]; + [objcOptField setStringValue: + [projectDict objectForKey:PCObjCCompilerOptions]]; + [cOptField setStringValue: + [projectDict objectForKey:PCCompilerOptions]]; + [ldOptField setStringValue: + [projectDict objectForKey:PCLinkerOptions]]; + [installPathField setStringValue: + [projectDict objectForKey:PCInstallDir]]; + [toolField setStringValue: + [projectDict objectForKey:PCBuildTool]]; + + // Project Description view + [descriptionField setStringValue: + [projectDict objectForKey:PCDescription]]; + [releaseField setStringValue: + [projectDict objectForKey:PCRelease]]; + [licenseField setStringValue: + [projectDict objectForKey:PCCopyright]]; + [licDescriptionField setStringValue: + [projectDict objectForKey:PCCopyrightDescription]]; + [urlField setStringValue: + [projectDict objectForKey:PCURL]]; + + authorsItems = [projectDict objectForKey:PCAuthors]; + [authorsList reloadData]; + + // File Attributes view + [self setFANameAndIcon:[project projectBrowser]]; +} + +// ============================================================================ +// ==== Build Attributes +// ============================================================================ + +- (void)createBuildAttributes +{ + if (buildAttributesView) + { + return; + } + + if ([NSBundle loadNibNamed:@"BuildAttributes" owner:self] == NO) + { + PCLogError(self, @"error loading BuildAttributes NIB file!"); + return; + } + + // Search Order + // Popup + [searchOrderPopup removeAllItems]; + [searchOrderPopup addItemWithTitle:@"Header Directories Search Order"]; + [searchOrderPopup addItemWithTitle:@"Library Directories Search Order"]; + [searchOrderPopup addItemWithTitle:@"Framework Directories Search Order"]; + [searchOrderPopup selectItemAtIndex:0]; + + // Table column + searchOrderColumn = [[NSTableColumn alloc] initWithIdentifier: @"SO List"]; + [searchOrderColumn setEditable:NO]; + + // Table + searchOrderList = [[NSTableView alloc] + initWithFrame:NSMakeRect(0,0,290,99)]; + [searchOrderList setAllowsMultipleSelection:NO]; + [searchOrderList setAllowsColumnReordering:NO]; + [searchOrderList setAllowsColumnResizing:NO]; + [searchOrderList setAllowsEmptySelection:YES]; + [searchOrderList setAllowsColumnSelection:NO]; + [searchOrderList setCornerView:nil]; + [searchOrderList setHeaderView:nil]; + [searchOrderList addTableColumn:searchOrderColumn]; + [searchOrderList setDataSource:self]; + [searchOrderList setDrawsGrid:NO]; + [searchOrderList setTarget:self]; + [searchOrderList setDoubleAction:@selector(searchOrderDoubleClick:)]; + [searchOrderList setAction:@selector(searchOrderClick:)]; + + // ScrollView + [searchOrderScroll setDocumentView:searchOrderList]; + [searchOrderScroll setHasHorizontalScroller:NO]; + [searchOrderScroll setHasVerticalScroller:YES]; + [searchOrderScroll setBorderType:NSBezelBorder]; + RELEASE(searchOrderList); + + // Buttons + [self setSearchOrderButtonsState]; + + [cppOptField setNextText:objcOptField]; + [objcOptField setNextText:cOptField]; + [cOptField setNextText:ldOptField]; + [ldOptField setNextText:installPathField]; + [installPathField setNextText:toolField]; + [toolField setNextText:cppOptField]; + + // Retain view + [buildAttributesView retain]; +} + +// --- Search Order +- (void)searchOrderPopupDidChange:(id)sender +{ + NSString *selectedTitle = [sender titleOfSelectedItem]; + + if ([selectedTitle isEqualToString: @"Header Directories Search Order"]) + { + ASSIGN(searchItems, searchHeaders); + } + else if ([selectedTitle isEqualToString: @"Library Directories Search Order"]) + { + ASSIGN(searchItems, searchLibs); + } + else + { + ASSIGN(searchItems,nil); + } + + // Enable/disable buttons according to selected/not selected item + [self setSearchOrderButtonsState]; + + [searchOrderList reloadData]; +} + +- (void)searchOrderDoubleClick:(id)sender +{ +} + +- (void)searchOrderClick:(id)sender +{ + // Warning! NSTableView doesn't call action method + // TODO: Fix NSTableView (NSCell/NSActionCell?) + [self setSearchOrderButtonsState]; +} + +- (void)setSearchOrderButtonsState +{ + // Disable until implemented + [searchOrderSet setEnabled:NO]; + + return; // See searchOrderClick + + if ([searchOrderList selectedRow] == -1) + { + [searchOrderRemove setEnabled:NO]; + } + else + { + [searchOrderRemove setEnabled:YES]; + } +} + +- (void)setSearchOrder:(id)sender +{ +} + +- (void)removeSearchOrder:(id)sender +{ + int row = [searchOrderList selectedRow]; + + if (row != -1) + { + [searchItems removeObjectAtIndex:row]; + [self syncSearchOrder]; + + [searchOrderList reloadData]; + } +} + +- (void)addSearchOrder:(id)sender +{ + NSString *value = [searchOrderTF stringValue]; + + [searchItems addObject:value]; + [searchOrderTF setStringValue:@""]; + [self syncSearchOrder]; + + [searchOrderList reloadData]; +} + +- (void)syncSearchOrder +{ + int pIndex; + + pIndex = [searchOrderPopup indexOfSelectedItem]; + switch (pIndex) + { + case 0: + [project setProjectDictObject:searchItems forKey:PCSearchHeaders]; + break; + case 1: + [project setProjectDictObject:searchItems forKey:PCSearchLibs]; + break; + case 2: + return; + } +} + +// ============================================================================ +// ==== Project Description +// ============================================================================ + +- (void)createProjectDescription +{ + if (projectDescriptionView) + { + return; + } + + if ([NSBundle loadNibNamed:@"ProjectDescription" owner:self] == NO) + { + PCLogError(self, @"error loading ProjectDescription NIB file!"); + return; + } + + // Authors table + authorsColumn = [[NSTableColumn alloc] initWithIdentifier: @"Authors List"]; + [authorsColumn setEditable:YES]; + + authorsList = [[NSTableView alloc] + initWithFrame:NSMakeRect(6,6,209,111)]; + [authorsList setAllowsMultipleSelection:NO]; + [authorsList setAllowsColumnReordering:NO]; + [authorsList setAllowsColumnResizing:NO]; + [authorsList setAllowsEmptySelection:YES]; + [authorsList setAllowsColumnSelection:NO]; + [authorsList setRowHeight:17.0]; + [authorsList setCornerView:nil]; + [authorsList setHeaderView:nil]; + [authorsList addTableColumn:authorsColumn]; + [authorsList setDataSource:self]; + + // + [authorsScroll setDocumentView:authorsList]; + [authorsScroll setHasHorizontalScroller:NO]; + [authorsScroll setHasVerticalScroller:YES]; + [authorsScroll setBorderType:NSBezelBorder]; + + // Authors' buttons + [authorAdd setRefusesFirstResponder:YES]; + [authorRemove setRefusesFirstResponder:YES]; + + [authorUp setRefusesFirstResponder:YES]; + [authorUp setImage: [NSImage imageNamed:@"common_ArrowUp"]]; + + [authorDown setRefusesFirstResponder:YES]; + [authorDown setImage: [NSImage imageNamed:@"common_ArrowDown"]]; + + // Link textfields + [descriptionField setNextText:releaseField]; + [releaseField setNextText:licenseField]; + [licenseField setNextText:licDescriptionField]; + [licDescriptionField setNextText:urlField]; + [urlField setNextText:descriptionField]; + + [projectDescriptionView retain]; +} + +// --- Actions +- (void)addAuthor:(id)sender +{ + int row; + + [authorsItems addObject:[NSMutableString stringWithString:@""]]; + [authorsList reloadData]; + + row = [authorsItems count] - 1; + [authorsList selectRow:row byExtendingSelection:NO]; + [authorsList editColumn:0 row:row withEvent:nil select:YES]; + + [project setProjectDictObject:authorsItems forKey:PCAuthors]; +} + +- (void)removeAuthor:(id)sender +{ + int selectedRow = [authorsList selectedRow]; + + if (selectedRow >= 0) + { + [authorsItems removeObjectAtIndex:selectedRow]; + [authorsList reloadData]; + } + + if ([authorsList selectedRow] < 0 && [authorsItems count] > 0) + { + [authorsList selectRow:[authorsItems count]-1 byExtendingSelection:NO]; + } + + [project setProjectDictObject:authorsItems forKey:PCAuthors]; +} + +- (void)upAuthor:(id)sender +{ + int selectedRow = [authorsList selectedRow]; + id previousRow; + id currentRow; + + if (selectedRow > 0) + { + previousRow = [[authorsItems objectAtIndex: selectedRow-1] copy]; + currentRow = [authorsItems objectAtIndex: selectedRow]; + + [authorsItems replaceObjectAtIndex: selectedRow-1 withObject: currentRow]; + [authorsItems replaceObjectAtIndex: selectedRow withObject: previousRow]; + + [authorsList selectRow: selectedRow-1 byExtendingSelection: NO]; + + [authorsList reloadData]; + [project setProjectDictObject:authorsItems forKey:PCAuthors]; + } +} + +- (void)downAuthor:(id)sender +{ + int selectedRow = [authorsList selectedRow]; + id nextRow; + id currentRow; + + if (selectedRow < [authorsItems count]-1) + { + nextRow = [[authorsItems objectAtIndex: selectedRow+1] copy]; + currentRow = [authorsItems objectAtIndex: selectedRow]; + + [authorsItems replaceObjectAtIndex: selectedRow+1 withObject: currentRow]; + [authorsItems replaceObjectAtIndex: selectedRow withObject: nextRow]; + + [authorsList selectRow: selectedRow+1 byExtendingSelection: NO]; + + [authorsList reloadData]; + [project setProjectDictObject:authorsItems forKey:PCAuthors]; + } +} + +// ============================================================================ +// ==== File Attributes +// ============================================================================ + +- (void)createFileAttributes +{ + if (fileAttributesView) + { + return; + } + + if ([NSBundle loadNibNamed:@"FileAttributes" owner:self] == NO) + { + PCLogError(self, @"error loading ProjectDescription NIB file!"); + return; + } + + [fileAttributesView retain]; + +/* [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(browserDidSetPath:) + name:PCBrowserDidSetPathNotification + object:[project projectBrowser]];*/ + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(panelDidResignKey:) + name: NSWindowDidResignKeyNotification + object:inspectorPanel]; +} + +- (void)beginFileRename +{ + [fileNameField setEditableField:YES]; + [inspectorPanel makeFirstResponder:fileNameField]; +} + +- (void)setFANameAndIcon:(PCProjectBrowser *)browser +{ + if (fileName != nil) + { + [fileName release]; + } + fileName = [[browser nameOfSelectedFile] retain]; + + if (fileName) + { + [fileNameField setStringValue:fileName]; + [fileIconView setImage:[[project projectWindow] fileIconImage]]; + } + else if ([[browser selectedFiles] count] > 1) + { + [fileNameField setStringValue:@"Multiple files selected"]; + [fileIconView setImage:[[project projectWindow] fileIconImage]]; + } + else + { + [fileNameField setStringValue:@"No files selected"]; + [fileIconView setImage:[NSImage imageNamed:@"common_Unknown"]]; + } +} + +- (void)fileNameDidChange:(id)sender +{ + if ([fileName isEqualToString:[fileNameField stringValue]]) + { + return; + } + + PCLogInfo(self, @"{%@} file name changed from: %@ to: %@", + [project projectName], fileName, [fileNameField stringValue]); + + if ([project renameFile:fileName toFile:[fileNameField stringValue]] == NO) + { + [fileNameField setStringValue:fileName]; + } +} + +// --- Notifications +- (void)browserDidSetPath:(NSNotification *)aNotif +{ + [self setFANameAndIcon:[aNotif object]]; +} + +- (void)panelDidResignKey:(NSNotification *)aNotif +{ + if ([fileNameField isEditable] == YES) + { + [inspectorPanel makeFirstResponder:fileIconView]; + [fileNameField setStringValue:fileName]; + } +} + +// ============================================================================ +// ==== NSTableViews +// ============================================================================ + +- (int)numberOfRowsInTableView: (NSTableView *)aTableView +{ + if (searchOrderList != nil && aTableView == searchOrderList) + { + return [searchItems count]; + } + else if (authorsList != nil && aTableView == authorsList) + { + return [authorsItems count]; + } + + return 0; +} + +- (id) tableView: (NSTableView *)aTableView + objectValueForTableColumn: (NSTableColumn *)aTableColumn + row: (int)rowIndex +{ + if (searchOrderList != nil && aTableView == searchOrderList) + { + return [searchItems objectAtIndex:rowIndex]; + } + else if (authorsList != nil && aTableView == authorsList) + { + return [authorsItems objectAtIndex:rowIndex]; + } + + return nil; +} + +- (void) tableView:(NSTableView *)aTableView + setObjectValue:anObject + forTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex +{ + if (authorsList != nil && aTableView == authorsList) + { + if([authorsItems count] <= 0) + { + return; + } + + [authorsItems removeObjectAtIndex:rowIndex]; + [authorsItems insertObject:anObject atIndex:rowIndex]; + + [project setProjectDictObject:authorsItems forKey:PCAuthors]; + } +} + +@end diff --git a/Library/PCProjectLauncher.h b/Library/PCProjectLauncher.h new file mode 100644 index 0000000..6fef239 --- /dev/null +++ b/Library/PCProjectLauncher.h @@ -0,0 +1,93 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef __PCPROJECTDEBUGGER_H +#define __PCPROJECTDEBUGGER_H + +#include + +#ifndef GNUSTEP_BASE_VERSION +@protocol ProjectComponent; +#else +#include +#endif + +@class PCProject; +@class PCButton; + +@interface PCProjectLauncher : NSObject +{ + PCProject *project; // Not retained! + NSDictionary *currentOptions; // Not retained! + + NSBox *componentView; + PCButton *runButton; + PCButton *debugButton; + + NSTextView *stdOut; + NSDictionary *textAttributes; + + NSFileHandle *readHandle; + NSFileHandle *errorReadHandle; + NSTask *launchTask; + + BOOL _isRunning; + BOOL _isDebugging; +} + +- (id)initWithProject:(PCProject *)aProject; +- (void)dealloc; + +- (NSView *) componentView; +- (void)setTooltips; + +- (BOOL)isRunning; +- (BOOL)isDebugging; +- (void)performRun; +- (void)performDebug; + +- (void)debug:(id)sender; +- (void)run:(id)sender; +- (void)runDidTerminate:(NSNotification *)aNotif; + +- (void)logStdOut:(NSNotification *)aNotif; +- (void)logErrOut:(NSNotification *)aNotif; + +@end + +@interface PCProjectLauncher (BuildLogging) + +- (void)logString:(NSString *)string newLine:(BOOL)newLine; +- (void)logData:(NSData *)data error:(BOOL)yn; + +@end + +@interface PCProjectLauncher (UserInterface) + +- (void)_createComponentView; + +@end + +#endif + diff --git a/Library/PCProjectLauncher.m b/Library/PCProjectLauncher.m new file mode 100644 index 0000000..9f23c13 --- /dev/null +++ b/Library/PCProjectLauncher.m @@ -0,0 +1,438 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCProjectLauncher.h" +#include "PCDefines.h" +#include "PCProject.h" +#include "PCProjectManager.h" +#include "PCButton.h" + +#include "PCLogController.h" + +#include + +#ifndef NOTIFICATION_CENTER +#define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter] +#endif + +#ifndef IMAGE +#define IMAGE(X) [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForImageResource:(X)]] autorelease] +#endif + +enum { + DEBUG_DEFAULT_TARGET = 1, + DEBUG_DEBUG_TARGET = 2 +}; + +@protocol Terminal + +- (BOOL)terminalRunProgram:(NSString *)path + withArguments:(NSArray *)args + inDirectory:(NSString *)directory + properties:(NSDictionary *)properties; + +@end + +@implementation PCProjectLauncher (UserInterface) + +- (void)_createComponentView +{ + NSScrollView *scrollView; + NSString *string; + NSAttributedString *attributedString; + + componentView = [[NSBox alloc] initWithFrame:NSMakeRect(8,-1,464,322)]; + [componentView setTitlePosition:NSNoTitle]; + [componentView setBorderType:NSNoBorder]; + [componentView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + [componentView setContentViewMargins: NSMakeSize(0.0,0.0)]; + + /* + * Top buttons + */ + runButton = [[PCButton alloc] initWithFrame: NSMakeRect(0,271,43,43)]; + [runButton setTitle: @"Run"]; + [runButton setImage: IMAGE(@"Run")]; + [runButton setAlternateImage: IMAGE(@"Stop")]; + [runButton setTarget: self]; + [runButton setAction: @selector(run:)]; + [runButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [runButton setButtonType: NSToggleButton]; + [componentView addSubview: runButton]; + RELEASE (runButton); + + debugButton = [[PCButton alloc] initWithFrame: NSMakeRect(44,271,43,43)]; + [debugButton setTitle: @"Debug"]; + [debugButton setImage: IMAGE(@"Debug")]; + [debugButton setAlternateImage: IMAGE(@"Stop")]; + [debugButton setTarget: self]; + [debugButton setAction: @selector(debug:)]; + [debugButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [debugButton setButtonType: NSToggleButton]; + [componentView addSubview: debugButton]; + RELEASE (debugButton); + + /* + * + */ + scrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect (0,0,464,255)]; + + [scrollView setHasHorizontalScroller:NO]; + [scrollView setHasVerticalScroller:YES]; + [scrollView setBorderType: NSBezelBorder]; + [scrollView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + + stdOut=[[NSTextView alloc] initWithFrame:[[scrollView contentView] frame]]; + + [stdOut setMinSize: NSMakeSize(0, 0)]; + [stdOut setMaxSize: NSMakeSize(1e7, 1e7)]; + [stdOut setRichText:YES]; + [stdOut setEditable:NO]; + [stdOut setSelectable:YES]; + [stdOut setVerticallyResizable: YES]; + [stdOut setHorizontallyResizable: NO]; + [stdOut setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; + [[stdOut textContainer] setWidthTracksTextView:YES]; + [[stdOut textContainer] setContainerSize: + NSMakeSize([stdOut frame].size.width, 1e7)]; + + // Font + string = [NSString stringWithString:@"=== Launcher ready ==="]; + attributedString = + [[NSAttributedString alloc] initWithString:string + attributes:textAttributes]; + [[stdOut textStorage] setAttributedString:attributedString]; + + [scrollView setDocumentView:stdOut]; + RELEASE (stdOut); + + [componentView addSubview: scrollView]; + RELEASE(scrollView); +} + +@end + +@implementation PCProjectLauncher + +- (id)initWithProject:(PCProject *)aProject +{ + NSAssert (aProject, @"No project specified!"); + + if ((self = [super init])) + { + NSFont *font = [NSFont userFixedPitchFontOfSize: 10.0]; + + project = aProject; + + textAttributes = + [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; + [textAttributes retain]; + } + + return self; +} + +- (void)dealloc +{ + NSLog (@"PCProjectLauncher: dealloc"); + RELEASE (componentView); + RELEASE (textAttributes); + + [super dealloc]; +} + +- (NSView *)componentView; +{ + if (!componentView) + { + [self _createComponentView]; + } + + return componentView; +} + +- (void)setTooltips +{ + [runButton setShowTooltip:YES]; + [debugButton setShowTooltip:YES]; +} + +- (BOOL)isRunning +{ + return _isRunning; +} + +- (BOOL)isDebugging +{ + return _isDebugging; +} + +- (void)performRun +{ + if (!_isRunning && !_isDebugging) + { + [runButton performClick:self]; + } +} + +- (void)performDebug +{ + if (!_isRunning && !_isDebugging) + { + [debugButton performClick:self]; + } +} + +- (void)debug:(id)sender +{ + NSString *dp = [project projectName]; + NSString *fp = nil; + NSString *pn = nil; + NSString *gdbPath = nil; + NSArray *args = nil; + NSDistantObject *terminal; + NSFileManager *fm = [NSFileManager defaultManager]; + + /* Get the Terminal application */ + terminal = (NSDistantObject *)[NSConnection + rootProxyForConnectionWithRegisteredName:@"Terminal" host:nil]; + + if (terminal == nil) + { + NSRunAlertPanel(@"Attention!", + @"Run Terminal application first", + @"Close",nil,nil); + [debugButton setState:NSOffState]; + return; + } + + // Executable + pn = [dp stringByAppendingPathExtension:@"debug"]; + fp = [project projectPath]; + fp = [fp stringByAppendingPathComponent:pn]; + fp = [fp stringByAppendingPathComponent:dp]; + + PCLogInfo(self, @"debug: %@", fp); + + if ([fm isExecutableFileAtPath:fp] == NO) + { + NSRunAlertPanel(@"Attention!", + @"Can't execute %@!", + @"Abort",nil,nil,pn); + [debugButton setState:NSOffState]; + return; + } + + // Debugger + gdbPath = [[NSUserDefaults standardUserDefaults] objectForKey:Debugger]; + if (gdbPath == nil) + { + gdbPath = [NSString stringWithString:@"/usr/bin/gdb"]; + } + + if ([fm isExecutableFileAtPath:gdbPath] == NO) + { + NSRunAlertPanel(@"Attention!", + @"Invalid debugger specified: %@!", + @"Abort",nil,nil,dp); + [debugButton setState:NSOffState]; + return; + } + + // Task + args = [[NSArray alloc] initWithObjects:gdbPath, @"--args", fp, nil]; + + [terminal terminalRunProgram:AUTORELEASE(gdbPath) + withArguments:args + inDirectory:nil + properties:nil]; + + [debugButton setState:NSOffState]; + +/* RELEASE(args); + [runButton setEnabled:NO]; + _isDebugging = YES;*/ +} + +- (void)run:(id)sender +{ + NSMutableArray *args = [[NSMutableArray alloc] init]; + NSPipe *logPipe; + NSPipe *errorPipe; + NSString *openPath; + + // Check if project type is executable + if ([project isExecutable]) + { + openPath = [project execToolName]; + [args addObject:[project projectName]]; + } + else + { + NSRunAlertPanel(@"Attention!", + @"The project is not executable", + @"Close", nil, nil, nil); + return; + } + + // [makeTask isRunning] doesn't work here. + // "waitpid 7045, result -1, error No child processes" is printed. + if (launchTask) + { + PCLogStatus(self, @"task will terminate"); + [launchTask terminate]; + return; + } + + // Setting I/O + logPipe = [NSPipe pipe]; + RELEASE(readHandle); + readHandle = [[logPipe fileHandleForReading] retain]; + [stdOut setString:@""]; + [readHandle waitForDataInBackgroundAndNotify]; + + [NOTIFICATION_CENTER addObserver:self + selector:@selector(logStdOut:) + name:NSFileHandleDataAvailableNotification + object:readHandle]; + + errorPipe = [NSPipe pipe]; + RELEASE(errorReadHandle); + errorReadHandle = [[errorPipe fileHandleForReading] retain]; + [stdOut setString:@""]; + [errorReadHandle waitForDataInBackgroundAndNotify]; + + [NOTIFICATION_CENTER addObserver:self + selector:@selector(logErrOut:) + name:NSFileHandleDataAvailableNotification + object:errorReadHandle]; + + // Launch task + RELEASE(launchTask); + launchTask = [[NSTask alloc] init]; + + [NOTIFICATION_CENTER addObserver:self + selector:@selector(runDidTerminate:) + name:NSTaskDidTerminateNotification + object:launchTask]; + + [launchTask setArguments:args]; + [launchTask setCurrentDirectoryPath:[project projectPath]]; + [launchTask setLaunchPath:openPath]; + [launchTask setStandardOutput:logPipe]; + [launchTask setStandardError:errorPipe]; + [launchTask launch]; + + [debugButton setEnabled:NO]; + + _isRunning = YES; + RELEASE(args); +} + +- (void)runDidTerminate:(NSNotification *)aNotif +{ + if ([aNotif object] != launchTask) + { + return; + } + + [NOTIFICATION_CENTER removeObserver:self]; + + [runButton setState:NSOffState]; + [debugButton setState:NSOffState]; + [runButton setEnabled:YES]; + [debugButton setEnabled:YES]; + [componentView display]; + + RELEASE(launchTask); + launchTask = nil; + _isRunning = NO; + _isDebugging = NO; + +} + +- (void)logStdOut:(NSNotification *)aNotif +{ + NSData *data; + + if ((data = [readHandle availableData])) + { + [self logData:data error:NO]; + } + + [readHandle waitForDataInBackgroundAndNotifyForModes:nil]; +} + +- (void)logErrOut:(NSNotification *)aNotif +{ + NSData *data; + + if ((data = [errorReadHandle availableData])) + { + [self logData:data error:YES]; + } + + [errorReadHandle waitForDataInBackgroundAndNotifyForModes:nil]; +} + +@end + +@implementation PCProjectLauncher (BuildLogging) + +- (void)logString:(NSString *)str newLine:(BOOL)newLine +{ + [stdOut replaceCharactersInRange:NSMakeRange([[stdOut string] length],0) + withString:str]; + + if (newLine) { + [stdOut replaceCharactersInRange:NSMakeRange([[stdOut string] length], 0) + withString:@"\n"]; + } + else { + [stdOut replaceCharactersInRange:NSMakeRange([[stdOut string] length], 0) + withString:@" "]; + } + + [stdOut scrollRangeToVisible:NSMakeRange([[stdOut string] length], 0)]; +} + +- (void)logData:(NSData *)data error:(BOOL)yn +{ + NSString *s = nil; + NSAttributedString *as = nil; + +// [self logString:s newLine:NO]; + s = [[NSString alloc] initWithData:data + encoding:[NSString defaultCStringEncoding]]; + as = [[NSAttributedString alloc] initWithString:s + attributes:textAttributes]; + [[stdOut textStorage] appendAttributedString: as]; + [stdOut scrollRangeToVisible:NSMakeRange([[stdOut string] length], 0)]; + + [s release]; + [as release]; +} + +@end + diff --git a/Library/PCProjectLoadedFiles.h b/Library/PCProjectLoadedFiles.h new file mode 100644 index 0000000..14b60cb --- /dev/null +++ b/Library/PCProjectLoadedFiles.h @@ -0,0 +1,61 @@ +/* + * Project ProjectCenter + */ + +#ifndef _PCProjectLoadedFiles_h_ +#define _PCProjectLoadedFiles_h_ + +#include + +@class PCProject; + +typedef enum _PHSortType +{ + PHSortByTime, + PHSortByName +} PHSortType; + +@interface PCProjectLoadedFiles : NSObject +{ + PCProject *project; + NSTableView *filesList; + NSTableColumn *filesColumn; + NSScrollView *filesScroll; + NSMutableArray *editedFiles; + + PHSortType sortType; +} + +- (id)initWithProject:(PCProject *)aProj; +- (void)dealloc; +- (NSView *)componentView; +- (NSArray *)editedFilesRep; + +- (void)setSortType:(PHSortType)type; +- (void)setSortByTime; +- (void)setSortByName; +- (void)selectNextFile; +- (void)selectPreviousFile; + +- (void)click:(id)sender; +- (void)doubleClick:(id)sender; + +@end + +@interface PCProjectLoadedFiles (HistoryTableDelegate) + +- (int)numberOfRowsInTableView:(NSTableView *)aTableView; + +- (id) tableView:(NSTableView *)aTableView + objectValueForTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex; + +- (void)tableView:(NSTableView *)aTableView + setObjectValue:anObject + forTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex; + +@end + +#endif + diff --git a/Library/PCProjectLoadedFiles.m b/Library/PCProjectLoadedFiles.m new file mode 100644 index 0000000..1d7a9f5 --- /dev/null +++ b/Library/PCProjectLoadedFiles.m @@ -0,0 +1,336 @@ +/* + * Project ProjectCenter + */ + +#include "PCDefines.h" +#include "PCProject.h" +#include "PCProjectEditor.h" +#include "PCEditor.h" + +#include "PCPrefController.h" +#include "PCLogController.h" + +#include "PCProjectLoadedFiles.h" + +@implementation PCProjectLoadedFiles + +- (id)initWithProject:(PCProject *)aProj +{ + NSAssert(aProj, @"Project is mandatory!"); + + NSLog(@"PCProjectLoadedFiles: init"); + + if ((self = [super init])) + { + project = aProj; + editedFiles = [[NSMutableArray alloc] init]; + + // Column + filesColumn = [[NSTableColumn alloc] initWithIdentifier:@"Files List"]; + [filesColumn setEditable:NO]; + + // Table + filesList = [[NSTableView alloc] + initWithFrame:NSMakeRect(0,0,160,128)]; + [filesList setAllowsMultipleSelection:NO]; + [filesList setAllowsColumnReordering:NO]; + [filesList setAllowsColumnResizing:NO]; + [filesList setAllowsEmptySelection:YES]; + [filesList setAllowsColumnSelection:NO]; + [filesList setCornerView:nil]; + [filesList setHeaderView:nil]; + [filesList addTableColumn:filesColumn]; + [filesList setDataSource:self]; +/* [filesList setBackgroundColor: [NSColor colorWithDeviceRed:0.88 + green:0.76 + blue:0.60 + alpha:1.0]];*/ + // Hack! Should be [filesList setDrawsGrid:NO] + [filesList setGridColor: [NSColor lightGrayColor]]; + [filesList setTarget:self]; + [filesList setDoubleAction:@selector(doubleClick:)]; + [filesList setAction:@selector(click:)]; + + // Scrollview + filesScroll = [[NSScrollView alloc] initWithFrame: + NSMakeRect (0, 0, 80, 128)]; + [filesScroll setDocumentView:filesList]; + [filesScroll setHasHorizontalScroller:NO]; + [filesScroll setHasVerticalScroller:YES]; + if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] + objectForKey: SeparateLoadedFiles] isEqualToString: @"NO"]) + { + [filesScroll setBorderType:NSBezelBorder]; + } + + sortType = PHSortByTime; + + [filesList reloadData]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(fileDidOpen:) + name:PCEditorDidOpenNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(fileDidClose:) + name:PCEditorDidCloseNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(editorDidBecomeActive:) + name:PCEditorDidBecomeActiveNotification + object:nil]; + } + + return self; +} + +- (void)dealloc +{ + NSLog (@"PCProjectLoadedFiles: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + RELEASE(filesColumn); + RELEASE(filesList); + RELEASE(filesScroll); + RELEASE(editedFiles); + + [super dealloc]; +} + +- (NSView *)componentView +{ + return filesScroll; +} + +- (NSArray *)editedFilesRep +{ + if (sortType == PHSortByName) + { + NSArray *sortedArray = nil; + + sortedArray = [editedFiles + sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + + return sortedArray; + } + + return editedFiles; +} + + +- (void)setSortType:(PHSortType)type +{ + int row; + NSString *filePath = nil; + + if ([editedFiles count] > 0) + { + row = [filesList selectedRow]; + filePath = [[self editedFilesRep] objectAtIndex:row]; + } + + sortType = type; + [filesList reloadData]; + + + if ([editedFiles count] > 0) + { + row = [[self editedFilesRep] indexOfObject:filePath]; + [filesList selectRow:row byExtendingSelection:NO]; + } +} + +- (void)setSortByTime +{ + [self setSortType:PHSortByTime]; +} + +- (void)setSortByName +{ + [self setSortType:PHSortByName]; +} + +- (void)selectNextFile +{ + int row = [filesList selectedRow]; + + if (row == ([filesList numberOfRows]-1)) + { + [filesList selectRow:0 byExtendingSelection:NO]; + } + else + { + [filesList selectRow:row+1 byExtendingSelection:NO]; + } + [self click:self]; +} + +- (void)selectPreviousFile +{ + int row = [filesList selectedRow]; + + if (row == 0) + { + [filesList selectRow:[filesList numberOfRows]-1 byExtendingSelection:NO]; + } + else + { + [filesList selectRow:row-1 byExtendingSelection:NO]; + } + [self click:self]; +} + +- (void)click:(id)sender +{ + int row = [filesList selectedRow]; + NSString *path = [[self editedFilesRep] objectAtIndex:row]; + + [[project projectEditor] orderFrontEditorForFile:path]; +} + +- (void)doubleClick:(id)sender +{ + // TODO: Open separate editor window for file + PCLogInfo(self, @"ProjectLoadedFiles doubleClick received"); +} + +// =========================================================================== +// ==== Notifications +// =========================================================================== + +- (void)fileDidOpen:(NSNotification *)aNotif +{ + PCEditor *editor = [aNotif object]; + NSString *filePath = nil; + int row; + + if ([editor projectEditor] != [project projectEditor]) + { + PCLogWarning(self, @"File opened from other project"); + return; + } + + PCLogInfo(self, @"File did open in project %@", [project projectName]); + + filePath = [editor path]; + + if ([editedFiles containsObject:filePath] == YES) + { + [editedFiles removeObject:filePath]; + } + + [editedFiles insertObject:filePath atIndex:0]; + [filesList reloadData]; + + row = [[self editedFilesRep] indexOfObject:filePath]; + [filesList selectRow:row byExtendingSelection:NO]; + + PCLogInfo(self, @"fileDidOpen.END"); +} + +- (void)fileDidClose:(NSNotification *)aNotif +{ + PCEditor *editor = [aNotif object]; + NSString *filePath = [editor path]; + + if ([editor projectEditor] != [project projectEditor]) + { + PCLogWarning(self, @"File from other project closed"); + return; + } + + if ([editedFiles containsObject:filePath] == YES) + { + [editedFiles removeObject:filePath]; + [filesList reloadData]; + + if ([editedFiles count] > 0) + { + unsigned row; + + filePath = [editedFiles objectAtIndex:0]; + row = [[self editedFilesRep] indexOfObject:filePath]; + [filesList selectRow:row byExtendingSelection:NO]; + } + } +} + +- (void)editorDidBecomeActive:(NSNotification *)aNotif +{ + PCEditor *editor = [aNotif object]; + NSString *filePath = nil; + unsigned index; + + if ([editor projectEditor] != [project projectEditor]) + { + return; + } + + if ([editedFiles count] > 0) + { + filePath = [editor path]; + index = [[self editedFilesRep] indexOfObject:filePath]; + [filesList selectRow:index byExtendingSelection:NO]; + } +} + +@end + +@implementation PCProjectLoadedFiles (LoadedFilesTableDelegate) + +- (int)numberOfRowsInTableView: (NSTableView *)aTableView +{ + if (aTableView != filesList) + { + return 0; + } + + return [editedFiles count]; +} + +- (id) tableView: (NSTableView *)aTableView + objectValueForTableColumn: (NSTableColumn *)aTableColumn + row: (int)rowIndex +{ + if (aTableView != filesList) + { + return nil; + } + + if (sortType == PHSortByName) + { + NSArray *sortedArray = nil; + + sortedArray = [editedFiles + sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + + return [[sortedArray objectAtIndex:rowIndex] lastPathComponent]; + } + + return [[editedFiles objectAtIndex:rowIndex] lastPathComponent]; +} + +- (void) tableView:(NSTableView *)aTableView + setObjectValue:anObject + forTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex +{ +/* NSString *path = nil; + NSParameterAssert (rowIndex >= 0 && rowIndex < [editedFiles count]); + + [editedFiles removeObjectAtIndex:rowIndex]; + [editedFiles insertObject:anObject atIndex:rowIndex]; + + path = + [filesPath removeObjectAtIndex:rowIndex]; + [filesPath insertObject:[editor path] atIndex:rowIndex];*/ +} + +@end + diff --git a/PCLib/PCProjectManager.h b/Library/PCProjectManager.h similarity index 50% rename from PCLib/PCProjectManager.h rename to Library/PCProjectManager.h index c0da17c..ba98c61 100644 --- a/PCLib/PCProjectManager.h +++ b/Library/PCProjectManager.h @@ -20,16 +20,23 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#ifndef _PCPROJECTMANAGER_H -#define _PCPROJECTMANAGER_H +#ifndef _PCProjectManager_h_ +#define _PCProjectManager_h_ #include +@class PCBundleLoader; +@class PCFileManager; @class PCProject; +@class PCProjectInspector; +@class PCProjectBuilder; +@class PCProjectLauncher; +@class PCProjectLoadedFiles; +@class PCProjectFinder; + +@class NewSubprojectController; #ifndef GNUSTEP_BASE_VERSION @protocol ProjectBuilder; @@ -39,72 +46,99 @@ #include #endif +extern NSString *PCActiveProjectDidChangeNotification; + @interface PCProjectManager : NSObject { - id delegate; // The PCAppController - id fileManager; + id delegate; + id prefController; - id inspector; - id inspectorView; - id inspectorPopup; + PCBundleLoader *bundleLoader; + NSMutableDictionary *projectTypes; + + PCFileManager *fileManager; + PCProjectInspector *projectInspector; + + NSPanel *buildPanel; + NSPanel *launchPanel; + NSPanel *loadedFilesPanel; + NSPanel *findPanel; NSMutableDictionary *loadedProjects; PCProject *activeProject; NSString *rootBuildPath; - NSTimer *saveTimer; + NSMutableDictionary *nonProjectEditors; + + NSBox *projectTypeAccessaryView; + id projectTypePopup; + + NSBox *fileTypeAccessaryView; + id fileTypePopup; + + IBOutlet NSPanel *nsPanel; + IBOutlet NSImageView *nsImage; + IBOutlet NSTextField *nsTitle; + IBOutlet NSTextField *projectNameField; + IBOutlet NSTextField *nsNameField; + IBOutlet NSPopUpButton *nsTypePB; + IBOutlet NSButton *nsCancelButton; + IBOutlet NSButton *nsCreateButton; + @private - BOOL _needsReleasing; + BOOL _needsReleasing; } -// =========================================================================== +// ============================================================================ // ==== Intialization & deallocation -// =========================================================================== - +// ============================================================================ - (id)init; - (void)dealloc; - -// =========================================================================== -// ==== Delegate -// =========================================================================== - -- (id)delegate; +- (void)createProjectTypeAccessaryView; - (void)setDelegate:(id)aDelegate; +- (id)delegate; +- (void)setPrefController:(id)aController; +- (id)prefController; -// =========================================================================== +// ============================================================================ // ==== Timer handling -// =========================================================================== +// ============================================================================ +- (BOOL)startSaveTimer; +- (BOOL)resetSaveTimer:(NSNotification *)notif; +- (BOOL)stopSaveTimer; -- (void)resetSaveTimer:(NSNotification *)notif; +// ============================================================================ +// ==== Accessory methods +// ============================================================================ +- (PCFileManager *)fileManager; +- (PCProjectInspector *)projectInspector; +- (NSPanel *)inspectorPanel; +- (void)showProjectInspector:(id)sender; +- (NSPanel *)loadedFilesPanel; +- (void)showProjectLoadedFiles:(id)sender; +- (NSPanel *)buildPanel; +- (NSPanel *)launchPanel; +- (NSPanel *)projectFinderPanel; +- (NSString *)rootBuildPath; +- (NSString *)projectPath; +- (NSString *)selectedFileName; -// =========================================================================== +// ============================================================================ // ==== Project management -// =========================================================================== +// ============================================================================ // Returns all currently loaded projects. They are stored with their absolut // paths as the keys. - (NSMutableDictionary *)loadedProjects; - -// Returns the currently active project - (PCProject *)activeProject; - -// Sets the new currently active project +- (PCProject *)rootActiveProject; - (void)setActiveProject:(PCProject *)aProject; -// Gets set while initialising! -- (NSString *)rootBuildPath; - -// Returns active project's path -- (NSString *)projectPath; - -// Returns name of file selected in browser(and visible in internal editor) -- (NSString *)selectedFileName; - -// =========================================================================== +// ============================================================================ // ==== Project actions -// =========================================================================== +// ============================================================================ // Returns the loaded project if the builder class is known, nil else. - (PCProject *)loadProjectAt:(NSString *)aPath; @@ -112,69 +146,59 @@ // Invokes loadProjectAt to load the project properly. - (BOOL)openProjectAt:(NSString *)aPath; -// projectType is exactly the name of the class to be invoked to create the -// project! -- (BOOL)createProjectOfType:(NSString *)projectType path:(NSString *)aPath; +- (PCProject *)createProjectOfType:(NSString *)projectType + path:(NSString *)aPath; -// Saves the current project +- (void)openProject; +- (void)newProject; - (BOOL)saveProject; // Calls saveAllProjects if the preferences are setup accordingly. - (void)saveAllProjectsIfNeeded; // Saves all projects if needed. -- (void)saveAllProjects; - - -- (BOOL)saveProjectAs:(NSString *)projName; - -- (void)inspectorPopupDidChange:(id)sender; - -- (void)showInspectorForProject:(PCProject *)aProject; - // Opens the inspector for aProject - -- (void)revertToSaved; - // Reverts the currently active project - -- (BOOL)newSubproject; -- (BOOL)addSubprojectAt:(NSString *)path; -- (void)removeSubproject; +- (BOOL)saveAllProjects; +- (BOOL)addProjectFiles; +- (BOOL)saveProjectFiles; +- (BOOL)removeProjectFiles; - (void)closeProject:(PCProject *)aProject; - (void)closeProject; - // Closes the currently active project +- (BOOL)closeAllProjects; -// =========================================================================== +// ============================================================================ // ==== File actions -// =========================================================================== +// ============================================================================ -- (BOOL)saveAllFiles; +- (void)openFile; +- (void)newFile; - (BOOL)saveFile; - (BOOL)saveFileAs:(NSString *)path; -- (BOOL)saveFileTo:(NSString *)path; +- (BOOL)saveFileTo; - (BOOL)revertFileToSaved; +- (BOOL)renameFile; - (void)closeFile; -- (BOOL)renameFileTo:(NSString *)path; -- (BOOL)removeFilesPermanently:(BOOL)yn; +// ============================================================================ +// ==== Non project editors +// ============================================================================ + +- (void)openFileWithEditor:(NSString *)path; +- (void)editorDidClose:(NSNotification *)aNotif; @end @interface PCProjectManager (FileManagerDelegates) -- (NSString *)fileManager:(id)sender willCreateFile:(NSString *)aFile withKey:(NSString *)key; - // Returns the full path if the type is valid, nil else. +// Returns the full path if the type is valid, nil else. +- (NSString *)fileManager:(id)sender + willCreateFile:(NSString *)aFile + withKey:(NSString *)key; -- (void)fileManager:(id)sender didCreateFile:(NSString *)aFile withKey:(NSString *)key; - // Adds the file to the project and updates the makefile! - -- (id)fileManagerWillAddFiles:(id)sender; - // Returns the active project - -- (BOOL)fileManager:(id)sender shouldAddFile:(NSString *)file forKey:(NSString *)key; - -- (void)fileManager:(id)sender didAddFile:(NSString *)file forKey:(NSString *)key; - // Adds the file to the project and update the makefile! +// Adds the file to the project and updates the makefile! +- (void)fileManager:(id)sender + didCreateFile:(NSString *)aFile + withKey:(NSString *)key; @end @@ -187,6 +211,35 @@ @end -extern NSString *ActiveProjectDidChangeNotification; +@interface NewSubprojectController : NSWindowController +{ + id image; + id nameTextField; + id typePopup; + id createButton; + id cancelButton; +} + +@end + +@interface PCProjectManager (ProjectRegistration) + +- (void)loadProjectTypeBunldes; +- (PCBundleLoader *)bundleLoader; +- (NSDictionary *)projectTypes; +- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle; + +@end + +@interface PCProjectManager (Subprojects) + +- (BOOL)newSubproject; +- (BOOL)addSubproject; +- (void)closeNewSubprojectPanel:(id)sender; +- (BOOL)createSubproject:(id)sender; +- (PCProject *)createSubprojectOfType:(NSString *)projectType + path:(NSString *)aPath; +- (BOOL)createSubproject; +@end #endif diff --git a/Library/PCProjectManager.m b/Library/PCProjectManager.m new file mode 100644 index 0000000..71c423d --- /dev/null +++ b/Library/PCProjectManager.m @@ -0,0 +1,1142 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCDefines.h" +#include "PCPrefController.h" +#include "PCLogController.h" + +#include "PCBundleLoader.h" +#include "PCFileManager.h" +#include "PCProjectManager.h" + +#include "PCProject.h" +#include "PCProjectWindow.h" +#include "PCProjectBrowser.h" +#include "PCProjectInspector.h" +#include "PCProjectEditor.h" +#include "PCEditor.h" +#include "PCBuildPanel.h" +#include "PCLaunchPanel.h" +#include "PCLoadedFilesPanel.h" + +#include "PCServer.h" + +#include "ProjectType.h" +#include "ProjectBuilder.h" +#include "ProjectComponent.h" + +NSString *PCActiveProjectDidChangeNotification = @"PCActiveProjectDidChange"; + +@implementation PCProjectManager + +// ============================================================================ +// ==== Intialization & deallocation +// ============================================================================ + +- (id)init +{ + if ((self = [super init])) + { + NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; + + buildPanel = nil; + launchPanel = nil; + loadedFilesPanel = nil; + findPanel = nil; + + [self loadProjectTypeBunldes]; + + loadedProjects = [[NSMutableDictionary alloc] init]; + + nonProjectEditors = [[NSMutableDictionary alloc] init]; + + rootBuildPath = [[defs stringForKey:RootBuildDirectory] copy]; + if (!rootBuildPath || [rootBuildPath isEqualToString:@""]) + { + rootBuildPath = [NSTemporaryDirectory() copy]; + } + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(resetSaveTimer:) + name:PCSavePeriodDidChangeNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(editorDidClose:) + name:PCEditorDidCloseNotification + object:nil]; + + fileManager = [[PCFileManager alloc] initWithProjectManager:self]; + } + + return self; +} + +- (void)dealloc +{ + NSLog (@"PCProjectManager: dealloc"); + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + if ([saveTimer isValid]) + { + [saveTimer invalidate]; + } + + RELEASE(bundleLoader); + RELEASE(projectTypes); + RELEASE(projectTypeAccessaryView); + RELEASE(fileTypeAccessaryView); + RELEASE(rootBuildPath); + RELEASE(loadedProjects); + + if (projectInspector) RELEASE(projectInspector); + if (loadedFilesPanel) RELEASE(loadedFilesPanel); + if (buildPanel) RELEASE(buildPanel); + if (launchPanel) RELEASE(launchPanel); + + [super dealloc]; +} + +- (void)setDelegate:(id)aDelegate +{ + delegate = aDelegate; +} + +- (id)delegate +{ + return delegate; +} + +- (void)setPrefController:(id)aController +{ + prefController = aController; +} + +- (id)prefController +{ + return prefController; +} + +- (void)createProjectTypeAccessaryView +{ + NSRect fr = NSMakeRect(20,30,160,20); + + if (projectTypeAccessaryView != nil) + { + return; + } + + // For "Open Project" and "New Project" panels + projectTypePopup = [[NSPopUpButton alloc] initWithFrame:fr pullsDown:NO]; + [projectTypePopup setAutoenablesItems:NO]; + [projectTypePopup addItemsWithTitles: + [[projectTypes allKeys] + sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]]; + [projectTypePopup sizeToFit]; + [projectTypeAccessaryView sizeToFit]; + [projectTypePopup selectItemAtIndex:0]; + + projectTypeAccessaryView = [[NSBox alloc] init]; + [projectTypeAccessaryView setTitle:@"Project Types"]; + [projectTypeAccessaryView setTitlePosition:NSAtTop]; + [projectTypeAccessaryView setBorderType:NSGrooveBorder]; + [projectTypeAccessaryView addSubview:projectTypePopup]; + [projectTypeAccessaryView sizeToFit]; + [projectTypeAccessaryView setAutoresizingMask:NSViewMinXMargin + | NSViewMaxXMargin]; + RELEASE(projectTypePopup); +} + +// ============================================================================ +// ==== Timer handling +// ============================================================================ + +- (BOOL)startSaveTimer +{ + NSTimeInterval interval; + + interval = [[[PCPrefController sharedPCPreferences] + objectForKey:AutoSavePeriod] intValue]; + + if (interval > 0 && saveTimer == nil) + { + saveTimer = [NSTimer + scheduledTimerWithTimeInterval:interval + target:self + selector:@selector(saveAllProjects) + userInfo:nil + repeats:YES]; + return YES; + } + return NO; +} + +- (BOOL)resetSaveTimer:(NSNotification *)notif +{ + [self stopSaveTimer]; + + return [self startSaveTimer]; +} + +- (BOOL)stopSaveTimer +{ + if (saveTimer && [saveTimer isValid]) + { + [saveTimer invalidate]; + saveTimer = nil; + + return YES; + } + return NO; +} + +// ============================================================================ +// ==== Accessory methods +// ============================================================================ + +- (PCFileManager *)fileManager +{ + return fileManager; +} + +- (PCProjectInspector *)projectInspector +{ + if (!projectInspector) + { + projectInspector = + [[PCProjectInspector alloc] initWithProjectManager:self]; + } + + return projectInspector; +} + +- (NSPanel *)inspectorPanel +{ + return [[self projectInspector] panel]; +} + +- (void)showProjectInspector:(id)sender +{ + [[[self projectInspector] panel] makeKeyAndOrderFront:self]; +} + +- (NSPanel *)loadedFilesPanel +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + + if (!loadedFilesPanel + && [[ud objectForKey:SeparateLoadedFiles] isEqualToString:@"YES"]) + { + loadedFilesPanel = + [[PCLoadedFilesPanel alloc] initWithProjectManager:self]; + } + + return loadedFilesPanel; +} + +- (void)showProjectLoadedFiles:(id)sender +{ + if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] + objectForKey: SeparateLoadedFiles] isEqualToString: @"YES"]) + { + [[self loadedFilesPanel] orderFront: nil]; + } +} + +- (NSPanel *)buildPanel +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + + if (!buildPanel + && [[ud objectForKey:SeparateBuilder] isEqualToString:@"YES"]) + { + buildPanel = [[PCBuildPanel alloc] initWithProjectManager:self]; + } + + return buildPanel; +} + +- (NSPanel *)launchPanel +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + + if (!launchPanel + && [[ud objectForKey:SeparateLauncher] isEqualToString:@"YES"]) + { + launchPanel = [[PCLaunchPanel alloc] initWithProjectManager:self]; + } + + return launchPanel; +} + +- (NSPanel *)projectFinderPanel +{ + return findPanel; +} + +- (NSString *)rootBuildPath +{ + return rootBuildPath; +} + +- (NSString *)projectPath +{ + return [activeProject projectPath]; +} + +- (NSString *)selectedFileName +{ + return [[activeProject projectBrowser] nameOfSelectedFile]; +} + +// ============================================================================ +// ==== Project management +// ============================================================================ + +- (NSMutableDictionary *)loadedProjects +{ + return loadedProjects; +} + +- (PCProject *)activeProject +{ + return activeProject; +} + +- (PCProject *)rootActiveProject +{ + PCProject *rootProject = nil; + + if (!activeProject) + { + return nil; + } + + rootProject = activeProject; + while ([rootProject isSubproject] == YES) + { + rootProject = [rootProject superProject]; + } + + return rootProject; +} + +- (void)setActiveProject:(PCProject *)aProject +{ + if (aProject != activeProject) + { + activeProject = aProject; + + [[NSNotificationCenter defaultCenter] + postNotificationName:PCActiveProjectDidChangeNotification + object:activeProject]; + } +} + +- (void)saveAllProjectsIfNeeded +{ + NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; + + PCLogInfo(self, @"saveAllProjectsIfNeeded"); + + // If this method was called not by NSTimer, check if we should save projects + if ([[defs objectForKey:SaveOnQuit] isEqualToString:@"YES"]) + { + [self saveAllProjects]; + } +} + +- (BOOL)saveAllProjects +{ + NSEnumerator *enumerator = [loadedProjects keyEnumerator]; + NSString *key; + PCProject *project; + + while ((key = [enumerator nextObject])) + { + project = [loadedProjects objectForKey:key]; + + if ([project save] == NO) + { + return NO; + } + } + + return YES; +} + +// ============================================================================ +// ==== Project actions +// ============================================================================ + +- (PCProject *)loadProjectAt:(NSString *)aPath +{ + NSMutableDictionary *projectFile = nil; + NSString *projectTypeName = nil; + NSString *projectClassName = nil; + id projectCreator; + PCProject *project = nil; + + projectFile = [NSMutableDictionary dictionaryWithContentsOfFile:aPath]; + + // For compatibility with 0.3.x projects + projectClassName = [projectFile objectForKey:PCProjectBuilderClass]; + + if (projectClassName == nil) + { + projectTypeName = [projectFile objectForKey:PCProjectType]; + projectClassName = [projectTypes objectForKey:projectTypeName]; + } + + projectCreator = [NSClassFromString(projectClassName) sharedCreator]; + + if (projectTypeName == nil) + { + NSString *pPath = nil; + + pPath = [[aPath stringByDeletingLastPathComponent] + stringByAppendingPathComponent:@"PC.project"]; + + [[NSFileManager defaultManager] removeFileAtPath:aPath handler:nil]; + + [projectFile removeObjectForKey:PCProjectBuilderClass]; + projectTypeName = [projectCreator projectTypeName]; + [projectFile setObject:projectTypeName forKey:PCProjectType]; + [projectFile writeToFile:pPath atomically:YES]; + + aPath = pPath; + } + + if ((project = [projectCreator openProjectAt:aPath])) + { + PCLogStatus(self, @"Project %@ loaded as %@", + [project projectName], [projectCreator projectTypeName]); + // Started only if there's not save timer yet + [self startSaveTimer]; + [project validateProjectDict]; + return project; + } + + NSRunAlertPanel(@"Loading Project Failed!", + @"Could not load project '%@'!", + @"OK",nil,nil,aPath); + + return nil; +} + +- (BOOL)openProjectAt:(NSString *)aPath +{ + BOOL isDir = NO; + NSString *projectName = nil; + PCProject *project = nil; + NSDictionary *wap = nil; + + projectName = [[NSDictionary dictionaryWithContentsOfFile:aPath] + objectForKey:PCProjectName]; + + if ((project = [loadedProjects objectForKey:projectName]) != nil) + { + [[project projectWindow] makeKeyAndOrderFront:self]; + return YES; + } + + if ([[NSFileManager defaultManager] fileExistsAtPath:aPath + isDirectory:&isDir] && !isDir) + { + project = [self loadProjectAt:aPath]; + + if (!project) + { + return NO; + } + + [loadedProjects setObject:project forKey:projectName]; + [self setActiveProject:project]; + [project setProjectManager:self]; + + // Windows and panels + wap = [[NSDictionary dictionaryWithContentsOfFile:aPath] + objectForKey:@"PC_WINDOWS"]; + if ([[wap allKeys] containsObject:@"ProjectBuild"]) + { + [[project projectWindow] showProjectBuild:self]; + } + if ([[wap allKeys] containsObject:@"ProjectLaunch"]) + { + [[project projectWindow] showProjectLaunch:self]; + } + if ([[wap allKeys] containsObject:@"LoadedFiles"]) + { + [[project projectWindow] showProjectLoadedFiles:self]; + } + [[project projectWindow] orderFront:self]; + + return YES; + } + + return NO; +} + +- (PCProject *)createProjectOfType:(NSString *)projectType + path:(NSString *)aPath +{ + NSString *className = [projectTypes objectForKey:projectType]; + Class creatorClass = NSClassFromString(className); + PCProject *project = nil; + NSString *projectName = [aPath lastPathComponent]; + + if ((project = [loadedProjects objectForKey:projectName]) != nil) + { + [[project projectWindow] makeKeyAndOrderFront:self]; + return project; + } + + if (![creatorClass conformsToProtocol:@protocol(ProjectType)]) + { + [NSException raise:NOT_A_PROJECT_TYPE_EXCEPTION + format:@"%@ does not conform to ProjectType!", projectType]; + return nil; + } + + if (!(project = [[creatorClass sharedCreator] createProjectAt:aPath])) + { + return nil; + } + + [project setProjectManager:self]; + [self startSaveTimer]; + + return project; +} + +- (void)openProject +{ + NSArray *files = nil; + NSString *filePath = nil; + NSArray *fileTypes = [NSArray arrayWithObjects:@"project",@"pcproj",nil]; + + files = [fileManager filesForOpenOfType:fileTypes + multiple:NO + title:@"Open Project" + accView:nil]; + filePath = [files objectAtIndex:0]; + + if (filePath != nil && [self openProjectAt:filePath] == NO) + { + NSRunAlertPanel(@"Attention!", + @"Couldn't open project %@!", + @"OK",nil,nil, + [filePath stringByDeletingLastPathComponent]); + } +} + +- (void)newProject +{ + NSString *filePath = nil; + NSArray *fileTypes = [NSArray arrayWithObjects:@"project",@"pcproj",nil]; + NSString *projectType = nil; + PCProject *project = nil; + + [self createProjectTypeAccessaryView]; + + filePath = [fileManager fileForSaveOfType:fileTypes + title:@"New Project" + accView:projectTypeAccessaryView]; + if (filePath != nil) + { + projectType = [projectTypePopup titleOfSelectedItem]; + + if (!(project = [self createProjectOfType:projectType path:filePath])) + { + NSRunAlertPanel(@"Attention!", + @"Failed to create %@!", + @"OK",nil,nil,filePath); + } + + [loadedProjects setObject:project forKey:[project projectName]]; + [self setActiveProject:project]; + [[project projectWindow] orderFront:self]; + } +} + +- (BOOL)saveProject +{ + PCProject *rootProject = [self rootActiveProject]; + + if (!rootProject) + { + return NO; + } + + PCLogInfo(self, @"save root project: %@", [rootProject projectName]); + + // Save PC.project and the makefiles! + if ([rootProject save] == NO) + { + NSRunAlertPanel(@"Attention!", + @"Couldn't save project %@!", + @"OK",nil,nil,[activeProject projectName]); + return NO; + } + + return YES; +} + +- (BOOL)addProjectFiles +{ + PCProject *project = [self rootActiveProject]; + NSString *category = [[project projectBrowser] nameOfSelectedCategory]; + NSString *categoryKey = [activeProject keyForCategory:category]; + NSMutableArray *files = nil; + + files = [fileManager filesForAdd]; + + PCLogInfo(self, @"[addProjectFiles] %@ to category: %@ of project %@", + files, categoryKey, [activeProject projectName]); + + // No files was selected + if (!files) + { + return NO; + } + + // Copy and add files + [activeProject addAndCopyFiles:files forKey:categoryKey]; + + return YES; +} + +- (BOOL)saveProjectFiles +{ + return [[activeProject projectEditor] saveAllFiles]; +} + +- (BOOL)removeProjectFiles +{ + PCProject *project = [self rootActiveProject]; + NSArray *files = [[project projectBrowser] selectedFiles]; + NSString *category = [[project projectBrowser] nameOfSelectedCategory]; + NSString *categoryKey = [project keyForCategory:category]; + NSString *directory = [activeProject dirForCategoryKey:categoryKey]; + NSString *removeString = [NSString stringWithString:@"Remove files..."]; + NSMutableArray *subprojs = [NSMutableArray array]; + int i; + + // Determining target project + if ([categoryKey isEqualToString:PCSubprojects]) + { + if ([activeProject isSubproject]) + { + project = [activeProject superProject]; + [self setActiveProject:project]; + } + removeString = [NSString stringWithString:@"Remove subprojects..."]; + directory = [project dirForCategoryKey:categoryKey]; + } + else + { + project = activeProject; + } + + PCLogInfo(self, @"%@: %@ from %@", removeString, files, directory); + PCLogInfo(self, @"[removeProjectFiles]:%@ KEY:%@", + [activeProject projectName], categoryKey); + + if (files) + { + int ret; + + if ([categoryKey isEqualToString:PCLibraries]) + { + ret = NSRunAlertPanel(@"Remove", + @"Remove libraries from Project?", + @"Remove", + @"Cancel", + nil); + } + else + { + ret = NSRunAlertPanel(@"Remove", + removeString, + @"...from Project and Disk", + @"...from Project only", + @"Cancel"); + } + + if (ret == NSAlertDefaultReturn || ret == NSAlertAlternateReturn) + { + BOOL flag = (ret == NSAlertDefaultReturn) ? YES : NO; + + // Remove from projectDict + ret = [project removeFiles:files forKey:categoryKey]; + + // Remove files from disk + if (flag && ret && ![categoryKey isEqualToString:PCLibraries]) + { + if ([categoryKey isEqualToString:PCSubprojects]) + { + for (i = 0; i < [files count]; i++) + { + [subprojs addObject: + [[files objectAtIndex:i] + stringByAppendingPathExtension:@"subproj"]]; + } + files = subprojs; + } + ret = [fileManager removeFiles:files + fromDirectory:directory]; + } + + if (!ret) + { + NSRunAlertPanel(@"Alert", + @"Error removing files from project %@!", + @"OK", nil, nil, [activeProject projectName]); + return NO; + } + else if (flag) + { + // Save project because we've removed file(s) from disk + // Should be fixed later (add pending removal of files?) + [activeProject save]; + } + } + else + { + return NO; + } + } // files + + return YES; +} + +- (void)closeProject:(PCProject *)aProject +{ + PCProject *currentProject = nil; + NSString *projectName = [aProject projectName]; + + currentProject = RETAIN([loadedProjects objectForKey:projectName]); + if (!currentProject) + { + return; + } + + // Remove it from the loaded projects! + [loadedProjects removeObjectForKey:projectName]; + + if ([loadedProjects count] == 0) + { + if (projectInspector) [projectInspector close]; + if (loadedFilesPanel) [loadedFilesPanel close]; + if (buildPanel) [buildPanel close]; + if (launchPanel) [launchPanel close]; + [self setActiveProject: nil]; + [self stopSaveTimer]; + } + else if (currentProject == [self activeProject]) + { + [self setActiveProject:[[loadedProjects allValues] lastObject]]; + } + + RELEASE(currentProject); +} + +- (void)closeProject +{ + NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; + + if ([[defs objectForKey:SaveOnQuit] isEqualToString:@"YES"]) + { + [activeProject save]; + } + + [activeProject close:self]; +} + +- (BOOL)closeAllProjects +{ + PCProject *project = nil; + NSEnumerator *enumerator = [loadedProjects objectEnumerator]; + NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; + + PCLogInfo(self, @"loaded %i projects", [loadedProjects count]); + + while ([loadedProjects count] > 0) + { + project = [enumerator nextObject]; + if ([[defs objectForKey:SaveOnQuit] isEqualToString:@"YES"]) + { + [project save]; + } + if ([project close:self] == NO) + { + return NO; + } + } + + return YES; +} + +// ============================================================================ +// ==== File actions +// ============================================================================ + +- (void)openFile +{ + NSArray *files = nil; + NSString *filePath = nil; + + files = [fileManager filesForOpenOfType:nil + multiple:NO + title:@"Open File" + accView:nil]; + filePath = [files objectAtIndex:0]; + + if (filePath != nil) + { + [self openFileWithEditor:filePath]; + } +} + +- (void)newFile +{ + [fileManager showNewFilePanel]; +} + +- (BOOL)saveFile +{ + return [[activeProject projectEditor] saveFile]; +} + +- (BOOL)saveFileAs:(NSString *)path +{ + return [[activeProject projectEditor] saveFileAs:path]; +} + +- (BOOL)saveFileTo +{ + NSString *filePath = nil; + + filePath = [fileManager fileForSaveOfType:nil + title:@"Save To..." + accView:nil]; + + if (filePath != nil && ![[activeProject projectEditor] saveFileTo:filePath]) + { + NSRunAlertPanel(@"Alert", @"Couldn't save file to\n%@!", + @"OK", nil, nil, filePath); + return NO; + } + + return YES; +} + +- (BOOL)revertFileToSaved +{ + return [[activeProject projectEditor] revertFileToSaved]; +} + +- (BOOL)renameFile +{ + [self showProjectInspector:self]; + [projectInspector selectSectionWithTitle:@"File Attributes"]; + [projectInspector beginFileRename]; + + return YES; +} + +- (void)closeFile +{ + return [[activeProject projectEditor] closeActiveEditor:self]; +} + +// Project menu +// ============================================================================ +// ==== Non project editors +// ============================================================================ + +- (void)openFileWithEditor:(NSString *)path +{ + PCEditor *editor; + + editor = [PCProjectEditor openFileInEditor:path]; + + [nonProjectEditors setObject:editor forKey:path]; + RELEASE(editor); +} + +- (void)editorDidClose:(NSNotification *)aNotif +{ + PCEditor *editor = [aNotif object]; + + [nonProjectEditors removeObjectForKey:[editor path]]; +} + +@end + +@implementation PCProjectManager (FileManagerDelegates) + +// willCreateFile +- (NSString *)fileManager:(id)sender + willCreateFile:(NSString *)aFile + withKey:(NSString *)key +{ + NSString *path = nil; + + if ([activeProject doesAcceptFile:aFile forKey:key]) + { + path = [[activeProject projectPath] stringByAppendingPathComponent:aFile]; + } + + return path; +} + +// didCreateFiles +- (void)fileManager:(id)sender + didCreateFile:(NSString *)aFile + withKey:(NSString *)key +{ + [activeProject addFiles:[NSArray arrayWithObject:aFile] forKey:key]; +} + +@end + +@implementation PCProjectManager (ProjectRegistration) + +- (void)loadProjectTypeBunldes +{ + projectTypes = [[NSMutableDictionary alloc] init]; + + bundleLoader = [[PCBundleLoader alloc] init]; + [bundleLoader setDelegate:self]; + [bundleLoader loadBundles]; +} + +- (PCBundleLoader *)bundleLoader +{ + return bundleLoader; +} + +- (NSDictionary *)projectTypes +{ + return projectTypes; +} + +- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle +{ + Class principalClass; + NSString *projectTypeName = nil; + + NSAssert(aBundle,@"No valid bundle!"); + + principalClass = [aBundle principalClass]; + projectTypeName = [[principalClass sharedCreator] projectTypeName]; + + if (![projectTypes objectForKey:projectTypeName]) + { + [projectTypes setObject:NSStringFromClass(principalClass) + forKey:projectTypeName]; + } +} + +@end + +@implementation PCProjectManager (Subprojects) + +- (BOOL)newSubproject +{ + PCLogInfo(self, @"newSubproject"); + + if (!nsPanel) + { + if ([NSBundle loadNibNamed:@"NewSubproject" owner:self] == NO) + { + PCLogError(self, @"error loading NewSubproject NIB!"); + return NO; + } + + [nsPanel setFrameAutosaveName:@"NewSubproject"]; + if (![nsPanel setFrameUsingName: @"NewSubproject"]) + { + [nsPanel center]; + } + + [nsImage setImage:[NSApp applicationIconImage]]; + [nsTypePB removeAllItems]; + [nsTypePB addItemsWithTitles: + [[activeProject allowableSubprojectTypes] + sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]]; + [nsTypePB setRefusesFirstResponder:YES]; + [nsTypePB selectItemAtIndex:0]; + [nsCancelButton setRefusesFirstResponder:YES]; + [nsCreateButton setRefusesFirstResponder:YES]; + } + [projectNameField setStringValue:[activeProject projectName]]; + [nsPanel makeKeyAndOrderFront:nil]; + [nsNameField setStringValue:@""]; + [nsPanel makeFirstResponder:nsNameField]; + + return YES; +} + +- (void)closeNewSubprojectPanel:(id)sender +{ + [nsPanel orderOut:self]; +} + +- (BOOL)createSubproject:(id)sender +{ + [nsPanel orderOut:self]; + + return [self createSubproject]; +} + +- (BOOL)createSubproject +{ + PCProject *subproject = nil; + NSString *spName = [nsNameField stringValue]; + NSString *spPath = nil; + NSString *spType = [nsTypePB titleOfSelectedItem]; + + if (![[spName pathExtension] isEqualToString:@"subproj"]) + { + spName = [[nsNameField stringValue] + stringByAppendingPathExtension:@"subproj"]; + } + + spPath = [[activeProject projectPath] stringByAppendingPathComponent:spName]; + + PCLogStatus(self, @"creating subproject with type %@ at path %@", + spType, spPath); + + // Create subproject + subproject = [self createSubprojectOfType:spType path:spPath]; + + return YES; +} + +- (PCProject *)createSubprojectOfType:(NSString *)projectType + path:(NSString *)aPath +{ + NSString *className = [projectTypes objectForKey:projectType]; + Class creatorClass = NSClassFromString(className); + PCProject *subproject = nil; +/* NSString *subprojectName = [aPath lastPathComponent]; + + if ((project = [activeProject objectForKey:projectName]) != nil) + { + [[project projectWindow] makeKeyAndOrderFront:self]; + return project; + }*/ + + if (![creatorClass conformsToProtocol:@protocol(ProjectType)]) + { + [NSException raise:NOT_A_PROJECT_TYPE_EXCEPTION + format:@"%@ does not conform to ProjectType!", projectType]; + return nil; + } + + if (!(subproject = [[creatorClass sharedCreator] createProjectAt:aPath])) + { + return nil; + } + [subproject setIsSubproject:YES]; + [subproject setSuperProject:activeProject]; + [subproject setProjectManager:self]; + + PCLogInfo(self, @"{createSubproject} add to %@", [activeProject projectName]); + [activeProject addSubproject:subproject]; + + return subproject; +} + +- (void)controlTextDidChange:(NSNotification *)aNotif +{ + if ([aNotif object] != nsNameField) + { + return; + } + + // TODO: Add check for valid subproject named + if ([[nsNameField stringValue] length] > 0) + { + [nsCreateButton setEnabled:YES]; + } + else + { + [nsCreateButton setEnabled:NO]; + } +} + +- (BOOL)addSubproject +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSMutableArray *files = nil; + NSString *pcProject = nil; + NSString *spDir = nil; + NSDictionary *spDict = nil; + NSString *spName = nil; + int i; + + files = [fileManager filesForAdd]; + + // Validate if it real projects + for (i = 0; i < [files count]; i++) + { + spDir = [files objectAtIndex:i]; + pcProject = [spDir stringByAppendingPathComponent:@"PC.project"]; + if (![[spDir pathExtension] isEqualToString:@"subproj"] + || ![fm fileExistsAtPath:pcProject]) + { + [files removeObjectAtIndex:i]; + } + } + + PCLogInfo(self, @"{addSubproject} %@", files); + + if (![fileManager copyFiles:files + intoDirectory:[activeProject projectPath]]) + { + return NO; + } + + for (i = 0; i < [files count]; i++) + { + spDir = [files objectAtIndex:i]; + pcProject = [spDir stringByAppendingPathComponent:@"PC.project"]; + spDict = [NSDictionary dictionaryWithContentsOfFile:pcProject]; + spName = [spDict objectForKey:PCProjectName]; + + PCLogInfo(self, @"{addSubproject} dir: %@ file: %@", spDir, pcProject); + + [activeProject addSubprojectWithName:spName]; + } + + return YES; +} + +@end + diff --git a/Library/PCProjectWindow.h b/Library/PCProjectWindow.h new file mode 100644 index 0000000..c5be22b --- /dev/null +++ b/Library/PCProjectWindow.h @@ -0,0 +1,122 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCProjectWindow_h_ +#define _PCProjectWindow_h_ + +#include "AppKit/AppKit.h" + +@class PCProject; +@class PCProjectBrowser; +@class PCProjectLoadedFiles; +@class PCButton; +@class PCSplitView; + +@interface PCProjectWindow : NSObject +{ + PCProject *project; + + NSWindow *projectWindow; + NSBox *toolbarView; + PCButton *buildButton; + PCButton *launchButton; + PCButton *editorButton; + PCButton *findButton; + PCButton *inspectorButton; + + NSImageView *fileIcon; + NSTextField *fileIconTitle; + + PCSplitView *h_split; + PCSplitView *v_split; + + NSBox *customView; + NSResponder *firstResponder; + + BOOL _isToolbarVisible; + BOOL _hasCustomView; + BOOL _hasLoadedFilesView; +} + +// ============================================================================ +// ==== Intialization & deallocation +// ============================================================================ + +// Will go into gorm file +- (void)_initUI; +- (id)initWithProject:(PCProject *)owner; +- (void)setTitle; +- (void)setFileIcon:(NSNotification *)notification; + +// ============================================================================ +// ==== Accessory methods +// ============================================================================ +- (BOOL)hasCustomView; +- (BOOL)hasLoadedFilesView; +- (NSView *)customContentView; +- (void)setCustomContentView:(NSView *)subview; + +- (NSImage *)fileIconImage; +- (void)setFileIconImage:(NSImage *)image; +- (NSString *)fileIconTitle; +- (void)setFileIconTitle:(NSString *)title; + +// ============================================================================ +// ==== Actions +// ============================================================================ +- (void)showProjectLoadedFiles:(id)sender; +- (void)showProjectBuild:(id)sender; +- (void)showProjectLaunch:(id)sender; +- (void)showProjectEditor:(id)sender; +- (BOOL)isToolbarVisible; +- (void)toggleToolbar; + +// ============================================================================ +// ==== Notifications +// ============================================================================ +- (void)projectDictDidChange:(NSNotification *)aNotif; +- (void)projectDictDidSave:(NSNotification *)aNotif; + +// ============================================================================ +// ==== Window delegate +// ============================================================================ +- (NSString *)stringWithSavedFrame; +- (void)makeKeyAndOrderFront:(id)sender; +- (void)makeKeyWindow; +- (void)orderFront:(id)sender; +- (void)center; +- (void)close; +- (void)performClose:(id)sender; +- (BOOL)isDocumentEdited; +- (BOOL)isKeyWindow; +- (BOOL)makeFirstResponder:(NSResponder *)aResponder; + +- (void)windowDidBecomeKey:(NSNotification *)aNotification; +- (void)windowDidResignKey:(NSNotification *)aNotification; +- (void)windowDidBecomeMain:(NSNotification *)aNotification; +- (void)windowWillClose:(NSNotification *)aNotification; + +@end + +#endif diff --git a/Library/PCProjectWindow.m b/Library/PCProjectWindow.m new file mode 100644 index 0000000..4a29714 --- /dev/null +++ b/Library/PCProjectWindow.m @@ -0,0 +1,935 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2000-2002 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCDefines.h" +#include "PCSplitView.h" +#include "PCButton.h" + +#include "PCProjectManager.h" +#include "PCProject.h" + +#include "PCProjectWindow.h" +#include "PCProjectBrowser.h" +#include "PCProjectEditor.h" +#include "PCProjectBuilder.h" +#include "PCProjectLauncher.h" +#include "PCProjectLoadedFiles.h" +#include "PCProjectInspector.h" + +#include "PCPrefController.h" +#include "PCLogController.h" + +@implementation PCProjectWindow + +// ============================================================================ +// ==== Intialization & deallocation +// ============================================================================ + +- (void)_createCustomView +{ + customView = [[NSBox alloc] initWithFrame:NSMakeRect(-1,-1,562,252)]; + [customView setTitlePosition:NSNoTitle]; + [customView setBorderType:NSNoBorder]; + [customView setContentViewMargins:NSMakeSize(0.0,0.0)]; + [customView setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; + + // Editor in the Box + [customView setContentView:[[project projectEditor] componentView]]; + + [h_split addSubview:customView]; + RELEASE(customView); + [h_split adjustSubviews]; +} + +- (void)_initUI +{ + NSView *_c_view; + unsigned int style = NSTitledWindowMask + | NSClosableWindowMask + | NSMiniaturizableWindowMask + | NSResizableWindowMask; + NSRect rect; + NSRect tmpRect; + NSView *browserView = nil; + + /* + * Project Window + */ + rect = NSMakeRect (100,100,560,448); + projectWindow = [[NSWindow alloc] initWithContentRect: rect + styleMask: style + backing: NSBackingStoreBuffered + defer: YES]; + [projectWindow setDelegate: self]; + [projectWindow setMinSize: NSMakeSize (560,290)]; + [projectWindow setMiniwindowImage: IMAGE(@"FileProject")]; + _c_view = [projectWindow contentView]; + + /* + * Toolbar + */ + tmpRect = rect; + rect.size.width -= 16; + rect.size.height = 48; + rect.origin.x = 8; + rect.origin.y = 391; + toolbarView = [[NSBox alloc] initWithFrame:rect]; + [toolbarView setTitlePosition:NSNoTitle]; + [toolbarView setBorderType:NSNoBorder]; + [toolbarView setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin]; + [toolbarView setContentViewMargins: NSMakeSize(0.0,0.0)]; + [_c_view addSubview:toolbarView]; + RELEASE(toolbarView); + + buildButton = [[PCButton alloc] initWithFrame: NSMakeRect(0,5,43,43)]; + [buildButton setRefusesFirstResponder:YES]; + [buildButton setTitle: @"Build"]; + [buildButton setImage: IMAGE(@"Build")]; + [buildButton setTarget: self]; + [buildButton setAction: @selector(showProjectBuild:)]; + [buildButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [buildButton setButtonType: NSMomentaryPushButton]; + [toolbarView addSubview: buildButton]; + [buildButton setShowTooltip:YES]; + RELEASE (buildButton); + + launchButton = [[PCButton alloc] initWithFrame: NSMakeRect(44,5,43,43)]; + [launchButton setRefusesFirstResponder:YES]; + [launchButton setTitle: @"Launch/Debug"]; + [launchButton setImage: IMAGE(@"Run")]; + [launchButton setTarget: self]; + [launchButton setAction: @selector(showProjectLaunch:)]; + [launchButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [launchButton setButtonType: NSMomentaryPushButton]; + [toolbarView addSubview: launchButton]; + [launchButton setShowTooltip:YES]; + RELEASE (launchButton); + + editorButton = [[PCButton alloc] initWithFrame: NSMakeRect(88,5,43,43)]; + [editorButton setRefusesFirstResponder:YES]; + [editorButton setTitle: @"Editor"]; + [editorButton setImage: IMAGE(@"Editor")]; + [editorButton setTarget: self]; + [editorButton setAction: @selector(showProjectEditor:)]; + [editorButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [editorButton setButtonType: NSMomentaryPushButton]; + [toolbarView addSubview: editorButton]; + [editorButton setShowTooltip:YES]; + RELEASE (editorButton); + + findButton = [[PCButton alloc] initWithFrame: NSMakeRect(132,5,43,43)]; + [findButton setRefusesFirstResponder:YES]; + [findButton setTitle: @"Find"]; + [findButton setImage: IMAGE(@"Find")]; + [findButton setTarget: project]; + [findButton setAction: @selector(showFindView:)]; + [findButton setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [findButton setButtonType: NSMomentaryPushButton]; + [toolbarView addSubview: findButton]; + [findButton setShowTooltip:YES]; + RELEASE (findButton); + + inspectorButton = [[PCButton alloc] initWithFrame: NSMakeRect(176,5,43,43)]; + [inspectorButton setRefusesFirstResponder:YES]; + [inspectorButton setTitle: @"Inspector"]; + [inspectorButton setImage: IMAGE(@"Inspector")]; + [inspectorButton setTarget: [project projectManager]]; + [inspectorButton setAction: @selector(showProjectInspector:)]; + [inspectorButton setAutoresizingMask:(NSViewMaxXMargin | NSViewMinYMargin)]; + [inspectorButton setButtonType: NSMomentaryPushButton]; + [toolbarView addSubview: inspectorButton]; + [inspectorButton setShowTooltip:YES]; + RELEASE (inspectorButton); + + + /* + * File icon and title + */ + fileIcon = [[NSImageView alloc] initWithFrame: NSMakeRect (496,0,48,48)]; + [fileIcon setRefusesFirstResponder:YES]; + [fileIcon setEditable:NO]; + [fileIcon setAutoresizingMask: (NSViewMinXMargin | NSViewMinYMargin)]; + [fileIcon setImage: IMAGE (@"projectSuitcase")]; + [toolbarView addSubview: fileIcon]; + RELEASE (fileIcon); + + fileIconTitle = [[NSTextField alloc] + initWithFrame: NSMakeRect (308,4,180,21)]; + [fileIconTitle setAutoresizingMask: (NSViewMinXMargin + | NSViewMinYMargin + | NSViewWidthSizable)]; + [fileIconTitle setEditable:NO]; + [fileIconTitle setSelectable:NO]; + [fileIconTitle setDrawsBackground: NO]; + [fileIconTitle setAlignment:NSRightTextAlignment]; + [fileIconTitle setBezeled:NO]; + [toolbarView addSubview: fileIconTitle]; + RELEASE (fileIconTitle); + + /* + * Hosrizontal split view + */ + rect = [[projectWindow contentView] frame]; + rect.size.height -= 62; + rect.size.width -= 16; + rect.origin.x += 8; + rect.origin.y = -2; + h_split = [[PCSplitView alloc] initWithFrame:rect]; + [h_split setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; + + /* + * Vertical split view + */ + rect = [[projectWindow contentView] frame]; + if (h_split) + { + rect.size.height = 130; + } +/* else + { + rect.size.height -= 64; + rect.size.width -= 16; + rect.origin.x += 8; + rect.origin.y = 0; + }*/ + v_split = [[PCSplitView alloc] initWithFrame:rect]; + [v_split setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [v_split setVertical:YES]; + + /* + * File Browser + */ + browserView = [[project projectBrowser] view]; + [v_split addSubview:browserView]; + + /* + * LoadedFiles + */ + if ([self hasLoadedFilesView]) + { + [self showProjectLoadedFiles:self]; + } + + [h_split addSubview:v_split]; + RELEASE(v_split); + + /* + * Custom view + * View where non-separated Builder, Launcher, Editor goes. + */ + if ([self hasCustomView]) + { + [self _createCustomView]; + } + + [_c_view addSubview:h_split]; + RELEASE(h_split); + +} + +- (id)initWithProject:(PCProject *)owner +{ + if ((self = [super init])) + { + NSDictionary *pcWindows; + NSString *windowFrame; + + project = owner; + _isToolbarVisible = YES; + + [self _initUI]; + + // Window + [projectWindow setFrameAutosaveName: @"ProjectWindow"]; + + pcWindows = [[project projectDict] objectForKey:@"PC_WINDOWS"]; + windowFrame = [pcWindows objectForKey:@"ProjectWindow"]; + PCLogInfo(self, @"window frame %@", windowFrame); + if (windowFrame != nil) + { + PCLogStatus(self, @"PCProjectWindow: set frame from project"); + [projectWindow setFrameFromString:windowFrame]; + } + else if (![projectWindow setFrameUsingName: @"ProjectWindow"]) + { + [projectWindow center]; + } + + // Toolbar + if ([[pcWindows objectForKey:@"ShowToolbar"] isEqualToString:@"NO"]) + { + [self toggleToolbar]; + } + + [self setTitle]; + + // Browser + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector (setFileIcon:) + name:PCBrowserDidSetPathNotification + object:[project projectBrowser]]; + + // Project dictionary + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(projectDictDidChange:) + name:PCProjectDictDidChangeNotification + object:nil]; + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(projectDictDidSave:) + name:PCProjectDictDidSaveNotification + object:nil]; + + // Active project changing + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(activeProjectDidChange:) + name:PCActiveProjectDidChangeNotification + object:nil]; + + // ProjectCenter preferences + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(preferencesDidChange:) + name:PCPreferencesDidChangeNotification + object:nil]; + } + + return self; +} + +- (void)setTitle +{ + [projectWindow setTitle: [NSString stringWithFormat: @"%@ - %@", + [project projectName], + [[project projectPath] stringByAbbreviatingWithTildeInPath]]]; +} + +- (void)dealloc +{ + NSLog (@"PCProjectWindow: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [super dealloc]; +} + +// ============================================================================ +// ==== Accessory methods +// ============================================================================ + +- (NSImage *)fileIconImage +{ + return [fileIcon image]; +} + +- (void)setFileIconImage:(NSImage *)image +{ + [fileIcon setImage:image]; +} + +- (void)setFileIcon:(NSNotification *)notification +{ + id object = [notification object]; + NSString *categoryName = nil; + NSString *fileName = nil; + NSString *fileExtension = nil; + NSString *iconName = nil; + NSImage *icon = nil; + + fileName = [object nameOfSelectedFile]; + if (fileName) + { + fileExtension = [fileName pathExtension]; + } + else + { + categoryName = [object nameOfSelectedCategory]; + } + + PCLogInfo(self,@"{setFileIcon} file %@ category %@", + fileName, categoryName); + + // Should be provided by PC*Proj bundles + if ([[object selectedFiles] count] > 1) + { + iconName = [[NSString alloc] initWithString:@"MultiFiles"]; + } + else if (!categoryName && !fileName) // Nothing selected + { + iconName = [[NSString alloc] initWithString:@"projectSuitcase"]; + } + else if ([categoryName isEqualToString: @"Classes"]) + { + iconName = [[NSString alloc] initWithString:@"classSuitcase"]; + } + else if ([categoryName isEqualToString: @"Headers"]) + { + iconName = [[NSString alloc] initWithString:@"headerSuitcase"]; + } + else if ([categoryName isEqualToString: @"Other Sources"]) + { + iconName = [[NSString alloc] initWithString:@"genericSuitcase"]; + } + else if ([categoryName isEqualToString: @"Interfaces"]) + { + iconName = [[NSString alloc] initWithString:@"nibSuitcase"]; + } + else if ([categoryName isEqualToString: @"Images"]) + { + iconName = [[NSString alloc] initWithString:@"iconSuitcase"]; + } + else if ([categoryName isEqualToString: @"Other Resources"]) + { + iconName = [[NSString alloc] initWithString:@"otherSuitcase"]; + } + else if ([categoryName isEqualToString: @"Subprojects"]) + { + iconName = [[NSString alloc] initWithString:@"subprojectSuitcase"]; + } + else if ([categoryName isEqualToString: @"Documentation"]) + { + iconName = [[NSString alloc] initWithString:@"helpSuitcase"]; + } + else if ([categoryName isEqualToString: @"Supporting Files"]) + { + iconName = [[NSString alloc] initWithString:@"genericSuitcase"]; + } + else if ([categoryName isEqualToString: @"Libraries"]) + { + iconName = [[NSString alloc] initWithString:@"librarySuitcase"]; + } + else if ([categoryName isEqualToString: @"Non Project Files"]) + { + iconName = [[NSString alloc] initWithString:@"projectSuitcase"]; + } + + if (iconName != nil) + { + icon = IMAGE(iconName); + RELEASE(iconName); + } + else if (fileExtension != nil && ![fileExtension isEqualToString:@""]) + { + icon = [[NSWorkspace sharedWorkspace] iconForFile:fileName]; + } + + // Set icon to Project Window and Project Inspector + if (icon != nil) + { + [fileIcon setImage:icon]; + } + + // Set title + if ([[object selectedFiles] count] > 1) + { + [fileIconTitle setStringValue: + [NSString stringWithFormat: + @"%i files", [[object selectedFiles] count]]]; + } + else if (fileName) + { + [fileIconTitle setStringValue:fileName]; + } + else if (categoryName) + { + [fileIconTitle setStringValue:categoryName]; + } + + // Project Inspector + [[[project projectManager] projectInspector] + setFANameAndIcon:[project projectBrowser]]; +} + +- (NSString *)fileIconTitle +{ + return [fileIconTitle stringValue]; +} + +- (void)setFileIconTitle:(NSString *)title +{ + [fileIconTitle setStringValue:title]; +} + +- (BOOL)hasCustomView +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + + _hasCustomView = NO; + + if (![[ud objectForKey:SeparateEditor] isEqualToString:@"YES"] + && [[ud objectForKey:Editor] isEqualToString:@"ProjectCenter"]) + { + _hasCustomView = YES; + } + if (![[ud objectForKey:SeparateBuilder] isEqualToString:@"YES"]) + { + _hasCustomView = YES; + } + if (![[ud objectForKey:SeparateLauncher] isEqualToString:@"YES"]) + { + _hasCustomView = YES; + } + + return _hasCustomView; +} + +- (BOOL)hasLoadedFilesView +{ + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + + if (![[ud objectForKey:SeparateLoadedFiles] isEqualToString:@"YES"]) + { + _hasLoadedFilesView = YES; + } + else + { + _hasLoadedFilesView = NO; + } + + return _hasLoadedFilesView; +} + +- (NSView *)customContentView +{ + return [customView contentView]; +} + +- (void)setCustomContentView:(NSView *)subview +{ + if (!customView) + { + return; + } + + [customView setContentView:subview]; + [customView display]; +} + +// ============================================================================ +// ==== Actions +// ============================================================================ + +- (void)showProjectLoadedFiles:(id)sender +{ + NSPanel *panel = [[project projectManager] loadedFilesPanel]; + NSScrollView *componentView = [[project projectLoadedFiles] componentView]; + + PCLogInfo(self, @"showProjectLoadedFiles"); + + if ([self hasLoadedFilesView]) + { + if (panel && [panel isVisible]) + { + [panel close]; + } + + [componentView setBorderType:NSBezelBorder]; + [v_split addSubview:[[project projectLoadedFiles] componentView]]; + [v_split adjustSubviews]; + } + else + { + [componentView setBorderType:NSNoBorder]; + [panel orderFront:nil]; + [v_split adjustSubviews]; + } +} + +- (void)showProjectBuild:(id)sender +{ + NSView *view = [[project projectBuilder] componentView]; + NSPanel *buildPanel = [[project projectManager] buildPanel]; + + if ([[[PCPrefController sharedPCPreferences] objectForKey:SeparateBuilder] + isEqualToString: @"YES"]) + { + if ([customView contentView] == view) + { + [self showProjectEditor:self]; + } + [buildPanel orderFront:nil]; + } + else + { + if ([buildPanel isVisible]) + { + [buildPanel close]; + } + [self setCustomContentView:view]; + } + + [[project projectBuilder] setTooltips]; +} + +- (void)showProjectLaunch:(id)sender +{ + NSView *view = nil; + NSPanel *launchPanel = nil; + + if ([project isExecutable] == NO) + { + NSRunAlertPanel(@"Attention!", + @"This project is not executable!", + @"OK",nil,nil); + return; + } + + view = [[project projectLauncher] componentView]; + launchPanel = [[project projectManager] launchPanel]; + + if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] + objectForKey: SeparateLauncher] isEqualToString: @"YES"]) + { + if ([customView contentView] == view) + { + [self showProjectEditor:self]; + } + [launchPanel orderFront: nil]; + } + else + { + if ([launchPanel isVisible]) + { + [launchPanel close]; + } + [self setCustomContentView:view]; + } + + [[project projectLauncher] setTooltips]; +} + +- (void)showProjectEditor:(id)sender +{ + [self setCustomContentView:[[project projectEditor] componentView]]; + [self makeFirstResponder:firstResponder]; +} + +- (BOOL)isToolbarVisible +{ + return _isToolbarVisible; +} + +- (void)toggleToolbar +{ + NSRect rect; + NSView *cView = [projectWindow contentView]; + + + if (_isToolbarVisible) + { + RETAIN(toolbarView); + [toolbarView removeFromSuperview]; + if (h_split) + { + rect = [h_split frame]; + rect.size.height += 48; + + // Hack. NSBrowser resizes incorrectly without removing/adding + // from/to superview + RETAIN(h_split); + [h_split removeFromSuperview]; + [h_split setFrame:rect]; + [cView addSubview:h_split]; + RELEASE(h_split); + } + else if (v_split) + { + rect = [v_split frame]; + rect.size.height += 48; + + // Hack. See above + RETAIN(v_split); + [v_split removeFromSuperview]; + [v_split setFrame:rect]; + [cView addSubview:v_split]; + RELEASE(v_split); + } + _isToolbarVisible = NO; + } + else + { + rect = [cView frame]; + rect.origin.x = 8; + rect.origin.y = rect.size.height - 57; + rect.size.width -= 16; + rect.size.height = 48; + [toolbarView setFrame:rect]; + + [cView addSubview:toolbarView]; + RELEASE(toolbarView); + if (h_split) + { + rect = [h_split frame]; + rect.size.height -= 48; + + // Hack. See above + RETAIN(h_split); + [h_split removeFromSuperview]; + [h_split setFrame:rect]; + [cView addSubview:h_split]; + RELEASE(h_split); + } + else if (v_split) + { + rect = [v_split frame]; + rect.size.height -= 48; + + // Hack. See above + RETAIN(v_split); + [v_split removeFromSuperview]; + [v_split setFrame:rect]; + [cView addSubview:v_split]; + RELEASE(v_split); + } + _isToolbarVisible = YES; + } +} + +// ============================================================================ +// ==== Notifications +// ============================================================================ + +- (void)projectDictDidChange:(NSNotification *)aNotif +{ + PCProject *changedProject = [aNotif object]; + + if (changedProject != project + && [[project projectManager] activeProject] != changedProject) + { + return; + } + + [self setTitle]; + + // TODO: if window isn't visible and "edited" attribute set, after ordering + // front window doesn't show broken close button. Fix it in GNUstep. + // Workaround is in windowDidBecomeKey. + [projectWindow setDocumentEdited:YES]; +} + +- (void)projectDictDidSave:(NSNotification *)aNotif +{ + if ([aNotif object] != project + && ![[project loadedSubprojects] containsObject:[aNotif object]]) + { + return; + } + + [projectWindow setDocumentEdited:NO]; +} + +- (void)activeProjectDidChange:(NSNotification *)aNotif +{ + if ([aNotif object] != project + && ![[project loadedSubprojects] containsObject:[aNotif object]]) + { + return; + } + + [self makeKeyWindow]; +} + +- (void)preferencesDidChange:(NSNotification *)aNotif +{ + NSDictionary *prefsDict = [[aNotif object] preferencesDict]; + + PCLogStatus(self, @"Preferences did change"); + + //--- Add Custom view + if ([self hasCustomView] && customView == nil) + { + [self _createCustomView]; + } + + // Project Builder + if ([[prefsDict objectForKey:@"SeparateBuilder"] isEqualToString:@"YES"]) + { + if ([[[project projectBuilder] componentView] superview]) + { + [self showProjectBuild:self]; + } + } + else + { + NSPanel *buildPanel = [[project projectManager] buildPanel]; + + if ([buildPanel isVisible] == YES) + { + [self showProjectBuild:self]; + } + } + + // Project Launcher + if ([[prefsDict objectForKey:@"SeparateLauncher"] isEqualToString:@"YES"]) + { + if ([[[project projectLauncher] componentView] superview]) + { + [self showProjectLaunch:self]; + } + } + else + { + NSPanel *launchPanel = [[project projectManager] launchPanel]; + + if ([launchPanel isVisible] == YES) + { + [self showProjectLaunch:self]; + } + } + + //--- Remove Custom view + if (![self hasCustomView] && customView != nil) + { + [customView removeFromSuperview]; + [h_split adjustSubviews]; + customView = nil; + } + + // Loaded Files view + if ([self hasLoadedFilesView] && [[v_split subviews] count] == 1) + { + [self showProjectLoadedFiles:self]; + } + else if (![self hasLoadedFilesView] && [[v_split subviews] count] == 2) + { + [self showProjectLoadedFiles:self]; + } +} + +// ============================================================================ +// ==== Window delegate +// ============================================================================ + +- (NSString *)stringWithSavedFrame +{ + return [projectWindow stringWithSavedFrame]; +} + +- (void)makeKeyAndOrderFront:(id)sender +{ + PCLogInfo(self, @"makeKeyAndOrderFront sender: %@", [sender className]); + [projectWindow makeKeyAndOrderFront:nil]; +} + +- (void)makeKeyWindow +{ + [projectWindow makeKeyWindow]; +} + +- (void)orderFront:(id)sender +{ + if (projectWindow) + { + [projectWindow orderFront:sender]; + } +} + +- (void)center +{ + [projectWindow center]; +} + +// [NSWindow close] doesn't send windowShouldClose +- (void)close +{ + [projectWindow close]; +} + +- (void)performClose:(id)sender +{ + [projectWindow performClose:sender]; +} + +- (BOOL)isDocumentEdited +{ + return [projectWindow isDocumentEdited]; +} + +- (BOOL)isKeyWindow +{ + return [projectWindow isKeyWindow]; +} + +- (BOOL)makeFirstResponder:(NSResponder *)aResponder +{ + firstResponder = aResponder; + [projectWindow makeFirstResponder:firstResponder]; + + return YES; +} + +- (void)windowDidBecomeKey:(NSNotification *)aNotification +{ + [projectWindow makeMainWindow]; +// [projectWindow makeFirstResponder:(NSResponder *)firstResponder]; + + PCLogInfo(self, @"windowDidBecomeKey: activeSubproject %@", + [[project activeSubproject] projectName]); + + if ([[project projectManager] rootActiveProject] != project) + { + if ([project activeSubproject] != nil) + { + [[project projectManager] + setActiveProject:[project activeSubproject]]; + } + else + { + [[project projectManager] setActiveProject:project]; + } + } + + + // Workaround + if ([projectWindow isDocumentEdited]) + { + [projectWindow setDocumentEdited:NO]; + [projectWindow setDocumentEdited:YES]; + } +} + +- (void)windowDidResignKey:(NSNotification *)aNotification +{ +// [projectWindow makeFirstResponder:nil]; +} + +- (void)windowDidBecomeMain:(NSNotification *)aNotification +{ +} + +- (BOOL)windowShouldClose:(id)sender +{ + return [project close:self]; +} + +- (void)windowWillClose:(NSNotification *)aNotification +{ +} + +@end + diff --git a/PCLib/PCServer.h b/Library/PCServer.h similarity index 99% rename from PCLib/PCServer.h rename to Library/PCServer.h index 1cef7ed..1bd6a42 100644 --- a/PCLib/PCServer.h +++ b/Library/PCServer.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCSERVER_H diff --git a/PCLib/PCServer.m b/Library/PCServer.m similarity index 98% rename from PCLib/PCServer.m rename to Library/PCServer.m index c8ac278..7bb0c43 100644 --- a/PCLib/PCServer.m +++ b/Library/PCServer.m @@ -20,14 +20,11 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCServer.h" #include "PCDefines.h" #include "PCProject.h" -#include "PCBrowserController.h" #include "PCEditor.h" @implementation PCServer diff --git a/PCLib/PCSplitView.h b/Library/PCSplitView.h similarity index 100% rename from PCLib/PCSplitView.h rename to Library/PCSplitView.h diff --git a/PCLib/PCSplitView.m b/Library/PCSplitView.m similarity index 100% rename from PCLib/PCSplitView.m rename to Library/PCSplitView.m diff --git a/PCLib/PCTextFinder+UInterface.h b/Library/PCTextFinder+UInterface.h similarity index 99% rename from PCLib/PCTextFinder+UInterface.h rename to Library/PCTextFinder+UInterface.h index f49e2df..6673efd 100644 --- a/PCLib/PCTextFinder+UInterface.h +++ b/Library/PCTextFinder+UInterface.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCTextFinder.h" diff --git a/PCLib/PCTextFinder+UInterface.m b/Library/PCTextFinder+UInterface.m similarity index 99% rename from PCLib/PCTextFinder+UInterface.m rename to Library/PCTextFinder+UInterface.m index c0c02b4..6ac8f2b 100644 --- a/PCLib/PCTextFinder+UInterface.m +++ b/Library/PCTextFinder+UInterface.m @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCTextFinder+UInterface.h" diff --git a/PCLib/PCTextFinder.h b/Library/PCTextFinder.h similarity index 100% rename from PCLib/PCTextFinder.h rename to Library/PCTextFinder.h diff --git a/PCLib/PCTextFinder.m b/Library/PCTextFinder.m similarity index 100% rename from PCLib/PCTextFinder.m rename to Library/PCTextFinder.m diff --git a/PCLib/PreferenceController.h b/Library/PreferenceController.h similarity index 99% rename from PCLib/PreferenceController.h rename to Library/PreferenceController.h index eaf1815..f1ee0bf 100644 --- a/PCLib/PreferenceController.h +++ b/Library/PreferenceController.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PREFERENCE_CONTOLLER_PROTO_H diff --git a/PCLib/ProjectBuilder.h b/Library/ProjectBuilder.h similarity index 91% rename from PCLib/ProjectBuilder.h rename to Library/ProjectBuilder.h index aaf7d72..a808341 100644 --- a/PCLib/ProjectBuilder.h +++ b/Library/ProjectBuilder.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PROJECT_BUILDER_PROTO_H @@ -34,8 +32,7 @@ @protocol ProjectBuilder - (void)setActiveProject:(PCProject *)aProject; -- (void)closeProject:(PCProject *)aProject; -- (void)showInspectorForProject:(PCProject *)aProject; +//- (void)closeProject:(PCProject *)aProject; @end diff --git a/PCLib/ProjectCenter.h b/Library/ProjectCenter.h similarity index 84% rename from PCLib/ProjectCenter.h rename to Library/ProjectCenter.h index c9e1d95..f8eb472 100644 --- a/PCLib/ProjectCenter.h +++ b/Library/ProjectCenter.h @@ -1,4 +1,3 @@ - /* GNUstep ProjectCenter - http://www.gnustep.org @@ -21,26 +20,30 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PROJECTCENTER_H #define _PROJECTCENTER_H #include -#include #include -#include +#include +#include +#include +#include #include #include -#include -#include -#include #include -#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include + #include #include #include @@ -48,13 +51,6 @@ #include #include #include -#include -#include -#include -#include -#include -#include -#include #endif diff --git a/PCLib/ProjectComponent.h b/Library/ProjectComponent.h similarity index 100% rename from PCLib/ProjectComponent.h rename to Library/ProjectComponent.h diff --git a/PCLib/ProjectDebugger.h b/Library/ProjectDebugger.h similarity index 99% rename from PCLib/ProjectDebugger.h rename to Library/ProjectDebugger.h index d4ff272..b51f0b2 100644 --- a/PCLib/ProjectDebugger.h +++ b/Library/ProjectDebugger.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PROJECT_DEBUGGER_PROTO_H diff --git a/PCLib/ProjectDelegate.h b/Library/ProjectDelegate.h similarity index 100% rename from PCLib/ProjectDelegate.h rename to Library/ProjectDelegate.h diff --git a/PCLib/ProjectEditor.h b/Library/ProjectEditor.h similarity index 99% rename from PCLib/ProjectEditor.h rename to Library/ProjectEditor.h index b5d88ce..e05a797 100644 --- a/PCLib/ProjectEditor.h +++ b/Library/ProjectEditor.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PROJECT_EDITOR_PROTO_H diff --git a/PCLib/ProjectType.h b/Library/ProjectType.h similarity index 93% rename from PCLib/ProjectType.h rename to Library/ProjectType.h index 489515d..5965bdc 100644 --- a/PCLib/ProjectType.h +++ b/Library/ProjectType.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PROJECTTYPE_H @@ -43,12 +41,10 @@ + (id)sharedCreator; -- (Class)projectClass; // Returns the real project class +- (Class)projectClass; - (NSString *)projectTypeName; -- (NSDictionary *)typeTable; -// Type Attributes live in the ProjType.table in the wrapper - (PCProject *)createProjectAt:(NSString *)path; - (PCProject *)openProjectAt:(NSString *)path; diff --git a/Library/Resources/BuildAttributes.gorm/data.classes b/Library/Resources/BuildAttributes.gorm/data.classes new file mode 100644 index 0000000..ea7bceb --- /dev/null +++ b/Library/Resources/BuildAttributes.gorm/data.classes @@ -0,0 +1,177 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontFontPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "searchOrderPopupDidChange:", + "setSearchOrder:", + "removeSearchOrder:", + "addSearchOrder:", + "changeCommonProjectEntry:" + ); + Super = NSObject; + }; + PCProjectInspector = { + Actions = ( + "searchOrderPopupDidChange:", + "setSearchOrder:", + "removeSearchOrder:", + "addSearchOrder:", + "changeCommonProjectEntry:" + ); + Outlets = ( + buildAttributesView, + projectNameLabel, + searchOrderPopup, + searchOrderList, + searchOrderTF, + searchOrderSet, + searchOrderRemove, + searchOrderAdd, + cppOptField, + objcOptField, + cOptField, + ldOptField, + installPathField, + toolField, + searchOrderScroll + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Library/Resources/BuildAttributes.gorm/objects.gorm b/Library/Resources/BuildAttributes.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..98de3069135b5f9081e7040fdaa73fc5c4826f91 GIT binary patch literal 11838 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 F{9mlbTI&D+ literal 0 HcmV?d00001 diff --git a/Library/Resources/FileAttributes.gorm/data.classes b/Library/Resources/FileAttributes.gorm/data.classes new file mode 100644 index 0000000..9386ad2 --- /dev/null +++ b/Library/Resources/FileAttributes.gorm/data.classes @@ -0,0 +1,162 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "fileNameDidChange:" + ); + Super = NSObject; + }; + PCFileNameField = { + Actions = ( + ); + Outlets = ( + ); + Super = NSTextField; + }; + PCProjectInspector = { + Actions = ( + "fileNameDidChange:" + ); + Outlets = ( + fileIconView, + fileNameField, + fileAttributesView + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Library/Resources/FileAttributes.gorm/objects.gorm b/Library/Resources/FileAttributes.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..61ffe7790d80fbe4cabd34a28d10cfad6fd5f667 GIT binary patch literal 4362 zcmcgv-BTM?6h8?G0YV^r77DHS(N^o%xvi}ht0e@XC=HZA@w+a`QnoI;nPe%{aU5QK z+v!`!@xd3z(U;AP&rbgh-~3ZN=ic2-mLxcJteeUGKIfi$&hMOi?owg1=IE6ftyHB*Q$_$5X=zSc5$Mt6;-@(4hnlEQ19#sQ5h_s+d%C*^n-qfF&prr{6L30}?4NQqWr{vN5W*$uf!_=q?of z>6qwcigmqKv8}SSRSZ}xaL32fxfxP<{wIL(^!yw(xu9X7PZmwXaiCu;9%D6t>tb5; z!9ZxEN;jlbOlRmTcJ}I@742MLPJw)vhs7DO(SWY@p zFa|iR1kNy_6gb0J+lOsJnn5lw12+jl8kDK5;)ob#14#r)+2b)BRU9G?QIc-3N2LXK z$vF;)mqXlkVHI{@$IB>_#5x%y-cY)PjI>K*tkDWh;y!Y5Oi2PRj{7YB5PwEAZkpJi~~~)r|Uh^u`d-D< z9GzH$7~?3NH?>-=c%W4(DoTUbBgWYYH}pei(a_B@Ep5T?&qplU4oR8&t3|Y6__%1# zMesW#PQhT)HVwEwuZ%Dh8eu3w;m{_S?)bs6M(rAbl>;S5a2?7nzEB^K3d9!`eIx)g zz)g5Sr6VD)v3|PKIhQK`Yi^UDcZRK+VcbYls(9C_8v*Z2VuD>OZ<{t>iCuu_l&n)M zxxBol=<>>IrmI4HA4= zE$R-n*_|L~eJJlS9ro~*Hris1@^zIbt()|(QdsB6cdRW`G!%RAL3w0eVhwM8w4gvnE?j4^8BXLT z6g3x;PawUpLeHbcroh;a>R7Z5m^BB+VM;TW6iif_;hn~t^$G6+E~}$;ycRxG^JC%B z#}YEbvnWfnsWneWFTvOJ_FzBTCpDBC*9CsmhWi$o&!@%}HJ=Q*C)s0tWqK=q#ywA` z9#1b$&w(s>F+VVZzu&@JGXE(F5>z>>~q<>jzwjj3@0QR+z?azW>Rlwi(bkyQ2_83 zaI=Y7^quSCo%)nFNw(gix|iyYsZLS-3Dvi${*>x9sy`FcFe=%v?mMRL(3`M%lTB|D zKUdpCVn~p8weiF7;rT^<+S~L}_@$zcJT?OQ)<^AKN!5#ADXRWZkNt@-+gp~=%L;eW z=r9A`riy}fPsJugjL4#uEZq2uV?=TxAS%^ literal 0 HcmV?d00001 diff --git a/Library/Resources/GNUmakefile b/Library/Resources/GNUmakefile new file mode 100644 index 0000000..357b154 --- /dev/null +++ b/Library/Resources/GNUmakefile @@ -0,0 +1,35 @@ +# +# GNUmakefile - Generated by ProjectCenter +# + +include $(GNUSTEP_MAKEFILES)/common.make +GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT) + + +# +# Resources +# + +RESOURCE_SET_NAME = PCLR +PCLR_RESOURCE_FILES_INSTALL_DIR = Library/Libraries/Resources/ProjectCenter +#PCLR_LANGUAGES = English German French Italian TraditionalChinese +#PCLR_LOCALIZED_RESOURCE_FILES = \ + +PCLR_RESOURCE_COMPONENTS = \ + NewSubproject.gorm \ + ProjectInspector.gorm + +PCLR_RESOURCE_FILES = \ + cfile.template \ + cheader.template \ + class.template \ + gsmarkup.template \ + header.template \ + protocol.template + + +-include GNUmakefile.preamble + +include $(GNUSTEP_MAKEFILES)/resource-set.make + +-include GNUmakefile.postamble diff --git a/Library/Resources/NewFile.gorm/data.classes b/Library/Resources/NewFile.gorm/data.classes new file mode 100644 index 0000000..ead204c --- /dev/null +++ b/Library/Resources/NewFile.gorm/data.classes @@ -0,0 +1,163 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "closeNewFilePanel:", + "createFile:", + "newFilePopupChanged:" + ); + Super = NSObject; + }; + PCFileManager = { + Actions = ( + "closeNewFilePanel:", + "createFile:", + "newFilePopupChanged:" + ); + Outlets = ( + newFilePanel, + nfImage, + nfTypePB, + nfDescriptionTV, + nfNameField, + nfCancelButton, + nfCreateButton + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Library/Resources/NewFile.gorm/objects.gorm b/Library/Resources/NewFile.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..aafc33ce06e7785a5c70d6a2031f9371b469fc5d GIT binary patch literal 7411 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 L&4Gl_Ug-V{5!TdS literal 0 HcmV?d00001 diff --git a/Library/Resources/ProjectDescription.gorm/data.classes b/Library/Resources/ProjectDescription.gorm/data.classes new file mode 100644 index 0000000..7d06074 --- /dev/null +++ b/Library/Resources/ProjectDescription.gorm/data.classes @@ -0,0 +1,173 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontFontPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "addAuthor:", + "removeAuthor:", + "upAuthor:", + "downAuthor:", + "changeCommonProjectEntry:" + ); + Super = NSObject; + }; + PCProjectInspector = { + Actions = ( + "addAuthor:", + "removeAuthor:", + "upAuthor:", + "downAuthor:", + "changeCommonProjectEntry:" + ); + Outlets = ( + descriptionField, + releaseField, + licenseField, + licDescriptionField, + urlField, + authorsScroll, + authorAdd, + authorRemove, + authorUp, + authorDown, + projectDescriptionView + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Library/Resources/ProjectDescription.gorm/objects.gorm b/Library/Resources/ProjectDescription.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..728b9fae12cde8a85508e603d9b3148b43ab5b60 GIT binary patch literal 8208 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 U2b@_4{3w(AI^5fWOQ+BO0k9zpK>z>% literal 0 HcmV?d00001 diff --git a/Library/Resources/ProjectInspector.gorm/data.classes b/Library/Resources/ProjectInspector.gorm/data.classes new file mode 100644 index 0000000..56eec12 --- /dev/null +++ b/Library/Resources/ProjectInspector.gorm/data.classes @@ -0,0 +1,158 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontFontPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "inspectorPopupDidChange:" + ); + Super = NSObject; + }; + PCProjectInspector = { + Actions = ( + "inspectorPopupDidChange:" + ); + Outlets = ( + inspectorPanel, + inspectorPopup, + inspectorView, + contentView + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Library/Resources/ProjectInspector.gorm/objects.gorm b/Library/Resources/ProjectInspector.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..be34005acc80d5c3ae9458d2a67a630e3ae1cc43 GIT binary patch literal 2865 zcmcgu%~Bgj5bj+G2_Ym)0?8PhnEcq_{PtiRV)ADs$`l9IRJO2>sYPsIInu65tb%>> zBW(GQ$}yEESiL|hIp&ZD$RW>?boZj%zZ+ud$8gO=|(z2`is(lBe;<1)BK6B$gYDYj$>y_R=O5<}$Ko7}BZlQn6Z zQ`!~NgDF<2@YD=XRno8z4SIUu!&7jf2?6Ya2Pe>tM?Um$O6!#py;2%>z$VQ;tqe%F zL;W^5G&+GjdUr81Nbz2PS*@H(lv8P_lgcxkRvDPG?7IJq))^`b8Owgua!+M64SCD{ z);;O^-jM)i09$~tR?G8Snp(c`BXt{p0$d_CLI1^*sS248;P#h$jW@iMEABRfO`GCk?mFo0;m0Amw`f-N5Z6 z(h?I<`xwg%Rc6_i@HLTD_&SFpz$=;t5MoKq@zeu47HyLfKhojwqDJ1vNMAT@GJ=Ar z=9XYP-k2el)jZqZBgc6;U?tuf=k&=_d-c~qGXbl5Z6;xBCQShmP%w00 z85GuHTfA$Dn}39rrh!*gjXAX2agJS*8$hxJy}H0_giZys>32H5_Z?*eit#X{bH5Y| z)WvIqDlWd#fwic1ZfDXQv$8~1uD{aCo!472jZnMwGQ_vyGl%&0uxHAB2ml$mfM`A{ zYYjQ;L_@&d7zm~kM!yjpd2WcjKQWJgJxAW5I3}-b2L#cwzQQ;*-?=0Mwk}Ra5HJK9O5y@OQ4WrUU%#D+d<}c%O#$0_8!EC%S=^95; zo1iZZ-XyPXX|M7u5wG%TO4dI4#oXlf|MX}@dy`JQNyj-IRCEJZ^=vtrEpxe`LP9ZQ zQQ6q1eishtsZ#+7=uhW}X7RSx%O!d_j=jlZ^ntp{aklSxuH;0uz)ACQ%RBP9a+qg1 zl1AfY;*S@CzLX;7-rp}Ezr9B_>cdNTB*lfaCU`UykMgKO_ayssjEV8>!)5TBqqOlxg!*eOMl!p-Yd^N$Tnub&1=n)}#N~k)- zjql-D%6gv=JfiaKQ-S7Ut}d|t_)HtuMqCu8(d~_YAS|E1m1u2PivQxMesKLhNW(5t zA|#;n6Zi1WphoF&ePpWyjje9C-D*1g?X%nTy*Rw^uEsXUxjToSsYNbM`kTt5FDL;R zAi9kk+UNz}KOufTSd6lCQTOP*O7Bg2uh9DowFL8G?qNS@y8)HlQKK7V_DgNHn1Eiq zC@t(0^d1Fd8^0PXMH^8Tzt(!M4_y34G* + Author: $FULLUSERNAME$ - This file is part of GNUstep. + Created: $DATE$ by $USERNAME$ This application is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -20,14 +20,10 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#include "PCProject.h" +#include "$FILENAME$.h" -@interface PCProject (UInterface) - -- (void)_initUI; +@implementation $FILENAME$ @end diff --git a/PCBaseFileTypes/gsmarkup.template b/Library/Resources/gsmarkup.template similarity index 100% rename from PCBaseFileTypes/gsmarkup.template rename to Library/Resources/gsmarkup.template diff --git a/PCLib/PCFileManager+UInterface.h b/Library/Resources/header.template similarity index 72% rename from PCLib/PCFileManager+UInterface.h rename to Library/Resources/header.template index e692c0a..a9ff2b4 100644 --- a/PCLib/PCFileManager+UInterface.h +++ b/Library/Resources/header.template @@ -1,11 +1,11 @@ /* - GNUstep ProjectCenter - http://www.gnustep.org + Project: $PROJECTNAME$ - Copyright (C) 2000-2002 Free Software Foundation + Copyright (C) $YEAR$ Free Software Foundation - Author: Philippe C.D. Robert + Author: $FULLUSERNAME$ - This file is part of GNUstep. + Created: $DATE$ by $USERNAME$ This application is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -20,15 +20,19 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#include "PCFileManager.h" +#ifndef _$UCFILENAME$_H_ +#define _$UCFILENAME$_H_ -@interface PCFileManager (UInterface) +#include -- (void)_initUI; +@interface $FILENAME$ : NSObject +{ + +} @end +#endif // _$UCFILENAME$_H_ + diff --git a/PCAppProj/Templates/GNUmakefile.postamble b/Library/Resources/postamble.template similarity index 100% rename from PCAppProj/Templates/GNUmakefile.postamble rename to Library/Resources/postamble.template diff --git a/PCLib/PCProjectManager+UInterface.h b/Library/Resources/protocol.template similarity index 71% rename from PCLib/PCProjectManager+UInterface.h rename to Library/Resources/protocol.template index d89f990..24bd5f2 100644 --- a/PCLib/PCProjectManager+UInterface.h +++ b/Library/Resources/protocol.template @@ -1,11 +1,11 @@ /* - GNUstep ProjectCenter - http://www.gnustep.org + Project: $PROJECTNAME$ - Copyright (C) 2000-2002 Free Software Foundation + Copyright (C) $YEAR$ Free Software Foundation - Author: Philippe C.D. Robert + Author: $FULLUSERNAME$ - This file is part of GNUstep. + Created: $DATE$ by $USERNAME$ This application is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -20,14 +20,8 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#include "PCProjectManager.h" - -@interface PCProjectManager (UInterface) - -- (void)_initUI; +@protocol $FILENAME$ @end diff --git a/PCLib/Server.h b/Library/Server.h similarity index 99% rename from PCLib/Server.h rename to Library/Server.h index ca63307..8b6b64e 100644 --- a/PCLib/Server.h +++ b/Library/Server.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _SERVER_PROTO_H diff --git a/Modules/ApplicationProject/GNUmakefile b/Modules/ApplicationProject/GNUmakefile new file mode 100644 index 0000000..7261c95 --- /dev/null +++ b/Modules/ApplicationProject/GNUmakefile @@ -0,0 +1,56 @@ +# +# GNUmakefile - Generated by ProjectCenter +# Written by Philippe C.D. Robert +# + +include $(GNUSTEP_MAKEFILES)/common.make + +# +# Bundle +# + +PACKAGE_NAME = ApplicationProject +BUNDLE_NAME = ApplicationProject +ApplicationProject_PRINCIPAL_CLASS = PCAppProj + + +# +# Additional libraries +# +#ApplicationProject_LIBRARIES_DEPEND_UPON += -lProjectCenter + +# +# Resource files +# +ApplicationProject_RESOURCE_FILES= \ +Resources/AppController.h \ +Resources/AppController.m \ +Resources/main.m \ +Resources/PC.project \ +Resources/Main.gorm \ +Resources/Inspector.gorm + +# +# Header files +# +ApplicationProject_HEADERS= \ +PCAppProj.h \ +PCAppProject.h \ +PCAppProject+Inspector.h + +# +# Class files +# +ApplicationProject_OBJC_FILES= \ +PCAppProj.m \ +PCAppProject.m \ +PCAppProject+Inspector.m + +# +# C files +# +ApplicationProject_C_FILES= + +include ../GNUmakefile.bundles +include $(GNUSTEP_MAKEFILES)/bundle.make + diff --git a/PCAppProj/PCAppProj.h b/Modules/ApplicationProject/PCAppProj.h similarity index 97% rename from PCAppProj/PCAppProj.h rename to Modules/ApplicationProject/PCAppProj.h index f81d0d8..605f99d 100644 --- a/PCAppProj/PCAppProj.h +++ b/Modules/ApplicationProject/PCAppProj.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCAPPPROJ_PCAPPPROJ_H @@ -41,9 +39,7 @@ + (id)sharedCreator; - (Class)projectClass; - - (NSString *)projectTypeName; -- (NSDictionary *)typeTable; - (PCProject *)createProjectAt:(NSString *)path; - (PCProject *)openProjectAt:(NSString *)path; diff --git a/Modules/ApplicationProject/PCAppProj.m b/Modules/ApplicationProject/PCAppProj.m new file mode 100644 index 0000000..ba22b20 --- /dev/null +++ b/Modules/ApplicationProject/PCAppProj.m @@ -0,0 +1,206 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +/* + Description: + + PCAppProj creates new project of the type Application! +*/ + +#include "ProjectCenter/PCFileCreator.h" +#include "ProjectCenter/PCMakefileFactory.h" + +#include "PCAppProj.h" +#include "PCAppProject.h" + +@implementation PCAppProj + +static PCAppProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) + { + _creator = [[[self class] alloc] init]; + } + + return _creator; +} + +- (Class)projectClass +{ + return [PCAppProject class]; +} + +- (NSString *)projectTypeName +{ + return @"Application"; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCAppProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath: path attributes: nil]) + { + NSString *_file = nil; + NSString *_2file = nil; +// NSString *_resourcePath = nil; + NSString *projectName = nil; + NSMutableDictionary *projectDict = nil; + NSDictionary *infoDict = nil; + NSBundle *projBundle = [NSBundle bundleForClass:[self class]]; + NSString *mainNibFile = nil; + PCFileCreator *fc = [PCFileCreator sharedCreator]; + + project = [[[PCAppProject alloc] init] autorelease]; + + _file = [projBundle pathForResource:@"PC" ofType:@"project"]; + projectDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + projectName = [path lastPathComponent]; + if ([[projectName pathExtension] isEqualToString:@"subproj"]) + { + projectName = [projectName stringByDeletingPathExtension]; + } + [projectDict setObject:projectName forKey:PCProjectName]; + [projectDict setObject:[self projectTypeName] forKey:PCProjectType]; + [projectDict setObject:[[NSCalendarDate date] description] + forKey:PCCreationDate]; + [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; + [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + [project setProjectName:projectName]; + + // Copy the project files to the provided path + _file = [projBundle pathForResource:@"main" ofType:@"m"]; + _2file = [path stringByAppendingPathComponent:@"main.m"]; + [fm copyPath:_file toPath:_2file handler:nil]; + [fc replaceTagsInFileAtPath:_2file withProject:project]; + + _file = [projBundle pathForResource:@"AppController" ofType:@"m"]; + _2file = [path stringByAppendingPathComponent:@"AppController.m"]; + [fm copyPath:_file toPath:_2file handler:nil]; + [fc replaceTagsInFileAtPath:_2file withProject:project]; + + _file = [projBundle pathForResource:@"AppController" ofType:@"h"]; + _2file = [path stringByAppendingPathComponent:@"AppController.h"]; + [fm copyPath:_file toPath:_2file handler:nil]; + [fc replaceTagsInFileAtPath:_2file withProject:project]; + + // GNUmakefile.postamble + [[PCMakefileFactory sharedFactory] createPostambleForProject:project]; + + // Resources +/* _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath + attributes:nil];*/ + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] + attributes:nil]; + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] + attributes:nil]; + + // Main NIB + mainNibFile = [path stringByAppendingPathComponent: + [NSString stringWithFormat:@"%@.gorm", projectName]]; + + _file = [projBundle pathForResource:@"Main" ofType:@"gorm"]; + [fm copyPath:_file toPath:mainNibFile handler:nil]; + [projectDict setObject:[mainNibFile lastPathComponent] + forKey:PCMainInterfaceFile]; + [projectDict + setObject:[NSArray arrayWithObject:[mainNibFile lastPathComponent]] + forKey:PCInterfaces]; + + // Create the Info-gnutstep.plist + infoDict = [NSDictionary dictionaryWithObjectsAndKeys: + @"Generated by ProjectCenter, do not edit", @"!", +// @"", @"ApplicationDescription", +// @"", @"ApplicationIcon", + projectName, @"ApplicationName", + @"0.1", @"ApplicationRelease", + [NSArray array], @"Authors", + @"Copyright (C) 200x by ...", @"Copyright", + @"Released under...", @"CopyrightDescription", + @"0.1", @"FullVersionID", + projectName, @"NSExecutable", +// @"", @"NSIcon", + [mainNibFile lastPathComponent], @"NSMainNibFile", + [projectDict objectForKey:PCPrincipalClass], @"NSPrincipalClass", + @"Application", @"NSRole", +// @"", @"URL", + nil]; + + [infoDict + writeToFile:[path stringByAppendingPathComponent:@"Info-gnustep.plist"] + atomically:YES]; + + // Add Info-gnustep.plist into OTHER_RESOURCES + [projectDict + setObject:[NSArray arrayWithObjects:@"Info-gnustep.plist",nil] + forKey:PCOtherResources]; + + // Set the new dictionary - this causes the GNUmakefile to be written + // to disc + if(![project assignProjectDict:projectDict]) + { + NSRunAlertPanel(@"Attention!", + @"Could not load %@!", + @"OK", nil, nil, path); + return nil; + } + + [project assignInfoDict:(NSMutableDictionary *)infoDict]; + + // Save the project to disc + [project save]; + } + + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + PCAppProject *project = nil; + + project = [[[PCAppProject alloc] + initWithProjectDictionary:dict + path:[path stringByDeletingLastPathComponent]] autorelease]; + + [project loadInfoFileAtPath:[path stringByDeletingLastPathComponent]]; + + return project; +} + +@end diff --git a/Modules/ApplicationProject/PCAppProject+Inspector.h b/Modules/ApplicationProject/PCAppProject+Inspector.h new file mode 100644 index 0000000..781afa6 --- /dev/null +++ b/Modules/ApplicationProject/PCAppProject+Inspector.h @@ -0,0 +1,68 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCAppProject_Inspector_h_ +#define _PCAppProject_Inspector_h_ + +#include "PCAppProject.h" + +@interface PCAppProject (Inspector) + +// ---------------------------------------------------------------------------- +// --- User Interface +// ---------------------------------------------------------------------------- +- (void)createProjectAttributes; +- (NSView *)projectAttributesView; + +// ---------------------------------------------------------------------------- +// --- Actions +// ---------------------------------------------------------------------------- +- (void)setAppClass:(id)sender; +- (void)setFile:(id)sender; +- (void)clearFile:(id)sender; +- (void)setAppIcon:(id)sender; +- (void)clearAppIcon:(id)sender; +- (BOOL)setAppIconWithImageAtPath:(NSString *)path; +- (void)setMainNib:(id)sender; +- (BOOL)setMainNibWithFileAtPath:(NSString *)path; +- (void)clearMainNib:(id)sender; + +- (int)numberOfRowsInTableView:(NSTableView *)aTableView; +- (id) tableView: (NSTableView *)aTableView + objectValueForTableColumn: (NSTableColumn *)aTableColumn + row: (int)rowIndex; +- (void) tableView:(NSTableView *)aTableView + setObjectValue:anObject + forTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex; + +// ---------------------------------------------------------------------------- +// --- Notifications +// ---------------------------------------------------------------------------- +- (void)updateInspectorValues:(NSNotification *)aNotif; +- (void)tfGetFocus:(NSNotification *)aNotif; + +@end + +#endif diff --git a/Modules/ApplicationProject/PCAppProject+Inspector.m b/Modules/ApplicationProject/PCAppProject+Inspector.m new file mode 100644 index 0000000..94a8c33 --- /dev/null +++ b/Modules/ApplicationProject/PCAppProject+Inspector.m @@ -0,0 +1,487 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include +#include "PCAppProject+Inspector.h" + +// ---------------------------------------------------------------------------- +// --- Customized text field +// ---------------------------------------------------------------------------- +NSString *PCITextFieldGetFocus = @"PCITextFieldGetFocusNotification"; + +@implementation PCAppTextField + +- (BOOL)becomeFirstResponder +{ + [[NSNotificationCenter defaultCenter] + postNotificationName:PCITextFieldGetFocus + object:self]; + + return [super becomeFirstResponder]; +} + +@end + +@implementation PCAppProject (Inspector) + +// ---------------------------------------------------------------------------- +// --- User Interface +// ---------------------------------------------------------------------------- + +- (void)createProjectAttributes +{ + // TFs Buttons + [setFieldButton setRefusesFirstResponder:YES]; + [clearFieldButton setRefusesFirstResponder:YES]; + + // Document Icons + // + docExtColumn = [[NSTableColumn alloc] initWithIdentifier: @"extension"]; + [[docExtColumn headerCell] setStringValue:@"Extenstion"]; + [docExtColumn setWidth:75]; + docIconColumn = [[NSTableColumn alloc] initWithIdentifier: @"icon"]; + [[docIconColumn headerCell] setStringValue:@"Icon name"]; + + docIconsList = [[NSTableView alloc] initWithFrame:NSMakeRect(2,0,211,108)]; + [docIconsList setAllowsMultipleSelection:NO]; + [docIconsList setAllowsColumnReordering:NO]; + [docIconsList setAllowsColumnResizing:NO]; + [docIconsList setAllowsEmptySelection:YES]; + [docIconsList setAllowsColumnSelection:NO]; + [docIconsList addTableColumn:docExtColumn]; + [docIconsList addTableColumn:docIconColumn]; + [docIconsList setDataSource:self]; + [docIconsList setTarget:self]; + + // + [docIconsScroll setDocumentView:docIconsList]; + [docIconsScroll setHasHorizontalScroller:NO]; + [docIconsScroll setHasVerticalScroller:YES]; + [docIconsScroll setBorderType:NSBezelBorder]; + RELEASE(docIconsList); + + // Document icons buttons + [addDocIcon setRefusesFirstResponder:YES]; + [removeDocIcon setRefusesFirstResponder:YES]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(tfGetFocus:) + name:PCITextFieldGetFocus + object:nil]; + [projectAttributesView retain]; + + [self updateInspectorValues:nil]; +} + +- (NSView *)projectAttributesView +{ + if (!projectAttributesView) + { + if ([NSBundle loadNibNamed:@"Inspector" owner:self] == NO) + { + NSLog(@"PCAppProject: error loading Inspector NIB!"); + return nil; + } + [self createProjectAttributes]; + } + + return projectAttributesView; +} + +// ---------------------------------------------------------------------------- +// --- Actions +// ---------------------------------------------------------------------------- + +- (void)setAppClass:(id)sender +{ + [self setProjectDictObject:[appClassField stringValue] + forKey:PCPrincipalClass]; +} + +- (void)setIconViewImage:(NSImage *)image +{ + [iconView setImage:nil]; + [iconView display]; + + if (image == nil) + { + return; + } + + [iconView setImage:image]; + [iconView display]; +} + +- (void)setFile:(id)sender +{ + if (!activeTextField) + { + return; + } + + if (activeTextField == appImageField) + { + [self setAppIcon:self]; + } + else if (activeTextField == helpFileField) + { + } + else if (activeTextField == mainNIBField) + { + [self setMainNib:self]; + } +} + +- (void)clearFile:(id)sender +{ + if (!activeTextField) + { + return; + } + + if (activeTextField == appImageField) + { + [self clearAppIcon:self]; + } + else if (activeTextField == helpFileField) + { + } + else if (activeTextField == mainNIBField) + { + [self clearMainNib:self]; + } + [self setIconViewImage:nil]; +} + +// Application Icon +- (void)setAppIcon:(id)sender +{ + int result; + NSArray *fileTypes = [NSImage imageFileTypes]; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + NSString *dir = nil; + + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setTitle:@"Set Application Icon"]; + + dir = [[NSUserDefaults standardUserDefaults] + objectForKey:@"LastOpenDirectory"]; + result = [openPanel runModalForDirectory:dir + file:nil + types:fileTypes]; + + if (result == NSOKButton) + { + NSString *imageFilePath = [[openPanel filenames] objectAtIndex:0]; + + if (![self setAppIconWithImageAtPath:imageFilePath]) + { + NSRunAlertPanel(@"Error while opening file!", + @"Couldn't open %@", @"OK", nil, nil,imageFilePath); + } + } +} + +- (void)clearAppIcon:(id)sender +{ + [appImageField setStringValue:@""]; + [infoDict setObject:@"" forKey:@"NSIcon"]; + [infoDict setObject:@"" forKey:@"ApplicationIcon"]; + + [self setProjectDictObject:@"" forKey:PCAppIcon]; +} + +- (BOOL)setAppIconWithImageAtPath:(NSString *)path +{ + NSImage *image = nil; + NSString *imageName = nil; + + if (!(image = [[NSImage alloc] initWithContentsOfFile:path])) + { + return NO; + } + + imageName = [path lastPathComponent]; + + [appImageField setStringValue:imageName]; + + [self setIconViewImage:image]; + + [self addAndCopyFiles:[NSArray arrayWithObject:path] forKey:PCImages]; + + [infoDict setObject:imageName forKey:@"NSIcon"]; + [infoDict setObject:imageName forKey:@"ApplicationIcon"]; + + [self setProjectDictObject:imageName forKey:PCAppIcon]; + + return YES; +} + +// Main Interface File +- (void)setMainNib:(id)sender +{ + int result; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + NSString *dir = nil; + + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setTitle:@"Set Main Interface File"]; + + dir = [[NSUserDefaults standardUserDefaults] + objectForKey:@"LastOpenDirectory"]; + result = [openPanel runModalForDirectory:dir + file:nil + types:[NSArray arrayWithObject:@"gorm"]]; + + if (result == NSOKButton) + { + NSString *file = [[openPanel filenames] objectAtIndex:0]; + + if (![self setMainNibWithFileAtPath:file]) + { + NSRunAlertPanel(@"Error while opening file!", + @"Couldn't open %@", @"OK", nil, nil,file); + } + } +} + +- (BOOL)setMainNibWithFileAtPath:(NSString *)path +{ + NSString *nibName = [path lastPathComponent]; + + [self setIconViewImage:[[NSWorkspace sharedWorkspace] iconForFile:path]]; + + [self addAndCopyFiles:[NSArray arrayWithObject:path] forKey:PCInterfaces]; + [infoDict setObject:nibName forKey:@"NSMainNibFile"]; + + [self setProjectDictObject:nibName forKey:PCMainInterfaceFile]; + + [mainNIBField setStringValue:nibName]; + + return YES; +} + +- (void)clearMainNib:(id)sender +{ + [mainNIBField setStringValue:@""]; + [infoDict setObject:@"" forKey:@"NSMainNibFile"]; + + [self setProjectDictObject:@"" forKey:PCMainInterfaceFile]; +} + +// Document Icons +- (void)addDocIcon:(id)sender +{ + int row; + NSMutableDictionary *entry = [NSMutableDictionary dictionaryWithCapacity:2]; + int selectedRow = [docIconsList selectedRow]; + + [entry setObject:@"" forKey:@"Extension"]; + [entry setObject:@"" forKey:@"Icon"]; + + if (selectedRow >= 0) + { + [docIconsItems insertObject:entry atIndex:selectedRow + 1]; + row = selectedRow + 1; + } + else + { + [docIconsItems addObject:entry]; + row = [docIconsItems count] - 1; + } + [docIconsList reloadData]; + + [docIconsList selectRow:row byExtendingSelection:NO]; + [docIconsList editColumn:0 row:row withEvent:nil select:YES]; + + [self setProjectDictObject:docIconsItems forKey:PCDocumentExtensions]; +} + +- (void)removeDocIcon:(id)sender +{ + int selectedRow = [docIconsList selectedRow]; + + if (selectedRow >= 0) + { + [docIconsItems removeObjectAtIndex:selectedRow]; + [docIconsList reloadData]; + } + + if (([docIconsList selectedRow] < 0) && ([docIconsItems count] > 0)) + { + [docIconsList selectRow:[docIconsItems count]-1 byExtendingSelection:NO]; + } + + [self setProjectDictObject:docIconsItems forKey:PCDocumentExtensions]; +} + +// ---------------------------------------------------------------------------- +// --- Document Icons browser +// ---------------------------------------------------------------------------- + +- (int)numberOfRowsInTableView: (NSTableView *)aTableView +{ + return [docIconsItems count]; +} + +- (id) tableView: (NSTableView *)aTableView + objectValueForTableColumn: (NSTableColumn *)aTableColumn + row: (int)rowIndex +{ + if ([[aTableColumn identifier] isEqualToString:@"extension"]) + { + return [[docIconsItems objectAtIndex:rowIndex] objectForKey:@"Extension"]; + } + else if ([[aTableColumn identifier] isEqualToString:@"icon"]) + { + return [[docIconsItems objectAtIndex:rowIndex] objectForKey:@"Icon"]; + } + + return nil; +} + +- (void) tableView:(NSTableView *)aTableView + setObjectValue:anObject + forTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex +{ + if (docIconsItems == nil || [docIconsItems count] <= 0) + { + return; + } + + if ([[aTableColumn identifier] isEqualToString:@"extension"]) + { + [[docIconsItems objectAtIndex:rowIndex] removeObjectForKey:@"Extension"]; + [[docIconsItems objectAtIndex:rowIndex] setObject:anObject + forKey:@"Extension"]; + } + else if ([[aTableColumn identifier] isEqualToString:@"icon"]) + { + [[docIconsItems objectAtIndex:rowIndex] removeObjectForKey:@"Icon"]; + [[docIconsItems objectAtIndex:rowIndex] setObject:anObject + forKey:@"Icon"]; + } + + [self setProjectDictObject:docIconsItems forKey:PCDocumentExtensions]; +} + +// ---------------------------------------------------------------------------- +// --- Notifications +// ---------------------------------------------------------------------------- + +- (void)updateInspectorValues:(NSNotification *)aNotif +{ +// NSLog (@"PCAppProject: updateInspectorValues"); + + // Project Attributes view + [projectTypeField setStringValue:[projectDict objectForKey:PCProjectType]]; + [projectNameField setStringValue:[projectDict objectForKey:PCProjectName]]; + [projectLanguageField setStringValue:[projectDict objectForKey:@"LANGUAGE"]]; + [appClassField setStringValue:[projectDict objectForKey:PCPrincipalClass]]; + + [appImageField setStringValue:[projectDict objectForKey:PCAppIcon]]; + [helpFileField setStringValue:[projectDict objectForKey:PCHelpFile]]; + [mainNIBField setStringValue:[projectDict objectForKey:PCMainInterfaceFile]]; + + docIconsItems = [projectDict objectForKey:PCDocumentExtensions]; + [docIconsList reloadData]; +} + +// TextFields (PCITextField subclass) +// +// NSTextField become first responder when user clicks on it and immediately +// lost first resonder status, so we can't catch when focus leaves textfield +// with resignFirstResponder: method overriding. Here we're using +// controlTextDidEndEditing (NSTextField's delegate method) to achieve this. + +- (void)tfGetFocus:(NSNotification *)aNotif +{ + id anObject = [aNotif object]; + NSString *file = nil; + NSString *path = nil; + + + if (anObject != appImageField + && anObject != helpFileField + && anObject != mainNIBField) + { + NSLog(@"tfGetFocus: not that textfield"); + return; + } + + if (anObject == appImageField) + { + file = [appImageField stringValue]; + + if (![file isEqualToString:@""]) + { + path = [self dirForCategoryKey:PCImages]; + path = [path stringByAppendingPathComponent:file]; + [self setIconViewImage:[[NSImage alloc] + initWithContentsOfFile:path]]; + } + activeTextField = appImageField; + } + else if (anObject == helpFileField) + { + activeTextField = helpFileField; + } + else if (anObject == mainNIBField) + { + file = [mainNIBField stringValue]; + + if (![file isEqualToString:@""]) + { + path = [projectPath stringByAppendingPathComponent:file]; + [self setIconViewImage:[[NSWorkspace sharedWorkspace] + iconForFile:path]]; + } + activeTextField = mainNIBField; + } + + [setFieldButton setEnabled:YES]; + [clearFieldButton setEnabled:YES]; +} + +- (void)controlTextDidEndEditing:(NSNotification *)aNotification +{ + id anObject = [aNotification object]; + + if (anObject != appImageField + && anObject != helpFileField + && anObject != mainNIBField) + { + NSLog(@"tfLostFocus: not that textfield"); + return; + } + + activeTextField = nil; + [self setIconViewImage:nil]; + + [setFieldButton setEnabled:NO]; + [clearFieldButton setEnabled:NO]; +} + +@end diff --git a/Modules/ApplicationProject/PCAppProject.h b/Modules/ApplicationProject/PCAppProject.h new file mode 100644 index 0000000..7e16652 --- /dev/null +++ b/Modules/ApplicationProject/PCAppProject.h @@ -0,0 +1,99 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +/* + Description: + + This is the project type 'Application' for GNUstep. You never should create + it yourself but use PCAppProj for doing this. Otherwise needed files don't + get copied to the right place. + */ + +#ifndef _PCAppProj_PCAppProject_h_ +#define _PCAppProj_PCAppProject_h_ + +#include +#include +#include + +@interface PCAppTextField : NSTextField +{ +} + +@end + +@interface PCAppProject : PCProject +{ + IBOutlet NSBox *projectAttributesView; + IBOutlet NSTextField *projectTypeField; + IBOutlet NSTextField *projectNameField; + IBOutlet NSTextField *projectLanguageField; + IBOutlet NSTextField *appClassField; + + PCAppTextField *activeTextField; + IBOutlet PCAppTextField *appImageField; + IBOutlet PCAppTextField *helpFileField; + IBOutlet PCAppTextField *mainNIBField; + + IBOutlet NSImageView *iconView; + NSImage *icon; + IBOutlet NSButton *setFieldButton; + IBOutlet NSButton *clearFieldButton; + + NSTableView *docIconsList; + NSTableColumn *docExtColumn; + NSTableColumn *docIconColumn; + NSMutableArray *docIconsItems; + IBOutlet NSScrollView *docIconsScroll; + + IBOutlet NSButton *addDocIcon; + IBOutlet NSButton *removeDocIcon; + + NSMutableDictionary *infoDict; +} + +// ---------------------------------------------------------------------------- +// --- Init and free +// ---------------------------------------------------------------------------- + +- (id)init; +- (void)assignInfoDict:(NSMutableDictionary *)dict; +- (void)loadInfoFileAtPath:(NSString *)path; +- (void)dealloc; + +@end + +@interface PCAppProject (GeneratedFiles) + +- (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key; +- (BOOL)writeInfoFile; +- (NSArray *)convertExtensions; +- (BOOL)writeMakefile; +- (void)appendHead:(PCMakefileFactory *)mff; +- (void)appendApplication:(PCMakefileFactory *)mff; +- (void)appendTail:(PCMakefileFactory *)mff; + +@end + +#endif diff --git a/Modules/ApplicationProject/PCAppProject.m b/Modules/ApplicationProject/PCAppProject.m new file mode 100644 index 0000000..c8b5efc --- /dev/null +++ b/Modules/ApplicationProject/PCAppProject.m @@ -0,0 +1,551 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include +#include + +#include "PCAppProject.h" +#include "PCAppProject+Inspector.h" +#include "PCAppProj.h" + +@implementation PCAppProject + +// ---------------------------------------------------------------------------- +// --- Init and free +// ---------------------------------------------------------------------------- + +- (id)init +{ + + if ((self = [super init])) + { + rootKeys = [[NSArray arrayWithObjects: + PCClasses, + PCHeaders, + PCOtherSources, + PCInterfaces, + PCImages, + PCOtherResources, + PCSubprojects, + PCDocuFiles, + PCSupportingFiles, + PCLibraries, + PCNonProject, + nil] retain]; + + rootCategories = [[NSArray arrayWithObjects: + @"Classes", + @"Headers", + @"Other Sources", + @"Interfaces", + @"Images", + @"Other Resources", + @"Subprojects", + @"Documentation", +// @"Context Help", + @"Supporting Files", +// @"Frameworks", + @"Libraries", + @"Non Project Files", + nil] retain]; + + rootEntries = [[NSDictionary + dictionaryWithObjects:rootCategories forKeys:rootKeys] retain]; + + } + return self; +} + +- (void)assignInfoDict:(NSMutableDictionary *)dict +{ + infoDict = [dict mutableCopy]; +} + +- (void)loadInfoFileAtPath:(NSString *)path +{ + NSString *infoFile = nil; + + infoFile = [path stringByAppendingPathComponent:@"Info-gnustep.plist"]; + if ([[NSFileManager defaultManager] fileExistsAtPath:infoFile]) + { + infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:infoFile]; + } + else + { + infoDict = [[NSMutableDictionary alloc] init]; + } +} + +- (void)dealloc +{ + NSLog (@"PCAppProject: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + RELEASE(infoDict); + RELEASE(projectAttributesView); + + RELEASE(rootCategories); + RELEASE(rootKeys); + RELEASE(rootEntries); + + [super dealloc]; +} + +// ---------------------------------------------------------------------------- +// --- PCProject overridings +// ---------------------------------------------------------------------------- + +- (Class)builderClass +{ + return [PCAppProj class]; +} + +- (NSString *)projectDescription +{ + return @"Project that handles GNUstep ObjC based applications."; +} + +- (BOOL)isExecutable +{ + return YES; +} + +- (NSString *)execToolName +{ + return [NSString stringWithString:@"openapp"]; +} + +- (NSArray *)fileTypesForCategoryKey:(NSString *)key +{ +// NSLog(@"fileTypesForCategoryKey: %@", key); + + if ([key isEqualToString:PCClasses]) + { + return [NSArray arrayWithObjects:@"m",nil]; + } + else if ([key isEqualToString:PCHeaders]) + { + return [NSArray arrayWithObjects:@"h",nil]; + } + else if ([key isEqualToString:PCOtherSources]) + { + return [NSArray arrayWithObjects:@"c",@"C",@"m",nil]; + } + else if ([key isEqualToString:PCInterfaces]) + { + return [NSArray arrayWithObjects:@"gmodel",@"gorm",nil]; + } + else if ([key isEqualToString:PCImages]) + { + return [NSImage imageFileTypes]; + } + else if ([key isEqualToString:PCSubprojects]) + { + return [NSArray arrayWithObjects:@"subproj",nil]; + } + else if ([key isEqualToString:PCLibraries]) + { + return [NSArray arrayWithObjects:@"so",@"a",@"lib",nil]; + } + + return nil; +} + +- (NSString *)dirForCategoryKey:(NSString *)key +{ + if ([key isEqualToString:PCImages]) + { + return [projectPath stringByAppendingPathComponent:@"Images"]; + } + else if ([key isEqualToString:PCDocuFiles]) + { + return [projectPath stringByAppendingPathComponent:@"Documentation"]; + } + + return projectPath; +} + +- (NSArray *)buildTargets +{ + return [NSArray arrayWithObjects: + @"app", @"debug", @"profile", @"dist", nil]; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects: + PCClasses, PCOtherSources, nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects: + PCInterfaces, PCOtherResources, PCImages, nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects: + PCDocuFiles, PCSupportingFiles, PCNonProject, nil]; +} + +- (NSArray *)allowableSubprojectTypes +{ + return [NSArray arrayWithObjects: + @"Bundle", @"Tool", @"Library", nil]; +} + +- (NSArray *)defaultLocalizableKeys +{ + return [NSArray arrayWithObjects: PCInterfaces, nil]; +} + +- (NSArray *)localizableKeys +{ + return [NSArray arrayWithObjects: + PCInterfaces, PCImages, PCOtherResources, PCDocuFiles, nil]; +} + +// ============================================================================ +// ==== File Handling +// ============================================================================ + +- (BOOL)removeFiles:(NSArray *)files forKey:(NSString *)key +{ + NSMutableArray *filesToRemove = [[files mutableCopy] autorelease]; + NSString *mainNibFile = [projectDict objectForKey:PCMainInterfaceFile]; + NSString *appIcon = [projectDict objectForKey:PCAppIcon]; + + if (!files || !key) + { + return NO; + } + + // Check for main NIB file + if ([key isEqualToString:PCInterfaces] && [files containsObject:mainNibFile]) + { + int ret; + ret = NSRunAlertPanel(@"Remove", + @"You've selected to remove main interface file.\nDo you still want to remove it?", + @"Remove", @"Leave", nil); + + if (ret == NSAlertAlternateReturn) // Leave + { + [filesToRemove removeObject:mainNibFile]; + } + else + { + [self clearMainNib:self]; + } + } + // Check for application icon files + else if ([key isEqualToString:PCImages] && [files containsObject:appIcon]) + { + int ret; + ret = NSRunAlertPanel(@"Remove", + @"You've selected to remove application icon file.\nDo you still want to remove it?", + @"Remove", @"Leave", nil); + + if (ret == NSAlertAlternateReturn) // Leave + { + [filesToRemove removeObject:appIcon]; + } + else + { + [self clearAppIcon:self]; + } + } + + return [super removeFiles:filesToRemove forKey:key]; +} + +- (BOOL)renameFile:(NSString *)fromFile toFile:(NSString *)toFile +{ + NSString *mainNibFile = [projectDict objectForKey:PCMainInterfaceFile]; + NSString *appIcon = [projectDict objectForKey:PCAppIcon]; + NSString *categoryKey = nil; + NSString *ff = [fromFile copy]; + NSString *tf = [toFile copy]; + BOOL success = NO; + + categoryKey = [self + keyForCategory:[projectBrowser nameOfSelectedRootCategory]]; + // Check for main NIB file + if ([categoryKey isEqualToString:PCInterfaces] + && [fromFile isEqualToString:mainNibFile]) + { + [self clearMainNib:self]; + if ([super renameFile:ff toFile:tf] == YES) + { + [self setMainNibWithFileAtPath: + [[self dirForCategoryKey:categoryKey] + stringByAppendingPathComponent:tf]]; + success = YES; + } + } + // Check for application icon files + else if ([categoryKey isEqualToString:PCImages] + && [fromFile isEqualToString:appIcon]) + { + [self clearAppIcon:self]; + if ([super renameFile:ff toFile:tf] == YES) + { + [self setAppIconWithImageAtPath: + [[self dirForCategoryKey:categoryKey] + stringByAppendingPathComponent:tf]]; + success = YES; + } + } + else if ([super renameFile:ff toFile:tf] == YES) + { + success = YES; + } + + [ff release]; + [tf release]; + + return success; +} + +@end + +@implementation PCAppProject (GeneratedFiles) + +- (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key +{ + id entry = [projectDict objectForKey:key]; + + if (entry == nil) + { + return; + } + + if ([entry isKindOfClass:[NSString class]] && [entry isEqualToString:@""]) + { + [infoDict removeObjectForKey:name]; + return; + } + + if ([entry isKindOfClass:[NSArray class]] && [entry count] <= 0) + { + [infoDict removeObjectForKey:name]; + return; + } + + [infoDict setObject:entry forKey:name]; +} + +- (BOOL)writeInfoFile +{ + NSString *infoFile = nil; + + [self writeInfoEntry:@"ApplicationDescription" forKey:PCDescription]; + [self writeInfoEntry:@"ApplicationIcon" forKey:PCAppIcon]; + [self writeInfoEntry:@"ApplicationName" forKey:PCProjectName]; + [self writeInfoEntry:@"ApplicationRelease" forKey:PCRelease]; + [self writeInfoEntry:@"Authors" forKey:PCAuthors]; + [self writeInfoEntry:@"Copyright" forKey:PCCopyright]; + [self writeInfoEntry:@"CopyrightDescription" forKey:PCCopyrightDescription]; + [self writeInfoEntry:@"FullVersionID" forKey:PCVersion]; + [self writeInfoEntry:@"NSExecutable" forKey:PCProjectName]; + [self writeInfoEntry:@"NSIcon" forKey:PCAppIcon]; + [self writeInfoEntry:@"NSMainNibFile" forKey:PCMainInterfaceFile]; + [self writeInfoEntry:@"NSPrincipalClass" forKey:PCPrincipalClass]; + [infoDict setObject:@"Application" forKey:@"NSRole"]; + [infoDict setObject:[self convertExtensions] forKey:@"NSTypes"]; + [self writeInfoEntry:@"URL" forKey:PCURL]; + + infoFile = [projectPath stringByAppendingPathComponent:@"Info-gnustep.plist"]; + + return [infoDict writeToFile:infoFile atomically:YES]; +} + +- (NSArray *)convertExtensions +{ + NSMutableArray *icons = [NSMutableArray arrayWithCapacity:1]; + NSMutableArray *extensions = [NSMutableArray arrayWithCapacity:1]; + NSArray *docIE = [projectDict objectForKey:PCDocumentExtensions]; + NSEnumerator *enumerator = [docIE objectEnumerator]; + id anObject; + + NSMutableArray *resArray = [[NSMutableArray alloc] init]; + NSMutableDictionary *tmpDict = [NSMutableDictionary dictionaryWithCapacity:1]; + NSString *ic; + NSArray *ex; + + while ((anObject = [enumerator nextObject])) + { + [icons addObject:[anObject objectForKey:@"Icon"]]; + [extensions addObject:[anObject objectForKey:@"Extension"]]; + } + + // At this point we have 2 arrays; 1 list of icons and 2 list of extensions. + // So go group it! + while ([icons count] && [extensions count]) + { + int i; + BOOL loaded = NO; + NSMutableDictionary *tdict; + NSString *tic; + + ic = [icons objectAtIndex:0]; + ex = [NSMutableArray arrayWithObject:[extensions objectAtIndex:0]]; + + for (i = 0; i < [resArray count]; i++) + { + tdict = [resArray objectAtIndex:i]; + tic = [tdict objectForKey:@"NSIcon"]; + + if([tic isEqualToString:ic]) + { + [[tdict objectForKey:@"NSUnixExtensions"] + addObject:[ex objectAtIndex:0]]; + loaded = YES; + continue; + } + } + + if (!loaded) + { + [tmpDict setObject:ic forKey:@"NSIcon"]; + [tmpDict setObject:ex forKey:@"NSUnixExtensions"]; + + [resArray addObject:[tmpDict copy]]; + } + + [tmpDict removeAllObjects]; + [icons removeObjectAtIndex:0]; + [extensions removeObjectAtIndex:0]; + } + + return resArray; +} + +// Overriding +- (BOOL)writeMakefile +{ + PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; + int i,j; + NSString *mfl = nil; + NSData *mfd = nil; + + // Save Info-gnustep.plist + [self writeInfoFile]; + + // Save the GNUmakefile backup + [super writeMakefile]; + + // Save GNUmakefile.preamble + [mf createPreambleForProject:self]; + + // Create the new file + [mf createMakefileForProject:projectName]; + + // Head + [self appendHead:mf]; + + // Application part + [self appendApplication:mf]; + + // Subprojects + if ([[projectDict objectForKey:PCSubprojects] count] > 0) + { + [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; + } + + // Resources + [mf appendResources]; + for (i = 0; i < [[self resourceFileKeys] count]; i++) + { + NSString *k = [[self resourceFileKeys] objectAtIndex:i]; + NSMutableArray *resources = [[projectDict objectForKey:k] mutableCopy]; + + if ([k isEqualToString:PCImages]) + { + for (j=0; j<[resources count]; j++) + { + [resources replaceObjectAtIndex:j + withObject:[NSString stringWithFormat:@"Images/%@", + [resources objectAtIndex:j]]]; + } + } + + [mf appendResourceItems:resources]; + [resources release]; + } + + [mf appendHeaders:[projectDict objectForKey:PCHeaders]]; + [mf appendClasses:[projectDict objectForKey:PCClasses]]; + [mf appendOtherSources:[projectDict objectForKey:PCOtherSources]]; + + // Tail + [self appendTail:mf]; + + // Write the new file to disc! + mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + if ((mfd = [mf encodedMakefile])) + { + if ([mfd writeToFile:mfl atomically:YES]) + { + return YES; + } + } + + return NO; +} + +- (void)appendHead:(PCMakefileFactory *)mff +{ + [mff appendString: + [NSString stringWithFormat:@"GNUSTEP_INSTALLATION_DIR = %@\n", + [projectDict objectForKey:PCInstallDir]]]; +} + +- (void)appendApplication:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n#\n# Application\n#\n"]; + [mff appendString: + [NSString stringWithFormat:@"PACKAGE_NAME = %@\n",projectName]]; + [mff appendString: + [NSString stringWithFormat:@"APP_NAME = %@\n",projectName]]; + + [mff appendString:[NSString stringWithFormat:@"%@_APPLICATION_ICON = %@\n", + projectName, [projectDict objectForKey:PCAppIcon]]]; + + // TODO: proper support for localisation + //[self appendString:[NSString stringWithFormat:@"%@_LANGUAGES=English\n",pnme]]; + //[self appendString:[NSString stringWithFormat:@"%@_LOCALIZED_RESOURCE_FILES=Localizable.strings\n",pnme]]; +} + +- (void)appendTail:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n\n#\n# Makefiles\n#\n"]; + [mff appendString:@"-include GNUmakefile.preamble\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/aggregate.make\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/application.make\n"]; + [mff appendString:@"-include GNUmakefile.postamble\n"]; +} + +@end diff --git a/Modules/ApplicationProject/Resources/AppController.h b/Modules/ApplicationProject/Resources/AppController.h new file mode 100644 index 0000000..c067629 --- /dev/null +++ b/Modules/ApplicationProject/Resources/AppController.h @@ -0,0 +1,52 @@ +/* + Project: $PROJECTNAME$ + + Copyright (C) $YEAR$ Free Software Foundation + + Author: $FULLUSERNAME$ + + Created: $DATE$ by $USERNAME$ + + Application Controller + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCAPPPROJ_APPCONTROLLER_H +#define _PCAPPPROJ_APPCONTROLLER_H + +#include + +@interface AppController : NSObject +{ +} + ++ (void)initialize; + +- (id)init; +- (void)dealloc; + +- (void)awakeFromNib; + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotif; +- (BOOL)applicationShouldTerminate:(id)sender; +- (void)applicationWillTerminate:(NSNotification *)aNotif; +- (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName; + +- (void)showPrefPanel:(id)sender; + +@end + +#endif diff --git a/Modules/ApplicationProject/Resources/AppController.m b/Modules/ApplicationProject/Resources/AppController.m new file mode 100644 index 0000000..41626a4 --- /dev/null +++ b/Modules/ApplicationProject/Resources/AppController.m @@ -0,0 +1,86 @@ +/* + Project: $PROJECTNAME$ + + Copyright (C) $YEAR$ Free Software Foundation + + Author: $FULLUSERNAME$ + + Created: $DATE$ by $USERNAME$ + + Application Controller + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "AppController.h" + +@implementation AppController + ++ (void)initialize +{ + NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; + + /* + * Register your app's defaults here by adding objects to the + * dictionary, eg + * + * [defaults setObject:anObject forKey:keyForThatObject]; + * + */ + + [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (id)init +{ + if ((self = [super init])) + { + } + return self; +} + +- (void)dealloc +{ + [super dealloc]; +} + +- (void)awakeFromNib +{ + [[NSApp mainMenu] setTitle:@"$PROJECTNAME$"]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotif +{ +} + +- (BOOL)applicationShouldTerminate:(id)sender +{ + return YES; +} + +- (void)applicationWillTerminate:(NSNotification *)aNotif +{ +} + +- (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName +{ +} + +- (void)showPrefPanel:(id)sender +{ +} + +@end diff --git a/Modules/ApplicationProject/Resources/GNUmakefile.postamble b/Modules/ApplicationProject/Resources/GNUmakefile.postamble new file mode 100644 index 0000000..00007e8 --- /dev/null +++ b/Modules/ApplicationProject/Resources/GNUmakefile.postamble @@ -0,0 +1,40 @@ +# +# GNUmakefile.postamble - Generated by ProjectCenter +# + +# Things to do before compiling +# before-all:: + +# Things to do after compiling +# after-all:: + +# Things to do before installing +# before-install:: + +# Things to do after installing +# after-install:: + +# Things to do before uninstalling +# before-uninstall:: + +# Things to do after uninstalling +# after-uninstall:: + +# Things to do before cleaning +# before-clean:: + +# Things to do after cleaning +# after-clean:: + +# Things to do before distcleaning +# before-distclean:: + +# Things to do after distcleaning +# after-distclean:: + +# Things to do before checking +# before-check:: + +# Things to do after checking +# after-check:: + diff --git a/PCAppProj/Templates/GNUmakefile.preamble b/Modules/ApplicationProject/Resources/GNUmakefile.preamble similarity index 93% rename from PCAppProj/Templates/GNUmakefile.preamble rename to Modules/ApplicationProject/Resources/GNUmakefile.preamble index 0aa73bd..e8c9281 100644 --- a/PCAppProj/Templates/GNUmakefile.preamble +++ b/Modules/ApplicationProject/Resources/GNUmakefile.preamble @@ -12,16 +12,17 @@ ADDITIONAL_OBJCFLAGS += # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += -# Additional include directories the compiler should search -ADDITIONAL_INCLUDE_DIRS += - # Additional LDFLAGS to pass to the linker +# (-l) will go here, I think ADDITIONAL_LDFLAGS += +# Additional include directories the compiler should search +# (-I) +ADDITIONAL_INCLUDE_DIRS += + # Additional library directories the linker should search +# (-L) ADDITIONAL_LIB_DIRS += - -ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling diff --git a/Modules/ApplicationProject/Resources/Inspector.gorm/data.classes b/Modules/ApplicationProject/Resources/Inspector.gorm/data.classes new file mode 100644 index 0000000..e61b29e --- /dev/null +++ b/Modules/ApplicationProject/Resources/Inspector.gorm/data.classes @@ -0,0 +1,181 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "setAppClass:", + "setFile:", + "clearFile:", + "setDocIcon:", + "removeDocIcon:" + ); + Super = NSObject; + }; + PCAppProject = { + Actions = ( + "setAppClass:", + "setFile:", + "clearFile:", + "setDocIcon:", + "removeDocIcon:" + ); + Outlets = ( + projectAttributesView, + projectTypeField, + projectNameField, + projectLanguageField, + appClassField, + iconView, + setFieldButton, + clearFieldButton, + appImageField, + helpFileField, + mainNIBField, + docIconsScroll, + addDocIcon, + removeDocIcon + ); + Super = NSObject; + }; + PCAppTextField = { + Actions = ( + ); + Outlets = ( + ); + Super = NSTextField; + }; +} \ No newline at end of file diff --git a/Modules/ApplicationProject/Resources/Inspector.gorm/objects.gorm b/Modules/ApplicationProject/Resources/Inspector.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..e864fd8abc137296123da1f5b798672fc23c66f9 GIT binary patch literal 11186 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 literal 0 HcmV?d00001 diff --git a/Modules/ApplicationProject/Resources/Main.gorm/data.classes b/Modules/ApplicationProject/Resources/Main.gorm/data.classes new file mode 100644 index 0000000..90c11ad --- /dev/null +++ b/Modules/ApplicationProject/Resources/Main.gorm/data.classes @@ -0,0 +1,154 @@ +{ + AppController = { + Actions = ( + "showPrefPanel:" + ); + Outlets = ( + ); + Super = NSObject; + }; + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontFontPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "showPrefPanel:" + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Modules/ApplicationProject/Resources/Main.gorm/objects.gorm b/Modules/ApplicationProject/Resources/Main.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..7065db78ff34ab98b1e2578a3cd1f8a03dafd792 GIT binary patch literal 3625 zcmb7G4OUvW== z$)efKswa(L93dvclV&b;&P?Ck7pR-Sb{^I*|%>rLy8$@t`rm8F6d@M-jf<#1%V zzzID;lbh9wRVz8RXIQrB5D7*Ah?n3}^YorIescxA1dk|sGhm6cODjVe^7 zA|2pqkwtYf$iuHgHm72=m1arKL(j!;3y(=IkLsh8307J5%r>wSBvNP3jzgm0H6Th7 z#A$_}3E5;c+6IK%_QqiyY1L7^XsLiS>N9_+=?G$iizeq&^WJvC*|@28j~8FyKudWul%)<m7rR-B7-U^aO!Fl$yBx#pMPS#!F+HLVf2K4}Pm_O=y`;F(&4|l({!JXDnJX}0-clQv7MI2qpbOU2Sk>D@h=QXd<6lDygnZ0M0?O?ZKHupOGf2pv7 z^BF{cMwSd28!ISWhwy6A+knTw+W9MG7ul2c$vsK*cRZh>S;`!k?ylpuw=LT;yhGP| z8+U$hfYjFtd?F0WghnMKgo7ND0U0E6Gls~~=|n~;7ZNG8oK6gdWI|lzTcE)TdMu1#_d&J8=@C*TZcw$M=-pc)0FyjW!W{7uScp-1=9FF7muG1m==B$AuU@iS-;y z?ciIJmmYu9iw=J~B!#@V!uMmK`xN`P-W_p)SBKEMD{k?c(i;tzKdSEZ9wzqf!4OEx z;u05?-aFmFK>lL!ecUVjQ0Zqw&)Jy!n^@f7(hv;piEF$*6rv8UkA^^85!ZP`=|v93 ziD-)@-Wrh`7nK_bg~V&I>Qzd;B5eRo8j zEaJy8Zep@u%<{Ij)IP9 zIemWGoe*WQ=JO8_(o(2Gn3BSe5FU#upPxZk7LR>?4q-(KFCg5P!cP!ZrSi`Zw#BN? zzd+cMBfml@iY=digHRGhpMQt&ND6;IcqoOJdXDD$q&?SZp#>l04j%kxOkg^QeGPF} z<)(=8+3Sj_z(zMG32^NL?dq_@Qn>Mfb|&n~yc-we4a@C#yr-s8;XzDk)Ko + +int +main(int argc, const char *argv[]) +{ + return NSApplicationMain (argc, argv); +} + diff --git a/PCBundleProj/GNUmakefile b/Modules/BundleProject/GNUmakefile similarity index 52% rename from PCBundleProj/GNUmakefile rename to Modules/BundleProject/GNUmakefile index c4f6418..ff8eadd 100644 --- a/PCBundleProj/GNUmakefile +++ b/Modules/BundleProject/GNUmakefile @@ -10,56 +10,47 @@ include $(GNUSTEP_MAKEFILES)/common.make - -# -# Subprojects -# - - - # # Bundle # - -PACKAGE_NAME = PCBundleProj -BUNDLE_NAME = PCBundleProj -PCBundleProj_PRINCIPAL_CLASS = PCBundleProj +PACKAGE_NAME = BundleProject +BUNDLE_NAME = BundleProject +BundleProject_PRINCIPAL_CLASS = PCBundleProj # # Additional libraries # - -PCBundleProj_LIBRARIES_DEPEND_UPON += -lProjectCenter +BundleProject_LIBRARIES_DEPEND_UPON += -lProjectCenter # # Resource files # - -PCBundleProj_RESOURCE_FILES= \ -PC.proj +BundleProject_RESOURCE_FILES = \ +Resources/PC.project \ +Resources/Inspector.gorm +#Resources/class.template \ +#Resources/header.template # # Header files # - -PCBundleProj_HEADERS= \ -PCBundleProject.h \ -PCBundleProj.h +BundleProject_HEADERS = \ +PCBundleProj.h \ +PCBundleProject.h # # Class files # -PCBundleProj_OBJC_FILES= \ -PCBundleProject.m \ -PCBundleProj.m +BundleProject_OBJC_FILES= \ +PCBundleProj.m \ +PCBundleProject.m # # C files # - -PCBundleProj_C_FILES= +BundleProject_C_FILES = include ../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make diff --git a/PCBundleProj/PCBundleProj.h b/Modules/BundleProject/PCBundleProj.h similarity index 97% rename from PCBundleProj/PCBundleProj.h rename to Modules/BundleProject/PCBundleProj.h index efac4d0..e856a20 100644 --- a/PCBundleProj/PCBundleProj.h +++ b/Modules/BundleProject/PCBundleProj.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCBUNDLEPROJ_H @@ -41,9 +39,7 @@ + (id)sharedCreator; - (Class)projectClass; - - (NSString *)projectTypeName; -- (NSDictionary *)typeTable; - (PCProject *)createProjectAt:(NSString *)path; - (PCProject *)openProjectAt:(NSString *)path; diff --git a/Modules/BundleProject/PCBundleProj.m b/Modules/BundleProject/PCBundleProj.m new file mode 100644 index 0000000..ed2e0f3 --- /dev/null +++ b/Modules/BundleProject/PCBundleProj.m @@ -0,0 +1,153 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + Description: creates new project of the type Bundle! + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include +#include "ProjectCenter/PCMakefileFactory.h" + +#include "PCBundleProj.h" +#include "PCBundleProject.h" + +@implementation PCBundleProj + +static PCBundleProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) + { + _creator = [[[self class] alloc] init]; + } + + return _creator; +} + +- (Class)projectClass +{ + return [PCBundleProject class]; +} + +- (NSString *)projectTypeName +{ + return @"Bundle"; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCBundleProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath:path attributes:nil]) + { + NSBundle *projectBundle = nil; + NSMutableDictionary *projectDict = nil; + NSString *projectName = nil; + NSString *_file = nil; + NSString *_2file = nil; +// NSString *_resourcePath; + PCFileCreator *pcfc = [PCFileCreator sharedCreator]; + + project = [[[PCBundleProject alloc] init] autorelease]; + + projectBundle = [NSBundle bundleForClass:[self class]]; + + _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; + projectDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + projectName = [path lastPathComponent]; + if ([[projectName pathExtension] isEqualToString:@"subproj"]) + { + projectName = [projectName stringByDeletingPathExtension]; + } + [projectDict setObject:projectName forKey:PCProjectName]; + [projectDict setObject:[self projectTypeName] forKey:PCProjectType]; + [projectDict setObject:projectName forKey:PCPrincipalClass]; + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + [project setProjectName:projectName]; + + // Copy the project files to the provided path + + // $PROJECTNAME$.m + _file = [NSString stringWithFormat:@"%@", projectName]; + _2file = [NSString stringWithFormat:@"%@.m", projectName]; + [pcfc createFileOfType:ObjCClass + path:[path stringByAppendingPathComponent:_file] + project:project]; + [projectDict setObject:[NSArray arrayWithObjects:_2file,nil] + forKey:PCClasses]; + + // $PROJECTNAME$.h already created by creating $PROJECTNAME$.m + _file = [NSString stringWithFormat:@"%@.h", projectName]; + [projectDict setObject:[NSArray arrayWithObjects:_file,nil] + forKey:PCHeaders]; + + // GNUmakefile.postamble + [[PCMakefileFactory sharedFactory] createPostambleForProject:project]; + + // Resources +/* _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath attributes:nil];*/ + [fm createDirectoryAtPath: + [path stringByAppendingPathComponent:@"Images"] + attributes:nil]; + [fm createDirectoryAtPath: + [path stringByAppendingPathComponent:@"Documentation"] + attributes:nil]; + + // Set the new dictionary - this causes the GNUmakefile to be written + if (![project assignProjectDict:projectDict]) + { + NSRunAlertPanel(@"Attention!", + @"Could not load %@!", + @"OK",nil,nil,path); + return nil; + } + + // Save the project to disc + [project save]; + } + + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + NSString *pPath = [path stringByDeletingLastPathComponent]; + + return [[[PCBundleProject alloc] + initWithProjectDictionary:dict + path:pPath] autorelease]; +} + +@end diff --git a/PCBundleProj/PCBundleProject.h b/Modules/BundleProject/PCBundleProject.h similarity index 67% rename from PCBundleProj/PCBundleProject.h rename to Modules/BundleProject/PCBundleProject.h index 66ee747..e40ea67 100644 --- a/PCBundleProj/PCBundleProject.h +++ b/Modules/BundleProject/PCBundleProject.h @@ -20,14 +20,12 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ /* Description: - This is the project type 'Application' for GNUstep. You never should create + This is the project type 'Bundle' for GNUstep. You never should create it yourself but use PCBundleProj for doing this. Otherwise needed files don't get copied to the right place. @@ -39,9 +37,16 @@ #include #include +@class PCMakefileFactory; + @interface PCBundleProject : PCProject { - NSTextField *principalClassField; + IBOutlet NSBox *projectAttributesView; + IBOutlet NSTextField *projectTypeField; + IBOutlet NSTextField *projectNameField; + IBOutlet NSTextField *projectLanguageField; + IBOutlet NSTextField *principalClassField; + IBOutlet NSTextField *bundleExtensionField; } //---------------------------------------------------------------------------- @@ -51,23 +56,23 @@ - (id)init; - (void)dealloc; -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- +@end -- (Class)builderClass; +@interface PCBundleProject (GeneratedFiles) - (BOOL)writeMakefile; +- (void)appendHead:(PCMakefileFactory *)mff; +- (void)appendLibraries:(PCMakefileFactory*)mff; +- (void)appendTail:(PCMakefileFactory *)mff; -- (NSArray *)sourceFileKeys; -- (NSArray *)resourceFileKeys; -- (NSArray *)otherKeys; -- (NSArray *)buildTargets; -- (NSString *)projectDescription; +@end -- (void)updateValuesFromProjectDict; +@interface PCBundleProject (Inspector) +- (NSView *)projectAttributesView; +- (void)updateInspectorValues:(NSNotification *)aNotif; - (void)setPrincipalClass:(id)sender; +- (void)setBundleExtension:(id)sender; @end diff --git a/Modules/BundleProject/PCBundleProject.m b/Modules/BundleProject/PCBundleProject.m new file mode 100644 index 0000000..e8741b8 --- /dev/null +++ b/Modules/BundleProject/PCBundleProject.m @@ -0,0 +1,366 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCBundleProj.h" +#include "PCBundleProject.h" + +#include +#include + +@implementation PCBundleProject + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) + { + rootKeys = [[NSArray arrayWithObjects: + PCClasses, + PCHeaders, + PCOtherSources, + PCInterfaces, + PCImages, + PCOtherResources, + PCSubprojects, + PCDocuFiles, + PCSupportingFiles, + PCLibraries, + PCNonProject, + nil] retain]; + + rootCategories = [[NSArray arrayWithObjects: + @"Classes", + @"Headers", + @"Other Sources", + @"Interfaces", + @"Images", + @"Other Resources", + @"Subprojects", + @"Documentation", + @"Supporting Files", + @"Libraries", + @"Non Project Files", + nil] retain]; + + rootEntries = [[NSDictionary + dictionaryWithObjects:rootCategories forKeys:rootKeys] retain]; + + } + + return self; +} + +- (void)dealloc +{ + NSLog(@"PCBundleProject: dealloc"); + [rootCategories release]; + [rootKeys release]; + [rootEntries release]; + + [projectAttributesView release]; + + [super dealloc]; +} + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (Class)builderClass +{ + return [PCBundleProj class]; +} + +- (NSString *)projectDescription +{ + return @"GNUstep Objective-C bundle project"; +} + +- (BOOL)isExecutable +{ + return NO; +} + +- (NSString *)execToolName +{ + return nil; +} + +- (NSArray *)fileTypesForCategoryKey:(NSString *)category +{ + if ([category isEqualToString:PCClasses]) + { + return [NSArray arrayWithObjects:@"m",nil]; + } + else if ([category isEqualToString:PCHeaders]) + { + return [NSArray arrayWithObjects:@"h",nil]; + } + else if ([category isEqualToString:PCOtherSources]) + { + return [NSArray arrayWithObjects:@"c",@"C",@"m",nil]; + } + else if ([category isEqualToString:PCInterfaces]) + { + return [NSArray arrayWithObjects:@"gmodel",@"gorm",nil]; + } + else if ([category isEqualToString:PCImages]) + { + return [NSImage imageFileTypes]; + } + else if ([category isEqualToString:PCSubprojects]) + { + return [NSArray arrayWithObjects:@"subproj",nil]; + } + else if ([category isEqualToString:PCLibraries]) + { + return [NSArray arrayWithObjects:@"so",@"a",@"lib",nil]; + } + + return nil; +} + +- (NSString *)dirForCategory:(NSString *)category +{ + if ([category isEqualToString:PCImages]) + { + return [projectPath stringByAppendingPathComponent:@"Images"]; + } + else if ([category isEqualToString:PCDocuFiles]) + { + return [projectPath stringByAppendingPathComponent:@"Documentation"]; + } + + return projectPath; +} + +- (NSArray *)buildTargets +{ + return [NSArray arrayWithObjects: + @"bundle", @"debug", @"profile", @"dist", nil]; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects:PCInterfaces,PCOtherResources,PCImages,nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; +} + +- (NSArray *)allowableSubprojectTypes +{ + return [NSArray arrayWithObjects: + @"Bundle", @"Tool", @"Library", nil]; +} + +- (NSArray *)defaultLocalizableKeys +{ + return [NSArray arrayWithObjects:PCInterfaces, nil]; +} + +- (NSArray *)localizableKeys +{ + return [NSArray arrayWithObjects: + PCInterfaces, PCImages, PCOtherResources, PCDocuFiles, nil]; +} + +@end + +@implementation PCBundleProject (GeneratedFiles) + +- (BOOL)writeMakefile +{ + PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; + int i,j; + NSString *mfl = nil; + NSData *mfd = nil; + + // Save the GNUmakefile backup + [super writeMakefile]; + + // Save GNUmakefile.preamble + [mf createPreambleForProject:self]; + + // Create the new file + [mf createMakefileForProject:projectName]; + + // Head + [self appendHead:mf]; + + // Libraries + [self appendLibraries:mf]; + + // Subprojects + if ([[projectDict objectForKey:PCSubprojects] count] > 0) + { + [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; + } + + // Resources + [mf appendResources]; + for (i = 0; i < [[self resourceFileKeys] count]; i++) + { + NSString *k = [[self resourceFileKeys] objectAtIndex:i]; + NSMutableArray *resources = [[projectDict objectForKey:k] mutableCopy]; + + if ([k isEqualToString:PCImages]) + { + for (j=0; j<[resources count]; j++) + { + [resources replaceObjectAtIndex:j + withObject:[NSString stringWithFormat:@"Images/%@", + [resources objectAtIndex:j]]]; + } + } + + [mf appendResourceItems:resources]; + [resources release]; + } + + [mf appendHeaders:[projectDict objectForKey:PCHeaders]]; + [mf appendClasses:[projectDict objectForKey:PCClasses]]; + [mf appendOtherSources:[projectDict objectForKey:PCOtherSources]]; + + // Tail + [self appendTail:mf]; + + // Write the new file to disc! + mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + if ((mfd = [mf encodedMakefile])) + { + if ([mfd writeToFile:mfl atomically:YES]) + { + return YES; + } + } + + return NO; +} + +- (void)appendHead:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n#\n# Bundle\n#\n"]; + [mff appendString:[NSString stringWithFormat:@"PACKAGE_NAME = %@\n", + projectName]]; + [mff appendString:[NSString stringWithFormat:@"BUNDLE_NAME = %@\n", + projectName]]; + [mff appendString:[NSString stringWithFormat:@"BUNDLE_EXTENSION = %@\n", + [projectDict objectForKey:PCBundleExtension]]]; + [mff appendString:[NSString stringWithFormat:@"BUNDLE_INSTALL_DIR = %@\n", + [projectDict objectForKey:PCInstallDir]]]; + [mff appendString:[NSString stringWithFormat:@"%@_PRINCIPAL_CLASS = %@\n", + projectName, [projectDict objectForKey:PCPrincipalClass]]]; +} + +- (void)appendLibraries:(PCMakefileFactory *)mff +{ + NSArray *libs = [projectDict objectForKey:PCLibraries]; + + [mff appendString:@"\n#\n# Libraries\n#\n"]; + + [mff appendString: + [NSString stringWithFormat:@"%@_LIBRARIES_DEPEND_UPON += ",projectName]]; + + if (libs && [libs count]) + { + NSString *tmp; + NSEnumerator *enumerator = [libs objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + if (![tmp isEqualToString:@"gnustep-base"] && + ![tmp isEqualToString:@"gnustep-gui"]) + { + [mff appendString:[NSString stringWithFormat:@"-l%@ ",tmp]]; + } + } + } +} + +- (void)appendTail:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n\n#\n# Makefiles\n#\n"]; + [mff appendString:@"-include GNUmakefile.preamble\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/aggregate.make\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/bundle.make\n"]; + [mff appendString:@"-include GNUmakefile.postamble\n"]; +} + +@end + +@implementation PCBundleProject (Inspector) + +- (NSView *)projectAttributesView +{ + if (projectAttributesView == nil) + { + if ([NSBundle loadNibNamed:@"Inspector" owner:self] == NO) + { + NSLog(@"PCBundleProject: error loading Inspector NIB!"); + return nil; + } + [projectAttributesView retain]; + [self updateInspectorValues:nil]; + } + + return projectAttributesView; +} + +- (void)updateInspectorValues:(NSNotification *)aNotif +{ + [projectTypeField setStringValue:@"Bundle"]; + [projectNameField setStringValue:projectName]; + [projectLanguageField + setStringValue:[projectDict objectForKey:@"LANGUAGE"]]; + [principalClassField + setStringValue:[projectDict objectForKey:PCPrincipalClass]]; + [bundleExtensionField + setStringValue:[projectDict objectForKey:PCBundleExtension]]; +} + +- (void)setPrincipalClass:(id)sender +{ + [self setProjectDictObject:[principalClassField stringValue] + forKey:PCPrincipalClass]; +} + +- (void)setBundleExtension:(id)sender +{ + [self setProjectDictObject:[bundleExtensionField stringValue] + forKey:PCBundleExtension]; +} + +@end + diff --git a/Modules/BundleProject/Resources/Inspector.gorm/data.classes b/Modules/BundleProject/Resources/Inspector.gorm/data.classes new file mode 100644 index 0000000..4c12c97 --- /dev/null +++ b/Modules/BundleProject/Resources/Inspector.gorm/data.classes @@ -0,0 +1,162 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontFontPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "setPrincipalClass:", + "setBundleExtension:" + ); + Super = NSObject; + }; + PCBundleProject = { + Actions = ( + "setPrincipalClass:", + "setBundleExtension:" + ); + Outlets = ( + projectAttributesView, + projectTypeField, + projectNameField, + projectLanguageField, + principalClassField, + bundleExtensionField + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Modules/BundleProject/Resources/Inspector.gorm/objects.gorm b/Modules/BundleProject/Resources/Inspector.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..53ffd5fea86fb6824d8154a27e02d2e1c0266989 GIT binary patch literal 6197 zcmcIoX?qh@6uwE*mNwA6K>@X*fP%;wcIragKnn^135&RZ(_}0IX%dojLxF;VyNoHHj4 zz~5GV&yIc)0JL2tL5Gq6Cf|MTIE$%87iR)Dx-1`(wbCrEPhl^8!76eHIt50W;&Uf!tbEAOoe0dV@5ukNhjIh zfFg~`ibTTn=0_wPy^CV>AH`#axkV&A^d}bXyLw+iqt>FDV)2uvL0W65SU_`7;Xe=z z&}_Rb3!1c6)#ku7n9J#cP?#n(_bDI*X#N3c)|RWrSbQim?KR>L{0!3r=W%Bi=W!oJ z@AT%1OGfZC$%tjeR7v(hQ+B=^pJDQGJ;5-ckm@~sG|qbi4#J6|GSpE|B)n2P-tv};|| ze;DV3y&6gebchlUgAZW$l$yk6L7B*6ojltV9vr||>F1V%%Hl~9br$%u`p14te!BSTN*Vvs5FIC z98t*QWDGS9JyPH8)OUxtW*VPEO2_G5P-BeZ1O{?aMG?;whjDMQ+wQWvAyNf0(oGti z)`Wz03sx4{Jxtc2za7#<_f#c~Q_MJ)!jQ=NkcTu67u#W#7_rKk#;TAyyZFBatBYNv zL%|x+*yd<#3#kewsLcox0h0V*I8luR58}il#cp_1>|9NDG7DBC3!-|;9L?zkBYEna zSuo0c2=Cqa+r9AKS)AZw?hEqcajEwNM5T8F?A^64@5+*ZEA--*geN@SeGCh2|N&Gk-90>hkJbrr9A$ZYzcmuaX(Z8 z_rrDL9%I}O!4Y4$3yF`qa2FCY?u#YyD<0gBA?|T8!cF4RN-OIvue<+Y?LE$5o~Qxl z$-2Qj#bBO*SABsgBtGo|Q%Ibzhs3XWz_6^Rm*+7iTsObeaB|b%!&r(5JlINZN%XdST z=z{3V8PHHXo`P{kCGA3m?*>i5_zWhI#vvm$z0R$nH#o%!m?1rJVJw%KNXsP>vXv?% zQv(;JrqNN+803_WeKEopjPMYe6A2Hm8BqM7c5+yxMGJ3p{8W(Bdgx+%a9kfVutfmt zATPSTSKGmCHf1Js%1j+hWYVRb9SYL6*|DP;FF;48Fx3SUQq@jX9QEzAbwxdq?@1BB zr1WTYdbEZxX&{%`VchH}6OdGzy%MH;wcKj2g=uN&xk6Rww8JptOXD_s6I}Aua=X0) z-jSBPc{2k#f+O+hM81$2kEZl|{;-~fcZ&_Y`@>~lYIoQ#!WCaFciJOx)mO`1_EDJi z)pECe8m>vp%Fwc#;kqv^d+bqoPnN14y1Dnj`&ut$_9Ro9#=IzJS(LIH;D)HILNE(% z7JKb$cx?Ir-_!X15Z{yd{s`Yw_6-X@Mq!48Pf)l-!lx))CgC#_u8{CK3Rg+^LW`&# zHsZ)cA!QUW+2%IohJ6hzF@^(|Dcu{w6PP>8HHdka0+yI+6gN0Jd*{_jrtTDcS&Y~> z>`AyKT0Cbuua>z?nL~Q`iu=yM*ERdjUB%0Nzu~@@;aln3)Z`Ixep^YBFlJxlR%7bR|xT=)E_Mr3yskax6y~Q wDmC^03wfi))&Kwi literal 0 HcmV?d00001 diff --git a/PCGormProj/PC.proj b/Modules/BundleProject/Resources/PC.project similarity index 55% rename from PCGormProj/PC.proj rename to Modules/BundleProject/Resources/PC.project index d158569..08fcf88 100644 --- a/PCGormProj/PC.proj +++ b/Modules/BundleProject/Resources/PC.project @@ -1,14 +1,12 @@ { - APPCLASS = "NSApplication"; - APPKIT = "GNUSTEP-GUI"; - APPLICATIONICON = ""; BUILDTOOL = "/usr/bin/make"; - CLASS_FILES = ("main.m"); + BUNDLE_EXTENSION = ".bundle"; + CLASS_FILES = (); COMPILEROPTIONS = ""; - LINKEROPTIONS = ""; + CPPOPTIONS = ""; + LINKEROPTIONS = ""; CREATION_DATE = ""; DOCU_FILES = (); - FOUNDATION = "GNUSTEP-BASE"; FRAMEWORKS = (); HEADER_FILES = (); INTERFACES = (); @@ -16,25 +14,29 @@ LANGUAGE = "English"; LAST_EDITING = ""; LIBRARIES = ("gnustep-base","gnustep-gui"); - MAININTERFACE = ""; - MAKEFILEDIR = "$(GNUSTEP_SYSTEM_ROOT)/Makefiles"; - INSTALLDIR = "$(GNUSTEP_LOCAL_ROOT)/"; + MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; + INSTALLDIR = "$(HOME)/GNUstep/Library/Bundles"; + OBJC_COMPILEROPTIONS = ""; OTHER_FILES = (); OTHER_RESOURCES = (); OTHER_SOURCES = (); - PRINCIPAL_CLASS = "main.m"; + PRINCIPAL_CLASS = ""; + PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description avaliable!"; - PROJECT_GROUP = "No description avaliable!"; + PROJECT_GROUP = "No group avaliable!"; PROJECT_SUMMARY = "No summary avaliable!"; - PROJECT_RELEASE = "1"; - PROJECT_COPYRIGHT = "No license specified!"; + PROJECT_RELEASE = "0.1"; + PROJECT_COPYRIGHT = "Copyright (C) 200x"; + PROJECT_COPYRIGHT_DESC = "Released under ..."; PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz"; PROJECT_MAINTAINER = ""; PROJECT_NAME = ""; - PROJECT_TYPE = "GormApplication"; - PROJECT_BUILDER = "PCGormProj"; - PROJECT_VERSION = 1.0; + PROJECT_TYPE = "Bundle"; + PROJECT_VERSION = 0.1; + PROJECT_URL = ""; + SEARCH_HEADER_DIRS = (); + SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } diff --git a/Modules/GNUmakefile b/Modules/GNUmakefile new file mode 100644 index 0000000..f8d2e7e --- /dev/null +++ b/Modules/GNUmakefile @@ -0,0 +1,20 @@ +# +# GNUmakefile +# + +include $(GNUSTEP_MAKEFILES)/common.make +GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT) + + +# +# Subprojects +# +SUBPROJECTS = \ + ApplicationProject \ + BundleProject \ + LibraryProject \ + RenaissanceProject \ + ToolProject + +include $(GNUSTEP_MAKEFILES)/aggregate.make + diff --git a/Modules/GNUmakefile.bundles b/Modules/GNUmakefile.bundles new file mode 100644 index 0000000..9fbb9df --- /dev/null +++ b/Modules/GNUmakefile.bundles @@ -0,0 +1,12 @@ +# +# Options common to bundles +# +ADDITIONAL_OBJCFLAGS += -Wall -Werror +ADDITIONAL_CFLAGS += -Wall +ADDITIONAL_CPPFLAGS += -Wall +ADDITIONAL_INCLUDE_DIRS += -I../../Library +ADDITIONAL_LIB_DIRS += -L../../Library/$(GNUSTEP_OBJ_DIR) + +BUNDLE_EXTENSION = .bundle +BUNDLE_INSTALL_DIR = $(GNUSTEP_SYSTEM_ROOT)/Applications/ProjectCenter.app/Resources +$(PACKAGE_NAME)_STANDARD_INSTALL = no diff --git a/PCLibProj/GNUmakefile b/Modules/LibraryProject/GNUmakefile similarity index 61% rename from PCLibProj/GNUmakefile rename to Modules/LibraryProject/GNUmakefile index 3989e93..30ffbf7 100644 --- a/PCLibProj/GNUmakefile +++ b/Modules/LibraryProject/GNUmakefile @@ -11,40 +11,35 @@ include $(GNUSTEP_MAKEFILES)/common.make -# -# Subprojects -# - - - # # Bundle # -PACKAGE_NAME = PCLibProj -BUNDLE_NAME = PCLibProj -PCLibProj_PRINCIPAL_CLASS = PCLibProj +PACKAGE_NAME = LibraryProject +BUNDLE_NAME = LibraryProject +LibraryProject_PRINCIPAL_CLASS = PCLibProj # # Additional libraries # -PCLibProj_LIBRARIES_DEPEND_UPON += -lProjectCenter +LibraryProject_LIBRARIES_DEPEND_UPON += -lProjectCenter # # Resource files # -PCLibProj_RESOURCE_FILES= \ -PC.proj \ -Version +LibraryProject_RESOURCE_FILES= \ +Resources/PC.project \ +Resources/Version \ +Resources/Inspector.gorm # # Header files # -PCLibProj_HEADERS= \ +LibraryProject_HEADERS= \ PCLibProj.h \ PCLibProject.h @@ -52,7 +47,7 @@ PCLibProject.h # Class files # -PCLibProj_OBJC_FILES= \ +LibraryProject_OBJC_FILES= \ PCLibProj.m \ PCLibProject.m @@ -60,7 +55,8 @@ PCLibProject.m # C files # -PCLibProj_C_FILES= +LibraryProject_C_FILES= include ../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make + diff --git a/PCLibProj/PCLibProj.h b/Modules/LibraryProject/PCLibProj.h similarity index 97% rename from PCLibProj/PCLibProj.h rename to Modules/LibraryProject/PCLibProj.h index c8afdb2..35771f5 100644 --- a/PCLibProj/PCLibProj.h +++ b/Modules/LibraryProject/PCLibProj.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCLIBPROJ_H @@ -41,9 +39,7 @@ + (id)sharedCreator; - (Class)projectClass; - - (NSString *)projectTypeName; -- (NSDictionary *)typeTable; - (PCProject *)createProjectAt:(NSString *)path; - (PCProject *)openProjectAt:(NSString *)path; diff --git a/Modules/LibraryProject/PCLibProj.m b/Modules/LibraryProject/PCLibProj.m new file mode 100644 index 0000000..34d8e02 --- /dev/null +++ b/Modules/LibraryProject/PCLibProj.m @@ -0,0 +1,162 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +/* + Description: + + PCLibProj creates new project of the type Application! + +*/ + +#include +#include "ProjectCenter/PCMakefileFactory.h" + +#include "PCLibProj.h" +#include "PCLibProject.h" + +@implementation PCLibProj + +static PCLibProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) + { + _creator = [[[self class] alloc] init]; + } + + return _creator; +} + +- (Class)projectClass +{ + return [PCLibProject class]; +} + +- (NSString *)projectTypeName +{ + return @"Library"; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCLibProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath:path attributes:nil]) + { + NSBundle *projectBundle = nil; + NSMutableDictionary *projectDict; + NSString *projectName = nil; + NSString *_file = nil; + NSString *_2file = nil; +// NSString *_resourcePath; + PCFileCreator *pcfc = [PCFileCreator sharedCreator]; + + project = [[[PCLibProject alloc] init] autorelease]; + projectBundle = [NSBundle bundleForClass:[self class]]; + + _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; + projectDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + projectName = [path lastPathComponent]; + if ([[projectName pathExtension] isEqualToString:@"subproj"]) + { + projectName = [projectName stringByDeletingPathExtension]; + } + [projectDict setObject:projectName forKey:PCProjectName]; + [projectDict setObject:[self projectTypeName] forKey:PCProjectType]; + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + [project setProjectName:projectName]; + + // Copy the project files to the provided path + + // $PROJECTNAME$.m + _file = [NSString stringWithFormat:@"%@", projectName]; + _2file = [NSString stringWithFormat:@"%@.m", projectName]; + [pcfc createFileOfType:ObjCClass + path:[path stringByAppendingPathComponent:_file] + project:project]; + [projectDict setObject:[NSArray arrayWithObjects:_2file,nil] + forKey:PCClasses]; + + // $PROJECTNAME$.h already created by creating $PROJECTNAME$.m + _file = [NSString stringWithFormat:@"%@.h", projectName]; + [projectDict setObject:[NSArray arrayWithObjects:_file,nil] + forKey:PCHeaders]; + + // GNUmakefile.postamble + [[PCMakefileFactory sharedFactory] createPostambleForProject:project]; + + // Resources + /* + _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath attributes:nil]; + */ + _file = [path stringByAppendingPathComponent:@"Images"]; + [fm createDirectoryAtPath:_file attributes:nil]; + _file = [path stringByAppendingPathComponent:@"Documentation"]; + [fm createDirectoryAtPath:_file attributes:nil]; + + _file = [projectBundle pathForResource:@"Version" ofType:@""]; + _2file = [path stringByAppendingPathComponent:@"Version"]; + [fm copyPath:_file toPath:_2file handler:nil]; + + // Set the new dictionary - this causes the GNUmakefile + // to be written to disc + if (![project assignProjectDict:projectDict]) + { + NSRunAlertPanel(@"Attention!", + @"Could not load %@!", + @"OK",nil,nil,path); + return nil; + } + + // Save the project to disc + [project save]; + } + + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + NSString *pPath = [path stringByDeletingLastPathComponent]; + + return [[[PCLibProject alloc] initWithProjectDictionary:dict + path:pPath] autorelease]; + + return nil; +} + +@end diff --git a/PCLibProj/PCLibProject.h b/Modules/LibraryProject/PCLibProject.h similarity index 64% rename from PCLibProj/PCLibProject.h rename to Modules/LibraryProject/PCLibProject.h index 7c8f721..400964d 100644 --- a/PCLibProj/PCLibProject.h +++ b/Modules/LibraryProject/PCLibProject.h @@ -20,16 +20,14 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ /* - Description: - - This is the project type 'Application' for GNUstep. You never should create it yourself but - use PCLibProj for doing this. Otherwise needed files don't get copied to the right place. + Description: + This is the project type 'Library' for GNUstep. You never should create it + yourself but use PCLibProj for doing this. Otherwise needed files don't get + copied to the right place. */ #ifndef _PCLIBPROJECT_H @@ -38,8 +36,14 @@ #include #include +@class PCMakefileFactory; + @interface PCLibProject : PCProject { + IBOutlet NSBox *projectAttributesView; + IBOutlet NSTextField *projectTypeField; + IBOutlet NSTextField *projectNameField; + IBOutlet NSTextField *projectLanguageField; } //---------------------------------------------------------------------------- @@ -49,22 +53,23 @@ - (id)init; - (void)dealloc; -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- +@end -- (Class)builderClass; +@interface PCLibProject (GeneratedFiles) - (BOOL)writeMakefile; - -- (NSArray *)sourceFileKeys; -- (NSArray *)resourceFileKeys; -- (NSArray *)otherKeys; -- (NSArray *)buildTargets; -- (NSString *)projectDescription; - -- (void)updateValuesFromProjectDict; +- (void)appendHead:(PCMakefileFactory *)mff; +- (void)appendLibraries:(PCMakefileFactory*)mff; +- (void)appendTail:(PCMakefileFactory *)mff; @end +@interface PCLibProject (Inspector) + +- (NSView *)projectAttributesView; +- (void)updateInspectorValues:(NSNotification *)aNotif; + +@end + + #endif diff --git a/Modules/LibraryProject/PCLibProject.m b/Modules/LibraryProject/PCLibProject.m new file mode 100644 index 0000000..5af1382 --- /dev/null +++ b/Modules/LibraryProject/PCLibProject.m @@ -0,0 +1,343 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include + +#include "PCLibProject.h" +#include "PCLibProj.h" + +@implementation PCLibProject + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) + { + rootKeys = [[NSArray arrayWithObjects: + PCClasses, + PCHeaders, + PCOtherSources, + PCOtherResources, + PCSubprojects, + PCDocuFiles, + PCSupportingFiles, + PCLibraries, + PCNonProject, + nil] retain]; + + rootCategories = [[NSArray arrayWithObjects: + @"Classes", + @"Headers", + @"Other Sources", + @"Other Resources", + @"Subprojects", + @"Documentation", + @"Supporting Files", + @"Libraries", + @"Non Project Files", + nil] retain]; + + rootEntries = [[NSDictionary + dictionaryWithObjects:rootCategories forKeys:rootKeys] retain]; + } + + return self; +} + +- (void)dealloc +{ + [rootCategories release]; + [rootKeys release]; + [rootEntries release]; + + [super dealloc]; +} + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (Class)builderClass +{ + return [PCLibProj class]; +} + +- (NSString *)projectDescription +{ + return @"GNUstep Objective-C library project"; +} + +- (BOOL)isExecutable +{ + return NO; +} + +- (NSString *)execToolName +{ + return nil; +} + +- (NSArray *)fileTypesForCategoryKey:(NSString *)category +{ + if ([category isEqualToString:PCClasses]) + { + return [NSArray arrayWithObjects:@"m",nil]; + } + else if ([category isEqualToString:PCHeaders]) + { + return [NSArray arrayWithObjects:@"h",nil]; + } + else if ([category isEqualToString:PCOtherSources]) + { + return [NSArray arrayWithObjects:@"c",@"C",@"m",nil]; + } + else if ([category isEqualToString:PCInterfaces]) + { + return [NSArray arrayWithObjects:@"gmodel",@"gorm",nil]; + } + else if ([category isEqualToString:PCImages]) + { + return [NSImage imageFileTypes]; + } + else if ([category isEqualToString:PCSubprojects]) + { + return [NSArray arrayWithObjects:@"subproj",nil]; + } + else if ([category isEqualToString:PCLibraries]) + { + return [NSArray arrayWithObjects:@"so",@"a",@"lib",nil]; + } + + return nil; +} + +- (NSString *)dirForCategory:(NSString *)category +{ + if ([category isEqualToString:PCImages]) + { + return [projectPath stringByAppendingPathComponent:@"Images"]; + } + else if ([category isEqualToString:PCDocuFiles]) + { + return [projectPath stringByAppendingPathComponent:@"Documentation"]; + } + + return projectPath; +} + +- (NSArray *)buildTargets +{ + return [NSArray arrayWithObjects: + @"library", @"debug", @"profile", @"dist", nil]; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects:PCInterfaces,PCOtherResources,PCImages,nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; +} + +- (NSArray *)allowableSubprojectTypes +{ + return [NSArray arrayWithObjects: + @"Bundle", @"Tool", nil]; +} + +- (NSArray *)defaultLocalizableKeys +{ + return [NSArray arrayWithObjects:PCInterfaces, nil]; +} + +- (NSArray *)localizableKeys +{ + return [NSArray arrayWithObjects: + PCInterfaces, PCImages, PCOtherResources, PCDocuFiles, nil]; +} + +@end + +@implementation PCLibProject (GeneratedFiles) + +- (BOOL)writeMakefile +{ + PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; + int i,j; + NSString *mfl = nil; + NSData *mfd = nil; + + // Save the GNUmakefile backup + [super writeMakefile]; + + // Save GNUmakefile.preamble + [mf createPreambleForProject:self]; + + // Create the new file + [mf createMakefileForProject:projectName]; + + // Head + [self appendHead:mf]; + + // Libraries + [self appendLibraries:mf]; + + // Subprojects + if ([[projectDict objectForKey:PCSubprojects] count] > 0) + { + [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; + } + + // Resources + [mf appendResources]; + for (i = 0; i < [[self resourceFileKeys] count]; i++) + { + NSString *k = [[self resourceFileKeys] objectAtIndex:i]; + NSMutableArray *resources = [[projectDict objectForKey:k] mutableCopy]; + + if ([k isEqualToString:PCImages]) + { + for (j=0; j<[resources count]; j++) + { + [resources replaceObjectAtIndex:j + withObject:[NSString stringWithFormat:@"Images/%@", + [resources objectAtIndex:j]]]; + } + } + + [mf appendResourceItems:resources]; + [resources release]; + } + + [mf appendHeaders:[projectDict objectForKey:PCHeaders] + forTarget:[NSString stringWithFormat:@"lib%@",projectName]]; + [mf appendClasses:[projectDict objectForKey:PCClasses] + forTarget:[NSString stringWithFormat:@"lib%@",projectName]]; + [mf appendOtherSources:[projectDict objectForKey:PCOtherSources] + forTarget:[NSString stringWithFormat:@"lib%@",projectName]]; + + // Tail + [self appendTail:mf]; + + // Write the new file to disc! + mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + if ((mfd = [mf encodedMakefile])) + { + if ([mfd writeToFile:mfl atomically:YES]) + { + return YES; + } + } + + return NO; +} + +- (void)appendHead:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n#\n# Bundle\n#\n"]; + [mff appendString:[NSString stringWithFormat:@"PACKAGE_NAME = %@\n", + projectName]]; + [mff appendString:[NSString stringWithFormat:@"LIBRARY_VAR = %@\n", + [projectName uppercaseString]]]; + [mff appendString:[NSString stringWithFormat:@"LIBRARY_NAME = lib%@\n", + projectName]]; + [mff appendString:[NSString stringWithFormat:@"lib%@_HEADER_FILES_DIR = %@\n", + projectName,@"."]]; + [mff appendString:[NSString stringWithFormat: + @"lib%@_HEADER_FILES_INSTALL_DIR = /%@\n", projectName, projectName]]; +} + +- (void)appendLibraries:(PCMakefileFactory *)mff +{ + NSArray *libs = [projectDict objectForKey:PCLibraries]; + + [mff appendString:@"\n#\n# Libraries\n#\n"]; + + [mff appendString: + [NSString stringWithFormat:@"%@_LIBRARIES_DEPEND_UPON += ",projectName]]; + + if (libs && [libs count]) + { + NSString *tmp; + NSEnumerator *enumerator = [libs objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + if (![tmp isEqualToString:@"gnustep-base"] && + ![tmp isEqualToString:@"gnustep-gui"]) + { + [mff appendString:[NSString stringWithFormat:@"-l%@ ",tmp]]; + } + } + } +} + +- (void)appendTail:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n\n#\n# Makefiles\n#\n"]; + [mff appendString:@"-include GNUmakefile.preamble\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/aggregate.make\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/library.make\n"]; + [mff appendString:@"-include GNUmakefile.postamble\n"]; +} + +@end + +@implementation PCLibProject (Inspector) + +- (NSView *)projectAttributesView +{ + if (projectAttributesView == nil) + { + if ([NSBundle loadNibNamed:@"Inspector" owner:self] == NO) + { + NSLog(@"PCLibraryProject: error loading Inspector NIB!"); + return nil; + } + [projectAttributesView retain]; + [self updateInspectorValues:nil]; + } + + return projectAttributesView; +} + +- (void)updateInspectorValues:(NSNotification *)aNotif +{ + [projectTypeField setStringValue:@"Library"]; + [projectNameField setStringValue:projectName]; + [projectLanguageField setStringValue:[projectDict objectForKey:@"LANGUAGE"]]; +} + +@end + diff --git a/Modules/LibraryProject/Resources/Inspector.gorm/data.classes b/Modules/LibraryProject/Resources/Inspector.gorm/data.classes new file mode 100644 index 0000000..d61cb70 --- /dev/null +++ b/Modules/LibraryProject/Resources/Inspector.gorm/data.classes @@ -0,0 +1,156 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontFontPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:" + ); + Super = NSObject; + }; + PCLibraryProject = { + Actions = ( + ); + Outlets = ( + projectAttributesView, + projectTypeField, + projectNameField, + projectLanguageField + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Modules/LibraryProject/Resources/Inspector.gorm/objects.gorm b/Modules/LibraryProject/Resources/Inspector.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..35b59cf589db6c5ce010760c96e746b9bb0b8496 GIT binary patch literal 4337 zcmcIn-F6dI6yEu1N;~~e8x&9x1r$W~07a<^O$S@5bc&t+AX;&njAbBAveGFncYTCe z+`3%ey5wf^0xo<5@4WLVd;s^}Cz)j0l%!qKte&&y{Oq&$cfNhjJ~QUhrstGT+m+lS z_o;*Qcg4OjKEVQ_e!V7K&(#FP35@A67?`n4cg-jjJ=-lh6`(&o4#!Mue(kZ7^Y|Mu zt|uUET60^Ty;g8;yE)G-746D1?$ndeXIjxVI7c15n9#deljT+1;ySg&q`l`XcaBlf zlZ06)!X}i#fgE^Hf(j<}6m*-`J-g@>c#hu9I#%3bzO+r>as3!*rnTT~mP^IF7#suE z2!1A`aVAf%z!j!F4Y=w}<4%I&u2r>3QhTVD}beYyvX(wvLpY*A5K_>sQOMbj0G3s8uxn_j8 z$wnNj_Od;-1$wFiw}3NA%^DY^^k-K3$3CU?=4Q`;l=dp6DYiO=n%>WQu;}b~)2>s< zQ)5gYfF9Fg9#u-RZ;efv+@*Dm7rV6X)L$fKf7`om*t~b$KDDmWh5h;<3^uK6I0Z$K zA*NtfSQ)kr^Y+%i00*jF3`>7VzWyZKg9=gZagBVZVG*7Q6(@Wg)JJ&!H2Fib5;X&c zl#&R8@6hxDJf+eDmso5IMp|}~=GFe1rpKM=P$i_+`JZpT$ecxBaf9~V3 zo@SC6r9z2gH~~1KY#rtyU2M~E+_X%4!^z7at8C{SOsheu5S3ICEJ9(EoN-_SM^%41 z>`y19XNSruu*uygur4TWQ6T5RAUq2a#$(lVFcPFO(*iQq%^JedjD-Ijk5^@TgsfBl zgrqTUv?NW~EI8J}kjeT+gfwqf2l0e5;za1ii6lHc{Ljae)e+VKcuHv;2sI8QVILFV z5`n~ka6H+O1u3 z@EzViJguf5$d7kbe8CA>xJ#@p(gC|g_4?~%?+rnEq7BlY9U1A*1?dU=qJ@+D&kM!gn@vb7_6pL6 zW$&#B(vyUARv7_)aQU^+c1plB+JJfc$Y6dcU>Z2x5txd$Gu2_dqsAw~J1dct`)TJu zAS7}d@f&ZElr-`YkvJ)7%2RnMSr2elQ2DA2DqpMqvCzh`By3Y&#mPm9q*o^$cUx#* zY0Sns)!!9r@8TqoV~ldRU@jw9pEgBCXSC^4lOP2TR>zn+&Qu9#>Z6=;&2HH14vmP> z7@SuNM3b&;xm<8_Houu>bERU9b9hgU?PmRQHFwk1JikqkF#JY!4TW|Nv7H9oC12Jk z-LmQbSu}mc1vRHPoYR}6gjOY5(=?B>)I8|HakM%bc_lc5i)v)#df%rr&~T|EjaP$< zxZKgmYr#0KbTo22xQX}G$Ou|9l*Sr#ZgL`9qMP3!?``_pggL6q_-!>IHxfQjllKQj z(2d`zqoa?rw?6z{ALG}ZdMy{}Z7i8KK#;&yrKH7H`uIb2EOIs$dRzjLY{;b792eTqq5}umRE2*dR{dzyc#^fpVZQkfGJ1bHCckdqZX#l z7D*0)uq=ew#`S6@SPd5NQ40v8TIz43kV@#v+$DV6c5XfSYRr8ib62pS=8lG>9Zk{; Ntoc>8_X-Sk{0C@~j++1g literal 0 HcmV?d00001 diff --git a/Modules/LibraryProject/Resources/PC.project b/Modules/LibraryProject/Resources/PC.project new file mode 100644 index 0000000..ae7eb64 --- /dev/null +++ b/Modules/LibraryProject/Resources/PC.project @@ -0,0 +1,42 @@ +{ + BUILDTOOL = "/usr/bin/make"; + CLASS_FILES = (); + COMPILEROPTIONS = ""; + CPPOPTIONS = ""; + LINKEROPTIONS = ""; + CREATION_DATE = ""; + DOCU_FILES = (); + FRAMEWORKS = (); + HEADER_FILES = (); + HEADERS_TO_INSTALL = (); + HEADERS_INSTALL_DIR = ""; + INTERFACES = (); + IMAGES = (); + LANGUAGE = "English"; + LAST_EDITING = ""; + LIBRARIES = ("gnustep-base","gnustep-gui"); + MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; + INSTALLDIR = "$(HOME)/GNUstep/Library/Libraries"; + OBJC_COMPILEROPTIONS = ""; + OTHER_FILES = (); + OTHER_RESOURCES = ("Version"); + OTHER_SOURCES = (); + PROJECT_AUTHORS = (); + PROJECT_CREATOR = ""; + PROJECT_DESCRIPTION = "No description avaliable!"; + PROJECT_GROUP = "No group avaliable!"; + PROJECT_SUMMARY = "No summary avaliable!"; + PROJECT_RELEASE = "0.1"; + PROJECT_COPYRIGHT = "Copyright (C) 200x"; + PROJECT_COPYRIGHT_DESC = "Released under ..."; + PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz"; + PROJECT_MAINTAINER = ""; + PROJECT_NAME = ""; + PROJECT_TYPE = "Library"; + PROJECT_VERSION = 0.1; + PROJECT_URL = ""; + SEARCH_HEADER_DIRS = (); + SEARCH_LIB_DIRS = (); + SUBPROJECTS = (); + SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); +} diff --git a/PCLibProj/Version b/Modules/LibraryProject/Resources/Version similarity index 100% rename from PCLibProj/Version rename to Modules/LibraryProject/Resources/Version diff --git a/Modules/RenaissanceProject/GNUmakefile b/Modules/RenaissanceProject/GNUmakefile new file mode 100644 index 0000000..a3b1356 --- /dev/null +++ b/Modules/RenaissanceProject/GNUmakefile @@ -0,0 +1,69 @@ +# +# GNUmakefile - Generated by ProjectCenter +# Written by Philippe C.D. Robert +# +# NOTE: Do NOT change this file -- ProjectCenter maintains it! +# +# Put all of your customisations in GNUmakefile.preamble and +# GNUmakefile.postamble +# + +include $(GNUSTEP_MAKEFILES)/common.make + +# +# Bundle +# + +PACKAGE_NAME = RenaissanceProject +BUNDLE_NAME = RenaissanceProject +RenaissanceProject_PRINCIPAL_CLASS = PCRenaissanceProj + + +# +# Additional libraries +# + +RenaissanceProject_LIBRARIES_DEPEND_UPON += -lProjectCenter + +# +# Resource files +# + +RenaissanceProject_RESOURCE_FILES= \ +Resources/PC.project \ +Resources/main.m \ +Resources/AppController.m \ +Resources/AppController.h \ +Resources/Main.gsmarkup \ +Resources/MainMenu-GNUstep.gsmarkup \ +Resources/MainMenu-OSX.gsmarkup \ +Resources/Inspector.gorm + + +# +# Header files +# + +RenaissanceProject_HEADERS= \ +PCRenaissanceProj.h \ +PCRenaissanceProject.h \ +PCRenaissanceProject+Inspector.h + +# +# Class files +# + +RenaissanceProject_OBJC_FILES= \ +PCRenaissanceProj.m \ +PCRenaissanceProject.m \ +PCRenaissanceProject+Inspector.m + +# +# C files +# + +RenaissanceProject_C_FILES= + +include ../GNUmakefile.bundles +include $(GNUSTEP_MAKEFILES)/bundle.make + diff --git a/PCRenaissanceProj/PCRenaissanceProj.h b/Modules/RenaissanceProject/PCRenaissanceProj.h similarity index 98% rename from PCRenaissanceProj/PCRenaissanceProj.h rename to Modules/RenaissanceProject/PCRenaissanceProj.h index ed4a13e..0b9ee5b 100644 --- a/PCRenaissanceProj/PCRenaissanceProj.h +++ b/Modules/RenaissanceProject/PCRenaissanceProj.h @@ -40,9 +40,7 @@ + (id)sharedCreator; - (Class)projectClass; - - (NSString *)projectTypeName; -- (NSDictionary *)typeTable; - (PCProject *)createProjectAt:(NSString *)path; - (PCProject *)openProjectAt:(NSString *)path; diff --git a/Modules/RenaissanceProject/PCRenaissanceProj.m b/Modules/RenaissanceProject/PCRenaissanceProj.m new file mode 100644 index 0000000..65022d2 --- /dev/null +++ b/Modules/RenaissanceProject/PCRenaissanceProj.m @@ -0,0 +1,225 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2003 Free Software Foundation + Copyright (C) 2001 Pierre-Yves Rivaille + + Authors: Philippe C.D. Robert + Pierre-Yves Rivaille + + Modified by Daniel Luederwald + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +/* + Description: + + PCRenaissanceProj creates new project of the type RenaissanceApplication! +*/ + +#include "ProjectCenter/PCFileCreator.h" +#include "ProjectCenter/PCMakefileFactory.h" + +#include "PCRenaissanceProj.h" +#include "PCRenaissanceProject.h" + +@implementation PCRenaissanceProj + +static PCRenaissanceProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) + { + _creator = [[[self class] alloc] init]; + } + return _creator; +} + +- (Class)projectClass +{ + return [PCRenaissanceProject class]; +} + +- (NSString *)projectTypeName +{ + return @"RenaissanceApplication"; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCRenaissanceProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath:path attributes:nil]) + { + NSBundle *projectBundle = nil; + NSMutableDictionary *projectDict = nil; + NSString *projectName = nil; + NSString *_file = nil; + NSString *_2file = nil; +// NSString *_resourcePath = nil; + NSDictionary *infoDict = nil; + NSString *mainMarkup = nil; + PCFileCreator *fc = [PCFileCreator sharedCreator]; + + project = [[[PCRenaissanceProject alloc] init] autorelease]; + projectBundle = [NSBundle bundleForClass:[self class]]; + + _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; + projectDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + projectName = [path lastPathComponent]; + if ([[projectName pathExtension] isEqualToString:@"subproj"]) + { + projectName = [projectName stringByDeletingPathExtension]; + } + [projectDict setObject:projectName forKey:PCProjectName]; + [projectDict setObject:[self projectTypeName] forKey:PCProjectType]; + [projectDict setObject:[[NSCalendarDate date] description] + forKey:PCCreationDate]; + [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; + [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + [project setProjectName:projectName]; + + // Copy the project files to the provided path + _file = [projectBundle pathForResource:@"main" ofType:@"m"]; + _2file = [path stringByAppendingPathComponent:@"main.m"]; + [fm copyPath:_file toPath:_2file handler:nil]; + [fc replaceTagsInFileAtPath:_2file withProject:project]; + + _file = [projectBundle pathForResource:@"AppController" ofType:@"m"]; + _2file = [path stringByAppendingPathComponent:@"AppController.m"]; + [fm copyPath:_file toPath:_2file handler:nil]; + [fc replaceTagsInFileAtPath:_2file withProject:project]; + + _file = [projectBundle pathForResource:@"AppController" ofType:@"h"]; + _2file = [path stringByAppendingPathComponent:@"AppController.h"]; + [fm copyPath:_file toPath:_2file handler:nil]; + [fc replaceTagsInFileAtPath:_2file withProject:project]; + + // GNUmakefile.postamble + [[PCMakefileFactory sharedFactory] createPostambleForProject:project]; + + _file = [projectBundle pathForResource:@"MainMenu-GNUstep" + ofType:@"gsmarkup"]; + _2file = [path stringByAppendingPathComponent: + @"MainMenu-GNUstep.gsmarkup"]; + [fm copyPath:_file toPath:_2file handler:nil]; + _file = [projectBundle pathForResource:@"MainMenu-OSX" + ofType:@"gsmarkup"]; + _2file = [path stringByAppendingPathComponent:@"MainMenu-OSX.gsmarkup"]; + [fm copyPath:_file toPath:_2file handler:nil]; + +#ifdef GNUSTEP + mainMarkup = [NSString stringWithString:@"MainMenu-GNUstep.gsmarkup"]; +#else + mainMarkup = [NSString stringWithString:@"MainMenu-OSX.gsmarkup"]; +#endif + + [projectDict setObject:mainMarkup forKey:PCMainInterfaceFile]; + + _file = [projectBundle pathForResource:@"Main" ofType:@"gsmarkup"]; + _2file = [path stringByAppendingPathComponent:@"Main.gsmarkup"] ; + [fm copyPath:_file toPath:_2file handler:nil]; + [projectDict setObject: + [NSArray arrayWithObjects:@"Main.gsmarkup",mainMarkup,nil] + forKey:PCInterfaces]; + + // GNUmakefile.postamble + [[PCMakefileFactory sharedFactory] createPostambleForProject:project]; + + // Resources +/* _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath attributes:nil];*/ + _2file = [path stringByAppendingPathComponent:@"Images"]; + [fm createDirectoryAtPath:_2file attributes:nil]; + _2file = [path stringByAppendingPathComponent:@"Documentation"]; + [fm createDirectoryAtPath:_2file attributes:nil]; + + // Create the Info-gnustep.plist + infoDict = [NSDictionary dictionaryWithObjectsAndKeys: + @"Generated by ProjectCenter, do not edit", @"!", +// @"", @"ApplicationDescription", +// @"", @"ApplicationIcon", + projectName, @"ApplicationName", + @"0.1", @"ApplicationRelease", + [NSArray array], @"Authors", + @"Copyright (C) 200x by ...", @"Copyright", + @"Released under...", @"CopyrightDescription", + @"0.1", @"FullVersionID", + projectName, @"NSExecutable", +// @"", @"NSIcon", + mainMarkup, @"GSMainMarkupFile", + [projectDict objectForKey:PCPrincipalClass], @"NSPrincipalClass", + @"Application", @"NSRole", +// @"", @"URL", + nil]; + + [infoDict + writeToFile:[path stringByAppendingPathComponent:@"Info-gnustep.plist"] + atomically:YES]; + + [projectDict + setObject:[NSArray arrayWithObjects:@"Info-gnustep.plist",nil] + forKey:PCOtherResources]; + + // Set the new dictionary - this causes the GNUmakefile + // to be written to disc + if (![project assignProjectDict:projectDict]) + { + NSRunAlertPanel(@"Attention!", + @"Could not load %@!", + @"OK",nil,nil,path); + return nil; + } + + [project assignInfoDict:(NSMutableDictionary *)infoDict]; + + // Save the project to disc + [project save]; + } + + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + PCRenaissanceProject *project = nil; + + project = [[[PCRenaissanceProject alloc] + initWithProjectDictionary:dict + path:[path stringByDeletingLastPathComponent]] autorelease]; + + [project loadInfoFileAtPath:[path stringByDeletingLastPathComponent]]; + + return project; + +} + +@end diff --git a/Modules/RenaissanceProject/PCRenaissanceProject+Inspector.h b/Modules/RenaissanceProject/PCRenaissanceProject+Inspector.h new file mode 100644 index 0000000..a0dcf03 --- /dev/null +++ b/Modules/RenaissanceProject/PCRenaissanceProject+Inspector.h @@ -0,0 +1,68 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _PCRenaissanceProject_Inspector_h_ +#define _PCRenaissanceProject_Inspector_h_ + +#include "PCRenaissanceProject.h" + +@interface PCRenaissanceProject (Inspector) + +// ---------------------------------------------------------------------------- +// --- User Interface +// ---------------------------------------------------------------------------- +- (void)createProjectAttributes; +- (NSView *)projectAttributesView; + +// ---------------------------------------------------------------------------- +// --- Actions +// ---------------------------------------------------------------------------- +- (void)setAppClass:(id)sender; +- (void)setFile:(id)sender; +- (void)clearFile:(id)sender; +- (void)setAppIcon:(id)sender; +- (void)clearAppIcon:(id)sender; +- (BOOL)setAppIconWithImageAtPath:(NSString *)path; +- (void)setMainNib:(id)sender; +- (BOOL)setMainNibWithFileAtPath:(NSString *)path; +- (void)clearMainNib:(id)sender; + +- (int)numberOfRowsInTableView:(NSTableView *)aTableView; +- (id) tableView: (NSTableView *)aTableView + objectValueForTableColumn: (NSTableColumn *)aTableColumn + row: (int)rowIndex; +- (void) tableView:(NSTableView *)aTableView + setObjectValue:anObject + forTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex; + +// ---------------------------------------------------------------------------- +// --- Notifications +// ---------------------------------------------------------------------------- +- (void)updateInspectorValues:(NSNotification *)aNotif; +- (void)tfGetFocus:(NSNotification *)aNotif; + +@end + +#endif diff --git a/Modules/RenaissanceProject/PCRenaissanceProject+Inspector.m b/Modules/RenaissanceProject/PCRenaissanceProject+Inspector.m new file mode 100644 index 0000000..5cb7a9a --- /dev/null +++ b/Modules/RenaissanceProject/PCRenaissanceProject+Inspector.m @@ -0,0 +1,487 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Serg Stoyan + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include +#include "PCRenaissanceProject+Inspector.h" + +// ---------------------------------------------------------------------------- +// --- Customized text field +// ---------------------------------------------------------------------------- +NSString *PCITextFieldGetFocus = @"PCITextFieldGetFocusNotification"; + +@implementation PCAppTextField + +- (BOOL)becomeFirstResponder +{ + [[NSNotificationCenter defaultCenter] + postNotificationName:PCITextFieldGetFocus + object:self]; + + return [super becomeFirstResponder]; +} + +@end + +@implementation PCRenaissanceProject (Inspector) + +// ---------------------------------------------------------------------------- +// --- User Interface +// ---------------------------------------------------------------------------- + +- (void)createProjectAttributes +{ + // TFs Buttons + [setFieldButton setRefusesFirstResponder:YES]; + [clearFieldButton setRefusesFirstResponder:YES]; + + // Document Icons + // + docExtColumn = [[NSTableColumn alloc] initWithIdentifier: @"extension"]; + [[docExtColumn headerCell] setStringValue:@"Extenstion"]; + [docExtColumn setWidth:75]; + docIconColumn = [[NSTableColumn alloc] initWithIdentifier: @"icon"]; + [[docIconColumn headerCell] setStringValue:@"Icon name"]; + + docIconsList = [[NSTableView alloc] initWithFrame:NSMakeRect(2,0,211,108)]; + [docIconsList setAllowsMultipleSelection:NO]; + [docIconsList setAllowsColumnReordering:NO]; + [docIconsList setAllowsColumnResizing:NO]; + [docIconsList setAllowsEmptySelection:YES]; + [docIconsList setAllowsColumnSelection:NO]; + [docIconsList addTableColumn:docExtColumn]; + [docIconsList addTableColumn:docIconColumn]; + [docIconsList setDataSource:self]; + [docIconsList setTarget:self]; + + // + [docIconsScroll setDocumentView:docIconsList]; + [docIconsScroll setHasHorizontalScroller:NO]; + [docIconsScroll setHasVerticalScroller:YES]; + [docIconsScroll setBorderType:NSBezelBorder]; + RELEASE(docIconsList); + + // Document icons buttons + [addDocIcon setRefusesFirstResponder:YES]; + [removeDocIcon setRefusesFirstResponder:YES]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(tfGetFocus:) + name:PCITextFieldGetFocus + object:nil]; + [projectAttributesView retain]; + + [self updateInspectorValues:nil]; +} + +- (NSView *)projectAttributesView +{ + if (!projectAttributesView) + { + if ([NSBundle loadNibNamed:@"Inspector" owner:self] == NO) + { + NSLog(@"PCAppProject: error loading Inspector NIB!"); + return nil; + } + [self createProjectAttributes]; + } + + return projectAttributesView; +} + +// ---------------------------------------------------------------------------- +// --- Actions +// ---------------------------------------------------------------------------- + +- (void)setAppClass:(id)sender +{ + [self setProjectDictObject:[appClassField stringValue] + forKey:PCPrincipalClass]; +} + +- (void)setIconViewImage:(NSImage *)image +{ + [iconView setImage:nil]; + [iconView display]; + + if (image == nil) + { + return; + } + + [iconView setImage:image]; + [iconView display]; +} + +- (void)setFile:(id)sender +{ + if (!activeTextField) + { + return; + } + + if (activeTextField == appImageField) + { + [self setAppIcon:self]; + } + else if (activeTextField == helpFileField) + { + } + else if (activeTextField == mainNIBField) + { + [self setMainNib:self]; + } +} + +- (void)clearFile:(id)sender +{ + if (!activeTextField) + { + return; + } + + if (activeTextField == appImageField) + { + [self clearAppIcon:self]; + } + else if (activeTextField == helpFileField) + { + } + else if (activeTextField == mainNIBField) + { + [self clearMainNib:self]; + } + [self setIconViewImage:nil]; +} + +// Application Icon +- (void)setAppIcon:(id)sender +{ + int result; + NSArray *fileTypes = [NSImage imageFileTypes]; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + NSString *dir = nil; + + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setTitle:@"Set Application Icon"]; + + dir = [[NSUserDefaults standardUserDefaults] + objectForKey:@"LastOpenDirectory"]; + result = [openPanel runModalForDirectory:dir + file:nil + types:fileTypes]; + + if (result == NSOKButton) + { + NSString *imageFilePath = [[openPanel filenames] objectAtIndex:0]; + + if (![self setAppIconWithImageAtPath:imageFilePath]) + { + NSRunAlertPanel(@"Error while opening file!", + @"Couldn't open %@", @"OK", nil, nil,imageFilePath); + } + } +} + +- (void)clearAppIcon:(id)sender +{ + [appImageField setStringValue:@""]; + [infoDict setObject:@"" forKey:@"NSIcon"]; + [infoDict setObject:@"" forKey:@"ApplicationIcon"]; + + [self setProjectDictObject:@"" forKey:PCAppIcon]; +} + +- (BOOL)setAppIconWithImageAtPath:(NSString *)path +{ + NSImage *image = nil; + NSString *imageName = nil; + + if (!(image = [[NSImage alloc] initWithContentsOfFile:path])) + { + return NO; + } + + imageName = [path lastPathComponent]; + + [appImageField setStringValue:imageName]; + + [self setIconViewImage:image]; + + [self addAndCopyFiles:[NSArray arrayWithObject:path] forKey:PCImages]; + + [infoDict setObject:imageName forKey:@"NSIcon"]; + [infoDict setObject:imageName forKey:@"ApplicationIcon"]; + + [self setProjectDictObject:imageName forKey:PCAppIcon]; + + return YES; +} + +// Main Interface File +- (void)setMainNib:(id)sender +{ + int result; + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + NSString *dir = nil; + + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setTitle:@"Set Main Interface File"]; + + dir = [[NSUserDefaults standardUserDefaults] + objectForKey:@"LastOpenDirectory"]; + result = [openPanel runModalForDirectory:dir + file:nil + types:[NSArray arrayWithObject:@"gorm"]]; + + if (result == NSOKButton) + { + NSString *file = [[openPanel filenames] objectAtIndex:0]; + + if (![self setMainNibWithFileAtPath:file]) + { + NSRunAlertPanel(@"Error while opening file!", + @"Couldn't open %@", @"OK", nil, nil,file); + } + } +} + +- (BOOL)setMainNibWithFileAtPath:(NSString *)path +{ + NSString *nibName = [path lastPathComponent]; + + [self setIconViewImage:[[NSWorkspace sharedWorkspace] iconForFile:path]]; + + [self addAndCopyFiles:[NSArray arrayWithObject:path] forKey:PCInterfaces]; + [infoDict setObject:nibName forKey:@"NSMainNibFile"]; + + [self setProjectDictObject:nibName forKey:PCMainInterfaceFile]; + + [mainNIBField setStringValue:nibName]; + + return YES; +} + +- (void)clearMainNib:(id)sender +{ + [mainNIBField setStringValue:@""]; + [infoDict setObject:@"" forKey:@"NSMainNibFile"]; + + [self setProjectDictObject:@"" forKey:PCMainInterfaceFile]; +} + +// Document Icons +- (void)addDocIcon:(id)sender +{ + int row; + NSMutableDictionary *entry = [NSMutableDictionary dictionaryWithCapacity:2]; + int selectedRow = [docIconsList selectedRow]; + + [entry setObject:@"" forKey:@"Extension"]; + [entry setObject:@"" forKey:@"Icon"]; + + if (selectedRow >= 0) + { + [docIconsItems insertObject:entry atIndex:selectedRow + 1]; + row = selectedRow + 1; + } + else + { + [docIconsItems addObject:entry]; + row = [docIconsItems count] - 1; + } + [docIconsList reloadData]; + + [docIconsList selectRow:row byExtendingSelection:NO]; + [docIconsList editColumn:0 row:row withEvent:nil select:YES]; + + [self setProjectDictObject:docIconsItems forKey:PCDocumentExtensions]; +} + +- (void)removeDocIcon:(id)sender +{ + int selectedRow = [docIconsList selectedRow]; + + if (selectedRow >= 0) + { + [docIconsItems removeObjectAtIndex:selectedRow]; + [docIconsList reloadData]; + } + + if (([docIconsList selectedRow] < 0) && ([docIconsItems count] > 0)) + { + [docIconsList selectRow:[docIconsItems count]-1 byExtendingSelection:NO]; + } + + [self setProjectDictObject:docIconsItems forKey:PCDocumentExtensions]; +} + +// ---------------------------------------------------------------------------- +// --- Document Icons browser +// ---------------------------------------------------------------------------- + +- (int)numberOfRowsInTableView: (NSTableView *)aTableView +{ + return [docIconsItems count]; +} + +- (id) tableView: (NSTableView *)aTableView + objectValueForTableColumn: (NSTableColumn *)aTableColumn + row: (int)rowIndex +{ + if ([[aTableColumn identifier] isEqualToString:@"extension"]) + { + return [[docIconsItems objectAtIndex:rowIndex] objectForKey:@"Extension"]; + } + else if ([[aTableColumn identifier] isEqualToString:@"icon"]) + { + return [[docIconsItems objectAtIndex:rowIndex] objectForKey:@"Icon"]; + } + + return nil; +} + +- (void) tableView:(NSTableView *)aTableView + setObjectValue:anObject + forTableColumn:(NSTableColumn *)aTableColumn + row:(int)rowIndex +{ + if (docIconsItems == nil || [docIconsItems count] <= 0) + { + return; + } + + if ([[aTableColumn identifier] isEqualToString:@"extension"]) + { + [[docIconsItems objectAtIndex:rowIndex] removeObjectForKey:@"Extension"]; + [[docIconsItems objectAtIndex:rowIndex] setObject:anObject + forKey:@"Extension"]; + } + else if ([[aTableColumn identifier] isEqualToString:@"icon"]) + { + [[docIconsItems objectAtIndex:rowIndex] removeObjectForKey:@"Icon"]; + [[docIconsItems objectAtIndex:rowIndex] setObject:anObject + forKey:@"Icon"]; + } + + [self setProjectDictObject:docIconsItems forKey:PCDocumentExtensions]; +} + +// ---------------------------------------------------------------------------- +// --- Notifications +// ---------------------------------------------------------------------------- + +- (void)updateInspectorValues:(NSNotification *)aNotif +{ + NSLog (@"PCAppProject: updateInspectorValues"); + + // Project Attributes view + [projectTypeField setStringValue:[projectDict objectForKey:PCProjectType]]; + [projectNameField setStringValue:[projectDict objectForKey:PCProjectName]]; + [projectLanguageField setStringValue:[projectDict objectForKey:@"LANGUAGE"]]; + [appClassField setStringValue:[projectDict objectForKey:PCPrincipalClass]]; + + [appImageField setStringValue:[projectDict objectForKey:PCAppIcon]]; + [helpFileField setStringValue:[projectDict objectForKey:PCHelpFile]]; + [mainNIBField setStringValue:[projectDict objectForKey:PCMainInterfaceFile]]; + + docIconsItems = [projectDict objectForKey:PCDocumentExtensions]; + [docIconsList reloadData]; +} + +// TextFields (PCITextField subclass) +// +// NSTextField become first responder when user clicks on it and immediately +// lost first resonder status, so we can't catch when focus leaves textfield +// with resignFirstResponder: method overriding. Here we're using +// controlTextDidEndEditing (NSTextField's delegate method) to achieve this. + +- (void)tfGetFocus:(NSNotification *)aNotif +{ + id anObject = [aNotif object]; + NSString *file = nil; + NSString *path = nil; + + + if (anObject != appImageField + && anObject != helpFileField + && anObject != mainNIBField) + { + NSLog(@"tfGetFocus: not that textfield"); + return; + } + + if (anObject == appImageField) + { + file = [appImageField stringValue]; + + if (![file isEqualToString:@""]) + { + path = [self dirForCategoryKey:PCImages]; + path = [path stringByAppendingPathComponent:file]; + [self setIconViewImage:[[NSImage alloc] + initWithContentsOfFile:path]]; + } + activeTextField = appImageField; + } + else if (anObject == helpFileField) + { + activeTextField = helpFileField; + } + else if (anObject == mainNIBField) + { + file = [mainNIBField stringValue]; + + if (![file isEqualToString:@""]) + { + path = [projectPath stringByAppendingPathComponent:file]; + [self setIconViewImage:[[NSWorkspace sharedWorkspace] + iconForFile:path]]; + } + activeTextField = mainNIBField; + } + + [setFieldButton setEnabled:YES]; + [clearFieldButton setEnabled:YES]; +} + +- (void)controlTextDidEndEditing:(NSNotification *)aNotification +{ + id anObject = [aNotification object]; + + if (anObject != appImageField + && anObject != helpFileField + && anObject != mainNIBField) + { + NSLog(@"tfLostFocus: not that textfield"); + return; + } + + activeTextField = nil; + [self setIconViewImage:nil]; + + [setFieldButton setEnabled:NO]; + [clearFieldButton setEnabled:NO]; +} + +@end diff --git a/Modules/RenaissanceProject/PCRenaissanceProject.h b/Modules/RenaissanceProject/PCRenaissanceProject.h new file mode 100644 index 0000000..bcb6fcb --- /dev/null +++ b/Modules/RenaissanceProject/PCRenaissanceProject.h @@ -0,0 +1,99 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +/* + Description: + + This is the project type 'Application' for GNUstep. You never should create + it yourself but use PCAppProj for doing this. Otherwise needed files don't + get copied to the right place. + */ + +#ifndef _PCRenaissanceProject_h_ +#define _PCRenaissanceProject_h_ + +#include +#include +#include + +@interface PCAppTextField : NSTextField +{ +} + +@end + +@interface PCRenaissanceProject : PCProject +{ + IBOutlet NSBox *projectAttributesView; + IBOutlet NSTextField *projectTypeField; + IBOutlet NSTextField *projectNameField; + IBOutlet NSTextField *projectLanguageField; + IBOutlet NSTextField *appClassField; + + PCAppTextField *activeTextField; + IBOutlet PCAppTextField *appImageField; + IBOutlet PCAppTextField *helpFileField; + IBOutlet PCAppTextField *mainNIBField; + + IBOutlet NSImageView *iconView; + NSImage *icon; + IBOutlet NSButton *setFieldButton; + IBOutlet NSButton *clearFieldButton; + + NSTableView *docIconsList; + NSTableColumn *docExtColumn; + NSTableColumn *docIconColumn; + NSMutableArray *docIconsItems; + IBOutlet NSScrollView *docIconsScroll; + + IBOutlet NSButton *addDocIcon; + IBOutlet NSButton *removeDocIcon; + + NSMutableDictionary *infoDict; +} + +// ---------------------------------------------------------------------------- +// --- Init and free +// ---------------------------------------------------------------------------- + +- (id)init; +- (void)assignInfoDict:(NSMutableDictionary *)dict; +- (void)loadInfoFileAtPath:(NSString *)path; +- (void)dealloc; + +@end + +@interface PCRenaissanceProject (GeneratedFiles) + +- (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key; +- (BOOL)writeInfoFile; +- (NSArray *)convertExtensions; +- (BOOL)writeMakefile; +- (void)appendHead:(PCMakefileFactory *)mff; +- (void)appendApplication:(PCMakefileFactory *)mff; +- (void)appendTail:(PCMakefileFactory *)mff; + +@end + +#endif diff --git a/Modules/RenaissanceProject/PCRenaissanceProject.m b/Modules/RenaissanceProject/PCRenaissanceProject.m new file mode 100644 index 0000000..7f63474 --- /dev/null +++ b/Modules/RenaissanceProject/PCRenaissanceProject.m @@ -0,0 +1,563 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include +#include + +#include "PCRenaissanceProject.h" +#include "PCRenaissanceProject+Inspector.h" +#include "PCRenaissanceProj.h" + +@implementation PCRenaissanceProject + +// ---------------------------------------------------------------------------- +// --- Init and free +// ---------------------------------------------------------------------------- + +- (id)init +{ + + if ((self = [super init])) + { + rootKeys = [[NSArray arrayWithObjects: + PCClasses, + PCHeaders, + PCOtherSources, + PCInterfaces, + PCImages, + PCOtherResources, + PCSubprojects, + PCDocuFiles, + PCSupportingFiles, + PCLibraries, + PCNonProject, + nil] retain]; + + rootCategories = [[NSArray arrayWithObjects: + @"Classes", + @"Headers", + @"Other Sources", + @"Interfaces", + @"Images", + @"Other Resources", + @"Subprojects", + @"Documentation", +// @"Context Help", + @"Supporting Files", +// @"Frameworks", + @"Libraries", + @"Non Project Files", + nil] retain]; + + rootEntries = [[NSDictionary + dictionaryWithObjects:rootCategories forKeys:rootKeys] retain]; + + } + return self; +} + +- (void)assignInfoDict:(NSMutableDictionary *)dict +{ + infoDict = [dict mutableCopy]; +} + +- (void)loadInfoFileAtPath:(NSString *)path +{ + NSString *infoFile = nil; + + infoFile = [path stringByAppendingPathComponent:@"Info-gnustep.plist"]; + if ([[NSFileManager defaultManager] fileExistsAtPath:infoFile]) + { + infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:infoFile]; + } + else + { + infoDict = [[NSMutableDictionary alloc] init]; + } +} + +- (void)dealloc +{ + NSLog (@"PCRenaissanceProject: dealloc"); + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + RELEASE(infoDict); + RELEASE(projectAttributesView); + + RELEASE(rootCategories); + RELEASE(rootKeys); + RELEASE(rootEntries); + + [super dealloc]; +} + +// ---------------------------------------------------------------------------- +// --- PCProject overridings +// ---------------------------------------------------------------------------- + +- (Class)builderClass +{ + return [PCRenaissanceProj class]; +} + +- (NSString *)projectDescription +{ + return @"Project that handles GNUstep ObjC based applications."; +} + +- (BOOL)isExecutable +{ + return YES; +} + +- (NSString *)execToolName +{ + return [NSString stringWithString:@"openapp"]; +} + +- (NSArray *)fileTypesForCategoryKey:(NSString *)key +{ + if ([key isEqualToString:PCClasses]) + { + return [NSArray arrayWithObjects:@"m",nil]; + } + else if ([key isEqualToString:PCHeaders]) + { + return [NSArray arrayWithObjects:@"h",nil]; + } + else if ([key isEqualToString:PCOtherSources]) + { + return [NSArray arrayWithObjects:@"c",@"C",@"m",nil]; + } + else if ([key isEqualToString:PCInterfaces]) + { + return [NSArray arrayWithObjects:@"gmodel",@"gorm",nil]; + } + else if ([key isEqualToString:PCImages]) + { + return [NSImage imageFileTypes]; + } + else if ([key isEqualToString:PCSubprojects]) + { + return [NSArray arrayWithObjects:@"subproj",nil]; + } + else if ([key isEqualToString:PCLibraries]) + { + return [NSArray arrayWithObjects:@"so",@"a",@"lib",nil]; + } + + return nil; +} + +- (NSString *)dirForCategoryKey:(NSString *)key +{ + if ([key isEqualToString:PCImages]) + { + return [projectPath stringByAppendingPathComponent:@"Images"]; + } + else if ([key isEqualToString:PCDocuFiles]) + { + return [projectPath stringByAppendingPathComponent:@"Documentation"]; + } + + return projectPath; +} + +- (NSArray *)buildTargets +{ + return [NSArray arrayWithObjects: + @"app", @"debug", @"profile", @"dist", nil]; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects: + PCClasses, PCOtherSources, nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects: + PCInterfaces, PCOtherResources, PCImages, nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects: + PCDocuFiles, PCSupportingFiles, PCNonProject, nil]; +} + +- (NSArray *)allowableSubprojectTypes +{ + return [NSArray arrayWithObjects: + @"Bundle", @"Tool", @"Library", nil]; +} + +- (NSArray *)defaultLocalizableKeys +{ + return [NSArray arrayWithObjects: PCInterfaces, nil]; +} + +- (NSArray *)localizableKeys +{ + return [NSArray arrayWithObjects: + PCInterfaces, PCImages, PCOtherResources, PCDocuFiles, nil]; +} + +- (BOOL)isEditableCategory:(NSString *)category +{ + NSString *key = [self keyForCategory:category]; + + if ([super isEditableCategory:category] + || [key isEqualToString:PCInterfaces]) + { + return YES; + } + + return NO; +} + +// ============================================================================ +// ==== File Handling +// ============================================================================ + +- (BOOL)removeFiles:(NSArray *)files forKey:(NSString *)key +{ + NSMutableArray *filesToRemove = [[files mutableCopy] autorelease]; + NSString *mainNibFile = [projectDict objectForKey:PCMainInterfaceFile]; + NSString *appIcon = [projectDict objectForKey:PCAppIcon]; + + if (!files || !key) + { + return NO; + } + + // Check for main NIB file + if ([key isEqualToString:PCInterfaces] && [files containsObject:mainNibFile]) + { + int ret; + ret = NSRunAlertPanel(@"Remove", + @"You've selected to remove main interface file.\nDo you still want to remove it?", + @"Remove", @"Leave", nil); + + if (ret == NSAlertAlternateReturn) // Leave + { + [filesToRemove removeObject:mainNibFile]; + } + else + { + [self clearMainNib:self]; + } + } + // Check for application icon files + else if ([key isEqualToString:PCImages] && [files containsObject:appIcon]) + { + int ret; + ret = NSRunAlertPanel(@"Remove", + @"You've selected to remove application icon file.\nDo you still want to remove it?", + @"Remove", @"Leave", nil); + + if (ret == NSAlertAlternateReturn) // Leave + { + [filesToRemove removeObject:appIcon]; + } + else + { + [self clearAppIcon:self]; + } + } + + return [super removeFiles:filesToRemove forKey:key]; +} + +- (BOOL)renameFile:(NSString *)fromFile toFile:(NSString *)toFile +{ + NSString *mainNibFile = [projectDict objectForKey:PCMainInterfaceFile]; + NSString *appIcon = [projectDict objectForKey:PCAppIcon]; + NSString *categoryKey = nil; + NSString *ff = [fromFile copy]; + NSString *tf = [toFile copy]; + BOOL success = NO; + + categoryKey = [self + keyForCategory:[projectBrowser nameOfSelectedRootCategory]]; + + // Check for main NIB file + if ([categoryKey isEqualToString:PCInterfaces] + && [fromFile isEqualToString:mainNibFile]) + { + [self clearMainNib:self]; + if ([super renameFile:ff toFile:tf] == YES) + { + [self setMainNibWithFileAtPath: + [[self dirForCategoryKey:categoryKey] + stringByAppendingPathComponent:tf]]; + success = YES; + } + } + // Check for application icon files + else if ([categoryKey isEqualToString:PCImages] + && [fromFile isEqualToString:appIcon]) + { + [self clearAppIcon:self]; + if ([super renameFile:ff toFile:tf] == YES) + { + [self setAppIconWithImageAtPath: + [[self dirForCategoryKey:categoryKey] + stringByAppendingPathComponent:tf]]; + success = YES; + } + } + else if ([super renameFile:ff toFile:tf] == YES) + { + success = YES; + } + + [ff release]; + [tf release]; + + return success; +} + +@end + +@implementation PCRenaissanceProject (GeneratedFiles) + +- (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key +{ + id entry = [projectDict objectForKey:key]; + + if (entry == nil) + { + return; + } + + if ([entry isKindOfClass:[NSString class]] && [entry isEqualToString:@""]) + { + [infoDict removeObjectForKey:name]; + return; + } + + if ([entry isKindOfClass:[NSArray class]] && [entry count] <= 0) + { + [infoDict removeObjectForKey:name]; + return; + } + + [infoDict setObject:entry forKey:name]; +} + +- (BOOL)writeInfoFile +{ + NSString *infoFile = nil; + + [self writeInfoEntry:@"ApplicationDescription" forKey:PCDescription]; + [self writeInfoEntry:@"ApplicationIcon" forKey:PCAppIcon]; + [self writeInfoEntry:@"ApplicationName" forKey:PCProjectName]; + [self writeInfoEntry:@"ApplicationRelease" forKey:PCRelease]; + [self writeInfoEntry:@"Authors" forKey:PCAuthors]; + [self writeInfoEntry:@"Copyright" forKey:PCCopyright]; + [self writeInfoEntry:@"CopyrightDescription" forKey:PCCopyrightDescription]; + [self writeInfoEntry:@"FullVersionID" forKey:PCVersion]; + [self writeInfoEntry:@"NSExecutable" forKey:PCProjectName]; + [self writeInfoEntry:@"NSIcon" forKey:PCAppIcon]; + [self writeInfoEntry:@"GSMainMarkupFile" forKey:PCMainInterfaceFile]; + [self writeInfoEntry:@"NSPrincipalClass" forKey:PCPrincipalClass]; + [infoDict setObject:@"Application" forKey:@"NSRole"]; + [infoDict setObject:[self convertExtensions] forKey:@"NSTypes"]; + [self writeInfoEntry:@"URL" forKey:PCURL]; + + infoFile = [projectPath stringByAppendingPathComponent:@"Info-gnustep.plist"]; + + return [infoDict writeToFile:infoFile atomically:YES]; +} + +- (NSArray *)convertExtensions +{ + NSMutableArray *icons = [NSMutableArray arrayWithCapacity:1]; + NSMutableArray *extensions = [NSMutableArray arrayWithCapacity:1]; + NSArray *docIE = [projectDict objectForKey:PCDocumentExtensions]; + NSEnumerator *enumerator = [docIE objectEnumerator]; + id anObject; + + NSMutableArray *resArray = [[NSMutableArray alloc] init]; + NSMutableDictionary *tmpDict = [NSMutableDictionary dictionaryWithCapacity:1]; + NSString *ic; + NSArray *ex; + + while ((anObject = [enumerator nextObject])) + { + [icons addObject:[anObject objectForKey:@"Icon"]]; + [extensions addObject:[anObject objectForKey:@"Extension"]]; + } + + // At this point we have 2 arrays; 1 list of icons and 2 list of extensions. + // So go group it! + while ([icons count] && [extensions count]) + { + int i; + BOOL loaded = NO; + NSMutableDictionary *tdict; + NSString *tic; + + ic = [icons objectAtIndex:0]; + ex = [NSMutableArray arrayWithObject:[extensions objectAtIndex:0]]; + + for (i = 0; i < [resArray count]; i++) + { + tdict = [resArray objectAtIndex:i]; + tic = [tdict objectForKey:@"NSIcon"]; + + if([tic isEqualToString:ic]) + { + [[tdict objectForKey:@"NSUnixExtensions"] + addObject:[ex objectAtIndex:0]]; + loaded = YES; + continue; + } + } + + if (!loaded) + { + [tmpDict setObject:ic forKey:@"NSIcon"]; + [tmpDict setObject:ex forKey:@"NSUnixExtensions"]; + + [resArray addObject:[tmpDict copy]]; + } + + [tmpDict removeAllObjects]; + [icons removeObjectAtIndex:0]; + [extensions removeObjectAtIndex:0]; + } + + return resArray; +} + +// Overriding +- (BOOL)writeMakefile +{ + PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; + int i,j; + NSString *mfl = nil; + NSData *mfd = nil; + + // Save Info-gnustep.plist + [self writeInfoFile]; + + // Save the GNUmakefile backup + [super writeMakefile]; + + // Save GNUmakefile.preamble + [mf createPreambleForProject:self]; + + // Create the new file + [mf createMakefileForProject:projectName]; + + // Head + [self appendHead:mf]; + + // Application part + [self appendApplication:mf]; + + // Subprojects + if ([[projectDict objectForKey:PCSubprojects] count] > 0) + { + [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; + } + + // Resources + [mf appendResources]; + for (i = 0; i < [[self resourceFileKeys] count]; i++) + { + NSString *k = [[self resourceFileKeys] objectAtIndex:i]; + NSMutableArray *resources = [[projectDict objectForKey:k] mutableCopy]; + + if ([k isEqualToString:PCImages]) + { + for (j=0; j<[resources count]; j++) + { + [resources replaceObjectAtIndex:j + withObject:[NSString stringWithFormat:@"Images/%@", + [resources objectAtIndex:j]]]; + } + } + + [mf appendResourceItems:resources]; + [resources release]; + } + + [mf appendHeaders:[projectDict objectForKey:PCHeaders]]; + [mf appendClasses:[projectDict objectForKey:PCClasses]]; + [mf appendOtherSources:[projectDict objectForKey:PCOtherSources]]; + + // Tail + [self appendTail:mf]; + + // Write the new file to disc! + mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + if ((mfd = [mf encodedMakefile])) + { + if ([mfd writeToFile:mfl atomically:YES]) + { + return YES; + } + } + + return NO; +} + +- (void)appendHead:(PCMakefileFactory *)mff +{ + [mff appendString: + [NSString stringWithFormat:@"GNUSTEP_INSTALLATION_DIR = %@\n", + [projectDict objectForKey:PCInstallDir]]]; +} + +- (void)appendApplication:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n#\n# Application\n#\n"]; + [mff appendString: + [NSString stringWithFormat:@"PACKAGE_NAME = %@\n",projectName]]; + [mff appendString: + [NSString stringWithFormat:@"APP_NAME = %@\n",projectName]]; + + [mff appendString:[NSString stringWithFormat:@"%@_APPLICATION_ICON = %@\n", + projectName, [projectDict objectForKey:PCAppIcon]]]; + + // TODO: proper support for localisation + //[self appendString:[NSString stringWithFormat:@"%@_LANGUAGES=English\n",pnme]]; + //[self appendString:[NSString stringWithFormat:@"%@_LOCALIZED_RESOURCE_FILES=Localizable.strings\n",pnme]]; +} + +- (void)appendTail:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n\n#\n# Makefiles\n#\n"]; + [mff appendString:@"-include GNUmakefile.preamble\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/aggregate.make\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/application.make\n"]; + [mff appendString:@"-include GNUmakefile.postamble\n"]; +} + +@end diff --git a/Modules/RenaissanceProject/Resources/AppController.h b/Modules/RenaissanceProject/Resources/AppController.h new file mode 100644 index 0000000..d2c46c5 --- /dev/null +++ b/Modules/RenaissanceProject/Resources/AppController.h @@ -0,0 +1,43 @@ +/* + Project: $PROJECTNAME$ + + Copyright (C) $YEAR$ Free Software Foundation + + Author: $FULLUSERNAME$ + + Created: $DATE$ by $USERNAME$ + + GNUstep Renaissance Application Controller + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#ifndef _APPCONTROLLER_H_ +#define _APPCONTROLLER_H_ + +#include +#include + +@interface AppController : NSObject +{ + +} + +- (void) applicationDidFinishLaunching:(NSNotification *)aNotif; + +@end + +#endif /* _APPCONTROLLER_H_ */ + diff --git a/Modules/RenaissanceProject/Resources/AppController.m b/Modules/RenaissanceProject/Resources/AppController.m new file mode 100644 index 0000000..b4411c7 --- /dev/null +++ b/Modules/RenaissanceProject/Resources/AppController.m @@ -0,0 +1,36 @@ +/* + Project: $PROJECTNAME$ + + Copyright (C) $YEAR$ Free Software Foundation + + Author: $FULLUSERNAME$ + + Created: $DATE$ by $USERNAME$ + + GNUstep Renaissance Application Controller + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "AppController.h" + +@implementation AppController + +- (void) applicationDidFinishLaunching:(NSNotification *)aNotif +{ + [NSBundle loadGSMarkupNamed:@"Main" owner:self]; +} + +@end diff --git a/Modules/RenaissanceProject/Resources/Inspector.gorm/data.classes b/Modules/RenaissanceProject/Resources/Inspector.gorm/data.classes new file mode 100644 index 0000000..910a74d --- /dev/null +++ b/Modules/RenaissanceProject/Resources/Inspector.gorm/data.classes @@ -0,0 +1,181 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:", + "setAppClass:", + "setFile:", + "clearFile:", + "setDocIcon:", + "removeDocIcon:" + ); + Super = NSObject; + }; + PCAppTextField = { + Actions = ( + ); + Outlets = ( + ); + Super = NSTextField; + }; + PCRenaissanceProject = { + Actions = ( + "setAppClass:", + "setFile:", + "clearFile:", + "setDocIcon:", + "removeDocIcon:" + ); + Outlets = ( + projectAttributesView, + projectTypeField, + projectNameField, + projectLanguageField, + appClassField, + iconView, + setFieldButton, + clearFieldButton, + appImageField, + helpFileField, + mainNIBField, + docIconsScroll, + addDocIcon, + removeDocIcon + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Modules/RenaissanceProject/Resources/Inspector.gorm/objects.gorm b/Modules/RenaissanceProject/Resources/Inspector.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..c913e5446141a371a97eaa49298c44d1dbb13ccb GIT binary patch literal 11202 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PCRenaissanceProj/MainMenu-OSX.gsmarkup b/Modules/RenaissanceProject/Resources/MainMenu-OSX.gsmarkup similarity index 100% rename from PCRenaissanceProj/MainMenu-OSX.gsmarkup rename to Modules/RenaissanceProject/Resources/MainMenu-OSX.gsmarkup diff --git a/PCRenaissanceProj/PC.proj b/Modules/RenaissanceProject/Resources/PC.project similarity index 55% rename from PCRenaissanceProj/PC.proj rename to Modules/RenaissanceProject/Resources/PC.project index 6c5d77e..ea383e2 100644 --- a/PCRenaissanceProj/PC.proj +++ b/Modules/RenaissanceProject/Resources/PC.project @@ -1,40 +1,44 @@ { - APPCLASS = "NSApplication"; - APPKIT = "GNUSTEP-GUI"; APPLICATIONICON = ""; BUILDTOOL = "/usr/bin/make"; - CLASS_FILES = ("main.m", "AppController.m"); + CLASS_FILES = ("AppController.m"); COMPILEROPTIONS = ""; - LINKEROPTIONS = ""; + CPPOPTIONS = ""; + LINKEROPTIONS = ""; CREATION_DATE = ""; DOCU_FILES = (); - FOUNDATION = "GNUSTEP-BASE"; FRAMEWORKS = (); HEADER_FILES = ("AppController.h"); INTERFACES = ("Main.gsmarkup", "MainMenu-GNUstep.gsmarkup", "MainMenu-OSX.gsmarkup"); IMAGES = (); LANGUAGE = "English"; LAST_EDITING = ""; - LIBRARIES = ("gnustep-base","gnustep-gui","Renaissance"); + LIBRARIES = ("gnustep-base","gnustep-gui","Renaissance"); MAININTERFACE = ""; - MAKEFILEDIR = "$(GNUSTEP_SYSTEM_ROOT)/Makefiles"; - INSTALLDIR = "$(GNUSTEP_LOCAL_ROOT)/"; + MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; + INSTALLDIR = "$(HOME)/GNUstep"; + OBJC_COMPILEROPTIONS = ""; OTHER_FILES = (); OTHER_RESOURCES = (); - OTHER_SOURCES = (); - PRINCIPAL_CLASS = "main.m"; + OTHER_SOURCES = ("main.m"); + PRINCIPAL_CLASS = "NSApplication"; + PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description avaliable!"; - PROJECT_GROUP = "No description avaliable!"; + PROJECT_DOCUMENTEXTENSIONS = (); + PROJECT_GROUP = "No group avaliable!"; PROJECT_SUMMARY = "No summary avaliable!"; - PROJECT_RELEASE = "1"; - PROJECT_COPYRIGHT = "No license specified!"; + PROJECT_RELEASE = "0.1"; + PROJECT_COPYRIGHT = "Copyright (C) 200x"; + PROJECT_COPYRIGHT_DESC = "Released under ..."; PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz"; PROJECT_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "RenaissanceApplication"; - PROJECT_BUILDER = "PCRenaissanceProj"; - PROJECT_VERSION = 1.0; + PROJECT_VERSION = 0.1; + PROJECT_URL = ""; + SEARCH_HEADER_DIRS = (); + SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } diff --git a/PCLib/PCEditorView+Highlighting.h b/Modules/RenaissanceProject/Resources/main.m similarity index 54% rename from PCLib/PCEditorView+Highlighting.h rename to Modules/RenaissanceProject/Resources/main.m index e048cd0..e3ed068 100644 --- a/PCLib/PCEditorView+Highlighting.h +++ b/Modules/RenaissanceProject/Resources/main.m @@ -1,11 +1,11 @@ /* - GNUstep ProjectCenter - http://www.gnustep.org + Project: $PROJECTNAME$ - Copyright (C) 2000-2002 Free Software Foundation + Copyright (C) $YEAR$ Free Software Foundation - Author: Philippe C.D. Robert + Author: $FULLUSERNAME$ - This file is part of GNUstep. + Created: $DATE$ by $USERNAME$ This application is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -20,27 +20,27 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#ifndef _PCEDITORVIEW_HIGHLIGHTING_H -#define _PCEDITORVIEW_HIGHLIGHTING_H - #include +#include +#include -@class PCEditorView; +#include "AppController.h" -@interface PCEditorView (Highlighting) +int main(int argc, const char *argv[]) +{ + CREATE_AUTORELEASE_POOL (pool); + [NSApplication sharedApplication]; + [NSApp setDelegate:[AppController new]]; + + #ifdef GNUSTEP + [NSBundle loadGSMarkupNamed:@"MainMenu-GNUstep" owner:[NSApp delegate]]; + #else + [NSBundle loadGSMarkupNamed:@"MainMenu-OSX" owner:[NSApp delegate]]; + #endif -- (void)colouriseKeyword:(NSString *)keyword; -- (void)colouriseKeywords:(NSArray *)keywords; + RELEASE (pool); + return NSApplicationMain (argc, argv); -- (void)colouriseStrings; -- (void)colouriseCharStrings; -- (void)colouriseComments; -- (void)colouriseCPPComments; - -@end - -#endif +} diff --git a/PCToolProj/GNUmakefile b/Modules/ToolProject/GNUmakefile similarity index 63% rename from PCToolProj/GNUmakefile rename to Modules/ToolProject/GNUmakefile index 84f6d92..cd0eebc 100644 --- a/PCToolProj/GNUmakefile +++ b/Modules/ToolProject/GNUmakefile @@ -11,41 +11,35 @@ include $(GNUSTEP_MAKEFILES)/common.make -# -# Subprojects -# - - - # # Bundle # -PACKAGE_NAME = PCToolProj -BUNDLE_NAME = PCToolProj -PCToolProj_PRINCIPAL_CLASS = PCToolProj +PACKAGE_NAME = ToolProject +BUNDLE_NAME = ToolProject +ToolProject_PRINCIPAL_CLASS = PCToolProj # # Additional libraries # -PCToolProj_LIBRARIES_DEPEND_UPON += -lProjectCenter +ToolProject_LIBRARIES_DEPEND_UPON += -lProjectCenter # # Resource files # -PCToolProj_RESOURCE_FILES= \ -Info-project.plist \ -PC.proj \ -main.m +ToolProject_RESOURCE_FILES= \ +Resources/PC.project \ +Resources/main.m \ +Resources/Inspector.gorm # # Header files # -PCToolProj_HEADERS= \ +ToolProject_HEADERS= \ PCToolProj.h \ PCToolProject.h @@ -53,7 +47,7 @@ PCToolProject.h # Class files # -PCToolProj_OBJC_FILES= \ +ToolProject_OBJC_FILES= \ PCToolProj.m \ PCToolProject.m @@ -61,7 +55,7 @@ PCToolProject.m # C files # -PCToolProj_C_FILES= +ToolProject_C_FILES= include ../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make diff --git a/PCToolProj/PCToolProj.h b/Modules/ToolProject/PCToolProj.h similarity index 97% rename from PCToolProj/PCToolProj.h rename to Modules/ToolProject/PCToolProj.h index 1202652..53102ab 100644 --- a/PCToolProj/PCToolProj.h +++ b/Modules/ToolProject/PCToolProj.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCTOOLPROJ_H @@ -41,9 +39,7 @@ + (id)sharedCreator; - (Class)projectClass; - - (NSString *)projectTypeName; -- (NSDictionary *)typeTable; - (PCProject *)createProjectAt:(NSString *)path; - (PCProject *)openProjectAt:(NSString *)path; diff --git a/Modules/ToolProject/PCToolProj.m b/Modules/ToolProject/PCToolProj.m new file mode 100644 index 0000000..647cece --- /dev/null +++ b/Modules/ToolProject/PCToolProj.m @@ -0,0 +1,173 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +/* + Description: + + PCToolProj creates new project of the type Tool! +*/ + +#include "ProjectCenter/PCFileCreator.h" +#include "ProjectCenter/PCMakefileFactory.h" + +#include "PCToolProj.h" +#include "PCToolProject.h" + +@implementation PCToolProj + +static PCToolProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) + { + _creator = [[[self class] alloc] init]; + } + + return _creator; +} + +- (Class)projectClass +{ + return [PCToolProject class]; +} + +- (NSString *)projectTypeName +{ + return @"Tool"; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCToolProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath:path attributes:nil]) + { + NSString *_file = nil; + NSString *_2file = nil; +// NSString *_resourcePath; + NSMutableDictionary *projectDict = nil; + NSBundle *projectBundle = nil; + NSString *projectName = nil; + NSMutableDictionary *infoDict = nil; + PCFileCreator *fc = [PCFileCreator sharedCreator]; + + project = [[[PCToolProject alloc] init] autorelease]; + projectBundle = [NSBundle bundleForClass:[self class]]; + + _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; + projectDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + projectName = [path lastPathComponent]; + if ([[projectName pathExtension] isEqualToString:@"subproj"]) + { + projectName = [projectName stringByDeletingPathExtension]; + } + [projectDict setObject:projectName forKey:PCProjectName]; + [projectDict setObject:[self projectTypeName] forKey:PCProjectType]; + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + [project setProjectName:projectName]; + + // Copy the project files to the provided path + _file = [projectBundle pathForResource:@"main" ofType:@"m"]; + _2file = [path stringByAppendingPathComponent:@"main.m"]; + [fm copyPath:_file toPath:_2file handler:nil]; + [fc replaceTagsInFileAtPath:_2file withProject:project]; + + // GNUmakefile.postamble + [[PCMakefileFactory sharedFactory] createPostambleForProject:project]; + + // Resources +/* _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath attributes:nil];*/ + _2file = [path stringByAppendingPathComponent:@"Images"]; + [fm createDirectoryAtPath:_2file attributes:nil]; + _2file = [path stringByAppendingPathComponent:@"Documentation"]; + [fm createDirectoryAtPath:_2file attributes:nil]; + + // Create the Info-gnustep.plist + infoDict = [NSDictionary dictionaryWithObjectsAndKeys: + @"Generated by ProjectCenter, do not edit", @"!", + projectName, @"ToolName", + @"", @"ToolDescription", + @"", @"ToolIcon", + @"0.1", @"ToolRelease", + @"0.1", @"FullVersionID", + [NSArray array], @"Authors", + @"", @"URL", + @"Copyright (C) 200x by ...", @"Copyright", + @"Released under...", @"CopyrightDescription", + nil]; + + [infoDict + writeToFile:[path stringByAppendingPathComponent:@"Info-gnustep.plist"] + atomically:YES]; + + [projectDict + setObject:[NSArray arrayWithObjects:@"Info-gnustep.plist",nil] + forKey:PCOtherResources]; + + [project assignInfoDict:(NSMutableDictionary *)infoDict]; + + // Set the new dictionary - this causes the GNUmakefile to be written + if(![project assignProjectDict:projectDict]) + { + NSRunAlertPanel(@"Attention!", + @"Could not load %@!", + @"OK",nil,nil,path); + return nil; + } + + // Save the project to disc + [project save]; + } + + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + NSString *pPath = [path stringByDeletingLastPathComponent]; + PCToolProject *project = nil; + + project = [[[PCToolProject alloc] + initWithProjectDictionary:dict + path:pPath] autorelease]; + + [project loadInfoFileAtPath:[path stringByDeletingLastPathComponent]]; + + return project; +} + +@end diff --git a/PCToolProj/PCToolProject.h b/Modules/ToolProject/PCToolProject.h similarity index 58% rename from PCToolProj/PCToolProject.h rename to Modules/ToolProject/PCToolProject.h index 1dc8cac..9cfed0b 100644 --- a/PCToolProj/PCToolProject.h +++ b/Modules/ToolProject/PCToolProject.h @@ -20,18 +20,15 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ /* - Description: + Description: - This is the project type 'Tool' for GNUstep. You never should create - it yourself but use PCToolProj for doing this. Otherwise needed files don't - get copied to the right place. - - */ + This is the project type 'Tool' for GNUstep. You never should create + it yourself but use PCToolProj for doing this. Otherwise needed files don't + get copied to the right place. +*/ #ifndef _PCTOOLPROJECT_H #define _PCTOOLPROJECT_H @@ -39,8 +36,16 @@ #include #include +@class PCMakefileFactory; + @interface PCToolProject : PCProject { + IBOutlet NSBox *projectAttributesView; + IBOutlet NSTextField *projectTypeField; + IBOutlet NSTextField *projectNameField; + IBOutlet NSTextField *projectLanguageField; + + NSMutableDictionary *infoDict; } //---------------------------------------------------------------------------- @@ -48,25 +53,28 @@ //---------------------------------------------------------------------------- - (id)init; +- (void)assignInfoDict:(NSMutableDictionary *)dict; +- (void)loadInfoFileAtPath:(NSString *)path; - (void)dealloc; -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- +@end -- (Class)builderClass; +@interface PCToolProject (GeneratedFiles) + +- (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key; +- (BOOL)writeInfoFile; - (BOOL)writeMakefile; +- (void)appendHead:(PCMakefileFactory *)mff; +- (void)appendLibraries:(PCMakefileFactory*)mff; +- (void)appendTail:(PCMakefileFactory *)mff; -- (NSArray *)sourceFileKeys; -- (NSArray *)resourceFileKeys; -- (NSArray *)otherKeys; -- (NSArray *)buildTargets; -- (NSString *)projectDescription; +@end -- (BOOL)isExecutable; +@interface PCToolProject (Inspector) -- (void)updateValuesFromProjectDict; +- (NSView *)projectAttributesView; +- (void)updateInspectorValues:(NSNotification *)aNotif; @end diff --git a/Modules/ToolProject/PCToolProject.m b/Modules/ToolProject/PCToolProject.m new file mode 100644 index 0000000..c89d890 --- /dev/null +++ b/Modules/ToolProject/PCToolProject.m @@ -0,0 +1,401 @@ +/* + GNUstep ProjectCenter - http://www.gnustep.org + + Copyright (C) 2001 Free Software Foundation + + Author: Philippe C.D. Robert + + This file is part of GNUstep. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +*/ + +#include "PCToolProject.h" +#include "PCToolProj.h" + +#include + +@implementation PCToolProject + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) + { + rootKeys = [[NSArray arrayWithObjects: + PCClasses, + PCHeaders, + PCOtherSources, + PCImages, + PCOtherResources, + PCSubprojects, + PCDocuFiles, + PCSupportingFiles, + PCLibraries, + PCNonProject, + nil] retain]; + + rootCategories = [[NSArray arrayWithObjects: + @"Classes", + @"Headers", + @"Other Sources", + @"Images", + @"Other Resources", + @"Subprojects", + @"Documentation", + @"Supporting Files", + @"Libraries", + @"Non Project Files", + nil] retain]; + + rootEntries = [[NSDictionary + dictionaryWithObjects:rootCategories forKeys:rootKeys] retain]; + + } + + return self; +} + +- (void)assignInfoDict:(NSMutableDictionary *)dict +{ + infoDict = [dict mutableCopy]; +} + +- (void)loadInfoFileAtPath:(NSString *)path +{ + NSString *infoFile = nil; + + infoFile = [path stringByAppendingPathComponent:@"Info-gnustep.plist"]; + if ([[NSFileManager defaultManager] fileExistsAtPath:infoFile]) + { + infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:infoFile]; + } + else + { + infoDict = [[NSMutableDictionary alloc] init]; + } +} + +- (void)dealloc +{ + [rootCategories release]; + [rootKeys release]; + [rootEntries release]; + + [super dealloc]; +} + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (Class)builderClass +{ + return [PCToolProj class]; +} + +- (NSString *)projectDescription +{ + return @"Project that handles GNUstep/ObjC based tools."; +} + +- (BOOL)isExecutable +{ + return YES; +} + +- (NSString *)execToolName +{ + return [NSString stringWithString:@"opentool"]; +} + +- (NSArray *)fileTypesForCategoryKey:(NSString *)category +{ + if ([category isEqualToString:PCClasses]) + { + return [NSArray arrayWithObjects:@"m",nil]; + } + else if ([category isEqualToString:PCHeaders]) + { + return [NSArray arrayWithObjects:@"h",nil]; + } + else if ([category isEqualToString:PCOtherSources]) + { + return [NSArray arrayWithObjects:@"c",@"C",@"m",nil]; + } + else if ([category isEqualToString:PCImages]) + { + return [NSImage imageFileTypes]; + } + else if ([category isEqualToString:PCSubprojects]) + { + return [NSArray arrayWithObjects:@"subproj",nil]; + } + else if ([category isEqualToString:PCLibraries]) + { + return [NSArray arrayWithObjects:@"so",@"a",@"lib",nil]; + } + + return nil; +} + +- (NSString *)dirForCategory:(NSString *)category +{ + if ([category isEqualToString:PCImages]) + { + return [projectPath stringByAppendingPathComponent:@"Images"]; + } + else if ([category isEqualToString:PCDocuFiles]) + { + return [projectPath stringByAppendingPathComponent:@"Documentation"]; + } + + return projectPath; +} + +- (NSArray *)buildTargets +{ + return [NSArray arrayWithObjects: + @"tool", @"debug", @"profile", @"dist", nil]; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects:PCOtherResources,PCImages,nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; +} + +- (NSArray *)allowableSubprojectTypes +{ + return [NSArray arrayWithObjects: + @"Bundle", @"Library", nil]; +} + +- (NSArray *)defaultLocalizableKeys +{ + return [NSArray arrayWithObjects:PCOtherResources,PCDocuFiles,nil]; +} + +- (NSArray *)localizableKeys +{ + return [NSArray arrayWithObjects:PCOtherResources,PCDocuFiles,nil]; +} + +@end + +@implementation PCToolProject (GeneratedFiles) + +- (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key +{ + id entry = [projectDict objectForKey:key]; + + if (entry == nil) + { + return; + } + + if ([entry isKindOfClass:[NSString class]] && [entry isEqualToString:@""]) + { + [infoDict removeObjectForKey:name]; + return; + } + + if ([entry isKindOfClass:[NSArray class]] && [entry count] <= 0) + { + [infoDict removeObjectForKey:name]; + return; + } + + [infoDict setObject:entry forKey:name]; +} + +- (BOOL)writeInfoFile +{ + NSString *infoFile = nil; + + [self writeInfoEntry:@"ToolName" forKey:PCProjectName]; + [self writeInfoEntry:@"ToolDescription" forKey:PCDescription]; + [self writeInfoEntry:@"ToolIcon" forKey:PCToolIcon]; + [self writeInfoEntry:@"ToolRelease" forKey:PCRelease]; + [self writeInfoEntry:@"FullVersionID" forKey:PCVersion]; + [self writeInfoEntry:@"Authors" forKey:PCAuthors]; + [self writeInfoEntry:@"URL" forKey:PCURL]; + [self writeInfoEntry:@"Copyright" forKey:PCCopyright]; + [self writeInfoEntry:@"CopyrightDescription" forKey:PCCopyrightDescription]; + + infoFile = [projectPath stringByAppendingPathComponent:@"Info-gnustep.plist"]; + + return [infoDict writeToFile:infoFile atomically:YES]; +} + + +- (BOOL)writeMakefile +{ + PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; + int i,j; + NSString *mfl = nil; + NSData *mfd = nil; + + // Info-gnustep.plist + [self writeInfoFile]; + + // Save the GNUmakefile backup + [super writeMakefile]; + + // Save GNUmakefile.preamble + [mf createPreambleForProject:self]; + + // Create the new file + [mf createMakefileForProject:projectName]; + + // Head + [self appendHead:mf]; + + // Libraries + [self appendLibraries:mf]; + + // Subprojects + if ([[projectDict objectForKey:PCSubprojects] count] > 0) + { + [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; + } + + // Resources + [mf appendResources]; + for (i = 0; i < [[self resourceFileKeys] count]; i++) + { + NSString *k = [[self resourceFileKeys] objectAtIndex:i]; + NSMutableArray *resources = [[projectDict objectForKey:k] mutableCopy]; + + if ([k isEqualToString:PCImages]) + { + for (j=0; j<[resources count]; j++) + { + [resources replaceObjectAtIndex:j + withObject:[NSString stringWithFormat:@"Images/%@", + [resources objectAtIndex:j]]]; + } + } + + [mf appendResourceItems:resources]; + [resources release]; + } + + [mf appendHeaders:[projectDict objectForKey:PCHeaders]]; + [mf appendClasses:[projectDict objectForKey:PCClasses]]; + [mf appendOtherSources:[projectDict objectForKey:PCOtherSources]]; + + // Tail + [self appendTail:mf]; + + // Write the new file to disc! + mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + if ((mfd = [mf encodedMakefile])) + { + if ([mfd writeToFile:mfl atomically:YES]) + { + return YES; + } + } + + return NO; +} + +- (void)appendHead:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n#\n# Tool\n#\n"]; + [mff appendString:[NSString stringWithFormat:@"PACKAGE_NAME = %@\n", + projectName]]; + [mff appendString:[NSString stringWithFormat:@"TOOL_NAME = %@\n", + projectName]]; + [mff appendString:[NSString stringWithFormat:@"%@_TOOL_ICON = %@\n", + projectName, [projectDict objectForKey:PCToolIcon]]]; +} + +- (void)appendLibraries:(PCMakefileFactory *)mff +{ + NSArray *libs = [projectDict objectForKey:PCLibraries]; + + [mff appendString:@"\n#\n# Libraries\n#\n"]; + + [mff + appendString:[NSString stringWithFormat:@"%@_TOOL_LIBS += ",projectName]]; + + if (libs && [libs count]) + { + NSString *tmp; + NSEnumerator *enumerator = [libs objectEnumerator]; + + while ((tmp = [enumerator nextObject])) + { + if (![tmp isEqualToString:@"gnustep-base"] && + ![tmp isEqualToString:@"gnustep-gui"]) + { + [mff appendString:[NSString stringWithFormat:@"-l%@ ",tmp]]; + } + } + } +} + +- (void)appendTail:(PCMakefileFactory *)mff +{ + [mff appendString:@"\n\n#\n# Makefiles\n#\n"]; + [mff appendString:@"-include GNUmakefile.preamble\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/aggregate.make\n"]; + [mff appendString:@"include $(GNUSTEP_MAKEFILES)/tool.make\n"]; + [mff appendString:@"-include GNUmakefile.postamble\n"]; +} + +@end + +@implementation PCToolProject (Inspector) + +- (NSView *)projectAttributesView +{ + if (projectAttributesView == nil) + { + if ([NSBundle loadNibNamed:@"Inspector" owner:self] == NO) + { + NSLog(@"PCLibraryProject: error loading Inspector NIB!"); + return nil; + } + [projectAttributesView retain]; + [self updateInspectorValues:nil]; + } + + return projectAttributesView; +} + +- (void)updateInspectorValues:(NSNotification *)aNotif +{ + [projectTypeField setStringValue:@"Tool"]; + [projectNameField setStringValue:projectName]; + [projectLanguageField setStringValue:[projectDict objectForKey:@"LANGUAGE"]]; +} + +@end + diff --git a/Modules/ToolProject/Resources/Inspector.gorm/data.classes b/Modules/ToolProject/Resources/Inspector.gorm/data.classes new file mode 100644 index 0000000..7c39971 --- /dev/null +++ b/Modules/ToolProject/Resources/Inspector.gorm/data.classes @@ -0,0 +1,156 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "changeFont:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontFontPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:" + ); + Super = NSObject; + }; + PCToolProject = { + Actions = ( + ); + Outlets = ( + projectAttributesView, + projectTypeField, + projectNameField, + projectLanguageField + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Modules/ToolProject/Resources/Inspector.gorm/objects.gorm b/Modules/ToolProject/Resources/Inspector.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..e0710306fe5f09a31584b5101c1f43d50ea5fa14 GIT binary patch literal 4332 zcmcInU3U{@5T1Ot&9-SvlPDCWDxjd~EMGzuX&P*)(k&98h*sPtYgtH>oODaeU4OzJ zZap4vJ#w@810MVb-g)P*@CP{aPO{xi6H=;XPxk$u_uXfnnRjO1xU=C{^(nJadT2kf zkbY;)%NM4(f~a3?RW6oV6~t+b=n+WI7Y%#0P^&toU9}oOKRpVAMsaENkyUcI4H(s9 zFkuuIHyv}eVqLRKj$Nyoji)@Q$6?qghWp?o4WuxpCsWQfSffH0sWa%{! zrERuoSBy6kykvxjQam&ghnrA<+fbvYLiGlfkHCTwIGB*xDSvh2UaOWB91-Ac zz|G~fnH>PF@N5Ti+Uy@x&Hn;G-8`&bf$k{K6NyIntH5<}Ku3ZK-_ULW4hcX*K0rfpxB(_qVGTB^TqB64T}uJG>&(HjAgR~e>NlG zKEp#Ycg){yEDrN@o&rhd6V+gy>J{2|gPuhy>p0PjDS$8|i~BJD0%n`)YZYr}|MFQ| zxZIVsez#IqfVH`1O6|*M1$?bJjIYZ9z{SJOQSOd+*K~wL@t>Yvs_jsGNYh6cSe%s2 zdMfUyj2}R8Zz#o0;+rBNWGH(TM;}6pJ0^2uzT#qWqDKw3aY`SDgi)NWZ4)2?fAKpt zHGbu^!cRNoI$m`83%|RCyaMYG`HQy%`3T!t1mA8BDitUv#6oB2MM8gMp}*}B+U{-% z^_|c=A~dOt7mo)xBA)H}&H+5zi4aFl5=Y(@pgNp+z=6XQx$CD;CkvT&y;OGw1^kBZ z7dj}@(F`%@J;k6?a+ID7IxXV|V9@)DL8tHokKM!#C`J%-z9!`ry4&D zA^s5|j&g`2J~fZT;lZmvF6v^`fM-Qw+LxG)!=6h3&L{(*%l1FH4ix!2blTAjsrX!T z4A09sC;6P}0+^%=pkP+))rRR<<>iOAW9?oA+SSv)KG&}9kTbiW_;FE|_vFXNGTukK z;vX&rv@7=XGaKovMhcfh+MOotejsXZBVPpto+_VlU3>q;NIK9lhS*wa;IPgihe zUxV>1rK&1}4CKfoJZPP`|y_m1PD%E0PM_BHdYcL|re?7ct{--f!WDDhA+-%b4x2cb93swMIG1m`%*cC}pN3?jOlE>NqT z7Ziw?TH$X{IB5L6e0~2(o!9QY0Q@R&zjs^JLFBfu;Kjf}!!04Q1P$I478T8I%V+iU zad%`q>%01F9JVOR=TNsswU>v$ce_Ym-d&B$GM@0ICpfd?RD`lLZ#k#Du{Ns!nL9cI z8ov}kDt;70YndC~(=&|y!n(O;(TWJgnE1795KaN|^?JoFnVhCBlxo$M5#xQC+lMvh zygYs*P!99OHjLluS4ZwXgKWS6AY#qXL~?-=Rj0hKqX{GQ51DorX4 zZ^gw`s@&&Fi7E-Ml&O;8ilyfuqqbbybSjoZ8EbIk74I1SAX|qNR}Uu2kSESM)MLXc zWfvUSZopk?S+Ip`&78O5E#gCw63R!yQrfYapIW1>*51cQeb=_{rQNlU)!GbJWNpSL QMkY>n7K{=*Gge>5KY0I)PXGV_ literal 0 HcmV?d00001 diff --git a/Modules/ToolProject/Resources/PC.project b/Modules/ToolProject/Resources/PC.project new file mode 100644 index 0000000..5c3ce92 --- /dev/null +++ b/Modules/ToolProject/Resources/PC.project @@ -0,0 +1,40 @@ +{ + BUILDTOOL = "/usr/bin/make"; + CLASS_FILES = (); + COMPILEROPTIONS = ""; + CPPOPTIONS = ""; + LINKEROPTIONS = ""; + CREATION_DATE = ""; + DOCU_FILES = (); + FRAMEWORKS = (); + HEADER_FILES = (); + IMAGES = (); + LANGUAGE = "English"; + LAST_EDITING = ""; + LIBRARIES = ("gnustep-base"); + MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; + INSTALLDIR = "$(HOME)/GNUstep/Tools"; + OBJC_COMPILEROPTIONS = ""; + OTHER_FILES = (); + OTHER_RESOURCES = ("Version"); + OTHER_SOURCES = ("main.m"); + PROJECT_AUTHORS = (); + PROJECT_CREATOR = ""; + PROJECT_DESCRIPTION = "No description avaliable!"; + PROJECT_GROUP = "No group avaliable!"; + PROJECT_SUMMARY = "No summary avaliable!"; + PROJECT_RELEASE = "0.1"; + PROJECT_COPYRIGHT = "Copyright (C) 200x"; + PROJECT_COPYRIGHT_DESC = "Released under ..."; + PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz"; + PROJECT_MAINTAINER = ""; + PROJECT_NAME = ""; + PROJECT_TYPE = "Tool"; + PROJECT_VERSION = 0.1; + PROJECT_URL = ""; + SEARCH_HEADER_DIRS = (); + SEARCH_LIB_DIRS = (); + SUBPROJECTS = (); + SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); + TOOLICON = ""; +} diff --git a/PCLib/PCEditor+UInterface.h b/Modules/ToolProject/Resources/main.m similarity index 68% rename from PCLib/PCEditor+UInterface.h rename to Modules/ToolProject/Resources/main.m index bd2661b..06eaf80 100644 --- a/PCLib/PCEditor+UInterface.h +++ b/Modules/ToolProject/Resources/main.m @@ -1,11 +1,11 @@ /* - GNUstep ProjectCenter - http://www.gnustep.org + Project: $PROJECTNAME$ - Copyright (C) 2000-2002 Free Software Foundation + Copyright (C) $YEAR$ Free Software Foundation - Author: Philippe C.D. Robert + Author: $FULLUSERNAME$ - This file is part of GNUstep. + Created: $DATE$ by $USERNAME$ This application is free software; you can redistribute it and/or modify it under the terms of the GNU General Public @@ -20,15 +20,20 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#include "PCEditor.h" +#include -@interface PCEditor (UInterface) +int +main(int argc, const char *argv[]) +{ + id pool = [[NSAutoreleasePool alloc] init]; -- (void)_initUI; -- (PCEditorView *)_createEditorViewWithFrame:(NSRect)fr; + // Your code here... + + // The end... + [pool release]; + + return 0; +} -@end diff --git a/PCAppController.h b/PCAppController.h index c5930de..8aee85b 100644 --- a/PCAppController.h +++ b/PCAppController.h @@ -3,7 +3,8 @@ Copyright (C) 2001 Free Software Foundation - Author: Philippe C.D. Robert + Authors: Philippe C.D. Robert + Serg Stoyan This file is part of GNUstep. @@ -20,8 +21,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCAPPCONTROLLER_H @@ -29,34 +28,25 @@ #include -#include "PCPrefController.h" -#include "PCFindController.h" -#include "PCInfoController.h" -#include "PCLogController.h" - -@class PCBundleLoader; @class PCServer; @class PCProjectManager; @class PCFileManager; @class PCMenuController; +@class PCInfoController; +@class PCPrefController; +@class PCLogController; @interface PCAppController : NSObject { - PCPrefController *prefController; - PCFindController *finder; - PCInfoController *infoController; - PCLogController *logger; PCProjectManager *projectManager; - PCFileManager *fileManager; - PCMenuController *menuController; + IBOutlet id menuController; - PCBundleLoader *bundleLoader; + PCInfoController *infoController; + PCPrefController *prefController; + PCLogController *logController; + PCServer *doServer; NSConnection *doConnection; - - id delegate; - - NSMutableDictionary *projectTypes; } //============================================================================ @@ -68,34 +58,20 @@ - (id)init; - (void)dealloc; -- (BOOL)respondsToSelector:(SEL)aSelector; -- (void)forwardInvocation:(NSInvocation *)anInvocation; -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector; - //============================================================================ -//==== Delegate +//==== Accessory methods //============================================================================ -- (id)delegate; -- (void)setDelegate:(id)aDelegate; - -//============================================================================ -//==== Bundle Management -//============================================================================ - -- (PCBundleLoader *)bundleLoader; - (PCProjectManager *)projectManager; +- (PCMenuController *)menuController; - (PCInfoController *)infoController; - (PCPrefController *)prefController; -- (PCMenuController *)menuController; -- (PCServer *)doServer; -- (PCFindController *)finder; -- (PCLogController *)logger; +- (PCLogController *)logController; -- (NSDictionary *)projectTypes; +- (PCServer *)doServer; //============================================================================ -//==== Misc... +//==== Application //============================================================================ - (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName; @@ -106,19 +82,6 @@ - (BOOL)applicationShouldTerminate:(id)sender; - (void)applicationWillTerminate:(NSNotification *)notification; -//============================================================================ -//==== Delegate stuff -//============================================================================ - -- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle; - -@end - -@interface PCAppController (ProjectRegistration) - -- (BOOL)registerProjectCreator:(NSString *)className forKey:(NSString *)aKey; -// Returns YES upon successfully registering a new projecttype. - @end #endif diff --git a/PCAppController.m b/PCAppController.m index 305215a..4d2796d 100644 --- a/PCAppController.m +++ b/PCAppController.m @@ -3,7 +3,8 @@ Copyright (C) 2001 Free Software Foundation - Author: Philippe C.D. Robert + Authors: Philippe C.D. Robert + Serg Stoyan This file is part of GNUstep. @@ -20,18 +21,16 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCAppController.h" #include "PCMenuController.h" +#include "PCInfoController.h" +#include "PCPrefController.h" +#include "PCLogController.h" #include -#define REL_LIB_PC @"Library/ApplicationSupport/ProjectCenter" -#define ABS_LIB_PC @"/usr/GNUstep/System/Library/ApplicationSupport/ProjectCenter" - @implementation PCAppController //============================================================================ @@ -40,66 +39,19 @@ + (void)initialize { - NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; - NSDictionary *env = [[NSProcessInfo processInfo] environment]; - NSString *prefix = [env objectForKey:@"GNUSTEP_SYSTEM_ROOT"]; - NSString *_bundlePath; - - if (prefix && ![prefix isEqualToString:@""]) - { - _bundlePath = [prefix stringByAppendingPathComponent:REL_LIB_PC]; - } - else - { - _bundlePath = [NSString stringWithString:ABS_LIB_PC]; - } - - [defaults setObject:_bundlePath forKey:BundlePaths]; - - [defaults setObject:@"/usr/bin/vim" forKey:Editor]; - [defaults setObject:@"/usr/bin/gdb" forKey:PDebugger]; - [defaults setObject:@"/usr/bin/gcc" forKey:Compiler]; - - [defaults setObject:@"YES" forKey:ExternalEditor]; - [defaults setObject:@"YES" forKey:ExternalDebugger]; - - [defaults setObject:[NSString stringWithFormat:@"%@/ProjectCenterBuildDir",NSTemporaryDirectory()] forKey:RootBuildDirectory]; - - [defaults setObject:@"YES" forKey:SaveOnQuit]; - [defaults setObject:@"YES" forKey:PromptOnClean]; - [defaults setObject:@"YES" forKey:PromptOnQuit]; - [defaults setObject:@"YES" forKey:AutoSave]; - [defaults setObject:@"YES" forKey:KeepBackup]; - [defaults setObject:@"120" forKey:AutoSavePeriod]; - [defaults setObject:@"NO" forKey:DeleteCacheWhenQuitting]; - - [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; - [[NSUserDefaults standardUserDefaults] synchronize]; } - (id)init { if ((self = [super init])) { - bundleLoader = [[PCBundleLoader alloc] init]; - [bundleLoader setDelegate:self]; - - projectTypes = [[NSMutableDictionary alloc] init]; - - prefController = [[PCPrefController alloc] init]; - finder = [[PCFindController alloc] init]; infoController = [[PCInfoController alloc] init]; - logger = [[PCLogController alloc] init]; + prefController = [PCPrefController sharedPCPreferences]; + logController = [PCLogController sharedLogController]; + projectManager = [[PCProjectManager alloc] init]; - fileManager = [PCFileManager fileManager]; - menuController = [[PCMenuController alloc] init]; - [projectManager setDelegate:self]; - [fileManager setDelegate:projectManager]; - - [menuController setAppController:self]; - [menuController setFileManager:fileManager]; - [menuController setProjectManager:projectManager]; + [projectManager setPrefController:prefController]; } return self; @@ -107,94 +59,29 @@ - (void)dealloc { - if (doConnection) - { - [doConnection invalidate]; - RELEASE(doConnection); - } - - RELEASE(prefController); - RELEASE(finder); - RELEASE(infoController); - RELEASE(logger); - RELEASE(projectManager); - RELEASE(fileManager); - RELEASE(menuController); - - RELEASE(bundleLoader); - RELEASE(doServer); - RELEASE(projectTypes); - [super dealloc]; } -//============================================================================ -//==== Delegate -//============================================================================ - -- (id)delegate +- (void)awakeFromNib { - return delegate; -} - -- (void)setDelegate:(id)aDelegate -{ - delegate = aDelegate; -} - -- (BOOL)respondsToSelector:(SEL)aSelector -{ - if (![super respondsToSelector:aSelector]) - { - return [menuController respondsToSelector:aSelector]; - } - else - { - return YES; - } -} - -- (void)forwardInvocation:(NSInvocation *)anInvocation -{ - SEL aSelector = [anInvocation selector]; - - if ([menuController respondsToSelector: aSelector]) - { - [anInvocation invokeWithTarget: menuController]; - } - else - { - [super forwardInvocation: anInvocation]; - } -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector -{ - NSMethodSignature *sig; - - sig = [super methodSignatureForSelector:aSelector]; - if (sig == nil) - { - sig = [menuController methodSignatureForSelector:aSelector]; - } - - return sig; + [menuController setAppController:self]; + [menuController setProjectManager:projectManager]; } //============================================================================ -//==== Bundle Management +//==== Accessory methods //============================================================================ -- (PCBundleLoader *)bundleLoader -{ - return bundleLoader; -} - - (PCProjectManager *)projectManager { return projectManager; } +- (PCMenuController *)menuController +{ + return menuController; +} + - (PCInfoController *)infoController { return infoController; @@ -205,9 +92,9 @@ return prefController; } -- (PCMenuController *)menuController +- (PCLogController *)logController { - return menuController; + return logController; } - (PCServer *)doServer @@ -215,47 +102,43 @@ return doServer; } -- (PCFindController *)finder -{ - return finder; -} - -- (PCLogController *)logger -{ - return logger; -} - -- (NSDictionary *)projectTypes -{ - return projectTypes; -} - //============================================================================ //==== Misc... //============================================================================ - (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName { - if ([[fileName pathExtension] isEqualToString:@"pcproj"] == NO) - { - return NO; - } - [NSApp activateIgnoringOtherApps:YES]; - return [projectManager openProjectAt:fileName]; + + if ([[fileName pathExtension] isEqualToString:@"pcproj"] == YES + || [[fileName pathExtension] isEqualToString:@"project"] == YES) + { + [projectManager openProjectAt:fileName]; + } + else + { + [projectManager openFileWithEditor:fileName]; + } + + return YES; } - (void)applicationWillFinishLaunching:(NSNotification *)notification { - [bundleLoader loadBundles]; +// [bundleLoader loadBundles]; } - (void)applicationDidFinishLaunching:(NSNotification *)notification { - NSString *h = [[NSProcessInfo processInfo] hostName]; - NSString *connectionName = [NSString stringWithFormat:@"ProjectCenter:%@",h]; + NSString *connectionName = [NSString stringWithFormat:@"ProjectCenter"]; - [logger logMessage:@"Loading additional subsystems..." tag:INFORMATION]; + if ([[prefController objectForKey:DisplayLog] isEqualToString:@"YES"]) + { + [logController showPanel]; + } + + [logController + logMessage:@"Loading additional subsystems..." withTag:INFO sender:self]; doServer = [[PCServer alloc] init]; @@ -266,8 +149,10 @@ NS_HANDLER - NSRunAlertPanel(@"Warning!",@"Could not register the DO connection %@", - @"OK",nil,nil,nil,connectionName); + NSRunAlertPanel(@"Warning!", + @"Could not register the DO connection %@", + @"OK",nil,nil,nil, + connectionName); NS_ENDHANDLER [[NSNotificationCenter defaultCenter] addObserver:doServer @@ -277,89 +162,81 @@ [doConnection setDelegate:doServer]; - [[NSNotificationCenter defaultCenter] postNotificationName:PCAppDidInitNotification object:nil]; + [[NSNotificationCenter defaultCenter] + postNotificationName:PCAppDidInitNotification + object:nil]; } - (BOOL)applicationShouldTerminate:(id)sender { - NSString *poq = [[NSUserDefaults standardUserDefaults] objectForKey:PromptOnQuit]; - NSString *soq = [[NSUserDefaults standardUserDefaults] objectForKey:SaveOnQuit]; + NSString *poq; + NSString *soq; + BOOL quit; - if( [poq isEqualToString:@"YES"] ) + poq = [[NSUserDefaults standardUserDefaults] objectForKey:PromptOnQuit]; + soq = [[NSUserDefaults standardUserDefaults] objectForKey:SaveOnQuit]; + if ([poq isEqualToString:@"YES"]) { - if (NSRunAlertPanel(@"Quit!", - @"Do you really want to quit ProjectCenter?", - @"No", @"Yes", nil)) { - return NO; - } + if (NSRunAlertPanel(@"Quit!", + @"Do you really want to quit ProjectCenter?", + @"No", @"Yes", nil)) + { + return NO; + } } - if ( [soq isEqualToString:@"YES"] ) { - [projectManager saveAllProjects]; + // Save projects if preferences tells that + if ([soq isEqualToString:@"YES"]) + { + quit = [projectManager saveAllProjects]; } - [[NSNotificationCenter defaultCenter] postNotificationName:PCAppWillTerminateNotification object:nil]; + // Close all loaded projects + quit = [projectManager closeAllProjects]; - return YES; + if (quit == NO) + { + return NO; + } + + [[NSNotificationCenter defaultCenter] + postNotificationName:PCAppWillTerminateNotification + object:nil]; + + return YES; } - (void)applicationWillTerminate:(NSNotification *)notification { - if ([[[NSUserDefaults standardUserDefaults] stringForKey:DeleteCacheWhenQuitting] isEqualToString:@"YES"]) + NSLog (@"--- Application WILL terminate"); + if ([[[NSUserDefaults standardUserDefaults] + stringForKey:DeleteCacheWhenQuitting] isEqualToString:@"YES"]) { - [[NSFileManager defaultManager] removeFileAtPath:[projectManager rootBuildPath] handler:nil]; + [[NSFileManager defaultManager] + removeFileAtPath:[projectManager rootBuildPath] + handler:nil]; } - [[NSUserDefaults standardUserDefaults] synchronize]; -} + [[NSUserDefaults standardUserDefaults] synchronize]; -//============================================================================ -//==== Delegate stuff -//============================================================================ + //--- Cleanup + if (doConnection) + { + [doConnection invalidate]; + RELEASE(doConnection); + } -- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle -{ - Class principalClass; + RELEASE(infoController); + RELEASE(prefController); + RELEASE(logController); + RELEASE(menuController); + RELEASE(projectManager); - NSAssert(aBundle,@"No valid bundle!"); + RELEASE(doServer); - principalClass = [aBundle principalClass]; - if ([principalClass conformsToProtocol:@protocol(ProjectType)]) - { - NSString *name = [[principalClass sharedCreator] projectTypeName]; - - [logger logMessage:[NSString stringWithFormat:@"Project type %@ successfully loaded!",name] tag:INFORMATION]; - - if ([self registerProjectCreator:NSStringFromClass(principalClass) forKey:name]) - { - [menuController addProjectTypeNamed:name]; - [logger logMessage:[NSString stringWithFormat:@"Project type %@ successfully registered!",name] tag:INFORMATION]; - } - } - else if ([principalClass conformsToProtocol:@protocol(FileCreator)]) - { - [fileManager registerCreatorsWithObjectsAndKeys:[[principalClass sharedCreator] creatorDictionary]]; - - // In objc.h there is already th like (char *)name... - // [logger logMessage:[NSString stringWithFormat:@"FileCreator %@ successfully loaded!",(NSString *)[[principalClass sharedCreator] name]] tag:INFORMATION]; - } + NSLog (@"--- Application WILL terminate.END"); } @end -@implementation PCAppController (ProjectRegistration) - -- (BOOL)registerProjectCreator:(NSString *)className forKey:(NSString *)aKey -{ - if ([projectTypes objectForKey:aKey]) - { - return NO; - } - - [projectTypes setObject:className forKey:aKey]; - - return YES; -} - -@end diff --git a/PCAppProj/ChangeLog b/PCAppProj/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCAppProj/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCAppProj/ChangeLog.old b/PCAppProj/ChangeLog.old deleted file mode 100644 index f38d7c8..0000000 --- a/PCAppProj/ChangeLog.old +++ /dev/null @@ -1,246 +0,0 @@ -2002-04-21 Serg Stoyan - - * *.h, *.m: Replace #import with #include and add #ifndefs. - - * GNUmakefile: Set BUNDLE_INSTALL_DIR to - $(GNUSTEP_SYSTEM_ROOT)/Library/ProjectCenter - - * h.template and m.template removed. - -2002-06-01 15:53 probert - - * GNUmakefile, PCAppProj.pcproj, PCAppProject.m: Fixed a bug in the - app makefile creation - -2002-04-26 05:12 fedor - - * ChangeLog, PCAppProject.m: removed bunches of duplicate calls, - retains and releases. - -2002-03-25 20:37 probert - - * ChangeLog: ChangeLog updates - -2002-03-01 14:30 probert - - * PCAppProject.m: Removed old include statements. - -2002-03-01 14:28 probert - - * GNUmakefile, PCAppMakefileFactory.h, PCAppMakefileFactory.m, - PCAppProj.pcproj, PCAppProject.m: The project now uses the makefile - factory to create makefiles. - -2002-01-07 16:37 probert - - * PC.proj: Somehow $(GNUSTEP_LOCAL_ROOT) is enough for the install - path to be correct. - -2002-01-07 16:05 probert - - * ChangeLog: Updated all ChangeLog files (using cvs2cl.pl) - -2002-01-07 16:01 probert - - * GNUmakefile, PCAppProj.pcproj: Added libProjectCenter to the - bundle's library link settings. - -2002-01-07 10:37 probert - - * PC.project, PCAppProj.m, PCAppProj.pcproj: ProjectCenter now - stores the project files under PROJECTNAME.pcproj to avoid name - clashes. - -2002-01-02 18:51 probert - - * PC.proj, PC.project: Changed the build tool entry to - /usr/bin/make in all project files and templates. - -2002-01-02 17:05 probert - - * GNUmakefile, PC.proj, PC.project, PCAppMakefileFactory.m, - PCAppProject.m: The inspector now handles the installation path and - other settings. Furthermore it does not save changes automatically - but marks the project as being edited. Upon 'save' the project - file and GNUmakefile are being saved, not before! In addition the - various PC* bundles are now maintained by ProjectCenter itself. - The installation path for ProjectCenter.app is corrected to the - SYSTEM ROOT as well. - -2002-01-02 13:13 probert - - * AppController.h, AppController.m, GNUmakefile, PC.proj: All - bundles and libProjectCenter are now installed under - GNUSTEP_SYSTEM_ROOT. Also the PC.proj templates have now a correct - install path default value. - -2002-01-01 18:27 probert - - * PC.proj, PCAppProject.h, PCAppProject.m: ProjectCenter now - validates project dictionaries and updates them if requested. I - also added new keys tp the PC.project files in order to be able to - generate valid *.spec.in files needed when building RPMs. - -2001-12-29 16:37 probert - - * ChangeLog: Removed the toplevel ChangeLog, updated the ChangeLogs - in the subdirectories and raised the version number to 0.2.6. - -2001-12-29 15:06 probert - - * PCAppProj.m, PCAppProject.m: Cleaned up the writeMakefile method - -2001-08-03 16:23 probert - - * AppController.h, AppController.m, PCAppMakefileFactory.h, - PCAppMakefileFactory.m, PCAppProj.h, PCAppProj.m, PCAppProject.h, - PCAppProject.m: New version - now copyrighted by the FSF - -2001-08-01 14:35 probert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, - PCAppMakefileFactory.m: New copyright information and minor - template additions - -2001-07-01 21:01 probert - - * GNUmakefile, GNUmakefile.preamble: Applied patch from Adam Fedor - -2001-01-20 11:48 robert - - * PCAppMakefileFactory.m: Fixed the ADDITIONAL_GUI_LIBS line - this - time it should be 100% OK - -2001-01-19 11:33 robert - - * PCAppMakefileFactory.m: using LDFLAGS instead of - ADDITIONAL_GUI_LIBS solves the linker problem - -2001-01-14 18:54 robert - - * ChangeLog: Updated the ChangeLogs - -2001-01-14 17:08 robert - - * PCAppProject.m: Added the supporting files category - -2001-01-14 16:07 robert - - * PCAppProject.h, PCAppProject.m: teh application class can now be - set - althoug still ignored by the makefile - -2001-01-10 15:18 robert - - * Makefile, Makefile.postamble, Makefile.preamble, PB.project, - PCAppMakefileFactory.m: no PB support anymore, inclusion of - PACKAGE_NAME - -2001-01-10 14:10 robert - - * main.m: applied the patch of nicola - -2001-01-10 13:56 robert - - * AppController.m: default is YES in applicationShouldTerminate: - -2001-01-07 15:43 robert - - * PCAppProject.m: some more minor fix and cleanup work - -2001-01-07 12:36 robert - - * PCAppProject.m: somehow the makefile was not being written...?! - -2001-01-06 17:44 robert - - * PCAppProject.h, PCAppProject.m: AppIcons are now set/cleaned - correctly - -2001-01-03 07:38 robert - - * AppController.h, AppController.m: fixed a typo - -2000-11-10 19:27 robert - - * PCAppProject.h, PCAppProject.m: some daily work... - -2000-11-10 15:07 robert - - * ChangeLog: changelog for 0.2 - -2000-11-04 13:41 robert - - * PCAppProj.m, PCAppProject.h, PCAppProject.m: we do not use - gmodels, and the project is executable - -2000-10-20 16:49 robert - - * PCAppMakefileFactory.m, PCAppProj.m, PCAppProject.h, - PCAppProject.m: some more UI - -2000-10-15 20:29 robert - - * PCAppProject.m: some code improvements regarding the inspector - -2000-10-15 14:36 robert - - * AppController.h, AppController.m, main.m: fixed the info panel - issue - -2000-10-15 14:25 robert - - * PCAppProj.m: Added the plist file to "Other Resources" - -2000-10-11 09:35 robert - - * AppController.h, AppController.m: removed old method - -2000-10-11 09:33 robert - - * AppController.h, AppController.m, PCAppProj.m, main.m: new info - panel approach - uch simpler, thanks Nicola! - -2000-09-20 17:51 robert - - * ChangeLog: Added a changelog - -2000-09-20 10:50 robert - - * AppController.h, AppController.m, PCAppMakefileFactory.m, - PCAppProj.m, main.m: enhanced the created app to support GC and an - info panel and more ... - -2000-09-17 14:14 robert - - * PCAppProject.h, PCAppProject.m: daily work - -2000-09-14 10:54 robert - - * AppController.h, AppController.m, AppProject.gmodel, GNUmakefile, - Main.gmodel, PC.proj, PCAppMakefileFactory.m, main.m: apps now - don't use gmodels anymore - -2000-09-03 22:10 robert - - * GNUmakefile.preamble: renamed libPC into libProjectCenter - -2000-08-27 21:11 robert - - * Makefile.preamble, PB.project, PCAppProj.h, Makefile, h.template, - m.template, Info.table, PCAppProj.m, Makefile.postamble, - PCAppProject.h, PCAppProject.m, GNUmakefile.postamble, - GNUmakefile.preamble, PC.proj, main.m, PCAppMakefileFactory.h, - PCAppMakefileFactory.m, AppProject.gmodel, GNUmakefile, - AppController.h, AppController.m, Info-project.plist, Main.gmodel: - Initial revision - -2000-08-27 21:11 robert - - * Makefile.preamble, PB.project, PCAppProj.h, Makefile, h.template, - m.template, Info.table, PCAppProj.m, Makefile.postamble, - PCAppProject.h, PCAppProject.m, GNUmakefile.postamble, - GNUmakefile.preamble, PC.proj, main.m, PCAppMakefileFactory.h, - PCAppMakefileFactory.m, AppProject.gmodel, GNUmakefile, - AppController.h, AppController.m, Info-project.plist, Main.gmodel: - Initial import - diff --git a/PCAppProj/English.lproj/InfoPlist.strings b/PCAppProj/English.lproj/InfoPlist.strings deleted file mode 100644 index e6d3395a4950b6d74e3611a50b046cd6dcfc6889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmb`D$qE875Jc|^rD2MlkQ4)Rb8&i zDkYu(U{zk7-&aks}0c*r<_e*Q|=l0A%3Sl*%jzhh)U5j#;U5OiVmR1 z;3n$O-y<58*l~41lrC1|mHuZ^8kSX*`1oXb&(LL^OW=HxSb$ZI(`dkIgR*E3yo<)u(?46yJa~8HsDZ~` Xi0Q%FMU|^z=y=q$yZ2F*A9&mVV_IRm diff --git a/PCAppProj/GNUmakefile b/PCAppProj/GNUmakefile deleted file mode 100644 index a728faf..0000000 --- a/PCAppProj/GNUmakefile +++ /dev/null @@ -1,69 +0,0 @@ -# -# GNUmakefile - Generated by ProjectCenter -# Written by Philippe C.D. Robert -# -# NOTE: Do NOT change this file -- ProjectCenter maintains it! -# -# Put all of your customisations in GNUmakefile.preamble and -# GNUmakefile.postamble -# - -include $(GNUSTEP_MAKEFILES)/common.make - -# -# Subprojects -# - - - -# -# Bundle -# - -PACKAGE_NAME = PCAppProj -BUNDLE_NAME = PCAppProj -PCAppProj_PRINCIPAL_CLASS = PCAppProj - - -# -# Additional libraries -# - -PCAppProj_LIBRARIES_DEPEND_UPON += -lProjectCenter - -# -# Resource files -# - -PCAppProj_RESOURCE_FILES= \ -Templates/AppController.h \ -Templates/AppController.m \ -Templates/main.m \ -Templates/PC.proj \ -Templates/GNUmakefile.preamble \ -Templates/GNUmakefile.postamble - -# -# Header files -# - -PCAppProj_HEADERS= \ -PCAppProj.h \ -PCAppProject.h - -# -# Class files -# - -PCAppProj_OBJC_FILES= \ -PCAppProj.m \ -PCAppProject.m - -# -# C files -# - -PCAppProj_C_FILES= - -include ../GNUmakefile.bundles -include $(GNUSTEP_MAKEFILES)/bundle.make diff --git a/PCAppProj/Info.table b/PCAppProj/Info.table deleted file mode 100644 index e0861e8..0000000 --- a/PCAppProj/Info.table +++ /dev/null @@ -1,29 +0,0 @@ -{ - AdditionalAttributes = { - PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; - }; - Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); - AttributesInspector = ApplicationInspector; - DefaultExtension = ""; - Default_Localizable_Keys = (INTERFACES); - GeneratedFiles = (Makefile, iconHeader); - INSTALLFLAGS = "-c -s -m 755"; - InfoName = ""; - Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); - MAKEFILE = app.make; - MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; - Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); - PBProjectTypeSubClass = "PBApplicationProjectType"; - ProvidesIcons = Yes; - Public_Keys = (H_FILES); - Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); - SOURCEMODE = 444; - Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); - Subproj_Keys = (SUBPROJECTS); - Targets = (app, debug, profile, install); - ExecutableResults = ( - "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" - ); -} diff --git a/PCAppProj/PCAppProj.m b/PCAppProj/PCAppProj.m deleted file mode 100644 index 2d73191..0000000 --- a/PCAppProj/PCAppProj.m +++ /dev/null @@ -1,194 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -/* - Description: - - PCAppProj creates new project of the type Application! - -*/ - -#include "PCAppProj.h" -#include "PCAppProject.h" - -@implementation PCAppProj - -static NSString *_projTypeName = @"Application"; -static PCAppProj *_creator = nil; - -//---------------------------------------------------------------------------- -// ProjectType -//---------------------------------------------------------------------------- - -+ (id)sharedCreator -{ - if (!_creator) { - _creator = [[[self class] alloc] init]; - } - return _creator; -} - -- (Class)projectClass -{ - return [PCAppProject class]; -} - -- (NSString *)projectTypeName -{ - return _projTypeName; -} - -- (NSDictionary *)typeTable -{ - NSString *_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" ofType:@"table"]; - - return [NSDictionary dictionaryWithContentsOfFile:_path]; -} - -- (PCProject *) createProjectAt: (NSString *)path -{ - PCAppProject *project = nil; - NSFileManager *fm = [NSFileManager defaultManager]; - - NSAssert(path,@"No valid project path provided!"); - - if ([fm createDirectoryAtPath: path attributes: nil]) - { - NSString *_file; - NSString *_resourcePath; - NSMutableDictionary *dict; - NSDictionary *infoDict; - NSString *plistFileName; - NSString *projectFile; - NSBundle *projBundle = [NSBundle bundleForClass:[self class]]; - - project = [[[PCAppProject alloc] init] autorelease]; - - _file = [projBundle pathForResource:@"PC" ofType:@"proj"]; - dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; - - // Customise the project - [dict setObject:[path lastPathComponent] forKey:PCProjectName]; - [dict setObject:[[project principalClass] description] forKey:PCProjType]; - - // Create the AppNameInfo.plist - infoDict = [NSDictionary dictionaryWithObjectsAndKeys: - @"Automatically generated!", @"NOTE", - [path lastPathComponent], @"ApplicationName", - @"", @"ApplicationDescription", - @"", @"ApplicationIcon", - @"0.1", @"ApplicationRelease", - @"0.1", @"FullVersionID", - @"", @"Authors", - @"", @"URL", - @"Copyright (C) 200x by ...", @"Copyright", - @"Released under...", @"CopyrightDescription", - nil]; - plistFileName = [NSString stringWithFormat:@"%@Info.plist", - [path lastPathComponent]]; - [infoDict writeToFile:[path stringByAppendingPathComponent:plistFileName] - atomically:YES]; - - [dict setObject:[NSArray arrayWithObjects:plistFileName,nil] - forKey:PCOtherResources]; - - // Save the project to disc - //projectFile = [NSString stringWithString:@"PC.project"]; - projectFile = [NSString stringWithString:[path lastPathComponent]]; - projectFile = [projectFile stringByAppendingPathExtension:@"pcproj"]; - - [dict writeToFile:[path stringByAppendingPathComponent:projectFile] - atomically:YES]; - - /* - * Copy the project files to the provided path - */ - _file = [projBundle pathForResource:@"GNUmakefile" ofType:@"postamble"]; - [fm copyPath:_file - toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] - handler:nil]; - - _file = [projBundle pathForResource:@"GNUmakefile" ofType:@"preamble"]; - [fm copyPath:_file - toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] - handler:nil]; - - _file = [projBundle pathForResource:@"main" ofType:@"m"]; - [fm copyPath:_file - toPath:[path stringByAppendingPathComponent:@"main.m"] - handler:nil]; - - _file = [projBundle pathForResource:@"AppController" ofType:@"m"]; - [fm copyPath:_file - toPath:[path stringByAppendingPathComponent:@"AppController.m"] - handler:nil]; - - _file = [projBundle pathForResource:@"AppController" ofType:@"h"]; - [fm copyPath:_file - toPath:[path stringByAppendingPathComponent:@"AppController.h"] - handler:nil]; - - // Resources - _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; - [fm createDirectoryAtPath:_resourcePath - attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] - attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] - attributes:nil]; - - // The path cannot be in the PC.project file! - [project setProjectPath:path]; - - // Set the new dictionary - this causes the GNUmakefile to be written - // to disc - if(![project assignProjectDict:dict]) - { - NSRunAlertPanel(@"Attention!", - @"Could not load %@!", - @"OK", nil, nil, path); - return nil; - } - } - return project; -} - -- (PCProject *)openProjectAt:(NSString *)path -{ - NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; - id obj; - - NSLog(@"<%@ %x>: opening project at %@",[self class],self,path); - - obj = [dict objectForKey:PCProjectBuilderClass]; - if ([obj isEqualToString:@"PCAppProj"]) - { - return [[[PCAppProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; - } - return nil; -} - -@end diff --git a/PCAppProj/PCAppProj.pbproj/project.pbxproj b/PCAppProj/PCAppProj.pbproj/project.pbxproj deleted file mode 100644 index f9bfd58..0000000 --- a/PCAppProj/PCAppProj.pbproj/project.pbxproj +++ /dev/null @@ -1,427 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA410018CDE011CA2923 = { - isa = PBXBundleReference; - path = PCAppProj.bundle; - refType = 3; - }; - 014CEA420018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA430018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//080 -//081 -//082 -//083 -//084 - 089C1669FE841209C02AAC07 = { - buildStyles = ( - 014CEA420018CDE011CA2923, - 014CEA430018CDE011CA2923, - ); - isa = PBXProject; - mainGroup = 089C166AFE841209C02AAC07; - projectDirPath = ""; - targets = ( - 089C1673FE841209C02AAC07, - ); - }; - 089C166AFE841209C02AAC07 = { - children = ( - 08FB77AFFE84173DC02AAC07, - 089C167CFE841241C02AAC07, - 089C1671FE841209C02AAC07, - 19C28FB8FE9D52D311CA2CBB, - ); - isa = PBXGroup; - name = PCAppProj; - refType = 4; - }; - 089C1671FE841209C02AAC07 = { - children = ( - 1058C7ACFEA557BF11CA2CBB, - 1058C7AEFEA557BF11CA2CBB, - ); - isa = PBXGroup; - name = "Frameworks and Libraries"; - refType = 4; - }; - 089C1672FE841209C02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 089C1673FE841209C02AAC07 = { - buildPhases = ( - 089C1674FE841209C02AAC07, - 089C1675FE841209C02AAC07, - 089C1676FE841209C02AAC07, - 089C1677FE841209C02AAC07, - 089C1679FE841209C02AAC07, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/philippe/Library/Frameworks; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = PCAppProj; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = bundle; - }; - dependencies = ( - ); - isa = PBXBundleTarget; - name = PCAppProj; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = PCAppProj; - productReference = 014CEA410018CDE011CA2923; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - PCAppProj - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - PCAppProj - - -"; - shouldUseHeadermap = 1; - }; - 089C1674FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97480393998601000102, - F56C974A0393998601000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1675FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1680FE841241C02AAC07, - F56C9757039399A701000102, - F56C977C03939AA401000102, - F56C977D03939AA501000102, - F56C977F03939B3F01000102, - F56C978003939B4501000102, - F56C978103939B4C01000102, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1676FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97490393998601000102, - F56C974B0393998601000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1677FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7AFFEA557BF11CA2CBB, - F56C9779039399B601000102, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1679FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C167CFE841241C02AAC07 = { - children = ( - 089C167DFE841241C02AAC07, - F56C974C039399A701000102, - F56C974D039399A701000102, - F56C974E039399A701000102, - F56C974F039399A701000102, - F56C9750039399A701000102, - F56C9751039399A701000102, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C167DFE841241C02AAC07 = { - children = ( - 089C167EFE841241C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C167EFE841241C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C167FFE841241C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1680FE841241C02AAC07 = { - fileRef = 089C167DFE841241C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AFFE84173DC02AAC07 = { - children = ( - F56C97440393998601000102, - F56C97450393998601000102, - F56C97460393998601000102, - F56C97470393998601000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7ACFEA557BF11CA2CBB = { - children = ( - 1058C7ADFEA557BF11CA2CBB, - F56C9758039399B601000102, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7ADFEA557BF11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7AEFEA557BF11CA2CBB = { - children = ( - 089C1672FE841209C02AAC07, - 089C167FFE841241C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7AFFEA557BF11CA2CBB = { - fileRef = 1058C7ADFEA557BF11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//190 -//191 -//192 -//193 -//194 - 19C28FB8FE9D52D311CA2CBB = { - children = ( - 014CEA410018CDE011CA2923, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//F50 -//F51 -//F52 -//F53 -//F54 - F56C97440393998601000102 = { - isa = PBXFileReference; - path = PCAppProj.h; - refType = 4; - }; - F56C97450393998601000102 = { - isa = PBXFileReference; - path = PCAppProj.m; - refType = 4; - }; - F56C97460393998601000102 = { - isa = PBXFileReference; - path = PCAppProject.h; - refType = 4; - }; - F56C97470393998601000102 = { - isa = PBXFileReference; - path = PCAppProject.m; - refType = 4; - }; - F56C97480393998601000102 = { - fileRef = F56C97440393998601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97490393998601000102 = { - fileRef = F56C97450393998601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C974A0393998601000102 = { - fileRef = F56C97460393998601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C974B0393998601000102 = { - fileRef = F56C97470393998601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C974C039399A701000102 = { - isa = PBXFileReference; - path = AppController.h; - refType = 4; - }; - F56C974D039399A701000102 = { - isa = PBXFileReference; - path = AppController.m; - refType = 4; - }; - F56C974E039399A701000102 = { - isa = PBXFileReference; - path = h.template; - refType = 4; - }; - F56C974F039399A701000102 = { - isa = PBXFileReference; - path = m.template; - refType = 4; - }; - F56C9750039399A701000102 = { - isa = PBXFileReference; - path = main.m; - refType = 4; - }; - F56C9751039399A701000102 = { - isa = PBXFileReference; - path = PC.proj; - refType = 4; - }; - F56C9757039399A701000102 = { - fileRef = F56C9751039399A701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C9758039399B601000102 = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - F56C9779039399B601000102 = { - fileRef = F56C9758039399B601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C977C03939AA401000102 = { - fileRef = F56C974E039399A701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C977D03939AA501000102 = { - fileRef = F56C974F039399A701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C977F03939B3F01000102 = { - fileRef = F56C974C039399A701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C978003939B4501000102 = { - fileRef = F56C974D039399A701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C978103939B4C01000102 = { - fileRef = F56C9750039399A701000102; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 089C1669FE841209C02AAC07; -} diff --git a/PCAppProj/PCAppProject.h b/PCAppProj/PCAppProject.h deleted file mode 100644 index b0f2168..0000000 --- a/PCAppProj/PCAppProject.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -/* - Description: - - This is the project type 'Application' for GNUstep. You never should create - it yourself but use PCAppProj for doing this. Otherwise needed files don't - get copied to the right place. - */ - -#ifndef _PCAPPPROJ_PCAPPPROJECT_H -#define _PCAPPPROJ_PCAPPPROJECT_H - -#include -#include - -@interface PCAppProject : PCProject -{ - NSTextField *appClassField; - NSTextField *appImageField; - NSButton *setAppIconButton; - NSButton *clearAppIconButton; - NSImageView *appIconView; - NSImage *icon; -} - -//---------------------------------------------------------------------------- -// Init and free -//---------------------------------------------------------------------------- - -- (id)init; -- (void)dealloc; - -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- - -- (Class)builderClass; - -- (BOOL)writeMakefile; - -- (NSArray *)sourceFileKeys; -- (NSArray *)resourceFileKeys; -- (NSArray *)otherKeys; -- (NSArray *)buildTargets; -- (NSString *)projectDescription; - -- (BOOL)isExecutable; - -- (void)updateValuesFromProjectDict; - -- (void)clearAppIcon:(id)sender; -- (void)setAppIcon:(id)sender; - -- (BOOL)setAppIconWithImageAtPath:(NSString *)path; - -- (void)setAppClass:(id)sender; - -@end - -#endif diff --git a/PCAppProj/PCAppProject.m b/PCAppProj/PCAppProject.m deleted file mode 100644 index 0a1e58c..0000000 --- a/PCAppProj/PCAppProject.m +++ /dev/null @@ -1,354 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCProject+UInterface.h" -#include "PCAppProject.h" -#include "PCAppProj.h" - -#include - -@interface PCAppProject (CreateUI) - -- (void)_initUI; - -@end - -@implementation PCAppProject (CreateUI) - -- (void)_initUI -{ - NSTextField *textField; - NSRect frame; - NSBox *_iconViewBox; - NSBox *_appIconBox; - - [super _initUI]; - - // Application Class - textField = [[NSTextField alloc] initWithFrame:NSMakeRect(4,248,104,21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue:@"Application Class:"]; - [projectProjectInspectorView addSubview:textField]; - RELEASE(textField); - - appClassField = [[NSTextField alloc] initWithFrame: - NSMakeRect(111,248,165,21)]; - [appClassField setAlignment: NSLeftTextAlignment]; - [appClassField setBordered: YES]; - [appClassField setEditable: YES]; - [appClassField setBezeled: YES]; - [appClassField setDrawsBackground: YES]; - [appClassField setStringValue:@""]; - [appClassField setTarget:self]; - [appClassField setAction:@selector(setAppClass:)]; - [projectProjectInspectorView addSubview:appClassField]; - RELEASE(appClassField); - - // Application Icon - _appIconBox = [[NSBox alloc] init]; - [_appIconBox setFrame:NSMakeRect(6,154,270,84)]; - [_appIconBox setContentViewMargins:NSMakeSize(4.0, 6.0)]; - [_appIconBox setTitle:@"Application Icon"]; - [projectProjectInspectorView addSubview:_appIconBox]; - RELEASE(_appIconBox); - - appImageField = [[NSTextField alloc] initWithFrame:NSMakeRect(0,34,195,21)]; - [appImageField setAlignment: NSLeftTextAlignment]; - [appImageField setBordered: YES]; - [appImageField setEditable: YES]; - [appImageField setBezeled: YES]; - [appImageField setDrawsBackground: YES]; - [appImageField setStringValue:@""]; - [_appIconBox addSubview:appImageField]; - RELEASE(appImageField); - - setAppIconButton = [[NSButton alloc] initWithFrame:NSMakeRect(147,0,48,21)]; - [setAppIconButton setTitle:@"Set..."]; - [setAppIconButton setTarget:self]; - [setAppIconButton setAction:@selector(setAppIcon:)]; - [_appIconBox addSubview:setAppIconButton]; - RELEASE(setAppIconButton); - - clearAppIconButton = [[NSButton alloc] initWithFrame:NSMakeRect(95,0,48,21)]; - [clearAppIconButton setTitle:@"Clear"]; - [clearAppIconButton setTarget:self]; - [clearAppIconButton setAction:@selector(clearAppIcon:)]; - [_appIconBox addSubview:clearAppIconButton]; - RELEASE(clearAppIconButton); - - frame = NSMakeRect(200,0,56,56); - _iconViewBox = [[NSBox alloc] init]; - [_iconViewBox setFrame:frame]; - [_iconViewBox setTitlePosition:NSNoTitle]; - [_iconViewBox setBorderType:NSBezelBorder]; - [_appIconBox addSubview:_iconViewBox]; - RELEASE(_iconViewBox); - - appIconView = [[NSImageView alloc] initWithFrame:frame]; - [_iconViewBox addSubview:appIconView]; - RELEASE(appIconView); -} - -@end - -@implementation PCAppProject - -//---------------------------------------------------------------------------- -// Init and free -//---------------------------------------------------------------------------- - -- (id)init -{ - if ((self = [super init])) - { - rootObjects = [[NSArray arrayWithObjects: PCClasses, - PCHeaders, - PCOtherSources, - PCGModels, - PCImages, - PCOtherResources, - PCSubprojects, - PCDocuFiles, - PCSupportingFiles, - PCLibraries, - PCNonProject, - nil] retain]; - - rootKeys = [[NSArray arrayWithObjects: @"Classes", - @"Headers", - @"Other Sources", - @"Interfaces", - @"Images", - @"Other Resources", - @"Subprojects", - @"Documentation", -// @"Context Help", - @"Supporting Files", -// @"Frameworks", - @"Libraries", - @"Non Project Files", - nil] retain]; - - rootCategories = [[NSDictionary - dictionaryWithObjects:rootObjects forKeys:rootKeys] retain]; - - } - return self; -} - -- (void)dealloc -{ - [rootCategories release]; - [rootObjects release]; - [rootKeys release]; - - [super dealloc]; -} - -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- - -- (Class)builderClass -{ - return [PCAppProj class]; -} - -- (BOOL)writeMakefile -{ - NSData *mfd; - NSString *mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; - int i; - PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; - NSDictionary *dict = [self projectDict]; - - // Save the project file - [super writeMakefile]; - - // Create the new file - [mf createMakefileForProject:[self projectName]]; - - [mf appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"]; - - [mf appendSubprojects:[dict objectForKey:PCSubprojects]]; - - [mf appendApplication]; - [mf appendAppIcon:[dict objectForKey:PCAppIcon]]; - [mf appendGuiLibraries:[dict objectForKey:PCLibraries]]; - - [mf appendResources]; - for (i=0;i<[[self resourceFileKeys] count];i++) - { - NSString *k = [[self resourceFileKeys] objectAtIndex:i]; - [mf appendResourceItems:[dict objectForKey:k]]; - } - - [mf appendHeaders:[dict objectForKey:PCHeaders]]; - [mf appendClasses:[dict objectForKey:PCClasses]]; - [mf appendOtherSources:[dict objectForKey:PCOtherSources]]; - - [mf appendTailForApp]; - - // Write the new file to disc! - if ((mfd = [mf encodedMakefile])) - { - if ([mfd writeToFile:mfl atomically:YES]) - { - return YES; - } - } - - return NO; -} - -- (NSArray *)sourceFileKeys -{ - return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; -} - -- (NSArray *)resourceFileKeys -{ - return [NSArray arrayWithObjects:PCGModels,PCOtherResources,PCImages,nil]; -} - -- (NSArray *)otherKeys -{ - return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles, - PCNonProject,nil]; -} - -- (NSArray *)buildTargets -{ - return nil; -} - -- (NSString *)projectDescription -{ - return @"Project that handles GNUstep/ObjC based applications."; -} - -- (BOOL)isExecutable -{ - return YES; -} - -- (void)updateValuesFromProjectDict -{ - NSRect frame = {{0,0}, {48,48}}; - NSImage *image = nil; - NSString *path = nil; - NSString *_icon = nil; - - [super updateValuesFromProjectDict]; - - [appClassField setStringValue:[projectDict objectForKey:PCAppClass]]; - [appImageField setStringValue:[projectDict objectForKey:PCAppIcon]]; - - _icon = [projectDict objectForKey:PCAppIcon]; - if (_icon && ![_icon isEqualToString:@""]) - { - path = [projectPath stringByAppendingPathComponent:_icon]; - } - - if (path && (image = [[NSImage alloc] initWithContentsOfFile:path])) - { - frame.size = [image size]; - [appIconView setFrame:frame]; - [appIconView setImage:image]; - [appIconView display]; - RELEASE(image); - } -} - -- (void)clearAppIcon:(id)sender -{ - [projectDict setObject:@"" forKey:PCAppIcon]; - [appImageField setStringValue:@"No Icon!"]; - [appIconView setImage:nil]; - [appIconView display]; - - [projectWindow setDocumentEdited:YES]; -} - -- (void)setAppIcon:(id)sender -{ - int result; - NSArray *fileTypes = [NSImage imageFileTypes]; - NSOpenPanel *openPanel = [NSOpenPanel openPanel]; - - [openPanel setAllowsMultipleSelection:NO]; - result = [openPanel runModalForDirectory:NSHomeDirectory() - file:nil - types:fileTypes]; - - if (result == NSOKButton) { - NSArray *files = [openPanel filenames]; - NSString *imageFilePath = [files objectAtIndex:0]; - - if (![self setAppIconWithImageAtPath:imageFilePath]) { - NSRunAlertPanel(@"Error while opening file!", - @"Couldn't open %@", @"OK", nil, nil,imageFilePath); - } - } -} - -- (BOOL)setAppIconWithImageAtPath:(NSString *)path -{ - NSRect frame = {{0,0}, {64, 64}}; - NSImage *image; - - if (!(image = [[NSImage alloc] initWithContentsOfFile:path])) { - return NO; - } - - [self addFile:path forKey:PCImages copy:YES]; - [projectDict setObject:[path lastPathComponent] forKey:PCAppIcon]; - - [appImageField setStringValue:[path lastPathComponent]]; - - frame.size = [image size]; - [appIconView setFrame:frame]; - [appIconView setImage:image]; - [appIconView display]; - RELEASE(image); - - [projectWindow setDocumentEdited:YES]; - - return YES; -} - -- (void)setAppClass:(id)sender -{ - [projectDict setObject:[appClassField stringValue] forKey:PCAppClass]; - - [projectWindow setDocumentEdited:YES]; -} - -@end diff --git a/PCAppProj/Templates/AppController.h b/PCAppProj/Templates/AppController.h deleted file mode 100644 index 24a954c..0000000 --- a/PCAppProj/Templates/AppController.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * AppController.h created by phr on 2000-08-27 11:38:59 +0000 - * - * GNUstep Application Controller - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _PCAPPPROJ_APPCONTROLLER_H -#define _PCAPPPROJ_APPCONTROLLER_H - -#include - -@interface AppController : NSObject -{ -} - -+ (void)initialize; - -- (id)init; -- (void)dealloc; - -- (void)awakeFromNib; - -- (void)applicationDidFinishLaunching:(NSNotification *)notif; - -- (BOOL)applicationShouldTerminate:(id)sender; -- (void)applicationWillTerminate:(NSNotification *)notification; - -- (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName; - -- (void)showPrefPanel:(id)sender; -- (void)showInfoPanel:(id)sender; - -@end - -#endif diff --git a/PCAppProj/Templates/AppController.m b/PCAppProj/Templates/AppController.m deleted file mode 100644 index 9a4333e..0000000 --- a/PCAppProj/Templates/AppController.m +++ /dev/null @@ -1,75 +0,0 @@ -/* - * AppController.m created by phr on 2000-08-27 11:38:58 +0000 - * - * GNUstep Application Controller - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "AppController.h" - -@implementation AppController - -static NSDictionary *infoDict = nil; - -+ (void)initialize -{ - NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; - - /* - * Register your app's defaults here by adding objects to the - * dictionary, eg - * - * [defaults setObject:anObject forKey:keyForThatObject]; - * - */ - - [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; - [[NSUserDefaults standardUserDefaults] synchronize]; -} - -- (id)init -{ - if ((self = [super init])) { - } - return self; -} - -- (void)dealloc -{ - [super dealloc]; -} - -- (void)awakeFromNib -{ -} - -- (void)applicationDidFinishLaunching:(NSNotification *)notif -{ -} - -- (BOOL)applicationShouldTerminate:(id)sender -{ - return YES; -} - -- (void)applicationWillTerminate:(NSNotification *)notification -{ -} - -- (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName -{ -} - -- (void)showPrefPanel:(id)sender -{ -} - -- (void)showInfoPanel:(id)sender -{ - [[NSApplication sharedApplication] orderFrontStandardInfoPanel:sender]; -} - -@end diff --git a/PCAppProj/Templates/main.m b/PCAppProj/Templates/main.m deleted file mode 100644 index b09df4d..0000000 --- a/PCAppProj/Templates/main.m +++ /dev/null @@ -1,103 +0,0 @@ -/* $Id$ */ - -#include -#include "AppController.h" - -#define APP_NAME @"GNUstep" - -/* - * Create the application's menu - */ - -void createMenu(); - -/* - * Initialise and go! - */ - -int main(int argc, const char *argv[]) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - AppController *controller; - - [NSApplication sharedApplication]; - - createMenu(); - - controller = [[AppController alloc] init]; - [NSApp setDelegate:controller]; - - RELEASE(pool); - - return NSApplicationMain (argc, argv); -} - -void createMenu() -{ - NSMenu *menu; - NSMenu *info; - NSMenu *edit; - NSMenu *services; - NSMenu *windows; - - SEL action = @selector(method:); - - menu = [[NSMenu alloc] initWithTitle:APP_NAME]; - - [menu addItemWithTitle:@"Info" action:@selector(showInfoPanel:) - keyEquivalent:@""]; - [menu addItemWithTitle:@"Edit" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Windows" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Services" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Hide" action:@selector(hide:) keyEquivalent:@"h"]; - [menu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"]; - - info = AUTORELEASE([[NSMenu alloc] init]); - [menu setSubmenu:info forItem:[menu itemWithTitle:@"Info"]]; - [info addItemWithTitle:@"Info Panel..." - action:@selector(showInfoPanel:) keyEquivalent:@""]; - [info addItemWithTitle:@"Preferences" - action:@selector(showPrefPanel:) keyEquivalent:@""]; - [info addItemWithTitle:@"Help" action:action keyEquivalent:@"?"]; - - edit = AUTORELEASE([[NSMenu alloc] init]); - [edit addItemWithTitle:@"Cut" - action:@selector(cut:) - keyEquivalent:@"x"]; - [edit addItemWithTitle:@"Copy" - action:@selector(copy:) - keyEquivalent:@"c"]; - [edit addItemWithTitle:@"Paste" - action:@selector(paste:) - keyEquivalent:@"v"]; - [edit addItemWithTitle:@"Delete" - action:@selector(delete:) - keyEquivalent:@""]; - [edit addItemWithTitle:@"Select All" - action:@selector(selectAll:) - keyEquivalent:@"a"]; - [menu setSubmenu:edit forItem:[menu itemWithTitle:@"Edit"]]; - - windows = AUTORELEASE([[NSMenu alloc] init]); - [windows addItemWithTitle:@"Arrange" - action:@selector(arrangeInFront:) - keyEquivalent:@""]; - [windows addItemWithTitle:@"Miniaturize" - action:@selector(performMiniaturize:) - keyEquivalent:@"m"]; - [windows addItemWithTitle:@"Close" - action:@selector(performClose:) - keyEquivalent:@"w"]; - [menu setSubmenu:windows forItem:[menu itemWithTitle:@"Windows"]]; - - services = AUTORELEASE([[NSMenu alloc] init]); - [menu setSubmenu:services forItem:[menu itemWithTitle:@"Services"]]; - - [NSApp setMainMenu:menu]; - [NSApp setServicesMenu: services]; -} - - - - - diff --git a/PCBaseFileTypes/ChangeLog b/PCBaseFileTypes/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCBaseFileTypes/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCBaseFileTypes/ChangeLog.old b/PCBaseFileTypes/ChangeLog.old deleted file mode 100644 index 9bf0d17..0000000 --- a/PCBaseFileTypes/ChangeLog.old +++ /dev/null @@ -1,163 +0,0 @@ -2003-04-21 Serg Stoyan - - * GNUmakefile: Set BUNDLE_INSTALL_DIR to GNUSTEP_SYSTEM_ROOT. - - * .h, .m: Replace #import with #include and add #ifndefs. - - * tiffs removed. - -2003-01-25 Daniel Luederwald - - * GNUmakefile (PCBaseFileTypes_RESOURCE_FILES): New type gsmarkup. - * PCBaseFileType.m: Idem. - -2002-11-27 15:45 probert - - * Mac OS X port using Cocoa - -2002-11-04 Adam Fedor - - * PCBaseFileType.m (-createFileOfType:path:project:): Only add - file extension if it doesn't already have one - -2002-06-01 15:56 probert - - * GNUmakefile, PCBaseFileTypes.pcproj: Installation into - GNUSPTE_INSTALLATION_DIR - -2002-03-25 20:37 probert - - * ChangeLog: ChangeLog updates - -2002-02-17 21:10 probert - - * ChangeLog: Updated the ChangeLog files - -2002-02-16 21:43 probert - - * GNUmakefile, PCBaseFileType.m, PCBaseFileTypes.pcproj, - nsviewclass.template, nsviewheader.template: Added support for a - NSView subclass template. Also added a description to every file - template. - -2002-01-07 16:05 probert - - * ChangeLog: Updated all ChangeLog files (using cvs2cl.pl) - -2002-01-07 16:01 probert - - * GNUmakefile, PCBaseFileTypes.pcproj: Added libProjectCenter to - the bundle's library link settings. - -2002-01-07 10:37 probert - - * PC.project, PCBaseFileTypes.pcproj: ProjectCenter now stores the - project files under PROJECTNAME.pcproj to avoid name clashes. - -2002-01-02 18:51 probert - - * PC.project: Changed the build tool entry to /usr/bin/make in all - project files and templates. - -2002-01-02 17:05 probert - - * GNUmakefile, PC.project: The inspector now handles the - installation path and other settings. Furthermore it does not save - changes automatically but marks the project as being edited. Upon - 'save' the project file and GNUmakefile are being saved, not - before! In addition the various PC* bundles are now maintained by - ProjectCenter itself. The installation path for ProjectCenter.app - is corrected to the SYSTEM ROOT as well. - -2002-01-02 13:13 probert - - * GNUmakefile: All bundles and libProjectCenter are now installed - under GNUSTEP_SYSTEM_ROOT. Also the PC.proj templates have now a - correct install path default value. - -2001-12-29 16:37 probert - - * ChangeLog: Removed the toplevel ChangeLog, updated the ChangeLogs - in the subdirectories and raised the version number to 0.2.6. - -2001-12-28 14:46 probert - - * cfile.template, cheader.template, class.template, - header.template, protocol.template: Updated the header information - for all created file types - -2001-08-03 16:23 probert - - * PCBaseFileType.h, PCBaseFileType.m: New version - now copyrighted - by the FSF - -2001-08-01 18:27 probert - - * PCBaseFileType.m, cheader.template, header.template: Better - templates for headers - -2001-08-01 15:12 probert - - * PCBaseFileType.m, cheader.template, header.template: optimised - include behaviour - -2001-08-01 14:35 probert - - * GNUmakefile, GNUmakefile.preamble: New copyright information and - minor template additions - -2001-07-01 21:02 probert - - * GNUmakefile.preamble: Added makefile - -2001-07-01 21:01 probert - - * GNUmakefile: Applied patch from Adam Fedor - -2001-01-14 18:54 robert - - * ChangeLog: Updated the ChangeLogs - -2001-01-14 17:15 robert - - * Makefile, Makefile.postamble, Makefile.preamble, PB.project, - PCBaseFileType.m: removed old PB stuff and rearranged the file - types - -2000-11-10 15:08 robert - - * ChangeLog: changelog for 0.2 - -2000-10-29 13:00 robert - - * protocol.template: updated textfiles and new version coming - soon... - -2000-10-20 17:18 robert - - * GNUmakefile, PCBaseFileType.m, protocol.template: Support for - protocols in file creation - -2000-09-20 17:51 robert - - * ChangeLog: Added a changelog - -2000-09-13 12:45 robert - - * PCBaseFileType.m: removed the gmodels completely from - ProjectCenter.app - -2000-08-27 21:12 robert - - * Makefile, Makefile.postamble, Makefile.preamble, PB.project, - PCBaseFileType.h, PCBaseFileType.m, FileIcon_.m.tiff, - FileIcon_.h.tiff, FileIcon_.c.tiff, GNUmakefile, cfile.template, - cheader.template, class.template, header.template: Initial revision - -2000-08-27 21:12 robert - - * Makefile, Makefile.postamble, Makefile.preamble, PB.project, - PCBaseFileType.h, PCBaseFileType.m, FileIcon_.m.tiff, - FileIcon_.h.tiff, FileIcon_.c.tiff, GNUmakefile, cfile.template, - cheader.template, class.template, header.template: Initial import - diff --git a/PCBaseFileTypes/English.lproj/InfoPlist.strings b/PCBaseFileTypes/English.lproj/InfoPlist.strings deleted file mode 100644 index f32b82846f8aa8534db7703bd86ad0000e3cc08b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmb`ETMGeE6ouEbUvct;Xr;4eni4yLfkGlXZ9xOhd0YI=`Oe9Y_@VYh*RW3!D?`l$r>459I>4U7 zo2g5E4>YQ9lj^~!5(|mdQL&r>HGD86UyiBaXo+%w;tjja}6)_?bBRKStF zMfxp%&~Ko+e@@{4s#&_P;m~Ie*3SaJcDgCHlLkw4Sl~4paXPRp+k@}o{q&r%&E_5+ dx^mQH4_?IS -# -# NOTE: Do NOT change this file -- ProjectCenter maintains it! -# -# Put all of your customisations in GNUmakefile.preamble and -# GNUmakefile.postamble -# - -include $(GNUSTEP_MAKEFILES)/common.make - -# -# Subprojects -# - - - -# -# Bundle -# - -PACKAGE_NAME = PCBaseFileTypes -BUNDLE_NAME = PCBaseFileTypes -PCBaseFileTypes_PRINCIPAL_CLASS = PCBaseFileType - - -# -# Additional libraries -# - -PCBaseFileTypes_LIBRARIES_DEPEND_UPON += -lProjectCenter - -# -# Resource files -# - -PCBaseFileTypes_RESOURCE_FILES= \ -cfile.template \ -cheader.template \ -class.template \ -header.template \ -protocol.template \ -nsviewclass.template \ -gsmarkup.template \ -nsviewheader.template - -# -# Header files -# - -PCBaseFileTypes_HEADERS= \ -PCBaseFileType.h - -# -# Class files -# - -PCBaseFileTypes_OBJC_FILES= \ -PCBaseFileType.m - -# -# C files -# - -PCBaseFileTypes_C_FILES= - -include ../GNUmakefile.bundles -include $(GNUSTEP_MAKEFILES)/bundle.make diff --git a/PCBaseFileTypes/PCBaseFileType.m b/PCBaseFileTypes/PCBaseFileType.m deleted file mode 100644 index b6989c0..0000000 --- a/PCBaseFileTypes/PCBaseFileType.m +++ /dev/null @@ -1,368 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCBaseFileType.h" -#include - -#define ObjCNSViewClass @"Objective-C NSView Subclass" -#define ObjCClass @"Objective-C Class" -#define ObjCHeader @"Objective-C Header" -#define CFile @"C File" -#define CHeader @"C Header" -#define ProtocolFile @"Objective-C Protocol" -#define GSMarkupFile @"GSMarkup" - -@implementation PCBaseFileType - -static PCBaseFileType *_creator = nil; -static NSString *_name = @"BaseFileCreator"; -static NSDictionary *dict = nil; - -+ (id)sharedCreator -{ - if (!_creator) { - NSDictionary *nsviewClassDict; - NSDictionary *classDict; - NSDictionary *headerDict; - NSDictionary *ccDict; - NSDictionary *chDict; - NSDictionary *protocolDict; - NSDictionary *gsmarkupDict; - NSString *descr; - - _creator = [[[self class] alloc] init]; - - // Setting up the dictionary needed for registration! - descr = [NSString stringWithString:@"Special Objective-C class.\n\nThis is a subclass of NSView which includes AppKit.h."]; - nsviewClassDict = [NSDictionary dictionaryWithObjectsAndKeys: - _creator,@"Creator", - PCClasses,@"ProjectKey", - descr,@"TypeDescription", - nil]; - // Setting up the dictionary needed for registration! - descr = [NSString stringWithString:@"Generic Objective-C class.\n\nThis is a plain subclass of NSObject which includes only Foundation.h."]; - classDict = [NSDictionary dictionaryWithObjectsAndKeys: - _creator,@"Creator", - PCClasses,@"ProjectKey", - descr,@"TypeDescription", - nil]; - - descr = [NSString stringWithString:@"Generic Objective-C header.\n\nThis is a plain interface subclassing NSObject. The file includes Foundation.h"]; - headerDict =[NSDictionary dictionaryWithObjectsAndKeys: - _creator,@"Creator", - PCHeaders,@"ProjectKey", - descr,@"TypeDescription", - nil]; - - descr = [NSString stringWithString:@"Generic ANSI-C implementation file.\n\nThis file contains no Objective-C dependency in any form."]; - ccDict = [NSDictionary dictionaryWithObjectsAndKeys: - _creator,@"Creator", - PCOtherSources,@"ProjectKey", - descr,@"TypeDescription", - nil]; - - descr = [NSString stringWithString:@"Generic ANSI-C header.\n\nThis file contains no Objective-C dependency in any form."]; - chDict = [NSDictionary dictionaryWithObjectsAndKeys: - _creator,@"Creator", - PCHeaders,@"ProjectKey", - descr,@"TypeDescription", - nil]; - - descr = [NSString stringWithString:@"Generic Objective-C protocol.\n\nThis is common Objective-C protocol, comparable i.e. to a Java interface."]; - protocolDict = [NSDictionary dictionaryWithObjectsAndKeys: - _creator,@"Creator", - PCHeaders,@"ProjectKey", - descr,@"TypeDescription", - nil]; - -descr = [NSString stringWithString:@"Generic GSMarkup File.\n\nThis is the interface description of GNUstep Renaissance."]; - gsmarkupDict =[NSDictionary dictionaryWithObjectsAndKeys: - _creator,@"Creator", - PCGSMarkupFiles,@"ProjectKey", - descr,@"TypeDescription", - nil]; - - - dict = [[NSDictionary alloc] initWithObjectsAndKeys: - ccDict,CFile, - chDict,CHeader, - protocolDict,ProtocolFile, - headerDict,ObjCHeader, - classDict,ObjCClass, - nsviewClassDict,ObjCNSViewClass, - gsmarkupDict, GSMarkupFile, - nil]; - } - return _creator; -} - -- (NSString *)name -{ - return _name; -} - -- (NSDictionary *)creatorDictionary -{ - return dict; -} - -- (NSDictionary *) createFileOfType:(NSString *)type - path:(NSString *)path - project:(PCProject *)aProject -{ - NSFileManager *fm = [NSFileManager defaultManager]; - NSString *_file; - NSString *newFile = nil; - NSMutableDictionary *files; - NSBundle *bundle; - - // A class and possibly a header - files = [NSMutableDictionary dictionaryWithCapacity:2]; - - NSLog(@"<%@ %x>: create %@ at %@",[self class],self,type,path); - - bundle = [NSBundle bundleForClass:[self class]]; - newFile = [path copy]; - - /* - * Objective-C Class - */ - if ([type isEqualToString:ObjCClass]) - { - _file = [bundle pathForResource:@"class" ofType:@"template"]; - if ([[path pathExtension] isEqual: @"m"] == NO) - { - newFile = [path stringByAppendingPathExtension:@"m"]; - } - [fm copyPath:_file toPath:newFile handler:nil]; - [files setObject:ObjCClass forKey:newFile]; - - [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; - - // Should a header be created as well? - newFile = [path stringByAppendingPathExtension:@"h"]; - if (NSRunAlertPanel(@"Attention!", - @"Should %@ be created and inserted into the project?", - @"Yes",@"No",nil,[newFile lastPathComponent])) - { - _file = [bundle pathForResource:@"header" ofType:@"template"]; - [fm copyPath:_file toPath:newFile handler:nil]; - - [self replaceTagsInFileAtPath:newFile - withProject:aProject - type:ObjCHeader]; - [files setObject:ObjCHeader forKey:newFile]; - } - } - - /* - * Objective-C NSView Subclass - */ - else if ([type isEqualToString:ObjCNSViewClass]) - { - _file = [bundle pathForResource:@"nsviewclass" ofType:@"template"]; - if ([[path pathExtension] isEqual: @"m"] == NO) - { - newFile = [path stringByAppendingPathExtension:@"m"]; - } - [fm copyPath:_file toPath:newFile handler:nil]; - [files setObject:ObjCNSViewClass forKey:newFile]; - - [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; - - // Should a header be created as well? - newFile = [path stringByAppendingPathExtension:@"h"]; - if (NSRunAlertPanel(@"Attention!", - @"Should %@ be created and inserted into the project?", - @"Yes",@"No",nil,[newFile lastPathComponent])) - { - _file = [bundle pathForResource:@"nsviewheader" ofType:@"template"]; - [fm copyPath:_file toPath:newFile handler:nil]; - - [self replaceTagsInFileAtPath:newFile - withProject:aProject - type:ObjCHeader]; - [files setObject:ObjCHeader forKey:newFile]; - } - } - - /* - * C File - */ - else if ([type isEqualToString:CFile]) - { - _file = [bundle pathForResource:@"cfile" ofType:@"template"]; - if ([[path pathExtension] isEqual: @"c"] == NO) - { - newFile = [path stringByAppendingPathExtension:@"c"]; - } - [fm copyPath:_file toPath:newFile handler:nil]; - [files setObject:CFile forKey:newFile]; - - [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; - - // Should a header be created as well? - newFile = [path stringByAppendingPathExtension:@"h"]; - if (NSRunAlertPanel(@"Attention!", - @"Should %@ be created and inserted in the project as well?", - @"Yes",@"No",nil,[newFile lastPathComponent])) { - _file = [bundle pathForResource:@"cheader" ofType:@"template"]; - [fm copyPath:_file toPath:newFile handler:nil]; - - [self replaceTagsInFileAtPath:newFile - withProject:aProject - type:CHeader]; - [files setObject:CHeader forKey:newFile]; - } - } - - /* - * Objective-C Header - */ - else if ([type isEqualToString:ObjCHeader]) - { - _file = [bundle pathForResource:@"header" ofType:@"template"]; - if ([[path pathExtension] isEqual: @"h"] == NO) - { - newFile = [path stringByAppendingPathExtension:@"h"]; - } - [fm copyPath:_file toPath:newFile handler:nil]; - [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; - [files setObject:ObjCHeader forKey:newFile]; - } - - /* - * GSMarkup - */ - else if ([type isEqualToString:GSMarkupFile]) - { - _file = [bundle pathForResource:@"gsmarkup" ofType:@"template"]; - if ([[path pathExtension] isEqual: @"gsmarkup"] == NO) - { - newFile = [path stringByAppendingPathExtension:@"gsmarkup"]; - } - [fm copyPath:_file toPath:newFile handler:nil]; - [files setObject:GSMarkupFile forKey:newFile]; - } - - /* - * C Header - */ - else if ([type isEqualToString:CHeader]) - { - _file = [bundle pathForResource:@"cheader" ofType:@"template"]; - if ([[path pathExtension] isEqual: @"h"] == NO) - { - newFile = [path stringByAppendingPathExtension:@"h"]; - } - [fm copyPath:_file toPath:newFile handler:nil]; - [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; - [files setObject:CHeader forKey:newFile]; - } - - /* - * Objective-C Protocol - */ - else if ([type isEqualToString:ProtocolFile]) - { - _file = [bundle pathForResource:@"protocol" ofType:@"template"]; - if ([[path pathExtension] isEqual: @"h"] == NO) - { - newFile = [path stringByAppendingPathExtension:@"h"]; - } - [fm copyPath:_file toPath:newFile handler:nil]; - [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; - [files setObject:ProtocolFile forKey:newFile]; - } - - /* - * Notify the browser! - */ - [[NSNotificationCenter defaultCenter] - postNotificationName:@"ProjectDictDidChangeNotification" - object:self]; - - return files; -} - -- (void)replaceTagsInFileAtPath:(NSString *)newFile withProject:(PCProject *)aProject type:(NSString *)aType -{ - NSString *user = NSUserName(); - NSString *pname = [aProject projectName]; - NSString *date = [[NSCalendarDate calendarDate] description]; - NSString *aFile = [newFile lastPathComponent]; - - file = [[NSMutableString stringWithContentsOfFile:newFile] retain]; - - [file replaceCharactersInRange: - [file rangeOfString:@"$FILENAME$"] withString:aFile]; - - [file replaceCharactersInRange: - [file rangeOfString:@"$USERNAME$"] withString:user]; - - [file replaceCharactersInRange: - [file rangeOfString:@"$PROJECTNAME$"] withString:pname]; - - [file replaceCharactersInRange: - [file rangeOfString:@"$DATE$"] withString:date]; - - if ([aType isEqualToString:ObjCHeader] || [aType isEqualToString:CHeader]) - { - NSString *nm = [[aFile stringByDeletingPathExtension] uppercaseString]; - - [file replaceCharactersInRange: - [file rangeOfString:@"$UCFILENAMESANSEXTENSION$"] withString:nm]; - [file replaceCharactersInRange: - [file rangeOfString:@"$UCFILENAMESANSEXTENSION$"] withString:nm]; - [file replaceCharactersInRange: - [file rangeOfString:@"$UCFILENAMESANSEXTENSION$"] withString:nm]; - } - - if ([aType isEqualToString:ObjCClass] || - [aType isEqualToString:CFile] || - [aType isEqualToString:ObjCNSViewClass] || - [aType isEqualToString:ProtocolFile] || - [aType isEqualToString:ObjCHeader]) { - NSString *name = [aFile stringByDeletingPathExtension]; - - [file replaceCharactersInRange: - [file rangeOfString:@"$FILENAMESANSEXTENSION$"] withString:name]; - - if ([aType isEqualToString:ObjCClass] || - [aType isEqualToString:ObjCNSViewClass]) - { - [file replaceCharactersInRange: - [file rangeOfString:@"$FILENAMESANSEXTENSION$"] withString:name]; - } - } - - [file writeToFile:newFile atomically:YES]; - [file autorelease]; -} - -@end - - diff --git a/PCBaseFileTypes/PCBaseFileTypes.pbproj/project.pbxproj b/PCBaseFileTypes/PCBaseFileTypes.pbproj/project.pbxproj deleted file mode 100644 index f60de54..0000000 --- a/PCBaseFileTypes/PCBaseFileTypes.pbproj/project.pbxproj +++ /dev/null @@ -1,453 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA410018CDE011CA2923 = { - isa = PBXBundleReference; - path = PCBaseFileTypes.bundle; - refType = 3; - }; - 014CEA420018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA430018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//080 -//081 -//082 -//083 -//084 - 089C1669FE841209C02AAC07 = { - buildStyles = ( - 014CEA420018CDE011CA2923, - 014CEA430018CDE011CA2923, - ); - isa = PBXProject; - mainGroup = 089C166AFE841209C02AAC07; - projectDirPath = ""; - targets = ( - 089C1673FE841209C02AAC07, - ); - }; - 089C166AFE841209C02AAC07 = { - children = ( - 08FB77AFFE84173DC02AAC07, - 089C167CFE841241C02AAC07, - 089C1671FE841209C02AAC07, - 19C28FB8FE9D52D311CA2CBB, - ); - isa = PBXGroup; - name = PCBaseFileTypes; - refType = 4; - }; - 089C1671FE841209C02AAC07 = { - children = ( - 1058C7ACFEA557BF11CA2CBB, - 1058C7AEFEA557BF11CA2CBB, - ); - isa = PBXGroup; - name = "Frameworks and Libraries"; - refType = 4; - }; - 089C1672FE841209C02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 089C1673FE841209C02AAC07 = { - buildPhases = ( - 089C1674FE841209C02AAC07, - 089C1675FE841209C02AAC07, - 089C1676FE841209C02AAC07, - 089C1677FE841209C02AAC07, - 089C1679FE841209C02AAC07, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/philippe/Library/Frameworks; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = PCBaseFileTypes; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = bundle; - }; - dependencies = ( - ); - isa = PBXBundleTarget; - name = PCBaseFileTypes; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = PCBaseFileTypes; - productReference = 014CEA410018CDE011CA2923; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - PCBaseFileTypes - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - - - -"; - shouldUseHeadermap = 1; - }; - 089C1674FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97200393954401000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1675FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1680FE841241C02AAC07, - F56C97250393955701000102, - F56C97260393955701000102, - F56C97270393955701000102, - F56C972F0393957101000102, - F56C97300393957101000102, - F56C97310393957101000102, - F56C97320393957101000102, - F56C97330393957101000102, - F56C97340393957101000102, - F56C97350393957101000102, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1676FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97210393954401000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1677FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7AFFEA557BF11CA2CBB, - F56C971D0393952C01000102, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1679FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C167CFE841241C02AAC07 = { - children = ( - 089C167DFE841241C02AAC07, - F56C97220393955701000102, - F56C97230393955701000102, - F56C97240393955701000102, - F56C97280393957101000102, - F56C97290393957101000102, - F56C972A0393957101000102, - F56C972B0393957101000102, - F56C972C0393957101000102, - F56C972D0393957101000102, - F56C972E0393957101000102, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C167DFE841241C02AAC07 = { - children = ( - 089C167EFE841241C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C167EFE841241C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C167FFE841241C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1680FE841241C02AAC07 = { - fileRef = 089C167DFE841241C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AFFE84173DC02AAC07 = { - children = ( - F56C971E0393954401000102, - F56C971F0393954401000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7ACFEA557BF11CA2CBB = { - children = ( - 1058C7ADFEA557BF11CA2CBB, - F56C96FC0393952C01000102, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7ADFEA557BF11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7AEFEA557BF11CA2CBB = { - children = ( - 089C1672FE841209C02AAC07, - 089C167FFE841241C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7AFFEA557BF11CA2CBB = { - fileRef = 1058C7ADFEA557BF11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//190 -//191 -//192 -//193 -//194 - 19C28FB8FE9D52D311CA2CBB = { - children = ( - 014CEA410018CDE011CA2923, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//F50 -//F51 -//F52 -//F53 -//F54 - F56C96FC0393952C01000102 = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - F56C971D0393952C01000102 = { - fileRef = F56C96FC0393952C01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C971E0393954401000102 = { - isa = PBXFileReference; - path = PCBaseFileType.h; - refType = 4; - }; - F56C971F0393954401000102 = { - isa = PBXFileReference; - path = PCBaseFileType.m; - refType = 4; - }; - F56C97200393954401000102 = { - fileRef = F56C971E0393954401000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97210393954401000102 = { - fileRef = F56C971F0393954401000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97220393955701000102 = { - isa = PBXFileReference; - path = FileIcon_.c.tiff; - refType = 4; - }; - F56C97230393955701000102 = { - isa = PBXFileReference; - path = FileIcon_.h.tiff; - refType = 4; - }; - F56C97240393955701000102 = { - isa = PBXFileReference; - path = FileIcon_.m.tiff; - refType = 4; - }; - F56C97250393955701000102 = { - fileRef = F56C97220393955701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97260393955701000102 = { - fileRef = F56C97230393955701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97270393955701000102 = { - fileRef = F56C97240393955701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97280393957101000102 = { - isa = PBXFileReference; - path = cfile.template; - refType = 4; - }; - F56C97290393957101000102 = { - isa = PBXFileReference; - path = cheader.template; - refType = 4; - }; - F56C972A0393957101000102 = { - isa = PBXFileReference; - path = class.template; - refType = 4; - }; - F56C972B0393957101000102 = { - isa = PBXFileReference; - path = header.template; - refType = 4; - }; - F56C972C0393957101000102 = { - isa = PBXFileReference; - path = nsviewclass.template; - refType = 4; - }; - F56C972D0393957101000102 = { - isa = PBXFileReference; - path = nsviewheader.template; - refType = 4; - }; - F56C972E0393957101000102 = { - isa = PBXFileReference; - path = protocol.template; - refType = 4; - }; - F56C972F0393957101000102 = { - fileRef = F56C97280393957101000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97300393957101000102 = { - fileRef = F56C97290393957101000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97310393957101000102 = { - fileRef = F56C972A0393957101000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97320393957101000102 = { - fileRef = F56C972B0393957101000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97330393957101000102 = { - fileRef = F56C972C0393957101000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97340393957101000102 = { - fileRef = F56C972D0393957101000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97350393957101000102 = { - fileRef = F56C972E0393957101000102; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 089C1669FE841209C02AAC07; -} diff --git a/PCBaseFileTypes/cfile.template b/PCBaseFileTypes/cfile.template deleted file mode 100644 index 4637348..0000000 --- a/PCBaseFileTypes/cfile.template +++ /dev/null @@ -1,11 +0,0 @@ -/* - * $FILENAME$ created by $USERNAME$ on $DATE$ - * - * Project $PROJECTNAME$ - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "$FILENAMESANSEXTENSION$.h" diff --git a/PCBaseFileTypes/cheader.template b/PCBaseFileTypes/cheader.template deleted file mode 100644 index ebcbfed..0000000 --- a/PCBaseFileTypes/cheader.template +++ /dev/null @@ -1,15 +0,0 @@ -/* - * $FILENAME$ created by $USERNAME$ on $DATE$ - * - * Project $PROJECTNAME$ - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _$UCFILENAMESANSEXTENSION$_H_ -#define _$UCFILENAMESANSEXTENSION$_H_ - -#endif // _$UCFILENAMESANSEXTENSION$_H_ - diff --git a/PCBaseFileTypes/class.template b/PCBaseFileTypes/class.template deleted file mode 100644 index c25639b..0000000 --- a/PCBaseFileTypes/class.template +++ /dev/null @@ -1,15 +0,0 @@ -/* - * $FILENAME$ created by $USERNAME$ on $DATE$ - * - * Project $PROJECTNAME$ - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "$FILENAMESANSEXTENSION$.h" - -@implementation $FILENAMESANSEXTENSION$ - -@end diff --git a/PCBaseFileTypes/nsviewclass.template b/PCBaseFileTypes/nsviewclass.template deleted file mode 100644 index 932853f..0000000 --- a/PCBaseFileTypes/nsviewclass.template +++ /dev/null @@ -1,28 +0,0 @@ -/* - * $FILENAME$ created by $USERNAME$ on $DATE$ - * - * Project $PROJECTNAME$ - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "$FILENAMESANSEXTENSION$.h" - -@implementation $FILENAMESANSEXTENSION$ - -- (id)initWithFrame:(NSRect)aFrame -{ - if((self = [super initWithFrame:aFrame])) - { - } - return self; -} - -- (void)drawRect:(NSRect)rect -{ - // Drawing... -} - -@end diff --git a/PCBaseFileTypes/nsviewheader.template b/PCBaseFileTypes/nsviewheader.template deleted file mode 100644 index 91d1346..0000000 --- a/PCBaseFileTypes/nsviewheader.template +++ /dev/null @@ -1,28 +0,0 @@ -/* - * $FILENAME$ created by $USERNAME$ on $DATE$ - * - * Project $PROJECTNAME$ - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _$UCFILENAMESANSEXTENSION$_H_ -#define _$UCFILENAMESANSEXTENSION$_H_ - -#include - -@interface $FILENAMESANSEXTENSION$ : NSView -{ - -} - -- (id)initWithFrame:(NSRect)aFrame; - -- (void)drawRect:(NSRect)rect; - -@end - -#endif // _$UCFILENAMESANSEXTENSION$_H_ - diff --git a/PCBaseFileTypes/protocol.template b/PCBaseFileTypes/protocol.template deleted file mode 100644 index e2dcbab..0000000 --- a/PCBaseFileTypes/protocol.template +++ /dev/null @@ -1,13 +0,0 @@ -/* - * $FILENAME$ created by $USERNAME$ on $DATE$ - * - * Project $PROJECTNAME$ - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -@protocol $FILENAMESANSEXTENSION$ - -@end diff --git a/PCBundleProj/ChangeLog b/PCBundleProj/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCBundleProj/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCBundleProj/ChangeLog.old b/PCBundleProj/ChangeLog.old deleted file mode 100644 index 53a7a43..0000000 --- a/PCBundleProj/ChangeLog.old +++ /dev/null @@ -1,152 +0,0 @@ -2003-04-21 Serg Stoyan - - * GNUmakefile: Set BUNDLE_INSTALL_DIR to GNUSTEP_SYSTEM_ROOT. - - * .h, .m: Replace #import with #include and add #ifndefs. - -2002-11-27 15:45 probert - - * Mac OS X port using Cocoa - -2002-06-01 15:56 probert - - * GNUmakefile, PCBundleProj.pcproj: Installation into - GNUSPTE_INSTALLATION_DIR - -2002-06-01 15:07 probert - - * PC.proj, PCBundleProject.m: The default installation path prefix - for bundles is now set to $GNUSTEP_INSTALLATION_DIR - -2002-04-26 05:12 fedor - - * ChangeLog, PCBundleProject.m: removed bunches of duplicate calls, - retains and releases. - -2002-03-25 20:37 probert - - * ChangeLog: ChangeLog updates - -2002-03-01 15:22 probert - - * PCBundleProj.m: Fix to avoid warning - -2002-03-01 15:18 probert - - * GNUmakefile, PCBundleMakefileFactory.h, - PCBundleMakefileFactory.m, PCBundleProj.pcproj, PCBundleProject.m: - The project now uses the shared makefile factory too. - -2002-01-07 16:05 probert - - * ChangeLog: Updated all ChangeLog files (using cvs2cl.pl) - -2002-01-07 16:01 probert - - * GNUmakefile, PCBundleProj.pcproj: Added libProjectCenter to the - bundle's library link settings. - -2002-01-07 10:37 probert - - * PC.project, PCBundleProj.m, PCBundleProj.pcproj: ProjectCenter - now stores the project files under PROJECTNAME.pcproj to avoid name - clashes. - -2002-01-02 18:51 probert - - * PC.proj, PC.project: Changed the build tool entry to - /usr/bin/make in all project files and templates. - -2002-01-02 17:05 probert - - * GNUmakefile, PC.proj, PC.project, PCBundleMakefileFactory.m, - PCBundleProject.m: The inspector now handles the installation path - and other settings. Furthermore it does not save changes - automatically but marks the project as being edited. Upon 'save' - the project file and GNUmakefile are being saved, not before! In - addition the various PC* bundles are now maintained by - ProjectCenter itself. The installation path for ProjectCenter.app - is corrected to the SYSTEM ROOT as well. - -2002-01-02 13:13 probert - - * GNUmakefile, PC.proj: All bundles and libProjectCenter are now - installed under GNUSTEP_SYSTEM_ROOT. Also the PC.proj templates - have now a correct install path default value. - -2002-01-01 18:27 probert - - * PC.proj, PCBundleProject.h, PCBundleProject.m: ProjectCenter now - validates project dictionaries and updates them if requested. I - also added new keys tp the PC.project files in order to be able to - generate valid *.spec.in files needed when building RPMs. - -2001-12-29 16:37 probert - - * ChangeLog: Removed the toplevel ChangeLog, updated the ChangeLogs - in the subdirectories and raised the version number to 0.2.6. - -2001-12-29 15:06 probert - - * PCBundleProject.m: Cleaned up the writeMakefile method - -2001-08-03 16:23 probert - - * PCBundleMakefileFactory.h, PCBundleMakefileFactory.m, - PCBundleProj.h, PCBundleProj.m, PCBundleProject.h, - PCBundleProject.m: New version - now copyrighted by the FSF - -2001-08-01 14:35 probert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, - PCBundleMakefileFactory.m: New copyright information and minor - template additions - -2001-07-01 21:01 probert - - * GNUmakefile, GNUmakefile.preamble: Applied patch from Adam Fedor - -2001-01-14 18:54 robert - - * ChangeLog: Updated the ChangeLogs - -2001-01-14 17:08 robert - - * PCBundleProject.m: Added the supporting files category - -2001-01-14 16:08 robert - - * PCBundleProject.h, PCBundleProject.m: the principal class can now - be set using the GUI - -2001-01-13 21:46 robert - - * PCBundleMakefileFactory.m: fix in the bundle project related to - the principal class. - -2001-01-13 16:56 robert - - * PCBundleMakefileFactory.m: the principal class should now be set - in any cases - -2001-01-10 16:19 robert - - * PCBundleMakefileFactory.m: Initial support for RPM SPEC file - creation - -2000-11-10 19:27 robert - - * PCBundleProject.h, PCBundleProject.m: some daily work... - -2000-11-10 15:08 robert - - * ChangeLog: changelog for 0.2 - -2000-11-04 14:22 robert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, - Info.table, PC.proj, PCBundleMakefileFactory.h, - PCBundleMakefileFactory.m, PCBundleProj.h, PCBundleProj.m, - PCBundleProject.h, PCBundleProject.m: the new bundle project type - - probably not 100% correct but working - diff --git a/PCBundleProj/English.lproj/InfoPlist.strings b/PCBundleProj/English.lproj/InfoPlist.strings deleted file mode 100644 index 653713eac010738c47af468a211168cbfecb8c8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmb`E$qK?i5Jc40x5eZ!r=V(2rN&L=lyU2W6P)q`PLSs{4FV zRw)@ZuG5>+N z2H)=C`k#Dh6jyMyp>x*56pyx-31*Qb7SNXCH0rZjpe))0@8b9P=%}q`?&{leRHy4+ Xi0Pu;#ha@^ID;s*+ccsoKj^puYVT!c diff --git a/PCBundleProj/Info.table b/PCBundleProj/Info.table deleted file mode 100644 index e0861e8..0000000 --- a/PCBundleProj/Info.table +++ /dev/null @@ -1,29 +0,0 @@ -{ - AdditionalAttributes = { - PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; - }; - Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); - AttributesInspector = ApplicationInspector; - DefaultExtension = ""; - Default_Localizable_Keys = (INTERFACES); - GeneratedFiles = (Makefile, iconHeader); - INSTALLFLAGS = "-c -s -m 755"; - InfoName = ""; - Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); - MAKEFILE = app.make; - MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; - Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); - PBProjectTypeSubClass = "PBApplicationProjectType"; - ProvidesIcons = Yes; - Public_Keys = (H_FILES); - Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); - SOURCEMODE = 444; - Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); - Subproj_Keys = (SUBPROJECTS); - Targets = (app, debug, profile, install); - ExecutableResults = ( - "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" - ); -} diff --git a/PCBundleProj/PC.proj b/PCBundleProj/PC.proj deleted file mode 100644 index 5da13e7..0000000 --- a/PCBundleProj/PC.proj +++ /dev/null @@ -1,40 +0,0 @@ -{ - APPCLASS = "NSApplication"; - APPKIT = "GNUSTEP-GUI"; - APPLICATIONICON = ""; - BUILDTOOL = "/usr/bin/make"; - CLASS_FILES = (); - COMPILEROPTIONS = ""; - LINKEROPTIONS = ""; - CREATION_DATE = ""; - DOCU_FILES = (); - FOUNDATION = "GNUSTEP-BASE"; - FRAMEWORKS = (); - HEADER_FILES = (); - INTERFACES = (); - IMAGES = (); - LANGUAGE = "English"; - LAST_EDITING = ""; - LIBRARIES = ("gnustep-base"); - MAININTERFACE = ""; - MAKEFILEDIR = "$(GNUSTEP_SYSTEM_ROOT)/Makefiles"; - INSTALLDIR = "$(GNUSTEP_INSTALLATION_DIR)/Library/Bundles"; - OTHER_FILES = (); - OTHER_RESOURCES = (); - OTHER_SOURCES = (); - PRINCIPAL_CLASS = ""; - PROJECT_CREATOR = ""; - PROJECT_DESCRIPTION = "No description avaliable!"; - PROJECT_GROUP = "No description avaliable!"; - PROJECT_SUMMARY = "No summary avaliable!"; - PROJECT_RELEASE = "1"; - PROJECT_COPYRIGHT = "No license specified!"; - PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz"; - PROJECT_MAINTAINER = ""; - PROJECT_NAME = ""; - PROJECT_TYPE = "Bundle"; - PROJECT_BUILDER = "PCBundleProj"; - PROJECT_VERSION = 1.0; - SUBPROJECTS = (); - SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); -} diff --git a/PCBundleProj/PCBundleProj.m b/PCBundleProj/PCBundleProj.m deleted file mode 100644 index fd30849..0000000 --- a/PCBundleProj/PCBundleProj.m +++ /dev/null @@ -1,149 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -/* - Description: - - PCBundleProj creates new project of the type Application! - -*/ - -#include "PCBundleProj.h" -#include "PCBundleProject.h" - -@implementation PCBundleProj - -static NSString *_projTypeName = @"Bundle"; -static PCBundleProj *_creator = nil; - -//---------------------------------------------------------------------------- -// ProjectType -//---------------------------------------------------------------------------- - -+ (id)sharedCreator -{ - if (!_creator) { - _creator = [[[self class] alloc] init]; - } - return _creator; -} - -- (Class)projectClass -{ - return [PCBundleProject class]; -} - -- (NSString *)projectTypeName -{ - return _projTypeName; -} - -- (NSDictionary *)typeTable -{ - NSString *_path = [[NSBundle bundleForClass:[self class]] - pathForResource:@"Info" ofType:@"table"]; - - return [NSDictionary dictionaryWithContentsOfFile:_path]; -} - -- (PCProject *)createProjectAt:(NSString *)path -{ - PCBundleProject *project = nil; - NSFileManager *fm = [NSFileManager defaultManager]; - - NSAssert(path,@"No valid project path provided!"); - - if ([fm createDirectoryAtPath:path attributes:nil]) { - NSString *_file; - NSString *_resourcePath; - NSMutableDictionary *dict; - NSString *projectFile; - - - project = [[[PCBundleProject alloc] init] autorelease]; - - _file = [[NSBundle bundleForClass:[self class]] - pathForResource:@"PC" ofType:@"proj"]; - dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; - - // Customise the project - [dict setObject:[path lastPathComponent] forKey:PCProjectName]; - [dict setObject:[[project principalClass] description] forKey:PCProjType]; - - // Save the project to disc - projectFile = [NSString stringWithString:[path lastPathComponent]]; - projectFile = [projectFile stringByAppendingPathExtension:@"pcproj"]; - [dict writeToFile:[path stringByAppendingPathComponent:projectFile] - atomically:YES]; - - /* - * Copy the project files to the provided path - * - */ - - _file = [[NSBundle bundleForClass:[self class]] - pathForResource:@"GNUmakefile" ofType:@"postamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] - pathForResource:@"GNUmakefile" ofType:@"preamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] handler:nil]; - - // Resources - _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; - [fm createDirectoryAtPath:_resourcePath attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] attributes:nil]; - - // The path cannot be in the PC.project file! - [project setProjectPath:path]; - - // Set the new dictionary - this causes the GNUmakefile to be written - if(![project assignProjectDict:dict]) { - NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); - return nil; - } - } - return project; -} - -- (PCProject *)openProjectAt:(NSString *)path -{ - NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; - id obj; - -#ifdef DEBUG - NSLog(@"<%@ %x>: opening project at %@",[self class],self,path); -#endif //DEBUG - - obj = [dict objectForKey:PCProjectBuilderClass]; - if ([obj isEqualToString:@"PCBundleProj"]) { - return [[[PCBundleProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; - } - return nil; -} - -@end diff --git a/PCBundleProj/PCBundleProj.pbproj/project.pbxproj b/PCBundleProj/PCBundleProj.pbproj/project.pbxproj deleted file mode 100644 index 92d45c0..0000000 --- a/PCBundleProj/PCBundleProj.pbproj/project.pbxproj +++ /dev/null @@ -1,362 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA410018CDE011CA2923 = { - isa = PBXBundleReference; - path = PCBundleProj.bundle; - refType = 3; - }; - 014CEA420018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA430018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//080 -//081 -//082 -//083 -//084 - 089C1669FE841209C02AAC07 = { - buildStyles = ( - 014CEA420018CDE011CA2923, - 014CEA430018CDE011CA2923, - ); - isa = PBXProject; - mainGroup = 089C166AFE841209C02AAC07; - projectDirPath = ""; - targets = ( - 089C1673FE841209C02AAC07, - ); - }; - 089C166AFE841209C02AAC07 = { - children = ( - 08FB77AFFE84173DC02AAC07, - 089C167CFE841241C02AAC07, - 089C1671FE841209C02AAC07, - 19C28FB8FE9D52D311CA2CBB, - ); - isa = PBXGroup; - name = PCBundleProj; - refType = 4; - }; - 089C1671FE841209C02AAC07 = { - children = ( - 1058C7ACFEA557BF11CA2CBB, - 1058C7AEFEA557BF11CA2CBB, - ); - isa = PBXGroup; - name = "Frameworks and Libraries"; - refType = 4; - }; - 089C1672FE841209C02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 089C1673FE841209C02AAC07 = { - buildPhases = ( - 089C1674FE841209C02AAC07, - 089C1675FE841209C02AAC07, - 089C1676FE841209C02AAC07, - 089C1677FE841209C02AAC07, - 089C1679FE841209C02AAC07, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/philippe/Library/Frameworks; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = PCBundleProj; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = bundle; - }; - dependencies = ( - ); - isa = PBXBundleTarget; - name = PCBundleProj; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = PCBundleProj; - productReference = 014CEA410018CDE011CA2923; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - PCBundleProj - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - PCBundleProj - - -"; - shouldUseHeadermap = 1; - }; - 089C1674FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F58C0B870391125601000102, - F58C0B890391125601000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1675FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1680FE841241C02AAC07, - F56C978903939BEB01000102, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1676FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F58C0B880391125601000102, - F58C0B8A0391125601000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1677FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7AFFEA557BF11CA2CBB, - F58C0B820391121A01000102, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1679FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C167CFE841241C02AAC07 = { - children = ( - 089C167DFE841241C02AAC07, - F56C978803939BEB01000102, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C167DFE841241C02AAC07 = { - children = ( - 089C167EFE841241C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C167EFE841241C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C167FFE841241C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1680FE841241C02AAC07 = { - fileRef = 089C167DFE841241C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AFFE84173DC02AAC07 = { - children = ( - F58C0B830391125601000102, - F58C0B840391125601000102, - F58C0B850391125601000102, - F58C0B860391125601000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7ACFEA557BF11CA2CBB = { - children = ( - 1058C7ADFEA557BF11CA2CBB, - F58C0B810391121A01000102, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7ADFEA557BF11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7AEFEA557BF11CA2CBB = { - children = ( - 089C1672FE841209C02AAC07, - 089C167FFE841241C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7AFFEA557BF11CA2CBB = { - fileRef = 1058C7ADFEA557BF11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//190 -//191 -//192 -//193 -//194 - 19C28FB8FE9D52D311CA2CBB = { - children = ( - 014CEA410018CDE011CA2923, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//F50 -//F51 -//F52 -//F53 -//F54 - F56C978803939BEB01000102 = { - isa = PBXFileReference; - path = PC.proj; - refType = 4; - }; - F56C978903939BEB01000102 = { - fileRef = F56C978803939BEB01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B810391121A01000102 = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - F58C0B820391121A01000102 = { - fileRef = F58C0B810391121A01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B830391125601000102 = { - isa = PBXFileReference; - path = PCBundleProj.h; - refType = 4; - }; - F58C0B840391125601000102 = { - isa = PBXFileReference; - path = PCBundleProj.m; - refType = 4; - }; - F58C0B850391125601000102 = { - isa = PBXFileReference; - path = PCBundleProject.h; - refType = 4; - }; - F58C0B860391125601000102 = { - isa = PBXFileReference; - path = PCBundleProject.m; - refType = 4; - }; - F58C0B870391125601000102 = { - fileRef = F58C0B830391125601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B880391125601000102 = { - fileRef = F58C0B840391125601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B890391125601000102 = { - fileRef = F58C0B850391125601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B8A0391125601000102 = { - fileRef = F58C0B860391125601000102; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 089C1669FE841209C02AAC07; -} diff --git a/PCGormProj/ChangeLog b/PCGormProj/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCGormProj/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCGormProj/ChangeLog.old b/PCGormProj/ChangeLog.old deleted file mode 100644 index f69b7ae..0000000 --- a/PCGormProj/ChangeLog.old +++ /dev/null @@ -1,137 +0,0 @@ -2003-04-21 Serg Stoyan - - * GNUmakefile: Set BUNDLE_INSTALL_DIR to GNUSTEP_SYSTEM_ROOT. - - * .h, .m: Replace #import with #include and add #ifndefs. - - * h.template and m.template removed. - -2002-11-27 15:45 probert - - * Mac OS X port using Cocoa - -2002-06-01 15:56 probert - - * GNUmakefile, PCGormProj.pcproj: Installation into - GNUSPTE_INSTALLATION_DIR - -2002-04-26 05:12 fedor - - * ChangeLog, PCGormProject.m: removed bunches of duplicate calls, - retains and releases. - -2002-03-25 20:37 probert - - * ChangeLog: ChangeLog updates - -2002-03-01 15:38 probert - - * GNUmakefile, PCGormMakefileFactory.h, PCGormMakefileFactory.m, - PCGormProj.pcproj, PCGormProject.m: This project now uses the - makefile factory too. - -2002-02-17 21:10 probert - - * ChangeLog: Updated the ChangeLog files - -2002-02-16 22:21 probert - - * baseInterface.gorm: Enhanced the default menu entries by adding - standard submenu. - -2002-02-16 22:12 probert - - * baseInterface.classes, baseInterface.gorm: Updated the Gorm - generated files using the latest Gorm CVS code. - -2002-01-07 16:36 probert - - * PC.proj: Somehow $(GNUSTEP_LOCAL_ROOT) is enough for the install - path to be correct. - -2002-01-07 16:05 probert - - * ChangeLog: Updated all ChangeLog files (using cvs2cl.pl) - -2002-01-07 16:01 probert - - * GNUmakefile, GNUmakefile.preamble, PCGormProj.pcproj: Added - libProjectCenter to the bundle's library link settings. - -2002-01-07 10:37 probert - - * PC.project, PCGormProj.m, PCGormProj.pcproj: ProjectCenter now - stores the project files under PROJECTNAME.pcproj to avoid name - clashes. - -2002-01-07 05:40 fedor - - * ChangeLog, GNUmakefile.preamble: Include -lProjectCenter - correctly - -2002-01-02 18:51 probert - - * PC.proj, PC.project: Changed the build tool entry to - /usr/bin/make in all project files and templates. - -2002-01-02 17:37 probert - - * ChangeLog: Added the ChangeLog for the Gorm App project - -2002-01-02 17:33 probert - - * PCGormMakefileFactory.m: Libraries, Gorm apps and tools use the - install path now, too. - -2002-01-02 17:05 probert - - * GNUmakefile, PC.proj, PC.project, PCGormProject.m: The inspector - now handles the installation path and other settings. Furthermore - it does not save changes automatically but marks the project as - being edited. Upon 'save' the project file and GNUmakefile are - being saved, not before! In addition the various PC* bundles are - now maintained by ProjectCenter itself. The installation path for - ProjectCenter.app is corrected to the SYSTEM ROOT as well. - -2002-01-02 13:13 probert - - * GNUmakefile, PC.proj: All bundles and libProjectCenter are now - installed under GNUSTEP_SYSTEM_ROOT. Also the PC.proj templates - have now a correct install path default value. - -2002-01-01 18:27 probert - - * PC.proj, PCGormProject.h, PCGormProject.m: ProjectCenter now - validates project dictionaries and updates them if requested. I - also added new keys tp the PC.project files in order to be able to - generate valid *.spec.in files needed when building RPMs. - -2001-12-29 15:07 probert - - * PCGormProject.m: Cleaned up the writeMakefile method - -2001-09-25 17:46 fedor - - * GNUmakefile.preamble: Include proper header dirs - -2001-08-03 16:23 probert - - * PCGormMakefileFactory.h, PCGormMakefileFactory.m, PCGormProj.h, - PCGormProj.m, PCGormProject.h, PCGormProject.m: New version - now - copyrighted by the FSF - -2001-08-01 14:35 probert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, - PCGormMakefileFactory.m: New copyright information and minor - template additions - -2001-07-07 13:48 probert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, - Info-project.plist, Info.table, PC.proj, PCGormMakefileFactory.h, - PCGormMakefileFactory.m, PCGormProj.h, PCGormProj.m, - PCGormProject.h, PCGormProject.m, baseInterface.classes, - baseInterface.gorm, h.template, m.template, main.m: Added the - GormApplication project, done by Pierre-Yves Rivaille - diff --git a/PCGormProj/English.lproj/InfoPlist.strings b/PCGormProj/English.lproj/InfoPlist.strings deleted file mode 100644 index e98cf2c2c31db5b7078d93267f82bcf1f1dec4e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmb`EOKZYF6ot>)UomuLrD$|3ZVZ?T8pJ@iB|f5kB#{^e`{S$MOpBnzZY;yxJ9Fpc z-g8dAk7}tQqmgpW73))P`qEMhYI|~_EtOmu*^m?BkXypJsg1*LRZ{%`eQ>A-J!>pq z1NF57y#TjVNdJ^<)MGzr0wSPKL3KjR^-i^0@nxj7!8*mq#>uWsN~ubP7I3=i%(4eQo|S d4;ASdr&EWS!aGJ+teNw@YTC~qsCv1B#|b+9V;2Ab diff --git a/PCGormProj/Info.table b/PCGormProj/Info.table deleted file mode 100644 index e0861e8..0000000 --- a/PCGormProj/Info.table +++ /dev/null @@ -1,29 +0,0 @@ -{ - AdditionalAttributes = { - PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; - }; - Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); - AttributesInspector = ApplicationInspector; - DefaultExtension = ""; - Default_Localizable_Keys = (INTERFACES); - GeneratedFiles = (Makefile, iconHeader); - INSTALLFLAGS = "-c -s -m 755"; - InfoName = ""; - Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); - MAKEFILE = app.make; - MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; - Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); - PBProjectTypeSubClass = "PBApplicationProjectType"; - ProvidesIcons = Yes; - Public_Keys = (H_FILES); - Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); - SOURCEMODE = 444; - Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); - Subproj_Keys = (SUBPROJECTS); - Targets = (app, debug, profile, install); - ExecutableResults = ( - "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" - ); -} diff --git a/PCGormProj/PCGormProj.pbproj/project.pbxproj b/PCGormProj/PCGormProj.pbproj/project.pbxproj deleted file mode 100644 index e9030a8..0000000 --- a/PCGormProj/PCGormProj.pbproj/project.pbxproj +++ /dev/null @@ -1,408 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA410018CDE011CA2923 = { - isa = PBXBundleReference; - path = PCGormProj.bundle; - refType = 3; - }; - 014CEA420018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA430018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//080 -//081 -//082 -//083 -//084 - 089C1669FE841209C02AAC07 = { - buildStyles = ( - 014CEA420018CDE011CA2923, - 014CEA430018CDE011CA2923, - ); - hasScannedForEncodings = 1; - isa = PBXProject; - mainGroup = 089C166AFE841209C02AAC07; - projectDirPath = ""; - targets = ( - 089C1673FE841209C02AAC07, - ); - }; - 089C166AFE841209C02AAC07 = { - children = ( - 08FB77AFFE84173DC02AAC07, - 089C167CFE841241C02AAC07, - 089C1671FE841209C02AAC07, - 19C28FB8FE9D52D311CA2CBB, - ); - isa = PBXGroup; - name = PCGormProj; - refType = 4; - }; - 089C1671FE841209C02AAC07 = { - children = ( - 1058C7ACFEA557BF11CA2CBB, - 1058C7AEFEA557BF11CA2CBB, - ); - isa = PBXGroup; - name = "Frameworks and Libraries"; - refType = 4; - }; - 089C1672FE841209C02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 089C1673FE841209C02AAC07 = { - buildPhases = ( - 089C1674FE841209C02AAC07, - 089C1675FE841209C02AAC07, - 089C1676FE841209C02AAC07, - 089C1677FE841209C02AAC07, - 089C1679FE841209C02AAC07, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/philippe/Library/Frameworks; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = PCGormProj; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = bundle; - }; - dependencies = ( - ); - isa = PBXBundleTarget; - name = PCGormProj; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = PCGormProj; - productReference = 014CEA410018CDE011CA2923; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - PCGormProj - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - PCGormProj - - -"; - }; - 089C1674FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97B203939C8F01000102, - F56C97B403939C8F01000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1675FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1680FE841241C02AAC07, - F56C97BA03939CAB01000102, - F56C97BB03939CAB01000102, - F56C97BD03939CAB01000102, - F56C97BE03939CE101000102, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1676FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97B303939C8F01000102, - F56C97B503939C8F01000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1677FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7AFFEA557BF11CA2CBB, - F56C97AD03939C7A01000102, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1679FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C167CFE841241C02AAC07 = { - children = ( - 089C167DFE841241C02AAC07, - F56C97B603939CAB01000102, - F56C97B703939CAB01000102, - F56C97B803939CAB01000102, - F56C97B903939CAB01000102, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C167DFE841241C02AAC07 = { - children = ( - 089C167EFE841241C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C167EFE841241C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C167FFE841241C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1680FE841241C02AAC07 = { - fileRef = 089C167DFE841241C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AFFE84173DC02AAC07 = { - children = ( - F56C97AE03939C8F01000102, - F56C97AF03939C8F01000102, - F56C97B003939C8F01000102, - F56C97B103939C8F01000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7ACFEA557BF11CA2CBB = { - children = ( - 1058C7ADFEA557BF11CA2CBB, - F56C978C03939C7A01000102, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7ADFEA557BF11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7AEFEA557BF11CA2CBB = { - children = ( - 089C1672FE841209C02AAC07, - 089C167FFE841241C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7AFFEA557BF11CA2CBB = { - fileRef = 1058C7ADFEA557BF11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//190 -//191 -//192 -//193 -//194 - 19C28FB8FE9D52D311CA2CBB = { - children = ( - 014CEA410018CDE011CA2923, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//F50 -//F51 -//F52 -//F53 -//F54 - F56C978C03939C7A01000102 = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - F56C97AD03939C7A01000102 = { - fileRef = F56C978C03939C7A01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97AE03939C8F01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCGormProj.h; - refType = 4; - }; - F56C97AF03939C8F01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCGormProj.m; - refType = 4; - }; - F56C97B003939C8F01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCGormProject.h; - refType = 4; - }; - F56C97B103939C8F01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCGormProject.m; - refType = 4; - }; - F56C97B203939C8F01000102 = { - fileRef = F56C97AE03939C8F01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97B303939C8F01000102 = { - fileRef = F56C97AF03939C8F01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97B403939C8F01000102 = { - fileRef = F56C97B003939C8F01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97B503939C8F01000102 = { - fileRef = F56C97B103939C8F01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97B603939CAB01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = baseInterface.classes; - refType = 4; - }; - F56C97B703939CAB01000102 = { - isa = PBXFileReference; - path = baseInterface.gorm; - refType = 4; - }; - F56C97B803939CAB01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = main.m; - refType = 4; - }; - F56C97B903939CAB01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = PC.proj; - refType = 4; - }; - F56C97BA03939CAB01000102 = { - fileRef = F56C97B603939CAB01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97BB03939CAB01000102 = { - fileRef = F56C97B703939CAB01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97BD03939CAB01000102 = { - fileRef = F56C97B903939CAB01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97BE03939CE101000102 = { - fileRef = F56C97B803939CAB01000102; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 089C1669FE841209C02AAC07; -} diff --git a/PCGormProj/PCGormProject.h b/PCGormProj/PCGormProject.h deleted file mode 100644 index a31f88f..0000000 --- a/PCGormProj/PCGormProject.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. -*/ - -/* - Description: - - This is the project type 'GormApplication' for GNUstep. You never should create - it yourself but use PCGormProj for doing this. Otherwise needed files don't - get copied to the right place. - - */ - -#ifndef _PCGORMPROJECT_H -#define _PCGORMPROJECT_H - -#include -#include - -@interface PCGormProject : PCProject -{ - NSTextField *appClassField; - NSTextField *appImageField; - NSButton *setAppIconButton; - NSButton *clearAppIconButton; - NSImageView *appIconView; - NSImage *icon; -} - -//---------------------------------------------------------------------------- -// Init and free -//---------------------------------------------------------------------------- - -- (id)init; -- (void)dealloc; - -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- - -- (Class)builderClass; - -- (BOOL)writeMakefile; - -- (NSArray *)sourceFileKeys; -- (NSArray *)resourceFileKeys; -- (NSArray *)otherKeys; -- (NSArray *)buildTargets; -- (NSString *)projectDescription; - -- (BOOL)isExecutable; - -- (void)updateValuesFromProjectDict; - -- (void)clearAppIcon:(id)sender; -- (void)setAppIcon:(id)sender; - -- (BOOL)setAppIconWithImageAtPath:(NSString *)path; - -- (void)setAppClass:(id)sender; - -@end - -#endif diff --git a/PCGormProj/main.m b/PCGormProj/main.m deleted file mode 100644 index 4ee92ed..0000000 --- a/PCGormProj/main.m +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#define APP_NAME @"GNUstep" - -/* - * Initialise and go! - */ - -int main(int argc, const char *argv[]) -{ - return NSApplicationMain (argc, argv); -} diff --git a/PCInfoController.h b/PCInfoController.h index ed94942..9c3df7b 100644 --- a/PCInfoController.h +++ b/PCInfoController.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCINFOCONTROLLER_H diff --git a/PCInfoController.m b/PCInfoController.m index 29c6a0f..3b93ac8 100644 --- a/PCInfoController.m +++ b/PCInfoController.m @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCInfoController.h" diff --git a/PCLib/ChangeLog b/PCLib/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCLib/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCLib/ChangeLog.old b/PCLib/ChangeLog.old deleted file mode 100644 index 3909b8c..0000000 --- a/PCLib/ChangeLog.old +++ /dev/null @@ -1,676 +0,0 @@ -2003-04-21 Serg Stoyan - - * Replace all occurrences of #import with #include and make - needed #ifndefs - - * PCProject+UInterface.m: - (_initUI): Set browser maximum visible colums to 4. Load placeholder - editor view. Move "Build Options" into PCProjectBulder.m. Cleanup. - title to - - * PCProjectBuilder.m: Make it separate panel. - (_createComponentView): Install and Options buttons added. Move - target popup into _createOptionsPanel. - (_createOptionsPanel): Added. - - * h.template and m.template removed. - -2003-01-25 Daniel Luederwald - - * PCBrowserController.m: Add gsmarkup to editable files. - (isEditableFiles:): Idem, but don't allow editing if extension - is gorm (patch from Adam Fedor ). - * PCProjectDebugger.m (run:): Add PCRenaissanceProject. - -2002-11-27 Philippe C.D. Robert - - * Extracting UI code into separate categories. PBX project file for - Mac OS X using Cocoa. - -2002-11-24 Philippe C.D. Robert - - * Fixing import statements in most headers and source files preparing - a Mac OS X port. - -2002-11-04 Adam Fedor - - * PCFileManager.m (-showAddFileWindow): Only copy file if it isn't - already there. - -2002-10-06 15:45 probert - - * PCEditor.h, PCEditor.m, PCEditorView.m, PCProjectEditor.h, - PCProjectEditor.m: Updated the AUTHORS file and applied David - Ayers' patch. - -2002-08-10 14:10 probert - - * PCEditor.m: Applied patch sent in by O. Kornilov to avoid - exception when clicking on file name in browser - -2002-08-10 13:41 probert - - * PCEditorView+Highlighting.m: Removed call to super's initialize - -2002-06-01 16:00 probert - - * ChangeLog: Updated ChangeLogs - -2002-06-01 15:55 probert - - * PCMakefileFactory.m: Code cleanup - -2002-06-01 15:46 probert - - * GNUmakefile, PCBundleLoader.m, PCMakefileFactory.m, - ProjectCenter.pcproj: Fixed a bug in the lib makefile creation - part. - -2002-04-26 05:12 fedor - - * ChangeLog, GNUmakefile, PCBrowserController.m, - PCHistoryController.m, PCProject.m, PCProjectManager.m: removed - bunches of duplicate calls, retains and releases. - -2002-04-25 23:12 fedor - - * ChangeLog, PCBrowserController.m, PCHistoryController.m: Retain - browser - -2002-03-25 20:37 probert - - * ChangeLog, Version: ChangeLog updates - -2002-03-03 14:47 probert - - * PCHistoryController.m, PCProject.m: Fixed mem leak in the history - controller. - -2002-03-02 14:58 probert - - * PCEditor.m, PCEditorView.m: Editors should now use the font - panel. - -2002-03-02 14:15 probert - - * PCEditor.h, PCEditor.m, PCEditorController.m: Using - saveFileIfNeeded instead of saveFile. - -2002-03-02 14:11 probert - - * PCEditorController.h, PCEditorController.m, PCProject.m, - PCProjectManager.m: The timed safe mechanism now also saves all - project files, if needed. - -2002-03-01 16:19 probert - - * PCMakefileFactory.h, PCMakefileFactory.m: Added support for tool - projects. - -2002-03-01 15:58 probert - - * PCMakefileFactory.h, PCMakefileFactory.m: Support for libraries - added. - -2002-03-01 15:18 probert - - * PCMakefileFactory.h, PCMakefileFactory.m: Support for bundles - -2002-03-01 11:39 probert - - * GNUmakefile, PCMakefileFactory.h, PCMakefileFactory.m, - ProjectCenter.h, ProjectCenter.pcproj: Began to clean up the - makefile creation code. Introduced a shared factory for that - purpose which implements basic stuff used by all projects. - -2002-02-22 19:48 probert - - * PCEditorController.m: Fixed a bug which caused PC to crash when - an external GS editor was used, thx to Richard for pointing me to - the right place! - -2002-02-21 22:26 probert - - * PCProjectManager.m: Removed annoying alert panel raised upon - saving all projects - -2002-02-21 22:17 probert - - * GNUmakefile, PCBrowserController.m, PCHistoryController.h, - PCHistoryController.m, PCProject.h, PCProject.m, ProjectCenter.h, - ProjectCenter.pcproj: First attempt of integrating a history - browser for better file navigation. There are still bugs though... - -2002-02-21 13:50 probert - - * PCEditorController.m: When a GNUstep app is used as external - editor, NSWorkspace is used to open the file using the repsective - app. - -2002-02-21 12:29 probert - - * PCProject.m: Removing a file causes the browser to be updated - -2002-02-21 12:25 probert - - * PCBrowserController.m, PCProject.m: If the project changes the - browser reloads the correct column. - -2002-02-21 11:45 probert - - * PCProject+ComponentHandling.h, PCProject+ComponentHandling.m, - PCProject.h, PCProject.m: All project components are now accessible - via menu entry. Furthermore it is also possible to launch the - selected target via menu entry. - -2002-02-21 11:15 probert - - * PCEditorController.h, PCEditorController.m, PCProject.m: Single - click always invokes the internal editor now. - -2002-02-21 11:05 probert - - * PCBrowserController.h, PCBrowserController.m, PCProject.h, - PCProject.m: Cleaned up the code which is called upon seleting a - file in the project browser. Now libraries etc. do not show up in - the internal editor anymore. - -2002-02-17 21:10 probert - - * ChangeLog: Updated the ChangeLog files - -2002-02-17 21:02 probert - - * PCDefines.h: Added the TabBehaviour define required by the - preferences - -2002-02-17 18:40 probert - - * GNUmakefile, PCEditorView+Highlighting.h, - PCEditorView+Highlighting.m, PCEditorView.h, PCEditorView.m, - ProjectCenter.h, ProjectCenter.pcproj: Moved the (deprecated) - highlighting code into PCEditorView+Highlighting and implemented - tab (\t) capabilities. - -2002-02-17 14:14 probert - - * PCEditor.m, PCEditorController.m, PCEditorView.m, PCProject.m, - PCProjectEditor.m, PCProjectManager.m: Fixed 2 bugs which caused a - severe crash. - -2002-02-16 21:46 probert - - * PCBrowserController.m, PCFileManager.h, PCFileManager.m, - PCProject+ComponentHandling.m, PCProjectEditor.m: Enhanced the 'new - file window' by adding a description view. - -2002-02-12 22:44 probert - - * PCProject.m: Fixed the bug that when clicking on a source file - for the first time, the editor did not display the file's content. - -2002-02-12 21:05 probert - - * PCProjectBuilder.m, PCProjectDebugger.h, PCProjectDebugger.m: - Added a launch target popup which lets the user choose between the - default or the debug target. - -2002-02-11 23:19 probert - - * GNUmakefile, PCEditor.h, PCEditor.m, PCEditorController.m, - PCEditorView.h, PCEditorView.m, PCFileManager.m, - PCProject+ComponentHandling.h, PCProject+ComponentHandling.m, - PCProject.h, PCProject.m, PCProjectBuilder.h, PCProjectBuilder.m, - PCProjectDebugger.h, PCProjectEditor.h, PCProjectEditor.m, - ProjectCenter.h, ProjectCenter.pcproj, ProjectComponent.h: Began to - work on support for an integrated editor, thus much has been - rewritten related to editor handling. This is work in progress... - Every PCProject component now has to conform to the - ProjectComponent protocol. Syntax highlighting is disabled for - now, this will undergo a major rewrite soon. Furthermore I - separated the component handling stuff from the main class file and - put it into PCProject+ComponentHandling. - -2002-02-03 20:31 probert - - * PCEditor.h, PCEditor.m, PCProject.m, PCTextFinder.m: Optimised - text edition reflection. Embedded editing will need more changes in - that respect, I fear... - -2002-02-03 17:30 probert - - * GNUmakefile, PCEditor.m, PCTextFinder.h, PCTextFinder.m, - ProjectCenter.h, ProjectCenter.pcproj: Added a text finder to - ProjectCenter (based on Ali Ozer's code). - -2002-02-02 22:13 probert - - * PCDefines.h: Defines belong into PCDefines.h now - -2002-02-02 22:12 probert - - * GNUmakefile, PCBrowserController.h, PCBundleLoader.h, PCEditor.h, - PCEditor.m, PCEditorView.m, PCFileManager.h, PCProject.h, - PCProjectBuilder.h, PCProjectManager.h, PCProjectManager.m, - PCServer.h, PreferenceController.h, ProjectBuilder.h, - ProjectCenter.h, ProjectCenter.pcproj, ProjectDebugger.h, - ProjectEditor.h, Server.h: Cleaned up the header files ( added - ifndef/define statements ), splitted the ProjectCenter.h header and - some other cleanups. Editor now send notifications whenever they - become or resign key. - -2002-02-02 20:21 probert - - * PCBrowserController.m, PCEditor.h, PCEditor.m, - PCEditorController.h, PCEditorController.m, PCEditorView.h, - PCEditorView.m, PCProject.h, PCProject.m, PCProjectManager.m: Kind - of implemented saving and reverting of common files. A long way to - go, but for now it works... - -2002-02-02 18:56 probert - - * GNUmakefile, PCBrowserController.h, PCBrowserController.m, - PCBundleLoader.h, PCBundleLoader.m, PCEditor.h, PCEditor.m, - PCEditorController.h, PCEditorController.m, PCEditorView.h, - PCEditorView.m, PCProject.h, PCProject.m, PCProjectManager.m, - PCServer.h, PCServer.m, ProjectCenter.pcproj: Rewriting the entire - editor code. Hence introduced a PCEditorController and cleaned up - the PCServer class. Every project now has a controller which - controls all editors. Editors itself use an editor view to display - the files or external editors. - -2002-01-29 22:46 probert - - * PCEditor.h, PCEditor.m, PCProjectManager.m: Fixed a bug - preventing reopening projects. Also added 2 methods which will be - used to make an editor embedded. - -2002-01-29 22:29 probert - - * GNUmakefile, PCEditor.h, PCEditor.m, PCServer.h, PCServer.m, - ProjectCenter.pcproj: Cleaning up the internal editor code. More to - come... - -2002-01-27 14:55 probert - - * GNUmakefile, PCProject.m, PCProjectDebugger.m, PCSplitView.h, - PCSplitView.m, ProjectCenter.pcproj: Using a customised split view - instead of a NSSplitView - more to come... - -2002-01-27 14:37 probert - - * PCProject.m: Minor UI enhancement: main button alignement - adjusted. - -2002-01-27 14:32 probert - - * PCProject.m, PCProjectBuilder.h, PCProjectBuilder.m, - PCProjectDebugger.m: Removed unneeded buttons, added a title to the - remaining ones and introduced a splitview between the project - browser and component view. In the build view a popup button is now - used for build targets. - -2002-01-07 16:05 probert - - * ChangeLog: Updated all ChangeLog files (using cvs2cl.pl) - -2002-01-07 11:00 probert - - * GNUmakefile, PCBrowserController.m, PCEditorView.m, - PCFileManager.m, ProjectCenter.pcproj, Version: PCLib is now - maintained by ProjectCenter as well! - -2002-01-07 10:37 probert - - * PCProject.m, PCProjectManager.m: ProjectCenter now stores the - project files under PROJECTNAME.pcproj to avoid name clashes. - -2002-01-02 18:43 probert - - * PCProject.m, PCProjectBuilder.m: The build tool can now be - customised. Make sure to enter a valid path in the inspector field! - -2002-01-02 18:33 probert - - * GNUmakefile: The library now gets installed in the proper - directory as well. - -2002-01-02 17:05 probert - - * PCProject.h, PCProject.m, PCProjectBuilder.m, PCProjectManager.m: - The inspector now handles the installation path and other settings. - Furthermore it does not save changes automatically but marks the - project as being edited. Upon 'save' the project file and - GNUmakefile are being saved, not before! In addition the various - PC* bundles are now maintained by ProjectCenter itself. The - installation path for ProjectCenter.app is corrected to the SYSTEM - ROOT as well. - -2002-01-02 13:13 probert - - * PCBundleLoader.m: All bundles and libProjectCenter are now - installed under GNUSTEP_SYSTEM_ROOT. Also the PC.proj templates - have now a correct install path default value. - -2002-01-01 19:21 probert - - * PCProjectBuilder.m: Added a new button for the build target - 'dist' in the builder panel - -2002-01-01 18:27 probert - - * PCProject.h, PCProject.m, PCProjectBuilder.m, PCProjectManager.m: - ProjectCenter now validates project dictionaries and updates them - if requested. I also added new keys tp the PC.project files in - order to be able to generate valid *.spec.in files needed when - building RPMs. - -2001-12-29 16:37 probert - - * ChangeLog: Removed the toplevel ChangeLog, updated the ChangeLogs - in the subdirectories and raised the version number to 0.2.6. - -2001-12-29 16:29 probert - - * PCProjectManager.h, PCProjectManager.m: Automatic, periodic - saving of all open projectfiles is now supported. - -2001-12-29 15:41 probert - - * PCProject.m: Fixed some minor issues with file backup handling - -2001-12-29 15:09 probert - - * PCProject.m, PCProjectManager.h, PCProjectManager.m, - ProjectCenter.h: Cleaned up the writeMakefile method and - implemented the save stuff the way it should be. Some additions for - proper preference handling have been made as well. - -2001-12-28 15:11 probert - - * PCProjectDebugger.m: Fixed a typo and altered matrix button - behaviour - -2001-08-03 16:23 probert - - * FileCreator.h, PCBrowserController.h, PCBrowserController.m, - PCBundleLoader.h, PCBundleLoader.m, PCDataSource.h, PCDataSource.m, - PCEditorView.h, PCEditorView.m, PCFileManager.h, PCFileManager.m, - PCProject.h, PCProject.m, PCProjectBuilder.h, PCProjectBuilder.m, - PCProjectDebugger.h, PCProjectDebugger.m, PCProjectManager.h, - PCProjectManager.m, PCServer.h, PCServer.m, PreferenceController.h, - ProjectBuilder.h, ProjectCenter.h, ProjectDebugger.h, - ProjectEditor.h, ProjectType.h, Server.h: New version - now - copyrighted by the FSF - -2001-08-01 18:27 probert - - * PCEditorView.m: Better highlighting of keywords - -2001-08-01 14:35 probert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble: New - copyright information and minor template additions - -2001-07-07 13:48 probert - - * PCProjectDebugger.m, PCServer.m: Little GUI modifications, done - by Pierre-Yves Rivaille - -2001-07-01 21:02 probert - - * GNUmakefile.postamble: Added makefile - -2001-07-01 21:01 probert - - * GNUmakefile, GNUmakefile.preamble: Applied patch from Adam Fedor - -2001-01-29 13:17 robert - - * PCEditorView.m, PCProjectBuilder.m, PCServer.m: new textview code - required some changes - -2001-01-14 18:54 robert - - * ChangeLog: Updated the ChangeLogs - -2001-01-14 18:01 robert - - * PB.project: removing old PB stuff - -2001-01-14 17:57 robert - - * PCProjectBuilder.m, PCProjectDebugger.h, PCProjectDebugger.m: - Major improvements to the launch/debugger part - -2001-01-14 17:23 robert - - * Makefile, Makefile.postamble, Makefile.preamble: removed old PB - stuff - -2001-01-14 16:53 robert - - * PCProject.m: Fixed some mem leaks - -2001-01-13 21:46 robert - - * PCFileManager.m, PCProject.m: fix in the bundle project related - to the principal class. - -2001-01-11 20:21 robert - - * PCProjectBuilder.m, PCProjectDebugger.m: some more textview - handling...sigh - -2001-01-11 19:42 robert - - * PCProjectBuilder.m, PCProjectDebugger.h, PCProjectDebugger.m: - Added a primitive app/too launcher/debugger - -2001-01-10 16:19 robert - - * PCProjectBuilder.h, PCProjectBuilder.m: Initial support for RPM - SPEC file creation - -2001-01-07 15:43 robert - - * PCProjectManager.h, PCProjectManager.m: some more minor fix and - cleanup work - -2001-01-07 15:11 robert - - * PCBrowserController.m: removed unneeded log - -2001-01-07 15:10 robert - - * PCProjectManager.m: logs only when in DEBUG - -2001-01-07 15:07 robert - - * PCBrowserController.m: opening files using the workspace now - works a little bit better... - -2001-01-07 14:44 robert - - * PCServer.h, PCServer.m: reopening a file in the internal editor - now works w/o crashing - -2001-01-07 13:12 robert - - * PCBrowserController.m, PCProject.m, PCProjectManager.m: reopening - projects is now possible - finally... - -2001-01-06 17:26 robert - - * PCProject.h, PCProject.m, PCServer.m: minor bugfix in the editor - textview and new method to copy files into proj - -2000-11-10 19:27 robert - - * PCProject.h, PCProject.m, PCProjectManager.m: some daily work... - -2000-11-10 15:07 robert - - * ChangeLog: changelog for 0.2.0 - -2000-11-04 17:47 robert - - * PCBundleLoader.m: the bundle path is now depending on the env - variable - -2000-11-04 14:20 robert - - * PCProject.h, PCProject.m: projects are by default not executable - -2000-11-02 11:21 robert - - * PCProject.m, PCProjectBuilder.m: 2 lines of information when - launching... - -2000-11-01 11:38 robert - - * PCBrowserController.m, PCProject.m: removed logs - -2000-10-29 21:17 robert - - * PCProjectDebugger.h, PCProjectDebugger.m: added the class which - will one day become a simple gdb frontend - -2000-10-29 21:15 robert - - * GNUmakefile, PCBrowserController.m, PCProject.h, PCProject.m, - PCProjectBuilder.h, PCProjectBuilder.m, ProjectCenter.h: new style - interface - simpler but hopefully more usable - -2000-10-29 13:00 robert - - * PCBundleLoader.m, PCProject.m, PCProjectBuilder.h, - PCProjectBuilder.m, PCServer.h, PCServer.m: build logging now - works, as well as some enhancements when using the internal - 'editor' - -2000-10-27 19:15 robert - - * PCProject.h, PCProject.m: removed the 2 popups, which are not - needed on the top right side - -2000-10-26 11:12 robert - - * PCProject.m: more image files are allowed now - -2000-10-20 20:13 robert - - * PCProject.h, PCProjectBuilder.m: new build images in the build - panel - -2000-10-20 17:18 robert - - * PCEditorView.m, PCProject.m: Support for protocols in file - creation - -2000-10-15 20:24 robert - - * PCBrowserController.m, PCProject.h, PCProject.m, - PCProjectBuilder.m, PCProjectManager.m: More UI enhancements - not - really functional yet - -2000-10-15 14:27 robert - - * PCBrowserController.m, PCProject.m, PCProjectBuilder.h, - PCProjectBuilder.m, PCProjectManager.m: typo and note about GNUstep - version added - -2000-09-22 19:11 robert - - * PCProject.h, PCProject.m: minor UI changes - -2000-09-22 12:33 robert - - * PCBrowserController.m, PCProject.h, PCProject.m, - PCProjectBuilder.h, PCProjectBuilder.m: some UI modifications - -2000-09-21 09:36 robert - - * PCBundleLoader.m: bundle path issues - -2000-09-21 07:42 robert - - * PCProjectManager.h, PCProjectManager.m: daily work - -2000-09-21 07:20 robert - - * PCFileManager.m: daily work - -2000-09-21 07:16 robert - - * PCEditorView.m: @end is now highlighted, too - -2000-09-20 17:50 robert - - * ChangeLog: Added a changelog - -2000-09-20 17:46 robert - - * GNUmakefile, PCBrowserController.m, PCEditorView.h, - PCEditorView.m, PCProject.h, PCProject.m, PCServer.m, - ProjectCenter.h: Added a first editor with syntax highlighting - -2000-09-20 11:59 robert - - * PCProjectBuilder.m: daily work - -2000-09-20 11:53 robert - - * PCProject.m, PCProjectBuilder.m: minor UI changes (scrollers in - scrollviews) - -2000-09-19 17:39 robert - - * PCProject.m, PCProjectBuilder.m: sizeToCells was missing ... - -2000-09-17 16:40 robert - - * PCProject.h, PCProject.m, PCProjectBuilder.m: Basic preferences - handling - -2000-09-17 14:13 robert - - * PCBrowserController.h, PCBrowserController.m, PCFileManager.h, - PCFileManager.m, PCProject.h, PCProject.m, PCProjectBuilder.h, - PCProjectBuilder.m, PCProjectManager.h, PCProjectManager.m, - PCServer.h, PCServer.m, ProjectCenter.h, Server.h: Implemented a - first 'editor', UI enhancements and other nice things - -2000-09-03 22:10 robert - - * GNUmakefile: renamed libPC into libProjectCenter - -2000-08-28 21:04 robert - - * PCBrowserController.m, PCFileManager.h: The class and header - files are now being displayed - -2000-08-27 21:12 robert - - * Makefile.preamble, PB.project, h.template, m.template, Makefile, - Makefile.postamble, ProjectEditor.h, Server.h, PCServer.h, - PCServer.m, ProjectCenter.h, ProjectDebugger.h, ProjectType.h, - PCProjectManager.m, PCProjectManager.h, PCBundleLoader.h, - PCBundleLoader.m, PreferenceController.h, ProjectBuilder.h, - PCBrowserController.h, PCDataSource.h, PCDataSource.m, PCProject.h, - PCFileManager.h, PCProject.m, PCFileManager.m, FileCreator.h, - GNUmakefile, GNUmakefile.preamble, PCBrowserController.m, - PCProjectBuilder.h, PCProjectBuilder.m: Initial revision - -2000-08-27 21:12 robert - - * Makefile.preamble, PB.project, h.template, m.template, Makefile, - Makefile.postamble, ProjectEditor.h, Server.h, PCServer.h, - PCServer.m, ProjectCenter.h, ProjectDebugger.h, ProjectType.h, - PCProjectManager.m, PCProjectManager.h, PCBundleLoader.h, - PCBundleLoader.m, PreferenceController.h, ProjectBuilder.h, - PCBrowserController.h, PCDataSource.h, PCDataSource.m, PCProject.h, - PCFileManager.h, PCProject.m, PCFileManager.m, FileCreator.h, - GNUmakefile, GNUmakefile.preamble, PCBrowserController.m, - PCProjectBuilder.h, PCProjectBuilder.m: Initial import - diff --git a/PCLib/English.lproj/InfoPlist.strings b/PCLib/English.lproj/InfoPlist.strings deleted file mode 100644 index 34b4debca6db3bb8b2193a3ce1f188efd1f62bea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmbu5%L>9U5Jm6WuL!PG#Mf5bDENR{#DZI?))!ipR)zZU>PZzrsVfP|q?6m3Gxv5^ zRV5iYI%qCmJ8g8;LIJr8F;YzCpgqwLmz)E>mfR~krutYXvRl+iswz=4$Lgr7w$7*n zbPKuE4~a%Cc3vYC4%KJen;CjfYq~^KpL~#bWFr3CYn4&!o7<=csoixr>OXq*=x};Z z_FsoGR2|5V_+dF$%wZiW;Bb-HfTqT2G-VA@S#^lsXQt%slYOnccwKqw<7Jp?#?bmq R - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include - -@class PCProject; - -@protocol FileCreator - -+ (id)sharedCreator; - -- (NSString *)name; -- (NSDictionary *)creatorDictionary; - // Object is the creator and key is the type of the file to be created - -- (NSDictionary *)createFileOfType:(NSString *)type path:(NSString *)path project:(PCProject *)aProject; - // Creates the file and returns a dictionary containing the full path of it as the key and the type as object (and perhaps other files that have been added during this process!); including path extensions etc! - -@end - - diff --git a/PCLib/PCBrowserController.m b/PCLib/PCBrowserController.m deleted file mode 100644 index acb72f0..0000000 --- a/PCLib/PCBrowserController.m +++ /dev/null @@ -1,247 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2000-2002 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCBrowserController.h" -#include "PCEditorController.h" -#include "PCProject.h" -#include "PCFileManager.h" - -NSString *PCBrowserDidSetPathNotification = @"PCBrowserDidSetPathNotification"; - -@implementation PCBrowserController - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [super dealloc]; -} - -- (void)click:(id)sender -{ - if ([[sender selectedCell] isLeaf] && [[self selectedFiles] count] == 1) - { - NSString *ltitle = [[sender selectedCell] stringValue]; - NSString *category = [[sender selectedCellInColumn:0] stringValue]; - - if ([self isEditableCategory:category file: ltitle]) - { - [[NSNotificationCenter defaultCenter] - postNotificationName:@"FileBecomesEditedNotification" - object:ltitle]; - - [project browserDidClickFile:ltitle category:category]; - } - } - - [[NSNotificationCenter defaultCenter] - postNotificationName: PCBrowserDidSetPathNotification - object: self]; -} - -- (void)doubleClick:(id)sender -{ - if ([[sender selectedCell] isLeaf]) - { - NSString *category = [[sender selectedCellInColumn:0] stringValue]; - NSString *fn = [self nameOfSelectedFile]; - NSString *f = [[project projectPath] stringByAppendingPathComponent:fn]; - - if ([self isEditableCategory:category file: fn]) - { - [project browserDidDblClickFile:f category:category]; - } - else if([[NSWorkspace sharedWorkspace] openFile:f] == NO) - { - NSRunAlertPanel(@"Attention!",@"Could not open %@.",@"OK",nil,nil,f); - } - } - else - { - [[PCFileManager fileManager] showAddFileWindow]; - } -} - -- (BOOL)isEditableCategory:(NSString *)category file: (NSString *)title -{ - NSString *k = [[project rootCategories] objectForKey:category]; - - if ([k isEqualToString:PCClasses] || - [k isEqualToString:PCHeaders] || - [k isEqualToString:PCSupportingFiles] || - [k isEqualToString:PCDocuFiles] || - [k isEqualToString:PCOtherSources] || - [k isEqualToString:PCOtherResources] || - [k isEqualToString:PCNonProject]) - { - return YES; - } - - if ([k isEqualToString:PCGSMarkupFiles] - && [[title pathExtension] isEqual: @"gorm"] == NO) - { - return YES; - } - - return NO; -} - -- (void)projectDictDidChange:(NSNotification *)aNotif -{ - if (browser) - { - NSString *browserPath = [browser path]; - NSString *path = [[browserPath componentsSeparatedByString:@"/"] objectAtIndex:1]; - - if (![browserPath isEqualToString:path] - && [[[project editorController] allEditors] count] == 0) - { - [self setPathForFile:nil category:path]; - } - - [browser reloadColumn:[browser lastColumn]]; - } -} - -- (NSString *)nameOfSelectedFile -{ - NSString *name = nil; - - // Doesn't work with subprojects! - if ([browser selectedColumn] != 0) { - name = [[[browser path] componentsSeparatedByString:@"/"] lastObject]; - } - - return name; -} - -- (NSArray *)selectedFiles -{ - NSArray *cells = [browser selectedCells]; - NSMutableArray *files = [[NSMutableArray alloc] initWithCapacity: 1]; - int i; - int count = [cells count]; - - for (i = 0; i < count; i++) - { - [files addObject: [[cells objectAtIndex: i] stringValue]]; - } - - return (NSArray *)files; -} - -- (NSString *)pathOfSelectedFile -{ - return [browser path]; -} - -- (void)setBrowser:(NSBrowser *)aBrowser -{ - browser = aBrowser; - - [browser setTitled:NO]; - - [browser setTarget:self]; - [browser setAction:@selector(click:)]; - [browser setDoubleAction:@selector(doubleClick:)]; - - [browser setMaxVisibleColumns:4]; - [browser setSeparatesColumns:NO]; - [browser setAllowsMultipleSelection:YES]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(projectDictDidChange:) - name:@"ProjectDictDidChangeNotification" - object:project]; -} - -- (void)setProject:(PCProject *)aProj -{ - project = aProj; -} - -- (BOOL)setPathForFile:(NSString *)file category:(NSString *)category -{ - NSArray *comp = [NSArray arrayWithObjects: @"/",category,@"/",file,nil]; - NSString *path = [NSString pathWithComponents:comp]; - BOOL result; - - int selectedColumn; - NSMatrix *columnMatrix = nil; - - if ([[browser path] isEqualToString: path]) - { - return YES; - } - - // Workaround!!! NSBrowser needs fixing!!! - while ((selectedColumn = [browser selectedColumn]) >= 0) - { - columnMatrix = [browser matrixInColumn:selectedColumn]; - [columnMatrix deselectAllCells]; - } - // End of workaround - - result = [browser setPath:path]; - - [[NSNotificationCenter defaultCenter] - postNotificationName:PCBrowserDidSetPathNotification - object:self]; - - return result; -} - -@end - -@implementation PCBrowserController (ProjectBrowserDelegate) - -- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix -{ - NSString *pathToCol = [sender pathToColumn:column]; - NSArray *files = [project contentAtKeyPath:pathToCol]; - int i; - int count = [files count]; - - if( sender != browser ) return; - - for (i = 0; i < count; ++i) - { - NSMutableString *keyPath = [NSMutableString stringWithString:pathToCol]; - id cell; - - [matrix insertRow:i]; - - cell = [matrix cellAtRow:i column:0]; - [cell setStringValue:[files objectAtIndex:i]]; - - [keyPath appendString:@"/"]; - [keyPath appendString:[files objectAtIndex:i]]; - - [cell setLeaf:![project hasChildrenAtKeyPath:keyPath]]; - } -} - -@end diff --git a/PCLib/PCEditor+UInterface.m b/PCLib/PCEditor+UInterface.m deleted file mode 100644 index 1af1b48..0000000 --- a/PCLib/PCEditor+UInterface.m +++ /dev/null @@ -1,138 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2000-2002 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCEditor+UInterface.h" -#include "PCEditorView.h" -#include "PCDefines.h" - -@implementation PCEditor (UInterface) - -- (void)_initUI -{ - NSScrollView *scrollView; - unsigned int style; - NSRect rect; - - /* - * Creating shared text storage - */ - - _storage = [[NSTextStorage alloc] init]; - - /* - * Creating external view's window - */ - - style = NSTitledWindowMask - | NSClosableWindowMask - | NSMiniaturizableWindowMask - | NSResizableWindowMask; - rect = NSMakeRect(100,100,512,320); - - _window = [[NSWindow alloc] initWithContentRect:rect - styleMask:style - backing:NSBackingStoreBuffered - defer:YES]; - [_window setReleasedWhenClosed:NO]; - [_window setMinSize:NSMakeSize(512,320)]; - [_window setDelegate:self]; - rect = [[_window contentView] frame]; - - /* - * Creating external view's scroll view - */ - - scrollView = [[NSScrollView alloc] initWithFrame:rect]; - [scrollView setHasHorizontalScroller: NO]; - [scrollView setHasVerticalScroller: YES]; - [scrollView setAutoresizingMask: (NSViewWidthSizable|NSViewHeightSizable)]; - rect = [[scrollView contentView] frame]; - - /* - * Creating external view - */ - _eView = [self _createEditorViewWithFrame:rect]; - - /* - * Setting up external view / scroll view / window - */ - [scrollView setDocumentView:_eView]; - [[_eView textContainer] setContainerSize:NSMakeSize(rect.size.width, 1e7)]; - RELEASE (_eView); - - [_window makeFirstResponder:_eView]; - [_window setContentView:scrollView]; - RELEASE(scrollView); - - /* - * Creating internal view - * - * The width is actually irrelavent here as the the PCProjectEditor - * will reset it to the width of the content view if its scroll view. - * The height should be large as this will be the height it will be - * will be visible. - */ - _iView = [self _createEditorViewWithFrame:NSMakeRect(0, 0, 1e7, 1e7)]; - RETAIN(_iView); -} - -- (PCEditorView *)_createEditorViewWithFrame:(NSRect)fr -{ - PCEditorView *ev; - NSTextContainer *tc; - NSLayoutManager *lm; - - /* - * setting up the objects needed to manage the view but using the - * shared textStorage. - */ - - lm = [[NSLayoutManager alloc] init]; - tc = [[NSTextContainer alloc] initWithContainerSize:fr.size]; - [lm addTextContainer:tc]; - RELEASE(tc); - - [_storage addLayoutManager:lm]; - RELEASE(lm); - - ev = [[PCEditorView alloc] initWithFrame:fr - textContainer:tc]; - [ev setEditor:self]; - - [ev setMinSize: NSMakeSize( 0, 0)]; - [ev setMaxSize: NSMakeSize(1e7, 1e7)]; - [ev setRichText: YES]; - [ev setEditable: YES]; - [ev setVerticallyResizable: YES]; - [ev setHorizontallyResizable: NO]; - [ev setAutoresizingMask: NSViewWidthSizable|NSViewHeightSizable]; - [ev setTextContainerInset: NSMakeSize( 5, 5)]; - [[ev textContainer] setWidthTracksTextView: YES]; - - return AUTORELEASE(ev); -} - -@end diff --git a/PCLib/PCEditor.h b/PCLib/PCEditor.h deleted file mode 100644 index 9fcecca..0000000 --- a/PCLib/PCEditor.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * PCEditor.h created by probert on 2002-01-29 20:37:28 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _PCEDITOR_H_ -#define _PCEDITOR_H_ - -#include - -@class PCEditorView; -@class PCProjectEditor; - -@interface PCEditor : NSObject -{ - PCEditorView *_iView; // internal (embedded) view - PCEditorView *_eView; // external (window) view - NSTextStorage *_storage; - NSWindow *_window; - NSMutableString *_path; - NSString *_category; - - id _delegate; - - BOOL _isEdited; -} - -- (id)initWithPath:(NSString*)file; -- (void)dealloc; - -- (void)setDelegate:(id)aDelegate; -- (id)delegate; - -- (PCEditorView *)internalView; -- (PCEditorView *)externalView; -- (NSWindow *)editorWindow; -- (NSString *)path; -- (void)setPath:(NSString *)path; -- (NSString *)category; -- (void)setCategory:(NSString *)category; -- (BOOL)isEdited; -- (void)setIsEdited:(BOOL)yn; - -- (void)showInProjectEditor:(PCProjectEditor *)pe; -- (void)show; -- (BOOL)saveFileIfNeeded; -- (BOOL)saveFile; -- (BOOL)saveFileTo:(NSString *)path; -- (BOOL)revertFileToSaved; -- (BOOL)closeFile:(id)sender; - -// Delegates -- (BOOL)editorShouldClose; - -- (BOOL)windowShouldClose:(id)sender; -- (void)windowDidBecomeKey:(NSNotification *)aNotification; -- (void)windowDidResignKey:(NSNotification *)aNotification; - -- (void)textDidChange:(NSNotification *)aNotification; -- (BOOL)becomeFirstResponder; - -@end - -@interface NSObject (PCEditorDelegate) - -- (void)editorDidClose:(id)sender; -- (void)setBrowserPath:(NSString *)file category:(NSString *)category; - -@end - -extern NSString *PCEditorDidBecomeKeyNotification; -extern NSString *PCEditorDidResignKeyNotification; - -#endif // _PCEDITOR_H_ - diff --git a/PCLib/PCEditor.m b/PCLib/PCEditor.m deleted file mode 100644 index b697063..0000000 --- a/PCLib/PCEditor.m +++ /dev/null @@ -1,338 +0,0 @@ - -/* - * PCEditor.m created by probert on 2002-01-29 20:37:27 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "PCEditor.h" -#include "PCDefines.h" -#include "PCEditorView.h" -#include "ProjectComponent.h" -#include "PCProjectEditor.h" - -#include "PCEditor+UInterface.h" - -NSString *PCEditorDidBecomeKeyNotification=@"PCEditorDidBecomeKeyNotification"; -NSString *PCEditorDidResignKeyNotification=@"PCEditorDidResignKeyNotification"; - -@implementation PCEditor - -// =========================================================================== -// ==== Initialisation -// =========================================================================== - -- (id)initWithPath:(NSString*)file -{ - if((self = [super init])) - { - NSString *t; - NSAttributedString *as; - NSDictionary *at; - NSFont *ft; - - ft = [NSFont userFixedPitchFontOfSize:0.0]; - at = [NSDictionary dictionaryWithObject:ft forKey:NSFontAttributeName]; - t = [NSString stringWithContentsOfFile:file]; - as = [[NSAttributedString alloc] initWithString:t attributes:at]; - - _isEdited = NO; - _path = [file copy]; - - [self _initUI]; - - [_window setTitle:file]; - [_storage setAttributedString:as]; - RELEASE(as); - - [_iView setNeedsDisplay:YES]; - [_eView setNeedsDisplay:YES]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(textDidChange:) - name:NSTextDidChangeNotification - object:_eView]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(textDidChange:) - name:NSTextDidChangeNotification - object:_iView]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - RELEASE(_window); - RELEASE(_path); - - RELEASE(_iView); - RELEASE(_storage); - - [super dealloc]; -} - -- (void)setDelegate:(id)aDelegate -{ - _delegate = aDelegate; - [_iView setDelegate: aDelegate]; - [_eView setDelegate: aDelegate]; -} - -- (id)delegate -{ - return _delegate; -} - -// =========================================================================== -// ==== Accessor methods -// =========================================================================== - -- (NSWindow *)editorWindow -{ - return _window; -} - -- (PCEditorView *)internalView -{ - return _iView; -} - -- (PCEditorView *)externalView -{ - return _eView; -} - -- (NSString *)path -{ - return _path; -} - -- (void)setPath:(NSString *)path -{ - [_path autorelease]; - _path = [path copy]; -} - -- (NSString *)category -{ - return _category; -} - -- (void)setCategory:(NSString *)category -{ - _category = [category copy]; -} - -- (BOOL)isEdited -{ - return _isEdited; -} - -- (void)setIsEdited:(BOOL)yn -{ - [_window setDocumentEdited:yn]; - _isEdited = yn; -} - -// =========================================================================== -// ==== Object managment -// =========================================================================== - -- (void)showInProjectEditor:(PCProjectEditor *)pe -{ - [pe setEditorView:_iView]; -} - -- (void)show -{ - [_window makeKeyAndOrderFront:self]; -} - -- (BOOL)saveFileIfNeeded -{ - if ((_isEdited)) - { - return [self saveFile]; - } - - return YES; -} - -- (BOOL)saveFile -{ - [self setIsEdited:NO]; - - // Operate on the text storage! - return [[_storage string] writeToFile:_path atomically:YES]; -} - -- (BOOL)saveFileTo:(NSString *)path -{ - // Operate on the text storage! - return [[_storage string] writeToFile:path atomically:YES]; -} - -- (BOOL)revertFileToSaved -{ - NSString *text = [NSString stringWithContentsOfFile:_path]; - NSAttributedString *as = nil; - NSDictionary *at = nil; - NSFont *ft = nil; - - // This is temporary - ft = [NSFont userFixedPitchFontOfSize:0.0]; - at = [NSDictionary dictionaryWithObject:ft forKey:NSFontAttributeName]; - as = [[NSAttributedString alloc] initWithString:text attributes:at]; - - [self setIsEdited:NO]; - - // Operate on the text storage! - [_storage setAttributedString:as]; - RELEASE(as); - - [_iView setNeedsDisplay:YES]; - [_eView setNeedsDisplay:YES]; - - return YES; -} - -- (BOOL)closeFile:(id)sender -{ - if ([self editorShouldClose]) - { - // Close window first if visible - if ([_window isVisible] && (sender != _window)) - { - [_window close]; - } - - // Remove internal editor view - if ([_iView superview]) - { - [_iView removeFromSuperview]; - } - - // Inform delegate - if (_delegate - && [_delegate respondsToSelector:@selector(editorDidClose:)]) - { - [_delegate editorDidClose:self]; - } - - return YES; - } - return NO; -} - -- (BOOL)editorShouldClose -{ - if (_isEdited) - { - BOOL ret; - - if ([_window isVisible]) - { - [_window makeKeyAndOrderFront:self]; - } - - ret = NSRunAlertPanel(@"Close File", - @"Save changes to\n%@?", - @"Save", @"Don't save", @"Cancel", _path); - - if (ret == YES) - { - if ([self saveFile] == NO) - { - NSRunAlertPanel(@"Close File", - @"Save failed!\nCould not save file '%@'!", - @"OK", nil, nil, _path); - return NO; - } - else - { - return YES; - } - } - else if (ret == NO) // Close but don't save - { - return YES; - } - else // Cancel closing - { - return NO; - } - - [self setIsEdited:NO]; - } - - return YES; -} - -// =========================================================================== -// ==== Window delegate -// =========================================================================== - -- (BOOL)windowShouldClose:(id)sender -{ - if ([sender isEqual:_window]) - { - if ([_iView superview] != nil) - { - // Just close if this file also displayed in internal view - return YES; - } - else - { - return [self closeFile:_window]; - } - } - - return NO; -} - -- (void)windowDidBecomeKey:(NSNotification *)aNotification -{ - if( [[aNotification object] isEqual:_window] ) - { - [[NSNotificationCenter defaultCenter] - postNotificationName:PCEditorDidBecomeKeyNotification object:self]; - } -} - -- (void)windowDidResignKey:(NSNotification *)aNotification -{ - if( [[aNotification object] isEqual:_window] ) - { - [[NSNotificationCenter defaultCenter] - postNotificationName:PCEditorDidResignKeyNotification object:self]; - } -} - -// =========================================================================== -// ==== TextView (_iView, _eView) delegate -// =========================================================================== - -- (void)textDidChange:(NSNotification *)aNotification -{ - [self setIsEdited:YES]; -} - -- (BOOL)becomeFirstResponder -{ - if (_delegate - && [_delegate respondsToSelector:@selector(setBrowserPath:category:)]) - { - [_delegate setBrowserPath:[_path lastPathComponent] category:_category]; - } - - return YES; -} - -@end - diff --git a/PCLib/PCEditorController.h b/PCLib/PCEditorController.h deleted file mode 100644 index be5f58a..0000000 --- a/PCLib/PCEditorController.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * PCEditorController.h created by probert on 2002-02-02 15:28:33 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _PCEDITORCONTROLLER_H_ -#define _PCEDITORCONTROLLER_H_ - -#include - -@class PCProject; -@class PCEditor; - -@interface PCEditorController : NSObject -{ - PCProject *project; - NSMutableDictionary *editorDict; -} - -// =========================================================================== -// ==== Class Methods -// =========================================================================== - -+ (void)openFileInEditor:(NSString *)path; - -// =========================================================================== -// ==== Initialisation -// =========================================================================== - -- (id)init; -- (void)dealloc; - -// =========================================================================== -// ==== Project and Editor handling -// =========================================================================== - -- (void)setProject:(PCProject *)aProject; - -- (PCEditor *)internalEditorForFile:(NSString *)path; -- (PCEditor *)editorForFile:(NSString *)path; -- (PCEditor *)activeEditor; -- (NSArray *)allEditors; -- (void)closeEditorForFile:(NSString *)file; -- (void)closeAllEditors; - - -// =========================================================================== -// ==== File handling -// =========================================================================== - -- (BOOL)saveAllFiles; -- (BOOL)saveFile; -- (BOOL)saveFileAs:(NSString *)file; -- (BOOL)saveFileTo:(NSString *)file; -- (void)closeFile:(id)sender; -- (BOOL)revertFileToSaved; - -// =========================================================================== -// ==== Delegate -// =========================================================================== - -- (void)editorDidClose:(id)sender; -- (void)setBrowserPath:(NSString *)file category:(NSString *)category; - -@end - -#endif // _PCEDITORCONTROLLER_H_ - diff --git a/PCLib/PCEditorController.m b/PCLib/PCEditorController.m deleted file mode 100644 index 2ef8538..0000000 --- a/PCLib/PCEditorController.m +++ /dev/null @@ -1,304 +0,0 @@ -/* - * PCEditorController.m created by probert on 2002-02-02 15:28:31 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "PCProjectEditor.h" -#include "PCEditorController.h" -#include "PCEditorView.h" -#include "PCDefines.h" -#include "PCProject.h" -#include "PCEditor.h" -#include "PCProject+ComponentHandling.h" -#include "PCBrowserController.h" - -@implementation PCEditorController - -// =========================================================================== -// ==== Class Methods -// =========================================================================== - -+ (void)openFileInEditor:(NSString *)path -{ - NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - - if([[ud objectForKey:ExternalEditor] isEqualToString:@"YES"]) - { - NSTask *editorTask; - NSMutableArray *args; - NSString *editor = [ud objectForKey:Editor]; - NSString *app; - NSArray *ea = [editor componentsSeparatedByString: @" "]; - - args = [NSMutableArray arrayWithArray:ea]; - app = [args objectAtIndex: 0]; - - if( [[app pathExtension] isEqualToString:@"app"] ) - { - BOOL ret = [[NSWorkspace sharedWorkspace] openFile:path - withApplication:app]; - - if( ret == NO ) - { - NSLog(@"Could not open %@ using %@",path,app); - } - - return; - } - - editorTask = [[NSTask alloc] init]; - - [editorTask setLaunchPath:app]; - [args removeObjectAtIndex: 0]; - [args addObject:path]; - - [editorTask setArguments:args]; - - AUTORELEASE( editorTask ); - [editorTask launch]; - } - else - { - PCEditor *editor; - - editor = [[PCEditor alloc] initWithPath:path]; - [editor setDelegate:self]; - [editor show]; - } -} - -// =========================================================================== -// ==== Initialisation -// =========================================================================== - -- (id)init -{ - if((self = [super init])) - { - editorDict = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)dealloc -{ - [editorDict removeAllObjects]; - RELEASE( editorDict ); - - [super dealloc]; -} - -// =========================================================================== -// ==== Project and Editor handling -// =========================================================================== - -- (void)setProject:(PCProject *)aProject -{ - project = aProject; -} - -- (PCEditor *)internalEditorForFile:(NSString *)path -{ - PCEditor *editor; - - if((editor = [editorDict objectForKey:path])) - { - return editor; - } - else - { - editor = [[PCEditor alloc] initWithPath:path]; - - [editor setDelegate:self]; - - [editorDict setObject:editor forKey:path]; - //RELEASE(editor); - - return editor; - } -} - -- (PCEditor *)editorForFile:(NSString *)path -{ - NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - - if([[ud objectForKey:ExternalEditor] isEqualToString:@"YES"]) - { - [PCEditorController openFileInEditor:path]; - - return nil; - } - else - { - return [self internalEditorForFile:path]; - } -} - -- (PCEditor *)activeEditor -{ - NSEnumerator *enumerator = [editorDict keyEnumerator]; - PCEditor *editor; - NSString *key; - NSWindow *window; - - while(( key = [enumerator nextObject] )) - { - editor = [editorDict objectForKey:key]; - window = [editor editorWindow]; - - if (([window isVisible] && [window isKeyWindow]) - || ([[editor internalView] superview] - && [[project projectWindow] isKeyWindow])) - { - return editor; - } - } - - return nil; -} - -- (NSArray *)allEditors -{ - return [editorDict allValues]; -} - -- (void)closeEditorForFile:(NSString *)file -{ - PCEditor *editor; - - editor = [editorDict objectForKey:file]; - [editor closeFile:self]; - [editorDict removeObjectForKey:file]; -} - -- (void)closeAllEditors -{ - NSEnumerator *enumerator = [editorDict keyEnumerator]; - PCEditor *editor; - NSString *key; - - while ((key = [enumerator nextObject])) - { - editor = [editorDict objectForKey:key]; - [editor closeFile:self]; - } - [editorDict removeAllObjects]; -} - -// =========================================================================== -// ==== File handling -// =========================================================================== - -- (BOOL)saveAllFiles -{ - NSEnumerator *enumerator = [editorDict keyEnumerator]; - PCEditor *editor; - NSString *key; - BOOL ret = YES; - - while(( key = [enumerator nextObject] )) - { - editor = [editorDict objectForKey:key]; - - if( [editor saveFileIfNeeded] == NO ) - { - ret = NO; - } - } - - return ret; -} - -- (BOOL)saveFile -{ - PCEditor *editor = [self activeEditor]; - - if (editor != nil) - { - return [editor saveFileIfNeeded]; - } - - return NO; -} - -- (BOOL)saveFileAs:(NSString *)file -{ - PCEditor *editor = [self activeEditor]; - - if (editor != nil) - { - BOOL res; - res = [editor saveFileTo:file]; - [editor closeFile:self]; - - [[self internalEditorForFile:file] - showInProjectEditor:[project projectEditor]]; - return res; - } - - return NO; -} - -- (BOOL)saveFileTo:(NSString *)file -{ - PCEditor *editor = [self activeEditor]; - - if (editor != nil) - { - return [editor saveFileTo:file]; - } - - return NO; -} - -- (BOOL)revertFileToSaved -{ - PCEditor *editor = [self activeEditor]; - - if (editor != nil) - { - return [editor revertFileToSaved]; - } - - return NO; -} - -- (void)closeFile:(id)sender -{ - [[self activeEditor] closeFile:self]; -} - -// =========================================================================== -// ==== Delegate -// =========================================================================== - -- (void)editorDidClose:(id)sender -{ - PCEditor *editor = (PCEditor*)sender; - - [editorDict removeObjectForKey:[editor path]]; - - if ([editorDict count]) - { - editor = [editorDict objectForKey: [[editorDict allKeys] lastObject]]; - [editor showInProjectEditor: [project projectEditor]]; - [[project projectWindow] makeFirstResponder:[editor internalView]]; - } - else - { - [[project projectEditor] setEditorView:nil]; - [[project browserController] projectDictDidChange:nil]; - } -} - -- (void)setBrowserPath:(NSString *)file category:(NSString *)category -{ - [[project browserController] setPathForFile:file category:category]; -} - -@end diff --git a/PCLib/PCFileManager+UInterface.m b/PCLib/PCFileManager+UInterface.m deleted file mode 100644 index de30cd5..0000000 --- a/PCLib/PCFileManager+UInterface.m +++ /dev/null @@ -1,173 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2000-2002 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCFileManager+UInterface.h" -#include "PCDefines.h" - -#include - -@implementation PCFileManager (UInterface) - -- (void)_initUI -{ - NSView *_c_view; - unsigned int style = NSTitledWindowMask - | NSClosableWindowMask - | NSMiniaturizableWindowMask; - NSBox *box; - NSRect _w_frame; - NSMatrix* matrix; - id button; - NSButtonCell* buttonCell = [[[NSButtonCell alloc] init] autorelease]; - id textField; - NSScrollView *scrollView; - - /* - * the file creation window - * - */ - - _w_frame = NSMakeRect(100,100,320,240); - newFileWindow = [[NSWindow alloc] initWithContentRect:_w_frame - styleMask:style - backing:NSBackingStoreBuffered - defer:NO]; - [newFileWindow setMinSize:NSMakeSize(320,160)]; - [newFileWindow setTitle:@"New File..."]; - - box = [[NSBox alloc] init]; - [box setFrame:NSMakeRect(16,172,288,56)]; - fileTypePopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(32,2,216,20) - pullsDown:NO]; - [fileTypePopup setAutoresizingMask: (NSViewWidthSizable)]; - [fileTypePopup setTarget:self]; - [fileTypePopup setAction:@selector(popupChanged:)]; - [box setTitle:@"File Type"]; - [box setTitlePosition:NSAtTop]; - [box setBorderType:NSGrooveBorder]; - [box setAutoresizingMask: (NSViewWidthSizable | NSViewMinYMargin)]; - - [box addSubview:fileTypePopup]; - RELEASE(fileTypePopup); - - _c_view = [newFileWindow contentView]; - - _w_frame = NSMakeRect (16,96,288,68); - scrollView = [[NSScrollView alloc] initWithFrame:_w_frame]; - [scrollView setHasHorizontalScroller:NO]; - [scrollView setHasVerticalScroller: YES]; - [scrollView setBorderType: NSBezelBorder]; - [scrollView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; - - // This is a placeholder! - _w_frame = [[scrollView contentView] frame]; - descrView = [[NSTextView alloc] initWithFrame:_w_frame]; - [descrView setMinSize: NSMakeSize (0, 0)]; - [descrView setMaxSize:NSMakeSize(1e7, 1e7)]; - [descrView setRichText:NO]; -#ifdef GNUSTEP_BASE_VERSION - [descrView setEditable:NO]; -#endif - [descrView setSelectable:YES]; - [descrView setVerticallyResizable:YES]; - [descrView setHorizontallyResizable:NO]; - [descrView setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; - [[descrView textContainer] setWidthTracksTextView:YES]; - [scrollView setDocumentView:descrView]; - RELEASE(descrView); - - _w_frame.size = NSMakeSize([scrollView contentSize].width,1e7); - [[descrView textContainer] setContainerSize:_w_frame.size]; - - [_c_view addSubview:scrollView]; - RELEASE(scrollView); - - [_c_view addSubview:box]; - RELEASE(box); - - /* - * Button matrix - */ - - _w_frame = NSMakeRect(188,16,116,24); - matrix = [[NSMatrix alloc] initWithFrame: _w_frame - mode: NSHighlightModeMatrix - prototype: buttonCell - numberOfRows: 1 - numberOfColumns: 2]; - [matrix setSelectionByRect:YES]; - [matrix setAutoresizingMask: (NSViewMinXMargin | NSViewMaxYMargin)]; - [matrix setTarget:self]; - [matrix setAction:@selector(buttonsPressed:)]; - [matrix setIntercellSpacing: NSMakeSize(8,2)]; - [_c_view addSubview:matrix]; - RELEASE(matrix); - - button = [matrix cellAtRow:0 column:0]; - [button setTag:0]; - [button setStringValue:@"Cancel"]; - [button setBordered:YES]; - [button setButtonType:NSMomentaryPushButton]; - - button = [matrix cellAtRow:0 column:1]; - [button setTag:1]; - [button setStringValue:@"OK"]; - [button setBordered:YES]; - [button setButtonType:NSMomentaryPushButton]; - - /* - * The name of the new file... - */ - - // Status message - textField = [[NSTextField alloc] initWithFrame:NSMakeRect(16,56,48,21)]; - [textField setAlignment: NSLeftTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue:@"Name:"]; - [textField setAutoresizingMask: (NSViewMaxXMargin | - NSViewWidthSizable | - NSViewMinYMargin)]; - [_c_view addSubview:textField]; - RELEASE(textField); - - // Target - newFileName = [[NSTextField alloc] initWithFrame:NSMakeRect(56,56,248,21)]; - [newFileName setAlignment: NSLeftTextAlignment]; - [newFileName setBordered: YES]; - [newFileName setBezeled: YES]; - [newFileName setEditable: YES]; - [newFileName setDrawsBackground: YES]; - [newFileName setStringValue:@"NewFile"]; - [newFileName setAutoresizingMask: (NSViewWidthSizable | NSViewMinYMargin)]; - [_c_view addSubview:newFileName]; - RELEASE(newFileName); -} - -@end - diff --git a/PCLib/PCHistoryController.h b/PCLib/PCHistoryController.h deleted file mode 100644 index 6ede1c0..0000000 --- a/PCLib/PCHistoryController.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * PCHistoryController.h created by probert on 2002-02-21 14:28:09 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _PCHISTORYCONTROLLER_H_ -#define _PCHISTORYCONTROLLER_H_ - -#include - -@class PCProject; - -@interface PCHistoryController : NSObject -{ - id browser; - PCProject *project; - NSMutableArray *editedFiles; -} - -- (id)initWithProject:(PCProject *)aProj; -- (void)dealloc; - -- (void)click:(id)sender; - -- (void)setBrowser:(NSBrowser *)aBrowser; - -- (void)historyDidChange:(NSNotification *)notif; - -@end - -@interface PCHistoryController (HistoryBrowserDelegate) - -- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix; -- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(int)row column:(int)column; -- (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(int)column; - -@end - -#endif // _PCHISTORYCONTROLLER_H_ - diff --git a/PCLib/PCHistoryController.m b/PCLib/PCHistoryController.m deleted file mode 100644 index ecc2975..0000000 --- a/PCLib/PCHistoryController.m +++ /dev/null @@ -1,121 +0,0 @@ -/* - * PCHistoryController.m created by probert on 2002-02-21 14:28:08 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "PCHistoryController.h" -#include "PCDefines.h" -#include "PCProject.h" - -@implementation PCHistoryController - -- (id)initWithProject:(PCProject *)aProj -{ - NSAssert(aProj, @"Project is mandatory!"); - - if((self = [super init])) - { - project = aProj; - - editedFiles = [[NSMutableArray alloc] init]; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - RELEASE(editedFiles); - - [super dealloc]; -} - -- (void)click:(id)sender -{ - NSString *file = [[[sender selectedCell] stringValue] copy]; - - [project browserDidClickFile:file category:nil]; - - /* This causes a problem because we try to reloadColumn on the browser - in the middle of someone clicking in it (-click: sends notification - which is received by histortDidChange:, etc. Is there a better - way around this? */ - //[[NSNotificationCenter defaultCenter] postNotificationName:@"FileBecomesEditedNotification" object:file]; - - AUTORELEASE(file); -} - -- (void)setBrowser:(NSBrowser *)aBrowser -{ - NSAssert(browser==nil,@"The browser is already set!"); - - browser = aBrowser; - - [browser setTitled:NO]; - - [browser setTarget:self]; - [browser setAction:@selector(click:)]; - - [browser setMaxVisibleColumns:1]; - [browser setAllowsMultipleSelection:NO]; - - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(historyDidChange:) - name:@"FileBecomesEditedNotification" - object:nil]; -} - -- (void)historyDidChange:(NSNotification *)notif -{ - NSString *file = [notif object]; - - if( [editedFiles containsObject:file] == YES ) - { - [editedFiles removeObject:file]; - } - - [editedFiles insertObject:file atIndex:0]; - [browser reloadColumn:0]; -} - -@end - -@implementation PCHistoryController (HistoryBrowserDelegate) - -- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix -{ - int i; - int count = [editedFiles count]; - - if( sender != browser ) return; - - for( i=0; i - -@interface PCMakefileFactory : NSObject -{ - NSMutableString *mfile; - NSString *pnme; -} - -+ (PCMakefileFactory *)sharedFactory; - -- (void)createMakefileForProject:(NSString *)prName; - -- (void)appendString:(NSString *)aString; - -- (void)appendHeaders:(NSArray *)array; -- (void)appendClasses:(NSArray *)array; -- (void)appendOtherSources:(NSArray *)array; - -- (void)appendInstallDir:(NSString*)dir; - -- (void)appendResources; -- (void)appendResourceItems:(NSArray *)array; - -- (void)appendSubprojects:(NSArray*)array; - -- (void)appendTailForApp; -- (void)appendTailForLibrary; -- (void)appendTailForTool; -- (void)appendTailForBundle; -- (void)appendTailForGormApp; - -- (NSData *)encodedMakefile; - -@end - -@interface PCMakefileFactory (ApplicationProject) - -- (void)appendApplication; -- (void)appendAppIcon:(NSString*)icn; -- (void)appendGuiLibraries:(NSArray*)array; - -@end - -@interface PCMakefileFactory (BundleProject) - -- (void)appendBundle; -- (void)appendPrincipalClass:(NSString *)cname; -- (void)appendBundleInstallDir:(NSString*)dir; -- (void)appendLibraries:(NSArray*)array; - -@end - -@interface PCMakefileFactory (LibraryProject) - -- (void)appendLibrary; -- (void)appendLibraryInstallDir:(NSString*)dir; -- (void)appendLibraryLibraries:(NSArray*)array; -- (void)appendLibraryHeaders:(NSArray*)array; -- (void)appendLibraryClasses:(NSArray *)array; -- (void)appendLibraryOtherSources:(NSArray *)array; - -@end - -@interface PCMakefileFactory (ToolProject) - -- (void)appendTool; -- (void)appendToolIcon:(NSString*)icn; -- (void)appendToolLibraries:(NSArray*)array; - -@end - -#endif // _PCMAKEFILEFACTORY_H_ - diff --git a/PCLib/PCProject+ComponentHandling.h b/PCLib/PCProject+ComponentHandling.h deleted file mode 100644 index aef7c2a..0000000 --- a/PCLib/PCProject+ComponentHandling.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * PCProject+ComponentHandling.h created by probert on 2002-02-10 09:51:00 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _PCPROJECT_COMPONENTHANDLING_H_ -#define _PCPROJECT_COMPONENTHANDLING_H_ - -#include - -// HACK! -#include "PCProject.h" - -@interface PCProject (ComponentHandling) - -- (void)showBuildView:(id)sender; -- (void)showRunView:(id)sender; -- (void)showEditorView:(id)sender; - -- (void)runSelectedTarget:(id)sender; - -- (void)showInspector:(id)sender; - -- (id)updatedAttributeView; -- (id)updatedProjectView; -- (id)updatedFilesView; - -- (void)showBuildTargetPanel:(id)sender; -- (void)setHost:(id)sender; -- (void)setArguments:(id)sender; - -- (NSDictionary *)buildOptions; - -- (BOOL)isEditorActive; - -@end - -#endif // _PCPROJECT_COMPONENTHANDLING_H_ - diff --git a/PCLib/PCProject.h b/PCLib/PCProject.h deleted file mode 100644 index 4d09d48..0000000 --- a/PCLib/PCProject.h +++ /dev/null @@ -1,317 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2000-2002 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#ifndef _PCPROJECT_H -#define _PCPROJECT_H - -#include - -#ifndef IMAGE -#define IMAGE(X) [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForImageResource:(X)]] autorelease] -#endif - -//============================================================================= -// ==== DEFINES -//============================================================================= - -#define BUILD_ARGS_KEY @"BuildArgsKey" -#define BUILD_HOST_KEY @"BuildHostKey" - -#define TARGET_MAKE @"Make" -#define TARGET_MAKE_DEBUG @"MakeDebug" -#define TARGET_MAKE_PROFILE @"MakeProfile" -#define TARGET_MAKE_INSTALL @"MakeInstall" -#define TARGET_MAKE_CLEAN @"MakeClean" -#define TARGET_MAKE_RPM @"MakeRPM" - -#define BUILD_TAG 0 -#define LAUNCH_TAG 1 -#define EDITOR_TAG 2 -#define FILES_TAG 3 -#define FIND_TAG 4 -#define INSPECTOR_TAG 5 - -//============================================================================= -// ==== Not used yet -//============================================================================= - -#define TOUCHED_NOTHING (0) -#define TOUCHED_EVERYTHING (1 << 0) -#define TOUCHED_PROJECT_NAME (1 << 1) -#define TOUCHED_LANGUAGE (1 << 2) -#define TOUCHED_PROJECT_TYPE (1 << 3) -#define TOUCHED_INSTALL_DIR (1 << 4) -#define TOUCHED_ICON_NAMES (1 << 5) -#define TOUCHED_FILES (1 << 6) -#define TOUCHED_MAINNIB (1 << 7) -#define TOUCHED_PRINCIPALCLASS (1 << 8) -#define TOUCHED_TARGETS (1 << 9) -#define TOUCHED_PB_PROJECT (1 << 10) -#define TOUCHED_SYST_EXT (1 << 11) -#define TOUCHED_EXTENSION (1 << 12) -#define TOUCHED_PATHS (1 << 13) - -typedef int PCProjInfoBits; - -//============================================================================= -// ==== Project keys -//============================================================================= - -static NSString * const PCClasses = @"CLASS_FILES"; -static NSString * const PCHeaders = @"HEADER_FILES"; -static NSString * const PCOtherSources = @"OTHER_SOURCES"; -static NSString * const PCGModels = @"INTERFACES"; -static NSString * const PCImages = @"IMAGES"; -static NSString * const PCOtherResources = @"OTHER_RESOURCES"; -static NSString * const PCSubprojects = @"SUBPROJECTS"; -static NSString * const PCDocuFiles = @"DOCU_FILES"; -static NSString * const PCSupportingFiles = @"SUPPORTING_FILES"; -static NSString * const PCLibraries = @"LIBRARIES"; -static NSString * const PCNonProject = @"NON_PROJECT_FILES"; -static NSString * const PCGSMarkupFiles = @"INTERFACES"; - -static NSString * const PCCompilerOptions = @"COMPILEROPTIONS"; -static NSString * const PCLinkerOptions = @"LINKEROPTIONS"; -static NSString * const PCProjectName = @"PROJECT_NAME"; -static NSString * const PCProjType = @"PROJECT_TYPE"; -static NSString * const PCPrincipalClass = @"PRINCIPAL_CLASS"; -static NSString * const PCAppIcon = @"APPLICATIONICON"; -static NSString * const PCAppClass = @"APPCLASS"; -static NSString * const PCToolIcon = @"TOOLICON"; -static NSString * const PCProjectBuilderClass = @"PROJECT_BUILDER"; -static NSString * const PCMainGModelFile = @"MAININTERFACE"; -static NSString * const PCPackageName = @"PACKAGE_NAME"; -static NSString * const PCLibraryVar = @"LIBRARY_VAR"; -static NSString * const PCVersion = @"PROJECT_VERSION"; -static NSString * const PCSummary = @"PROJECT_SUMMARY"; -static NSString * const PCDescription = @"PROJECT_DESCRIPTION"; -static NSString * const PCRelease = @"PROJECT_RELEASE"; -static NSString * const PCCopyright = @"PROJECT_COPYRIGHT"; -static NSString * const PCGroup = @"PROJECT_GROUP"; -static NSString * const PCSource = @"PROJECT_SOURCE"; -static NSString * const PCInstallDir = @"INSTALLDIR"; -static NSString * const PCBuildTool = @"BUILDTOOL"; - -@class PCProjectBuilder; -@class PCProjectDebugger; -@class PCProjectEditor; -@class PCEditorController; -@class PCButton; - -#ifndef GNUSTEP_BASE_VERSION -@protocol ProjectBuilder; -#else -#include -#endif - -@interface PCProject : NSObject -{ - id projectWindow; - id delegate; - id projectManager; - id browserController; - id historyController; - - PCProjectBuilder *projectBuilder; - PCProjectDebugger *projectDebugger; - PCProjectEditor *projectEditor; - PCEditorController *editorController; - NSBox *box; - - NSImageView *fileIcon; - NSTextField *fileIconTitle; - - id projectAttributeInspectorView; - NSTextField *ccOptField; - NSTextField *ldOptField; - NSTextField *installPathField; - NSTextField *toolField; - NSTextField *headersField; - NSTextField *libsField; - - id projectProjectInspectorView; - NSTextField *projectTypeField; - NSTextField *projectNameField; - NSTextField *projectLanguageField; - - id projectFileInspectorView; - NSImageView *fileIconView; - NSTextField *fileNameField; - NSButton *changeFileNameButton; - - id buildTargetPanel; - id buildTargetHostField; - id buildTargetArgsField; - - NSString *projectName; - NSString *projectPath; - NSMutableDictionary *projectDict; - - NSArray *rootObjects; - NSArray *rootKeys; - NSDictionary *rootCategories; // Needs to be initialised by subclasses! - NSMutableDictionary *buildOptions; - - BOOL editorIsActive; -} - -//============================================================================= -// ==== Init and free -//============================================================================= - -- (id)init; -- (id)initWithProjectDictionary:(NSDictionary *)dict path:(NSString *)path; - -- (void)dealloc; - -//============================================================================= -// ==== Accessor methods -//============================================================================= - -- (id)browserController; -- (NSString *)selectedRootCategory; - -- (NSArray *)fileExtensionsForCategory:(NSString *)key; - -- (void)setProjectName:(NSString *)aName; -- (NSString *)projectName; -- (NSWindow *)projectWindow; - -- (Class)principalClass; - -- (PCProjectEditor *)projectEditor; -- (PCEditorController *)editorController; - -//============================================================================= -// ==== Delegate and manager -//============================================================================= - -- (id)delegate; -- (void)setDelegate:(id)aDelegate; - -- (void)setProjectBuilder:(id)aBuilder; -- (id)projectBuilder; - -//============================================================================= -// ==== To be overriden! -//============================================================================= - -- (Class)builderClass; - -- (BOOL)writeMakefile; - // Subclasses need to call this before their customised implementation! - -- (NSArray *)sourceFileKeys; -- (NSArray *)resourceFileKeys; -- (NSArray *)otherKeys; -- (NSArray *)buildTargets; - -- (NSString *)projectDescription; - // Returns a string describing the project type - -- (BOOL)isExecutable; - // Returns NO by default. - -//============================================================================= -// ==== File Handling -//============================================================================= - -- (void)browserDidClickFile:(NSString *)fileName category:(NSString*)c; -- (void)browserDidDblClickFile:(NSString *)fileName category:(NSString*)c; - -- (BOOL)doesAcceptFile:(NSString *)file forKey:(NSString *)key; - // Returns YES if type is a valid key and file is not contained in the project already - -- (void)addFile:(NSString *)file forKey:(NSString *)key; -- (void)addFile:(NSString *)file forKey:(NSString *)key copy:(BOOL)yn; - -- (void)removeFile:(NSString *)file forKey:(NSString *)key; -- (BOOL)removeSelectedFilesPermanently:(BOOL)yn; -- (void)renameFile:(NSString *)aFile; - -- (BOOL)assignProjectDict:(NSDictionary *)aDict; -- (NSDictionary *)projectDict; - -- (void)setProjectPath:(NSString *)aPath; -- (NSString *)projectPath; - -- (NSDictionary *)rootCategories; - -- (BOOL)save; -- (BOOL)saveAt:(NSString *)projPath; - -- (BOOL)writeSpecFile; - -//============================================================================= -// ==== Subprojects -//============================================================================= - -- (NSArray *)subprojects; -- (void)addSubproject:(PCProject *)aSubproject; -- (PCProject *)superProject; -- (PCProject *)rootProject; -- (void)newSubprojectNamed:(NSString *)aName; -- (void)removeSubproject:(PCProject *)aSubproject; - -- (BOOL)isSubProject; - -//============================================================================= -// ==== Project Handling -//============================================================================= - -- (void)updateValuesFromProjectDict; - // Updates all values in the inspector based on the current project dict - -- (void)changeCommonProjectEntry:(id)sender; - // Gets invoked upon UI interaction in the inspector - -- (BOOL)isValidDictionary:(NSDictionary *)aDict; -- (void)updateProjectDict; - -- (void)validateProjectDict; - // Validates the project dictionary and inserts missing keys if needed. It - // calls isValidDictionary to validate. - -@end - -@interface PCProject (ProjectKeyPaths) - -- (NSArray *)contentAtKeyPath:(NSString *)keyPath; -- (BOOL)hasChildrenAtKeyPath:(NSString *)keyPath; -- (NSString *)projectKeyForKeyPath:(NSString *)kp; - -@end - -@interface PCProject (ProjectWindowDelegate) - -- (void)windowDidResignKey:(NSNotification *)aNotification; -- (void)windowDidBecomeKey:(NSNotification *)aNotification; -- (void)windowDidBecomeMain:(NSNotification *)aNotification; -- (void)windowWillClose:(NSNotification *)aNotification; - -@end - -#endif diff --git a/PCLib/PCProject.m b/PCLib/PCProject.m deleted file mode 100644 index 9e113ce..0000000 --- a/PCLib/PCProject.m +++ /dev/null @@ -1,871 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2000-2002 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCProject.h" -#include "PCDefines.h" -#include "ProjectBuilder.h" -#include "PCProject+ComponentHandling.h" -#include "PCProjectBuilder.h" -#include "PCProjectEditor.h" -#include "PCProjectDebugger.h" -#include "PCEditor.h" -#include "PCEditorController.h" -#include "PCHistoryController.h" -#include "PCBrowserController.h" - -#include "PCProject+UInterface.h" - -@implementation PCProject - -//============================================================================== -// ==== Init and free -//============================================================================== - -- (id)init -{ - if ((self = [super init])) - { - buildOptions = [[NSMutableDictionary alloc] init]; - [self _initUI]; - - editorController = [[PCEditorController alloc] init]; - [editorController setProject:self]; - } - return self; -} - -- (id)initWithProjectDictionary:(NSDictionary *)dict path:(NSString *)path; -{ - NSAssert(dict,@"No valid project dictionary!"); - - if ((self = [self init])) - { - if ([[path lastPathComponent] isEqualToString:@"PC.project"]) - { - projectPath = [[path stringByDeletingLastPathComponent] copy]; - } - else - { - projectPath = [path copy]; - } - - if(![self assignProjectDict:dict]) - { - NSLog(@"<%@ %x>: could not load the project...",[self class],self); - [self autorelease]; - return nil; - } - } - return self; -} - -- (void)dealloc -{ - RELEASE(projectName); - RELEASE(projectPath); - RELEASE(projectDict); - - if (projectBuilder) RELEASE(projectBuilder); - if (projectDebugger) RELEASE(projectDebugger); - if (projectEditor) RELEASE(projectEditor); - - RELEASE(historyController); - RELEASE(browserController); - RELEASE(editorController); - - RELEASE(buildTargetPanel); // ? - - RELEASE(buildOptions); - - RELEASE(projectAttributeInspectorView); - RELEASE(projectProjectInspectorView); - RELEASE(projectFileInspectorView); - - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [super dealloc]; -} - -//============================================================================== -// ==== Accessor methods -//============================================================================== - -- (id)browserController -{ - return browserController; -} - -- (NSString *)selectedRootCategory -{ - NSString *_path = [browserController pathOfSelectedFile]; - - return [self projectKeyForKeyPath:_path]; -} - -- (NSArray *)fileExtensionsForCategory:(NSString *)key -{ - if ([key isEqualToString:PCGModels]) { - return [NSArray arrayWithObjects:@"gmodel",@"gorm",nil]; - } - if ([key isEqualToString:PCGSMarkupFiles]) { - return [NSArray arrayWithObjects:@"gsmarkup",nil]; - } - else if ([key isEqualToString:PCClasses]) { - return [NSArray arrayWithObjects:@"m",nil]; - } - else if ([key isEqualToString:PCHeaders]) { - return [NSArray arrayWithObjects:@"h",nil]; - } - else if ([key isEqualToString:PCOtherSources]) { - return [NSArray arrayWithObjects:@"c",@"C",nil]; - } - else if ([key isEqualToString:PCLibraries]) { - return [NSArray arrayWithObjects:@"so",@"a",@"lib",nil]; - } - else if ([key isEqualToString:PCSubprojects]) { - return [NSArray arrayWithObjects:@"subproj",nil]; - } - else if ([key isEqualToString:PCImages]) { - return [NSImage imageFileTypes]; - } - - return nil; -} - -- (void)setProjectName:(NSString *)aName -{ - AUTORELEASE(projectName); - projectName = [aName copy]; - [fileIconTitle setStringValue:projectName]; -} - -- (NSString *)projectName -{ - return projectName; -} - -- (NSWindow *)projectWindow -{ - return projectWindow; -} - -- (Class)principalClass -{ - return [self class]; -} - -- (PCProjectEditor *)projectEditor -{ - return projectEditor; -} - -- (PCEditorController*)editorController -{ - return editorController; -} - -//============================================================================== -// ==== Delegate and manager -//============================================================================== - -- (id)delegate -{ - return delegate; -} - -- (void)setDelegate:(id)aDelegate -{ - delegate = aDelegate; -} - -- (void)setProjectBuilder:(id)aBuilder -{ - // This is our owner, don't retain. - //projectManager = aBuilder; - ASSIGN(projectManager, aBuilder); -} - -- (id)projectBuilder -{ - return projectManager; -} - -//============================================================================== -// ==== To be overriden -//============================================================================== - -- (Class)builderClass -{ - return Nil; -} - -- (BOOL)writeMakefile -{ - NSString *mf = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; - NSString *bu = [projectPath stringByAppendingPathComponent:@"GNUmakefile~"]; - NSFileManager *fm = [NSFileManager defaultManager]; - - if( [fm isReadableFileAtPath:mf] ) { - if( [fm isWritableFileAtPath:bu] ) { - [fm removeFileAtPath:bu handler:nil]; - } - - if (![fm copyPath:mf toPath:bu handler:nil]) { - NSRunAlertPanel(@"Attention!", - @"Could not keep a backup of the GNUMakefile!", - @"OK",nil,nil); - } - } - - return YES; -} - -- (NSArray *)sourceFileKeys -{ - return nil; -} - -- (NSArray *)resourceFileKeys -{ - return nil; -} - -- (NSArray *)otherKeys -{ - return nil; -} - -- (NSArray *)buildTargets -{ - return nil; -} - -- (NSString *)projectDescription -{ - return @"Abstract PCProject class!"; -} - -- (BOOL)isExecutable -{ - return NO; -} - -//============================================================================= -// ==== File Handling -//============================================================================= - -- (void)browserDidClickFile:(NSString *)fileName category:(NSString*)c -{ - NSString *p = [[self projectPath] stringByAppendingPathComponent:fileName]; - PCEditor *e; - - // Set the name in the inspector - [fileNameField setStringValue:fileName]; - - // Show the file in the internal editor! - e = [editorController internalEditorForFile:p]; - - if( e == nil ) - { - NSLog(@"No editor for file '%@'...",p); - return; - } - - [self showEditorView:self]; - [e setCategory:c]; - [e showInProjectEditor:projectEditor]; - - [projectWindow makeFirstResponder:(NSResponder*)[projectEditor editorView]]; -} - -- (void)browserDidDblClickFile:(NSString *)fileName category:(NSString*)c -{ - PCEditor *e; - - e = [editorController editorForFile:fileName]; - - if (e) - { - [e setCategory:c]; - [e show]; - } -} - -- (BOOL)doesAcceptFile:(NSString *)file forKey:(NSString *)type -{ - if ([[projectDict allKeys] containsObject:type]) { - NSArray *files = [projectDict objectForKey:type]; - - if (![files containsObject:file]) { - return YES; - } - } - - return NO; -} - -- (void)addFile:(NSString *)file forKey:(NSString *)type -{ - [self addFile:file forKey:type copy:NO]; -} - -- (void)addFile:(NSString *)file forKey:(NSString *)type copy:(BOOL)yn -{ - NSArray *types = [projectDict objectForKey:type]; - NSMutableArray *files = [NSMutableArray arrayWithArray:types]; - NSString *lpc = [file lastPathComponent]; - NSMutableString *newFile = [NSMutableString stringWithString:lpc]; - - if ([type isEqualToString:PCLibraries]) { - [newFile deleteCharactersInRange:NSMakeRange(0,3)]; - newFile = (NSMutableString*)[newFile stringByDeletingPathExtension]; - } - - if ([files containsObject:newFile]) { - NSRunAlertPanel(@"Attention!", - @"The file %@ is already part of this project!", - @"OK",nil,nil,newFile); - return; - } - -#ifdef DEBUG - NSLog(@"<%@ %x>: adding file %@ for key %@",[self class],self,newFile,type); -#endif// DEBUG - - // Add the new file - [files addObject:newFile]; - [projectDict setObject:files forKey:type]; - - [projectWindow setDocumentEdited:YES]; - - if (yn) { - NSFileManager *manager = [NSFileManager defaultManager]; - NSString *destination = [[self projectPath] stringByAppendingPathComponent:newFile]; - - if (![manager copyPath:file toPath:destination handler:nil]) { - NSRunAlertPanel(@"Attention!", - @"The file %@ could not be copied to %@!", - @"OK",nil,nil,newFile,destination); - } - } - - [[NSNotificationCenter defaultCenter] postNotificationName:@"ProjectDictDidChangeNotification" object:self]; -} - -- (void)removeFile:(NSString *)file forKey:(NSString *)key -{ - NSMutableArray *array; - NSMutableString *filePath; - - if (!file || !key) { - return; - } - - // Close editor - filePath = [[NSMutableString alloc] initWithString:projectPath]; - [filePath appendString:@"/"]; - [filePath appendString:file]; - [editorController closeEditorForFile:filePath]; - [filePath release]; - - array = [NSMutableArray arrayWithArray:[projectDict objectForKey:key]]; - [array removeObject:file]; - [projectDict setObject:array forKey:key]; - - [projectWindow setDocumentEdited:YES]; -} - -- (BOOL)removeSelectedFilesPermanently:(BOOL)yn -{ - NSEnumerator *files = [[browserController selectedFiles] objectEnumerator]; - NSString *file = nil; - NSString *key = nil; - NSString *otherKey = nil; - NSString *ext = nil; - NSString *fn = nil; - BOOL ret = NO; - - if (!files) - { - return NO; - } - - key = [self projectKeyForKeyPath:[browserController pathOfSelectedFile]]; - - while ((file = [files nextObject])) - { - [self removeFile:file forKey:key]; - - if ([key isEqualToString:PCClasses]) - { - otherKey = PCHeaders; - ext = [NSString stringWithString:@"h"]; - - fn = [file stringByDeletingPathExtension]; - fn = [fn stringByAppendingPathExtension:ext]; - - if ([self doesAcceptFile:fn forKey:otherKey] == NO) - { - ret = NSRunAlertPanel(@"Removing Header?", - @"Should %@ be removed from the project %@ as well?", - @"Yes", @"No", nil, - fn, [self projectName]); - } - } - else if ([key isEqualToString:PCHeaders]) - { - otherKey = PCClasses; - ext = [NSString stringWithString:@"m"]; - - fn = [file stringByDeletingPathExtension]; - fn = [fn stringByAppendingPathExtension:ext]; - - if ([self doesAcceptFile:fn forKey:otherKey] == NO) - { - ret = NSRunAlertPanel(@"Removing Class?", - @"Should %@ be removed from the project %@ as well?", - @"Yes", @"No", nil, - fn, [self projectName]); - } - } - - if (ret) - { - [self removeFile:fn forKey:otherKey]; - } - - // Remove the file permanently?! - if (yn) - { - NSString *pth = [projectPath stringByAppendingPathComponent:file]; - - [[NSFileManager defaultManager] removeFileAtPath:pth handler:nil]; - - if (ret) - { - pth = [projectPath stringByAppendingPathComponent:fn]; - [[NSFileManager defaultManager] removeFileAtPath:pth handler:nil]; - } - } - } - - [[NSNotificationCenter defaultCenter] - postNotificationName:@"ProjectDictDidChangeNotification" object:self]; - - return YES; -} - -- (void)renameFile:(NSString *)aFile -{ -} - -- (BOOL)assignProjectDict:(NSDictionary *)aDict -{ - NSAssert(aDict,@"No valid project dictionary!"); - - [projectDict autorelease]; - projectDict = [[NSMutableDictionary alloc] initWithDictionary:aDict]; - - [self setProjectName:[projectDict objectForKey:PCProjectName]]; - [projectWindow setTitle:[NSString stringWithFormat: @"%@ - %@", - projectName, - [projectPath stringByAbbreviatingWithTildeInPath]]]; - - // Update the interface - [self updateValuesFromProjectDict]; - - [[NSNotificationCenter defaultCenter] - postNotificationName:@"ProjectDictDidChangeNotification" - object:self]; - - return YES; -} - -- (NSDictionary *)projectDict -{ - return (NSDictionary *)projectDict; -} - -- (void)setProjectPath:(NSString *)aPath -{ - [projectPath autorelease]; - projectPath = [aPath copy]; -} - -- (NSString *)projectPath -{ - return projectPath; -} - -- (NSDictionary *)rootCategories -{ - return rootCategories; -} - -- (BOOL)save -{ - NSString *file = [[projectPath stringByAppendingPathComponent:projectName] - stringByAppendingPathExtension:@"pcproj"]; - NSString *backup = [file stringByAppendingPathExtension:@"backup"]; - NSFileManager *fm = [NSFileManager defaultManager]; - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - NSString *keepBackup = [defs objectForKey:KeepBackup]; - BOOL shouldKeep = [keepBackup isEqualToString:@"YES"]; - BOOL ret = NO; - - if ( shouldKeep == YES && [fm isWritableFileAtPath:backup] ) - { - ret = [fm removeFileAtPath:backup handler:nil]; - if( ret == NO ) { - NSRunAlertPanel(@"Attention!", - @"Could not remove the old project backup '%@'!", - @"OK",nil,nil,backup); - } - } - - if (shouldKeep && [fm isReadableFileAtPath:file]) - { - ret = [fm copyPath:file toPath:backup handler:nil]; - if( ret == NO ) - { - NSRunAlertPanel(@"Attention!", - @"Could not save the project backup file '%@'!", - @"OK",nil,nil,file); - } - } - - ret = [projectDict writeToFile:file atomically:YES]; - if( ret == YES ) - { - [projectWindow setDocumentEdited:NO]; - } - - [self writeMakefile]; - - return ret; -} - -- (BOOL)saveAt:(NSString *)projPath -{ - return NO; -} - -- (BOOL)writeSpecFile -{ - NSString *name = [projectDict objectForKey:PCProjectName]; - NSString *specInPath = [projectPath stringByAppendingPathComponent:name]; - NSMutableString *specIn = [NSMutableString string]; - - if( [[projectDict objectForKey:PCRelease] intValue] < 1 ) - { - NSRunAlertPanel(@"Spec Input File Creation!", - @"The Release entry seems to be wrong, please fix it!", - @"OK",nil,nil); - return NO; - } - - specInPath = [specInPath stringByAppendingPathExtension:@"spec.in"]; - - [specIn appendString:@"# Automatically generated by ProjectCenter.app\n"]; - [specIn appendString:@"#\nsummary: "]; - [specIn appendString:[projectDict objectForKey:PCSummary]]; - [specIn appendString:@"\nRelease: "]; - [specIn appendString:[projectDict objectForKey:PCRelease]]; - [specIn appendString:@"\nCopyright: "]; - [specIn appendString:[projectDict objectForKey:PCCopyright]]; - [specIn appendString:@"\nGroup: "]; - [specIn appendString:[projectDict objectForKey:PCGroup]]; - [specIn appendString:@"\nSource: "]; - [specIn appendString:[projectDict objectForKey:PCSource]]; - [specIn appendString:@"\n\n%description\n\n"]; - [specIn appendString:[projectDict objectForKey:PCDescription]]; - - return [specIn writeToFile:specInPath atomically:YES]; -} - -//============================================================================= -// ==== Subprojects -//============================================================================= - -- (NSArray *)subprojects -{ - return [projectDict objectForKey:PCSubprojects]; -} - -- (void)addSubproject:(PCProject *)aSubproject -{ -} - -- (PCProject *)superProject -{ - return nil; -} - -- (PCProject *)rootProject -{ - return self; -} - -- (void)newSubprojectNamed:(NSString *)aName -{ -} - -- (void)removeSubproject:(PCProject *)aSubproject -{ -} - -- (BOOL)isSubProject -{ - return NO; -} - -//============================================================================= -// ==== Project Handling -//============================================================================= - -- (void)updateValuesFromProjectDict -{ - [projectTypeField setStringValue:[projectDict objectForKey:PCProjType]]; - [projectNameField setStringValue:[projectDict objectForKey:PCProjectName]]; - [projectLanguageField setStringValue:[projectDict objectForKey:@"LANGUAGE"]]; - [installPathField setStringValue:[projectDict objectForKey:PCInstallDir]]; - [toolField setStringValue:[projectDict objectForKey:PCBuildTool]]; - [ccOptField setStringValue:[projectDict objectForKey:PCCompilerOptions]]; - [ldOptField setStringValue:[projectDict objectForKey:PCLinkerOptions]]; -} - -- (void)changeCommonProjectEntry:(id)sender -{ - NSString *newEntry = [sender stringValue]; - - if( sender == installPathField ) - { - [projectDict setObject:newEntry forKey:PCInstallDir]; - } - else if ( sender == toolField ) - { - [projectDict setObject:newEntry forKey:PCBuildTool]; - - if( ![[NSFileManager defaultManager] isExecutableFileAtPath:newEntry] ) - { - NSRunAlertPanel(@"Build Tool Error!", - @"No valid executable found at '%@'!", - @"OK",nil,nil,newEntry); - } - } - else if ( sender == ccOptField ) - { - [projectDict setObject:newEntry forKey:PCCompilerOptions]; - } - else if ( sender == ldOptField ) - { - [projectDict setObject:newEntry forKey:PCLinkerOptions]; - } - - [projectWindow setDocumentEdited:YES]; -} - -- (BOOL)isValidDictionary:(NSDictionary *)aDict -{ - NSString *_file; - NSString *key; - Class projClass = [self builderClass]; - NSDictionary *origin; - NSArray *keys; - NSEnumerator *enumerator; - - _file = [[NSBundle bundleForClass:projClass] pathForResource:@"PC" - ofType:@"proj"]; - - origin = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; - keys = [origin allKeys]; - - enumerator = [keys objectEnumerator]; - while( (key = [enumerator nextObject]) ) - { - if( [aDict objectForKey:key] == nil ) - { - return NO; - } - } - - return YES; -} - -- (void)updateProjectDict -{ - NSString *_file; - NSString *key; - Class projClass = [self builderClass]; - NSDictionary *origin; - NSArray *keys; - NSEnumerator *enumerator; - BOOL projectHasChanged = NO; - - _file = [[NSBundle bundleForClass:projClass] pathForResource:@"PC" - ofType:@"proj"]; - - origin = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; - keys = [origin allKeys]; - - enumerator = [keys objectEnumerator]; - while( (key = [enumerator nextObject]) ) - { - if( [projectDict objectForKey:key] == nil ) - { - [projectDict setObject:[origin objectForKey:key] forKey:key]; - projectHasChanged = YES; - - NSRunAlertPanel(@"New Project Key!", - @"The key '%@' has been added.", - @"OK",nil,nil,key); - } - } - - if( projectHasChanged == YES ) - { - [projectWindow setDocumentEdited:YES]; - } -} - -- (void)validateProjectDict -{ - if( [self isValidDictionary:projectDict] == NO ) - { - int ret = NSRunAlertPanel(@"Attention!", @"The project is not up to date, should it be updated automatically?", @"OK",@"No",nil); - - if( ret == NSAlertDefaultReturn ) - { - [self updateProjectDict]; - [self save]; - - NSRunAlertPanel(@"Project updated!", @"The project file has been updated successfully!\nPlease make sure that all new project keys contain valid entries!", @"OK",nil,nil); - } - } -} - -@end - -//============================================================================= -//============================================================================= - -@implementation PCProject (ProjectKeyPaths) - -- (NSArray *)contentAtKeyPath:(NSString *)keyPath -{ - NSString *key; - -#ifdef DEBUG - NSLog(@"<%@ %x>: content at path %@",[self class],self,keyPath); -#endif - - if ([keyPath isEqualToString:@""] || [keyPath isEqualToString:@"/"]) - { - return rootKeys; - } - - key = [[keyPath componentsSeparatedByString:@"/"] lastObject]; - return [projectDict objectForKey:[rootCategories objectForKey:key]]; -} - -- (BOOL)hasChildrenAtKeyPath:(NSString *)keyPath -{ - NSString *key; - - if (!keyPath || [keyPath isEqualToString:@""]) { - return NO; - } - - key = [[keyPath componentsSeparatedByString:@"/"] lastObject]; - if ([[rootCategories allKeys] containsObject:key] || - [[projectDict objectForKey:PCSubprojects] containsObject:key]) { - return YES; - } - - return NO; -} - -- (NSString *)projectKeyForKeyPath:(NSString *)kp -{ - NSString *type = [[kp componentsSeparatedByString:@"/"] objectAtIndex:1]; - - return [rootCategories objectForKey:type]; -} - -@end - -@implementation PCProject (ProjectWindowDelegate) - -- (void)windowDidResignKey:(NSNotification *)aNotification -{ -} - -- (void)windowDidBecomeKey:(NSNotification *)aNotification -{ - [projectManager setActiveProject:self]; -} - -- (void)windowDidBecomeMain:(NSNotification *)aNotification -{ - [projectManager setActiveProject:self]; -} - -- (void)windowWillClose:(NSNotification *)aNotification -{ - id object = [aNotification object]; - - if (object == [self projectWindow]) - { - if ([[self projectWindow] isDocumentEdited]) - { - if (NSRunAlertPanel(@"Close Project", - @"The project %@ has been edited!\nShould it be saved before closing?", - @"Yes", @"No", nil,[self projectName])) - { - [self save]; - } - } - - [editorController closeAllEditors]; - - if (projectBuilder && [projectBuilder buildPanel]) - { - [[projectBuilder buildPanel] performClose: self]; - [[projectBuilder buildPanel] release]; - } - if (projectDebugger && [projectDebugger launchPanel]) - { - [[projectDebugger launchPanel] performClose: self]; - [[projectDebugger launchPanel] release]; - } - - // The PCProjectController is our delegate! - [[NSNotificationCenter defaultCenter] removeObserver:browserController]; - [projectManager closeProject:self]; - } -} - -@end diff --git a/PCLib/PCProjectEditor.h b/PCLib/PCProjectEditor.h deleted file mode 100644 index 32f325f..0000000 --- a/PCLib/PCProjectEditor.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * PCProjectEditor.h created by probert on 2002-02-10 09:27:10 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#ifndef _PCPROJECTEDITOR_H_ -#define _PCPROJECTEDITOR_H_ - -#include - -@class NSBox; -@class NSView; -@class NSScrollView; -@class PCEditorView; -@class PCProject; - -#ifndef GNUSTEP_BASE_VERSION -@protocol ProjectComponent; -#else -#include -#endif - -@interface PCProjectEditor : NSObject -{ - NSBox *_componentView; - PCProject *_currentProject; - PCEditorView *_editorView; - NSScrollView *_scrollView; -} - -- (id)initWithProject:(PCProject *)aProject; -- (void)dealloc; - -- (NSView *)componentView; - -- (void)setEditorView:(PCEditorView *)ev; -- (PCEditorView *)editorView; - -@end - -#endif // _PCPROJECTEDITOR_H_ - diff --git a/PCLib/PCProjectEditor.m b/PCLib/PCProjectEditor.m deleted file mode 100644 index a633f6b..0000000 --- a/PCLib/PCProjectEditor.m +++ /dev/null @@ -1,123 +0,0 @@ -/* - * PCProjectEditor.m created by probert on 2002-02-10 09:27:09 +0000 - * - * Project ProjectCenter - * - * Created with ProjectCenter - http://www.gnustep.org - * - * $Id$ - */ - -#include "PCProjectEditor.h" -#include "PCDefines.h" -#include "PCEditorView.h" -#include "ProjectComponent.h" - -@interface PCProjectEditor (CreateUI) - -- (void) _createComponentView; - -@end - -@implementation PCProjectEditor (CreateUI) - -- (void) _createComponentView -{ - NSRect frame; - NSTextView *textView; - - frame = NSMakeRect(0,0,562,248); - _componentView = [[NSBox alloc] initWithFrame:frame]; - [_componentView setTitlePosition: NSNoTitle]; - [_componentView setBorderType: NSNoBorder]; - [_componentView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; - [_componentView setContentViewMargins: NSMakeSize(0.0,0.0)]; - - frame = NSMakeRect (0, 0, 562, 40); - _scrollView = [[NSScrollView alloc] initWithFrame:frame]; - [_scrollView setHasHorizontalScroller: NO]; - [_scrollView setHasVerticalScroller: YES]; - [_scrollView setBorderType: NSBezelBorder]; - [_scrollView setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)]; - - // This is a placeholder! - frame = [[_scrollView contentView] frame]; - textView = [[NSTextView alloc] initWithFrame:frame]; - [textView setMinSize: NSMakeSize (0, 0)]; - [textView setMaxSize: NSMakeSize(1e7, 1e7)]; - [textView setRichText: NO]; - [textView setEditable: NO]; - [textView setSelectable: YES]; - [textView setVerticallyResizable: YES]; - [textView setHorizontallyResizable: NO]; - [textView setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)]; - [[textView textContainer] setWidthTracksTextView: YES]; - [_scrollView setDocumentView: textView]; - RELEASE(textView); - - frame.size = NSMakeSize([_scrollView contentSize].width,1e7); - [[textView textContainer] setContainerSize:frame.size]; - - [_componentView addSubview:_scrollView]; - RELEASE(_scrollView); - - [_componentView sizeToFit]; -} - -@end - -@implementation PCProjectEditor - -- (id)initWithProject: (PCProject *)aProject -{ - NSAssert(aProject, @"No project specified!"); - - if((self = [super init])) - { - _currentProject = aProject; - _componentView = nil; - } - return self; -} - -- (void) dealloc -{ - if( _componentView ) - { - RELEASE(_componentView); - } - - [super dealloc]; -} - -- (NSView *) componentView -{ - if (_componentView == nil) - { - [self _createComponentView]; - } - - return _componentView; -} - -- (void)setEditorView: (PCEditorView *)ev -{ - NSRect frame; - - _editorView = ev; - - [_scrollView setDocumentView:_editorView]; - - frame = [[_scrollView contentView] frame]; - frame.size = NSMakeSize([_scrollView contentSize].width,1e7); - [_editorView setFrame:frame]; - [_editorView sizeToFit]; -} - -- (PCEditorView *) editorView -{ - return _editorView; -} - -@end - diff --git a/PCLib/PCProjectManager+UInterface.m b/PCLib/PCProjectManager+UInterface.m deleted file mode 100644 index d44c579..0000000 --- a/PCLib/PCProjectManager+UInterface.m +++ /dev/null @@ -1,76 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2000-2002 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCProjectManager+UInterface.h" -#include "PCDefines.h" - -@implementation PCProjectManager (UInterface) - -- (void)_initUI -{ - NSView *_c_view; - unsigned int style = NSTitledWindowMask | NSClosableWindowMask; - NSRect _w_frame; - NSBox *line; - - /* - * Inspector Window - * - */ - - _w_frame = NSMakeRect(200,300,280,384); - inspector = [[NSWindow alloc] initWithContentRect:_w_frame - styleMask:style - backing:NSBackingStoreBuffered - defer:YES]; - [inspector setMinSize:NSMakeSize(280,384)]; - [inspector setTitle:@"Project Inspector"]; - [inspector setReleasedWhenClosed:NO]; - [inspector setFrameAutosaveName:@"Inspector"]; - _c_view = [inspector contentView]; - - _w_frame = NSMakeRect(80,358,128,20); - inspectorPopup = [[NSPopUpButton alloc] initWithFrame:_w_frame]; - [inspectorPopup addItemWithTitle:@"None"]; - [inspectorPopup setTarget:self]; - [inspectorPopup setAction:@selector(inspectorPopupDidChange:)]; - [_c_view addSubview:inspectorPopup]; - - line = [[[NSBox alloc] init] autorelease]; - [line setTitlePosition:NSNoTitle]; - [line setFrame:NSMakeRect(0,336,280,2)]; - [_c_view addSubview:line]; - - inspectorView = [[NSBox alloc] init]; - [inspectorView setTitlePosition:NSNoTitle]; - [inspectorView setFrame:NSMakeRect(-8,-8,295,364)]; - [inspectorView setBorderType:NSNoBorder]; - [_c_view addSubview:inspectorView]; - - _needsReleasing = YES; -} - -@end diff --git a/PCLib/ProjectCenter.pbproj/project.pbxproj b/PCLib/ProjectCenter.pbproj/project.pbxproj deleted file mode 100644 index 99a352d..0000000 --- a/PCLib/ProjectCenter.pbproj/project.pbxproj +++ /dev/null @@ -1,1144 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA440018CDF011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA450018CDF011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//030 -//031 -//032 -//033 -//034 - 034768DFFF38A50411DB9C8B = { - children = ( - 034768E0FF38A50411DB9C8B, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; - 034768E0FF38A50411DB9C8B = { - isa = PBXFrameworkReference; - path = ProjectCenter.framework; - refType = 3; - }; -//030 -//031 -//032 -//033 -//034 -//080 -//081 -//082 -//083 -//084 - 0867D690FE84028FC02AAC07 = { - buildStyles = ( - 014CEA440018CDF011CA2923, - 014CEA450018CDF011CA2923, - ); - isa = PBXProject; - mainGroup = 0867D691FE84028FC02AAC07; - productRefGroup = 034768DFFF38A50411DB9C8B; - projectDirPath = ""; - targets = ( - 0867D69CFE84028FC02AAC07, - ); - }; - 0867D691FE84028FC02AAC07 = { - children = ( - 08FB77AEFE84172EC02AAC07, - 089C1665FE841158C02AAC07, - 0867D69AFE84028FC02AAC07, - 034768DFFF38A50411DB9C8B, - ); - isa = PBXGroup; - name = PCLib; - refType = 4; - }; - 0867D69AFE84028FC02AAC07 = { - children = ( - 1058C7B0FEA5585E11CA2CBB, - 1058C7B2FEA5585E11CA2CBB, - ); - isa = PBXGroup; - name = "External Frameworks and Libraries"; - refType = 4; - }; - 0867D69BFE84028FC02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 0867D69CFE84028FC02AAC07 = { - buildPhases = ( - 0867D69DFE84028FC02AAC07, - 0867D69EFE84028FC02AAC07, - 0867D69FFE84028FC02AAC07, - 0867D6A0FE84028FC02AAC07, - 0867D6A2FE84028FC02AAC07, - ); - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_SEARCH_PATHS = ""; - FRAMEWORK_VERSION = A; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Frameworks"; - LIBRARY_SEARCH_PATHS = ""; - OPTIMIZATION_CFLAGS = "-O2"; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = ProjectCenter; - SECTORDER_FLAGS = ""; - USE_GCC3_PFE_SUPPORT = YES; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = framework; - }; - dependencies = ( - ); - isa = PBXFrameworkTarget; - name = PCLib; - productInstallPath = "$(HOME)/Library/Frameworks"; - productName = PCLib; - productReference = 034768E0FF38A50411DB9C8B; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ProjectCenter - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - FMWK - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - - - -"; - shouldUseHeadermap = 1; - }; - 0867D69DFE84028FC02AAC07 = { - buildActionMask = 2147483647; - files = ( - F58C0A4F0390DFFD01000102, - F58C0A500390DFFD01000102, - F58C0A520390DFFD01000102, - F58C0A540390DFFD01000102, - F58C0A560390DFFD01000102, - F58C0A570390DFFD01000102, - F58C0A590390DFFD01000102, - F58C0A5B0390DFFD01000102, - F58C0A5D0390DFFD01000102, - F58C0A5F0390DFFD01000102, - F58C0A610390DFFD01000102, - F58C0A630390DFFD01000102, - F58C0A650390DFFD01000102, - F58C0A670390DFFD01000102, - F58C0A690390DFFD01000102, - F58C0A6B0390DFFD01000102, - F58C0A6D0390DFFD01000102, - F58C0A6F0390DFFD01000102, - F58C0A710390DFFD01000102, - F58C0A730390DFFD01000102, - F58C0A750390DFFD01000102, - F58C0A770390DFFD01000102, - F58C0A780390DFFD01000102, - F58C0A790390DFFD01000102, - F58C0A7A0390DFFD01000102, - F58C0A7B0390DFFD01000102, - F58C0A7C0390DFFD01000102, - F58C0A7D0390DFFD01000102, - F58C0A7E0390DFFD01000102, - F56CA061039534DC01000102, - F56CA0650395376801000102, - F56CA0690395378001000102, - F56CA06D0395379601000102, - F56CA071039537A901000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 0867D69EFE84028FC02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1668FE841158C02AAC07, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 0867D69FFE84028FC02AAC07 = { - buildActionMask = 2147483647; - files = ( - F58C0A510390DFFD01000102, - F58C0A530390DFFD01000102, - F58C0A550390DFFD01000102, - F58C0A580390DFFD01000102, - F58C0A5A0390DFFD01000102, - F58C0A5C0390DFFD01000102, - F58C0A5E0390DFFD01000102, - F58C0A600390DFFD01000102, - F58C0A620390DFFD01000102, - F58C0A640390DFFD01000102, - F58C0A660390DFFD01000102, - F58C0A680390DFFD01000102, - F58C0A6A0390DFFD01000102, - F58C0A6C0390DFFD01000102, - F58C0A6E0390DFFD01000102, - F58C0A700390DFFD01000102, - F58C0A720390DFFD01000102, - F58C0A740390DFFD01000102, - F58C0A760390DFFD01000102, - F56CA062039534DC01000102, - F56CA0660395376801000102, - F56CA06A0395378001000102, - F56CA06E0395379601000102, - F56CA072039537A901000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 0867D6A0FE84028FC02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7B3FEA5585E11CA2CBB, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 0867D6A2FE84028FC02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 0867D6A5FE840307C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1665FE841158C02AAC07 = { - children = ( - 089C1666FE841158C02AAC07, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C1666FE841158C02AAC07 = { - children = ( - 089C1667FE841158C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C1667FE841158C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C1668FE841158C02AAC07 = { - fileRef = 089C1666FE841158C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AEFE84172EC02AAC07 = { - children = ( - F58C0A1F0390DFFD01000102, - F58C0A200390DFFD01000102, - F58C0A210390DFFD01000102, - F58C0A220390DFFD01000102, - F58C0A230390DFFD01000102, - F58C0A240390DFFD01000102, - F58C0A250390DFFD01000102, - F58C0A260390DFFD01000102, - F58C0A270390DFFD01000102, - F58C0A280390DFFD01000102, - F56CA0630395376801000102, - F56CA0640395376801000102, - F58C0A290390DFFD01000102, - F58C0A2A0390DFFD01000102, - F58C0A2B0390DFFD01000102, - F58C0A2C0390DFFD01000102, - F58C0A2D0390DFFD01000102, - F58C0A2E0390DFFD01000102, - F58C0A2F0390DFFD01000102, - F58C0A300390DFFD01000102, - F56CA0670395378001000102, - F56CA0680395378001000102, - F58C0A310390DFFD01000102, - F58C0A320390DFFD01000102, - F58C0A330390DFFD01000102, - F58C0A340390DFFD01000102, - F58C0A350390DFFD01000102, - F58C0A360390DFFD01000102, - F58C0A370390DFFD01000102, - F58C0A380390DFFD01000102, - F56CA05F039534DC01000102, - F56CA060039534DC01000102, - F58C0A390390DFFD01000102, - F58C0A3A0390DFFD01000102, - F58C0A3B0390DFFD01000102, - F58C0A3C0390DFFD01000102, - F58C0A3D0390DFFD01000102, - F58C0A3E0390DFFD01000102, - F58C0A3F0390DFFD01000102, - F58C0A400390DFFD01000102, - F56CA06B0395379601000102, - F56CA06C0395379601000102, - F58C0A410390DFFD01000102, - F58C0A420390DFFD01000102, - F58C0A430390DFFD01000102, - F58C0A440390DFFD01000102, - F58C0A450390DFFD01000102, - F58C0A460390DFFD01000102, - F56CA06F039537A901000102, - F56CA070039537A901000102, - F58C0A470390DFFD01000102, - F58C0A480390DFFD01000102, - F58C0A490390DFFD01000102, - F58C0A4A0390DFFD01000102, - F58C0A4B0390DFFD01000102, - F58C0A4C0390DFFD01000102, - F58C0A4D0390DFFD01000102, - F58C0A4E0390DFFD01000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7B0FEA5585E11CA2CBB = { - children = ( - 1058C7B1FEA5585E11CA2CBB, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7B1FEA5585E11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7B2FEA5585E11CA2CBB = { - children = ( - 0867D69BFE84028FC02AAC07, - 0867D6A5FE840307C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7B3FEA5585E11CA2CBB = { - fileRef = 1058C7B1FEA5585E11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//F50 -//F51 -//F52 -//F53 -//F54 - F56CA05F039534DC01000102 = { - isa = PBXFileReference; - path = "PCProject+UInterface.h"; - refType = 4; - }; - F56CA060039534DC01000102 = { - isa = PBXFileReference; - path = "PCProject+UInterface.m"; - refType = 4; - }; - F56CA061039534DC01000102 = { - fileRef = F56CA05F039534DC01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Private, - ); - }; - }; - F56CA062039534DC01000102 = { - fileRef = F56CA060039534DC01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56CA0630395376801000102 = { - isa = PBXFileReference; - path = "PCEditor+UInterface.h"; - refType = 4; - }; - F56CA0640395376801000102 = { - isa = PBXFileReference; - path = "PCEditor+UInterface.m"; - refType = 4; - }; - F56CA0650395376801000102 = { - fileRef = F56CA0630395376801000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Private, - ); - }; - }; - F56CA0660395376801000102 = { - fileRef = F56CA0640395376801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56CA0670395378001000102 = { - isa = PBXFileReference; - path = "PCFileManager+UInterface.h"; - refType = 4; - }; - F56CA0680395378001000102 = { - isa = PBXFileReference; - path = "PCFileManager+UInterface.m"; - refType = 4; - }; - F56CA0690395378001000102 = { - fileRef = F56CA0670395378001000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Private, - ); - }; - }; - F56CA06A0395378001000102 = { - fileRef = F56CA0680395378001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56CA06B0395379601000102 = { - isa = PBXFileReference; - path = "PCProjectManager+UInterface.h"; - refType = 4; - }; - F56CA06C0395379601000102 = { - isa = PBXFileReference; - path = "PCProjectManager+UInterface.m"; - refType = 4; - }; - F56CA06D0395379601000102 = { - fileRef = F56CA06B0395379601000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Private, - ); - }; - }; - F56CA06E0395379601000102 = { - fileRef = F56CA06C0395379601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56CA06F039537A901000102 = { - isa = PBXFileReference; - path = "PCTextFinder+UInterface.h"; - refType = 4; - }; - F56CA070039537A901000102 = { - isa = PBXFileReference; - path = "PCTextFinder+UInterface.m"; - refType = 4; - }; - F56CA071039537A901000102 = { - fileRef = F56CA06F039537A901000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Private, - ); - }; - }; - F56CA072039537A901000102 = { - fileRef = F56CA070039537A901000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A1F0390DFFD01000102 = { - isa = PBXFileReference; - path = FileCreator.h; - refType = 4; - }; - F58C0A200390DFFD01000102 = { - isa = PBXFileReference; - path = PCBrowserController.h; - refType = 4; - }; - F58C0A210390DFFD01000102 = { - isa = PBXFileReference; - path = PCBrowserController.m; - refType = 4; - }; - F58C0A220390DFFD01000102 = { - isa = PBXFileReference; - path = PCBundleLoader.h; - refType = 4; - }; - F58C0A230390DFFD01000102 = { - isa = PBXFileReference; - path = PCBundleLoader.m; - refType = 4; - }; - F58C0A240390DFFD01000102 = { - isa = PBXFileReference; - path = PCDataSource.h; - refType = 4; - }; - F58C0A250390DFFD01000102 = { - isa = PBXFileReference; - path = PCDataSource.m; - refType = 4; - }; - F58C0A260390DFFD01000102 = { - isa = PBXFileReference; - path = PCDefines.h; - refType = 4; - }; - F58C0A270390DFFD01000102 = { - isa = PBXFileReference; - path = PCEditor.h; - refType = 4; - }; - F58C0A280390DFFD01000102 = { - isa = PBXFileReference; - path = PCEditor.m; - refType = 4; - }; - F58C0A290390DFFD01000102 = { - isa = PBXFileReference; - path = PCEditorController.h; - refType = 4; - }; - F58C0A2A0390DFFD01000102 = { - isa = PBXFileReference; - path = PCEditorController.m; - refType = 4; - }; - F58C0A2B0390DFFD01000102 = { - isa = PBXFileReference; - path = PCEditorView.h; - refType = 4; - }; - F58C0A2C0390DFFD01000102 = { - isa = PBXFileReference; - path = PCEditorView.m; - refType = 4; - }; - F58C0A2D0390DFFD01000102 = { - isa = PBXFileReference; - path = "PCEditorView+Highlighting.h"; - refType = 4; - }; - F58C0A2E0390DFFD01000102 = { - isa = PBXFileReference; - path = "PCEditorView+Highlighting.m"; - refType = 4; - }; - F58C0A2F0390DFFD01000102 = { - isa = PBXFileReference; - path = PCFileManager.h; - refType = 4; - }; - F58C0A300390DFFD01000102 = { - isa = PBXFileReference; - path = PCFileManager.m; - refType = 4; - }; - F58C0A310390DFFD01000102 = { - isa = PBXFileReference; - path = PCHistoryController.h; - refType = 4; - }; - F58C0A320390DFFD01000102 = { - isa = PBXFileReference; - path = PCHistoryController.m; - refType = 4; - }; - F58C0A330390DFFD01000102 = { - isa = PBXFileReference; - path = PCMakefileFactory.h; - refType = 4; - }; - F58C0A340390DFFD01000102 = { - isa = PBXFileReference; - path = PCMakefileFactory.m; - refType = 4; - }; - F58C0A350390DFFD01000102 = { - isa = PBXFileReference; - path = PCProject.h; - refType = 4; - }; - F58C0A360390DFFD01000102 = { - isa = PBXFileReference; - path = PCProject.m; - refType = 4; - }; - F58C0A370390DFFD01000102 = { - isa = PBXFileReference; - path = "PCProject+ComponentHandling.h"; - refType = 4; - }; - F58C0A380390DFFD01000102 = { - isa = PBXFileReference; - path = "PCProject+ComponentHandling.m"; - refType = 4; - }; - F58C0A390390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectBuilder.h; - refType = 4; - }; - F58C0A3A0390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectBuilder.m; - refType = 4; - }; - F58C0A3B0390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectDebugger.h; - refType = 4; - }; - F58C0A3C0390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectDebugger.m; - refType = 4; - }; - F58C0A3D0390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectEditor.h; - refType = 4; - }; - F58C0A3E0390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectEditor.m; - refType = 4; - }; - F58C0A3F0390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectManager.h; - refType = 4; - }; - F58C0A400390DFFD01000102 = { - isa = PBXFileReference; - path = PCProjectManager.m; - refType = 4; - }; - F58C0A410390DFFD01000102 = { - isa = PBXFileReference; - path = PCServer.h; - refType = 4; - }; - F58C0A420390DFFD01000102 = { - isa = PBXFileReference; - path = PCServer.m; - refType = 4; - }; - F58C0A430390DFFD01000102 = { - isa = PBXFileReference; - path = PCSplitView.h; - refType = 4; - }; - F58C0A440390DFFD01000102 = { - isa = PBXFileReference; - path = PCSplitView.m; - refType = 4; - }; - F58C0A450390DFFD01000102 = { - isa = PBXFileReference; - path = PCTextFinder.h; - refType = 4; - }; - F58C0A460390DFFD01000102 = { - isa = PBXFileReference; - path = PCTextFinder.m; - refType = 4; - }; - F58C0A470390DFFD01000102 = { - isa = PBXFileReference; - path = PreferenceController.h; - refType = 4; - }; - F58C0A480390DFFD01000102 = { - isa = PBXFileReference; - path = ProjectBuilder.h; - refType = 4; - }; - F58C0A490390DFFD01000102 = { - isa = PBXFileReference; - path = ProjectCenter.h; - refType = 4; - }; - F58C0A4A0390DFFD01000102 = { - isa = PBXFileReference; - path = ProjectComponent.h; - refType = 4; - }; - F58C0A4B0390DFFD01000102 = { - isa = PBXFileReference; - path = ProjectDebugger.h; - refType = 4; - }; - F58C0A4C0390DFFD01000102 = { - isa = PBXFileReference; - path = ProjectEditor.h; - refType = 4; - }; - F58C0A4D0390DFFD01000102 = { - isa = PBXFileReference; - path = ProjectType.h; - refType = 4; - }; - F58C0A4E0390DFFD01000102 = { - isa = PBXFileReference; - path = Server.h; - refType = 4; - }; - F58C0A4F0390DFFD01000102 = { - fileRef = F58C0A1F0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A500390DFFD01000102 = { - fileRef = F58C0A200390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A510390DFFD01000102 = { - fileRef = F58C0A210390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A520390DFFD01000102 = { - fileRef = F58C0A220390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A530390DFFD01000102 = { - fileRef = F58C0A230390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A540390DFFD01000102 = { - fileRef = F58C0A240390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A550390DFFD01000102 = { - fileRef = F58C0A250390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A560390DFFD01000102 = { - fileRef = F58C0A260390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A570390DFFD01000102 = { - fileRef = F58C0A270390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A580390DFFD01000102 = { - fileRef = F58C0A280390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A590390DFFD01000102 = { - fileRef = F58C0A290390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A5A0390DFFD01000102 = { - fileRef = F58C0A2A0390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A5B0390DFFD01000102 = { - fileRef = F58C0A2B0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A5C0390DFFD01000102 = { - fileRef = F58C0A2C0390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A5D0390DFFD01000102 = { - fileRef = F58C0A2D0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A5E0390DFFD01000102 = { - fileRef = F58C0A2E0390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A5F0390DFFD01000102 = { - fileRef = F58C0A2F0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A600390DFFD01000102 = { - fileRef = F58C0A300390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A610390DFFD01000102 = { - fileRef = F58C0A310390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A620390DFFD01000102 = { - fileRef = F58C0A320390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A630390DFFD01000102 = { - fileRef = F58C0A330390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A640390DFFD01000102 = { - fileRef = F58C0A340390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A650390DFFD01000102 = { - fileRef = F58C0A350390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A660390DFFD01000102 = { - fileRef = F58C0A360390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A670390DFFD01000102 = { - fileRef = F58C0A370390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A680390DFFD01000102 = { - fileRef = F58C0A380390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A690390DFFD01000102 = { - fileRef = F58C0A390390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A6A0390DFFD01000102 = { - fileRef = F58C0A3A0390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A6B0390DFFD01000102 = { - fileRef = F58C0A3B0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A6C0390DFFD01000102 = { - fileRef = F58C0A3C0390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A6D0390DFFD01000102 = { - fileRef = F58C0A3D0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A6E0390DFFD01000102 = { - fileRef = F58C0A3E0390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A6F0390DFFD01000102 = { - fileRef = F58C0A3F0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A700390DFFD01000102 = { - fileRef = F58C0A400390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A710390DFFD01000102 = { - fileRef = F58C0A410390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A720390DFFD01000102 = { - fileRef = F58C0A420390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A730390DFFD01000102 = { - fileRef = F58C0A430390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A740390DFFD01000102 = { - fileRef = F58C0A440390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A750390DFFD01000102 = { - fileRef = F58C0A450390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A760390DFFD01000102 = { - fileRef = F58C0A460390DFFD01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0A770390DFFD01000102 = { - fileRef = F58C0A470390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A780390DFFD01000102 = { - fileRef = F58C0A480390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A790390DFFD01000102 = { - fileRef = F58C0A490390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A7A0390DFFD01000102 = { - fileRef = F58C0A4A0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A7B0390DFFD01000102 = { - fileRef = F58C0A4B0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A7C0390DFFD01000102 = { - fileRef = F58C0A4C0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A7D0390DFFD01000102 = { - fileRef = F58C0A4D0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - F58C0A7E0390DFFD01000102 = { - fileRef = F58C0A4E0390DFFD01000102; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - Public, - ); - }; - }; - }; - rootObject = 0867D690FE84028FC02AAC07; -} diff --git a/PCLibProj/ChangeLog b/PCLibProj/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCLibProj/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCLibProj/ChangeLog.old b/PCLibProj/ChangeLog.old deleted file mode 100644 index 6cd48ea..0000000 --- a/PCLibProj/ChangeLog.old +++ /dev/null @@ -1,179 +0,0 @@ -2003-04-21 Serg Stoyan - - * GNUmakefile: Set BUNDLE_INSTALL_DIR to GNUSTEP_SYSTEM_ROOT. - - * .h, .m: Replace #import with #include and add #ifndefs. - - * h.template and m.template removed. - -2002-11-27 15:45 probert - - * Mac OS X port using Cocoa - -2002-06-01 15:56 probert - - * GNUmakefile, PCLibProj.pcproj: Installation into - GNUSPTE_INSTALLATION_DIR - -2002-04-26 05:12 fedor - - * ChangeLog, PCLibProject.m: removed bunches of duplicate calls, - retains and releases. - -2002-03-25 20:37 probert - - * ChangeLog: ChangeLog updates - -2002-03-03 16:31 probert - - * PCLibProject.m: Forgot to include the Version file - fixed. - -2002-03-01 16:06 probert - - * GNUmakefile, PCLibMakefileFactory.h, PCLibMakefileFactory.m, - PCLibProj.pcproj, PCLibProject.m: This project now uses the - makefile factory too. - -2002-01-07 16:05 probert - - * ChangeLog: Updated all ChangeLog files (using cvs2cl.pl) - -2002-01-07 16:01 probert - - * GNUmakefile, PCLibProj.pcproj: Added libProjectCenter to the - bundle's library link settings. - -2002-01-07 10:37 probert - - * PC.project, PCLibProj.m, PCLibProj.pcproj: ProjectCenter now - stores the project files under PROJECTNAME.pcproj to avoid name - clashes. - -2002-01-02 18:51 probert - - * PC.proj, PC.project: Changed the build tool entry to - /usr/bin/make in all project files and templates. - -2002-01-02 17:33 probert - - * PCLibMakefileFactory.m: Libraries, Gorm apps and tools use the - install path now, too. - -2002-01-02 17:05 probert - - * GNUmakefile, LibProject.gmodel, PC.proj, PC.project: The - inspector now handles the installation path and other settings. - Furthermore it does not save changes automatically but marks the - project as being edited. Upon 'save' the project file and - GNUmakefile are being saved, not before! In addition the various - PC* bundles are now maintained by ProjectCenter itself. The - installation path for ProjectCenter.app is corrected to the SYSTEM - ROOT as well. - -2002-01-02 13:13 probert - - * GNUmakefile, PC.proj: All bundles and libProjectCenter are now - installed under GNUSTEP_SYSTEM_ROOT. Also the PC.proj templates - have now a correct install path default value. - -2002-01-01 18:27 probert - - * PC.proj, PCLibProject.h, PCLibProject.m: ProjectCenter now - validates project dictionaries and updates them if requested. I - also added new keys tp the PC.project files in order to be able to - generate valid *.spec.in files needed when building RPMs. - -2001-12-29 16:37 probert - - * ChangeLog: Removed the toplevel ChangeLog, updated the ChangeLogs - in the subdirectories and raised the version number to 0.2.6. - -2001-12-29 15:07 probert - - * PCLibProject.m: leaned up the writeMakefile method - -2001-08-03 16:23 probert - - * PCLibMakefileFactory.h, PCLibMakefileFactory.m, PCLibProj.h, - PCLibProj.m, PCLibProject.h, PCLibProject.m: New version - now - copyrighted by the FSF - -2001-08-01 14:35 probert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, - PCLibMakefileFactory.m, h.template: New copyright information and - minor template additions - -2001-07-01 21:01 probert - - * GNUmakefile, GNUmakefile.preamble: Applied patch from Adam Fedor - -2001-01-14 18:54 robert - - * ChangeLog: Updated the ChangeLogs - -2001-01-14 17:09 robert - - * PCLibProject.m: Added the supporting files category - -2001-01-10 15:17 robert - - * Makefile, Makefile.postamble, Makefile.preamble, PB.project: no - PB support anymore - -2000-11-10 19:27 robert - - * PCLibProject.h, PCLibProject.m: some daily work... - -2000-11-10 15:08 robert - - * ChangeLog: changelog for 0.2 - -2000-10-15 20:29 robert - - * PCLibProject.m: some code improvements regarding the inspector - -2000-09-24 15:37 robert - - * PCLibProject.m: minor UI issue - -2000-09-23 17:45 robert - - * PCLibMakefileFactory.m: another issue... - -2000-09-23 16:24 robert - - * PCLibMakefileFactory.m, PCLibProject.m: Fixed some makefile - issues - -2000-09-21 09:07 robert - - * PCLibMakefileFactory.m, PCLibProj.m: removed the English.lproj - stuff in libs - -2000-09-20 17:51 robert - - * ChangeLog: Added a changelog - -2000-09-17 14:13 robert - - * PCLibMakefileFactory.m: makefile improvements - -2000-08-27 21:13 robert - - * PCLibMakefileFactory.h, PCLibProj.h, GNUmakefile, - GNUmakefile.postamble, GNUmakefile.preamble, Info.table, - PCLibProj.m, Makefile, Makefile.postamble, Makefile.preamble, - PB.project, PC.proj, PCLibMakefileFactory.m, PCLibProject.h, - PCLibProject.m, h.template, m.template, LibProject.gmodel, Version: - Initial revision - -2000-08-27 21:13 robert - - * PCLibMakefileFactory.h, PCLibProj.h, GNUmakefile, - GNUmakefile.postamble, GNUmakefile.preamble, Info.table, - PCLibProj.m, Makefile, Makefile.postamble, Makefile.preamble, - PB.project, PC.proj, PCLibMakefileFactory.m, PCLibProject.h, - PCLibProject.m, h.template, m.template, LibProject.gmodel, Version: - Initial import - diff --git a/PCLibProj/English.lproj/InfoPlist.strings b/PCLibProj/English.lproj/InfoPlist.strings deleted file mode 100644 index 97c44e88fbe01dc7331252b4cecaaabcdd57ecde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584 zcmb`D$qE875Jc|^rD2MlkQ4)Rb8&i zD|fg=GyTTYR#-=jgJ|rEoq?EWxV4X*6VYKv}d0-bLf->7T9U9=yA9)Wl;i X!t`P7qRPcn>v-I>yZ3RGA9&mVIgVkS diff --git a/PCLibProj/Info.table b/PCLibProj/Info.table deleted file mode 100644 index e0861e8..0000000 --- a/PCLibProj/Info.table +++ /dev/null @@ -1,29 +0,0 @@ -{ - AdditionalAttributes = { - PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; - }; - Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); - AttributesInspector = ApplicationInspector; - DefaultExtension = ""; - Default_Localizable_Keys = (INTERFACES); - GeneratedFiles = (Makefile, iconHeader); - INSTALLFLAGS = "-c -s -m 755"; - InfoName = ""; - Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); - MAKEFILE = app.make; - MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; - Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); - PBProjectTypeSubClass = "PBApplicationProjectType"; - ProvidesIcons = Yes; - Public_Keys = (H_FILES); - Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); - SOURCEMODE = 444; - Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); - Subproj_Keys = (SUBPROJECTS); - Targets = (app, debug, profile, install); - ExecutableResults = ( - "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" - ); -} diff --git a/PCLibProj/PC.proj b/PCLibProj/PC.proj deleted file mode 100644 index 972e96a..0000000 --- a/PCLibProj/PC.proj +++ /dev/null @@ -1,34 +0,0 @@ -{ - APPKIT = "GNUSTEP-GUI"; - BUILDTOOL = "/usr/bin/make"; - CLASS_FILES = (); - COMPILEROPTIONS = ""; - LINKEROPTIONS = ""; - CREATION_DATE = ""; - DOCU_FILES = (); - FOUNDATION = "GNUSTEP-BASE"; - FRAMEWORKS = (); - HEADER_FILES = (); - LANGUAGE = "English"; - LAST_EDITING = ""; - LIBRARIES = ("gnustep-base"); - MAKEFILEDIR = "$(GNUSTEP_SYSTEM_ROOT)/Makefiles"; - INSTALLDIR = "$(GNUSTEP_LOCAL_ROOT)"; - OTHER_FILES = (); - OTHER_RESOURCES = ("Version"); - OTHER_SOURCES = (); - PROJECT_CREATOR = ""; - PROJECT_DESCRIPTION = "No description avaliable!"; - PROJECT_GROUP = "No description avaliable!"; - PROJECT_SUMMARY = "No summary avaliable!"; - PROJECT_RELEASE = "1"; - PROJECT_COPYRIGHT = "No license specified!"; - PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz"; - PROJECT_MAINTAINER = ""; - PROJECT_NAME = ""; - PROJECT_TYPE = "Library"; - PROJECT_BUILDER = "PCLibProj"; - PROJECT_VERSION = 1.0; - SUBPROJECTS = (); - SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); -} diff --git a/PCLibProj/PCLibProj.m b/PCLibProj/PCLibProj.m deleted file mode 100644 index 1a22de4..0000000 --- a/PCLibProj/PCLibProj.m +++ /dev/null @@ -1,141 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -/* - Description: - - PCLibProj creates new project of the type Application! - -*/ - -#include "PCLibProj.h" -#include "PCLibProject.h" - -@implementation PCLibProj - -static NSString *_projTypeName = @"Library"; -static PCLibProj *_creator = nil; - -//---------------------------------------------------------------------------- -// ProjectType -//---------------------------------------------------------------------------- - -+ (id)sharedCreator -{ - if (!_creator) { - _creator = [[[self class] alloc] init]; - } - return _creator; -} - -- (Class)projectClass -{ - return [PCLibProject class]; -} - -- (NSString *)projectTypeName -{ - return _projTypeName; -} - -- (NSDictionary *)typeTable -{ - NSString *_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" ofType:@"table"]; - - return [NSDictionary dictionaryWithContentsOfFile:_path]; -} - -- (PCProject *)createProjectAt:(NSString *)path -{ - PCLibProject *project = nil; - NSFileManager *fm = [NSFileManager defaultManager]; - - NSAssert(path,@"No valid project path provided!"); - - if ([fm createDirectoryAtPath:path attributes:nil]) { - NSString *_file; - //NSString *_resourcePath; - NSMutableDictionary *dict; - NSString *projectFile; - - project = [[[PCLibProject alloc] init] autorelease]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"PC" ofType:@"proj"]; - dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; - - // Customise the project - [dict setObject:[path lastPathComponent] forKey:PCProjectName]; - [dict setObject:[[project principalClass] description] forKey:PCProjType]; - - // Save the project to disc - projectFile = [NSString stringWithString:[path lastPathComponent]]; - projectFile = [projectFile stringByAppendingPathExtension:@"pcproj"]; - [dict writeToFile:[path stringByAppendingPathComponent:projectFile] - atomically:YES]; - - // Copy the project files to the provided path - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"postamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"preamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"main" ofType:@"m"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"main.m"] handler:nil]; - - // Resources - /* - _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; - [fm createDirectoryAtPath:_resourcePath attributes:nil]; - */ - - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] attributes:nil]; - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"Version" ofType:@""]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"Version"] handler:nil]; - - // The path cannot be in the PC.project file! - [project setProjectPath:path]; - - // Set the new dictionary - this causes the GNUmakefile to be written to disc - if(![project assignProjectDict:dict]) { - NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); - return nil; - } - } - return project; -} - -- (PCProject *)openProjectAt:(NSString *)path -{ - NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; - - if ([[dict objectForKey:PCProjectBuilderClass] isEqualToString:@"PCLibProj"]) { - return [[[PCLibProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; - } - return nil; -} - -@end diff --git a/PCLibProj/PCLibProj.pbproj/project.pbxproj b/PCLibProj/PCLibProj.pbproj/project.pbxproj deleted file mode 100644 index 99d22d9..0000000 --- a/PCLibProj/PCLibProj.pbproj/project.pbxproj +++ /dev/null @@ -1,401 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA410018CDE011CA2923 = { - isa = PBXBundleReference; - path = PCLibProj.bundle; - refType = 3; - }; - 014CEA420018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA430018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//080 -//081 -//082 -//083 -//084 - 089C1669FE841209C02AAC07 = { - buildStyles = ( - 014CEA420018CDE011CA2923, - 014CEA430018CDE011CA2923, - ); - isa = PBXProject; - mainGroup = 089C166AFE841209C02AAC07; - projectDirPath = ""; - targets = ( - 089C1673FE841209C02AAC07, - ); - }; - 089C166AFE841209C02AAC07 = { - children = ( - 08FB77AFFE84173DC02AAC07, - 089C167CFE841241C02AAC07, - 089C1671FE841209C02AAC07, - 19C28FB8FE9D52D311CA2CBB, - ); - isa = PBXGroup; - name = PCLibProj; - refType = 4; - }; - 089C1671FE841209C02AAC07 = { - children = ( - 1058C7ACFEA557BF11CA2CBB, - 1058C7AEFEA557BF11CA2CBB, - ); - isa = PBXGroup; - name = "Frameworks and Libraries"; - refType = 4; - }; - 089C1672FE841209C02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 089C1673FE841209C02AAC07 = { - buildPhases = ( - 089C1674FE841209C02AAC07, - 089C1675FE841209C02AAC07, - 089C1676FE841209C02AAC07, - 089C1677FE841209C02AAC07, - 089C1679FE841209C02AAC07, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/philippe/Library/Frameworks; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = PCLibProj; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = bundle; - }; - dependencies = ( - ); - isa = PBXBundleTarget; - name = PCLibProj; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = PCLibProj; - productReference = 014CEA410018CDE011CA2923; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - PCLibProj - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - PCLibProj - - -"; - shouldUseHeadermap = 1; - }; - 089C1674FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97EC03939DA701000102, - F56C97EE03939DA701000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1675FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1680FE841241C02AAC07, - F56C97F403939DC501000102, - F56C97F503939DC501000102, - F56C97F603939DC501000102, - F56C97F703939DC501000102, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1676FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C97ED03939DA701000102, - F56C97EF03939DA701000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1677FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7AFFEA557BF11CA2CBB, - F56C97E703939D8901000102, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1679FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C167CFE841241C02AAC07 = { - children = ( - 089C167DFE841241C02AAC07, - F56C97F003939DC501000102, - F56C97F103939DC501000102, - F56C97F203939DC501000102, - F56C97F303939DC501000102, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C167DFE841241C02AAC07 = { - children = ( - 089C167EFE841241C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C167EFE841241C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C167FFE841241C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1680FE841241C02AAC07 = { - fileRef = 089C167DFE841241C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AFFE84173DC02AAC07 = { - children = ( - F56C97E803939DA701000102, - F56C97E903939DA701000102, - F56C97EA03939DA701000102, - F56C97EB03939DA701000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7ACFEA557BF11CA2CBB = { - children = ( - 1058C7ADFEA557BF11CA2CBB, - F56C97C603939D8901000102, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7ADFEA557BF11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7AEFEA557BF11CA2CBB = { - children = ( - 089C1672FE841209C02AAC07, - 089C167FFE841241C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7AFFEA557BF11CA2CBB = { - fileRef = 1058C7ADFEA557BF11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//190 -//191 -//192 -//193 -//194 - 19C28FB8FE9D52D311CA2CBB = { - children = ( - 014CEA410018CDE011CA2923, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//F50 -//F51 -//F52 -//F53 -//F54 - F56C97C603939D8901000102 = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - F56C97E703939D8901000102 = { - fileRef = F56C97C603939D8901000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97E803939DA701000102 = { - isa = PBXFileReference; - path = PCLibProj.h; - refType = 4; - }; - F56C97E903939DA701000102 = { - isa = PBXFileReference; - path = PCLibProj.m; - refType = 4; - }; - F56C97EA03939DA701000102 = { - isa = PBXFileReference; - path = PCLibProject.h; - refType = 4; - }; - F56C97EB03939DA701000102 = { - isa = PBXFileReference; - path = PCLibProject.m; - refType = 4; - }; - F56C97EC03939DA701000102 = { - fileRef = F56C97E803939DA701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97ED03939DA701000102 = { - fileRef = F56C97E903939DA701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97EE03939DA701000102 = { - fileRef = F56C97EA03939DA701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97EF03939DA701000102 = { - fileRef = F56C97EB03939DA701000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97F003939DC501000102 = { - isa = PBXFileReference; - path = h.template; - refType = 4; - }; - F56C97F103939DC501000102 = { - isa = PBXFileReference; - path = m.template; - refType = 4; - }; - F56C97F203939DC501000102 = { - isa = PBXFileReference; - path = PC.proj; - refType = 4; - }; - F56C97F303939DC501000102 = { - isa = PBXFileReference; - path = Version; - refType = 4; - }; - F56C97F403939DC501000102 = { - fileRef = F56C97F003939DC501000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97F503939DC501000102 = { - fileRef = F56C97F103939DC501000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97F603939DC501000102 = { - fileRef = F56C97F203939DC501000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C97F703939DC501000102 = { - fileRef = F56C97F303939DC501000102; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 089C1669FE841209C02AAC07; -} diff --git a/PCLibProj/PCLibProject.m b/PCLibProj/PCLibProject.m deleted file mode 100644 index 9558469..0000000 --- a/PCLibProj/PCLibProject.m +++ /dev/null @@ -1,173 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCProject+UInterface.h" -#include "PCLibProject.h" -#include "PCLibProj.h" - -#include - -@interface PCLibProject (CreateUI) - -- (void)_initUI; - -@end - -@implementation PCLibProject (CreateUI) - -- (void)_initUI -{ - [super _initUI]; -} - -@end - -@implementation PCLibProject - -//---------------------------------------------------------------------------- -// Init and free -//---------------------------------------------------------------------------- - -- (id)init -{ - if ((self = [super init])) { - rootObjects = [[NSArray arrayWithObjects: PCClasses, - PCHeaders, - PCOtherSources, - PCOtherResources, - PCSubprojects, - PCDocuFiles, - PCSupportingFiles, - PCLibraries, - PCNonProject, - nil] retain]; - - rootKeys = [[NSArray arrayWithObjects: @"Classes", - @"Headers", - @"Other Sources", - @"Other Resources", - @"Subprojects", - @"Documentation", - @"Supporting Files", - @"Libraries", - @"Non Project Files", - nil] retain]; - - rootCategories = [[NSDictionary - dictionaryWithObjects:rootObjects forKeys:rootKeys] retain]; - - } - return self; -} - -- (void)dealloc -{ - [rootCategories release]; - [rootObjects release]; - [rootKeys release]; - - [super dealloc]; -} - -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- - -- (Class)builderClass -{ - return [PCLibProj class]; -} - -- (BOOL)writeMakefile -{ - NSData *mfd; - NSString *mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; - PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; - NSDictionary *dict = [self projectDict]; - - // Save the project file - [super writeMakefile]; - - [mf createMakefileForProject:[self projectName]]; - [mf appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"]; - [mf appendString:@"include Version\n"]; - [mf appendSubprojects:[dict objectForKey:PCSubprojects]]; - - [mf appendLibrary]; - [mf appendLibraryInstallDir:[dict objectForKey:PCInstallDir]]; - [mf appendLibraryLibraries:[dict objectForKey:PCLibraries]]; - - [mf appendLibraryHeaders:[dict objectForKey:PCHeaders]]; - [mf appendLibraryClasses:[dict objectForKey:PCClasses]]; - [mf appendLibraryOtherSources:[dict objectForKey:PCOtherSources]]; - - [mf appendTailForLibrary]; - - // Write the new file to disc! - if ((mfd = [mf encodedMakefile])) - { - if ([mfd writeToFile:mfl atomically:YES]) - { - return YES; - } - } - - return NO; -} - -- (NSArray *)sourceFileKeys -{ - return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; -} - -- (NSArray *)resourceFileKeys -{ - return [NSArray array]; -} - -- (NSArray *)otherKeys -{ - return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; -} - -- (NSArray *)buildTargets -{ - return nil; -} - -- (NSString *)projectDescription -{ - return @"Project that handles GNUstep/ObjC based libraries."; -} - -- (void)updateValuesFromProjectDict -{ - [super updateValuesFromProjectDict]; - - //[appClassField setStringValue:[projectDict objectForKey:PCAppClass]]; -} - -@end diff --git a/PCLogController.h b/PCLogController.h index 1c1da87..b99cef0 100644 --- a/PCLogController.h +++ b/PCLogController.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCLOGCONTROLLER_H @@ -29,14 +27,37 @@ #include -#define INFORMATION 0 -#define WARNING 1 +#define INFO 0 +#define STATUS 1 +#define WARNING 2 +#define ERROR 3 + +// --- Functions +void +PCLog(id sender, int tag, NSString* format, va_list args); +void +PCLogInfo(id sender, NSString* format, ...); +void +PCLogStatus(id sender, NSString* format, ...); +void +PCLogWarning(id sender, NSString* format, ...); +void +PCLogError(id sender, NSString* format, ...); + @interface PCLogController : NSObject { + IBOutlet NSPanel *panel; + IBOutlet NSTextView *textView; + + NSMutableDictionary *textAttributes; } -- (void)logMessage:(NSString *)message tag:(int)tag; ++ (PCLogController *)sharedLogController; + +- (void)showPanel; +- (void)logMessage:(NSString *)message withTag:(int)tag sender:(id)sender; +- (void)putMessageOnScreen:(NSAttributedString *)message; @end diff --git a/PCLogController.m b/PCLogController.m index 6fdf0d0..697a572 100644 --- a/PCLogController.m +++ b/PCLogController.m @@ -20,34 +20,167 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCLogController.h" +void +PCLog(id sender, int tag, NSString* format, va_list args) +{ + [[PCLogController sharedLogController] + logMessage:[NSString stringWithFormat:format arguments: args] + withTag:tag + sender:sender]; +} + +void +PCLogInfo(id sender, NSString* format, ...) +{ + va_list ap; + + va_start(ap, format); + PCLog(sender, INFO, format, ap); + va_end(ap); +} + +void +PCLogStatus(id sender, NSString* format, ...) +{ + va_list ap; + + va_start(ap, format); + PCLog(sender, STATUS, format, ap); + va_end(ap); +} + +void +PCLogWarning(id sender, NSString* format, ...) +{ + va_list ap; + + va_start(ap, format); + PCLog(sender, WARNING, format, ap); + va_end(ap); +} + +void +PCLogError(id sender, NSString* format, ...) +{ + va_list ap; + + va_start(ap, format); + PCLog(sender, ERROR, format, ap); + va_end(ap); +} + @implementation PCLogController -- (void)logMessage:(NSString *)message tag:(int)tag; +// =========================================================================== +// ==== Class methods +// =========================================================================== + +static PCLogController *_logCtrllr = nil; + ++ (PCLogController *)sharedLogController { - NSString *_log; - - switch (tag) + if (!_logCtrllr) { - case 0: - _log = [NSString stringWithFormat:@"Information from <%@: %x - %x>: %@",[self class],self,[NSThread currentThread],message]; - break; - - case 1: - _log = [NSString stringWithFormat:@"Warning from <%@: %x - %x>: %@",[self class],self,[NSThread currentThread],message]; - break; - - default: - break; + _logCtrllr = [[PCLogController alloc] init]; } - - // Later we redirect this to our own output. - NSLog(message); + + return _logCtrllr; +} + +// =========================================================================== +// ==== Init and free +// =========================================================================== + +- (id)init +{ + NSFont *font = nil; + + if (!(self = [super init])) + { + return nil; + } + + if ([NSBundle loadNibNamed:@"LogPanel" owner:self] == NO) + { + NSLog(@"PCLogController[init]: error loading NIB file!"); + return nil; + } + + [panel setFrameAutosaveName:@"LogPanel"]; + if (![panel setFrameUsingName: @"LogPanel"]) + { + [panel center]; + } + + font = [NSFont userFixedPitchFontOfSize: 10.0]; + textAttributes = + [NSMutableDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; + [textAttributes retain]; + + return self; +} + +- (void)dealloc +{ + NSLog(@"PCLogController: dealloc"); + RELEASE(textAttributes); +} + +- (void)showPanel +{ + [panel orderFront:self]; +} + +- (void)logMessage:(NSString *)text withTag:(int)tag sender:(id)sender; +{ + NSString *messageText = nil; + NSAttributedString *message = nil; + + messageText = + [NSString stringWithFormat:@" %@: %@\n",[sender className],text]; + + switch (tag) + { + case INFO: + [textAttributes + setObject:[NSColor colorWithDeviceRed:.0 green:.0 blue:.0 alpha:1.0] + forKey:NSForegroundColorAttributeName]; + break; + case STATUS: + [textAttributes + setObject:[NSColor colorWithDeviceRed:.0 green:.35 blue:.0 alpha:1.0] + forKey:NSForegroundColorAttributeName]; + break; + + case WARNING: + [textAttributes + setObject:[NSColor colorWithDeviceRed:.56 green:.45 blue:.0 alpha:1.0] + forKey:NSForegroundColorAttributeName]; + break; + + case ERROR: + [textAttributes + setObject:[NSColor colorWithDeviceRed:.63 green:.0 blue:.0 alpha:1.0] + forKey:NSForegroundColorAttributeName]; + break; + + default: + break; + } + + message = [[NSAttributedString alloc] initWithString:messageText + attributes:textAttributes]; + [self putMessageOnScreen:message]; +} + +- (void)putMessageOnScreen:(NSAttributedString *)message +{ + [[textView textStorage] appendAttributedString:message]; + [textView scrollRangeToVisible:NSMakeRange([[textView string] length], 0)]; } @end diff --git a/PCMenuController.h b/PCMenuController.h index c4fccd0..c853300 100644 --- a/PCMenuController.h +++ b/PCMenuController.h @@ -20,8 +20,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCMENUCONTROLLER_H @@ -36,13 +34,9 @@ @interface PCMenuController : NSObject { PCProjectManager *projectManager; - PCFileManager *fileManager; PCAppController *appController; - - NSBox *projectTypeAccessaryView; - id projectTypePopup; - BOOL editorIsKey; + BOOL editorIsActive; } //============================================================================ @@ -53,34 +47,29 @@ - (void)dealloc; - (void)setAppController:(id)anObject; -- (void)setFileManager:(id)anObject; - (void)setProjectManager:(id)anObject; //============================================================================ //==== Menu stuff //============================================================================ -- (void)addProjectTypeNamed:(NSString *)name; - // Info - (void)showInfoPanel:(id)sender; - (void)showPrefWindow:(id)sender; +- (void)showLogPanel:(id)sender; // Project - (void)projectOpen:(id)sender; - (void)projectNew:(id)sender; - (void)projectSave:(id)sender; -- (void)projectSaveAs:(id)sender; - (void)projectAddFiles:(id)sender; - (void)projectSaveFiles:(id)sender; - (void)projectRemoveFiles:(id)sender; -- (void)projectRevertToSaved:(id)sender; - (void)projectClose:(id)sender; // Subproject - (void)subprojectNew:(id)sender; - (void)subprojectAdd:(id)sender; -- (void)subprojectRemove:(id)sender; // File - (void)fileNew:(id)sender; @@ -102,9 +91,21 @@ // Tools - (void)showInspector:(id)sender; - (void)showEditorPanel:(id)sender; -- (void)showRunPanel:(id)sender; +// Project Build - (void)showBuildPanel:(id)sender; +- (void)executeBuild:(id)sender; +- (void)stopBuild:(id)sender; +- (void)startClean:(id)sender; +// Loaded Files +- (void)showLoadedFilesPanel:(id)sender; +- (void)loadedFilesSortByTime:(id)sender; +- (void)loadedFilesSortByName:(id)sender; +- (void)loadedFilesNextFile:(id)sender; +- (void)loadedFilesPreviousFile:(id)sender; +// Launcher +- (void)showLaunchPanel:(id)sender; - (void)runTarget:(id)sender; +- (void)debugTarget:(id)sender; //============================================================================ //==== Delegate stuff @@ -112,8 +113,8 @@ - (BOOL)validateMenuItem:(id )menuItem; -- (void)editorDidResignKey:(NSNotification *)aNotification; -- (void)editorDidBecomeKey:(NSNotification *)aNotification; +- (void)editorDidBecomeActive:(NSNotification *)aNotif; +- (void)editorDidResignActive:(NSNotification *)aNotif; @end diff --git a/PCMenuController.m b/PCMenuController.m index a4a8b87..dfc8c31 100644 --- a/PCMenuController.m +++ b/PCMenuController.m @@ -20,97 +20,55 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ -#include "PCMenuController.h" - -#include #include "PCAppController.h" +#include "PCMenuController.h" +#include "PCInfoController.h" +#include "PCPrefController.h" +#include "PCLogController.h" +#include @implementation PCMenuController - (id)init { if ((self = [super init])) - { - NSRect fr = NSMakeRect(20,30,160,20); + { + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(editorDidBecomeActive:) + name:PCEditorDidBecomeActiveNotification + object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(editorDidBecomeKey:) - name:PCEditorDidBecomeKeyNotification - object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(editorDidResignActive:) + name:PCEditorDidResignActiveNotification + object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(editorDidResignKey:) - name:PCEditorDidResignKeyNotification - object:nil]; - - editorIsKey = NO; - - projectTypeAccessaryView = [[NSBox alloc] init]; - projectTypePopup = [[NSPopUpButton alloc] initWithFrame:fr pullsDown:NO]; - [projectTypePopup setAutoenablesItems: NO]; - [projectTypePopup addItemWithTitle:@"No type available!"]; - - [projectTypeAccessaryView setTitle:@"Project Types"]; - [projectTypeAccessaryView setTitlePosition:NSAtTop]; - [projectTypeAccessaryView setBorderType:NSGrooveBorder]; - [projectTypeAccessaryView addSubview:projectTypePopup]; - [projectTypeAccessaryView sizeToFit]; - [projectTypeAccessaryView setAutoresizingMask: - NSViewMinXMargin | NSViewMaxXMargin]; - - RELEASE(projectTypePopup); - } + editorIsActive = NO; + } return self; } - (void)dealloc { + NSLog(@"PCMenuController: dealloc"); [[NSNotificationCenter defaultCenter] removeObserver:self]; - RELEASE(projectTypeAccessaryView); - [super dealloc]; } -- (void)addProjectTypeNamed:(NSString *)name -{ - static BOOL _firstItem = YES; - - if (_firstItem) - { - _firstItem = NO; - [projectTypePopup removeItemWithTitle:@"No type available!"]; - } - - [projectTypePopup addItemWithTitle:name]; - [projectTypePopup sizeToFit]; - [projectTypeAccessaryView sizeToFit]; -} - - (void)setAppController:(id)anObject { - [appController autorelease]; appController = anObject; - RETAIN(appController); -} - -- (void)setFileManager:(id)anObject -{ - [fileManager autorelease]; - fileManager = anObject; - RETAIN(fileManager); } - (void)setProjectManager:(id)anObject { - [projectManager autorelease]; projectManager = anObject; - RETAIN(projectManager); } //============================================================================ @@ -120,7 +78,7 @@ // Info - (void)showPrefWindow:(id)sender { - [[[NSApp delegate] prefController] showPrefWindow:sender]; + [[[NSApp delegate] prefController] showPanel:sender]; } - (void)showInfoPanel:(id)sender @@ -130,81 +88,23 @@ - (void)showEditorPanel:(id)sender { - [[projectManager activeProject] showEditorView:self]; + [[[projectManager rootActiveProject] projectWindow] showProjectEditor:self]; +} + +- (void)showLogPanel:(id)sender +{ + [[appController logController] showPanel]; } // Project - (void)projectOpen:(id)sender { - NSString *projPath; - NSOpenPanel *openPanel; - int retval; - - openPanel = [NSOpenPanel openPanel]; - [openPanel setAllowsMultipleSelection:NO]; - [openPanel setCanChooseDirectories:NO]; - [openPanel setCanChooseFiles:YES]; - - retval = [openPanel runModalForDirectory:[[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenDirectory"] file:nil types:[NSArray arrayWithObjects:@"project",@"pcproj",nil]]; - - if (retval == NSOKButton) - { - BOOL isDir; - - [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] - forKey:@"LastOpenDirectory"]; - - projPath = [[openPanel filenames] objectAtIndex:0]; - - if ([[NSFileManager defaultManager] fileExistsAtPath:projPath - isDirectory:&isDir] && !isDir) - { - if (![projectManager openProjectAt:projPath]) - { - NSRunAlertPanel(@"Attention!", - @"Couldn't open %@!", - @"OK",nil,nil, - [projPath stringByDeletingLastPathComponent]); - } - } - } + [projectManager openProject]; } - (void)projectNew:(id)sender { - NSSavePanel *sp; - int runResult; - NSString *dir = nil; - - sp = [NSSavePanel savePanel]; - - [sp setTitle:@"Create new project..."]; - [sp setAccessoryView:nil]; - [sp setAccessoryView:projectTypeAccessaryView]; - - dir = [[NSUserDefaults standardUserDefaults] objectForKey:@"LastNewDirectory"]; - if( !dir ) - { - dir = NSHomeDirectory(); - } - - [projectTypePopup selectItemAtIndex:0]; - runResult = [sp runModalForDirectory:dir file:@""]; - if (runResult == NSOKButton) - { - NSString *projectType = [projectTypePopup titleOfSelectedItem]; - NSString *className = [[appController projectTypes] objectForKey:projectType]; - - [[NSUserDefaults standardUserDefaults] setObject:[sp directory] - forKey:@"LastNewDirectory"]; - - if (![projectManager createProjectOfType:className path:[sp filename]]) - { - NSRunAlertPanel(@"Attention!", - @"Failed to create %@!", - @"OK",nil,nil,[sp filename]); - } - } + [projectManager newProject]; } - (void)projectSave:(id)sender @@ -212,57 +112,19 @@ [projectManager saveProject]; } -- (void)projectSaveAs:(id)sender -{ - NSString *proj = nil; - - // Show save panel - NSRunAlertPanel(@"Attention!", - @"This feature is not yet implemented!", - @"OK",nil,nil); - - [projectManager saveProjectAs:proj]; -} - - (void)projectAddFiles:(id)sender { - [fileManager showAddFileWindow]; + [projectManager addProjectFiles]; } - (void)projectSaveFiles:(id)sender { - [projectManager saveAllFiles]; + [projectManager saveProjectFiles]; } - (void)projectRemoveFiles:(id)sender { - NSString *fileName = nil; - PCProject *proj = [projectManager activeProject]; - NSArray *files = [[proj browserController] selectedFiles]; - - if ((fileName = [[proj browserController] nameOfSelectedFile])) - { - int ret; - - ret = NSRunAlertPanel(@"Remove File!", - @"Really remove %@ in project %@?", - @"Cancel", - @"...from Project only", - @"...from Project and Disk", - files, [proj projectName]); - - if (ret == NSAlertAlternateReturn || ret == NSAlertOtherReturn) - { - BOOL flag = (ret == NSAlertOtherReturn) ? YES : NO; - - [projectManager removeFilesPermanently:flag]; - } - } -} - -- (void)projectRevertToSaved:(id)sender -{ - [projectManager revertToSaved]; + [projectManager removeProjectFiles]; } - (void)projectClose:(id)sender @@ -278,61 +140,18 @@ - (void)subprojectAdd:(id)sender { - NSString *proj = nil; - - // Show open panel - - [projectManager addSubprojectAt:proj]; -} - -- (void)subprojectRemove:(id)sender -{ - [projectManager removeSubproject]; + [projectManager addSubproject]; } // File - (void)fileOpen:(id)sender { - NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - NSString *filePath; - NSOpenPanel *openPanel; - int retval; - - openPanel = [NSOpenPanel openPanel]; - [openPanel setAllowsMultipleSelection:NO]; - [openPanel setCanChooseDirectories:NO]; - [openPanel setCanChooseFiles:YES]; - - retval = [openPanel - runModalForDirectory:[ud objectForKey:@"LastOpenDirectory"] - file:nil - types:nil]; - - if (retval == NSOKButton) - { - BOOL isDir; - NSFileManager *fm = [NSFileManager defaultManager]; - - [ud setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; - - filePath = [[openPanel filenames] objectAtIndex:0]; - - if (![fm fileExistsAtPath:filePath isDirectory:&isDir] && !isDir) - { - NSRunAlertPanel(@"Attention!", - @"Couldn't open %@!", - @"OK",nil,nil,filePath); - } - else - { - [PCEditorController openFileInEditor:filePath]; - } - } + [projectManager openFile]; } - (void)fileNew:(id)sender { - [fileManager showNewFileWindow]; + [projectManager newFile]; } - (void)fileSave:(id)sender @@ -340,7 +159,6 @@ [projectManager saveFile]; } -// Not finished - (void)fileSaveAs:(id)sender { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; @@ -351,7 +169,7 @@ int retval = NSOKButton; oldFilePath = - [[[[projectManager activeProject] editorController] activeEditor] path]; + [[[[projectManager rootActiveProject] projectEditor] activeEditor] path]; [savePanel setTitle: @"Save As..."]; while (![directory isEqualToString: [projectManager projectPath]] @@ -378,40 +196,26 @@ else { PCProject *project = [projectManager activeProject]; - NSString *category = [[[project rootCategories] allKeysForObject:PCNonProject] objectAtIndex:0]; + NSString *categoryPath = nil; + + categoryPath = [NSString stringWithString:@"/"]; + categoryPath = [categoryPath stringByAppendingPathComponent: + [[project rootEntries] objectForKey:PCNonProject]]; [projectManager closeFile]; - [project addFile:newFilePath forKey:PCNonProject]; - [project browserDidClickFile:[newFilePath lastPathComponent] - category:category]; + [project addFiles:[NSArray arrayWithObject:newFilePath] + forKey:PCNonProject]; + [[project projectEditor] editorForFile:newFilePath + categoryPath:categoryPath + windowed:NO]; } } } + - (void)fileSaveTo:(id)sender { - NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; - NSString *filePath = [projectManager selectedFileName]; - NSSavePanel *savePanel = [NSSavePanel savePanel]; - int retval; - - [savePanel setTitle: @"Save To..."]; - retval = [savePanel runModalForDirectory:[projectManager projectPath] - file:filePath]; - - if (retval == NSOKButton) - { - [ud setObject:[savePanel directory] forKey:@"LastOpenDirectory"]; - - filePath = [savePanel filename]; - - if (![projectManager saveFileTo:filePath]) - { - NSRunAlertPanel(@"Attention!", - @"Couldn't save file to\n%@!", - @"OK",nil,nil,filePath); - } - } + [projectManager saveFileTo]; } - (void)fileRevertToSaved:(id)sender @@ -433,15 +237,12 @@ - (void)fileRename:(id)sender { -/* NSString *proj = nil; - // Show Inspector panel with "File Attributes" section + [projectManager renameFile]; - [projectManager renameFileTo:proj];*/ - - NSRunAlertPanel(@"PCMenuController: Sorry!", +/* NSRunAlertPanel(@"PCMenuController: Sorry!", @"This feature is not finished yet", - @"OK",nil,nil); + @"OK",nil,nil);*/ } - (void)fileNewUntitled:(id)sender @@ -451,7 +252,7 @@ @"OK",nil,nil); } -// Edit +// Edit. PCProjectEditor have to provide this menu and functionality - (void)findShowPanel:(id)sender { [[PCTextFinder sharedFinder] showFindPanel:self]; @@ -468,24 +269,91 @@ } // Tools + +- (void)toggleToolbar:(id)sender +{ + [[[projectManager rootActiveProject] projectWindow] toggleToolbar]; + + if ([[sender title] isEqualToString:@"Hide Tool Bar"]) + { + [sender setTitle:@"Show Tool Bar"]; + } + else + { + [sender setTitle:@"Hide Tool Bar"]; + } +} + - (void)showInspector:(id)sender { - [projectManager showInspectorForProject:[projectManager activeProject]]; -} - -- (void)showRunPanel:(id)sender -{ - [[projectManager activeProject] showRunView:self]; + [projectManager showProjectInspector:self]; } +// Build Panel - (void)showBuildPanel:(id)sender { - [[projectManager activeProject] showBuildView:self]; + [[[projectManager rootActiveProject] projectWindow] showProjectBuild:self]; +} + +- (void)executeBuild:(id)sender +{ + [self showBuildPanel:self]; + [[[projectManager rootActiveProject] projectBuilder] performStartBuild]; +} + +- (void)stopBuild:(id)sender +{ + [[[projectManager rootActiveProject] projectBuilder] performStopBuild]; +} + +- (void)startClean:(id)sender +{ + [self showBuildPanel:self]; + [[[projectManager rootActiveProject] projectBuilder] performStartClean]; +} + +// Loaded Files +- (void)showLoadedFilesPanel:(id)sender +{ + [projectManager showProjectLoadedFiles:self]; +} + +- (void)loadedFilesSortByTime:(id)sender +{ + [[[projectManager rootActiveProject] projectLoadedFiles] setSortByTime]; +} + +- (void)loadedFilesSortByName:(id)sender +{ + [[[projectManager rootActiveProject] projectLoadedFiles] setSortByName]; +} + +- (void)loadedFilesNextFile:(id)sender +{ + [[[projectManager rootActiveProject] projectLoadedFiles] selectNextFile]; +} + +- (void)loadedFilesPreviousFile:(id)sender +{ + [[[projectManager rootActiveProject] projectLoadedFiles] selectPreviousFile]; +} + +// Launch Panel +- (void)showLaunchPanel:(id)sender +{ + [[[projectManager rootActiveProject] projectWindow] showProjectLaunch:self]; } - (void)runTarget:(id)sender { - [[projectManager activeProject] runSelectedTarget:self]; + [self showLaunchPanel:self]; + [[[projectManager rootActiveProject] projectLauncher] performRun]; +} + +- (void)debugTarget:(id)sender +{ + [self showLaunchPanel:self]; + [[[projectManager rootActiveProject] projectLauncher] performDebug]; } //============================================================================ @@ -494,9 +362,10 @@ - (BOOL)validateMenuItem:(id )menuItem { - NSString *menuTitle = [[menuItem menu] title]; - PCProject *aProject = [projectManager activeProject]; - NSResponder *firstResponder = [[NSApp keyWindow] firstResponder]; + NSString *menuTitle = [[menuItem menu] title]; + PCProject *aProject = [projectManager activeProject]; + PCProjectEditor *projectEditor = [aProject projectEditor]; + PCProjectBrowser *projectBrowser = [aProject projectBrowser]; if ([[projectManager loadedProjects] count] == 0) { @@ -504,10 +373,13 @@ if ([menuTitle isEqualToString: @"Project"]) { if ([[menuItem title] isEqualToString:@"Save"]) return NO; - if ([[menuItem title] isEqualToString:@"Save As..."]) return NO; if ([[menuItem title] isEqualToString:@"Add Files..."]) return NO; if ([[menuItem title] isEqualToString:@"Save Files..."]) return NO; if ([[menuItem title] isEqualToString:@"Remove Files..."]) return NO; + if ([[menuItem title] isEqualToString:@"New Subproject..."]) + return NO; + if ([[menuItem title] isEqualToString:@"Add Subproject..."]) + return NO; if ([[menuItem title] isEqualToString:@"Close"]) return NO; } @@ -530,6 +402,7 @@ { if ([[menuItem title] isEqualToString:@"Inspector..."]) return NO; if ([[menuItem title] isEqualToString:@"Hide Tool Bar"]) return NO; + if ([[menuItem title] isEqualToString:@"Show Tool Bar"]) return NO; } if ([menuTitle isEqualToString: @"Project Build"]) { @@ -576,28 +449,47 @@ // Project related menu items if ([menuTitle isEqualToString: @"Project"] - && [aProject selectedRootCategory] == nil) + && [projectBrowser nameOfSelectedFile] == nil + && [projectBrowser selectedFiles] == nil) + { + if ([[menuItem title] isEqualToString:@"Remove Files..."]) return NO; + } + if ([menuTitle isEqualToString: @"Project"] + && [[projectEditor allEditors] count] == 0) + { + if ([[menuItem title] isEqualToString:@"Save Files..."]) return NO; + } + if ([menuTitle isEqualToString: @"Project"] + && [projectBrowser nameOfSelectedCategory] == nil) { if ([[menuItem title] isEqualToString:@"Add Files..."]) return NO; - if ([[menuItem title] isEqualToString:@"Remove Files..."]) return NO; + if ([[menuItem title] isEqualToString:@"Add Subproject..."]) return NO; + } + if ([menuTitle isEqualToString: @"Project"] + && ![[projectBrowser nameOfSelectedRootCategory] isEqualToString:@"Subprojects"]) + { + if ([[menuItem title] isEqualToString:@"Add Subproject..."]) return NO; } // File related menu items if (([menuTitle isEqualToString: @"File"])) { - if (![[firstResponder className] isEqualToString: @"PCEditorView"]) + if (!editorIsActive) { if ([[menuItem title] isEqualToString:@"Save"]) return NO; if ([[menuItem title] isEqualToString:@"Save As..."]) return NO; if ([[menuItem title] isEqualToString:@"Save To..."]) return NO; if ([[menuItem title] isEqualToString:@"Revert to Saved"]) return NO; if ([[menuItem title] isEqualToString:@"Close"]) return NO; - if ([[menuItem title] isEqualToString:@"Rename"]) return NO; } } + if ([projectBrowser nameOfSelectedFile] == nil) + { + if ([[menuItem title] isEqualToString:@"Rename"]) return NO; + } // Find menu items - if (editorIsKey == NO && [menuTitle isEqualToString: @"Find"]) + if (editorIsActive == NO && [menuTitle isEqualToString: @"Find"]) { if (![[[PCTextFinder sharedFinder] findPanel] isVisible]) { @@ -610,17 +502,70 @@ if ([[menuItem title] isEqualToString:@"Man Page"]) return NO; } + // Toolbar + if ([[menuItem title] isEqualToString:@"Hide Tool Bar"] + && ![[[projectManager activeProject] projectWindow] isToolbarVisible]) + { + [menuItem setTitle:@"Show Tool Bar"]; + } + if ([[menuItem title] isEqualToString:@"Show Tool Bar"] + && [[[projectManager activeProject] projectWindow] isToolbarVisible]) + { + [menuItem setTitle:@"Hide Tool Bar"]; + } + + // Project Build related + if (([menuTitle isEqualToString: @"Project Build"])) + { + if ([[[projectManager activeProject] projectBuilder] isBuilding] + || [[[projectManager activeProject] projectBuilder] isCleaning]) + { + if ([[menuItem title] isEqualToString:@"Build"]) return NO; + if ([[menuItem title] isEqualToString:@"Clean"]) return NO; + if ([[menuItem title] isEqualToString:@"Next error"]) return NO; + if ([[menuItem title] isEqualToString:@"Previous error"]) return NO; + } + else + { + if ([[menuItem title] isEqualToString:@"Stop Build"]) return NO; + } + } + + // Project Launcher related + if (([menuTitle isEqualToString: @"Launcher"])) + { + if ([[[projectManager activeProject] projectLauncher] isRunning] + || [[[projectManager activeProject] projectLauncher] isDebugging]) + { + if ([[menuItem title] isEqualToString:@"Run"]) return NO; + if ([[menuItem title] isEqualToString:@"Debug"]) return NO; + } + } + + // Loaded Files related + if (([menuTitle isEqualToString: @"Loaded Files"])) + { + if ([[[aProject projectLoadedFiles] editedFilesRep] count] <= 0) + { + if ([[menuItem title] isEqualToString:@"Sort by Time Viewed"]) + return NO; + if ([[menuItem title] isEqualToString:@"Sort by Name"]) return NO; + if ([[menuItem title] isEqualToString:@"Next File"]) return NO; + if ([[menuItem title] isEqualToString:@"Previous File"]) return NO; + } + } + return YES; } -- (void)editorDidResignKey:(NSNotification *)aNotification +- (void)editorDidResignActive:(NSNotification *)aNotif { - editorIsKey = NO; + editorIsActive = NO; } -- (void)editorDidBecomeKey:(NSNotification *)aNotification +- (void)editorDidBecomeActive:(NSNotification *)aNotif { - editorIsKey = YES; + editorIsActive = YES; } @end diff --git a/PCPrefController+UInterface.m b/PCPrefController+UInterface.m deleted file mode 100644 index 85b7117..0000000 --- a/PCPrefController+UInterface.m +++ /dev/null @@ -1,456 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2003 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCPrefController.h" -#include "PCPrefController+UInterface.h" - -@implementation PCPrefController (UInterface) - -- (void)_initUI -{ - NSView *_c_view; - unsigned int style = NSTitledWindowMask | NSClosableWindowMask; - NSRect _w_frame; - NSBox *line; - NSBox *v; - NSTextField *textField; - NSButtonCell *cell; - - /* - * Pref Window - * - */ - - _w_frame = NSMakeRect(200,300,270,365); - prefWindow = [[NSWindow alloc] initWithContentRect:_w_frame - styleMask:style - backing:NSBackingStoreBuffered - defer:YES]; - [prefWindow setMinSize: NSMakeSize (270,365)]; - [prefWindow setTitle: @"Preferences"]; - [prefWindow setDelegate: self]; - [prefWindow setReleasedWhenClosed: NO]; - [prefWindow center]; - [prefWindow setFrameAutosaveName: @"Preferences"]; - _c_view = [prefWindow contentView]; - - prefPopup = [[NSPopUpButton alloc] initWithFrame: NSMakeRect (72,334,120,21)]; - [prefPopup addItemWithTitle: @"None"]; - [prefPopup setTarget: self]; - [prefPopup setAction: @selector (popupChanged:)]; - [_c_view addSubview: prefPopup]; - RELEASE(prefPopup); - - line = [[NSBox alloc] init]; - [line setTitlePosition: NSNoTitle]; - [line setFrameFromContentFrame: NSMakeRect(0,312,270,2)]; - [_c_view addSubview:line]; - RELEASE(line); - - prefEmptyView = [[NSBox alloc] init]; - [prefEmptyView setTitlePosition: NSNoTitle]; - [prefEmptyView setFrameFromContentFrame: NSMakeRect(0,0,270,312)]; - [prefEmptyView setBorderType: NSNoBorder]; - [_c_view addSubview: prefEmptyView]; - RELEASE(prefEmptyView); - - /* - * Building view - * - */ - prefBuildingView = [[NSBox alloc] initWithFrame: NSMakeRect(0,0,270,310)]; - [prefBuildingView setTitlePosition:NSNoTitle]; - [prefBuildingView setBorderType:NSNoBorder]; - - v = [[NSBox alloc] initWithFrame: NSMakeRect(5,208,254,102)]; - [v setTitle: @"Sounds"]; - [prefBuildingView addSubview: v]; - RELEASE(v); - - textField = [[NSTextField alloc] initWithFrame: NSMakeRect(0,40,54,21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue: @"Success:"]; - [v addSubview:textField]; - RELEASE(textField); - - successField = [[NSTextField alloc] initWithFrame:NSMakeRect(58,40,144,21)]; - [successField setAlignment: NSLeftTextAlignment]; - [successField setBordered: NO]; - [successField setEditable: YES]; - [successField setBezeled: YES]; - [successField setDrawsBackground: YES]; - [successField setTarget: self]; - [successField setAction: @selector (setSuccessSound:)]; - [v addSubview: successField]; - RELEASE(successField); - - textField = [[NSTextField alloc] initWithFrame: NSMakeRect(0,16,54,21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue: @"Failure:"]; - [v addSubview:textField]; - RELEASE(textField); - - failureField = [[NSTextField alloc] initWithFrame:NSMakeRect(58,16,144,21)]; - [failureField setAlignment: NSLeftTextAlignment]; - [failureField setBordered: NO]; - [failureField setEditable: YES]; - [failureField setBezeled: YES]; - [failureField setDrawsBackground: YES]; - [failureField setTarget: self]; - [failureField setAction: @selector (setFailureSound:)]; - [v addSubview: failureField]; - RELEASE(failureField); - - promptOnClean = [[NSButton alloc] initWithFrame: NSMakeRect(72,170,108,21)]; - [promptOnClean setTitle: @"Prompt on clean"]; - [promptOnClean setButtonType: NSSwitchButton]; - [promptOnClean setBordered: NO]; - [promptOnClean setRefusesFirstResponder: YES]; - [promptOnClean setTarget: self]; - [promptOnClean setAction: @selector (setPromptOnClean:)]; - [promptOnClean setContinuous: NO]; - [prefBuildingView addSubview: promptOnClean]; - [promptOnClean sizeToFit]; - RELEASE(promptOnClean); - - /* - * Saving view - */ - prefSavingView = [[NSBox alloc] initWithFrame: NSMakeRect (0,0,270,310)]; - [prefSavingView setTitlePosition: NSNoTitle]; - [prefSavingView setBorderType: NSNoBorder]; - - v = [[NSBox alloc] initWithFrame: NSMakeRect (5,208,254,102)]; - [v setTitle: @"Saving"]; - [prefSavingView addSubview: v]; - RELEASE(v); - - saveOnQuit=[[NSButton alloc] initWithFrame: NSMakeRect (24,52,124,15)]; - [saveOnQuit setTitle: @"Save Projects Upon Quit"]; - [saveOnQuit setButtonType: NSSwitchButton]; - [saveOnQuit setBordered: NO]; - [saveOnQuit setTarget: self]; - [saveOnQuit setAction: @selector (setSaveOnQuit:)]; - [saveOnQuit setContinuous: NO]; - [v addSubview: saveOnQuit]; - [saveOnQuit sizeToFit]; - RELEASE(saveOnQuit); - - saveAutomatically=[[NSButton alloc] initWithFrame: NSMakeRect (24,32,124,15)]; - [saveAutomatically setTitle: @"Save Project Automatically"]; - [saveAutomatically setButtonType: NSSwitchButton]; - [saveAutomatically setBordered :NO]; - [saveAutomatically setTarget: self]; - [saveAutomatically setAction: @selector (setSaveAutomatically:)]; - [saveAutomatically setContinuous: NO]; - [v addSubview: saveAutomatically]; - [saveAutomatically sizeToFit]; - RELEASE(saveAutomatically); - - keepBackup = [[NSButton alloc] initWithFrame: NSMakeRect (24,12,124,15)]; - [keepBackup setTitle: @"Keep Project Backup"]; - [keepBackup setButtonType: NSSwitchButton]; - [keepBackup setBordered: NO]; - [keepBackup setTarget: self]; - [keepBackup setAction: @selector (setKeepBackup:)]; - [keepBackup setContinuous: NO]; - [v addSubview: keepBackup]; - [keepBackup sizeToFit]; - RELEASE(keepBackup); - - v = [[NSBox alloc] initWithFrame: NSMakeRect(5,149,254,49)]; - [v setTitle: @"Auto-Save"]; - [prefSavingView addSubview: v]; - RELEASE(v); - - textField = [[NSTextField alloc] initWithFrame: NSMakeRect(12,0,54,21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue: @"Seconds:"]; - [v addSubview: textField]; - RELEASE(textField); - - autoSaveField = [[NSTextField alloc] initWithFrame:NSMakeRect(72,0,144,21)]; - [autoSaveField setAlignment: NSLeftTextAlignment]; - [autoSaveField setBordered: NO]; - [autoSaveField setEditable: YES]; - [autoSaveField setBezeled: YES]; - [autoSaveField setDrawsBackground: YES]; - [autoSaveField setTarget:self]; - [autoSaveField setAction:@selector(setSavePeriod:)]; - [v addSubview:autoSaveField]; - RELEASE(autoSaveField); - - /* - * Editing view - */ - prefEditingView = [[NSBox alloc] initWithFrame: NSMakeRect (0,0,270,310)]; - [prefEditingView setTitlePosition: NSNoTitle]; - [prefEditingView setBorderType: NSNoBorder]; - - v = [[NSBox alloc] initWithFrame: NSMakeRect(5,208,254,102)]; - [v setTitle:@"Tab Control"]; - [prefEditingView addSubview:v]; - RELEASE(v); - - cell = [[NSButtonCell alloc] init]; - [cell setButtonType: NSRadioButton]; - [cell setBordered: NO]; - [cell setImagePosition: NSImageLeft]; - - tabMatrix = [[NSMatrix alloc] initWithFrame: NSMakeRect(32,16,164,40) - mode: NSRadioModeMatrix - prototype: cell - numberOfRows: 2 - numberOfColumns: 2]; - - [tabMatrix setIntercellSpacing: NSMakeSize (8, 8) ]; - [tabMatrix setTarget: self]; - [tabMatrix setAction: @selector (setTabBehaviour:)]; - [tabMatrix setAutosizesCells: NO]; - - cell = [tabMatrix cellAtRow: 0 column: 0]; - [cell setTitle: @"Tabulator"]; - [cell setTag: 0]; - - cell = [tabMatrix cellAtRow: 1 column: 0]; - [cell setTitle: @"2 Spaces"]; - [cell setTag: 1]; - - cell = [tabMatrix cellAtRow: 0 column: 1]; - [cell setTitle: @"4 Spaces"]; - [cell setTag: 2]; - - cell = [tabMatrix cellAtRow: 1 column: 1]; - [cell setTitle: @"8 Spaces"]; - [cell setTag: 3]; - - [v addSubview:tabMatrix]; - RELEASE(tabMatrix); - - [tabMatrix selectCellAtRow: 0 column: 1]; - - - /* - * Misc view - * - */ - prefMiscView = [[NSBox alloc] init]; - [prefMiscView setTitlePosition:NSNoTitle]; - [prefMiscView setFrameFromContentFrame:NSMakeRect(1,1,260,308)]; - [prefMiscView setBorderType:NSNoBorder]; - - v = [[NSBox alloc] initWithFrame: NSMakeRect(5,189,254,121)]; - [v setTitle:@"External Tools"]; - [prefMiscView addSubview:v]; - RELEASE(v); - - // Editor - textField = [[NSTextField alloc] initWithFrame:NSMakeRect(12,16,60,21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue:@"Editor:"]; - [v addSubview:textField]; - RELEASE(textField); - - editorField = [[NSTextField alloc] initWithFrame:NSMakeRect(72,16,144,21)]; - [editorField setAlignment: NSLeftTextAlignment]; - [editorField setBordered: NO]; - [editorField setEditable: YES]; - [editorField setBezeled: YES]; - [editorField setDrawsBackground: YES]; - [editorField setTarget:self]; - [editorField setAction:@selector(setEditor:)]; - [v addSubview:editorField]; - RELEASE(editorField); - - // Compiler - textField = [[NSTextField alloc] initWithFrame:NSMakeRect(12,40,60,21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue:@"Compiler:"]; - [v addSubview:textField]; - RELEASE(textField); - - compilerField = [[NSTextField alloc] initWithFrame:NSMakeRect(72,40,144,21)]; - [compilerField setAlignment: NSLeftTextAlignment]; - [compilerField setBordered: NO]; - [compilerField setEditable: YES]; - [compilerField setBezeled: YES]; - [compilerField setDrawsBackground: YES]; - [compilerField setTarget:self]; - [compilerField setAction:@selector(setCompiler:)]; - [v addSubview:compilerField]; - RELEASE(compilerField); - - // Debugger - textField = [[NSTextField alloc] initWithFrame:NSMakeRect(12,64,60,21)]; - [textField setAlignment: NSRightTextAlignment]; - [textField setBordered: NO]; - [textField setEditable: NO]; - [textField setBezeled: NO]; - [textField setDrawsBackground: NO]; - [textField setStringValue:@"Debugger:"]; - [v addSubview:textField]; - RELEASE(textField); - - debuggerField = [[NSTextField alloc] initWithFrame:NSMakeRect(72,64,144,21)]; - [debuggerField setAlignment: NSLeftTextAlignment]; - [debuggerField setBordered: NO]; - [debuggerField setEditable: YES]; - [debuggerField setBezeled: YES]; - [debuggerField setDrawsBackground: YES]; - [debuggerField setTarget:self]; - [debuggerField setAction:@selector(setDebugger:)]; - [v addSubview:debuggerField]; - RELEASE(debuggerField); - - // Bundles Box - v = [[NSBox alloc] initWithFrame: NSMakeRect(5,131,254,48)]; - [v setTitle: @"Bundle Path"]; - [prefMiscView addSubview: v]; - RELEASE(v); - - // Bundle path - bundlePathField=[[NSTextField alloc] initWithFrame:NSMakeRect(12,0,212,21)]; - [bundlePathField setAlignment: NSLeftTextAlignment]; - [bundlePathField setBordered: NO]; - [bundlePathField setEditable: YES]; - [bundlePathField setBezeled: YES]; - [bundlePathField setDrawsBackground: YES]; - [bundlePathField setTarget:self]; - [bundlePathField setAction:@selector(setBundlePath:)]; - [v addSubview:bundlePathField]; - RELEASE(bundlePathField); - - /* - * Interface view - */ - - prefInterfaceView = [[NSBox alloc] initWithFrame: NSMakeRect (0,0,270,310)]; - [prefInterfaceView setTitlePosition: NSNoTitle]; - [prefInterfaceView setBorderType: NSNoBorder]; - - v = [[NSBox alloc] initWithFrame: NSMakeRect (5,208,254,102)]; - [v setTitle: @"Display as separate panel..."]; - [prefInterfaceView addSubview: v]; - RELEASE(v); - - separateBuilder = [[NSButton alloc] initWithFrame: NSMakeRect (48,48,124,21)]; - [separateBuilder setTitle: @"Project Builder"]; - [separateBuilder setButtonType: NSSwitchButton]; - [separateBuilder setBordered: NO]; - [separateBuilder setRefusesFirstResponder: YES]; - [separateBuilder setTarget: self]; - [separateBuilder setAction: @selector (setDisplayPanels:)]; - [separateBuilder setContinuous: NO]; - [v addSubview: separateBuilder]; - RELEASE(separateBuilder); - - separateLauncher = [[NSButton alloc] initWithFrame: NSMakeRect(48,27,124,21)]; - [separateLauncher setTitle: @"Project Launcher"]; - [separateLauncher setButtonType: NSSwitchButton]; - [separateLauncher setBordered: NO]; - [separateLauncher setRefusesFirstResponder: YES]; - [separateLauncher setTarget: self]; - [separateLauncher setAction: @selector (setDisplayPanels:)]; - [separateLauncher setContinuous: NO]; - [v addSubview: separateLauncher]; - RELEASE(separateLauncher); - - separateEditor = [[NSButton alloc] initWithFrame: NSMakeRect(48,6,124,21)]; - [separateEditor setTitle: @"Project Editor"]; - [separateEditor setButtonType: NSSwitchButton]; - [separateEditor setBordered: NO]; - [separateEditor setRefusesFirstResponder: YES]; - [separateEditor setTarget: self]; - [separateEditor setAction: @selector (setDisplayPanels:)]; - [separateEditor setContinuous: NO]; - [v addSubview: separateEditor]; - RELEASE(separateEditor); - - // Some buttons - v = [[NSBox alloc] initWithFrame: NSMakeRect(5,100,254,98)]; - [v setTitle: @"Misc"]; - [prefInterfaceView addSubview: v]; - RELEASE(v); - - promptWhenQuit = [[NSButton alloc] initWithFrame: NSMakeRect(48,7,204,21)]; - [promptWhenQuit setTitle: @"Prompt when quitting"]; - [promptWhenQuit setButtonType: NSSwitchButton]; - [promptWhenQuit setBordered: NO]; - [promptWhenQuit setRefusesFirstResponder: YES]; - [promptWhenQuit setTarget: self]; - [promptWhenQuit setAction: @selector (promptWhenQuitting:)]; - [promptWhenQuit setContinuous: NO]; - [v addSubview: promptWhenQuit]; - [promptWhenQuit sizeToFit]; - RELEASE(promptWhenQuit); - - useExternalEditor = [[NSButton alloc] initWithFrame:NSMakeRect(48,28,204,21)]; - [useExternalEditor setTitle: @"Use external Editor"]; - [useExternalEditor setButtonType: NSSwitchButton]; - [useExternalEditor setBordered: NO]; - [useExternalEditor setRefusesFirstResponder: YES]; - [useExternalEditor setTarget: self]; - [useExternalEditor setAction: @selector(setUseExternalEditor:)]; - [useExternalEditor setContinuous: NO]; - [v addSubview: useExternalEditor]; - [useExternalEditor sizeToFit]; - RELEASE(useExternalEditor); - - useExternalDebugger=[[NSButton alloc] initWithFrame:NSMakeRect(48,49,204,21)]; - [useExternalDebugger setTitle: @"Use external Debugger"]; - [useExternalDebugger setButtonType: NSSwitchButton]; - [useExternalDebugger setBordered: NO]; - [useExternalDebugger setRefusesFirstResponder: YES]; - [useExternalDebugger setTarget: self]; - [useExternalDebugger setAction: @selector(setUseExternalDebugger:)]; - [useExternalDebugger setContinuous: NO]; - [v addSubview: useExternalDebugger]; - [useExternalDebugger sizeToFit]; - RELEASE(useExternalDebugger); -} - -@end - diff --git a/PCPrefController.h b/PCPrefController.h index 5f6d643..5e938b3 100644 --- a/PCPrefController.h +++ b/PCPrefController.h @@ -3,7 +3,8 @@ Copyright (C) 2001 Free Software Foundation - Author: Philippe C.D. Robert + Authors: Philippe C.D. Robert + Serg Stoyan This file is part of GNUstep. @@ -20,8 +21,6 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #ifndef _PCPREFCONTROLLER_H @@ -29,78 +28,94 @@ #include +#define PCSavePeriodDidChangeNotification @"PCSavePeriodDidChangeNotification" +#define PCPreferencesDidChangeNotification @"PCPreferencesDidChangeNotification" + @interface PCPrefController : NSObject { - id prefWindow; - id prefPopup; - - id prefEmptyView; - id prefBuildingView; - id prefMiscView; - id prefEditingView; - id prefSavingView; - id prefInterfaceView; - - id tabMatrix; + IBOutlet NSPanel *panel; + IBOutlet NSPopUpButton *popupButton; + IBOutlet NSBox *sectionsView; - id successField; - id failureField; - - id autoSaveField; - id saveAutomatically; - id keepBackup; - id saveOnQuit; + IBOutlet NSBox *buildingView; + IBOutlet NSTextField *successField; + IBOutlet NSButton *setSuccessButton; + IBOutlet NSTextField *failureField; + IBOutlet NSButton *setFailureButton; + IBOutlet NSTextField *rootBuildDirField; + IBOutlet NSButton *rootBuildDirButton; + IBOutlet NSButton *promptOnClean; - id useExternalEditor; - id useExternalDebugger; - id promptWhenQuit; - id promptOnClean; + IBOutlet NSBox *savingView; + IBOutlet NSButton *saveOnQuit; + IBOutlet NSButton *keepBackup; + IBOutlet NSSlider *autosaveSlider; + IBOutlet NSTextField *autosaveField; - id editorField; - id debuggerField; - id compilerField; - id bundlePathField; + IBOutlet NSBox *keyBindingsView; + IBOutlet NSMatrix *tabMatrix; + IBOutlet NSButton *tabSpacesField; - id separateBuilder; - id separateLauncher; - id separateEditor; + IBOutlet NSBox *miscView; + IBOutlet NSButton *promptWhenQuit; + IBOutlet NSButton *deleteCache; + IBOutlet NSButton *fullPathInFilePanels; + IBOutlet NSTextField *debuggerField; + IBOutlet NSTextField *editorField; + + IBOutlet NSBox *interfaceView; + IBOutlet NSButton *separateBuilder; + IBOutlet NSButton *separateLauncher; + IBOutlet NSButton *separateEditor; + IBOutlet NSButton *separateLoadedFiles; + IBOutlet NSTextField *editorLinesField; + IBOutlet NSTextField *editorColumnsField; + IBOutlet NSButton *rememberWindows; + IBOutlet NSButton *displayLog; - NSMutableDictionary *preferencesDict; + IBOutlet NSBox *bundlesView; + IBOutlet NSTextField *bundlePathField; + + NSMutableDictionary *preferencesDict; } ++ (PCPrefController *)sharedPCPreferences; + - (id)init; - (void)dealloc; +- (void)loadPrefernces; + +- (NSDictionary *)preferencesDict; +- (id)objectForKey:(NSString *)key; +- (NSString *)selectFileWithTypes:(NSArray *)types; +- (void)showPanel:(id)sender; -- (void)showPrefWindow:(id)sender; - (void)popupChanged:(id)sender; - (void)setSuccessSound:(id)sender; - (void)setFailureSound:(id)sender; +- (void)setRootBuildDir:(id)sender; - (void)setPromptOnClean:(id)sender; -- (void)setSaveAutomatically:(id)sender; +- (void)setSaveOnQuit:(id)sender; - (void)setKeepBackup:(id)sender; - (void)setSavePeriod:(id)sender; -- (void)setSaveOnQuit:(id)sender; -- (void)setUseExternalEditor:(id)sender; -- (void)setUseExternalDebugger:(id)sender; - -- (void)setEditor:(id)sender; -- (void)setCompiler:(id)sender; +- (void)setPromptWhenQuit:(id)sender; +- (void)setDeleteCache:(id)sender; +- (void)setFullPathInFilePanels:(id)sender; - (void)setDebugger:(id)sender; +- (void)setEditor:(id)sender; + +- (void)setDisplayPanels:(id)sender; +- (void)setEditorSize:(id)sender; +- (void)setEditorSizeEnabled:(BOOL)yn; +- (void)setRememberWindows:(id)sender; +- (void)setDisplayLog:(id)sender; + - (void)setBundlePath:(id)sender; -- (void)promptWhenQuitting:(id)sender; - -- (void)setTabBehaviour:(id)sender; - -- (NSDictionary *)preferencesDict; - -- (NSString *)selectFileWithTypes:(NSArray *)types; @end -extern NSString *SavePeriodDidChangeNotification; - #endif diff --git a/PCPrefController.m b/PCPrefController.m index ede79f5..d409026 100644 --- a/PCPrefController.m +++ b/PCPrefController.m @@ -3,7 +3,8 @@ Copyright (C) 2001 Free Software Foundation - Author: Philippe C.D. Robert + Authors: Philippe C.D. Robert + Serg Stoyan This file is part of GNUstep. @@ -20,71 +21,70 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include "PCPrefController.h" -#include "PCPrefController+UInterface.h" #include -NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification"; +#include "PCLogController.h" @implementation PCPrefController +// =========================================================================== +// ==== Class methods +// =========================================================================== + +static PCPrefController *_prefCtrllr = nil; + ++ (PCPrefController *)sharedPCPreferences +{ + if (!_prefCtrllr) + { + _prefCtrllr = [[PCPrefController alloc] init]; + } + + return _prefCtrllr; +} + +// - (id)init { - if ((self = [super init])) { - NSDictionary *prefs; + NSDictionary *prefs = nil; + + if (!(self = [super init])) + { + return nil; + } - // The prefs from the defaults - prefs = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; - preferencesDict = [[NSMutableDictionary alloc] initWithDictionary:prefs]; - } + // The prefs from the defaults + prefs = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; + preferencesDict = [[NSMutableDictionary alloc] initWithDictionary:prefs]; + return self; } - (void)dealloc { + NSLog(@"PCPrefController: dealloc"); + RELEASE(preferencesDict); - RELEASE(prefWindow); + RELEASE(panel); - RELEASE(prefBuildingView); - RELEASE(prefMiscView); - RELEASE(prefEditingView); - RELEASE(prefSavingView); + RELEASE(buildingView); + RELEASE(savingView); + RELEASE(keyBindingsView); + RELEASE(miscView); [[NSUserDefaults standardUserDefaults] synchronize]; [super dealloc]; } -- (void) showPrefWindow: (id)sender +- (void)loadPrefernces { - NSDictionary *prefs; - NSString *val; - - if (!prefWindow) - { - id view; - - [self _initUI]; - - // The popup and selected view - [prefPopup removeAllItems]; - [prefPopup addItemWithTitle: @"Building"]; - [prefPopup addItemWithTitle: @"Saving"]; - [prefPopup addItemWithTitle: @"Editing"]; - [prefPopup addItemWithTitle: @"Miscellaneous"]; - [prefPopup addItemWithTitle: @"Interface"]; - - [prefPopup selectItemWithTitle: @"Building"]; - - view = [prefBuildingView retain]; - [(NSBox *)prefEmptyView setContentView: view]; - [prefEmptyView display]; - } + NSDictionary *prefs = nil; + NSString *val = nil; prefs = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; [preferencesDict addEntriesFromDictionary: prefs]; @@ -102,50 +102,58 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification"; ([[preferencesDict objectForKey: PromptOnClean] isEqualToString: @"YES"]) ? NSOnState : NSOffState]; + [rootBuildDirField setStringValue: + (val = [preferencesDict objectForKey:RootBuildDirectory]) ? val : @""]; + // Saving [saveOnQuit setState: ([[preferencesDict objectForKey: SaveOnQuit] isEqualToString: @"YES"]) ? NSOnState : NSOffState]; - [saveAutomatically setState: - ([[preferencesDict objectForKey: AutoSave] - isEqualToString: @"YES"]) ? NSOnState : NSOffState]; - [keepBackup setState: ([[preferencesDict objectForKey: KeepBackup] isEqualToString: @"YES"]) ? NSOnState : NSOffState]; - [autoSaveField setStringValue: + [autosaveField setStringValue: (val = [preferencesDict objectForKey: AutoSavePeriod]) ? val : @"120"]; + [autosaveSlider setFloatValue:[[autosaveField stringValue] floatValue]]; - // Editing - if([[preferencesDict objectForKey: TabBehaviour] isEqualToString:@"Tab"]) + // Key Bindings + val = [preferencesDict objectForKey:TabBehaviour]; + [tabMatrix deselectAllCells]; + if ([val isEqualToString:@"Tab"]) { - [tabMatrix selectCellAtRow: 0 column: 0]; + [tabMatrix selectCellAtRow:0 column:0]; } - else if([[preferencesDict objectForKey: TabBehaviour] isEqualToString:@"Sp2"]) + else if ([val isEqualToString:@"IndentAlways"]) { - [tabMatrix selectCellAtRow: 1 column: 0]; + [tabMatrix selectCellAtRow:1 column:0]; } - else if([[preferencesDict objectForKey: TabBehaviour] isEqualToString:@"Sp4"]) + else if ([val isEqualToString:@"IndentAtBeginning"]) { - [tabMatrix selectCellAtRow: 0 column: 1]; + [tabMatrix selectCellAtRow:2 column:0]; } - else if([[preferencesDict objectForKey: TabBehaviour] isEqualToString:@"Sp8"]) + else if ([val isEqualToString:@"Spaces"]) { - [tabMatrix selectCellAtRow: 1 column: 1]; + [tabMatrix selectCellAtRow:3 column:0]; } // Miscellaneous - [compilerField setStringValue: - (val = [preferencesDict objectForKey: Compiler]) ? val : @""]; + [promptWhenQuit setState: + ([[preferencesDict objectForKey: PromptOnQuit] + isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + [deleteCache setState: + ([[preferencesDict objectForKey: DeleteCacheWhenQuitting] + isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + [fullPathInFilePanels setState: + ([[preferencesDict objectForKey: FullPathInFilePanels] + isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + [debuggerField setStringValue: - (val = [preferencesDict objectForKey: PDebugger]) ? val : @""]; + (val = [preferencesDict objectForKey: Debugger]) ? val : @"/usr/bin/gdb"]; [editorField setStringValue: - (val = [preferencesDict objectForKey: Editor]) ? val : @""]; - [bundlePathField setStringValue: - (val = [preferencesDict objectForKey: BundlePaths]) ? val : @""]; - + (val = [preferencesDict objectForKey: Editor]) ? val : @"ProjectCenter"]; + // Interface [separateBuilder setState: ([[preferencesDict objectForKey: SeparateBuilder] @@ -156,25 +164,138 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification"; [separateEditor setState: ([[preferencesDict objectForKey: SeparateEditor] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; - - [promptWhenQuit setState: - ([[preferencesDict objectForKey: PromptOnQuit] + [separateLoadedFiles setState: + ([[preferencesDict objectForKey: SeparateLoadedFiles] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; - [useExternalEditor setState: - ([[preferencesDict objectForKey: ExternalEditor] - isEqualToString:@"YES"]) ? NSOnState : NSOffState]; - [useExternalDebugger setState: - ([[preferencesDict objectForKey: ExternalDebugger] - isEqualToString:@"YES"]) ? NSOnState : NSOffState]; - - - if (![prefWindow isVisible]) - { - [prefWindow setFrameUsingName: @"Preferences"]; + + [editorLinesField setStringValue: + (val = [preferencesDict objectForKey: EditorLines]) ? val : @"30"]; + [editorColumnsField setStringValue: + (val = [preferencesDict objectForKey: EditorColumns]) ? val : @"80"]; + if ([separateEditor state] == NSOffState + || ![[editorField stringValue] isEqualToString:@"ProjectCenter"]) + { + [self setEditorSizeEnabled:NO]; } - [prefWindow makeKeyAndOrderFront: self]; + + [rememberWindows setState: + ([[preferencesDict objectForKey: RememberWindows] + isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + [displayLog setState: + ([[preferencesDict objectForKey:DisplayLog] + isEqualToString:@"YES"]) ? NSOnState : NSOffState]; + + // Bundles +/* [bundlePathField setStringValue: + (val = [preferencesDict objectForKey: BundlePaths]) ? val : @""];*/ } +- (void)awakeFromNib +{ + NSArray *tabMatrixCells = nil; + int i; + + [promptOnClean setRefusesFirstResponder:YES]; + + [saveOnQuit setRefusesFirstResponder:YES]; + [keepBackup setRefusesFirstResponder:YES]; + + tabMatrixCells = [tabMatrix cells]; + + for (i = 0; i < [tabMatrixCells count]; i++) + { + [[tabMatrixCells objectAtIndex:i] setRefusesFirstResponder:YES]; + } + + [promptWhenQuit setRefusesFirstResponder:YES]; + [deleteCache setRefusesFirstResponder:YES]; + [fullPathInFilePanels setRefusesFirstResponder:YES]; + + [separateBuilder setRefusesFirstResponder:YES]; + [separateLauncher setRefusesFirstResponder:YES]; + [separateEditor setRefusesFirstResponder:YES]; + [separateLoadedFiles setRefusesFirstResponder:YES]; + + [rememberWindows setRefusesFirstResponder:YES]; + [displayLog setRefusesFirstResponder:YES]; +} + +// Accessory +- (NSDictionary *)preferencesDict +{ + return preferencesDict; +} + +- (id)objectForKey:(NSString *)key +{ + return [preferencesDict objectForKey:key]; +} + +- (NSString *)selectFileWithTypes:(NSArray *)types +{ + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + NSString *file = nil; + NSOpenPanel *openPanel; + int retval; + + openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setCanChooseDirectories:YES]; + [openPanel setCanChooseFiles:YES]; + + retval = [openPanel + runModalForDirectory:[def objectForKey:@"LastOpenDirectory"] + file:nil + types:types]; + + if (retval == NSOKButton) + { + [def setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + file = [[openPanel filenames] objectAtIndex:0]; + + } + + return file; +} + +- (void)showPanel:(id)sender +{ + if (panel == nil + && [NSBundle loadNibNamed:@"Preferences" owner:self] == NO) + { + PCLogError(self, @"error loading NIB file!"); + return; + } + + [panel setFrameAutosaveName:@"Preferences"]; + if (![panel setFrameUsingName: @"Preferences"]) + { + [panel center]; + } + RETAIN(buildingView); + RETAIN(savingView); + RETAIN(keyBindingsView); + RETAIN(miscView); + RETAIN(interfaceView); + + // The popup and selected view + [popupButton removeAllItems]; + [popupButton addItemWithTitle:@"Building"]; + [popupButton addItemWithTitle:@"Saving"]; + [popupButton addItemWithTitle:@"Key Bindings"]; + [popupButton addItemWithTitle:@"Miscellaneous"]; + [popupButton addItemWithTitle:@"Interface"]; + + [popupButton selectItemWithTitle:@"Building"]; + [self popupChanged:popupButton]; + + // Load saved prefs + [self loadPrefernces]; + + [panel orderFront:self]; +} + +// - (void)popupChanged:(id)sender { NSView *view = nil; @@ -182,98 +303,142 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification"; switch ([sender indexOfSelectedItem]) { case 0: - view = prefBuildingView; + view = buildingView; break; case 1: - view = prefSavingView; + view = savingView; break; case 2: - view = prefEditingView; + view = keyBindingsView; break; case 3: - view = prefMiscView; + view = miscView; break; case 4: - view = prefInterfaceView; + view = interfaceView; break; } - [(NSBox *)prefEmptyView setContentView:view]; - [prefEmptyView display]; + [sectionsView setContentView:view]; + [sectionsView display]; } +// Building - (void)setSuccessSound:(id)sender { - NSArray *types = [NSArray arrayWithObjects:@"snd",@"au",nil]; + NSArray *types = [NSArray arrayWithObjects:@"snd",@"au",@"wav",nil]; NSString *path = [self selectFileWithTypes:types]; - - if (path) { - [successField setStringValue: path]; - - [[NSUserDefaults standardUserDefaults] setObject:path forKey:SuccessSound]; - [preferencesDict setObject:path forKey:SuccessSound]; - } + + if (path) + { + [successField setStringValue: path]; + + [[NSUserDefaults standardUserDefaults] setObject:path + forKey:SuccessSound]; + [preferencesDict setObject:path forKey:SuccessSound]; + } } - (void)setFailureSound:(id)sender { - NSString *path = [self selectFileWithTypes:[NSArray arrayWithObjects:@"snd",@"au",nil]]; - - if (path) { - [failureField setStringValue:path]; - - [[NSUserDefaults standardUserDefaults] setObject:path forKey:FailureSound]; - [preferencesDict setObject:path forKey:FailureSound]; - } + NSArray *types = [NSArray arrayWithObjects:@"snd",@"au",@"wav",nil]; + NSString *path = [self selectFileWithTypes:types]; + + if (path) + { + [failureField setStringValue:path]; + + [[NSUserDefaults standardUserDefaults] setObject:path + forKey:FailureSound]; + [preferencesDict setObject:path forKey:FailureSound]; + } +} + +- (void)setRootBuildDir:(id)sender +{ + NSArray *types = nil; + NSString *path = [self selectFileWithTypes:types]; + + if (path) + { + [rootBuildDirField setStringValue:path]; + [[NSUserDefaults standardUserDefaults] setObject:path + forKey:RootBuildDirectory]; + [preferencesDict setObject:path forKey:RootBuildDirectory]; + } } - (void)setPromptOnClean:(id)sender { - NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + NSUserDefaults *def = nil; - switch ([[sender selectedCell] state]) { - case 0: - [def setObject:@"NO" forKey:PromptOnClean]; - break; - case 1: - [def setObject:@"YES" forKey:PromptOnClean]; - break; - } + if (promptOnClean == nil) + {// HACK!!! need to be fixed in GNUstep + promptOnClean = sender; + return; + } + + def = [NSUserDefaults standardUserDefaults]; + switch ([sender state]) + { + case NSOffState: + [def setObject:@"NO" forKey:PromptOnClean]; + break; + case NSOnState: + [def setObject:@"YES" forKey:PromptOnClean]; + break; + } [def synchronize]; [preferencesDict setObject:[def objectForKey:PromptOnClean] forKey:PromptOnClean]; } -- (void)setSaveAutomatically:(id)sender +// Saving +- (void)setSaveOnQuit:(id)sender { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - switch ([[sender selectedCell] state]) { - case 0: - [def setObject:@"NO" forKey:AutoSave]; - break; - case 1: - [def setObject:@"YES" forKey:AutoSave]; - break; - } + if (saveOnQuit == nil) + { // HACK!!! + saveOnQuit = sender; + return; + } + + switch ([sender state]) + { + case 0: + [def setObject:@"NO" forKey:SaveOnQuit]; + break; + case 1: + [def setObject:@"YES" forKey:SaveOnQuit]; + break; + } [def synchronize]; - [preferencesDict setObject:[def objectForKey:AutoSave] forKey:AutoSave]; + [preferencesDict setObject:[def objectForKey:SaveOnQuit] + forKey:SaveOnQuit]; } - (void)setKeepBackup:(id)sender { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - switch ([[sender selectedCell] state]) { - case 0: - [def setObject:@"NO" forKey:KeepBackup]; - break; - case 1: - [def setObject:@"YES" forKey:KeepBackup]; - break; - } + if (keepBackup == nil) + { // HACK!!! + keepBackup = sender; + return; + } + + switch ([[sender selectedCell] state]) + { + case 0: + [def setObject:@"NO" forKey:KeepBackup]; + break; + case 1: + [def setObject:@"YES" forKey:KeepBackup]; + break; + } [def synchronize]; [preferencesDict setObject:[def objectForKey:KeepBackup] @@ -282,161 +447,219 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification"; - (void)setSavePeriod:(id)sender { - NSString *periodString = [autoSaveField stringValue]; + NSString *periodString = nil; - if (periodString == nil || [periodString isEqualToString:@""]) { - periodString = [NSString stringWithString:@"300"]; - } + if (sender == autosaveSlider) + { + [autosaveField setIntValue:[sender intValue]]; + } + else if (sender == autosaveField) + { + if ([autosaveField floatValue] < [autosaveSlider minValue]) + { + [autosaveField setFloatValue:[autosaveSlider minValue]]; + } + else if ([autosaveField floatValue] > [autosaveSlider maxValue]) + { + [autosaveField setFloatValue:[autosaveSlider maxValue]]; + } + [autosaveSlider setFloatValue:[autosaveField floatValue]]; + } + + periodString = [autosaveField stringValue]; [[NSUserDefaults standardUserDefaults] setObject:periodString forKey:AutoSavePeriod]; [preferencesDict setObject:periodString forKey:AutoSavePeriod]; - [[NSNotificationCenter defaultCenter] postNotificationName:SavePeriodDidChangeNotification object:periodString]; + [[NSNotificationCenter defaultCenter] + postNotificationName:PCSavePeriodDidChangeNotification + object:periodString]; } -- (void)setSaveOnQuit:(id)sender +// Key bindings +- (void)setTabBehaviour:(id)sender +{ + id cell = [sender selectedCell]; + NSString *tabBehaviour = nil; + + PCLogInfo(self, @"setTabBehaviour: %@", [cell title]); + + if ([[cell title] isEqualToString:@"Insert Tab"]) + { + tabBehaviour = [NSString stringWithString:@"Tab"]; + } + else if ([[cell title] isEqualToString:@"Indent only at beginning of line"]) + { + tabBehaviour = [NSString stringWithString:@"IndentAtBeginning"]; + } + else if ([[cell title] isEqualToString:@"Indent always"]) + { + tabBehaviour = [NSString stringWithString:@"IndentAlways"]; + } + else if ([[cell title] isEqualToString:@"Insert spaces"]) + { + tabBehaviour = [NSString stringWithString:@"Spaces"]; + [tabSpacesField setEnabled:YES]; + [tabSpacesField becomeFirstResponder]; + } + + [[NSUserDefaults standardUserDefaults] setObject:tabBehaviour + forKey:TabBehaviour]; + [preferencesDict setObject:tabBehaviour forKey:TabBehaviour]; +} + +- (void)setTabSpaces:(id)sender +{ + if ([[tabSpacesField stringValue] isEqualToString:@""]) + { + [tabSpacesField setStringValue:@"2"]; + } + + [[NSUserDefaults standardUserDefaults] + setObject:[tabSpacesField stringValue] + forKey:TabSpaces]; + [preferencesDict setObject:[tabSpacesField stringValue] forKey:TabSpaces]; +} + +// Miscellaneous +- (void)setPromptWhenQuit:(id)sender { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - switch ([[sender selectedCell] state]) { - case 0: - [def setObject:@"NO" forKey:SaveOnQuit]; - break; - case 1: - [def setObject:@"YES" forKey:SaveOnQuit]; - break; - } - [def synchronize]; + if (promptWhenQuit == nil) + { + promptWhenQuit = sender; + return; + } - [preferencesDict setObject:[def objectForKey:SaveOnQuit] - forKey:SaveOnQuit]; -} - -- (void)setUseExternalEditor:(id)sender -{ - NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - - switch ([[sender selectedCell] state]) { - case 0: - [def setObject:@"NO" forKey:ExternalEditor]; - break; - case 1: - [def setObject:@"YES" forKey:ExternalEditor]; - break; - } - [def synchronize]; - - [preferencesDict setObject:[def objectForKey:ExternalEditor] - forKey:ExternalEditor]; -} - -- (void)setUseExternalDebugger:(id)sender -{ - NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - - switch ([[sender selectedCell] state]) { - case 0: - [def setObject:@"NO" forKey:ExternalDebugger]; - break; - case 1: - [def setObject:@"YES" forKey:ExternalDebugger]; - break; - } - [def synchronize]; - - [preferencesDict setObject:[def objectForKey:ExternalDebugger] - forKey:ExternalDebugger]; -} - -- (void)setEditor:(id)sender -{ - NSString *path = [editorField stringValue]; - - if (path) { - [[NSUserDefaults standardUserDefaults] setObject:path forKey:Editor]; - [preferencesDict setObject:path forKey:Editor]; - } -} - -- (void)setCompiler:(id)sender -{ - NSString *path = [compilerField stringValue]; - - if (path) { - [[NSUserDefaults standardUserDefaults] setObject:path forKey:Compiler]; - [preferencesDict setObject:path forKey:Compiler]; - } -} - -- (void)setDebugger:(id)sender -{ - NSString *path = [debuggerField stringValue]; - - if (path) { - [[NSUserDefaults standardUserDefaults] setObject:path forKey:PDebugger]; - [preferencesDict setObject:path forKey:PDebugger]; - } -} - -- (void)setBundlePath:(id)sender -{ - NSString *path = [bundlePathField stringValue]; - - if (path) { - [[NSUserDefaults standardUserDefaults] setObject:path forKey:BundlePaths]; - [preferencesDict setObject:path forKey:BundlePaths]; - } -} - -- (void)promptWhenQuitting:(id)sender -{ - NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - - switch ([[sender selectedCell] state]) { - case 0: - [def setObject:@"NO" forKey:PromptOnQuit]; - break; - case 1: - [def setObject:@"YES" forKey:PromptOnQuit]; - break; - } + switch ([sender state]) + { + case 0: + [def setObject:@"NO" forKey:PromptOnQuit]; + break; + case 1: + [def setObject:@"YES" forKey:PromptOnQuit]; + break; + } [def synchronize]; [preferencesDict setObject:[def objectForKey:PromptOnQuit] forKey:PromptOnQuit]; } -- (void)setTabBehaviour:(id)sender +- (void)setDeleteCache:(id)sender { - NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - switch ([[sender selectedCell] tag]) + if (deleteCache == nil) { - case 0: -// [PCEditorView setTabBehaviour:PCTabTab]; - [def setObject:@"Tab" forKey:TabBehaviour]; - break; - case 1: -// [PCEditorView setTabBehaviour:PCTab2Sp]; - [def setObject:@"Sp2" forKey:TabBehaviour]; - break; - case 2: -// [PCEditorView setTabBehaviour:PCTab4Sp]; - [def setObject:@"Sp4" forKey:TabBehaviour]; - break; - case 3: -// [PCEditorView setTabBehaviour:PCTab8Sp]; - [def setObject:@"Sp8" forKey:TabBehaviour]; - break; + deleteCache = sender; + return; } - [def synchronize]; - [preferencesDict setObject:[def objectForKey:TabBehaviour] - forKey:TabBehaviour]; + switch ([sender state]) + { + case 0: + [def setObject:@"NO" forKey:DeleteCacheWhenQuitting]; + break; + case 1: + [def setObject:@"YES" forKey:DeleteCacheWhenQuitting]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:DeleteCacheWhenQuitting] + forKey:DeleteCacheWhenQuitting]; } -- (void)setDisplayPanels: (id)sender +- (void)setFullPathInFilePanels:(id)sender +{ + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + if (fullPathInFilePanels == nil) + { + fullPathInFilePanels = sender; + return; + } + + switch ([sender state]) + { + case 0: + [def setObject:@"NO" forKey:FullPathInFilePanels]; + break; + case 1: + [def setObject:@"YES" forKey:FullPathInFilePanels]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:FullPathInFilePanels] + forKey:FullPathInFilePanels]; +} + +- (void)setDebugger:(id)sender +{ + NSString *path = [debuggerField stringValue]; + + if ([path isEqualToString:@""] || !path) + { + [debuggerField setStringValue:@"/usr/bin/gdb"]; + path = [debuggerField stringValue]; + } + else if (!path || ![[NSFileManager defaultManager] fileExistsAtPath:path]) + { + [debuggerField selectText:self]; + NSRunAlertPanel(@"Debugger not found!", + @"File %@ doesn't exist!", + @"OK", nil, nil, path); + } + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:Debugger]; + [preferencesDict setObject:path forKey:Debugger]; +} + +- (void)setEditor:(id)sender +{ + NSString *path = [editorField stringValue]; + NSString *editorPath = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + [separateEditor setEnabled:YES]; + [self setEditorSizeEnabled:YES]; + + editorPath = [[path componentsSeparatedByString:@" "] objectAtIndex:0]; + if ([path isEqualToString:@""] || !path) + { + [editorField setStringValue:@"ProjectCenter"]; + path = [editorField stringValue]; + } + else if (![path isEqualToString:@"ProjectCenter"]) + { + if (![fm fileExistsAtPath:editorPath]) + { + [editorField selectText:self]; + NSRunAlertPanel(@"Editor not found!", + @"File %@ doesn't exist!", + @"Close", nil, nil, path); + } + else if (![fm isExecutableFileAtPath:editorPath]) + { + [editorField selectText:self]; + NSRunAlertPanel(@"Editor file error!", + @"File %@ exist but is not executable!", + @"Close", nil, nil, path); + } + [separateEditor setEnabled:NO]; + [self setEditorSizeEnabled:NO]; + } + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:Editor]; + [preferencesDict setObject:path forKey:Editor]; +} + +// Interface +- (void)setDisplayPanels:(id)sender { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; NSString *key = nil; @@ -453,6 +676,10 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification"; { key = [NSString stringWithString: SeparateEditor]; } + else if (sender == separateLoadedFiles) + { + key = [NSString stringWithString: SeparateLoadedFiles]; + } switch ([sender state]) { @@ -465,36 +692,127 @@ NSString *SavePeriodDidChangeNotification = @"SavePeriodDidChangeNotification"; } [def synchronize]; - [preferencesDict setObject: [def objectForKey: key] - forKey: key]; -} - -- (NSDictionary *)preferencesDict -{ - return preferencesDict; -} - -- (NSString *)selectFileWithTypes:(NSArray *)types -{ - NSString *file = nil; - NSOpenPanel *openPanel; - int retval; - NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; - - openPanel = [NSOpenPanel openPanel]; - [openPanel setAllowsMultipleSelection:NO]; - [openPanel setCanChooseDirectories:YES]; - [openPanel setCanChooseFiles:YES]; - - retval = [openPanel runModalForDirectory:[def objectForKey:@"LastOpenDirectory"] file:nil types:types]; - - if (retval == NSOKButton) + if (sender == separateEditor) { - [def setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; - file = [[openPanel filenames] objectAtIndex:0]; - + if ([sender state] == NSOffState) + { + [self setEditorSizeEnabled:NO]; + } + else + { + [self setEditorSizeEnabled:YES]; + } + [sender becomeFirstResponder]; + } + + [preferencesDict setObject:[def objectForKey:key] + forKey:key]; + [[NSNotificationCenter defaultCenter] + postNotificationName:PCPreferencesDidChangeNotification + object:self]; +} + +- (void)setEditorSize:(id)sender +{ + NSString *val = nil; + NSString *key = nil; + + if (sender == editorLinesField) + { + key = EditorLines; + val = [editorLinesField stringValue]; + } + else if (sender == editorColumnsField) + { + key = EditorColumns; + val = [editorColumnsField stringValue]; + } + [[NSUserDefaults standardUserDefaults] setObject:val forKey:key]; + [preferencesDict setObject:val forKey:key]; +} + +- (void)setEditorSizeEnabled:(BOOL)yn +{ + if (yn) + { + [editorLinesField setEnabled:YES]; + [editorLinesField setTextColor:[NSColor blackColor]]; + [editorLinesField setEditable:YES]; + [editorColumnsField setEnabled:YES]; + [editorColumnsField setTextColor:[NSColor blackColor]]; + [editorColumnsField setEditable:YES]; + } + else + { + [editorLinesField setEnabled:NO]; + [editorLinesField setTextColor:[NSColor darkGrayColor]]; + [editorLinesField setEditable:NO]; + [editorColumnsField setEnabled:NO]; + [editorColumnsField setTextColor:[NSColor darkGrayColor]]; + [editorColumnsField setEditable:NO]; + } +} + +- (void)setRememberWindows:(id)sender +{ + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + if (rememberWindows == nil) + { + rememberWindows = sender; + return; + } + + switch ([sender state]) + { + case 0: + [def setObject:@"NO" forKey:RememberWindows]; + break; + case 1: + [def setObject:@"YES" forKey:RememberWindows]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:RememberWindows] + forKey:RememberWindows]; +} + +- (void)setDisplayLog:(id)sender +{ + NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; + + if (displayLog == nil) + { + displayLog = sender; + return; + } + + switch ([sender state]) + { + case 0: + [def setObject:@"NO" forKey:DisplayLog]; + break; + case 1: + [def setObject:@"YES" forKey:DisplayLog]; + break; + } + [def synchronize]; + + [preferencesDict setObject:[def objectForKey:DisplayLog] + forKey:DisplayLog]; +} + +// Bundles +- (void)setBundlePath:(id)sender +{ + NSString *path = [bundlePathField stringValue]; + + if (path) + { + [[NSUserDefaults standardUserDefaults] setObject:path forKey:BundlePaths]; + [preferencesDict setObject:path forKey:BundlePaths]; } - return file; } @end diff --git a/PCRenaissanceProj/.cvsignore b/PCRenaissanceProj/.cvsignore deleted file mode 100644 index 5feabc1..0000000 --- a/PCRenaissanceProj/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -*obj -PCRenaissanceProj.bundle \ No newline at end of file diff --git a/PCRenaissanceProj/AppController.h b/PCRenaissanceProj/AppController.h deleted file mode 100644 index 46ac829..0000000 --- a/PCRenaissanceProj/AppController.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * AppController.h - * - * GNUstep Renaissance Application Controller - * - * Created with ProjectCenter - http://www.gnustep.org - */ - -#ifndef _APPCONTROLLER_H_ -#define _APPCONTROLLER_H_ - -#include -#include - -@interface AppController : NSObject -{ - -} - -- (void) applicationDidFinishLaunching: (NSNotification *)not; - -@end - -#endif /* _APPCONTROLLER_H_ */ - diff --git a/PCRenaissanceProj/AppController.m b/PCRenaissanceProj/AppController.m deleted file mode 100644 index 8289eed..0000000 --- a/PCRenaissanceProj/AppController.m +++ /dev/null @@ -1,18 +0,0 @@ -/* - * AppController.m - * - * GNUstep Renaissance Application Controller - * - * Created with ProjectCenter - http://www.gnustep.org - * - */ - -#include "AppController.h" - -@implementation AppController - -- (void) applicationDidFinishLaunching: (NSNotification *)not -{ - [NSBundle loadGSMarkupNamed: @"Main" owner: self]; -} -@end diff --git a/PCRenaissanceProj/ChangeLog b/PCRenaissanceProj/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCRenaissanceProj/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCRenaissanceProj/ChangeLog.old b/PCRenaissanceProj/ChangeLog.old deleted file mode 100644 index a7d45cb..0000000 --- a/PCRenaissanceProj/ChangeLog.old +++ /dev/null @@ -1,29 +0,0 @@ -2003-04-21 Serg Stoyan - - * GNUmakefile: Set BUNDLE_INSTALL_DIR to GNUSTEP_SYSTEM_ROOT. - - * .h, .m: Replace #import with #include and add #ifndefs. - -Sun Feb 2 06:02:50 2003 Nicola Pero - Daniel Luederwald - - * h.template: Removed. - * m.template: Removed. - -Fri Jan 31 19:32:40 2003 Nicola Pero - - * MainMenu-GNUstep.gsmarkup: - * MainMenu-OSX.gsmarkup: Updated from Renaissance-0.7.0's Standard - Template Application. - * h.template: Automatically generate include guards. Include - Foundation/Foundation.h and Renaissance/Renaissance.h as well. - Use #include, not #import. - * m.template: Use #include, not #import. - * main.m: Use #include, not #import. - * AppController.m: Use #include, not #import. - * AppController.h: Use #include, not #import. - -2003-01-25 Daniel Luederwald - - * New project (copied and updated from PCGormProj). - diff --git a/PCRenaissanceProj/English.lproj/InfoPlist.strings b/PCRenaissanceProj/English.lproj/InfoPlist.strings deleted file mode 100644 index fbf10d210b632ee3c9f71378f13674c2bb0f0b60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmcJMOAo<76ot>)uV}0g@mz`xiAREnCbm-4yCp3WemuS@A(2{$$YgqF?mfNtoHLiJ z^2*3kM_WzgXrrahay2D)BnAq}Y~>Rz;*4*b+l+Hgy9gg@Pj(IZ6rnQoOt9)|sHOwx zDL7X>`g=r6Rd!N+5CiT$`6YjbL?0F|m4N;$FqN1-wiZ+arVhcr7}{h4I{BJ^G2>mQ zr2@*#F2cL`fkTtY`==BCnVdyM9i=;bHM-{LHcqGTC`~NEvY;}j5vvQzpgr)$$J5hq hQ_Vee^kl2Wn|Kk%xbL9S(KvdcxM}ydimUv<;|7LlYn}iA diff --git a/PCRenaissanceProj/GNUmakefile b/PCRenaissanceProj/GNUmakefile deleted file mode 100644 index 1ecc110..0000000 --- a/PCRenaissanceProj/GNUmakefile +++ /dev/null @@ -1,72 +0,0 @@ -# -# GNUmakefile - Generated by ProjectCenter -# Written by Philippe C.D. Robert -# -# NOTE: Do NOT change this file -- ProjectCenter maintains it! -# -# Put all of your customisations in GNUmakefile.preamble and -# GNUmakefile.postamble -# - -include $(GNUSTEP_MAKEFILES)/common.make - - -# -# Subprojects -# - - - -# -# Bundle -# - -PACKAGE_NAME = PCRenaissanceProj -BUNDLE_NAME = PCRenaissanceProj -PCRenaissanceProj_PRINCIPAL_CLASS = PCRenaissanceProj - - -# -# Additional libraries -# - -PCRenaissanceProj_LIBRARIES_DEPEND_UPON += -lProjectCenter - -# -# Resource files -# - -PCRenaissanceProj_RESOURCE_FILES= \ -PC.proj \ -main.m \ -AppController.m \ -AppController.h \ -Main.gsmarkup \ -MainMenu-GNUstep.gsmarkup \ -MainMenu-OSX.gsmarkup - - -# -# Header files -# - -PCRenaissanceProj_HEADERS= \ -PCRenaissanceProj.h \ -PCRenaissanceProject.h - -# -# Class files -# - -PCRenaissanceProj_OBJC_FILES= \ -PCRenaissanceProj.m \ -PCRenaissanceProject.m - -# -# C files -# - -PCRenaissanceProj_C_FILES= - -include ../GNUmakefile.bundles -include $(GNUSTEP_MAKEFILES)/bundle.make diff --git a/PCRenaissanceProj/Info.table b/PCRenaissanceProj/Info.table deleted file mode 100644 index e0861e8..0000000 --- a/PCRenaissanceProj/Info.table +++ /dev/null @@ -1,29 +0,0 @@ -{ - AdditionalAttributes = { - PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; - }; - Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); - AttributesInspector = ApplicationInspector; - DefaultExtension = ""; - Default_Localizable_Keys = (INTERFACES); - GeneratedFiles = (Makefile, iconHeader); - INSTALLFLAGS = "-c -s -m 755"; - InfoName = ""; - Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); - MAKEFILE = app.make; - MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; - Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); - PBProjectTypeSubClass = "PBApplicationProjectType"; - ProvidesIcons = Yes; - Public_Keys = (H_FILES); - Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); - SOURCEMODE = 444; - Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); - Subproj_Keys = (SUBPROJECTS); - Targets = (app, debug, profile, install); - ExecutableResults = ( - "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" - ); -} diff --git a/PCRenaissanceProj/MainMenu-GNUstep.gsmarkup b/PCRenaissanceProj/MainMenu-GNUstep.gsmarkup deleted file mode 100644 index 8476723..0000000 --- a/PCRenaissanceProj/MainMenu-GNUstep.gsmarkup +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PCRenaissanceProj/PCRenaissanceProj.m b/PCRenaissanceProj/PCRenaissanceProj.m deleted file mode 100644 index 5b1a458..0000000 --- a/PCRenaissanceProj/PCRenaissanceProj.m +++ /dev/null @@ -1,191 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2003 Free Software Foundation - Copyright (C) 2001 Pierre-Yves Rivaille - - Authors: Philippe C.D. Robert - Pierre-Yves Rivaille - - Modified by Daniel Luederwald - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. -*/ - -/* - Description: - - PCRenaissanceProj creates new project of the type RenaissanceApplication! - -*/ - -#include "PCRenaissanceProj.h" -#include "PCRenaissanceProject.h" - -@implementation PCRenaissanceProj - -static NSString *_projTypeName = @"RenaissanceApplication"; -static PCRenaissanceProj *_creator = nil; - -//---------------------------------------------------------------------------- -// ProjectType -//---------------------------------------------------------------------------- - -+ (id)sharedCreator -{ - if (!_creator) { - _creator = [[[self class] alloc] init]; - } - return _creator; -} - -- (Class)projectClass -{ - return [PCRenaissanceProject class]; -} - -- (NSString *)projectTypeName -{ - return _projTypeName; -} - -- (NSDictionary *)typeTable -{ - NSString *_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" ofType:@"table"]; - - return [NSDictionary dictionaryWithContentsOfFile:_path]; -} - -- (PCProject *)createProjectAt:(NSString *)path -{ - PCRenaissanceProject *project = nil; - NSFileManager *fm = [NSFileManager defaultManager]; - - NSAssert(path,@"No valid project path provided!"); - - if ([fm createDirectoryAtPath:path attributes:nil]) { - NSString *_file; - NSString *_resourcePath; - NSMutableDictionary *dict; - NSDictionary *infoDict; - NSString *plistFileName; - NSString *projectFile; - - project = [[[PCRenaissanceProject alloc] init] autorelease]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"PC" ofType:@"proj"]; - dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; - - // Customise the project - [dict setObject:[path lastPathComponent] forKey:PCProjectName]; - [dict setObject:[[project principalClass] description] forKey:PCProjType]; - - // Create the AppNameInfo.plist - infoDict = [NSDictionary dictionaryWithObjectsAndKeys: - @"Automatically generated!",@"NOTE", - [path lastPathComponent],@"ApplicationName", - @"",@"ApplicationDescription", - @"",@"ApplicationIcon", - @"0.1",@"ApplicationRelease", - @"0.1",@"FullVersionID", - @"",@"Authors", - @"",@"URL", - @"Copyright (C) 200x by ...",@"Copyright", - @"Released under ...",@"CopyrightDescription", nil]; - plistFileName = [NSString stringWithFormat:@"%@Info.plist",[path lastPathComponent]]; - [infoDict writeToFile:[path stringByAppendingPathComponent:plistFileName] atomically:YES]; - - [dict setObject:[NSArray arrayWithObjects:plistFileName,nil] - forKey:PCOtherResources]; - // [dict setObject:[NSArray arrayWithObject:[NSString stringWithFormat: @"%@.gsmarkup", [path lastPathComponent]]] - [dict setObject:[NSArray arrayWithObjects: @"Main.gsmarkup", @"MainMenu-GNUstep.gsmarkup", @"MainMenu-OSX.gsmarkup",nil] - forKey:PCGModels]; - - // Save the project to disc - projectFile = [NSString stringWithString:[path lastPathComponent]]; - projectFile = [projectFile stringByAppendingPathExtension:@"pcproj"]; - [dict writeToFile:[path stringByAppendingPathComponent:projectFile] - atomically:YES]; - - /* - * Copy the project files to the provided path - * - */ - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"postamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"preamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"main" ofType:@"m"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"main.m"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"MainMenu-GNUstep" ofType:@"gsmarkup"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"MainMenu-GNUstep.gsmarkup"] handler:nil]; - - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"MainMenu-OSX" ofType:@"gsmarkup"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"MainMenu-OSX.gsmarkup"] handler:nil]; - - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"Main" ofType:@"gsmarkup"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"Main.gsmarkup"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"AppController" ofType:@"m"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"AppController.m"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"AppController" ofType:@"h"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"AppController.h"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"baseInterface" ofType:@"gsmarkup"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent: - [[path lastPathComponent] stringByAppendingString: @".gsmarkup"]] handler:nil]; - - // Resources - _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; - [fm createDirectoryAtPath:_resourcePath attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] attributes:nil]; - - // The path cannot be in the PC.project file! - [project setProjectPath:path]; - - // Set the new dictionary - this causes the GNUmakefile to be written to disc - if(![project assignProjectDict:dict]) { - NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); - return nil; - } - } - return project; -} - -- (PCProject *)openProjectAt:(NSString *)path -{ - NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; - id obj; - - NSLog(@"<%@ %x>: opening project at %@",[self class],self,path); - - obj = [dict objectForKey:PCProjectBuilderClass]; - if ([obj isEqualToString:@"PCRenaissanceProj"]) { - return [[[PCRenaissanceProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; - } - return nil; -} - -@end diff --git a/PCRenaissanceProj/PCRenaissanceProj.pbproj/project.pbxproj b/PCRenaissanceProj/PCRenaissanceProj.pbproj/project.pbxproj deleted file mode 100644 index 35d6eed..0000000 --- a/PCRenaissanceProj/PCRenaissanceProj.pbproj/project.pbxproj +++ /dev/null @@ -1,527 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA410018CDE011CA2923 = { - isa = PBXBundleReference; - path = PCRenaissanceProj.bundle; - refType = 3; - }; - 014CEA420018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA430018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//080 -//081 -//082 -//083 -//084 - 089C1669FE841209C02AAC07 = { - buildStyles = ( - 014CEA420018CDE011CA2923, - 014CEA430018CDE011CA2923, - ); - hasScannedForEncodings = 1; - isa = PBXProject; - mainGroup = 089C166AFE841209C02AAC07; - projectDirPath = ""; - targets = ( - 089C1673FE841209C02AAC07, - ); - }; - 089C166AFE841209C02AAC07 = { - children = ( - 08FB77AFFE84173DC02AAC07, - 32C88E010371C26100C91783, - 089C167CFE841241C02AAC07, - 089C1671FE841209C02AAC07, - 19C28FB8FE9D52D311CA2CBB, - ); - isa = PBXGroup; - name = PCRenaissanceProj; - refType = 4; - }; - 089C1671FE841209C02AAC07 = { - children = ( - 1058C7ACFEA557BF11CA2CBB, - 1058C7AEFEA557BF11CA2CBB, - ); - isa = PBXGroup; - name = "Frameworks and Libraries"; - refType = 4; - }; - 089C1672FE841209C02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 089C1673FE841209C02AAC07 = { - buildPhases = ( - 089C1674FE841209C02AAC07, - 089C1675FE841209C02AAC07, - 089C1676FE841209C02AAC07, - 089C1677FE841209C02AAC07, - 089C1679FE841209C02AAC07, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/philippe/Library/Frameworks; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRECOMPILE_PREFIX_HEADER = YES; - PREFIX_HEADER = PCRenaissanceProj_Prefix.h; - PRODUCT_NAME = PCRenaissanceProj; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = bundle; - }; - dependencies = ( - ); - isa = PBXBundleTarget; - name = PCRenaissanceProj; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = PCRenaissanceProj; - productReference = 014CEA410018CDE011CA2923; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - PCRenaissanceProj - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - PCRenaissanceProj - - -"; - }; - 089C1674FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 32DBCF640370AF2F00C91783, - 37FE803003F1B41100F1BCDD, - 37FE803203F1B41100F1BCDD, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1675FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1680FE841241C02AAC07, - 37FE803F03F1B4D300F1BCDD, - 37FE804003F1B4D300F1BCDD, - 37FE804103F1B4D300F1BCDD, - 37FE804203F1B4D300F1BCDD, - 37FE804303F1B4D300F1BCDD, - 37FE805703F530B300F1BCDD, - 37FE805803F530B300F1BCDD, - 37FE805903F530B300F1BCDD, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1676FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 37FE803103F1B41100F1BCDD, - 37FE803303F1B41100F1BCDD, - 37FE803503F1B45300F1BCDD, - 37FE803E03F1B4D300F1BCDD, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1677FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7AFFEA557BF11CA2CBB, - 37FE805103F1B53E00F1BCDD, - 37FE805303F52A4F00F1BCDD, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1679FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C167CFE841241C02AAC07 = { - children = ( - 37FE803403F1B45300F1BCDD, - 089C167DFE841241C02AAC07, - 37FE803603F1B4D300F1BCDD, - 37FE803703F1B4D300F1BCDD, - 37FE803803F1B4D300F1BCDD, - 37FE803903F1B4D300F1BCDD, - 37FE803A03F1B4D300F1BCDD, - 37FE803B03F1B4D300F1BCDD, - 37FE803C03F1B4D300F1BCDD, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C167DFE841241C02AAC07 = { - children = ( - 089C167EFE841241C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C167EFE841241C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C167FFE841241C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1680FE841241C02AAC07 = { - fileRef = 089C167DFE841241C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AFFE84173DC02AAC07 = { - children = ( - 37FE802C03F1B41100F1BCDD, - 37FE802D03F1B41100F1BCDD, - 37FE802E03F1B41100F1BCDD, - 37FE802F03F1B41100F1BCDD, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7ACFEA557BF11CA2CBB = { - children = ( - 1058C7ADFEA557BF11CA2CBB, - 37FE805003F1B53E00F1BCDD, - 37FE805203F52A4F00F1BCDD, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7ADFEA557BF11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7AEFEA557BF11CA2CBB = { - children = ( - 089C1672FE841209C02AAC07, - 089C167FFE841241C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7AFFEA557BF11CA2CBB = { - fileRef = 1058C7ADFEA557BF11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//190 -//191 -//192 -//193 -//194 - 19C28FB8FE9D52D311CA2CBB = { - children = ( - 014CEA410018CDE011CA2923, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//320 -//321 -//322 -//323 -//324 - 32C88E010371C26100C91783 = { - children = ( - 32DBCF630370AF2F00C91783, - ); - isa = PBXGroup; - name = "Other Sources"; - refType = 4; - }; - 32DBCF630370AF2F00C91783 = { - fileEncoding = 4; - isa = PBXFileReference; - path = PCRenaissanceProj_Prefix.h; - refType = 4; - }; - 32DBCF640370AF2F00C91783 = { - fileRef = 32DBCF630370AF2F00C91783; - isa = PBXBuildFile; - settings = { - }; - }; -//320 -//321 -//322 -//323 -//324 -//370 -//371 -//372 -//373 -//374 - 37FE802C03F1B41100F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCRenaissanceProj.h; - refType = 4; - }; - 37FE802D03F1B41100F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCRenaissanceProj.m; - refType = 4; - }; - 37FE802E03F1B41100F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCRenaissanceProject.h; - refType = 4; - }; - 37FE802F03F1B41100F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = PCRenaissanceProject.m; - refType = 4; - }; - 37FE803003F1B41100F1BCDD = { - fileRef = 37FE802C03F1B41100F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE803103F1B41100F1BCDD = { - fileRef = 37FE802D03F1B41100F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE803203F1B41100F1BCDD = { - fileRef = 37FE802E03F1B41100F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE803303F1B41100F1BCDD = { - fileRef = 37FE802F03F1B41100F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE803403F1B45300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = main.m; - refType = 4; - }; - 37FE803503F1B45300F1BCDD = { - fileRef = 37FE803403F1B45300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE803603F1B4D300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = AppController.h; - refType = 4; - }; - 37FE803703F1B4D300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = AppController.m; - refType = 4; - }; - 37FE803803F1B4D300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = Info.table; - refType = 4; - }; - 37FE803903F1B4D300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = Main.gsmarkup; - refType = 4; - }; - 37FE803A03F1B4D300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = "MainMenu-GNUstep.gsmarkup"; - refType = 4; - }; - 37FE803B03F1B4D300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = "MainMenu-OSX.gsmarkup"; - refType = 4; - }; - 37FE803C03F1B4D300F1BCDD = { - fileEncoding = 30; - isa = PBXFileReference; - path = PC.proj; - refType = 4; - }; - 37FE803E03F1B4D300F1BCDD = { - fileRef = 37FE803703F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE803F03F1B4D300F1BCDD = { - fileRef = 37FE803803F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE804003F1B4D300F1BCDD = { - fileRef = 37FE803903F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE804103F1B4D300F1BCDD = { - fileRef = 37FE803A03F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE804203F1B4D300F1BCDD = { - fileRef = 37FE803B03F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE804303F1B4D300F1BCDD = { - fileRef = 37FE803C03F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE805003F1B53E00F1BCDD = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - 37FE805103F1B53E00F1BCDD = { - fileRef = 37FE805003F1B53E00F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE805203F52A4F00F1BCDD = { - isa = PBXFrameworkReference; - name = Renaissance.framework; - path = /Users/philippe/Library/Frameworks/Renaissance.framework; - refType = 0; - }; - 37FE805303F52A4F00F1BCDD = { - fileRef = 37FE805203F52A4F00F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE805703F530B300F1BCDD = { - fileRef = 37FE803403F1B45300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE805803F530B300F1BCDD = { - fileRef = 37FE803603F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - 37FE805903F530B300F1BCDD = { - fileRef = 37FE803703F1B4D300F1BCDD; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 089C1669FE841209C02AAC07; -} diff --git a/PCRenaissanceProj/PCRenaissanceProj_Prefix.h b/PCRenaissanceProj/PCRenaissanceProj_Prefix.h deleted file mode 100644 index 5fc8bd6..0000000 --- a/PCRenaissanceProj/PCRenaissanceProj_Prefix.h +++ /dev/null @@ -1,8 +0,0 @@ -// -// Prefix header for all source files of the 'PCRenaissanceProj' target in the 'PCRenaissanceProj' project. -// - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/PCRenaissanceProj/PCRenaissanceProject.h b/PCRenaissanceProj/PCRenaissanceProject.h deleted file mode 100644 index 9977cdc..0000000 --- a/PCRenaissanceProj/PCRenaissanceProject.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2003 Free Software Foundation - - Author: Philippe C.D. Robert - Modified by Daniel Luederwald - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. -*/ - -/* - Description: - - This is the project type 'RenaissanceApplication' for GNUstep. You never should create - it yourself but use PCRenaissanceProj for doing this. Otherwise needed files don't - get copied to the right place. - - */ - -#ifndef _PCRENAISSANCEPROJECT_H -#define _PCRENAISSANCEPROJECT_H - -#include -#include - -@interface PCRenaissanceProject : PCProject -{ - NSTextField *appClassField; - NSTextField *appImageField; - NSButton *setAppIconButton; - NSButton *clearAppIconButton; - NSImageView *appIconView; - NSImage *icon; -} - -//---------------------------------------------------------------------------- -// Init and free -//---------------------------------------------------------------------------- - -- (id)init; -- (void)dealloc; - -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- - -- (Class)builderClass; - -- (BOOL)writeMakefile; - -- (NSArray *)sourceFileKeys; -- (NSArray *)resourceFileKeys; -- (NSArray *)otherKeys; -- (NSArray *)buildTargets; -- (NSString *)projectDescription; - -- (BOOL)isExecutable; - -- (void)updateValuesFromProjectDict; - -- (void)clearAppIcon:(id)sender; -- (void)setAppIcon:(id)sender; - -- (BOOL)setAppIconWithImageAtPath:(NSString *)path; - -- (void)setAppClass:(id)sender; - -@end - -#endif diff --git a/PCRenaissanceProj/main.m b/PCRenaissanceProj/main.m deleted file mode 100644 index f35a44a..0000000 --- a/PCRenaissanceProj/main.m +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include -#include -#include "AppController.h" - - -/* - * Initialise and go! - */ - -int main(int argc, const char *argv[]) -{ - CREATE_AUTORELEASE_POOL (pool); - [NSApplication sharedApplication]; - [NSApp setDelegate: [AppController new]]; - - #ifdef GNUSTEP - [NSBundle loadGSMarkupNamed: @"MainMenu-GNUstep" owner: [NSApp delegate]]; - #else - [NSBundle loadGSMarkupNamed: @"MainMenu-OSX" owner: [NSApp delegate]]; - #endif - - - RELEASE (pool); - return NSApplicationMain (argc, argv); - -} diff --git a/PCToolProj/ChangeLog b/PCToolProj/ChangeLog deleted file mode 100644 index 17ec168..0000000 --- a/PCToolProj/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -ChangeLog entries should be added to ../ChangeLog diff --git a/PCToolProj/ChangeLog.old b/PCToolProj/ChangeLog.old deleted file mode 100644 index a9d59ca..0000000 --- a/PCToolProj/ChangeLog.old +++ /dev/null @@ -1,161 +0,0 @@ -2003-04-21 Serg Stoyan - - * GNUmakefile: Set BUNDLE_INSTALL_DIR to GNUSTEP_SYSTEM_ROOT. - - * .h, .m: Replace #import with #include and add #ifndefs. - - * h.template and m.template removed. - -2002-11-27 15:45 probert - - * Mac OS X port using Cocoa - -2002-06-01 15:56 probert - - * GNUmakefile, PCToolProj.pcproj: Installation into - GNUSPTE_INSTALLATION_DIR - -2002-04-26 05:12 fedor - - * ChangeLog, PCToolProject.m: removed bunches of duplicate calls, - retains and releases. - -2002-03-25 20:37 probert - - * ChangeLog: ChangeLog updates - -2002-03-01 16:32 probert - - * GNUmakefile, PCToolMakefileFactory.h, PCToolMakefileFactory.m, - PCToolProj.pcproj, PCToolProject.m: This project now uses the - makefile factory too. - -2002-01-07 16:05 probert - - * ChangeLog: Updated all ChangeLog files (using cvs2cl.pl) - -2002-01-07 16:01 probert - - * GNUmakefile, PCToolProj.pcproj: Added libProjectCenter to the - bundle's library link settings. - -2002-01-07 10:37 probert - - * PC.project, PCToolProj.m, PCToolProj.pcproj: ProjectCenter now - stores the project files under PROJECTNAME.pcproj to avoid name - clashes. - -2002-01-02 18:51 probert - - * PC.proj, PC.project: Changed the build tool entry to - /usr/bin/make in all project files and templates. - -2002-01-02 17:33 probert - - * PCToolMakefileFactory.m: Libraries, Gorm apps and tools use the - install path now, too. - -2002-01-02 17:05 probert - - * GNUmakefile, PC.proj, PC.project: The inspector now handles the - installation path and other settings. Furthermore it does not save - changes automatically but marks the project as being edited. Upon - 'save' the project file and GNUmakefile are being saved, not - before! In addition the various PC* bundles are now maintained by - ProjectCenter itself. The installation path for ProjectCenter.app - is corrected to the SYSTEM ROOT as well. - -2002-01-02 13:13 probert - - * GNUmakefile, PC.proj: All bundles and libProjectCenter are now - installed under GNUSTEP_SYSTEM_ROOT. Also the PC.proj templates - have now a correct install path default value. - -2002-01-01 18:27 probert - - * PC.proj, PCToolProject.h, PCToolProject.m: ProjectCenter now - validates project dictionaries and updates them if requested. I - also added new keys tp the PC.project files in order to be able to - generate valid *.spec.in files needed when building RPMs. - -2001-12-29 16:37 probert - - * ChangeLog: Removed the toplevel ChangeLog, updated the ChangeLogs - in the subdirectories and raised the version number to 0.2.6. - -2001-12-29 15:07 probert - - * PCToolProject.m: Cleaned up the writeMakefile method - -2001-08-03 16:23 probert - - * PCToolMakefileFactory.h, PCToolMakefileFactory.m, PCToolProj.h, - PCToolProj.m, PCToolProject.h, PCToolProject.m: New version - now - copyrighted by the FSF - -2001-08-01 14:35 probert - - * GNUmakefile, GNUmakefile.postamble, GNUmakefile.preamble, - PCToolMakefileFactory.m: New copyright information and minor - template additions - -2001-07-01 21:01 probert - - * GNUmakefile, GNUmakefile.preamble: Applied patch from Adam Fedor - -2001-01-14 18:54 robert - - * ChangeLog: Updated the ChangeLogs - -2001-01-14 17:10 robert - - * PCToolProject.m: Added the supporting files category - -2001-01-10 15:19 robert - - * PCToolMakefileFactory.m: inclusion of PACKAGE_NAME - -2000-11-10 19:27 robert - - * PCToolProject.h, PCToolProject.m: some daily work... - -2000-11-10 15:09 robert - - * ChangeLog: changelog for 0.2 - -2000-11-04 13:41 robert - - * PCToolProject.h, PCToolProject.m: The project type is executable - -2000-10-15 20:29 robert - - * PCToolProject.m: some code improvements regarding the inspector - -2000-10-11 15:15 robert - - * PCToolProject.m: daily work - -2000-09-22 11:24 robert - - * PCToolMakefileFactory.m: Fix in the makefile generation section - -2000-09-03 22:10 robert - - * GNUmakefile.preamble: renamed libPC into libProjectCenter - -2000-08-27 21:13 robert - - * PCToolProj.h, PCToolProj.m, h.template, m.template, Info.table, - PCToolProject.m, GNUmakefile.postamble, GNUmakefile.preamble, - PCToolProject.h, main.m, PCToolMakefileFactory.m, GNUmakefile, - Info-project.plist, PC.proj, PCToolMakefileFactory.h: Initial - revision - -2000-08-27 21:13 robert - - * PCToolProj.h, PCToolProj.m, h.template, m.template, Info.table, - PCToolProject.m, GNUmakefile.postamble, GNUmakefile.preamble, - PCToolProject.h, main.m, PCToolMakefileFactory.m, GNUmakefile, - Info-project.plist, PC.proj, PCToolMakefileFactory.h: Initial - import - diff --git a/PCToolProj/English.lproj/InfoPlist.strings b/PCToolProj/English.lproj/InfoPlist.strings deleted file mode 100644 index ea4b5d28964e47c4470d060efdce0d57668d4533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmb`E$qK?i5JcjChr}Z!r=V(2rN&L=lweMHyy#rn}NrUAbJ9 zRZ2!p`5MX9S__>u(U{zk7-&bv*M?|_Q_cpjDff)FA%3Sl*%jzhh)U5j#;T~QvJRlf z;3jI*-y<58*l~40^yuSL?ZD(~NwygArK3630G|GfCWlObzKv#IyS~q2ltaDUd9>v} zu-4$(Kd1c{R~n@irrF|_)jnf3>t6!@lf(kLa-2p3RtuCxd*EH>JUv~s)yzYATaM~D Y?S+^wx?SdSH4J@^V!Qu=sLBsIZejXkG5`Po diff --git a/PCToolProj/Info-project.plist b/PCToolProj/Info-project.plist deleted file mode 100644 index aaa95fe..0000000 --- a/PCToolProj/Info-project.plist +++ /dev/null @@ -1,12 +0,0 @@ -{ - NOTE = "Automatically generated, do not edit!"; - ToolName = ""; - ToolDescription = ""; - ToolIcon = ""; - ToolRelease = ""; - FullVersionID = ""; - Authors = (); - URL = ""; - Copyright = ""; - CopyrightDescription = ""; -} diff --git a/PCToolProj/Info.table b/PCToolProj/Info.table deleted file mode 100644 index d516b0c..0000000 --- a/PCToolProj/Info.table +++ /dev/null @@ -1,29 +0,0 @@ -{ - AdditionalAttributes = { - PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; - }; - Allowable_SubprojectTypes = (Subproject, Bundle, Tool); - AttributesInspector = ToolInspector; - DefaultExtension = ""; - Default_Localizable_Keys = (INTERFACES); - GeneratedFiles = (Makefile, iconHeader); - INSTALLFLAGS = "-c -s -m 755"; - InfoName = ""; - Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); - MAKEFILE = tool.make; - MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; - Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); - PBProjectTypeSubClass = "PBApplicationProjectType"; - ProvidesIcons = Yes; - Public_Keys = (H_FILES); - Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); - SOURCEMODE = 444; - Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); - Subproj_Keys = (SUBPROJECTS); - Targets = (app, debug, profile, install); - ExecutableResults = ( - "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", - "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" - ); -} diff --git a/PCToolProj/PC.proj b/PCToolProj/PC.proj deleted file mode 100644 index 4384416..0000000 --- a/PCToolProj/PC.proj +++ /dev/null @@ -1,36 +0,0 @@ -{ - TOOLICON = ""; - BUILDTOOL = "/usr/bin/make"; - CLASS_FILES = ("main.m"); - COMPILEROPTIONS = ""; - LINKEROPTIONS = ""; - CREATION_DATE = ""; - DOCU_FILES = (); - FOUNDATION = "GNUSTEP-BASE"; - FRAMEWORKS = (); - HEADER_FILES = (); - IMAGES = (); - LANGUAGE = "English"; - LAST_EDITING = ""; - LIBRARIES = ("gnustep-base"); - MAKEFILEDIR = "/usr/GNUstep/Makefiles"; - INSTALLDIR = "$(GNUSTEP_LOCAL_ROOT)/Tools"; - OTHER_FILES = (); - OTHER_RESOURCES = (); - OTHER_SOURCES = (); - PRINCIPAL_CLASS = "main.m"; - PROJECT_CREATOR = ""; - PROJECT_DESCRIPTION = "No description avaliable!"; - PROJECT_GROUP = "No description avaliable!"; - PROJECT_SUMMARY = "No summary avaliable!"; - PROJECT_RELEASE = "1"; - PROJECT_COPYRIGHT = "No license specified!"; - PROJECT_SOURCE = "%{gs_name}-%{gs_version}.tar.gz"; - PROJECT_MAINTAINER = ""; - PROJECT_NAME = ""; - PROJECT_TYPE = "Tool"; - PROJECT_BUILDER = "PCToolProj"; - PROJECT_VERSION = 1.0; - SUBPROJECTS = (); - SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); -} diff --git a/PCToolProj/PCToolProj.m b/PCToolProj/PCToolProj.m deleted file mode 100644 index 8a3086f..0000000 --- a/PCToolProj/PCToolProj.m +++ /dev/null @@ -1,141 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -/* - Description: - - PCToolProj creates new project of the type Application! - -*/ - -#include "PCToolProj.h" -#include "PCToolProject.h" - -@implementation PCToolProj - -static NSString *_projTypeName = @"Tool"; -static PCToolProj *_creator = nil; - -//---------------------------------------------------------------------------- -// ProjectType -//---------------------------------------------------------------------------- - -+ (id)sharedCreator -{ - if (!_creator) { - _creator = [[[self class] alloc] init]; - } - return _creator; -} - -- (Class)projectClass -{ - return [PCToolProject class]; -} - -- (NSString *)projectTypeName -{ - return _projTypeName; -} - -- (NSDictionary *)typeTable -{ - NSString *_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" ofType:@"table"]; - - return [NSDictionary dictionaryWithContentsOfFile:_path]; -} - -- (PCProject *)createProjectAt:(NSString *)path -{ - PCToolProject *project = nil; - NSFileManager *fm = [NSFileManager defaultManager]; - - NSAssert(path,@"No valid project path provided!"); - - if ([fm createDirectoryAtPath:path attributes:nil]) { - NSString *_file; - NSString *_resourcePath; - NSMutableDictionary *dict; - NSString *projectFile; - - project = [[[PCToolProject alloc] init] autorelease]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"PC" ofType:@"proj"]; - dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; - - // Customise the project - [dict setObject:[path lastPathComponent] forKey:PCProjectName]; - [dict setObject:[[project principalClass] description] forKey:PCProjType]; - - // Save the project to disc - projectFile = [NSString stringWithString:[path lastPathComponent]]; - projectFile = [projectFile stringByAppendingPathExtension:@"pcproj"]; - [dict writeToFile:[path stringByAppendingPathComponent:projectFile] - atomically:YES]; - - // Copy the project files to the provided path - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"postamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"preamble"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] handler:nil]; - - _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"main" ofType:@"m"]; - [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"main.m"] handler:nil]; - - // Resources - _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; - [fm createDirectoryAtPath:_resourcePath attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] attributes:nil]; - [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] attributes:nil]; - - // The path cannot be in the PC.project file! - [project setProjectPath:path]; - - // Set the new dictionary - this causes the GNUmakefile to be written - if(![project assignProjectDict:dict]) { - NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); - return nil; - } - } - return project; -} - -- (PCProject *)openProjectAt:(NSString *)path -{ - NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; - id obj; - - NSLog(@"<%@ %x>: opening project at %@",[self class],self,path); - - obj = [dict objectForKey:PCProjectBuilderClass]; - if ([obj isEqualToString:@"PCToolProj"]) { - return [[[PCToolProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; - } - return nil; -} - -@end diff --git a/PCToolProj/PCToolProj.pbproj/project.pbxproj b/PCToolProj/PCToolProj.pbproj/project.pbxproj deleted file mode 100644 index 2d66c4e..0000000 --- a/PCToolProj/PCToolProj.pbproj/project.pbxproj +++ /dev/null @@ -1,427 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 014CEA410018CDE011CA2923 = { - isa = PBXBundleReference; - path = PCToolProj.bundle; - refType = 3; - }; - 014CEA420018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 014CEA430018CDE011CA2923 = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//010 -//011 -//012 -//013 -//014 -//080 -//081 -//082 -//083 -//084 - 089C1669FE841209C02AAC07 = { - buildStyles = ( - 014CEA420018CDE011CA2923, - 014CEA430018CDE011CA2923, - ); - isa = PBXProject; - mainGroup = 089C166AFE841209C02AAC07; - projectDirPath = ""; - targets = ( - 089C1673FE841209C02AAC07, - ); - }; - 089C166AFE841209C02AAC07 = { - children = ( - 08FB77AFFE84173DC02AAC07, - 089C167CFE841241C02AAC07, - 089C1671FE841209C02AAC07, - 19C28FB8FE9D52D311CA2CBB, - ); - isa = PBXGroup; - name = PCToolProj; - refType = 4; - }; - 089C1671FE841209C02AAC07 = { - children = ( - 1058C7ACFEA557BF11CA2CBB, - 1058C7AEFEA557BF11CA2CBB, - ); - isa = PBXGroup; - name = "Frameworks and Libraries"; - refType = 4; - }; - 089C1672FE841209C02AAC07 = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 089C1673FE841209C02AAC07 = { - buildPhases = ( - 089C1674FE841209C02AAC07, - 089C1675FE841209C02AAC07, - 089C1676FE841209C02AAC07, - 089C1677FE841209C02AAC07, - 089C1679FE841209C02AAC07, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = /Users/philippe/Library/Frameworks; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Library/Bundles"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - OTHER_REZFLAGS = ""; - PRODUCT_NAME = PCToolProj; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = bundle; - }; - dependencies = ( - ); - isa = PBXBundleTarget; - name = PCToolProj; - productInstallPath = "$(HOME)/Library/Bundles"; - productName = PCToolProj; - productReference = 014CEA410018CDE011CA2923; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - PCToolProj - CFBundleIconFile - - CFBundleIdentifier - - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleSignature - ???? - CFBundleVersion - 0.0.1d1 - NSPrincipalClass - PCToolProj - - -"; - shouldUseHeadermap = 1; - }; - 089C1674FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C982603939EE401000102, - F56C982803939EE401000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1675FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 089C1680FE841241C02AAC07, - F56C983003939F0201000102, - F56C983103939F0201000102, - F56C983203939F0201000102, - F56C983303939F0201000102, - F56C983503939F0201000102, - F56C983603939F2601000102, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1676FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - F56C982703939EE401000102, - F56C982903939EE401000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1677FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - 1058C7AFFEA557BF11CA2CBB, - F56C982103939EC201000102, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C1679FE841209C02AAC07 = { - buildActionMask = 2147483647; - files = ( - ); - isa = PBXRezBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 089C167CFE841241C02AAC07 = { - children = ( - 089C167DFE841241C02AAC07, - F56C982A03939F0201000102, - F56C982B03939F0201000102, - F56C982C03939F0201000102, - F56C982D03939F0201000102, - F56C982E03939F0201000102, - F56C982F03939F0201000102, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - }; - 089C167DFE841241C02AAC07 = { - children = ( - 089C167EFE841241C02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C167EFE841241C02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C167FFE841241C02AAC07 = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 089C1680FE841241C02AAC07 = { - fileRef = 089C167DFE841241C02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; - 08FB77AFFE84173DC02AAC07 = { - children = ( - F56C982203939EE401000102, - F56C982303939EE401000102, - F56C982403939EE401000102, - F56C982503939EE401000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7ACFEA557BF11CA2CBB = { - children = ( - 1058C7ADFEA557BF11CA2CBB, - F56C980003939EC201000102, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7ADFEA557BF11CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7AEFEA557BF11CA2CBB = { - children = ( - 089C1672FE841209C02AAC07, - 089C167FFE841241C02AAC07, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7AFFEA557BF11CA2CBB = { - fileRef = 1058C7ADFEA557BF11CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//190 -//191 -//192 -//193 -//194 - 19C28FB8FE9D52D311CA2CBB = { - children = ( - 014CEA410018CDE011CA2923, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//F50 -//F51 -//F52 -//F53 -//F54 - F56C980003939EC201000102 = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - F56C982103939EC201000102 = { - fileRef = F56C980003939EC201000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C982203939EE401000102 = { - isa = PBXFileReference; - path = PCToolProj.h; - refType = 4; - }; - F56C982303939EE401000102 = { - isa = PBXFileReference; - path = PCToolProj.m; - refType = 4; - }; - F56C982403939EE401000102 = { - isa = PBXFileReference; - path = PCToolProject.h; - refType = 4; - }; - F56C982503939EE401000102 = { - isa = PBXFileReference; - path = PCToolProject.m; - refType = 4; - }; - F56C982603939EE401000102 = { - fileRef = F56C982203939EE401000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C982703939EE401000102 = { - fileRef = F56C982303939EE401000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C982803939EE401000102 = { - fileRef = F56C982403939EE401000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C982903939EE401000102 = { - fileRef = F56C982503939EE401000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C982A03939F0201000102 = { - isa = PBXFileReference; - path = h.template; - refType = 4; - }; - F56C982B03939F0201000102 = { - isa = PBXFileReference; - path = "Info-project.plist"; - refType = 4; - }; - F56C982C03939F0201000102 = { - isa = PBXFileReference; - path = Info.table; - refType = 4; - }; - F56C982D03939F0201000102 = { - isa = PBXFileReference; - path = m.template; - refType = 4; - }; - F56C982E03939F0201000102 = { - isa = PBXFileReference; - path = main.m; - refType = 4; - }; - F56C982F03939F0201000102 = { - isa = PBXFileReference; - path = PC.proj; - refType = 4; - }; - F56C983003939F0201000102 = { - fileRef = F56C982A03939F0201000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C983103939F0201000102 = { - fileRef = F56C982B03939F0201000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C983203939F0201000102 = { - fileRef = F56C982C03939F0201000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C983303939F0201000102 = { - fileRef = F56C982D03939F0201000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C983503939F0201000102 = { - fileRef = F56C982F03939F0201000102; - isa = PBXBuildFile; - settings = { - }; - }; - F56C983603939F2601000102 = { - fileRef = F56C982E03939F0201000102; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 089C1669FE841209C02AAC07; -} diff --git a/PCToolProj/PCToolProject.m b/PCToolProj/PCToolProject.m deleted file mode 100644 index 6dd62ac..0000000 --- a/PCToolProj/PCToolProject.m +++ /dev/null @@ -1,193 +0,0 @@ -/* - GNUstep ProjectCenter - http://www.gnustep.org - - Copyright (C) 2001 Free Software Foundation - - Author: Philippe C.D. Robert - - This file is part of GNUstep. - - This application is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This application is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ -*/ - -#include "PCProject+UInterface.h" -#include "PCToolProject.h" -#include "PCToolProj.h" - -#include - -@interface PCToolProject (CreateUI) - -- (void)_initUI; - -@end - -@implementation PCToolProject (CreateUI) - -- (void)_initUI -{ - [super _initUI]; -} - -@end - -@implementation PCToolProject - -//---------------------------------------------------------------------------- -// Init and free -//---------------------------------------------------------------------------- - -- (id)init -{ - if ((self = [super init])) - { - rootObjects = [[NSArray arrayWithObjects: PCClasses, - PCHeaders, - PCOtherSources, - PCImages, - PCOtherResources, - PCSubprojects, - PCDocuFiles, - PCSupportingFiles, - PCLibraries, - PCNonProject, - nil] retain]; - - rootKeys = [[NSArray arrayWithObjects: @"Classes", - @"Headers", - @"Other Sources", - @"Images", - @"Other Resources", - @"Subprojects", - @"Documentation", - @"Supporting Files", - @"Libraries", - @"Non Project Files", - nil] retain]; - - rootCategories = [[NSDictionary - dictionaryWithObjects:rootObjects forKeys:rootKeys] retain]; - - } - - return self; -} - -- (void)dealloc -{ - [rootCategories release]; - [rootObjects release]; - [rootKeys release]; - - [super dealloc]; -} - -//---------------------------------------------------------------------------- -// Project -//---------------------------------------------------------------------------- - -- (Class)builderClass -{ - return [PCToolProj class]; -} - -- (BOOL)writeMakefile -{ - NSData *mfd; - NSString *mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; - int i; - PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; - NSDictionary *dict = [self projectDict]; - - // Save the project file - [super writeMakefile]; - - // Create the new file - [mf createMakefileForProject:[self projectName]]; - - [mf appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"]; - [mf appendSubprojects:[dict objectForKey:PCSubprojects]]; - - [mf appendTool]; - [mf appendInstallDir:[dict objectForKey:PCInstallDir]]; - [mf appendToolIcon:[dict objectForKey:PCToolIcon]]; - - [mf appendToolLibraries:[dict objectForKey:PCLibraries]]; - - [mf appendResources]; - for (i=0;i<[[self resourceFileKeys] count];i++) - { - NSString *k = [[self resourceFileKeys] objectAtIndex:i]; - [mf appendResourceItems:[dict objectForKey:k]]; - } - - [mf appendHeaders:[dict objectForKey:PCHeaders]]; - [mf appendClasses:[dict objectForKey:PCClasses]]; - [mf appendOtherSources:[dict objectForKey:PCOtherSources]]; - - [mf appendTailForTool]; - - // Write the new file to disc! - if ((mfd = [mf encodedMakefile])) - { - if ([mfd writeToFile:mfl atomically:YES]) - { - return YES; - } - } - - return NO; -} - -- (NSArray *)sourceFileKeys -{ - return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; -} - -- (NSArray *)resourceFileKeys -{ - return [NSArray arrayWithObjects:PCOtherResources,PCImages,nil]; -} - -- (NSArray *)otherKeys -{ - return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; -} - -- (NSArray *)buildTargets -{ - return nil; -} - -- (NSString *)projectDescription -{ - return @"Project that handles GNUstep/ObjC based tools."; -} - -- (BOOL)isExecutable -{ - return YES; -} - -- (void)updateValuesFromProjectDict -{ - [super updateValuesFromProjectDict]; - - //[appClassField setStringValue:[projectDict objectForKey:PCAppClass]]; -} - -@end diff --git a/PCToolProj/main.m b/PCToolProj/main.m deleted file mode 100644 index 81ebbbe..0000000 --- a/PCToolProj/main.m +++ /dev/null @@ -1,13 +0,0 @@ -#include - -int main(int argc, const char *argv[]) { - id pool = [[NSAutoreleasePool alloc] init]; - - // Your code here... - - // The end... - [pool release]; - - exit(0); - return 0; -} diff --git a/ProjectCenter.pbproj/project.pbxproj b/ProjectCenter.pbproj/project.pbxproj deleted file mode 100644 index 5c3ed2f..0000000 --- a/ProjectCenter.pbproj/project.pbxproj +++ /dev/null @@ -1,876 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 080E96DDFE201D6D7F000001 = { - children = ( - F58C0B040391055801000102, - F58C0B050391055801000102, - F58C0B060391055801000102, - F58C0B070391055801000102, - F58C0B080391055801000102, - F58C0B090391055801000102, - F58C0B0A0391055801000102, - F58C0B0B0391055801000102, - F58C0B0C0391055801000102, - F58C0B0D0391055801000102, - F58C0B0E0391055801000102, - F58C0B0F0391055801000102, - F58C0B100391055801000102, - F58C0B110391055801000102, - F58C0B120391055801000102, - ); - isa = PBXGroup; - name = Classes; - refType = 4; - }; - 089C165CFE840E0CC02AAC07 = { - children = ( - 089C165DFE840E0CC02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C165DFE840E0CC02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C165EFE840E0CC02AAC07 = { - fileRef = 089C165CFE840E0CC02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7A0FEA54F0111CA2CBB = { - children = ( - 1058C7A1FEA54F0111CA2CBB, - F58C0B22039105D001000102, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7A1FEA54F0111CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7A2FEA54F0111CA2CBB = { - children = ( - 29B97325FDCFA39411CA2CEA, - 29B97324FDCFA39411CA2CEA, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7A3FEA54F0111CA2CBB = { - fileRef = 1058C7A1FEA54F0111CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//170 -//171 -//172 -//173 -//174 - 17587328FF379C6511CA2CBB = { - isa = PBXApplicationReference; - path = ProjectCenter.app; - refType = 3; - }; -//170 -//171 -//172 -//173 -//174 -//190 -//191 -//192 -//193 -//194 - 19C28FACFE9D520D11CA2CBB = { - children = ( - 17587328FF379C6511CA2CBB, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//290 -//291 -//292 -//293 -//294 - 29B97313FDCFA39411CA2CEA = { - buildStyles = ( - 4A9504CCFFE6A4B311CA0CBA, - 4A9504CDFFE6A4B311CA0CBA, - ); - isa = PBXProject; - mainGroup = 29B97314FDCFA39411CA2CEA; - projectDirPath = ""; - targets = ( - 29B97326FDCFA39411CA2CEA, - ); - }; - 29B97314FDCFA39411CA2CEA = { - children = ( - 080E96DDFE201D6D7F000001, - 29B97315FDCFA39411CA2CEA, - 29B97317FDCFA39411CA2CEA, - 29B97323FDCFA39411CA2CEA, - 19C28FACFE9D520D11CA2CBB, - ); - isa = PBXGroup; - name = ProjectCenter; - path = ""; - refType = 4; - }; - 29B97315FDCFA39411CA2CEA = { - children = ( - ); - isa = PBXGroup; - name = "Other Sources"; - path = ""; - refType = 4; - }; - 29B97317FDCFA39411CA2CEA = { - children = ( - 089C165CFE840E0CC02AAC07, - F58C0B4903910AE201000102, - F58C0B50039110C001000102, - F58C0B51039110C001000102, - F58C0B52039110C001000102, - F58C0B53039110C001000102, - F58C0B54039110C001000102, - F58C0B55039110C001000102, - F58C0B56039110C001000102, - F58C0B57039110C001000102, - F58C0B58039110C001000102, - F58C0B59039110C001000102, - F58C0B5A039110C001000102, - F58C0B5B039110C001000102, - F58C0B5C039110C001000102, - F58C0B5D039110C001000102, - F58C0B5E039110C001000102, - F58C0B5F039110C001000102, - F58C0B60039110C001000102, - F58C0B61039110C001000102, - F58C0B62039110C001000102, - F58C0B63039110C001000102, - F58C0B64039110C001000102, - F58C0B65039110C001000102, - F58C0B66039110C001000102, - F58C0B67039110C001000102, - F56C97390393974101000102, - ); - isa = PBXGroup; - name = Resources; - path = ""; - refType = 4; - }; - 29B97323FDCFA39411CA2CEA = { - children = ( - 1058C7A0FEA54F0111CA2CBB, - 1058C7A2FEA54F0111CA2CBB, - ); - isa = PBXGroup; - name = Frameworks; - path = ""; - refType = 4; - }; - 29B97324FDCFA39411CA2CEA = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 29B97325FDCFA39411CA2CEA = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 29B97326FDCFA39411CA2CEA = { - buildPhases = ( - 29B97327FDCFA39411CA2CEA, - 29B97328FDCFA39411CA2CEA, - 29B9732BFDCFA39411CA2CEA, - 29B9732DFDCFA39411CA2CEA, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = "\"$(HOME)/Library/Frameworks\""; - HEADER_SEARCH_PATHS = ""; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = ProjectCenter; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = app; - }; - dependencies = ( - ); - isa = PBXApplicationTarget; - name = ProjectCenter; - productInstallPath = "$(HOME)/Applications"; - productName = ProjectCenter; - productReference = 17587328FF379C6511CA2CBB; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - pcproj - - CFBundleTypeRole - Editor - - - CFBundleExecutable - ProjectCenter - CFBundleIconFile - ProjectCenterIcon.icns - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ProjectCenter - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 0.3 - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - -"; - shouldUseHeadermap = 1; - }; - 29B97327FDCFA39411CA2CEA = { - buildActionMask = 2147483647; - files = ( - F58C0B130391055801000102, - F58C0B150391055801000102, - F58C0B170391055801000102, - F58C0B190391055801000102, - F58C0B1B0391055801000102, - F58C0B1D0391055801000102, - F58C0B1F0391055801000102, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 29B97328FDCFA39411CA2CEA = { - buildActionMask = 2147483647; - files = ( - 089C165EFE840E0CC02AAC07, - F58C0B4B03910AE201000102, - F58C0B68039110C001000102, - F58C0B69039110C101000102, - F58C0B6A039110C101000102, - F58C0B6B039110C101000102, - F58C0B6C039110C101000102, - F58C0B6D039110C101000102, - F58C0B6E039110C101000102, - F58C0B6F039110C101000102, - F58C0B70039110C101000102, - F58C0B71039110C101000102, - F58C0B72039110C101000102, - F58C0B73039110C101000102, - F58C0B74039110C101000102, - F58C0B75039110C101000102, - F58C0B76039110C101000102, - F58C0B77039110C101000102, - F58C0B78039110C101000102, - F58C0B79039110C101000102, - F58C0B7A039110C101000102, - F58C0B7B039110C101000102, - F58C0B7C039110C101000102, - F58C0B7D039110C101000102, - F58C0B7E039110C101000102, - F58C0B7F039110C101000102, - F56C973A0393974101000102, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 29B9732BFDCFA39411CA2CEA = { - buildActionMask = 2147483647; - files = ( - F58C0B140391055801000102, - F58C0B160391055801000102, - F58C0B180391055801000102, - F58C0B1A0391055801000102, - F58C0B1C0391055801000102, - F58C0B1E0391055801000102, - F58C0B200391055801000102, - F58C0B210391055801000102, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 29B9732DFDCFA39411CA2CEA = { - buildActionMask = 2147483647; - files = ( - 1058C7A3FEA54F0111CA2CBB, - F58C0B24039105D001000102, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; -//290 -//291 -//292 -//293 -//294 -//4A0 -//4A1 -//4A2 -//4A3 -//4A4 - 4A9504CCFFE6A4B311CA0CBA = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 4A9504CDFFE6A4B311CA0CBA = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//4A0 -//4A1 -//4A2 -//4A3 -//4A4 -//F50 -//F51 -//F52 -//F53 -//F54 - F56C97390393974101000102 = { - isa = PBXFileReference; - path = ProjectCenterIcon.icns; - refType = 4; - }; - F56C973A0393974101000102 = { - fileRef = F56C97390393974101000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B040391055801000102 = { - isa = PBXFileReference; - path = PCAppController.h; - refType = 4; - }; - F58C0B050391055801000102 = { - isa = PBXFileReference; - path = PCAppController.m; - refType = 4; - }; - F58C0B060391055801000102 = { - isa = PBXFileReference; - path = "PCAppController+MenuHandling.h"; - refType = 4; - }; - F58C0B070391055801000102 = { - isa = PBXFileReference; - path = "PCAppController+MenuHandling.m"; - refType = 4; - }; - F58C0B080391055801000102 = { - isa = PBXFileReference; - path = PCFindController.h; - refType = 4; - }; - F58C0B090391055801000102 = { - isa = PBXFileReference; - path = PCFindController.m; - refType = 4; - }; - F58C0B0A0391055801000102 = { - isa = PBXFileReference; - path = PCInfoController.h; - refType = 4; - }; - F58C0B0B0391055801000102 = { - isa = PBXFileReference; - path = PCInfoController.m; - refType = 4; - }; - F58C0B0C0391055801000102 = { - isa = PBXFileReference; - path = PCLogController.h; - refType = 4; - }; - F58C0B0D0391055801000102 = { - isa = PBXFileReference; - path = PCLogController.m; - refType = 4; - }; - F58C0B0E0391055801000102 = { - isa = PBXFileReference; - path = PCMenuController.h; - refType = 4; - }; - F58C0B0F0391055801000102 = { - isa = PBXFileReference; - path = PCMenuController.m; - refType = 4; - }; - F58C0B100391055801000102 = { - isa = PBXFileReference; - path = PCPrefController.h; - refType = 4; - }; - F58C0B110391055801000102 = { - isa = PBXFileReference; - path = PCPrefController.m; - refType = 4; - }; - F58C0B120391055801000102 = { - isa = PBXFileReference; - path = ProjectCenter_main.m; - refType = 4; - }; - F58C0B130391055801000102 = { - fileRef = F58C0B040391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B140391055801000102 = { - fileRef = F58C0B050391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B150391055801000102 = { - fileRef = F58C0B060391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B160391055801000102 = { - fileRef = F58C0B070391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B170391055801000102 = { - fileRef = F58C0B080391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B180391055801000102 = { - fileRef = F58C0B090391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B190391055801000102 = { - fileRef = F58C0B0A0391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B1A0391055801000102 = { - fileRef = F58C0B0B0391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B1B0391055801000102 = { - fileRef = F58C0B0C0391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B1C0391055801000102 = { - fileRef = F58C0B0D0391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B1D0391055801000102 = { - fileRef = F58C0B0E0391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B1E0391055801000102 = { - fileRef = F58C0B0F0391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B1F0391055801000102 = { - fileRef = F58C0B100391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B200391055801000102 = { - fileRef = F58C0B110391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B210391055801000102 = { - fileRef = F58C0B120391055801000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B22039105D001000102 = { - isa = PBXFrameworkReference; - name = ProjectCenter.framework; - path = /Users/philippe/Library/Frameworks/ProjectCenter.framework; - refType = 0; - }; - F58C0B24039105D001000102 = { - fileRef = F58C0B22039105D001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B4903910AE201000102 = { - children = ( - F58C0B4A03910AE201000102, - ); - isa = PBXVariantGroup; - name = MainMenu.nib; - path = ""; - refType = 4; - }; - F58C0B4A03910AE201000102 = { - isa = PBXFileReference; - name = English; - path = English.lproj/MainMenu.nib; - refType = 4; - }; - F58C0B4B03910AE201000102 = { - fileRef = F58C0B4903910AE201000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B50039110C001000102 = { - isa = PBXFileReference; - path = FileIcon_.c.tiff; - refType = 4; - }; - F58C0B51039110C001000102 = { - isa = PBXFileReference; - path = FileIcon_.h.tiff; - refType = 4; - }; - F58C0B52039110C001000102 = { - isa = PBXFileReference; - path = FileIcon_.m.tiff; - refType = 4; - }; - F58C0B53039110C001000102 = { - isa = PBXFileReference; - path = FileIcon_rtf.tiff; - refType = 4; - }; - F58C0B54039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter_clean.tiff; - refType = 4; - }; - F58C0B55039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter_debug.tiff; - refType = 4; - }; - F58C0B56039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter_dist.tiff; - refType = 4; - }; - F58C0B57039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter_install.tiff; - refType = 4; - }; - F58C0B58039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter_make.tiff; - refType = 4; - }; - F58C0B59039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter_profile.tiff; - refType = 4; - }; - F58C0B5A039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter_rpm.tiff; - refType = 4; - }; - F58C0B5B039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter.app.tiff; - refType = 4; - }; - F58C0B5C039110C001000102 = { - isa = PBXFileReference; - path = ProjectCenter.tiff; - refType = 4; - }; - F58C0B5D039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_add.tiff; - refType = 4; - }; - F58C0B5E039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_build.tiff; - refType = 4; - }; - F58C0B5F039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_clean.tiff; - refType = 4; - }; - F58C0B60039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_cvs.tiff; - refType = 4; - }; - F58C0B61039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_documentation.tiff; - refType = 4; - }; - F58C0B62039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_files.tiff; - refType = 4; - }; - F58C0B63039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_find.tiff; - refType = 4; - }; - F58C0B64039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_prefs.tiff; - refType = 4; - }; - F58C0B65039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_run.tiff; - refType = 4; - }; - F58C0B66039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_settings.tiff; - refType = 4; - }; - F58C0B67039110C001000102 = { - isa = PBXFileReference; - path = ProjectCentre_uml.tiff; - refType = 4; - }; - F58C0B68039110C001000102 = { - fileRef = F58C0B50039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B69039110C101000102 = { - fileRef = F58C0B51039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B6A039110C101000102 = { - fileRef = F58C0B52039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B6B039110C101000102 = { - fileRef = F58C0B53039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B6C039110C101000102 = { - fileRef = F58C0B54039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B6D039110C101000102 = { - fileRef = F58C0B55039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B6E039110C101000102 = { - fileRef = F58C0B56039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B6F039110C101000102 = { - fileRef = F58C0B57039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B70039110C101000102 = { - fileRef = F58C0B58039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B71039110C101000102 = { - fileRef = F58C0B59039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B72039110C101000102 = { - fileRef = F58C0B5A039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B73039110C101000102 = { - fileRef = F58C0B5B039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B74039110C101000102 = { - fileRef = F58C0B5C039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B75039110C101000102 = { - fileRef = F58C0B5D039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B76039110C101000102 = { - fileRef = F58C0B5E039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B77039110C101000102 = { - fileRef = F58C0B5F039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B78039110C101000102 = { - fileRef = F58C0B60039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B79039110C101000102 = { - fileRef = F58C0B61039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B7A039110C101000102 = { - fileRef = F58C0B62039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B7B039110C101000102 = { - fileRef = F58C0B63039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B7C039110C101000102 = { - fileRef = F58C0B64039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B7D039110C101000102 = { - fileRef = F58C0B65039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B7E039110C101000102 = { - fileRef = F58C0B66039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58C0B7F039110C101000102 = { - fileRef = F58C0B67039110C001000102; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 29B97313FDCFA39411CA2CEA; -} diff --git a/ProjectCenterIcon.icns b/ProjectCenterIcon.icns deleted file mode 100644 index 412c316c5ed546a705d3a93bc2addb188fdd6021..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7441 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 diff --git a/ProjectCenterInfo.plist b/ProjectCenterInfo.plist index 1f759e9..096aee9 100644 --- a/ProjectCenterInfo.plist +++ b/ProjectCenterInfo.plist @@ -1,43 +1,45 @@ { - NSIcon = "ProjectCenter.tiff"; - NSRole = "Editor"; - NSTypes = ( - { - NSUnixExtensions = ( "project" ); - NSIcon = "ProjectCenter.tiff"; - }, - { - NSUnixExtensions = ( "pcproj" ); - NSIcon = "ProjectCenter.tiff"; - }, - { - NSUnixExtensions = ( "m" ); - NSIcon = "FileIcon_.m.tiff"; - }, - { - NSUnixExtensions = ( "h" ); - NSIcon = "FileIcon_.h.tiff"; - }, - { - NSUnixExtensions = ( "c" ); - NSIcon = "FileIcon_.c.tiff"; - } - ); NOTE = "Automatically generated, do not edit!"; ApplicationName = "ProjectCenter"; ApplicationDescription = "GNUstep IDE"; ApplicationIcon = "ProjectCenter.tiff"; - ApplicationRelease = "0.3.5"; - FullVersionID = "ProjectCenter 0.3.5"; + ApplicationRelease = "0.4.0"; + FullVersionID = "ProjectCenter 0.4.0"; Authors = ( - "Philippe C.D. Robert ", - "Serg Stoyan ", - "David Ayers ", - "Richard Frith-Macdonald ", - "Nicola Pero ", - "Pierre-Yves Rivaille ", - "Adam Fedor "); - + "Philippe C.D. Robert", + "Serg Stoyan", + "David Ayers", + "Richard Frith-Macdonald", + "Nicola Pero", + "Pierre-Yves Rivaille", + "Adam Fedor"); + NSIcon = "ProjectCenter.tiff"; + NSExecutable = ProjectCenter; + NSMainNibFile = ProjectCenter.gorm; + NSPrincipalClass = NSApplication; + NSRole = "Editor"; + NSTypes = ( + { + NSUnixExtensions = ( "project" ); + NSIcon = "FileProject.tiff"; + }, + { + NSUnixExtensions = ( "pcproj" ); + NSIcon = "FileProject.tiff"; + }, + { + NSUnixExtensions = ( "m" ); + NSIcon = "FileM.tiff"; + }, + { + NSUnixExtensions = ( "h" ); + NSIcon = "FileH.tiff"; + }, + { + NSUnixExtensions = ( "c" ); + NSIcon = "FileC.tiff"; + } + ); URL = "See http://www.gnustep.org/"; Copyright = "Copyright (C) 1999 - 2003 Free Software Foundation"; CopyrightDescription = "Released under the GNU General Public License 2.0"; diff --git a/ProjectCenter_main.m b/ProjectCenter_main.m index dc503ac..0d82c2c 100644 --- a/ProjectCenter_main.m +++ b/ProjectCenter_main.m @@ -20,538 +20,13 @@ You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - - $Id$ */ #include -#include -#include"PCAppController.h" - -void createMenu(); - -int main(int argc, const char **argv) +int +main(int argc, const char **argv) { -#ifdef GNUSTEP_BASE_VERSION - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - PCAppController *controller; - - [NSApplication sharedApplication]; - - createMenu(); - - controller = [[PCAppController alloc] init]; - [NSApp setDelegate:controller]; - - RELEASE(pool); -#endif - return NSApplicationMain (argc, argv); } -void -createMenu() -{ - NSMenu *menu; - NSMenu *info; - - NSMenu *project; -#ifdef ENABLE_SUBPROJECTS - NSMenu *subprojects; -#endif - - NSMenu *file; -#ifdef ENABLE_ALL_FILE_OPERATIONS - NSMenu *file_view; -#endif - - NSMenu *edit; - NSMenu *edit_find; - NSMenu *edit_undo; - NSMenu *edit_indent; - - NSMenu *format; - NSMenu *format_text; - - NSMenu *tools; - NSMenu *tools_build; -#ifdef ENABLE_PROJECTFIND - NSMenu *tools_find; -#endif -#ifdef ENABLE_LOADEDFILES - NSMenu *tools_files; -#endif - NSMenu *tools_launcher; -#ifdef ENABLE_INDEXER - NSMenu *tools_indexer; -#endif - - NSMenu *windows; - NSMenu *services; - - SEL action = @selector(method:); - - menu = [[NSMenu alloc] initWithTitle: @"ProjectCenter"]; - - /* - * The main menu - */ - - [menu addItemWithTitle:@"Info" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Project" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"File" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Edit" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Format" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Tools" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Windows" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Print..." action:action keyEquivalent:@"p"]; - [menu addItemWithTitle:@"Services" action:action keyEquivalent:@""]; - [menu addItemWithTitle:@"Hide" action:@selector(hide:) keyEquivalent:@"h"]; - [menu addItemWithTitle:@"Quit" action:@selector(terminate:) - keyEquivalent:@"q"]; - - /* - * Info submenu - */ - - info = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:info forItem:[menu itemWithTitle:@"Info"]]; - [info addItemWithTitle:@"Info Panel..." - action:@selector(showInfoPanel:) - keyEquivalent:@""]; - [info addItemWithTitle:@"Preferences..." - action:@selector(showPrefWindow:) - keyEquivalent:@""]; - [info addItemWithTitle:@"Help" - action:action - keyEquivalent:@"?"]; - - /* - * Project submenu - */ - - project = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:project forItem:[menu itemWithTitle:@"Project"]]; - [project addItemWithTitle:@"Open..." - action:@selector(projectOpen:) - keyEquivalent:@"O"]; - [project addItemWithTitle:@"New..." - action:@selector(projectNew:) - keyEquivalent:@"N"]; - [project addItemWithTitle:@"Save" - action:@selector(projectSave:) - keyEquivalent:@"S"]; - [project addItemWithTitle:@"Save As..." - action:@selector(projectSaveAs:) - keyEquivalent:@""]; - [project addItemWithTitle:@"Add Files..." - action:@selector(projectAddFiles:) - keyEquivalent:@"A"]; - [project addItemWithTitle:@"Save Files..." - action:@selector(projectSaveFiles:) - keyEquivalent:@"Q"]; - [project addItemWithTitle:@"Remove Files..." - action:@selector(projectRemoveFiles:) - keyEquivalent:@"r"]; -#ifdef ENABLE_SUBPROJECTS - [project addItemWithTitle:@"Subprojects" - action:action - keyEquivalent:@""]; -#endif - [project addItemWithTitle:@"Close" - action:@selector(projectClose:) - keyEquivalent:@""]; - -#ifdef ENABLE_SUBPROJECTS - - subprojects = [[[NSMenu alloc] init] autorelease]; - [project setSubmenu:subprojects - forItem:[project itemWithTitle:@"Subprojects"]]; - [subprojects addItemWithTitle:@"New..." - action:@selector(newSubproject:) - keyEquivalent:@""]; - [subprojects addItemWithTitle:@"Add..." - action:@selector(addSubproject:) - keyEquivalent:@""]; - [subprojects addItemWithTitle:@"Remove..." - action:@selector(removeSubproject:) - keyEquivalent:@""]; - -#endif - - /* - * File submenu - */ - file = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:file forItem:[menu itemWithTitle:@"File"]]; - [file addItemWithTitle:@"Open..." - action:@selector(fileOpen:) - keyEquivalent:@"o"]; - [file addItemWithTitle:@"New in Project" - action:@selector(fileNew:) - keyEquivalent:@"n"]; - [file addItemWithTitle:@"Save" - action:@selector(fileSave:) - keyEquivalent:@"s"]; - [file addItemWithTitle:@"Save As..." - action:@selector(fileSaveAs:) - keyEquivalent:@""]; - [file addItemWithTitle:@"Save To..." - action:@selector(fileSaveTo:) - keyEquivalent:@""]; - [file addItemWithTitle:@"Revert to Saved" - action:@selector(fileRevertToSaved:) - keyEquivalent:@"u"]; - [file addItemWithTitle:@"Close" - action:@selector(fileClose:) - keyEquivalent:@"W"]; -#ifdef ENABLE_ALL_FILE_OPERATIONS - [file addItemWithTitle:@"View" - action:action - keyEquivalent:@""]; - [file addItemWithTitle:@"Open Quickly..." - action:@selector(fileOpenQuickly:) - keyEquivalent:@"D"]; - [file addItemWithTitle:@"Rename" - action:@selector(fileRename:) - keyEquivalent:@""]; - [file addItemWithTitle:@"New Untitled" - action:@selector(fileNewUntitled:) - keyEquivalent:@""]; - - file_view = [[[NSMenu alloc] init] autorelease]; - [file setSubmenu:file_view - forItem:[file itemWithTitle:@"View"]]; - [file_view addItemWithTitle:@"Split" - action:action - keyEquivalent:@"2"]; - [file_view addItemWithTitle:@"Maximize" - action:action - keyEquivalent:@"1"]; - [file_view addItemWithTitle:@"Tear Off" - action:action - keyEquivalent:@"T"]; -#endif - - /* - * Edit submenu - */ - - edit = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:edit forItem:[menu itemWithTitle:@"Edit"]]; - [edit addItemWithTitle:@"Cut" - action:@selector(cut:) - keyEquivalent:@"x"]; - [edit addItemWithTitle:@"Copy" - action:@selector(copy:) - keyEquivalent:@"c"]; - [edit addItemWithTitle:@"Paste" - action:@selector(paste:) - keyEquivalent:@"v"]; - [edit addItemWithTitle:@"Delete" - action:@selector(delete:) - keyEquivalent:@""]; - [edit addItemWithTitle:@"Select All" - action:@selector(selectAll:) - keyEquivalent:@"a"]; - [edit addItemWithTitle:@"Find" - action:action - keyEquivalent:@""]; - [edit addItemWithTitle:@"Undo" - action:action - keyEquivalent:@""]; - [edit addItemWithTitle:@"Indentation" - action:action - keyEquivalent:@""]; - [edit addItemWithTitle:@"Spelling..." - action:action - keyEquivalent:@""]; - [edit addItemWithTitle:@"Check Spelling" - action:action - keyEquivalent:@";"]; - - // Find - edit_find = [[[NSMenu alloc] init] autorelease]; - [edit setSubmenu:edit_find - forItem:[edit itemWithTitle:@"Find"]]; - [edit_find addItemWithTitle:@"Find Panel..." - action:@selector(findShowPanel:) - keyEquivalent:@"f"]; - [edit_find addItemWithTitle:@"Find Next" - action:@selector(findNext:) - keyEquivalent:@"g"]; - [edit_find addItemWithTitle:@"Find Previous" - action:@selector(findPrevious:) - keyEquivalent:@"d"]; - [edit_find addItemWithTitle:@"Enter Selection" - action:action - keyEquivalent:@"e"]; - [edit_find addItemWithTitle:@"Jump to Selection" - action:action - keyEquivalent:@"j"]; - [edit_find addItemWithTitle:@"Line Number..." - action:action - keyEquivalent:@"I"]; - [edit_find addItemWithTitle:@"Man Page" - action:action - keyEquivalent:@"M"]; - - // Undo - edit_undo = [[[NSMenu alloc] init] autorelease]; - [edit setSubmenu:edit_undo - forItem:[edit itemWithTitle:@"Undo"]]; - [edit_undo addItemWithTitle:@"Undo" - action:action - keyEquivalent:@"z"]; - [edit_undo addItemWithTitle:@"Redo" - action:action - keyEquivalent:@"Z"]; - [edit_undo addItemWithTitle:@"Undo Region" - action:action - keyEquivalent:@""]; - - // Indentation - edit_indent = [[[NSMenu alloc] init] autorelease]; - [edit setSubmenu:edit_indent - forItem:[edit itemWithTitle:@"Indentation"]]; - [edit_indent addItemWithTitle:@"Indent" - action:action - keyEquivalent:@"i"]; - [edit_indent addItemWithTitle:@"Shift Left" - action:action - keyEquivalent:@"["]; - [edit_indent addItemWithTitle:@"Shift Right" - action:action - keyEquivalent:@"]"]; - [edit_indent addItemWithTitle:@"Compress Whitesapce" - action:action - keyEquivalent:@"{"]; - [edit_indent addItemWithTitle:@"Expand Message Expression" - action:action - keyEquivalent:@"}"]; - - /* - * Format submenu - */ - format = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:format - forItem:[menu itemWithTitle:@"Format"]]; - [format addItemWithTitle:@"Font" - action:action - keyEquivalent:@""]; - [format addItemWithTitle:@"Text" - action:action - keyEquivalent:@""]; - [format addItemWithTitle:@"Make Rich Text" - action:action - keyEquivalent:@"R"]; - [format addItemWithTitle:@"Show All Characters" - action:action - keyEquivalent:@""]; - [format addItemWithTitle:@"Page Layout..." - action:action - keyEquivalent:@"P"]; - - // Font - [format setSubmenu:[[NSFontManager sharedFontManager] fontMenu: YES] - forItem:[format itemWithTitle:@"Font"]]; - // Text - format_text = [[[NSMenu alloc] init] autorelease]; - [format setSubmenu:format_text - forItem:[format itemWithTitle:@"Text"]]; - [format_text addItemWithTitle:@"Align Left" - action:action - keyEquivalent:@""]; - [format_text addItemWithTitle:@"Center" - action:action - keyEquivalent:@""]; - [format_text addItemWithTitle:@"Align Right" - action:action - keyEquivalent:@""]; - [format_text addItemWithTitle:@"Show Ruler" - action:action - keyEquivalent:@""]; - [format_text addItemWithTitle:@"Copy Ruler" - action:action - keyEquivalent:@""]; - [format_text addItemWithTitle:@"Paste Ruler" - action:action - keyEquivalent:@""]; - - /* - * Tools submenu - */ - - tools = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:tools forItem:[menu itemWithTitle:@"Tools"]]; - // probert: either use a NSToolbar or remove that! -#ifdef ENABLE_TOOLBAR - [tools addItemWithTitle:@"Hide Tool Bar" - action:action - keyEquivalent:@""]; -#endif - [tools addItemWithTitle:@"Inspector..." - action:@selector(showInspector:) - keyEquivalent:@""]; -#ifdef ENABLE_LOADEDPROJECTS - [tools addItemWithTitle:@"Loaded Projects..." - action:action - keyEquivalent:@""]; -#endif - [tools addItemWithTitle:@"Project Build" - action:action - keyEquivalent:@""]; -#ifdef ENABLE_PROJECTFIND - [tools addItemWithTitle:@"Project Find" - action:action - keyEquivalent:@""]; -#endif -#ifdef ENABLE_LOADEDFILES - [tools addItemWithTitle:@"Loaded Files" - action:action - keyEquivalent:@""]; -#endif - [tools addItemWithTitle:@"Launcher" - action:action - keyEquivalent:@""]; -#ifdef ENABLE_INDEXER - [tools addItemWithTitle:@"Indexer" - action:action - keyEquivalent:@""]; -#endif - - // Project Build - tools_build = [[[NSMenu alloc] init] autorelease]; - [tools setSubmenu:tools_build - forItem:[tools itemWithTitle:@"Project Build"]]; - [tools_build addItemWithTitle:@"Show Panel..." - action:@selector(showBuildPanel:) - keyEquivalent:@""]; - [tools_build addItemWithTitle:@"Build" - action:action - keyEquivalent:@"B"]; - [tools_build addItemWithTitle:@"Stop Build" - action:action - keyEquivalent:@"/"]; - [tools_build addItemWithTitle:@"Clean" - action:action - keyEquivalent:@""]; - [tools_build addItemWithTitle:@"Next Error" - action:action - keyEquivalent:@">"]; - [tools_build addItemWithTitle:@"Previous Error" - action:action - keyEquivalent:@"<"]; - - // Project Find -#ifdef ENABLE_PROJECTFIND - tools_find = [[[NSMenu alloc] init] autorelease]; - [tools setSubmenu:tools_find - forItem:[tools itemWithTitle:@"Project Find"]]; - [tools_find addItemWithTitle:@"Show Panel..." - action:action - keyEquivalent:@"F"]; - [tools_find addItemWithTitle:@"Find References" - action:action - keyEquivalent:@"0"]; - [tools_find addItemWithTitle:@"Find Definitions" - action:action - keyEquivalent:@"9"]; - [tools_find addItemWithTitle:@"Find Text" - action:action - keyEquivalent:@"8"]; - [tools_find addItemWithTitle:@"Find Regular Expr" - action:action - keyEquivalent:@"7"]; - [tools_find addItemWithTitle:@"Next match" - action:action - keyEquivalent:@""]; - [tools_find addItemWithTitle:@"Previuos match" - action:action - keyEquivalent:@""]; -#endif - - // Loaded Files -#ifdef ENABLE_LOADEDFILES - tools_files = [[[NSMenu alloc] init] autorelease]; - [tools setSubmenu:tools_files - forItem:[tools itemWithTitle:@"Loaded Files"]]; - [tools_files addItemWithTitle:@"Show Panel..." - action:action - keyEquivalent:@"L"]; - [tools_files addItemWithTitle:@"Sort by Time Viewed" - action:action - keyEquivalent:@""]; - [tools_files addItemWithTitle:@"Sort by Name" - action:action - keyEquivalent:@""]; - [tools_files addItemWithTitle:@"Next File" - action:action - keyEquivalent:@"+"]; - [tools_files addItemWithTitle:@"Previuos File" - action:action - keyEquivalent:@"_"]; -#endif - - // Launcher - tools_launcher = [[[NSMenu alloc] init] autorelease]; - [tools setSubmenu:tools_launcher - forItem:[tools itemWithTitle:@"Launcher"]]; - [tools_launcher addItemWithTitle:@"Show Panel..." - action:@selector(showRunPanel:) - keyEquivalent:@""]; - [tools_launcher addItemWithTitle:@"Run" - action:@selector(runTarget:) - keyEquivalent:@""]; - [tools_launcher addItemWithTitle:@"Debug" - action:action - keyEquivalent:@""]; - -#ifdef ENABLE_INDEXER - // Indexer - tools_indexer = [[[NSMenu alloc] init] autorelease]; - [tools setSubmenu:tools_indexer - forItem:[tools itemWithTitle:@"Indexer"]]; - [tools_indexer addItemWithTitle:@"Show Panel..." - action:action - keyEquivalent:@""]; - [tools_indexer addItemWithTitle:@"Purge Indices" - action:action - keyEquivalent:@""]; - [tools_indexer addItemWithTitle:@"Index Subproject" - action:action - keyEquivalent:@"|"]; - [tools_indexer addItemWithTitle:@"Index File" - action:action - keyEquivalent:@"*"]; -#endif - - /* - * Windows submenu - */ - - windows = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:windows forItem:[menu itemWithTitle:@"Windows"]]; - [windows addItemWithTitle:@"Arrange in Front" - action:@selector(arrangeInFront:) - keyEquivalent:@""]; - [windows addItemWithTitle:@"Miniaturize Window" - action:@selector(performMiniaturize:) - keyEquivalent:@"m"]; - [windows addItemWithTitle:@"Close Window" - action:@selector(performClose:) - keyEquivalent:@"w"]; - - /* - * Services submenu - */ - - services = [[[NSMenu alloc] init] autorelease]; - [menu setSubmenu:services forItem:[menu itemWithTitle:@"Services"]]; - - [[NSApplication sharedApplication] setWindowsMenu: windows]; - [[NSApplication sharedApplication] setServicesMenu: services]; - [[NSApplication sharedApplication] setMainMenu:menu]; -} - diff --git a/Resources/LogPanel.gorm/data.classes b/Resources/LogPanel.gorm/data.classes new file mode 100644 index 0000000..5f46e5b --- /dev/null +++ b/Resources/LogPanel.gorm/data.classes @@ -0,0 +1,152 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:" + ); + Super = NSObject; + }; + PCLogController = { + Actions = ( + ); + Outlets = ( + panel, + textView + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Resources/LogPanel.gorm/objects.gorm b/Resources/LogPanel.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..783945433a3d2b6fd3494819fa10494c829c5f4b GIT binary patch literal 2059 zcmaJ?Uvt|;5MRmiKgmt(ICe@XG!)tZEwGn?0rEmzcbe%y)eb7{BcsUIpjMGQiqf=i z`3QPq`Z46M#xoD>-dS?oaj?d^yWQL0-tPWxb?E+an#t*op9X)0ZzR%h&;R*{eV!nS zALo<3m-7jVeKdptYlog29*vVY^TSxCKtEwZ%k`cdy^=x3Yd}-fpznH*&ocigk`KZl z3zOJS-?36y&~d$G8QdX79c!Y_NM4qP@i9pZC2!tl<$zvIliZw>SF~nzHd$wt&8l?^ zp28S@g9MIgOdy5~QW_(AB&1l^7TwCCYr!FSwD$~7X>S52G>^ci)hRrtaf*#ujlBRi zwQ;L5Zdve*VBeDAa|mg6jxEsu+x4Ewx7qVho|Bm=n$XY^S{b6ntGUh)ZE#%gcX>KZ z;)%+m0SpiMaOjNQ130`GI^%yXz!^)L4wd9Xu?h4Troji@$a8E98`i4SkJ8lFS$Cl6 zdgW3l7V^@V0W=JcXp0W-9w$-41+D=)IsrXCp(;g>O5yq^a-ueQQ$LW{(VH4omKqi% z_?=3xgcH1`_5DiUwm1fDKZBCv!AKNfwyNl*P)s$j(?H@FvJJV{iC zSef2&$re7V!@%4J-d}+8;N=0}jhX60s!_16>s}o;p6rU`SqKBXIO~RWx zoGb6}j@A#Va0eEgQwQYxn$YZj?=gP10{z9p8gFTRtwOI^x}_JlhR!b+6zhGJjE6T4 zz~Prl&b)W2HptbXoBg>MaNZxC_{Wkg43gp(8hp8jji%Em41E4RJqnU|&NaNPlhfcE z)4)4o$URkm_hS0WskR7EY~!v5UGa^|@ypq;VETVWW0S_O#TINTm?vjhBs02Zm%(-k x?yiPgV$-x@)4kbNv0F6p8@+4kb5u6cvS)oud$)^S{BFhG33HSF$AnCF{{ePWJ+=S< literal 0 HcmV?d00001 diff --git a/Resources/Preferences.gorm/data.classes b/Resources/Preferences.gorm/data.classes new file mode 100644 index 0000000..5eb2593 --- /dev/null +++ b/Resources/Preferences.gorm/data.classes @@ -0,0 +1,203 @@ +{ + FirstResponder = { + Actions = ( + "activateContextHelpMode:", + "alignCenter:", + "alignJustified:", + "alignLeft:", + "alignRight:", + "arrangeInFront:", + "cancel:", + "capitalizeWord:", + "changeColor:", + "checkSpelling:", + "close:", + "complete:", + "copy:", + "copyFont:", + "copyRuler:", + "cut:", + "delete:", + "deleteBackward:", + "deleteForward:", + "deleteToBeginningOfLine:", + "deleteToBeginningOfParagraph:", + "deleteToEndOfLine:", + "deleteToEndOfParagraph:", + "deleteToMark:", + "deleteWordBackward:", + "deleteWordForward:", + "deminiaturize:", + "deselectAll:", + "fax:", + "hide:", + "hideOtherApplications:", + "indent:", + "loosenKerning:", + "lowerBaseline:", + "lowercaseWord:", + "makeKeyAndOrderFront:", + "miniaturize:", + "miniaturizeAll:", + "moveBackward:", + "moveBackwardAndModifySelection:", + "moveDown:", + "moveDownAndModifySelection:", + "moveForward:", + "moveForwardAndModifySelection:", + "moveLeft:", + "moveRight:", + "moveToBeginningOfDocument:", + "moveToBeginningOfLine:", + "moveToBeginningOfParagraph:", + "moveToEndOfDocument:", + "moveToEndOfLine:", + "moveToEndOfParagraph:", + "moveUp:", + "moveUpAndModifySelection:", + "moveWordBackward:", + "moveWordBackwardAndModifySelection:", + "moveWordForward:", + "moveWordForwardAndModifySelection:", + "newDocument:", + "ok:", + "open:", + "openDocument:", + "orderBack:", + "orderFront:", + "orderFrontColorPanel:", + "orderFrontDataLinkPanel:", + "orderFrontHelpPanel:", + "orderFrontStandardAboutPanel:", + "orderFrontStandardInfoPanel:", + "orderOut:", + "pageDown:", + "pageUp:", + "paste:", + "pasteAsPlainText:", + "pasteAsRichText:", + "pasteFont:", + "pasteRuler:", + "performClose:", + "performMiniaturize:", + "performZoom:", + "print:", + "raiseBaseline:", + "revertDocumentToSaved:", + "runPageLayout:", + "runToolbarCustomizationPalette:", + "saveAllDocuments:", + "saveDocument:", + "saveDocumentAs:", + "saveDocumentTo:", + "scrollLineDown:", + "scrollLineUp:", + "scrollPageDown:", + "scrollPageUp:", + "scrollViaScroller:", + "selectAll:", + "selectLine:", + "selectNextKeyView:", + "selectParagraph:", + "selectPreviousKeyView:", + "selectText:", + "selectToMark:", + "selectWord:", + "showContextHelp:", + "showGuessPanel:", + "showHelp:", + "showWindow:", + "stop:", + "subscript:", + "superscript:", + "swapWithMark:", + "takeDoubleValueFrom:", + "takeFloatValueFrom:", + "takeIntValueFrom:", + "takeObjectValueFrom:", + "takeStringValueFrom:", + "terminate:", + "tightenKerning:", + "toggle:", + "toggleContinuousSpellChecking:", + "toggleRuler:", + "toggleToolbarShown:", + "toggleTraditionalCharacterShape:", + "transpose:", + "transposeWords:", + "turnOffKerning:", + "turnOffLigatures:", + "underline:", + "unhide:", + "unhideAllApplications:", + "unscript:", + "uppercaseWord:", + "useAllLigatures:", + "useStandardKerning:", + "useStandardLigatures:", + "yank:", + "zoom:" + ); + Super = NSObject; + }; + PCPrefController = { + Actions = ( + "popupChanged:", + "setSuccessSound:", + "setFailureSound:", + "setPromptOnClean:", + "setKeepBackup:", + "setSaveOnQuit:", + "setSavePeriod:", + "setDisplayPanels:", + "setPromptWhenQuit:", + "setDebugger:", + "setEditor:", + "setTabBehaviour:", + "setTabSpaces:", + "setRootBuildDir:", + "setDeleteCache:", + "setFullPathInFilePanels:", + "setRememberWindows:", + "setEditorSize:", + "setDisplayLog:" + ); + Outlets = ( + panel, + popupButton, + sectionsView, + buildingView, + successField, + setSuccessButton, + failureField, + setFailureButton, + promptOnClean, + savingView, + keyBindingsView, + miscView, + saveOnQuit, + keepBackup, + autosaveSlider, + autosaveField, + separateBuilder, + separateLauncher, + separateEditor, + separateLoadedFiles, + promptWhenQuit, + debuggerField, + editorField, + interfaceView, + deleteCache, + fullPathInFilePanels, + rememberWindows, + tabMatrix, + tabSpacesField, + rootBuildDirField, + rootBuildDirButton, + editorColumnsField, + editorLinesField, + displayLog + ); + Super = NSObject; + }; +} \ No newline at end of file diff --git a/Resources/Preferences.gorm/objects.gorm b/Resources/Preferences.gorm/objects.gorm new file mode 100644 index 0000000000000000000000000000000000000000..c1d281d881d3e031f8b22ac0c793f89de315bf59 GIT binary patch literal 25821 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