ProjectCenter-0.6.1/000755 001751 000024 00000000000 11766110770 014754 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/000755 001751 000024 00000000000 11766110765 016715 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/ChangeLog000644 001751 000024 00000257750 11765637750 016561 0ustar00multixstaff000000 000000 2012-06-12 Riccardo Mottola * Framework/PCProjectWindow.m Use centerScanRect to avoid strange problems with AA text in editor. * Headers/PCAppController.h * PCAppController.m Update applicationShouldTerminate signature. 2012-04-20 Riccardo Mottola * Modules/Debuggers/ProjectCenter/PTYView.m NetBSD doesn't support streams either. 2012-04-17 Riccardo Mottola * Modules/Debuggers/ProjectCenter/PTYView.m Fix imports and includes for FreeBSD 2011-09-08 Riccardo Mottola * Framework/PCAddFilesPanel.m [-setFileTypes]: use setAllowedFileTypes method instead of private method which was removed 2011-04-28 Riccardo Mottola * Framework/PCFileManager.m: Correct cast according to ctypes caveats. 2011-04-07 Riccardo Mottola * Headers/ProjectCenter/PCDefines.h Change ifdef to detect non-gnustep. * Framework/PCProjectInspector.m Warning fix. * Modules/Preferences/Misc/PCMiscPrefs.m Remove extra parentheses which confuse = and == warning. 2011-04-06 Fred Kiefer * Modules/Parsers/ProjectCenter/PCParser.m [-parse]: Move the selector and IMP definitions inside the method. Global IMP caching is always wrong! And this broke compilation with llvm. 2011-03-14 Nicola Pero * Modules/Projects/ResourceSet/PCResourceSetProject.m ([PCResourceSetProject -appendHead:]): Added FIXME. 2011-01-24 Wolfgang Lux * Modules/Editors/ProjectCenter/PCEditor.m (-revertFileToSaved): Ask for confirmation before reverting. 2011-01-24 Wolfgang Lux * Modules/Editors/ProjectCenter/PCEditorView.m (-performIndentation): Fix annoying bug where pressing the tab key would delete whole empty lines. Also register insertions done by the tab key at the undo manager. 2011-01-06 Wolfgang Lux * Modules/Projects/Application/PCAppProject+Inspector.m (-setDocBasedApp:): Fix bug where the document based app flag was reset after opening the project inspector for the first time. 2010-12-28 Wolfgang Lux * Framework/PCProjectBuilder.m (-buildArguments): Add either debug=yes or debug=no to the arguments since the debug variable no longer has a clear default for quite some time. 2010-12-22 German Arias * Headers/ProjectCenter/PCProject.h: Added method -resourceDirForLanguage:. So we can call this method to manage the languages. * Headers/ProjectCenter/PCProjectInspector.h: * Framework/PCProjectInspector.m: * Framework/English.lproj/ProjectLanguages.gorm: Added UI controls for languages at Inspector, and methods -addLanguage: and -removeLanguage:. 2010-12-18 German Arias * Headers/ProjectCenter/PCProjectInspector.h: * Framework/PCProjectInspector.m: * Framework/English.lproj/ProjectInspector.gorm: Added "Project Languages" option on Inspector. 2010-12-04 Wolfgang Lux * Framework/PCProjectBuilder.m (-build:, -logStdOut:, -logErrOut:): Fix race condition, which could lock PC after running a build task. 2010-12-04 Wolfgang Lux * Framework/PCProjectManager.m (-newProject): Improve Riccardo's previous patch. Don't ask for a new project directory with an extension project or pcproj and do not arbitrarily strip extensions from the project name. 2010-12-04 German Arias * Modules/Projects/Application/PCAppProject.m: Reverted a previous change since the extension "project" is not used anymore. 2010-12-01 Riccardo Mottola * Framework/PCProjectManager.m: Create project in a path with the project name. * Resources/Info-gnustep.plist, * English.lproj/Info.gorm Version bump. * Framework/PCProjectBuilder.m: Removed useless INSTDOMAIN variable during build phase. 2010-11-28 Riccardo Mottola * Framework/PCMakefileFactory.m * Framework/PCProjectBuilder.m * Framework/PCProjectInspector.m * Framework/English.lproj/BuildAttributes.gorm * Modules/Projects/Application/PCAppProject.m * Modules/Projects/ResourceSet/PCResourceSetProject.m * Modules/Projects/Bundle/PCBundleProject.m * Modules/Projects/Tool/PCToolProject.m * Headers/ProjectCenter/PCDefines.h * Headers/ProjectCenter/PCProjectInspector.h: Set, use and create makefiles using ain installation DOMAIN and not a directory. 2010-11-24 German Arias * Headers/ProjectCenter/PCProjectInspector.h: * Framework/PCProjectInspector.m: * Framework/English.lproj/ProjectInspector.gorm: Removed "Project Languages" option on Inspector. 2010-11-23 Riccardo Mottola * Framework/PCFileManager.m: Initialize isDir value. 2010-11-22 German Arias * Framework/GNUmakefile: Added ProjectLanguages.gorm * Headers/ProjectCenter/PCProjectInspector.h: * Framework/PCProjectInspector.m: Added projectLanguagesView and the method create the panel. * Framework/English.lproj/ProjectInspector.gorm: Added "ProjectLanguages" option. * Framework/English.lproj/ProjectLanguages.gorm: New "Project Languages" panel. At the moment this is empty, I will add the content later. 2010-11-21 German Arias * Framework/PCProjectInspector.m: Set "project" and "projectDir" when the panel is loaded. And take the languages to the popup from the PCUserLanguages key instead of NSUserDefaults. 2010-11-21 German Arias * Framework/PCProject.m: * Modules/Projects/Application/PCAppProject.m: * Modules/Projects/Application/PCAggregateProject.m: * Modules/Projects/Application/PCLibProject.m: * Modules/Projects/Application/PCBundleProject.m: * Modules/Projects/Application/PCFrameworkProject.m: * Modules/Projects/Application/PCToolProject.m: * Modules/Projects/Application/PCResourceSetProject.m: Set the key PCUserLanguages when the project is created not when is loaded. 2010-11-18 Riccardo Mottola * Modules/Editors/ProjectCenter/PCEditor.m: Init could return a different object, take it in account. * Framework/PCProjectEditor.m: Remove useless instruction and assignment. * Framework/PCProject.m: Fix memory leak. * Modules/Editors/ProjectCenter/PCEditor.m: Initialize range to ensure it does not contain garbage. 2010-11-16 German Arias * Framework/PCFileManager.m: Allow open .project directories to add files placed at project directory in AddFiles panel. 2010-11-05 German Arias * Modules/Projects/Application/PCAppProject.m: (-createProjectAt:) Delete the extension on the project name to avoid file names like MyApp.project.plist and an ugly name of the app (MyApp.project) at info panel. 2010-08-10 Sergii Stoian * Framework/PCProjectBrowser.m: (-nameOfSelectedCategory): Return 'nil' if name of subproject selected. Add comments. (-nameOfSelectedFile): Check if category is selected. (-click:): check if category is selected. 2010-07-31 Sergii Stoian * Framework/PCProject.m: (-assignProjectDict:): Fix setting projectPath to project dir (not to *.pcproj dir). * Framework/PCFilemanager.m: (-filesOfTypes:operation:multiple:title:accView:): Set allowed file types to panel of types is not nil. (-panel:isValidFilename): Use set allowed file types to panel. 2010-07-30 Sergii Stoian * Framework/PCProject.m: (-subprojectWithName:): Pass to openProjectAt: subproject dir. openProjectat: can now handle this situation. * Framework/PCProjectManager.m: (-openProjectAt:): Implement handling of 'aPath' argument as project file and as project dir. Select *.pcproj if exists then try to load PC.project. (-openProject): Implement intelligent selection of project file when selected *.pcproj, PC.project or project dir. * Framework/PCFilemanager.m: (-filesOfTypes:operation:multiple:title:accView:): Remove code specific for opening projects (moved to PCProjectManager's openProject). (-panel:isValidFilename): Fix handling project file detection. (-filesWithExtension:atPath:includeDirs:): New method. Returns list of files with specified extension. Also returns dirs if 'includeDirs' set to YES. 2010-07-28 Sergii Stoian * Framework/PCProject.m: (close:): Fix closing of subprojects. Remove subproject from Projectmanager's list of loaded projects. * Framework/PCLogController.m: (-init): Change font size to systemFontSize. 2010-07-24 Sergii Stoian * Headers/ProjectCenter/PCProjectBuilder.m: * Framework/PCProjectBuilder.m: (cleanupAfterMake:): Added new argument (NSString) to method containing current status text. Before status text in project window always stated "...terminated". 2010-07-13 Riccardo Mottola * Framework/PCProjectManager.m Log conversion into PC log and not console. Remove unneded keys. 2010-07-10 Riccardo Mottola * Modules/Projects/Application/Resources/PC.project * Modules/Projects/Library/Resources/PC.project * Modules/Projects/Aggregate/Resources/PC.project * Modules/Projects/Bundle/Resources/PC.project * Modules/Projects/Framework/Resources/PC.project * Modules/Projects/Tool/Resources/PC.project Remove LAST_EDITING from project template. It is not needed for validation. 2010-07-10 01:20-EDT Gregory John Casamento * Modules/Editors/ProjectCenter/PCEditor.m: in -save implemented simple mechanism for propagating changes in classes to Gorm when updating a header file. 2010-07-08 Riccardo Mottola * Framework/PCProject.m * Framework/PCProjectManager.m When opening a subproject pass the bundle name, or it gets concerted. 2010-07-07 14:49-EDT Gregory John Casamento * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Fixed issue where if there is no pid it would attempt to stop the current process. 2010-06-24 Riccardo Mottola * Headers/Protocols/CodeEditorView.h Fixed warning. 2010-06-22 Riccardo Mottola * Modules/Editors/ProjectCenter/PCEditor.h * Modules/Editors/ProjectCenter/PCEditor.m * Modules/Editors/ProjectCenter/PCEditor+Document.m Clean up parenthesis highlighting. * Modules/Editors/ProjectCenter/PCEditor.h * Modules/Editors/ProjectCenter/PCEditor.m Fix highlighting for standalone editors. * Modules/Editors/ProjectCenter/PCEditor+Document.m Deleted * Framework/PCProjectWindow.m Removed floorf() in favour of nothing or truncation. 2010-06-15 Wolfgang Lux * Framework/PCProject.m (-fileTypesForCategoryKey:): Add .dylib to the list of known library extensions. 2010-06-15 Wolfgang Lux * Modules/Projects/Application/PCAppProject.m (-writeMakefile): * Modules/Projects/Bundle/PCBundleProject.m (-writeMakefile): * Modules/Projects/Framework/PCFrameworkProject.m (-writeMakefile): * Modules/Projects/Library/PCLibProject.m (-writeMakefile): * Modules/Projects/ResourceSet/PCResourceSetProject.m (-writeMakefile) * Modules/Projects/Tool/PCToolProject.m (-writeMakefile): Fix bug where PC could include some localized resources in the RESOURCE_FILES Makefile variable. 2010-06-15 Wolfgang Lux * Framework/PCProjectManager.m(-openProjectAt:makeActive:): Prevent a crash when opening a subproject by not creating a new project window for the subproject. This window is immediately released again when the new project's super project is set anyway. * Framework/PCProjectManager.m(-closeAllProjects): Fix bug where PC would not quit after opening a subproject due to a bogus enumerator loop. 2010-06-07 Wolfgang Lux * Framework/PCProjectWindow.m (-dealloc): * Modules/Editors/ProjectCenter/PCEditor.m (-dealloc): Attempt to prevent crashes when a project is closed by ensuring that project and editor windows are closed before their owners are deallocated. 2010-06-04 Riccardo Mottola * TextFinder.m: check before replacing and allow undo (by Wolfgang Lux) 2010-06-03 Riccardo Mottola * Headers/Protocols/CodeEditorView.h: Declare new view protocol * Modules/Editors/ProjectCenter/PCEditorView.h * Modules/Editors/ProjectCenter/PCEditorView.m: Conform to CodeEditorView protocol and add accessor to the editor. * Framework/PCProjectWindow.m: Return the view's editor undo manager. * Modules/Preferences/Misc/PCMiscPrefs.m: declare strintg constants with @ 2010-06-01 Riccardo Mottola * Modules\Editors\ProjectCenter\PCEditor.m, * Modules\Editors\ProjectCenter\PCEditor.m: keep an undoManager for the Editor and return that to the window 2010-05-30 03:42-EDT Gregory John Casamento * Modules/Projects/Application/Resources/main.m: Same as below. 2010-05-30 03:17-EDT Gregory John Casamento * Modules/Projects/Application/Resources/AppController.h * Modules/Projects/Application/Resources/AppController.m * Modules/Projects/Tool/Resources/main.m: Remove licensing and copyright information from these since we don't want to assume that the user will be writing a GPLv3 program owned by the FSF (while that would be nice) it's not correct to assume it. 2010-05-30 01:54-EDT Gregory John Casamento * Framework/English.lproj/SaveModified.gorm: Correct issues with Gorm file. * Framework/PCSaveModified.m: Use setTitle: instead of setStringValue: to set the titles of the buttons. 2010-05-30 01:44-EDT Gregory John Casamento * Modules/Editors/ProjectCenter/PCEditor.m: Temporarily comment out previous change util we find the proper fix as it was preventing files from being saved. 2010-03-06 Riccardo Mottola * Modules\Editors\ProjectCenter\PCEditor.m: setup undo on the editor view 2009-11-26 Richard frith-Macdonald * Modules/Projects/Application/Resources/AppController.m: * Modules/Projects/Application/Resources/main.m: * Modules/Projects/Application/Resources/AppController.h: * Modules/Projects/Tool/Resources/main.m: Update to conform to coding standards and to use GPL 3 as default copyleft. 2009-09-20 03:45-EDT Gregory John Casamento * Framework/PCMakefileFactory.m: Check if buildDir is nil before generating the BUILD_DIR directive in the make file. Sometimes this is coming up with (nil) on Windows which is causing the build phase to fail. 2009-09-19 Riccardo Mottola * Images/Options.tiff: Added new icon, drawn by me. 2009-09-18 Riccardo Mottola * Framework/PCProjectLauncher.m Use path component instead of hard-coded slash 2009-09-17 Nicola Pero * Framework/PCMakefileFactory.m ([-createMakefileForProject:]): If GNUSTEP_INSTALLATION_DOMAIN is not set, do not output it. This is what was already happening, but the code seemed to assume otherwise. 2009-09-17 Nicola Pero Old patch from Markus Hitter , updated to the current code: * Framework/PCProjectManager.m ([-openProjectAt:makeActive:]): Pop up a warning panel if the project path includes a whitespace. ([-newProject]): Same change. 2009-09-15 Richard frith-Macdonald * Framework/PCMakefileFactory.m: generate makefiles with standard preamble to determine GNUSTEP_MAKEFILES if possible, and warn if not found. 2009-09-15 Riccardo Mottola * Headers/ProjectCenter/PCProject.h * Framework/PCProject.m Removed execToolName * Framework/PCProjectLauncher.m Launch executable directly without openapp/opentool and do not use execToolName to determine the project type 2009-06-23 18:22-EDT Gregory John Casamento * Framework/PCProject.m * Framework/PCProjectManager.m * Headers/ProjectCenter/PCProjectManager.h * PCAppController.m: Correct issues with project bundle loading. 2009-05-19 17:13-EDT Gregory John Casamento * Resources/Info-gnustep.plist: Added PCProjectFileType to the entry for pcproj to allow opening of bundles. 2009-06-10 Riccardo Mottola * Framework/PCProject.m, * Framework/PCProjectManager.m * Framework/PCProjectWindow.m * Headers/ProjectCenter/PCDefines.h use PCDefine constant for PC_WINDOWS dictionary key 2009-06-10 Riccardo Mottola * Framework/PCProject.m save last editing in user file inside the wrapper and not main project file 2009-05-19 17:13-EDT Gregory John Casamento * Framework/PCEditorManager.m: Added code in -openEditorForFile: editable:windowed: to open files which are not handled by any editor using [NSWorkspace openFile:] as a fallback. 2009-05-18 17:27-EDT Gregory John Casamento * Framework/PCProject.m: Add new project directory name. * Framework/PCProjectManager.m: Fix issue reported with loading of subprojects from an aggregate project. Changed loadProjectAt: method to handle both the current and old file locations. 2009-04-27 17:09-EDT Gregory John Casamento * Framework/PCProjectManager.m: Remove logic requiring projectWindow to be key in order to save file. This was causing files in tear-off editors to not be saved. This change is in the saveFile method. 2009-04-22 16:31-EDT Gregory John Casamento * Framework/PCProject.m: Changes to make plist output in human readable format. * Resources/Info-gnustep.plist: Changes to read C++ files using C editor. 2009-04-15 Sergii Stoian * Framework/PCProjectBuilder.m: (-startBuild:), (-startClean:): Move _isBuilding and _isCleaning vars before build: method call for correct determination in cleanupAfterMake method. (build:): Initialize build time vars before call to preBuildChecj method. * Framework/PCProjectBuilderOptions.m: Do not notify when changing project properties (build options). 2009-03-31 Riccardo Mottola * PCSplitView: removed and replaced with standard NSSplitView in all instances 2009-03-28 Sergii Stoian * Framework/PCProjectBuilder.m: (updateTargetField): Process args correctly when it has nil value. (startBuild): Move initializing of currentBuildPath and currentBuildFile from here... (build:):...to here. Rename pipes and handles vars to more appropriate names. Initialize pipes with alloc, init. (startClean): Use buildArguments as in startBuild method. (stopMake:): It seems that [makeTask isRunning] works correctly - use it. Remove comment. (cleanupAfterMake): Use _isBuilding and _isCleaning vars to detect running mode. Release currentBuildPath and currentBuildFile here. (buildDidTerminate): Release pipes here. (logData:error:): Initialize newLineRange.location before entering cycle. (logBuildString:newLine:): Cleanup. 2009-03-27 03:00-EDT Gregory John Casamento * Framework/PCProject.m: Implement openWrapperAtPath: * Framework/PCProjectManager.m: Change method call to use openWrapperAtPath: * Headers/ProjectCenter/PCProject.h: Add wrapperPath ivar. * Modules/Projects/Application/PCAppProject.m: Change method to call super. * Modules/Projects/Tool/PCToolProject.m: Change method to call super. 2009-03-27 01:18-EDT Gregory John Casamento * Framework/English.lproj/Builder.gorm: Update icons for stop and options. * Framework/PCProject.m: Added code to put files into packages when saving. * Headers/ProjectCenter/PCProject.h: Added ivar for file wrapper. 2009-03-27 Riccardo Mottola * Framework/PCProject.m: save windows placements to a separate file with the username as name 2009-03-24 Sergii Stoian * Framework/PCProjectBuilder.m: Add some comments (parseCompilerLine:): Implemented gcc output for compiling and linking. Set currentBuildFile var on file compilation. (cleanupAfterMake),(build:),(parseBuildLine:),(buildDidTerminate): Update status field of builder panel and project window 2009-03-23 Sergii Stoian * Framework/PCProjectBuilder.m: Change type of currentBuildPath var to NSMutableString. (buildArguments): Always use messages=yes argument internally. "Verbose ouput" option (Build Options panel) just toogle if build shows as with make argument 'messages=yes' or not. (line:startsWithString:): Implemented line start detection. (parseMakeLine:): Inital implementation of parsing make tool output. (parseCompilerLine:): Add for future implementation. (logBuildString:newLine:): Remove error: argument as it's not used. Method outputs to build view. (parseBuildLine:): Add implementation of entry point of build output parsing. 2009-03-22 Sergii Stoian * Framework/PCProjectBuilderOptions.m: (initWithProject:): Listen to PCProjectDictDidChangeNotification notification. (awakeFromNib): Move loading of project properties from here... (loadProjectProperties): ...to here. This is a notification action. * Framework/PCProjectInspector.m: (searchOrderPopupDidChange:): Clean selection in list. Clean text field. (searchOrderClick:): Show value of selected item in text field. (addSearchOrder:): Add check for entered value. More checking will be added in the future. * Documentation/TODO: Rearrange some items. Update state. * Framework/PCProjectBuilder.m: Some rearrangement of log methods. Category 'Logging' is for general logging methods, 'BuildLogging' for stantard output processing, 'ErrorLogging' for error output processing. (logBuildString:newLine:): New name of logString:error:newLine:. Use new name across the file. 2009-03-20 Sergii Stoian * Framework/PCProject.m: (buildTargets): Return default build targets only if project file doesn't contain list of them. * Framework/PCProjectBuilder.m: (prebuildCheck): Create build directory only if preference was set. (build:): Set initial "=== started ===" string. * Framework/PCProjectInspector.m: (createBuildAttributes): Set target and action for table view. (searchOrderPopupDidChange:): Add support for "Build Targets". (setSearchOrderButtonsState): Enable "Remove" button only if item in list was selected. (syncSearchOrder): Add support for "Build Targets". * Documentation/TODO: Add some tasks and update status of others. * Headers/ProjectCenter/PCDefines.h: Add key for build targets support. 2009-03-19 Sergii Stoian * Framework/PCProjectManager.m: (dealloc): Replace if() check with TEST_RELEASE. (openFileAtPath:): Use class variable instead of method's local. (saveFile): Call saveFile to project editor if project is active and project window has key state. Call non-project editor manager otherwise. * PCPrefController.m: (stringForKey:defaultValue:): Set value to non-existent key only if defaultValue is not 'nil' ('nil' when called via stringForKey: method). (boolForKey:defaultValue:): Set value to non-existent key only if defaultValue has positive value (has '-1' when called via boolForKey: method). 2009-03-17 02:14 Sergii Stoian * Framework/PCProjectManager.m: (openProjectAt:): Setactive project to loaded after all initalization completed. * Framework/PCProject.m: (saveProjectWindowsAndPanels): Save project windows and panels according to preferences setting. (close:): Remove unsused code. * Framework/PCProjectBuilder.m: Cleanup. 2009-03-15 02:14 Sergii Stoian * Headers/Protocols/Preferences.h: Add new methods. * PCPrefController.m: Implemented set/get of preferences value dependent. All values are stored in preferences as NSString values and converted upon request to specified type. * Modules/Preferences/EditorFSC/PCEditorFSCPrefs.m: Use new methods of PCPrefController. Implemented setting of editor fonts. (setDefaults): Removed. * Modules/Preferences/Build/PCBuildPrefs.m, * Modules/Preferences/Misc/PCMiscPrefs.m, * Modules/Preferences/Saving/PCSavingPrefs.m: Use new methods of PCPrefController. (setDefaults): Removed. * Framework/PCProjectLoadedFiles.m, * Framework/PCMakefileFactory.m, * Framework/PCProject.m, * Framework/PCProjectLauncherPanel.m, * Framework/PCFileManager.m, * Framework/PCProjectBrowser.m, * Framework/PCProjectBuilder.m, * Framework/PCEditorManager.m, * Framework/PCProjectLoadedFilesPanel.m, * Framework/PCProjectLauncher.m, * Framework/PCProjectBuilderPanel.m, * Framework/PCProjectWindow.m, * PCAppController.m, * Framework/PCProjectManager.m: Use new methods of PCPrefController. 2009-03-05 02:43 Sergii Stoian * ChangeLog: Update. * Modules/Preferences/Misc/PCMiscPrefs.h, * Modules/Preferences/Misc/PCMiscPrefs.m, * Modules/Preferences/Misc/Resources/MiscPrefs.gorm/data.classes, * Modules/Preferences/Misc/Resources/MiscPrefs.gorm/objects.gorm: Add new setting UseTearOffWindows. * Framework/PCProjectWindow.m: Use new setting. * Modules/Editors/ProjectCenter/PCEditor.m: (dealloc): Add releasing _window. * Documentation/TODO: Update. 2009-03-05 01:01 Sergii Stoian * Framework/PCProjectManager.m: (convertLegacyProject:atPath:): Correctly convert legacy application project. * Framework/PCEditorManager.m; (openEditorForFile:editable:windowed:): Don't open lert panel if file is not text file. Situation when editor for non text files called to be opened must be reviewd. 2009-03-05 00:08 Sergii Stoian * Framework/PCProjectBrowser.m: Stop using 'SeparateEditor' prefernce. Remove use of preferences code. (doubleClick:): Change support of external editor (add support for .app editors). * Framework/PCProjectWindow.m: Start implementing two-mode handling of tear-off windows. New handling will support two modes: 1. all windows are opened inside projet window and 2. Build, Launch/Debug, Loaded Files (Project Find in future) are opened as tear-off windows. This simplifiles the code and in my opinion more intuitive then current implementation. * Modules/Editors/ProjectCenter/PCEditor.m: (_createWindow): Change window attribute ReleasedWhenClosed to NO. * PCPrefController.m: Add new parameter 'notify' to method setObject. This parameter is usefull for situation when open and save panels saves its values. For example: when project are opened 'Open Project' panel save last opened dir to PC prefernces and post notificaion about prefs changes. Newly created objects of projects may lead to PC segfault. * Modules/Preferences/Build/PCBuildPrefs.m, * Modules/Preferences/Interface/PCInterfacePrefs.m, * Modules/Preferences/Saving/PCSavingPrefs.m, * Modules/Preferences/Misc/PCMiscPrefs.m, * Framework/PCFileManager: Use new preferences setObject method. 2009-03-03 Riccardo Mottola * Framework/PCProjectInspector.m: allow authors inside table to scroll during editing 2009-03-02 Riccardo Mottola * Framework/PCProject.m, * Framework/PCProjectBuilder.m, * Framework/PCProjectManager.m, * Framework/PCFileCreator.m, * Framework/PCEditorManager.m: Fix string constants 2009-03-01 03:10 Sergii Stoian * Modules/Preferences/Interface/PCInterfacePrefs.h: * Modules/Preferences/Interface/Resources/InterfacePrefs.gorm: * Modules/Preferences/Interface/PCInterfacePrefs.m: Move options "Remember windows and panels opened in project" and "Display Log Panel at startup" from here... * Modules/Preferences/Misc/PCMiscPrefs.h: * Modules/Preferences/Misc/PCMiscPrefs.m: * Modules/Preferences/Misc/Resources/MiscPrefs.gorm: to here. 2009-03-01 00:47 Sergii Stoian * Modules/Preferences/Build/PCBuildPrefs.h: * Modules/Preferences/Build/PCBuildPrefs.m: * Modules/Preferences/Build/Resources/BuildPrefs.gorm: Move "Remove files in root build directory on quit" option from here... * Modules/Preferences/Misc/PCMiscPrefs.h: * Modules/Preferences/Misc/PCMiscPrefs.m: * Modules/Preferences/Misc/Resources/MiscPrefs.gorm: to here. 2009-03-01 Sergii Stoian * Framework/PCProjectManager.m: * Framework/PCProjectLoadedFiles.m: * Framework/PCMakefileFactory.m: * Framework/PCProject.m: * Framework/PCFileManager.m: * Framework/PCProjectBrowser.m: * Framework/PCButton.m: * Framework/PCProjectBuilder.m: * Framework/PCEditorManager.m: * Framework/PCLogController.m: * Framework/PCProjectLauncher.m: * Framework/PCProjectWindow.m: * PCAppController.m: * Modules/Preferences/Build/PCBuildPrefs.m: * Modules/Preferences/Interface/PCInterfacePrefs.m: * Headers/Protocols/Preferences.h: * Headers/ProjectCenter/PCProject.h: * Headers/ProjectCenter/PCProjectBrowser.h: * Headers/ProjectCenter/PCProjectBuilder.h: * Headers/ProjectCenter/PCEditorManager.h: * Headers/PCPrefController.h: * PCPrefController.m: Use new preferences system instead of direct using of NSUserDefaults. 2009-02-27 Sergii Stoian * Rewriting of preferences was finished. Now prefereces sections are implemented as modules "Modules/Preferences/*". 2009-02-25 Sergii Stoian * Rewriting of preferences was started. 2009-02-23 Sergii Stoian * Set all textfields attributes to 'scrollable'. * Framework/PCProjectBuilderOptions.m: Set first reponder after panel is ordereder (call to makeFirstResponder: in awakeFromNib prevents textfield from draw its' border. GNUstep bug?). 2009-02-22 Sergii Stoian * Framework/PCSaveModifiedFiles.m: Change to more generic implementation. PCRunSaveModifiedFilesPanel() implemented. * Framework/PCProjectBuilder.m: (prebuildCheck): Use PCRunSaveModifiedFiles(). 2009-02-22 Sergii Stoian * Framework/PCSaveModifiedFiles.m: * Framework/English.lproj/SaveModifiedFiles.gorm: * Headers/ProjectCenter/PCSaveModifiedFiles.h: Add initial implementation of "Save Modified Files" panel. * Framework/PCProjectBuilder.m: (prebuildCheck): Use PCSaveModifiedFiles. 2009-02-19 Sergii Stoian * Framework/PCProjectBuilder.m: (prebuildCheck): Swap button names. 2009-02-17 Sergii Stoian * Framework/PCProjectBuilder.m: Cleanup. * Framework/PCEditorManager.m: (openEditorForFile:editable:windowed:): Add alert panel that ordeder front when file to open doesn't exist. Remove commented out call to [self orderFrontEditorForFile:filePath] (this method should be called directly to PCEditorManager or PCProjectEditor classes). * Documentation/TODO: Added "Fix reported bugs" to list. 2009-02-16 Sergii Stoian * Framework/PCProjectManager.m: (close): Implemented. Closes not only project but also non project files editors. * Framework/PCProject.m: Clean and alert panels in various situations. * Framework/PCProjectEditor.m: Move closeAllEditors, saveEditedFiles:, saveAllFiles and saveFileAs: methods to PCEditorManager. (saveFileAs:): Use superclass method. * Framework/PCEditorManager.m: Adopt moved methods. (modifiedFiles): Implemented. Return array of file paths. (hasModifiedFiles): Implemented for future use (e.g. prebuild check in ProjectBuilder). (reviewUnsaved:): Implemented. Go through modified files' editors and close which results in opening of alert "Save?" panels. * PCAppController.m: (applicationShouldTerminate:): Use PCProjectManager close method instead of closeAllProjects. * Modules/Editors/ProjectCenter/PCEditor.m: (_createWindow): Set "edited" flag according to current state. * Framework/PCProjectBuilder.m: (prebuildCheck): Check if project has edited files. 2009-02-15 14:14-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Detect when the program has stopped or exited so that status can be displayed. 2009-02-15 Sergii Stoian * Framework/PCProjectBrowser.m: (click:): Do not call editor if subproject name selected. (fileNameIconImage): Set "FileProject" icon if subproject name selected. * Framework/PCProjectManager.m: Remove unused methods projectPath and selectedFileName. * Framework/PCFileManager.m: Add alert panels if operation ends with error. * Framework/PCMakefileFactory.m: Add alert panels on error of creating files. * Framework/PCProjectBuilder.m: Review all situations when alert panels should be opened. Panels text corrected according to OpenStep UIG. 2009-02-14 Sergii Stoian * PCMenuController.m: (showInfoPanel:): Use appController intead of [NSApp delegate]. * GNUmakefile: Change version to 0.5.1. * Resources/Info-gnustep.plist: ditto. * Framework/PCProjectManager.m: (open): Move ordering front project window for here... (openProjectAt:): to here. * Framework/PCProjectBrowser.m: (nameOfSelectedCategory): Edit comment text. * Framework/PCLogController.m: (showPanel): Call makeKeyAndOrderFront instead of orderFront. * Headers/PCInfoController.[hm]: (showInfoWindow:): Get version info from Info-gnustep.plist. * PCPrefController.m: (showPanel:): Call makeKeyAndOrderFront instead of orderFront. 2009-02-14 Nicola Pero * Modules/GNUmakefile (SUBPROJECTS): Removed Debuggers/ProjectCenter on MinGW since it doesn't compile there. 2009-02-12 23:03-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Correct mispelling of search string. 2009-02-12 11:58-EST Gregory John Casamento * Framework/PCProjectManager.m: openProject to correct bug #25565. There was an extra semi-colon after the if statement in this method which was causing it to return before bringing the project window to the front. 2009-02-11 19:45-EST Gregory John Casamento * Framework/PCEditorManager.m: Switch to editor and line in the -debuggerDidHitBreakpoint: method. * Modules/Debuggers/ProjectCenter/PCDebugger.m: Minor cleanup. * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Changes to -[PCDebuggerView logString:newLine:] to detect state and change it on debugger window. * Modules/Debuggers/ProjectCenter/Resources/PCDebugger.gorm: Left justify the status field. 2009-02-11 Sergii Stoian * PCMenuController.m: (subprojectNew): Use renamed [projectManager openNewSubprojectPanel] method. * Framework/PCProjectManager.m: Change all alert panel names according to operation performed. Edit messages text of alert panels. Cleanup. (newSubproject): Rename to openNewSubprojectPanel which is more informative. (createSubproject): Change method definition to createSubproject:(id)sender and merge code with old createSubproject:(id)sender. (controlTextDidChange:): Activate 'Create' button only if subproject with entered name doesn't exist in project. * Framework/PCProjectBrowser.m: (nameOfSelectedCategory): Fix bug which prevent from removing subprojects. Now selected category is checked against superproject category list. When subproject name selected, name of superproject's category is returned. As side effect ProjectBrowser tries to load editor for selected subproject's name. Need to fix. 2009-02-10 Sergii Stoian * Framework/PCProjectManager.m: Corrections in alert panel names. Make "Add Files" panel run in modal mode. * Framework/PCProject.m: Corrections in alert panel names. * Framework/PCFileCreator.[mh]: Partial rewrite. Check existance of files wich will be added. Make panel run in modal mode. Add "Add Header File" option button. * Documentation/TODO: Update. 2009-02-08 Sergii Stoian * PCMenuController.m: (validateMenuItem:): Enable "File" menu items for files opened witout project. It fixes bug #25311 (now file saved). * Framework/PCProjectManager.m: (openFileAtPath:): Call to orderFrontEditorForFile: explicitly because of last change in PCEditorManager. * Framework/PCProjectBrowser.m: doubleClick:): Do not open file in separate window with PCProjectEditor not PCProjectManager. * Framework/PCProjectEditor.m: (openEditorForCategoryPath:windowed:): Cleanup. * Framework/PCEditorManager.m: (openEditorForFile:editable:windowed:): Remove call to orderFrontEditorForFile:. * Modules/Editors/ProjectCenter/PCEditor.m: (_createWindow): Modify default size and position of window. (openFileAtPath:editorManager:editable:): Remove creation of internal view. Create it when first requested (editorView and componentView methods). (windowDidBecomeKey:) No need to set first responder. It seems first responder remembered by window correctly. (windowDidResignKey:): Call resignFirstResponder: to notify others. * Modules/Projects/Application/PCAppProject.m: (dealloc): TODO added. * Documentation/TODO: Mark "Finish FileNameIcon..." task as done. 2009-02-06 Sergii Stoian * Framework/PCProject.m: (dealloc): Replace DEVELOPMENT with DEBUG * Framework/PCProjectBrowser.m: (fileNameIconPath): Implement new method. * Framework/PCFileNameIcon.m: (mouseDown:) Finish drag&drop implementation. (init): Do not set image by default. (dealloc): Replace DEVELOPMENT with DEBUG. (setDelegate:): Use ASSIGN. (updateIcon): Cleanup. * Framework/English.lproj/ProjectInspector.gorm: Remove 'Hide on deactivate' attribute to panel. It allows drag&drop operations for external applications (e.g. Workspace). * Modules/Projects/Application/PCAppProject.*: Use PCFileNameIcon in inspector to use drag&drop functionality. Cleanup. 2009-01-27 Sergii Stoian * Framework/GNUmakefile: Remove Preferences.gorm, Headers/PCPrefController.h, PCPrefController.m * GNUmakefile: Add Preferences.gorm, Headers/PCPrefController.h, PCPrefController.m * Framework/PCProjectManager.m: Access PCPrefController via var preController which is set by PCAppController. * Framework/PCProjectLoadedFiles.m: Remove #import of PCPrefController.h which is not used. * Framework/PCProjectBuilder.m: Access PCPrefController via PCProjectManager. * Framework/PCProjectWindow.m: ditto. * Framework/GNUmakefile.preamble: Remove -W from ADDITIONAL_OBJCFLAGS. It removes useless warnings from GNUstep libraries. 2009-01-17 Yavor Doganov * Framework/GNUmakefile: (ProjectCenter_LIBRARIES_DEPEND_UPON): Define to `$(OBJC_LIBS) $(FND_LIBS) $(GUI_LIBS)' to avoid unresolved symbols. Fixes bug #23792. 2009-01-17 Sergii Stoian * Framework/GNUmakefile: (ProjectCenter_HEADER_FILES): Include PCFileNameField.h and PCFileNameIcon.h in as referenced by PCProjectInspector.h. Fixes bug #21619. * Framework/PCProject.m: (fileTypesForCategoryKey:): add "nib" as recognizable interface file type. * Modules/Projects/Application/Resources/AppController.m: (awakeFromNib:): Remove setting menu title for better GORM integration (Thanks to German Arias). 2009-01-13 Riccardo Mottola * Framework/English.lproj/ProjectDescription.gorm: make the textfields scrollable 2009-01-02 Riccardo Mottola * Modules/Debuggers/ProjectCenter/PTYView.m: OpenBSD portability 2009-01-01 19:40-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/PTYView.[mh]: Changes to use new openpty replacement code on systems which don't have openpty, otherwise use the built-in version. 2009-01-01 17:41-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/Resources/Info.table: Add blank to file extension so that tools can be debugged as well. 2009-01-01 16:05-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/Resources/PCDebugger.gorm: Change the status bar size and set minimum window size. 2009-01-01 13:08-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/GNUmakefile * Modules/Debuggers/ProjectCenter/PTYView.h * Modules/Debuggers/ProjectCenter/PTYView.m: Change code to use openpty(...). 2008-12-31 Sergii Stoian * Framework/PCFileNameIcon.m: * Headers/ProjectCenter/PCFileNameIcon.h: Implementation of dragging functionality. * Framework/PCProjectBrowser.m: Implement file icon delegate methods. Dragging files to category icon adds files to project. 2008-12-30 Richard frith-Macdonald * PCMenuController.m: * Framework/PCProjectManager.m: * Framework/PCBundleManager.m: * Framework/PCMakefileFactory.m: * Framework/PCProject.m: * Framework/PCProjectLauncherPanel.m: * Framework/PCFileManager.m: * Framework/PCButton.m: * Framework/PCProjectBuilder.m: * Framework/PCProjectLoadedFilesPanel.m: * Framework/PCFileNameField.m: * Framework/PCSplitView.m: * Framework/PCProjectLauncher.m: * Framework/PCAddFilesPanel.m: * Framework/Resources/class.template: * Framework/Resources/header.template: * Framework/Resources/cfile.template: * Framework/PCProjectBuilderPanel.m: * Framework/PCFileCreator.m: * PCAppController.m: * PCFindController.m: * ProjectCenter_main.m: * Modules/Parsers/ProjectCenter/ObjCMethodHandler.h: * Modules/Parsers/ProjectCenter/ObjCCommentHandler.h: * Modules/Parsers/ProjectCenter/PCParser.h: * Modules/Parsers/ProjectCenter/ObjCClassHandler.h: * Modules/Parsers/ProjectCenter/ObjCMethodHandler.m: * Modules/Parsers/ProjectCenter/ObjCCommentHandler.m: * Modules/Parsers/ProjectCenter/CodeHandler.h: * Modules/Debuggers/ProjectCenter/PCDebugger.m: * Modules/Debuggers/ProjectCenter/PTYView.m: * Modules/Debuggers/ProjectCenter/PCDebuggerView.h: * Modules/Debuggers/ProjectCenter/PCDebugger.h: * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: * Modules/Debuggers/ProjectCenter/PTYView.h: * Modules/Projects/Application/PCAppProject.h: * Modules/Projects/Application/PCAppProject+Inspector.h: * Modules/Projects/Application/PCAppProject.m: * Modules/Projects/Application/PCAppProject+Inspector.m: * Modules/Projects/Application/Resources/AppController.m: * Modules/Projects/Application/Resources/main.m: * Modules/Projects/Application/Resources/AppController.h: * Modules/Projects/ResourceSet/PCResourceSetProject.h: * Modules/Projects/ResourceSet/PCResourceSetProject.m: * Modules/Projects/Library/PCLibProject.h: * Modules/Projects/Library/PCLibProject.m: * Modules/Projects/Aggregate/PCAggregateProject.h: * Modules/Projects/Aggregate/PCAggregateProject.m: * Modules/Projects/Bundle/PCBundleProject.h: * Modules/Projects/Bundle/PCBundleProject.m: * Modules/Projects/Framework/PCFrameworkProject.m: * Modules/Projects/Framework/PCFrameworkProject.h: * Modules/Projects/Tool/PCToolProject.m: * Modules/Projects/Tool/Resources/main.m: * Modules/Projects/Tool/PCToolProject.h: * Headers/PCMenuController.h: * Headers/Protocols/CodeDebugger.h: * Headers/Protocols/CodeEditor.h: * Headers/Protocols/CodeParser.h: * Headers/Protocols/ProjectType.h: * Headers/ProjectCenter/PCProject.h: * Headers/ProjectCenter/PCProjectLauncherPanel.h: * Headers/ProjectCenter/PCProjectBrowser.h: * Headers/ProjectCenter/PCFileManager.h: * Headers/ProjectCenter/PCButton.h: * Headers/ProjectCenter/PCProjectBuilder.h: * Headers/ProjectCenter/PCDefines.h: * Headers/ProjectCenter/PCProjectEditor.h: * Headers/ProjectCenter/PCEditorManager.h: * Headers/ProjectCenter/PCProjectLoadedFilesPanel.h: * Headers/ProjectCenter/ProjectCenter.h: * Headers/ProjectCenter/PCLogController.h: * Headers/ProjectCenter/PCSplitView.h: * Headers/ProjectCenter/PCProjectLauncher.h: * Headers/ProjectCenter/PCAddFilesPanel.h: * Headers/ProjectCenter/PCProjectBuilderPanel.h: * Headers/ProjectCenter/PCProjectInspector.h: * Headers/ProjectCenter/PCFileCreator.h: * Headers/ProjectCenter/PCPrefController.h: * Headers/ProjectCenter/PCProjectManager.h: * Headers/ProjectCenter/PCProjectLoadedFiles.h: * Headers/ProjectCenter/PCBundleManager.h: * Headers/ProjectCenter/PCMakefileFactory.h: * Headers/PCInfoController.h: * Headers/PCAppController.h: * PCInfoController.m: Update to use #import rather than #include now that it is no longer deprecated and is the officially preferred mechanism. 2008-12-29 22:29-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/Resources/continue_button.png: Add image. 2008-12-29 22:27-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/GNUmakefile: Add continue icon. * Modules/Debuggers/ProjectCenter/PCDebugger.m: Add continue method. 2008-12-29 20:23-EST Gregory John Casamento * Documentation/TODO: Update progress. * Modules/Debuggers/ProjectCenter/GNUmakefile: Add images to makefile. * Modules/Debuggers/ProjectCenter/PCDebugger.m: Add up and down methods to implement this behaviour. * Modules/Debuggers/ProjectCenter/Resources/down_button.png * Modules/Debuggers/ProjectCenter/Resources/up_button.png: Images for the up/down buttons. 2008-12-29 00:30-EST Gregory John Casamento * Framework/PCProjectLauncher.m: Remove local variable for debugger from method. Also add it to the launcher dealloc method. * Headers/ProjectCenter/PCProjectLauncher.h: Add an ivar for the debugger. * Modules/Debuggers/ProjectCenter/PCDebugger.m: Add dealloc to shut down the debugger window when it's dealloc. * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Don't set status when terminated, since it causes a crash. 2008-12-28 11:25-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/PCDebugger.m: Added code to do the restart and pause actions in the debugger. * Modules/Debuggers/ProjectCenter/PCDebuggerView.[hm]: Added method subProcessId and an ivar and the logic to parse the process id from debugger output. 2008-12-28 02:23-EST Gregory John Casamento * Framework/PCEditorManager.m: Remove log. * Modules/Debuggers/ProjectCenter/GNUmakefile: Added new images to resource list. * Modules/Debuggers/ProjectCenter/PCDebugger.[hm]: Added setStatus: method to manage status field. * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Added code to handle the toolbar. * Modules/Debuggers/ProjectCenter/PTYView.[hm]: Added method called "terminate" so that subclasses can override how the process is terminated. * Modules/Debuggers/ProjectCenter/Resources/PCDebugger.gorm: Added status line. * Modules/Debuggers/ProjectCenter/Resources/go_button.png * Modules/Debuggers/ProjectCenter/Resources/next_button.png * Modules/Debuggers/ProjectCenter/Resources/pause_button.png * Modules/Debuggers/ProjectCenter/Resources/restart_button.png * Modules/Debuggers/ProjectCenter/Resources/stepin_button.png * Modules/Debuggers/ProjectCenter/Resources/stepout_button.png: Images for debugger toolbar. 2008-12-27 00:47-EST Gregory John Casamento * Framework/PCEditorManager.m: Changed code to use the filePath that is passed in, since it is now fully qualified. * Modules/Debuggers/ProjectCenter/PCDebugger.m: Pass the "-f" (fullname) flag to gdb. This causes gdb to give a fully qualified pathname back. * Modules/Debuggers/ProjectCenter/PCDebuggerView.[hm]: Code to extract the line and file information. * Modules/Debuggers/ProjectCenter/PTYView.[hm]: New method putString:. 2008-12-26 13:01-EST Gregory John Casamento * Framework/PCEditorManager.m: Scroll to and select the line that the debugger has stopped at. * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: bring the debugger window to the front when a breakpoint is detected. 2008-12-26 02:25-EST Gregory John Casamento * Framework/PCEditorManager.m * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Changes to bring up the file in which the debugger has stopped in. 2008-12-25 23:46-EST Gregory John Casamento * Framework/PCProject.m * Headers/ProjectCenter/PCProject.h: Added notification for hitting a breakpoint. * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Added code to detect when a breakpoint is hit. 2008-12-25 10:30-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/GNUmakefile: Added PTYView.[hm] * Modules/Debuggers/ProjectCenter/PCDebugger.[hm]: Simplified to call PCDebuggerView instance with the program to start. * Modules/Debuggers/ProjectCenter/PCDebuggerView.[hm]: Refactored into a subclass of PTYView. * Modules/Debuggers/ProjectCenter/PTYView.[hm]: pty based terminal view which allows us to read and write from a pseudo-terminal. The code in the master/slave methods was inspired by an example given in "UNIX Network Programming" by W. Richard Stevens and also Nicola Vitacolonna. * Modules/Debuggers/ProjectCenter/Resources/PCDebugger.gorm: Added PTYView and made the PCDebuggerView a subclass of it. Also made the window release when closed so that the gdb process gets terminated. 2008-12-22 21:51-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/PCDebugger.m: Write to the filehandle via the stream in -[PCDebugger putChar:]. 2008-12-22 19:56-EST Gregory John Casamento * Modules/Debuggers/ProjectCenter/PCDebugger.h * Modules/Debuggers/ProjectCenter/PCDebugger.m * Modules/Debuggers/ProjectCenter/PCDebuggerView.m: Add code to write to the file desicriptor. 2008-12-22 18:36-EST Gregory John Casamento * English.lproj/ProjectCenter.gorm: Minor changes. * Framework/PCEditorManager.m: Cleanup. * Framework/PCProjectLauncher.m: Cleanup. * GNUmakefile: New module. * Headers/Protocols/CodeDebugger.h: New methods * Modules/Debuggers/ProjectCenter/GNUmakefile: Added debugger to resources. * Modules/Debuggers/ProjectCenter/PCDebugger.h * Modules/Debuggers/ProjectCenter/PCDebugger.m: Changes to talk to debugger task * Modules/Debuggers/ProjectCenter/Resources/PCDebugger.gorm: Debugger gorm file. 2008-12-23 Sergii Stoian * Documentatio/TODO: move unfinshed tasks from 0.5 to 0.6 release 2008-12-21 Sergii Stoian * Documentatio/TODO: update tasks for 0.6 release 2008-12-19 Nicola Pero * All GNUmakefiles: removed GNUSTEP_CORE_SOFTWARE=YES and added PACKAGE_NAME=ProjectCenter. * GNUmakefile: Export PACKAGE_NAME to reduce chances of a problem if a GNUmakefile in a subdirectory is missing it. 2008-12-18 Nicola Pero * Framework/GNUmakefile.preamble (GMAKE): Take advantage of the MAKE variable, which must already be set to the correct make else we wouldn't be able to compile PC itself, when searching for a working make. (GMAKE, GDB): Use := to void spawning a subshell every time one of these variables is read. 2008-12-18 Nicola Pero * All GNUmakefiles: added GNUSTEP_CORE_SOFTWARE=YES at the beginning. * GNUmakefile: Export GNUSTEP_CORE_SOFTWARE to reduce chances of a problem if a GNUmakefile in a subdirectory is missing it. 2008-12-17 Richard frith-Macdonald Where files are to be entered using NSOpenPanel and a 'set' button, make the corresponding textfields which display the filename selectable but not editable. 2008-12-17 Richard frith-Macdonald Clean up document type keys in ...info.plist Implement support for help document. 2008-12-16 Richard frith-Macdonald Attempt to get NSRole set correctly in document type info. 2008-12-09 Riccardo Mottola * Framework/PCPrefController.m: corrected wrong outlet 2008-12-07 Riccardo Mottola * Headers/ProjectCenter/PCPrefController.h, Framework/PCPrefController.m: handle setting path from Buttons 2008-11-27 22:06-EST Gregory John Casamento * Modules/Projects/Application/Resources/AppController.m: Correct warning in application:openFile: in AppController.m in Application project module. 2008-11-27 12:01-EST Gregory John Casamento * Framework/GNUmakefile * GNUmakefile: Correction for bug #24674. 2008-11-27 01:29-EST Gregory John Casamento * Framework/PCProjectBrowser.m: Check return value of [NSWorkspace getInfoForFile:application:type:]. Corrects crash when no editor is available for a type. 2008-10-25 20:48-EDT Gregory John Casamento * Version: 0.5 2008-10-22 Riccardo Mottola * English.lproj/Info.gorm: correct bugtracker URL 2008-10-22 Wolfgang Lux * Framework/PCProjectBuilder.m: fix memory related crash * Framework/PCProjectBuilder.m, Modules/Projects/Application/PCAppProject.m, Modules/Projects/Tool/PCToolProject.m: enhancements for relative install paths 2008-10-18 18:18-EDT Gregory John Casamento * ChangeLog: Moved to here top level of project. * Documentation/ChangeLog: Removed from here... * Modules/Editors/ProjectCenter/PCEditor.m: Corrected an issue in the windowDidResignKey: method which was making the window the first responder. This was preventing Find from working properly. 2008-02-20 Sergii Stoian * Framework/PCProjectBuilder.m: (-parseErorLine:): Fixed type of saved row and column values. Cleanup. * Framework/PCEditorManager.m: (-openEditorForFile:editable:windowed:): Fixed another NSLog parameter missing. 2008-02-19 Sergii Stoian * PCMenuController.m: Start thinking about "Go to line:" popup. * English.lproj/ProjectCenter.gorm: Added "Edit->Find->Line Number..." menu item. * Framework/PCProjectBrowser.m: (-nameOfSelectedFile:): Improve category select detection. (-pathToSelectedFile:): Use nameOfSelctedFile:. Cleanup. (-nameOfSelctedCategory:): Return project name if subproject is selected. * Framework/PCProjectEditor.m: (-openEditorForCategoryPath:windowed:): Use PCEditor's fileStructureItemSelected if file structure component selected in browser. * Framework/PCProjectBuilder.m: Go to line number in editor on error/warning click functionality implemented. * Framework/PCProjectWindow.m: Cleanup. * Framework/PCPrefController.m: Fix some compiler warnings. * Modules/Parsers/ProjectCenter/ObjCMethodHandler.m: * Modules/Parsers/ProjectCenter/ObjCClassHandler.m: Fix bug #20855. Improve class names parsing: don't include spaces. * Modules/Editors/ProjectCenter/PCEditorView.h: Remove unused editorDocument variable. * Modules/Editors/ProjectCenter/PCEditor.h: * Modules/Editors/ProjectCenter/PCEditor.m: Make class independent from ProjectCenter framework. Added variable _highlighSyntax. It sould be set via preferences in the future. (-_createEditorViewWithFrame:): Use _highlighSyntax variable. (-_methodsForClass:): New method. Used to return to browser methods only for selected class. (-browserItemsForItem:): Use _methodsForClass method. (-scrollToClassName:): Implemented. Now it's a almost identical copy of scrollToMethodName:. TODO: think about code optimization. * Modules/Editors/ProjectCenter/PCEditorView.m: (-drawRect:): Call highilghter only if it's enabled. 2008-02-13 22:10-EST Gregory John Casamento * Framework/PCMakefileFactory.m: Correction for bug#22311. Added project-type specific makefile generation. 2008-02-10 23:53-EST Gregory John Casamento * Framework/PCEditorManager.m: Corrected problem with call to NSLog(..) which was causing a crash. 2008-02-05 Sergii Stoian * PCMenuController.m: Start thinking about "Go to line:" popup. * English.lproj/ProjectCenter.gorm: Added "Edit->Find->Line Number..." menu item. * Framework/PCProjectBrowser.m: (-nameOfSelectedFile:): Improve category select detection. (-pathToSelectedFile:): Use nameOfSelctedFile:. Cleanup. (-nameOfSelctedCategory:): Return project name if subproject is selected. * Framework/PCProjectEditor.m: (-openEditorForCategoryPath:windowed:): Use PCEditor's fileStructureItemSelected if file structure component selected in browser. * Framework/PCProjectBuilder.m: Go to line number in editor on error/warning click functionality implemented. * Framework/PCProjectWindow.m: Cleanup. * Framework/PCPrefController.m: Fix some compiler warnings. * Modules/Parsers/ProjectCenter/ObjCMethodHandler.m: * Modules/Parsers/ProjectCenter/ObjCClassHandler.m: Fix bug #20855. Improve class names parsing: don't include spaces. * Modules/Editors/ProjectCenter/PCEditorView.h: Remove unused editorDocument variable. * Modules/Editors/ProjectCenter/PCEditor.h: * Modules/Editors/ProjectCenter/PCEditor.m: Make class independent from ProjectCenter framework. Added variable _highlighSyntax. It sould be set via preferences in the future. (-_createEditorViewWithFrame:): Use _highlighSyntax variable. (-_methodsForClass:): New method. Used to return to browser methods only for selected class. (-browserItemsForItem:): Use _methodsForClass method. (-scrollToClassName:): Implemented. Now it's a almost identical copy of scrollToMethodName:. TODO: think about code optimization. * Modules/Editors/ProjectCenter/PCEditorView.m: (-drawRect:): Call highilghter only if it's enabled. 2008-02-13 22:10-EST Gregory John Casamento * Framework/PCMakefileFactory.m: Correction for bug#22311. Added project-type specific makefile generation. 2008-02-10 23:53-EST Gregory John Casamento * Framework/PCEditorManager.m: Corrected problem with call to NSLog(..) which was causing a crash. 2008-02-05 Sergii Stoian * Framework/PCProjectManager.[mh]: Cleaning up code that manages non-project editors. Use PCEditorManager instead. Remove PCFileManager's dalegate code(FileManagerDelegates category). (-newFile): Call PCFileCreator's method newFileInProject:. * Framework/PCFileManager.[mh]: Move code related to creation of new file in project from here * Framework/PCFileCreator.[mh]: to here. (-createFile): Add additional check before adding file to project (fixes bug #17493). * Framework/English.lproj/NewFile.gorm: Set owner to PCFileCreator. 2008-01-22 Sergii Stoian * Framework/PCEditorManager.m: Added. * Headers/ProjectCenter/PCEditormanager.h: Added. * PCMenuController.m: (-fileSaveAs:): move code to PCProjectManager.m. * Headers/ProjectCenter/PCEditorManager.h: New file. * Framework/PCEditorManager.m: New file. Superclass for PCProjectEditor. * Framework/PCProjectManager.m: Use PCEditorManager. Implement opening files outside of projects (fixes bug #15992). * Framework/PCProjectLoadedFiles.m: Use PCEditorManager. * Framework/PCProject.m: (-setProjectManager:): Use new method of initializing PCProjectEditor. * Framework/GNUmakefile: Add PCEditorManager.[hm]. * Framework/PCProjectBrowser.m: Made use of PCProjectEditor's editorForFile: method. * Framework/PCProjectEditor.m: Remove initializing of extern variables (moved into PCEditorManager). Use '_componentView' var instead of 'componentView'. The same with _scrollView and _project. (-initWithProject:): renamed into init. Removed code duplicated with superclass' code. (-dealloc): Removed code duplicated with superclass' code. (-editorForFile:key:): Removed. Code moved into superclass' editorForFile: method. (-openEditorForCategoryPath:windowed:): Code that determines existance of file and if file is plain text move into [super openEditorForFile:editable:windowed:]. Changed file opening coditions. Made use of [ fileStructureItemSelected] method. Code that determines classes and methods in category path was removed. (openEditorForFile:categoryPath:editable:windowed:): Removed in favour of superclass' method. (activeEditor): Ditto. (allEditors): Ditto. (closeActiveEditor:): Ditto. (closeEditorForFile:): Ditto. (saveFile): Ditto. (saveFileTo:): Ditto. (revertFileToSaved): Ditto. (editorDidResignActive:): Ditto. (editorDidChangeFileName:): Ditto. (closeAllEditors:): Cleanup. (saveFileAs:): Made use of new -openEditorForFile:editable:windowed: method. * Framework/PCProjectWindow.m: Made usage of editorManager method of protocol. * Modules/Editors/ProjectCenter/PCEditorView.m: (becomeFirstResponder): Use new -becomeFirstResponder: method of PCEditor class. * Modules/Editors/ProjectCenter/PCEditor.h: Change name of var projectEditor to _editorManager. Add parameter (PCEditorView *)view to becomeFistResponder and resignFirstResponder methods. Add some comments. * Modules/Editors/ProjectCenter/PCEditor.m: Rename method -openFileAtPath:categoryPath:projectEditor:editable: to -openFileAtPath:editorManager:editable. Rename -projectEditor method to -editorManager. Change becomeFistResponder and resignFirstResponder methods' definitions. (fileStructureItemSelected:): Add initial implementation of action code according to the type of selected item. * Headers/Protocols/CodeEditor.h: Change definition of -openFileAtPath:categoryPath:projectEditor:editable: mathod to -openFileAtPath:editorManager:editable. Remove methods scrollToClassName: and scrollToMethodName:. Rename projectEditor method into editorManager. * Headers/ProjectCenter/PCProjectEditor.h: Made PCProjectEditor as subclass of PCEditorManager. Add prefix '_' to variables. (-initWithProject:): renamed into init. (setProject:): Added. Removed methods and variables duplicated with superclass. * Headers/ProjectCenter/PCProjectManager.h: Add editorManager var. (-saveFileAs:): renamed to saveFileAs. 2008-01-17 Sergii Stoian * Framework/PCProjectBrowser.m: (doubleClick:): open file with external application only if NSWorkspace doesn't return "ProjectCenter.app" appliction name. 2008-01-16 Sergii Stoian * GNUmakefile: Remove FileRTF.tiff from resoures. * Images/FileRTF.tiff: Removed. * Images/FileM.tiff, * Images/FileMH.tiff, * Images/FileH.tiff, * Images/FileHH.tiff, * Images/FileC.tiff, * Images/FileCH.tiff, Moved to Modules/Editors/ProjectEditor/Resources. * Images/FileProject.tiff: Added * Modules/Editors/ProjectCenter/PCEditor.h: Added new variable _isEditable. * Modules/Editors/ProjectCenter/PCEditor.m: (_createEditorViewWithFrame:): Set editable state for NSTextView here. Add observer for changed text notification here. * Resources/Info.plist: NSTypes was extended. 2008-01-15 Sergii Stoian * Framework/PCBundleManager.m: (objectForClassName:bundleType:protocol:) Return nil if className is nil. 2007-12-20 Nicola Pero * PCMakefileFactory.m ([-createPreambleForProject:]): Output the -l flags in the ADDITIONAL_GUI_LIBS variable, not the ADDITIONAL_LDFLAGS one. This should fix linking applications on Windows, but will not work well for linking non-GUI libraries. ProjectCenter needs to be extended to allow specifying ADDITIONAL_TOOL_LIBS and ADDITIONAL_OBJC_LIBS on the gui. 2007-12-13 Nicola Pero * GNUmakefile.preamble (ADDITIONAL_LIB_DIRS): Improved linking to the ProjectCenter framework when it's not installed yet so that it should work on non-flattened layouts. * Modules/GNUmakefile.bundles (ADDITIONAL_LIB_DIRS): Same change. (BUNDLE_INSTALL_DIR): Use GNUSTEP_APPS, not GNUSTEP_SYSTEM_ROOT. 2007-09-27 Sergii Stoian * Framework/PCBundleManager.m, * Headers/ProjectCenter/PCBundleManager.h: Make massive cleaup. some methods changed, some deleted, some added. * Framework/PCProjectManager.m, * Framework/PCProjectEditor.m: Make use of changed PCBundleManager. * TextFinder.m: (-enterSelection:): Add sanity check for text variable. (-jumpToSelection:): Ditto. * Modules/Parsers/ProjectCenter/Resources/Info.table: Fix value of "Name" key. * Headers/Protocols/CodeEditor.h: Remove declaration of openExternalEditor:withPath:projectEditor: method. It will be provided by Custom.editor bundle (will be added soon). * Headers/ProjectCenter/PCProjectEditor.h: Cleanup. 2007-09-24 Sergii Stoian * English.lproj/FindPanel.gorm: Added Find panel. * PCMenuController.m: Added Find panel support. * TextFinder.[hm]: Added implementation of Find panel. 2007-08-29 Sergii Stoian * Frameworks/PCFileManager.m: (-filesForOpenOfType:multiple:title:accView:): Removed (-fileForSaveOfType:title:accView:): Removed. (-filesForAddOfTypes:): Removed. (-filesOfTypes:operation:multiple:title:accView:): Implemented. Replaces removed methods. (-_panelForOperation:title:accView:): New method. Returns panel for specified operation type. (-_saveLastDirectoryForPanel:): New method. Saves last opened directory for operation type (panel). (-panel:isValidFilename:): Validate directory as correct filename if project is opening and directory has PC.project file. * Headers/ProjectCenter/PCFileManager.h: Added new variable 'operation' and declaraion of new mathods. * Framework/PCProjectManager.m: Use new methods of PCFileManager. * Framework/PCProjectWindow.m: (-preferencesDidChange:): Show Builder and Launcher panels only they are visible in project window (fixes bug #20858). * Modules/Projects/Library/Resources/Version: Changed GCC version to 2.95.3. 2007-08-23 Sergii Stoian * Modules/Editors/ProjectCenter/Resources/ObjC.syntax: Change color of 'NO'. * Modules/Projects/Library/Resources/Version: Change gcc version to 2.9.5. 2007-08-22 Sergii Stoian * Framework/PCProjectBuilderOptions.m: Add missing file. * Headers/ProjectCenter/PCProjectBuilderOptions.h: Add missing file. * Framework/PCProject.m: (-rootCategories): Call subproject's method if subproject is active. (-rootEntries): Ditto. (-keyForCategory:): Ditto. Fix bug #20854. (-categoryForKey:): Ditto. (-keyForRootCategoryInCategoryPath:): Since keyForCategory: was made subproject's sensitive implement key searching here. 2007-08-21 Sergii Stoian * Framework/PCProjectBuilderOptions.m: New file. * Headers/ProjectCenter/PCProjectBuilderOptions.h: New file. * ProjectBuilder options handling finished. * Fixed compliance to GNUstep make v2. * Framework/PCFileNameIcon.m: Start implementing drag/drop. * Images/ProjectCenter.tiff: Use ProjectManager's app icon. * Modules/Projects/*/Resources/Info.table: change default targets. * Headers/ProjectCenter/PCDefines.h: Clean up. 2007-07-19 Sergii Stoian * GNUmakefile.postamble: Cleanup old code. * Headers/ProjectCenter/PCMakefileFacory.h: * Framework/PCMakefileFacory.m: (-createMakefileFroProject:): change argument type from NSSrting to PCProject. Set installation path PCInstallDir value. * Modules/Projects/*/PC*Project.m: (-writeMakefile): Adopt createMakefileForProject argument type changes. 2007-06-06 Sergii Stoian * GNUmakefile: Set GNUSTEP_INSTALLATION_DOMAIN to SYSTEM. 2007-06-05 Sergii Stoian * Framework/PCProjectBuilder.m: Added parsing of gcc error output. 2007-04-27 Nicola Pero * PCProjectLauncher.m ([-debug:]): Fixed determining the path of the executable to debug. Try (in the order) xxx.debug/xxx, xxx.app/xxx and obj/xxx. Fixed path printed in error message when gdb is not found. (Originally from a patch by Friedrich ) 2007-04-27 Nicola Pero * PCProject.m ([-execToolName]): Fixed typo where 'ExecuToolName' had been typed instead of 'ExecToolName'. * PCProjectLauncher.m ([-run:]): Add './' before the name when we're using openapp, so that we use 'openapp ./Gorm.app' but 'opentool autogsdoc'. This fixes running application/tool projects. 2007-03-06 Nicola Pero * GNUmakefile: Set GNUSTEP_MAKEFILES using gnustep-config if not yet set. Do not set GNUSTEP_INSTALLATION_DOMAIN. * PCBundleManager.m ([-loadBundlesWithExtension:]): Rewritten to use the proper NSSearchPathForDirectoriesInDomains API so that it works with all filesystem layouts. Also, load bundles from all ApplicationSupport/ProjectCenter locations, not just the System one. * Framework/PCPrefController.m (-setBundlePath:): Method removed. * Headers/ProjectCenter/PCPrefController.h: Same change. * PCFileManager.m ([-createDirectoriesIfNeededAtPath:]): Avoid infinite loop that would be triggered the first time you tried to build your project. 2007-02-14 Nicola Pero * GNUmakefile.bundles (BUNDLE_INSTALL_DIR): Fixed definition basing it on GNUSTEP_APPS. 2007-02-14 Nicola Pero * Modules/Projects/Application/PCAppProject.m: Do not set GNUSTEP_INSTALLATION_DIR in the GNUmakefile. This would not work with the new filesystem support. The GUI probably needs updating to make users aware of this. * Modules/Projects/Tool/PCToolProject.m: Same change. 2007-01-20 Sergii Stoian * Modules/Editors/ProjectCenter/Resources/ObjC.syntax: Update. 2007-01-15 Sergii Stoian * Framework/PCProjectManager.m: Remove code handling rootBuildPath var. Remove rootBuildPath var. * Headers/ProjectCenter/PCProjectManager.h: Ditto. * Framework/PCFileManager.m: Add removeDirsIfEmpty:(BOOL) parameter to remove* methods. * Headers/ProjectCenter/PCFileManager.h: Ditto. * Framework/PCProject.m: Pass removeDirsIfEmpty:(BOOL) parameter to PCFileManager remove* methods calls. * PCAppController.m: Ditto. * Modules/Projects/Application/PCAppProject.m: Ditto. * Modules/Projects/Tool/PCToolProject.m: Ditto. * Framework/PCProjectBuilder.m: Rename ivar currentProject into project. Use it. (prebuildCheck:): Create root build directory if not exist. * Headers/ProjectCenter/PCProjectBuilder.h: Rename ivar currentProject into project. * Documentation/TODO: Update. * Documentation/ANNOUNCE: Ditto. 2007-01-15 Sergii Stoian * Framework/PCProjectManager.m: Fix problem with closing project. * Framework/PCProjectr.m: Ditto. * Framework/PCMakefileFactory.m: Support for root build directory added. * Framework/PCProjectBuilder.m: Code cleanup. * Framework/PCProjectEditor.m: Enable usage of parser. Start testing process. * Framework/PCProjectWindows.m: Enable tooltips for buttons. * Framework/PCPrefController.m: setRootBuildDir: fix. * PCAppController.m: applicationWillTerminate: Remove file from build dir on application quit. This code still needs review (also removed build dir because of use PCFileManager's method). * Modules/Editors/ProjectCenter/PCEditor.m: browserItemsForItem: Crashes if file is not supported by parser. Fixed. 2007-01-12 Sergii Stoian * Framework/PCProjectBuilder.m: Parsing of error output almost complete, testing. Display number of warnings and errors in statud line after build process finished. * Framework/English.lproj/BuilderPanel.gorm: Change minimal size. * Framework/English.lproj/ProjectWindow.gorm: Fix minimal size. 2007-01-09 Sergii Stoian * Framework/English.lproj/Builder.gorm: Added. * Framework/English.lproj/BuilderPanel.gorm: Added. * Framework/PCProjectBuilder.m: Use GORM file for interface. Initial parsing for error logging view was added. * Framework/PCProjectBuilderPanel.m: Use GORM file for interface. 2006-12-26 Sergii Stoian * Merge changes from UNSTABLE_0_5 into trunk. * Localizable resources for application and framework was defined (English.lproj). * Rename directory with ProjectCenter framework from Library to Framework. * Fix makefiles wrt to framework directory renaming. 2006-11-20 Sergii Stoian * Rewritte bundle loading mechanizm. Bundle now loaded on demand. * Created Protocols directory. * PCEditor and friends moved to loadable bundle Modules/Editors/ProjectCenter. * PCLogController.[hm] and PCPrefController.[hm] was moved to Library. * Fixes for MingW environment (thanks to Adam Fedor). * Added attempt to find make and debugger utilities. 2006-11-15 Nicola Pero * Modules/GNUmakefile.bundles (BUNDLE_INSTALL_DIR): Install the bundles in GNUSTEP_INSTALLATION_DIR, not in GNUSTEP_SYSTEM_ROOT. * Modules/ApplicationProject/PCAppProject.m ([PCAppProject -appendHead:]): Do not hardcode GNUSTEP_INSTALLATION_DIR in GNUmakefiles. See comments in the file for an explanation of how to improve PC's installation controls. * Modules/RenaissanceProject/PCRenaissanceProject.m ([PCRenaissanceProject -appendHead:]): Same change. * Modules/ToolProject/PCToolProject.m ([PCToolProject -appendHead:]): Same change. * Modules/BundleProject/Resources/PC.project (INSTALLDIR): Install bundles by default in $(GNUSTEP_BUNDLES). 2006-10-21 15:41-EDT Gregory John Casamento * Resources/ProjectCenter.gorm: Corrected issue with dangling menu/ menu items in the .gorm file. 2006-10-09 Nicola Pero * GNUmakefile (GNUSTEP_INSTALLATION_DIR): Do not set GNUSTEP_INSTALLATION_DIR. It should never be set in GNUmakefiles. * Library/GNUmakefile: Same change. * Modules/GNUmakefile: Same change. * ProjectCenter/Resources/GNUmakefile: Same change. 2005-09-11 Serg Stoyan * Library/PCProject.m: (saveProjectWindowsAndPanels): save ProjectBrowser frame. * Library/PCProjectWindow.m: gormified. (_initUI): Adopt to grom model. Make self as delegate for h_split. (splitView:resizeSubviewsWithOldSize:) implemented h_split delegate method. Used for restoring saved frame of ProjectBrowser. In general, used to restore subviews size of horisontal and verstical split views from last session. "Remember project windows and panels in PC.project" task from TODO file is considered fully comleted now. Will use this scheme for other split views in PC. * Library/PCFileNameIcon.[hm]: new files. I'm not sure yet if it should be separate class for file icons. 2005-06-20 Serg Stoyan * Library/PCFileNameField.m: new file. * Library/PCProjectInspector.m: moved class PCFileNameField to separate file. * Library/PCProjectWindow.m: (_initUI)fileIconTitle now is PCFileNameField instead of NSTextField. 2005-06-11 Serg Stoyan * PCAppController.m: (applicationWillTerminate:): Don't remove temorary directory. Needs more investigation since NSTemporaryDirectory() returns f.e. /tmp/GNUstepSecure1000. * Library/PCProjectEditor.m: (orderFrontEditorForFile:): Always show editor subview (Fixed bug#11779). Incorporated from HEAD branch. 2005-01-28 Serg Stoyan * Moduleas/ResourceSetProject: Added. 2005-01-27 Serg Stoyan * Renaissance project type removed. 2005-01-26 Serg Stoyan * Renaissance project type code and templates moved into Applicaton project type. 2005-01-25 Serg Stoyan * Move "Project Name", "Project Type" and "Language" fields into Project Inspector's "Project Attributes section" * Library/PCProject.m: Add "Project Attributes" view. Modules' inspectors now subview of this view. 2005-01-23 Serg Stoyan * Move appendLibraries: from project modules into PCMakefileFactory.m * Include into GNUmakefile only public headers for Framework and Library project types. * Project type bundles now have .project suffix. * Library/PCBundleLoader.[hm]: (loadBundlesWithExtension:): Added and implemented. (loadBundlesAtPath:withExtension:): ditto. (loadBundleWithFullPath:): ditto. (loadBundles): removed. * Library/PCProjectManager.m: (loadProjectTypeBunldes): Call loadBundlesWithExtension:@"project". * Added Framework project type. * 0.5 branch started. 2005-01-22 Serg Stoyan * Release 0.4.1 * Modules/ApplicationProject/PCAppProject+Inspector.m: (addDocType:): Set all textfields to default values. (removeDocType:): Call fillFieldsForRow: after row removing. 2005-01-09 Gregory Jonh Casamento * Library/PCProjectBuilder.m: (build:): Exception handler added. 2005-01-09 Serg Stoyan * Library/PCButton.m: (release): Added and implemented. Remove tooltips if object is about to be dealloced. * Library/PCProjectBuilder.m: (stopBuild:): Eception handler added. 2005-01-05 Serg Stoyan * Library/GNUstep.postamble: Make "ln -s" ProjectCenter to the ../Library. It should make correct compiling on Windows. * Library/PCFileManager.m: (defaultManager:): Don't autorelease returned object. 2005-01-04 Serg Stoyan * Library/PCFilesManager.[hm]: (createDirectoriesIfNeededAtPath:): Added and implemented. (copyFile:toFile:): ditto. (copyFile:intoDirectory:): ditto. * Use above methods where it's appropriate. 2005-01-03 Serg Stoyan * Library/PCAddFilesPanel.[hm]: New implementation. Derived from NSOpenPanel. * Library/PCFileManager.m: Use PCAddFilesPanel instead of NSOpenPanel. * Library/PCProject.m: (projectFileFromFile:forKey:): Rewritten to correctly support subprojects' files and libraries. (addFiles:forKey:notify:): Add path to PCSearchLibs when adding libraries. * Library/PCProjectInspector.m: Observe project dictionary changes and reread it. Accept entered value when textfields are losting focus. * Library/PCProjectBrowser.m: (doubleClick:): Don't try to open libraries. * Modules/ApplicationProject/Resources/Main.gorm: Connect delegate to AppController (bug #11478). * Library/PCProjectEditor.m: (editorForFile:categoryPath:windowed:): Call orderFrontEditorForFile: to show already opened file (bug #11448). * Library/PCEditor.m: (_createEditorViewWithFrame:): Remove return of autoreleased ivar. * Library/PCFileManager.m: (filesForAddOfTypes:): Get list of categories from active project not from root active project. 2004-12-24 Serg Stoyan * "Build Tool" setting from Project Inspector was moved to PC Preferences. * Implemented support of document-based applications * Added "Document types" panel into Project Inspector * Library/PCFileManager.m: Fix crashing while calling "Add Files" panel. 2004-10-14 Serg Stoyan * Fixed interface (*.gorm) files wrt to latest GORM changes. 2004-07-22 Serg Stoyan * Library/PCButton.m: Rewritten tooltips code. Almost ready for incorporation into NSView. * Library/PCProjectBuilder.m: Use new tooltip code and remove old style code. * Library/PCProjectLauncher.m: ditto. * Library/PCProjectWindow.m: ditto. *Images/ButtonTile.tiff: removed. 2004-07-15 Serg Stoyan * Library/PCProject.m: (projectFileForFile:forKey:): Fix recognizing of subproject files. * Library/PCProjectManager.m: (addProjectFiles):ditto. * Update all GORM files with latest CVS GORM version. * Resources/Preferences.gorm: Fix Auto-Save slider. 2004-07-14 Serg Stoyan * Library/PCButton.m: PCButtonCell removed. (initWithFrame:): [self setCell:] removed. [_cell setGradientType:] added. 2004-07-04 Serg Stoyan * Library/PCProject.m: (projectFileFromFile:forKey:): If adding files from subproject to project add it with relative path to project's one. * Modules/ApplicationProject/PCAppProject.m: (writeMakefile): Do not add "Resources/" prefix if resource file is part of subproject. * Modules/BundleProject/PCBundleProject.m: (writeMakefile): ditto. * Modules/LibraryProject/PCLibProject.m: (writeMakefile): ditto. * Modules/RenaissanceProject/PCRenaissanceProject.m: (writeMakefile): ditto. * Modules/ToolProject/PCToolProject.m: (writeMakefile): ditto. 2004-07-03 Serg Stoyan * Library/PCProjectManager.m: (addProjectFiles:): Don't copy files that already in project directory structure. This allows adding of subproject's files to project resources. * Across the ProjectCenter: Comment out calls for PCLog*. This is speedup PC. 2004-06-22 Serg Stoyan * Library/PCFileManager.m: (panel:shouldShowFilename:): Treat .gorm dirs not as dirs. * Library/PCProject.m: (doesAcceptFile:forKey:): Check existance of file in sourceFileKeys and resourceFileKeys. * Modules/*: Made cleanup in sourceFileKeys, resourceFileKeys and otherKeys methods. 2004-06-21 Serg Stoyan * Library/PCFileManager.m: (panel:shouldShowFilename:): Fix filtering out files already included in project. Optimized. * GNUmakefile: Change VERSION var to 0.4.1pre. 2004-06-20 Serg Stoyan * Release 0.4.0. * Library/PCProjectWindow.m: (activeProjectDidChange:): Take into account subprojects of subprojects. (showProjectLaunch:): Remove attention panel if project is not executable. * Library/PCProjectBrowser.m: (activeProjectDidChange:): ditto. Take into account subprojects of subprojects. * Library/PCProjectLauncher.m: (debug:): Check if project is executable and order attention panel if not. * Modules/ApplicationProject/Resources/Inspector.gorm: Fix connection between "Add" button and addDocIcon: method. * Modules/ApplicationProject/PCAppProject.m: (appendApplication:): Removed. (appndHead:): Move appendApplication's code here. Write into GNUmakefile _STANDARD_INSTALL = no if install dir attribute was not set. * Modules/BundleProject/PCBundleProject.m: (appendHead:): Write into GNUmakefile _STANDARD_INSTALL = no if install dir attribute was not set. * Modules/RenaissanceProject/PCRenaissanceProject.m: (appendApplication:): ditto. * Modules/ToolProject/PCToolProject.m: (appendHead:): ditto 2004-06-19 Serg Stoyan * Library/PCProjectManager.m: (convertLegacyProject:atPath:): Get files list from .pcproj file not from directories. * Library/PCProject.m: (renameFile:toFile): Handle the case when filename already exist. Do not use removeFiles and addFiles methods, change projectDict directly. (setProjectDictObject:forKey:): Post notification with dictionary as notification object. Dictionary consists of "Project" and "Attribute" records. This is narrows actions to be taken on project dictionary changes. (assignProjectDict:): Set LANGUAGES to [NSUserDefaults userLanguages]. (setProjectDictObject:forKey:notify:): Renamed from setProjectDictObject:forKey:. Changed in various places accordinly. (removeFiles:forKey:notify:): Renamed from removeFiles:forKey:. (addFiles:forKey:notify:): Renamed from addFiles:forKey:. * Library/PCProjectBrowser.m: (projectDictDidChange): Changed wrt last PCProject changes. Reload column only if "Attribute" is one of the tracked by Projectbrowser. (reloadLastColumn): Renamed to reloadLastColumnAndNotify: and changed accordinly to its name. (reloadLastColumnAndSelectFile:): Added and implemented. * Library/PCProjectWindow.m: (projectDictDidChange:): Changed wrt last PCProject changes. * Library/PCLoadedFiles.m: (initWithProject:): Change NSLog with PCLogStatus. * Library/PCProjectInspector.m: (activeProjectDidChange:): Set window title only if project change to other project not subproject. * Library/PCFileManager.m: (filesForAdd): Fix setting panel attributes. * Modules/AggregateProject/PCAggregateProject.m: (appendHead:) Added generating of VERSION var. * Modules/ApplicationProject/PCAppProject.m: (appendApplication:): ditto. * Modules/BundleProject/PCBundleProject.m: (appendHead:): ditto. * Modules/LibraryProject/PCLibProject.m: (appendHead:): ditto. Added support for public headers. (renameFile:toFile:): Implemented. Handles the case with public headers. * Modules/RenaissanceProject/PCRenaissanceProject.m: (appendApplication:): ditto. * Modules/ToolProject/PCToolProject.m: (appendHead:): ditto * Modules/: Cleanup PC.project templates. Added PUBLIC_HEADERS and LANGUAGES. 2004-06-15 Serg Stoyan * Library/PCProjectManager.m: (convertLegacyProject:atPath:): added and implemented for conversion of old projects. (closeProject:): check if panels visible before performing close. * Libarary/PCProject.m: (fileTypesForCategoryKey:): moved implementation here from PC*Project classes. (dirForCategory:): ditto. * Library/PCProjectEditor.m: (editorDidClose:): remove calling to setActiveEditor:. (editorDidResignActive:): check if editor belongs to current project. (editorDidBecomeActive:): fix checking if editor belongs to current project. * Library/PCProjectBrowser.m: (projectDictDidChange:): Fix detection of project changed. * Modules/ApplicationProject/*.[hm]: * Modules/BundleProject/*.[hm]: * Modules/LibraryProject/*.[hm]: * Modules/RenaissanceProject/*.[hm]: * Modules/ToolProject/*.[hm]: Default location of non-localized resources changed to Resources subdir in project directory layout. No more Documentation and Images subdirectories. Removed PCProject overridings that are identical. Cleaned up. 2004-06-14 Serg Stoyan * Library/PCFileManager.m: (createFile): Removed extra ";" in newFiles declaration. * Modules/AggregateProject: Aggregate project type added. * Images/MultiFiles.tiff: added. 2004-06-13 Serg Stoyan * Library/PCProjectBrowser.m: (reloadLastColumn): Reload subprojects list only if subprojects added/removed. 2004-06-12 Serg Stoyan * Library/PCProjectManager.m: * Library/PCProject.m: * PCPrefController.m: Fix bugs related to opening legacy projects. * Fixes made to compile with gcc 3.4 * Resources/ProjectCenter.gorm: Remove all unimplemented items. 2004-06-11 Serg Stoyan * Library/PCProjectManager.m: (loadProjectAt:): Fix loading "Gorm" poject. 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. ProjectCenter-0.6.1/PCMenuController.m000644 001751 000024 00000036003 11145563460 020326 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001 Free Software Foundation 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. */ #import #import #import #import "PCAppController.h" #import "PCMenuController.h" #import "PCInfoController.h" #import "PCPrefController.h" #import "TextFinder.h" @implementation PCMenuController - (id)init { if ((self = [super init])) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editorDidBecomeActive:) name:PCEditorDidBecomeActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editorDidResignActive:) name:PCEditorDidResignActiveNotification object:nil]; editorIsActive = NO; } return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog(@"PCMenuController: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; [super dealloc]; } - (void)setAppController:(id)anObject { appController = anObject; } - (void)setProjectManager:(id)anObject { projectManager = anObject; } //============================================================================ //==== Menu stuff //============================================================================ // Info - (void)showPrefWindow:(id)sender { [[appController prefController] showPanel:sender]; } - (void)showInfoPanel:(id)sender { [[appController infoController] showInfoWindow:sender]; } - (void)showEditorPanel:(id)sender { [[[projectManager rootActiveProject] projectWindow] showProjectEditor:self]; } - (void)showLogPanel:(id)sender { [[appController logController] showPanel]; } // Project - (void)projectOpen:(id)sender { [projectManager openProject]; } - (void)projectNew:(id)sender { [projectManager newProject]; } - (void)projectSave:(id)sender { [projectManager saveProject]; } - (void)projectAddFiles:(id)sender { [projectManager addProjectFiles]; } - (void)projectSaveFiles:(id)sender { [projectManager saveProjectFiles]; } - (void)projectRemoveFiles:(id)sender { [projectManager removeProjectFiles]; } - (void)projectClose:(id)sender { [projectManager closeProject]; } // Subproject - (void)subprojectNew:(id)sender { [projectManager openNewSubprojectPanel]; } - (void)subprojectAdd:(id)sender { [projectManager addSubproject]; } // File - (void)fileOpen:(id)sender { [projectManager openFile]; } - (void)fileNew:(id)sender { [projectManager newFile]; } - (void)fileSave:(id)sender { [projectManager saveFile]; } - (void)fileSaveAs:(id)sender { [projectManager saveFileAs]; } - (void)fileSaveTo:(id)sender { [projectManager saveFileTo]; } - (void)fileRevertToSaved:(id)sender { [projectManager revertFileToSaved]; } - (void)fileClose:(id)sender { [projectManager closeFile]; } - (void)fileOpenQuickly:(id)sender { NSRunAlertPanel(@"PCMenuController: Sorry!", @"This feature is not finished yet", @"OK",nil,nil); } - (void)fileRename:(id)sender { // Show Inspector panel with "File Attributes" section [projectManager renameFile]; /* NSRunAlertPanel(@"PCMenuController: Sorry!", @"This feature is not finished yet", @"OK",nil,nil);*/ } - (void)fileNewUntitled:(id)sender { NSRunAlertPanel(@"PCMenuController: Sorry!", @"This feature is not finished yet", @"OK",nil,nil); } // Edit - (void)findShowPanel:(id)sender { [[TextFinder sharedInstance] orderFrontFindPanel:self]; } - (void)findNext:(id)sender { [[TextFinder sharedInstance] findNext:self]; } - (void)findPrevious:(id)sender { [[TextFinder sharedInstance] findPrevious:self]; } - (void)findJumpToSelection:(id)sender { [[TextFinder sharedInstance] jumpToSelection:self]; } - (void)findEnterSelection:(id)sender { [[TextFinder sharedInstance] enterSelection:self]; } - (void)goToLine:sender { // TODO: What is the best: inline editor popup or separate panel? // [[[[projectManager rootActiveProject] projectEditor] activeEditor] // goToLine:sender]; } // 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 showProjectInspector:self]; } // Build Panel - (void)showBuildPanel:(id)sender { [[[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 { [self showLaunchPanel:self]; [[[projectManager rootActiveProject] projectLauncher] performRun]; } - (void)debugTarget:(id)sender { [self showLaunchPanel:self]; [[[projectManager rootActiveProject] projectLauncher] performDebug]; } //============================================================================ //==== Delegate stuff //============================================================================ - (BOOL)validateMenuItem:(id )menuItem { NSString *menuTitle = [[menuItem menu] title]; PCProject *aProject = [projectManager activeProject]; PCProjectEditor *projectEditor = [aProject projectEditor]; PCProjectBrowser *projectBrowser = [aProject projectBrowser]; if ([[projectManager loadedProjects] count] == 0) { // Project related menu items if ([menuTitle isEqualToString: @"Project"]) { if ([[menuItem title] isEqualToString:@"Save"]) 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; } // File related menu items if ([menuTitle isEqualToString: @"File"] && !editorIsActive) { if ([[menuItem title] isEqualToString:@"New in Project"]) return NO; 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:@"Open Quickly..."]) return NO; if ([[menuItem title] isEqualToString:@"Rename"]) return NO; if ([[menuItem title] isEqualToString:@"New Untitled"]) return NO; } // Tools menu items if ([menuTitle isEqualToString: @"Tools"]) { 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"]) { if ([[menuItem title] isEqualToString:@"Show Panel..."]) return NO; if ([[menuItem title] isEqualToString:@"Build"]) return NO; if ([[menuItem title] isEqualToString:@"Stop 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; } if ([menuTitle isEqualToString: @"Project Find"]) { if ([[menuItem title] isEqualToString:@"Show Panel..."]) return NO; if ([[menuItem title] isEqualToString:@"Find Preferences"]) return NO; if ([[menuItem title] isEqualToString:@"Find Definitions"]) return NO; if ([[menuItem title] isEqualToString:@"Find Text"]) return NO; if ([[menuItem title] isEqualToString:@"Find Regular Expr"]) return NO; if ([[menuItem title] isEqualToString:@"Next match"]) return NO; if ([[menuItem title] isEqualToString:@"Previous match"]) return NO; } if ([menuTitle isEqualToString: @"Loaded Files"]) { if ([[menuItem title] isEqualToString:@"Show Panel..."]) return NO; 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; } if ([menuTitle isEqualToString: @"Launcher"]) { if ([[menuItem title] isEqualToString:@"Show Panel..."]) return NO; if ([[menuItem title] isEqualToString:@"Run"]) return NO; if ([[menuItem title] isEqualToString:@"Debug"]) return NO; } if ([menuTitle isEqualToString: @"Indexer"]) { if ([[menuItem title] isEqualToString:@"Show Panel..."]) return NO; if ([[menuItem title] isEqualToString:@"Purge Indices"]) return NO; if ([[menuItem title] isEqualToString:@"Index Subproject"]) return NO; if ([[menuItem title] isEqualToString:@"Index File"]) return NO; } return YES; } // Project related menu items if ([menuTitle isEqualToString: @"Project"] && [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 Subproject..."]) return NO; if ([[menuItem title] isEqualToString:@"Add Files..."]) return NO; } if ([menuTitle isEqualToString: @"Project"] && [[projectBrowser nameOfSelectedCategory] isEqualToString:@"Subprojects"]) { if ([[menuItem title] isEqualToString:@"Add Files..."]) 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 (!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 ([projectBrowser nameOfSelectedFile] == nil) { if ([[menuItem title] isEqualToString:@"Rename"]) return NO; } // Find menu items /* if (editorIsActive == NO && [menuTitle isEqualToString: @"Find"]) { if (![[[PCTextFinder sharedFinder] findPanel] isVisible]) { if ([[menuItem title] isEqualToString:@"Find Next"]) return NO; if ([[menuItem title] isEqualToString:@"Find Previous"]) return NO; } if ([[menuItem title] isEqualToString:@"Enter Selection"]) return NO; if ([[menuItem title] isEqualToString:@"Jump to Selection"]) return NO; if ([[menuItem title] isEqualToString:@"Line Number..."]) return NO; 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)editorDidResignActive:(NSNotification *)aNotif { editorIsActive = NO; } - (void)editorDidBecomeActive:(NSNotification *)aNotif { editorIsActive = YES; } @end ProjectCenter-0.6.1/Images/000755 001751 000024 00000000000 11766110766 016166 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/GNUmakefile000644 001751 000024 00000006240 11765637750 017043 0ustar00multixstaff000000 000000 # # GNUmakefile # ifeq ($(GNUSTEP_MAKEFILES),) GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null) endif ifeq ($(GNUSTEP_MAKEFILES),) $(error You need to set GNUSTEP_MAKEFILES before compiling!) endif PACKAGE_NAME = ProjectCenter export PACKAGE_NAME include $(GNUSTEP_MAKEFILES)/common.make # # Main application # VERSION = 0.6.1 APP_NAME = ProjectCenter ProjectCenter_APPLICATION_ICON = Images/ProjectCenter.tiff # # SVN information for releases # CVS_MODULE_NAME = projectcenter SVN_MODULE_NAME = projectcenter SVN_BASE_URL = svn+ssh://svn.gna.org/svn/gnustep/apps # # Subprojects # SUBPROJECTS = \ Framework \ Modules # # Resource files # ProjectCenter_RESOURCE_FILES = \ Resources/Info-gnustep.plist \ Images/ProjectCenter.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/ProjectCenter_add.tiff \ Images/ProjectCenter_cvs.tiff \ Images/ProjectCenter_dist.tiff \ Images/ProjectCenter_documentation.tiff \ Images/ProjectCenter_profile.tiff \ Images/ProjectCenter_rpm.tiff \ Images/ProjectCenter_uml.tiff \ 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/Projects/Aggregate/Aggregate.project \ Modules/Projects/Application/Application.project \ Modules/Projects/Bundle/Bundle.project \ Modules/Projects/Framework/Framework.project \ Modules/Projects/Library/Library.project \ Modules/Projects/ResourceSet/ResourceSet.project \ Modules/Projects/Tool/Tool.project \ Modules/Editors/ProjectCenter/ProjectCenter.editor \ Modules/Parsers/ProjectCenter/ProjectCenter.parser \ Modules/Debuggers/ProjectCenter/ProjectCenter.debugger \ Modules/Preferences/Build/Build.preferences \ Modules/Preferences/Saving/Saving.preferences \ Modules/Preferences/Misc/Misc.preferences \ Modules/Preferences/EditorFSC/EditorFSC.preferences # # Localization # ProjectCenter_LOCALIZED_RESOURCE_FILES = \ ProjectCenter.gorm \ Info.gorm \ FindPanel.gorm \ Preferences.gorm ProjectCenter_LANGUAGES = \ English # # Header files # ProjectCenter_HEADERS = \ Headers/PCAppController.h \ Headers/PCInfoController.h \ Headers/PCMenuController.h \ Headers/PCPrefController.h # # Class files # ProjectCenter_OBJC_FILES = \ PCAppController.m \ PCInfoController.m \ PCMenuController.m \ PCPrefController.m \ TextFinder.m \ ProjectCenter_main.m -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble ProjectCenter-0.6.1/TextFinder.h000644 001751 000024 00000003317 10675564111 017205 0ustar00multixstaff000000 000000 #import #define Forward YES #define Backward NO @interface TextFinder : NSObject { NSString *findString; id findTextField; id replaceTextField; id ignoreCaseButton; id findNextButton; id replaceAllScopeMatrix; id statusField; BOOL findStringChangedSinceLastPasteboardUpdate; BOOL lastFindWasSuccessful; /* A bit of a kludge */ } /* Common way to get a text finder. One instance of TextFinder per * app is good enough. */ + (id)sharedInstance; /* Main method for external users; does a find in the first responder. * Selects found range or beeps. */ - (BOOL)find:(BOOL)direction; /* Loads UI lazily */ - (NSPanel *)findPanel; /* Gets the first responder and returns it if it's an NSTextView */ - (NSTextView *)textObjectToSearchIn; /* Get/set the current find string. Will update UI if UI is loaded */ - (NSString *)findString; - (void)setFindString:(NSString *)string; /* Misc internal methods */ - (void)appDidActivate:(NSNotification *)notification; - (void)addWillDeactivate:(NSNotification *)notification; - (void)loadFindStringFromPasteboard; - (void)loadFindStringToPasteboard; /* Methods sent from the find panel UI */ - (void)findNext:(id)sender; - (void)findPrevious:(id)sender; - (void)enterSelection:(id)sender; - (void)jumpToSelection:(id)sender; - (void)findNextAndOrderFindPanelOut:(id)sender; - (void)replace:(id)sender; - (void)replaceAndFind:(id)sender; - (void)replaceAll:(id)sender; - (void)orderFrontFindPanel:(id)sender; @end @interface NSString (NSStringTextFinding) - (NSRange)findString:(NSString *)string selectedRange:(NSRange)selectedRange options:(unsigned)mask wrap:(BOOL)wrapFlag; @end ProjectCenter-0.6.1/Modules/000755 001751 000024 00000000000 11766110767 016372 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/.dist-ignore000644 001751 000024 00000000020 10062333346 017163 0ustar00multixstaff000000 000000 .gwdir *.swp *~ ProjectCenter-0.6.1/PCAppController.m000644 001751 000024 00000013754 11765637750 020166 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2012 Free Software Foundation 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. */ #import #import #import "PCAppController.h" #import "PCMenuController.h" #import "PCInfoController.h" #import "PCPrefController.h" #import "Modules/Preferences/Build/PCBuildPrefs.h" #import "Modules/Preferences/Saving/PCSavingPrefs.h" #import "Modules/Preferences/Misc/PCMiscPrefs.h" #import @implementation PCAppController //============================================================================ //==== Intialization & deallocation //============================================================================ + (void)initialize { } - (id)init { if ((self = [super init])) { infoController = [[PCInfoController alloc] init]; // Termporary workaround to initialize defaults values prefController = [PCPrefController sharedPCPreferences]; logController = [PCLogController sharedLogController]; // It's our entry point to Framework projectManager = [[PCProjectManager alloc] init]; [projectManager setDelegate:self]; [projectManager setPrefController:prefController]; } return self; } - (void)dealloc { [super dealloc]; } - (void)awakeFromNib { [menuController setAppController:self]; [menuController setProjectManager:projectManager]; } //============================================================================ //==== Accessory methods //============================================================================ - (PCProjectManager *)projectManager { return projectManager; } - (PCMenuController *)menuController { return menuController; } - (PCInfoController *)infoController { return infoController; } - (PCPrefController *)prefController { return prefController; } - (PCLogController *)logController { return logController; } //============================================================================ //==== Misc... //============================================================================ - (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName { [NSApp activateIgnoringOtherApps:YES]; if ([[fileName pathExtension] isEqualToString:@"pcproj"] == YES || [[fileName pathExtension] isEqualToString:@"project"] == YES) { [projectManager openProjectAt: fileName makeActive: YES]; [[[projectManager activeProject] projectWindow] makeKeyAndOrderFront:self]; } else { [projectManager openFileAtPath:fileName]; } return YES; } - (void)applicationWillFinishLaunching:(NSNotification *)notification { } - (void)applicationDidFinishLaunching:(NSNotification *)notification { // NSString *connectionName = [NSString stringWithFormat:@"ProjectCenter"]; if ([prefController boolForKey:DisplayLog]) { [logController showPanel]; } [logController logMessage:NSLocalizedString(@"Loading additional subsystems...", @"When loaded additional bundles") withTag:INFO sender:self]; [[NSNotificationCenter defaultCenter] postNotificationName:PCAppDidInitNotification object:nil]; } - (NSApplicationTerminateReply)applicationShouldTerminate:(id)sender { NSApplicationTerminateReply quit = NSTerminateNow; if ([prefController boolForKey:PromptOnQuit]) { if (NSRunAlertPanel(@"Quit", @"Do you really want to quit ProjectCenter?", @"Cancel", @"Quit", nil)) { return NSTerminateLater; } } // Save projects unconditionally if preferences tells that if ([prefController boolForKey:SaveOnQuit]) { if(![projectManager saveAllProjects]) quit = NSTerminateLater; } // Close ProjectManager (projects, editors, etc.) if ((quit == NO) || ([projectManager close] == NO)) { return NSTerminateLater; } [[NSNotificationCenter defaultCenter] postNotificationName:PCAppWillTerminateNotification object:nil]; return NSTerminateNow; } - (void)applicationWillTerminate:(NSNotification *)notification { NSFileManager *fm; PCFileManager *pcfm; NSString *rootBuildDir; NSArray *rootBuildDirList; NSEnumerator *enumerator; NSString *buildItem; #ifdef DEBUG NSLog(@"--- Application WILL terminate"); #endif if ([prefController boolForKey:DeleteCacheWhenQuitting]) { fm = [NSFileManager defaultManager]; pcfm = [PCFileManager defaultManager]; rootBuildDir = [prefController stringForKey:RootBuildDirectory]; rootBuildDirList = [fm directoryContentsAtPath:rootBuildDir]; enumerator = [rootBuildDirList objectEnumerator]; while ((buildItem = [enumerator nextObject])) { if([[buildItem pathExtension] isEqualToString:@"build"]) { NSLog(@"Remove build directory %@/%@", rootBuildDir, buildItem); [pcfm removeFile:buildItem fromDirectory:rootBuildDir removeDirsIfEmpty:YES]; } } } //--- Cleanup if (doConnection) { [doConnection invalidate]; RELEASE(doConnection); } RELEASE(infoController); RELEASE(prefController); RELEASE(logController); RELEASE(menuController); RELEASE(projectManager); #ifdef DEBUG NSLog (@"--- Application WILL terminate.END"); #endif } @end ProjectCenter-0.6.1/PCFindController.m000644 001751 000024 00000001732 11126423157 020300 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org Copyright (C) 2001 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import "PCFindController.h" @implementation PCFindController @end ProjectCenter-0.6.1/COPYING000644 001751 000024 00000104514 11003471151 015777 0ustar00multixstaff000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ProjectCenter-0.6.1/ProjectCenter_main.m000644 001751 000024 00000001750 11126423157 020704 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001 Free Software Foundation 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. */ #import int main(int argc, const char **argv) { return NSApplicationMain (argc, argv); } ProjectCenter-0.6.1/TextFinder.m000644 001751 000024 00000025234 11402027472 017205 0ustar00multixstaff000000 000000 /* TextFinder.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. Find and replace functionality with a minimal panel... In addition to including this class and FindPanel.nib in your app, you probably need to hook up the following action methods in your document object (or whatever object is first responder) to call the appropriate methods in [TextFinder sharedInstance]: orderFrontFindPanel: findNext: findPrevious: enterSelection: (calls setFindString:) 2/21/95 aozer Created for Edit II. 2/24/95 aozer Find pasteboard support 8/16/95 aozer Replace functionality 10/4/95 aozer Status field update 11/12/96 aozer Correctly send shouldChange... to the textview while doing a replace */ #import #import "TextFinder.h" @implementation TextFinder - (id)init { if (!(self = [super init])) return nil; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (appDidActivate:) name:NSApplicationDidBecomeActiveNotification object:[NSApplication sharedApplication]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (addWillDeactivate:) name:NSApplicationWillResignActiveNotification object:[NSApplication sharedApplication]]; [self setFindString:@""]; [self loadFindStringFromPasteboard]; return self; } - (void)appDidActivate:(NSNotification *)notification { [self loadFindStringFromPasteboard]; } - (void)addWillDeactivate:(NSNotification *)notification { [self loadFindStringToPasteboard]; } - (void)loadFindStringFromPasteboard { NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:NSFindPboard]; if ([[pasteboard types] containsObject:NSStringPboardType]) { NSString *string = [pasteboard stringForType:NSStringPboardType]; if (string && [string length]) { [self setFindString:string]; findStringChangedSinceLastPasteboardUpdate = NO; } } } - (void)loadFindStringToPasteboard { NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName: NSFindPboard]; if (findStringChangedSinceLastPasteboardUpdate) { [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; [pasteboard setString:[self findString] forType:NSStringPboardType]; findStringChangedSinceLastPasteboardUpdate = NO; } } static id sharedFindObject = nil; + (id)sharedInstance { if (!sharedFindObject) { sharedFindObject = [[self alloc] init]; } return sharedFindObject; } - (void)awakeFromNib { [ignoreCaseButton setRefusesFirstResponder:YES]; [findNextButton setRefusesFirstResponder:YES]; [replaceAllScopeMatrix setRefusesFirstResponder:YES]; [statusField setRefusesFirstResponder:YES]; } - (void)loadUI { if (!findTextField) { if (![NSBundle loadNibNamed:@"FindPanel" owner:self]) { NSLog(@"Failed to load FindPanel.gorm"); NSBeep(); } if (self == sharedFindObject) { [[findTextField window] setFrameAutosaveName:@"Find"]; } } [findTextField setStringValue:[self findString]]; } - (void)dealloc { if (self != sharedFindObject) { [findString release]; [super dealloc]; } } - (NSString *)findString { return findString; } - (void)setFindString:(NSString *)string { if ([string isEqualToString:findString]) { return; } [findString autorelease]; findString = [string copy]; if (findTextField) { [findTextField setStringValue:string]; [findTextField selectText:nil]; } findStringChangedSinceLastPasteboardUpdate = YES; } - (NSTextView *)textObjectToSearchIn { id obj = [[NSApp mainWindow] firstResponder]; return (obj && [obj isKindOfClass:[NSTextView class]]) ? obj : nil; } - (NSPanel *)findPanel { if (!findTextField) { [self loadUI]; } return (NSPanel *)[findTextField window]; } /* The primitive for finding; this ends up setting the status field (and beeping if necessary)... */ - (BOOL)find:(BOOL)direction { NSTextView *text = [self textObjectToSearchIn]; lastFindWasSuccessful = NO; if (text) { NSString *textContents = [text string]; unsigned int textLength; if (textContents && (textLength = [textContents length])) { NSRange range; unsigned int options = 0; if (direction == Backward) options |= NSBackwardsSearch; if ([ignoreCaseButton state]) options |= NSCaseInsensitiveSearch; range = [textContents findString:[self findString] selectedRange:[text selectedRange] options:options wrap:YES]; if (range.length) { [text setSelectedRange:range]; [text scrollRangeToVisible:range]; lastFindWasSuccessful = YES; } } } if (!lastFindWasSuccessful) { NSBeep (); [statusField setStringValue:@"Not found"]; } else { [statusField setStringValue:@""]; } return lastFindWasSuccessful; } - (void)orderFrontFindPanel:(id)sender { NSPanel *panel = [self findPanel]; [findTextField selectText:nil]; [panel makeKeyAndOrderFront:nil]; } /**** Action methods for gadgets in the find panel; these should all end up setting or clearing the status field ****/ - (void)findNextAndOrderFindPanelOut:(id)sender { [findNextButton performClick:nil]; if (lastFindWasSuccessful) { [[self findPanel] orderOut: sender]; } else { [findTextField selectText:nil]; } } - (void)findNext:(id)sender { if (findTextField) { // findTextField should be set [self setFindString:[findTextField stringValue]]; } [self find:Forward]; } - (void)findPrevious:(id)sender { if (findTextField) { // findTextField should be set [self setFindString:[findTextField stringValue]]; } [self find:Backward]; } - (void)enterSelection:(id)sender { NSTextView *text = [self textObjectToSearchIn]; NSString *string = [text string]; if (text && string) { [self setFindString:[string substringWithRange:[text selectedRange]]]; } } - (void)jumpToSelection:(id)sender { NSTextView *text = [self textObjectToSearchIn]; if (text) { [text scrollRangeToVisible:[text selectedRange]]; } } - (void)replace:(id)sender { NSTextView *text = [self textObjectToSearchIn]; if (!text) { NSBeep (); } else { NSRange r = [text rangeForUserTextChange]; NSString *s = [replaceTextField stringValue]; if ([text shouldChangeTextInRange:r replacementString:s]) { [[text textStorage] replaceCharactersInRange:r withString:s]; [text didChangeText]; } } [statusField setStringValue:@""]; } - (void)replaceAndFind:(id)sender { [self replace:sender]; [self findNext:sender]; } #define ReplaceAllScopeEntireFile 42 #define ReplaceAllScopeSelection 43 - (void)replaceAll:(id)sender { NSTextView *text = [self textObjectToSearchIn]; if (!text) { NSBeep(); } else { NSTextStorage *textStorage = [text textStorage]; NSString *textContents = [text string]; NSString *replaceString = [replaceTextField stringValue]; BOOL entireFile = replaceAllScopeMatrix ? ([replaceAllScopeMatrix selectedTag] == ReplaceAllScopeEntireFile) : YES; NSRange replaceRange = entireFile ? NSMakeRange (0, [textStorage length]) : [text selectedRange]; unsigned int options = NSBackwardsSearch | ([ignoreCaseButton state] ? NSCaseInsensitiveSearch : 0); unsigned int replaced = 0; if (findTextField) { [self setFindString:[findTextField stringValue]]; } while (1) { NSRange foundRange = [textContents rangeOfString:[self findString] options:options range:replaceRange]; if (foundRange.length == 0) break; if ([text shouldChangeTextInRange:foundRange replacementString:replaceString]) { if (replaced == 0) [textStorage beginEditing]; replaced++; [textStorage replaceCharactersInRange:foundRange withString:replaceString]; replaceRange.length = foundRange.location - replaceRange.location; } } if (replaced > 0) { /* There was at least one replacement */ /* We need this to bracket the beginEditing */ [textStorage endEditing]; /* We need one of these to terminate the shouldChange... * methods we sent */ [text didChangeText]; [statusField setStringValue:[NSString stringWithFormat:@"%d replaced", replaced]]; } else { /* No replacements were done... */ NSBeep(); [statusField setStringValue:@"Not found"]; } } } - (BOOL)validateMenuItem:(NSMenuItem *)anItem { if ([anItem action] == @selector(orderFrontFindPanel:)) { return ([self textObjectToSearchIn] != NULL); } if ([anItem action] == @selector(findNext:)) { return ([self textObjectToSearchIn] != NULL); } if ([anItem action] == @selector(findPrevious:)) { return ([self textObjectToSearchIn] != NULL); } if ([anItem action] == @selector(enterSelection:)) { return ([self textObjectToSearchIn] != NULL); } if ([anItem action] == @selector(jumpToSelection:)) { return ([self textObjectToSearchIn] != NULL); } // if it isn't one of our menu items, we'll let the // superclass take care of it return [super validateMenuItem:anItem]; } @end @implementation NSString (NSStringTextFinding) - (NSRange)findString:(NSString *)string selectedRange:(NSRange)selectedRange options:(unsigned)options wrap:(BOOL)wrap { BOOL forwards = (options & NSBackwardsSearch) == 0; unsigned int length = [self length]; NSRange searchRange, range; if (forwards) { searchRange.location = NSMaxRange(selectedRange); searchRange.length = length - searchRange.location; range = [self rangeOfString:string options:options range:searchRange]; if ((range.length == 0) && wrap) { // If not found look at the first part of the string searchRange.location = 0; searchRange.length = selectedRange.location; range = [self rangeOfString:string options:options range:searchRange]; } } else { searchRange.location = 0; searchRange.length = selectedRange.location; range = [self rangeOfString:string options:options range:searchRange]; if ((range.length == 0) && wrap) { searchRange.location = NSMaxRange(selectedRange); searchRange.length = length - searchRange.location; range = [self rangeOfString:string options:options range:searchRange]; } } return range; } @end ProjectCenter-0.6.1/Documentation/000755 001751 000024 00000000000 11766110767 017573 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Resources/000755 001751 000024 00000000000 11766110767 016734 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Headers/000755 001751 000024 00000000000 11766110767 016335 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/English.lproj/000755 001751 000024 00000000000 11766110770 017472 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/GNUmakefile.postamble000644 001751 000024 00000002105 10647515675 021023 0ustar00multixstaff000000 000000 # # GNUmakefile.postamble # # Copyright (C) 2001-2005 Free Software Foundation, Inc. # # 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:: before-install:: mkdir -p Framework/ProjectCenter.framework/Headers/Protocols cp -r Headers/Protocols/*.h Framework/ProjectCenter.framework/Headers/Protocols after-clean:: after-uninstall:: ProjectCenter-0.6.1/PCInfoController.m000644 001751 000024 00000004027 11145563460 020316 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001 Free Software Foundation 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. */ #import #import "PCInfoController.h" @implementation PCInfoController - (id)init { if ((self = [super init])) { NSString *file; file = [[NSBundle mainBundle] pathForResource:@"Info-gnustep" ofType:@"plist"]; infoDict = [NSDictionary dictionaryWithContentsOfFile:file]; RETAIN(infoDict); } return self; } - (void)dealloc { RELEASE(infoDict); if (infoWindow) { RELEASE(infoWindow); } [super dealloc]; } - (void)showInfoWindow:(id)sender { if ([NSBundle loadNibNamed:@"Info" owner:self] == NO) { // PCLogError(self, @"error loading Menu NIB file!"); return; } [infoWindow makeKeyAndOrderFront:self]; [versionField setStringValue:[NSString stringWithFormat:@"Version %@", [infoDict objectForKey:@"ApplicationRelease"]]]; /*#if defined(GNUSTEP) if (!infoWindow) { infoWindow = [[GSInfoPanel alloc] initWithDictionary:infoDict]; } [infoWindow setTitle:@"Info"]; [infoWindow center]; [infoWindow makeKeyAndOrderFront:self]; #else NSRunAlertPanel(@"Info", @"OPENSTEP has no support for GSInfoPanel", @"OK",nil,nil,nil); #endif*/ } @end ProjectCenter-0.6.1/GNUmakefile.preamble000644 001751 000024 00000003444 11427353164 020621 0ustar00multixstaff000000 000000 # GNUmakefile.preamble # # Copyright (C) 2001-2005 Free Software Foundation, Inc. # # 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. # # Flags dealing with compiling and linking # # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -DDEVELOPMENT # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I./ -I./Headers # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += -L./Framework/ProjectCenter.framework/$(GNUSTEP_TARGET_LDIR) # Additional LDFLAGS to pass to the linker ADDITIONAL_GUI_LIBS += -lProjectCenter # # Flags dealing with installing and uninstalling # # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += ProjectCenter-0.6.1/.cvsignore000644 001751 000024 00000000112 10251402752 016736 0ustar00multixstaff000000 000000 .gwdir *.swp *~ *.app *.bundle *.framework *obj derived_src ProjectCenter ProjectCenter-0.6.1/PCPrefController.m000644 001751 000024 00000014565 11160307045 020317 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2008 Free Software Foundation 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. */ #import #import #import #import "PCPrefController.h" #import @implementation PCPrefController // =========================================================================== // ==== Class methods // =========================================================================== static PCPrefController *_prefCtrllr = nil; + (PCPrefController *)sharedPCPreferences { if (!_prefCtrllr) { _prefCtrllr = [[PCPrefController alloc] init]; } return _prefCtrllr; } // - (id)init { if (!(self = [super init])) { return nil; } // The prefs from the defaults userDefaults = [NSUserDefaults standardUserDefaults]; RETAIN(userDefaults); if ([userDefaults objectForKey:@"Version"] == nil) { // Clean preferences [NSUserDefaults resetStandardUserDefaults]; [self setString:@"0.5" forKey:@"Version" notify:NO]; } [self loadPrefsSections]; return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog(@"PCPrefController: dealloc"); #endif RELEASE(panel); [[NSUserDefaults standardUserDefaults] synchronize]; [super dealloc]; } - (void)awakeFromNib { } // Accessory - (NSString *)stringForKey:(NSString *)key { return [self stringForKey:key defaultValue:nil]; } - (NSString *)stringForKey:(NSString *)key defaultValue:(NSString *)defaultValue { NSString *stringValue = [userDefaults objectForKey:key]; if (stringValue) { return stringValue; } else if (defaultValue) { [self setString:defaultValue forKey:key notify:NO]; return defaultValue; } return defaultValue; // returns nil } - (BOOL)boolForKey:(NSString *)key { return [self boolForKey:key defaultValue:-1]; } - (BOOL)boolForKey:(NSString *)key defaultValue:(BOOL)defaultValue { NSString *stringValue = [userDefaults objectForKey:key]; if (stringValue) { return [stringValue boolValue]; } else if (defaultValue > 0) { [self setBool:defaultValue forKey:key notify:NO]; return defaultValue; } return defaultValue; // returns -1 } - (float)floatForKey:(NSString *)key { return [self floatForKey:key defaultValue:0.0]; } - (float)floatForKey:(NSString *)key defaultValue:(float)defaultValue { NSString *stringValue = [userDefaults objectForKey:key]; if (stringValue) { return [stringValue floatValue]; } else { [self setFloat:defaultValue forKey:key notify:NO]; return defaultValue; } } - (void)setString:(NSString *)stringValue forKey:(NSString *)aKey notify:(BOOL)notify { [userDefaults setObject:stringValue forKey:aKey]; [userDefaults synchronize]; if (notify) { [[NSNotificationCenter defaultCenter] postNotificationName:PCPreferencesDidChangeNotification object:self]; } } - (void)setBool:(BOOL)boolValue forKey:(NSString *)aKey notify:(BOOL)notify { NSString *stringValue = boolValue ? @"YES" : @"NO"; [userDefaults setObject:stringValue forKey:aKey]; [userDefaults synchronize]; if (notify) { [[NSNotificationCenter defaultCenter] postNotificationName:PCPreferencesDidChangeNotification object:self]; } } - (void)setFloat:(float)floatValue forKey:(NSString *)aKey notify:(BOOL)notify { NSString *stringValue = [NSString stringWithFormat:@"%0.1f", floatValue]; [userDefaults setObject:stringValue forKey:aKey]; [userDefaults synchronize]; if (notify) { [[NSNotificationCenter defaultCenter] postNotificationName:PCPreferencesDidChangeNotification object:self]; } } - (void)loadPrefsSections { PCBundleManager *bundleManager = [[PCBundleManager alloc] init]; NSDictionary *bundlesInfo; NSEnumerator *enumerator; NSString *bundlePath; NSString *sectionName; id section; sectionsDict = [[NSMutableDictionary alloc] init]; bundlesInfo = [bundleManager infoForBundlesType:@"preferences"]; enumerator = [[bundlesInfo allKeys] objectEnumerator]; while ((bundlePath = [enumerator nextObject])) { sectionName = [[bundlesInfo objectForKey:bundlePath] objectForKey:@"Name"]; section = [bundleManager objectForBundleWithName:sectionName type:@"preferences" protocol:@protocol(PCPrefsSection)]; [section initWithPrefController:self]; [section readPreferences]; [sectionsDict setObject:section forKey:sectionName]; } [userDefaults synchronize]; } - (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]; } [self loadPrefsSections]; // The popup and selected view [popupButton removeAllItems]; [popupButton addItemsWithTitles:[[sectionsDict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]]; [popupButton selectItemAtIndex:0]; [self popupChanged:popupButton]; [panel makeKeyAndOrderFront:self]; } // Actions - (void)popupChanged:(id)sender { id section; NSView *view; section = [sectionsDict objectForKey:[sender titleOfSelectedItem]]; view = [section view]; [sectionsView setContentView:view]; // [sectionsView display]; } - (void)changeFont:(id)sender { NSLog(@"PCPrefController: changeFont"); } @end ProjectCenter-0.6.1/English.lproj/FindPanel.gorm/000755 001751 000024 00000000000 11766110767 022303 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/English.lproj/Preferences.gorm/000755 001751 000024 00000000000 11766110770 022676 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/English.lproj/ProjectCenter.gorm/000755 001751 000024 00000000000 11766110770 023204 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/English.lproj/Info.gorm/000755 001751 000024 00000000000 11766110770 021330 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/English.lproj/Info.gorm/Info.tiff000644 001751 000024 00000241444 10675564111 023106 0ustar00multixstaff000000 000000 II*A /l*+JK޴JKց56U##e5@ "  QCDSTZ[Z[UVMNܟBC{34V#$g)2  @jkm!"./>?JKQRVWWXUVOO;J%-  @hdPFLWi"#/0;K % ?hdTNMLKIJNYs'(56EFNOSTVWUVbcvwnWXniighh.,,C  a >idWSSQPONKJGFM[s'(34CCXXyy~~q``L>>`':= hdZYYWVTSQPNMKJIHKRi12YY]]pprrPPHH̋9:\&&m5? $ <<<<<<<<8*Icf&< hd\__][ZYWVTSQPNMKIJU,,O Pb r*+88FGRSWXXYTUHH͊99c)*v<H &  P}+: hc^eeca`_][ZXWUSRPPNLKIGFHM[p&'56CDNOTUVWTTKL֘?@q//FT%-P ?,9 gcaijhgedca`^][YXVUK>9 ?ILJIGFEJWm%%22AALMSTWXUVLMښ?@u01L [+3P9E,97 |gccoomlkjhgedba_^[@4 MOMLJIGEEHRd !}--;s֧̠nV - ogci{|{zyxwvtsqqom% T][ZXWUTRQONLJIGFO ~ AP 9l H;e+l qX ϡɝ^I | * jgcj~}|{zyxwuts0 YYY000&&&X34`a_^][ZXWUTRPOML\ !t,P   l 8, l  nӥN<g) fgck  ~~||zzyxNAAAeNO`fecba_^\ZYWVTSQg !c P/R* wx;.8t=qp\_8tR>Map\8tR* w!)m֧E6Y' bfdl    ~}}|n*bbbnVVeljihfdcb`_]\ZYWq!"PP@T-j\ a a| aT-%.4(G%^fdo !"!"     {s}g"#||W44nqonmkjhgfdca`^]{!"A|P:t\ss]st5)A* :' ^gm*,]bnu47%&$%#$!" !   n91!$J|t67`wvtsqqonlljhgfdd !/ [PO&a\6 q66@2Pq_+*-~=?&'&'&'$%#$"# !O#88= ut%%eepqe*+z{zywwutrrponlkjk ! =P]\*!1Q**775}Lӫ0ޭt2&eq?B(*'('(&'&'%&\98< o  !{''y..v*+x!!}~}||zzxwvttsqpnq!" $Po\nADnn!!!1666hhi|V,۪{=yPT&''('('('(t86; n"#!" !     ~}||w*.X2@IIImmm`3+ZevLQ*+'('('(  64:k()'(%&#$""!!       /1u#E]/MfhM[z"$yx"#`Pe8#Y_\!l BI!qCl !e8# AAAzzz/*6[99QLLrqq{z{I}wbqdk*+()()$% 104]+,*+*++,*+()&'$%"" !     69Mx*[wYz\i}!#| "#DP )\HHl 2`Hvl H999|n``99t**gHHvttLְ.t_qZ_q88<<'(# ,+. P*+*++,,-,--.-.,-*+((%%"#!" 02Iz`{>D !!"4 jP #Aj\``l `dl `#,,,ivvmmi!ݲ&a`m}LTW!!!SSSB))$ "!#(&(>*+*++,,--.././/0/0/000..+,>@zrhv !,1z%)# FP0Ja\ijl idl i'Oqnn񋋋yyyQQQ;;;^^^xܱ-޲$_]l}156DEE734++-- %&()+,,--.././/0/0011212CEugsGOZbDMa3:M!UP@=.Gf\gmfl 0gmdl gmGW78cCCWVV{{{~~~>>>)))777M Saiy=EJ '''??? 6;>(x"#&&)*,-.//0/00113GIuafoQYAlHc:ay(P6{\YWl Ydl YT"#e9:|$%d%%o``HHHddd%%%JJJi͠!߰L[gzVmy<<< "S\aB58x !||} "#&'+,.//0DFubgtnym'TpCr/HY PAu\<%,,,,,8Ql -&n <%,,,,,dl <%,,,,,@AOPx&&ihu;;hPPi__yyyaԩ+B^}dtm#*/...&(*ltxZTUy&&||||||"#<>tag~sCtGyGs#4P!D\ I wWl , Idl  I35RSVVHH-.kgg))i<?KLUVLM45}#$t23}kki+J)XN]&,///)-.EIt`^tvg$P)o\eel ,edl e011212121212121212121234@AQRTUGH@Ay``ulQ"߮<#E+.BBCCCCgpmq]d{n_Ucu$*AP5\5R>l 55Rdl 5Rh01121212121212121212121212239:CDPQ__opspp())1-!vէ~zYF|z{lll[iq|t`jwh]oQ`Y" Fu\\#bj03ozDWwb$#bj0#bj0DU/012121212121212121212121212121256hiwwfgWWpBCG11.'"eR˞$[L|qh|pago:B"$I\( 2./12121212121212121212121212121278ɋaaDEHITUQRc>;nS"s!xrsyj]l};A"# !6 a\  )*12121212121212121212121212121278͍bcnoqqab`K„3]x~qb\w\i;=#$"#!;\#$12121212121212121212121212121267̀»tuEFSLn]Î|zmZ\kJSAC&'"#"#x#\p0112121212121212121212121212121256bb562345?AWXuyscX{eO^59BC)*"#"#"#h\Oc/012121212121212121212121212121201ef|||rr55121201129:FH^by{n\Xol?J)+BC/0"#"#"#!"R\5 C+,12121212121212121212121212121267ttBBVV͆pp451212121212123478JLdgyfZt8;@A56#$"#"#"#!"7 ' &%&021212121212121212121212121223ZZwwIJ-.23892312121212121212120123<=MNflz|fj<=$%"#"#"#"# $Q=( - S ն+,/012121212121212121212129:pqvvZZKK,-12121212121212121212121212121256=>QTqvIK&'"#"#"#"#"#y~ZL<.8' }jţ&'/0231212121212121212IJef56>>23RROO+,12121212121212121212121212121212120134@ALM-."#"#"#"#"#"#h nVI<1$  *fP#$,./11212121212/0`aQQ,-01/0TUTT+,1212121212121212121212121212121212121212./$%"#"#"#"#"#!"TbN@3(  I9 zҰ)*0112121201OPeeGH6712STYZ*+1212121212121212121212121212121212121212-.#$"#"#"#"#"#!"3 U:'  6* {b'(/0121245GH]^ghUU^^TT*+0112121212121212121212121212121212121212,-#$"#"#"#"#"#iR5 ]I!"ߺ+,121112=>XY[[56-.1212121212121212121212121212121212121212*+#$"#"#"#"#) iP>* I6 wӲ*+/00101/0./011212121212121212121212121212121212121212)*"#"#"#"#!"MZK>0! 1"u]%%./1212121212121212121212121212121212121212121201()"#"#"#"#pgRE9-" !^E!",,121212121212121212121212121212121212121201'("#"#"# 3 x\MA4)  B- sϩ'(/0121212121212121212121212121212121201&'"#"# "TfVH<0%  /l]$%./12121212121212121212121212121201$%"#"#yv^QD8,!RA޻,-12121212121212121212121212/0#$"#!: hXL?3'  @. kЯ)*/012121212121212121212./#$!"^ sbTG:.# 'oP##-.1312121212121212-."#}i\NB5*   Z: +,011212121212,- !EudWJ>1'  8!yfœ%&/0121223)*cm_RE8," /dS#$/001&&* vhZM@4( 7/ mJyfWH:-" 3UN<.$ /DB 1BC@ CCC(R/Users/me/Source/GNUstep/ProjectCenter/Info.tiff//HHProjectCenter-0.6.1/English.lproj/Info.gorm/data.info000644 001751 000024 00000000270 11475464512 023120 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/English.lproj/Info.gorm/data.classes000644 001751 000024 00000000274 11145563460 023622 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; PCInfoController = { Actions = ( ); Outlets = ( infoWindow, versionField ); Super = NSObject; }; }ProjectCenter-0.6.1/English.lproj/Info.gorm/objects.gorm000644 001751 000024 00000266645 11765637750 023705 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000021:00000102:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1NSPanel1 NSWindow1 NSResponder% ? A C C&% C" C01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01 NSImageView1 NSControl% @ CF C B  C B&0 &%0 1 NSImageCell1NSCell0 1NSImage C B0 1NSColor0 &%NSCalibratedWhiteColorSpace 0 &01NSBitmapImageRep1 NSImageRep0&%NSDeviceRGBColorSpace C B%%/%D01NSData&BBII*A /l*+JK޴JKց56U##e5@ "  QCDSTZ[Z[UVMNܟBC{34V#$g)2  @jkm!"./>?JKQRVWWXUVOO;J%-  @hdPFLWi"#/0;K % ?hdTNMLKIJNYs'(56EFNOSTVWUVbcvwnWXniighh.,,C  a >idWSSQPONKJGFM[s'(34CCXXyy~~q``L>>`':= hdZYYWVTSQPNMKJIHKRi12YY]]pprrPPHH̋9:\&&m5? $ <<<<<<<<8*Icf&< hd\__][ZYWVTSQPNMKIJU,,O Pb r*+88FGRSWXXYTUHH͊99c)*v<H &  P}+: hc^eeca`_][ZXWUSRPPNLKIGFHM[p&'56CDNOTUVWTTKL֘?@q//FT%-P ?,9 gcaijhgedca`^][YXVUK>9 ?ILJIGFEJWm%%22AALMSTWXUVLMښ?@u01L [+3P9E,97 |gccoomlkjhgedba_^[@4 MOMLJIGEEHRd !}--;s֧̠nV - ogci{|{zyxwvtsqqom% T][ZXWUTRQONLJIGFO ~ AP 9l H;e+l qX ϡɝ^I | * jgcj~}|{zyxwuts0 YYY000&&&X34`a_^][ZXWUTRPOML\ !t,P   l 8, l  nӥN<g) fgck  ~~||zzyxNAAAeNO`fecba_^\ZYWVTSQg !c P/R* wx;.8t=qp\_8tR>Map\8tR* w!)m֧E6Y' bfdl    ~}}|n*bbbnVVeljihfdcb`_]\ZYWq!"PP@T-j\ a a| aT-%.4(G%^fdo !"!"     {s}g"#||W44nqonmkjhgfdca`^]{!"A|P:t\ss]st5)A* :' ^gm*,]bnu47%&$%#$!" !   n91!$J|t67`wvtsqqonlljhgfdd !/ [PO&a\6 q66@2Pq_+*-~=?&'&'&'$%#$"# !O#88= ut%%eepqe*+z{zywwutrrponlkjk ! =P]\*!1Q**775}Lӫ0ޭt2&eq?B(*'('(&'&'%&\98< o  !{''y..v*+x!!}~}||zzxwvttsqpnq!" $Po\nADnn!!!1666hhi|V,۪{=yPT&''('('('(t86; n"#!" !     ~}||w*.X2@IIImmm`3+ZevLQ*+'('('(  64:k()'(%&#$""!!       /1u#E]/MfhM[z"$yx"#`Pe8#Y_\!l BI!qCl !e8# AAAzzz/*6[99QLLrqq{z{I}wbqdk*+()()$% 104]+,*+*++,*+()&'$%"" !     69Mx*[wYz\i}!#| "#DP )\HHl 2`Hvl H999|n``99t**gHHvttLְ.t_qZ_q88<<'(# ,+. P*+*++,,-,--.-.,-*+((%%"#!" 02Iz`{>D !!"4 jP #Aj\``l `dl `#,,,ivvmmi!ݲ&a`m}LTW!!!SSSB))$ "!#(&(>*+*++,,--.././/0/0/000..+,>@zrhv !,1z%)# FP0Ja\ijl idl i'Oqnn񋋋yyyQQQ;;;^^^xܱ-޲$_]l}156DEE734++-- %&()+,,--.././/0/0011212CEugsGOZbDMa3:M!UP@=.Gf\gmfl 0gmdl gmGW78cCCWVV{{{~~~>>>)))777M Saiy=EJ '''??? 6;>(x"#&&)*,-.//0/00113GIuafoQYAlHc:ay(P6{\YWl Ydl YT"#e9:|$%d%%o``HHHddd%%%JJJi͠!߰L[gzVmy<<< "S\aB58x !||} "#&'+,.//0DFubgtnym'TpCr/HY PAu\<%,,,,,8Ql -&n <%,,,,,dl <%,,,,,@AOPx&&ihu;;hPPi__yyyaԩ+B^}dtm#*/...&(*ltxZTUy&&||||||"#<>tag~sCtGyGs#4P!D\ I wWl , Idl  I35RSVVHH-.kgg))i<?KLUVLM45}#$t23}kki+J)XN]&,///)-.EIt`^tvg$P)o\eel ,edl e011212121212121212121234@AQRTUGH@Ay``ulQ"߮<#E+.BBCCCCgpmq]d{n_Ucu$*AP5\5R>l 55Rdl 5Rh01121212121212121212121212239:CDPQ__opspp())1-!vէ~zYF|z{lll[iq|t`jwh]oQ`Y" Fu\\#bj03ozDWwb$#bj0#bj0DU/012121212121212121212121212121256hiwwfgWWpBCG11.'"eR˞$[L|qh|pago:B"$I\( 2./12121212121212121212121212121278ɋaaDEHITUQRc>;nS"s!xrsyj]l};A"# !6 a\  )*12121212121212121212121212121278͍bcnoqqab`K„3]x~qb\w\i;=#$"#!;\#$12121212121212121212121212121267̀»tuEFSLn]Î|zmZ\kJSAC&'"#"#x#\p0112121212121212121212121212121256bb562345?AWXuyscX{eO^59BC)*"#"#"#h\Oc/012121212121212121212121212121201ef|||rr55121201129:FH^by{n\Xol?J)+BC/0"#"#"#!"R\5 C+,12121212121212121212121212121267ttBBVV͆pp451212121212123478JLdgyfZt8;@A56#$"#"#"#!"7 ' &%&021212121212121212121212121223ZZwwIJ-.23892312121212121212120123<=MNflz|fj<=$%"#"#"#"# $Q=( - S ն+,/012121212121212121212129:pqvvZZKK,-12121212121212121212121212121256=>QTqvIK&'"#"#"#"#"#y~ZL<.8' }jţ&'/0231212121212121212IJef56>>23RROO+,12121212121212121212121212121212120134@ALM-."#"#"#"#"#"#h nVI<1$  *fP#$,./11212121212/0`aQQ,-01/0TUTT+,1212121212121212121212121212121212121212./$%"#"#"#"#"#!"TbN@3(  I9 zҰ)*0112121201OPeeGH6712STYZ*+1212121212121212121212121212121212121212-.#$"#"#"#"#"#!"3 U:'  6* {b'(/0121245GH]^ghUU^^TT*+0112121212121212121212121212121212121212,-#$"#"#"#"#"#iR5 ]I!"ߺ+,121112=>XY[[56-.1212121212121212121212121212121212121212*+#$"#"#"#"#) iP>* I6 wӲ*+/00101/0./011212121212121212121212121212121212121212)*"#"#"#"#!"MZK>0! 1"u]%%./1212121212121212121212121212121212121212121201()"#"#"#"#pgRE9-" !^E!",,121212121212121212121212121212121212121201'("#"#"# 3 x\MA4)  B- sϩ'(/0121212121212121212121212121212121201&'"#"# "TfVH<0%  /l]$%./12121212121212121212121212121201$%"#"#yv^QD8,!RA޻,-12121212121212121212121212/0#$"#!: hXL?3'  @. kЯ)*/012121212121212121212./#$!"^ sbTG:.# 'oP##-.1312121212121212-."#}i\NB5*   Z: +,011212121212,- !EudWJ>1'  8!yfœ%&/0121223)*cm_RE8," /dS#$/001&&* vhZM@4( 7/ mJyfWH:-" 3UN<.$  /DBAR01NSFont%&&&&&&&&&&&&&&%%% C B01NSBox% A B C @  C @&0 &0 % @ @ C   C &0 &00&%Box&&&&&&&&&&&&&& @ @%%01 NSTextField% Ck C B A  B A&0 &%01NSTextFieldCell1 NSActionCell0& % Version 0.50% A@&&&&&&&& &&&&&&%00&%NSNamedColorSpace0&%System0 &%textBackgroundColor0!0"& % textColor0#% A C? C @  C @&0$ &0% % @ @ C   C &0& &0'0(&%Box&&&&&&&&&&&&&& @ @%%0)% AP A C A`  C A`&0* &%0+0,&3%3Copyrigth (C) 1999 - 2012 Free Software Foundation,&&&&&&&& &&&&&&%0- > ?0.% AP @ C A`  C A`&0/ &%0001&-%-Released under the GNU General Public License1&&&&&&&& &&&&&&%02 > ?03% A C C A  C A&04 &%0506&4%4http://www.gnustep.org/experience/ProjectCenter.html07% A@6&&&&&&&& &&&&&&%!081NSButton% A B B A`  B A`&09 &%0:1 NSButtonCell0;&%Philippe C.D. Robert;&&&&&&&&&&&&&&%0<&0=&&&& &&0>% B B Bt A`  Bt A`&0? &%0@0A& % Sergii Stoian0B0C&%GNUstepA&&&&&&&&&&&&&&%0D&0E&&&& &&0F% CB B B A`  B A`&0G &%0H0I& % David AyersI&&&&&&&&&&&&&&%0J&0K&&&& &&0L% A Bp B A`  B A`&0M &%0N0O&%Richard Frith-MacdonaldO&&&&&&&&&&&&&&%0P&0Q&&&& &&0R% C B Bp A`  Bp A`&0S &%0T0U& % Nicola PeroU&&&&&&&&&&&&&&%0V&0W&&&& &&0X% B B AP A`  AP A`&0Y &%0Z0[&%Button0\0]&%common_Diamond&&&&&&&&&&&&&&%0^&0_&&&& &&0`% A B8 B A`  B A`&0a &%0b0c&%Pierre-Yves Rivaillec&&&&&&&&&&&&&&%0d&0e&&&& &&0f% C Bp Bp A`  Bp A`&0g &%0h0i& % Adam Fedori&&&&&&&&&&&&&&%0j&0k&&&& &&0l% C B8 B A`  B A`&0m &%0n0o&%Daniel Luederwaldo&&&&&&&&&&&&&&%0p&0q&&&& &&0r% C Bp B A`  B A`&0s &%0t0u&%Gregory John Casamentou&&&&&&&&&&&&&&%0v&0w&&&& &&0x% C6 B AP A`  AP A`&0y &%0z0{&%Button\&&&&&&&&&&&&&&%0|&0}&&&& &&0~% C Bp AP A`  AP A`&0 &%00&%Button\&&&&&&&&&&&&&&%0&0&&&& &&0% C Bp AP A`  AP A`&0 &%00&%Button\&&&&&&&&&&&&&&%0&0&&&& &&0% C B AP A`  AP A`&0 &%00&%Button\&&&&&&&&&&&&&&%0&0&&&& &&0% B B8 AP A`  AP A`&0 &%00&%Button\&&&&&&&&&&&&&&%0&0&&&& &&0% B B B @  B @&0 &0 % @ @ B   B &0 &00&%Box&&&&&&&&&&&&&& @ @%%0% A C  C A`  C A`&0 &%00&%Bugs: http://bugs.gnustep.org7&&&&&&&& &&&&&&%!0% A B C A`  C A`&0 &%00&/%/Maintainer: Sergii Stoian 7&&&&&&&& &&&&&&%!0% Cc B8 AP A`  AP A`&0 &%00&%Button\&&&&&&&&&&&&&&%0&0&&&& &&0% Cq B8 B A`  B A`&0 &%00&%Riccardo Mottola&&&&&&&&&&&&&&%0&0&&&& &&00&%System0&%windowBackgroundColor0&%Window0&%Info @@ B F@ F@%&   D@ D`0 &0 &01NSMutableDictionary1 NSDictionary&!0&%View(2)%0& % Button(7)`0& % Button(29)0&%View(1)0& % Button(28)0& % Button(6)X0&%View(0)0& % InfoPanel0& % Button(5)R0& % Button(14)0±& % Button(4)L0ñ& % Button(3)F0ı& % Button(13)0ű&%Box(2)0Ʊ& % Button(2)>0DZ& % Button(12)~0ȱ&%Box(1)#0ɱ& % Button(11)x0ʱ& % Button(1)80˱&%Box(0)0̱& % Button(0)0ͱ& % Button(10)r0α& % TextField(5)0ϱ& % TextField(4)30б& % TextField(3)0ѱ& % TextField(2).0ұ& % TextField(1))0ӱ& % ImageView(0)0Ա& % TextField(0)0ձ&%NSOwner0ֱ&%PCInfoController0ױ&%View(4)0ر& % Button(9)l0ٱ& % Button(8)f0ڱ &""01 NSNibConnector0ܱ&%NSOwner0ݱ 0ޱ Ӱ0߱ ˰0 ː0 ԰0 Ȱ0 Ȑ0 Ұ0 Ѱ0 ϰ0 ʰ0 ư0 ð0 °0 0 0 0 ٰ0 ذ0 Ͱ0 ɰ0 ǰ0 İ0 0 0 Ű0 װŐ0 ΰ0 а01!NSNibOutletConnectorܰ0& % versionField0!ܰ0& % infoWindow0 ̰0 P& ProjectCenter-0.6.1/English.lproj/ProjectCenter.gorm/data.info000644 001751 000024 00000000270 11415452424 024765 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/English.lproj/ProjectCenter.gorm/data.classes000644 001751 000024 00000002605 10756405720 025477 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "findEnterSelection:", "findJumpToSelection:", "findNext:", "findPrevious:", "findShowPanel:", "newAction:" ); Super = NSObject; }; PCAppController = { Actions = ( ); Outlets = ( menuController ); Super = NSObject; }; PCMenuController = { Actions = ( "showInfoPanel:", "showPrefWindow:", "projectOpen:", "projectNew:", "projectSave:", "projectAddFiles:", "projectSaveFiles:", "projectRemoveFiles:", "subprojectNew:", "subprojectAdd:", "fileOpen:", "fileNew:", "fileSave:", "fileSaveAs:", "fileSaveTo:", "fileRevertToSaved:", "fileClose:", "fileOpenQuickly:", "fileRename:", "fileNewUntitled:", "showInspector:", "showBuildPanel:", "showLoadedFilesPanel:", "runTarget:", "executeBuild:", "stopBuild:", "startClean:", "showLaunchPanel:", "debugTarget:", "toggleToolbar:", "loadedFilesSortByTime:", "loadedFilesSortByName:", "loadedFilesNextFile:", "loadedFilesPreviousFile:", "showLogPanel:", "findEnterSelection:", "findNext:", "findPrevious:", "findShowPanel:", "findJumpToSelection:", "goToLine:" ); Outlets = ( ); Super = NSObject; }; }ProjectCenter-0.6.1/English.lproj/ProjectCenter.gorm/objects.gorm000644 001751 000024 00000060765 11415452424 025535 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000011:0000037f:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01 GSNibItem01NSString& % NSFontManager  &01NSMenu0&%PC01NSMutableArray1 NSArray&  01 NSMenuItem0 &%Info0 &&&%0 1 NSImage0 1 NSMutableString&%common_2DCheckMark0 0 & % common_2DDash2 submenuAction:v12@0:4@8%0 0&0 0& % Info Panel...0&&&% %0 0&%Preferences...0&&&% %0 0& % Log Panel...0&&&% %0 0&%Project0&&&% %00&0 0 &%Open...0!&%O&&% %0" 0#&%New...0$&%N&&% %0% 0&&%Save0'&%S&&% %0( 0)& % Add Files...0*&%A&&% %0+ 0,& % Save Files...0-&%Q&&% %0. 0/&%Remove Files...00&%r&&% %01 02&%New Subproject...03&&&% %04 05&%Add Subproject...06&&&% %07 08&%File09&&&% %0:80;&0< 0=&%Open...0>&%o&&% %0? 0@&%New in Project0A&%n&&% %0B 0C&%Save0D&%s&&% %0E 0F& % Save As...0G&&&% %0H 0I& % Save To...0J&&&% %0K 0L&%Revert to Saved0M&%u&&% %0N 0O&%Close0P&%W&&% %0Q 0R&%Rename0S&&&% %0T 0U&%Edit0V&&&% %0WU0X&0Y 0Z&%Undo0[&%z&&% %0\ 0]&%Redo0^&%Z&&% %0_ 0`&%Cut0a&%x&&% %0b 0c&%Copy0d&%c&&% %0e 0f&%Paste0g&%v&&% %0h 0i& % Select All0j&%a&&% %0k 0l&%Find0m&&&% %0nl0o&0p 0q& % Find Panel...0r&%f&&% %0s 0t& % Find Next0u&%g&&% %0v 0w& % Find Previous0x&%d&&% %0y 0z&%Enter Selection0{&%e&&% %0| 0}&%Jump To Selection0~&%j&&% %0 0&%Line Number...0&%l&&% %W0 0&%Tools0&&&% %00&0 0& % Hide Tool Bar0&&&% %0 0& % Inspector...0&&&% %0 0& % Project Build0&&&% %00&0 0& % Show Panel...0&&&% %0 0&%Build0&%B&&% %0 0& % Stop Build0&%\&&% %0 0&%Clean0&&&% %0 0& % Loaded Files0&&&% %00&0 0& % Show Panel...0&%L&&% %0 0&%Sort by Time Viewed0&&&% %0 0& % Sort by Name0&&&% %0 0& % Next File0&%+&&% %0 0& % Previous File0&%_&&% %0 0&%Launcher0&&&% %00&0 0& % Show Panel...0&&&% %0 0&%Run0&&&% %0 0&%Debug0&&&% %0 0&%Windows0±&&&% %0ñ0ı&0ű 0Ʊ&%Arrange In Front0DZ&&&% %0ȱ 0ɱ&%Miniaturize Window0ʱ&%m&&% %0˱ 0̱& % Close Window0ͱ&%w&&% %0α 0ϱ&%Services0б&&&% %0ѱ0ұ&0ӱ 0Ա&%Hide0ձ&%h&&% %0ֱ 0ױ&%Quit0ر&%q&&% %0ٱ0ڱ&%PCAppController  &0۱0ܱ&%PCMenuController  &0ݱ&0ޱ&01 NSMutableDictionary1 NSDictionary&)0& % MenuItem30T0& % MenuItem3240& % MenuItem31_0&%MenuItem0& % MenuItem3250& % MenuItem32b0& % MenuItem3260& % MenuItem(50)0& % MenuItem3270& % MenuItem33e0& % MenuItem3280& % MenuItem34h0& % MenuItem3290 0&%Print...0&%p&&% %0& % MenuItem(15)?0&%NSMenu0& % MenuItem2000& % MenuItem2010& % MenuItem2020& % MenuItem2030& % MenuItem2040& % MenuItem(45)y0& % MenuItem2050& % MenuItem2060& % MenuItem2070& % MenuItem2080& % MenuItem209Ȱڰ0& % GormNSMenu20:0& % MenuItem(33)0& % GormNSMenu22WP&%NSFontP& % MenuItem(6)"P&%Menu(9)P&%Menu(2):P& % GormNSMenu29P& % MenuItem(28)P& % MenuItem330P& % MenuItem331P& % MenuItem(21)QP & % MenuItem332P & % MenuItem333P & % MenuItem334P & % MenuItem335P & % MenuItem41P P&%UndoP&&&% %PP&P P&%UndoP&%z&&% %P P&%RedoP&%Z&&% %P P& % Undo RegionP&&&% %P& % MenuItem336P& % MenuItem(51)YP& % MenuItem337P& % MenuItem338P & % MenuItem339P!& % MenuItem(16)BP"& % MenuItem45P# P$& % IndentationP%&&&% %P&$P'&P( P)&%IndentP*&%i&&% %P+ P,& % Shift LeftP-&%[&&% %P. P/& % Shift RightP0&%]&&% %P1 P2&%Compress WhitespaceP3&%{&&% %P4 P5&%Expand Message ExpressionP6&%}&&% %P7& % MenuItem210P8& % MenuItem212P9& % MenuItem284P:& % MenuItem213P;& % MenuItem285P<& % MenuItem214P=& % MenuItem286P>& % MenuItem(46)|P?& % MenuItem215P@& % MenuItem216PA& % MenuItem288PB& % MenuItem217PC& % MenuItem289PD& % MenuItem219PE& % GormNSMenu30ܰPF& % MenuItem(34)PG& % GormNSMenu32PH& % GormNSMenu33PI& % GormNSMenu34PJ& % GormNSMenu35PK& % MenuItem(7)%PL& % GormNSMenu36PM& % GormNSMenu37PN& % MenuItem(0)PO&%Menu(3)WPP& % GormNSMenu38:PQ& % MenuItem(29)PR& % MenuItem340PS&%Menu(10)nPT& % MenuItem341PU& % MenuItem(22)PV& % MenuItem342PW& % MenuItem343PX& % MenuItem344PY& % MenuItem345PZ& % MenuItem(52)\P[& % MenuItem346P\& % MenuItem347P]& % MenuItem53P^ P_& % Spelling...P`&&&% %Pa& % MenuItem348Pb& % MenuItem54Pc Pd&%Check SpellingPe&%;&&% %Pf& % MenuItem290Pg& % MenuItem(17)EPh& % MenuItem349Pi& % MenuItem55Pj Pk&%FormatPl&&&% %PmkPn&Po Pp&%FontPq&&&% %PrpPs&  Pt Pu& % Font Panel...Pv&%t&&% %Pw Px&%BoldPy&%b&&% %Pz P{&%ItalicP|&%i&&% %P} P~& % UnderlineP&&&% %P P& % SuperscriptP&&&% %P P& % SubscriptP&&&% %P P&%UnscriptP&&&% %P P& % Copy FontP&%3&&% %P P& % Paste FontP&%4&&% %mP P&%TextP&&&% %PP&P P& % Align LeftP&&&% %P P&%CenterP&&&% %P P& % Align RightP&&&% %P P& % Show RulerP&&&% %P P& % Copy RulerP&%1&&% %P P& % Paste RulerP&%2&&% %mP P&%Make Rich TextP&%R&&% %P P&%Show All CharactersP&&&% %P P&%Page Layout...P&%P&&% %P& % MenuItem291P& % MenuItem220P& % MenuItem292P& % MenuItem221"P& % MenuItem(10).P& % MenuItem222%P& % MenuItem223(P& % MenuItem224+P& % MenuItem(47)kP& % MenuItem225.P& % MenuItem(40)P& % MenuItem2261P& % MenuItem2274P& % MenuItem2287P& % MenuItem229& % MenuItem305P?& % MenuItem83P@& % MenuItem12.PA& % MenuItem306PB& % MenuItem84PC& % MenuItem131PD& % MenuItem307PE& % MenuItem85PF PG& % Next errorPH&%>&&% %PI& % MenuItem144PJ& % MenuItem308PK& % MenuItem86PL PM&%Previous errorPN&%<&&% %PO& % MenuItem157PP& % MenuItem(13)7PQ& % MenuItem309PR& % MenuItem87PS PT& % Project FindPU&&&% %PVTPW&PX PY& % Show Panel...PZ&%F&&% %P[ P\&%Find ReferencesP]&%0&&% %P^ P_&%Find DefinitionsP`&%9&&% %Pa Pb& % Find TextPc&%8&&% %Pd Pe&%Find Regular ExpPf&%7&&% %Pg Ph& % Next matchPi&%:&&% %Pj Pk&%Previous matchPl&&&% %Pm& % MenuItem16P?& % fileClose:P@PA& % fileRename:PBPC&%showInspector:PDPE&%showBuildPanel:PF PG& % runTarget:PHڰPI&%menuControllerPJPK& % executeBuild:PLPM& % stopBuild:PNQPO& % startClean:PP PQ&%showLaunchPanel:PRPS& % debugTarget:PTɰPU&%toggleToolbar:PVuPW&%showLoadedFilesPanel:PXPY&%loadedFilesSortByTime:PZP[&%loadedFilesSortByName:P\P]&%loadedFilesNextFile:P^ P_&%loadedFilesPreviousFile:P`1LPa1Pb& % showLogPanel:PcOPdߐPe ѐPfqѐPgѐPhѐPi>ѐPjOPk&%submenuAction:Pl Pm&%findShowPanel:PnqPo& % findNext:PpPq& % findPrevious:PrPs&%findEnterSelection:Pt>Pu&%findJumpToSelection:PvѐPwPx& % goToLine:PyOPzZOP{P| &%undo:P}ZP~ &%redo:P &ProjectCenter-0.6.1/English.lproj/Preferences.gorm/data.info000644 001751 000024 00000000270 11151111063 024443 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/English.lproj/Preferences.gorm/data.classes000644 001751 000024 00000002705 11117340451 025161 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "setBuildTool:" ); Super = NSObject; }; PCPrefController = { Actions = ( "popupChanged:", "setSuccessSound:", "setFailureSound:", "setPromptOnClean:", "setKeepBackup:", "setSaveOnQuit:", "setSavePeriod:", "setDisplayPanels:", "setPromptWhenQuit:", "setDebugger:", "setEditor:", "setTabBehaviour:", "setTabSpaces:", "setRootBuildDir:", "setDeleteCache:", "setFullPathInFilePanels:", "setRememberWindows:", "setEditorSize:", "setDisplayLog:", "setBuildTool:" ); 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, buildToolField, debuggerButton, buildToolButton ); Super = NSObject; }; }ProjectCenter-0.6.1/English.lproj/Preferences.gorm/objects.gorm000644 001751 000024 00000005631 11157043720 025214 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000021:0000004d:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C&% Cs DH01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01 NSPopUpButton1NSButton1 NSControl% B C CE A  CE A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0 &0 1NSFont%&&&&&&&&0 1NSMenu0 &0 &01 NSMenuItem0&%Item 10&&&%01NSImage0& % common_Nibble%00&%Item 2&&%%00&%Item 3&&%%&&&&&&%0&0&&&& && %%%%%01NSBox%  C C  C C&0 &0 %  C C  C C&0 &00&%Box &&&&&&&&&&&&&& %%0 1NSColor0!&%NSNamedColorSpace0"&%System0#&%windowBackgroundColor0$&%Window0%& % Preferences% ? B F@ F@%0&0'&%NSApplicationIcon&   D D0( &0) &0*1NSMutableDictionary1 NSDictionary& 0+&%NSOwner0,&%PCPrefController0-&%Panel0.&%Box0/&%MenuItem00&%Box(0)01% C B B` B  B` B&02 &03 % @ @ B( B<  B( B<&04 &0506&%Title &&&&&&&&&&&&&& @ @%%07& % MenuItem108&%GormNSPopUpButton09&%View(0)30:& % MenuItem20; &  0<1NSNibConnector-0=&%NSOwner0>80?.0@/0A70B:0C1 NSNibOutletConnector=-0D&%panel0E =80F& % popupButton0G =.0H& % sectionsView0I1!NSNibControlConnector8=0J& % popupChanged:0K00L900M&ProjectCenter-0.6.1/English.lproj/FindPanel.gorm/data.info000644 001751 000024 00000000270 11150347500 024050 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/English.lproj/FindPanel.gorm/data.classes000644 001751 000024 00000001201 10675564111 024557 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "findNext:", "findNextAndOrderFindPanelOut:", "findPrevious:", "ignoreCase:", "replace:", "replaceAll:", "replaceAndFind:" ); Super = NSObject; }; TextFinder = { Actions = ( "findNext:", "findNextAndOrderFindPanelOut:", "findPrevious:", "replace:", "replaceAll:", "replaceAndFind:" ); Outlets = ( findNextButton, findTextField, ignoreCaseButton, replaceAllScopeMatrix, replaceTextField, statusField ); Super = NSObject; }; }ProjectCenter-0.6.1/English.lproj/FindPanel.gorm/objects.gorm000644 001751 000024 00000020332 11150347500 024602 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000020:000000e9:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C&&% C- D01 NSView% ? A C C&  C C&&01 NSMutableArray1NSArray&  01 NSTextField1 NSControl% B C C A  C A&0% B B C A  C A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 &0 1NSFont% A@ &&&&&&&&&&&&&&%0 1NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor01NSButton% C A Bt A  Bt A&0% C A B| A  B| A&0% C A B A  B A&0% B A B` A  B` A&0% A A B A  B A&0 &%01 NSButtonCell0& % Replace All &&&&&&&&&&&&&&%0&0&&&& &&0 &%00&%Replace &&&&&&&&&&&&&&%0 &0!&&&& &&0" &%0#0$&%Replace & Find $&&&&&&&&&&&&&&%0%&0&&&&& &&0' &%0(0)&%Previous )&&&&&&&&&&&&&&%0*&0+&&&& &&0, &%0-0.&%Next0/1NSImage00& % common_ret .&&&&&&&&&&&&&&%01&02&0304& % common_retH&&& &&05 &%0607& 7&&&&&&&&&&&&&&%0809&%System0:&%textBackgroundColor0;90<& % textColor0=% A C B A  B A&0> &%0?0@&%Find: @&&&&&&&&&&&&&&%0A0B&%System0C&%textBackgroundColor0DB0E& % textColor0F% A B B A  B A&0G &%0H0I& % Replace with: &&&&&&&&&&&&&&%0J0K&%System0L&%textBackgroundColor0MK0N& % textColor0O% A B$ B B\  B B\&0P &%0Q0R&0S% A@R&&&&&&&&&&&&&&%0T0U&%NSCalibratedWhiteColorSpace ? ?0VU ? ?0W1NSBox% B B$ C B|  C B|&0X &0Y % @ @ C B  C B&0Z &0[1NSMatrix% A @ B B  B B&0\ &%0]0^&0_%0`& % Helvetica A@A@&&&&&&&&&&&&&&%% B A 0a0b&%System0c&%controlBackgroundColora0d& % NSButtonCell0e0f&%Radio0g0h1NSMutableString&%common_RadioOff_&&&&&&&&&&&&&&%0i&0j&0k0l&%common_RadioOn&&& &&%%0m &0n0o& % Entire Fileg o&&&&&&&&&&&&&&%*ijk&&& &&0p0q& % Selectiong q&&&&&&&&&&&&&&%+ijk&&& &&n0r0s&%Replace All Scope0t%0u&%Helvetica-Bold A@A@s&&&&&&&&&&&&&&%0v0w&%System0x&%windowBackgroundColor0y0z&%System0{& % textColor @ @%%0|% C B$ C B|  C B|&0} &0~ % @ @ B B  B B&0 &0% A A@ B A  B A&0 &%00& % Ignore Case00&%common_SwitchOff &&&&&&&&&&&&&&%0&0&00&%common_SwitchOn&&& &&00& % Find Optionst&&&&&&&&&&&&&&%v00&%System0& % textColor @ @%%00&%System0&%windowBackgroundColor0&%Window0&%Find ? ? F@ F@%&   D D0 &0 &01NSMutableDictionary1 NSDictionary&0&%Button20&%Button30&%Button40&%Box1|0&%NSOwner0& % TextFinder0&%Button50& % TextField10& % TextField2=0& % TextField0&%ViewY0& % TextField3F0& % TextField4O0&%View1~0&%Button0& % FindPanel0&%BoxW0&%Matrix[0&%Button10 &**01NSNibConnector0&%NSOwner000000000000000001NSNibOutletConnector0&%initialFirstResponder00& % nextKeyView00±0ñ0ı0ű0Ʊ0DZ0ȱ01 NSNibControlConnector0ʱ&%findNextAndOrderFindPanelOut:0˱ 0̱ 0ͱ&%NSFirst0α& % ignoreCase:0ϱ 0б& % replaceAll:0ѱ 0ұ&%replace:0ӱ 0Ա&%replaceAndFind:0ձ 0ֱ& % findPrevious:0ױ 0ر& % findNext:0ٱ0ڱ&%delegate0۱0ܱ&%findNextButton0ݱ0ޱ& % findTextField0߱0&%replaceTextField00&%ignoreCaseButton00&%replaceAllScopeMatrix00& % statusField0&ProjectCenter-0.6.1/Headers/Protocols/000755 001751 000024 00000000000 11766110767 020321 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Headers/PCMenuController.h000644 001751 000024 00000006614 11126423157 021676 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001 Free Software Foundation 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 _PCMENUCONTROLLER_H #define _PCMENUCONTROLLER_H #import @class PCProjectManager; @class PCFileManager; @class PCAppController; @interface PCMenuController : NSObject { PCProjectManager *projectManager; PCAppController *appController; BOOL editorIsActive; } //============================================================================ //==== Init and free //============================================================================ - (id)init; - (void)dealloc; - (void)setAppController:(id)anObject; - (void)setProjectManager:(id)anObject; //============================================================================ //==== Menu stuff //============================================================================ // 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)projectAddFiles:(id)sender; - (void)projectSaveFiles:(id)sender; - (void)projectRemoveFiles:(id)sender; - (void)projectClose:(id)sender; // Subproject - (void)subprojectNew:(id)sender; - (void)subprojectAdd:(id)sender; // File - (void)fileNew:(id)sender; - (void)fileOpen:(id)sender; - (void)fileSave:(id)sender; - (void)fileSaveAs:(id)sender; - (void)fileSaveTo:(id)sender; - (void)fileRevertToSaved:(id)sender; - (void)fileClose:(id)sender; - (void)fileOpenQuickly:(id)sender; - (void)fileRename:(id)sender; - (void)fileNewUntitled:(id)sender; // Edit /*- (void)findShowPanel:(id)sender; - (void)findNext:(id)sender; - (void)findPrevious:(id)sender;*/ // Tools - (void)showInspector:(id)sender; - (void)showEditorPanel:(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 //============================================================================ - (BOOL)validateMenuItem:(id )menuItem; - (void)editorDidBecomeActive:(NSNotification *)aNotif; - (void)editorDidResignActive:(NSNotification *)aNotif; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/000755 001751 000024 00000000000 11766110767 021104 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Headers/PCInfoController.h000644 001751 000024 00000002206 11145563460 021661 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001 Free Software Foundation 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 _PCINFOCONTROLLER_H #define _PCINFOCONTROLLER_H #import @interface PCInfoController : NSObject { id infoWindow; id versionField; NSDictionary *infoDict; } - (id)init; - (void)dealloc; - (void)showInfoWindow:(id)sender; @end #endif ProjectCenter-0.6.1/Headers/PCPrefController.h000644 001751 000024 00000002772 11152333126 021662 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2008 Free Software Foundation 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 _PCPREFCONTROLLER_H #define _PCPREFCONTROLLER_H #import #import @interface PCPrefController : NSObject { NSUserDefaults *userDefaults; NSMutableDictionary *sectionsDict; IBOutlet NSPanel *panel; IBOutlet NSPopUpButton *popupButton; IBOutlet NSBox *sectionsView; IBOutlet NSBox *bundlesView; IBOutlet NSTextField *bundlePathField; } + (PCPrefController *)sharedPCPreferences; - (id)init; - (void)dealloc; - (void)loadPrefsSections; - (void)showPanel:(id)sender; - (void)popupChanged:(id)sender; @end #endif ProjectCenter-0.6.1/Headers/PCAppController.h000644 001751 000024 00000004773 11765637750 021535 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2012 Free Software Foundation 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 _PCAPPCONTROLLER_H #define _PCAPPCONTROLLER_H #import @class PCProjectManager; @class PCFileManager; @class PCMenuController; @class PCInfoController; @class PCPrefController; @class PCLogController; @interface PCAppController : NSObject { PCProjectManager *projectManager; PCMenuController *menuController; PCInfoController *infoController; PCPrefController *prefController; PCLogController *logController; NSConnection *doConnection; } //============================================================================ //==== Intialization & deallocation //============================================================================ + (void)initialize; - (id)init; - (void)dealloc; //============================================================================ //==== Accessory methods //============================================================================ - (PCProjectManager *)projectManager; - (PCMenuController *)menuController; - (PCInfoController *)infoController; - (PCPrefController *)prefController; - (PCLogController *)logController; //============================================================================ //==== Application //============================================================================ - (BOOL)application:(NSApplication *)application openFile:(NSString *)fileName; - (void)applicationWillFinishLaunching:(NSNotification *)notification; - (void)applicationDidFinishLaunching:(NSNotification *)notification; - (NSApplicationTerminateReply)applicationShouldTerminate:(id)sender; - (void)applicationWillTerminate:(NSNotification *)notification; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProject.h000644 001751 000024 00000017011 11504531142 023066 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProject_h_ #define _PCProject_h_ #import @class PCProjectManager; @class PCProjectWindow; @class PCProjectBrowser; @class PCProjectLoadedFiles; @class PCProjectInspector; @class PCProjectBuilder; @class PCProjectLauncher; @class PCProjectEditor; extern NSString *PCProjectDictDidChangeNotification; extern NSString *PCProjectDictDidSaveNotification; extern NSString *PCProjectBreakpointNotification; @interface PCProject : NSObject { PCProjectManager *projectManager; PCProjectWindow *projectWindow; PCProjectBrowser *projectBrowser; PCProjectLoadedFiles *projectLoadedFiles; PCProjectEditor *projectEditor; PCProjectBuilder *projectBuilder; PCProjectLauncher *projectLauncher; // Preferences BOOL rememberWindows; BOOL keepBackup; NSMutableDictionary *projectDict; NSString *projectName; NSString *projectPath; NSArray *rootKeys; // e.g. CLASS_FILES NSArray *rootCategories; // e.g. Classes NSDictionary *rootEntries; // Initialised by subclasses NSMutableDictionary *buildOptions; PCProject *activeSubproject; // Subproject NSMutableArray *loadedSubprojects; BOOL isSubproject; PCProject *rootProject; PCProject *superProject; NSFileWrapper *projectFileWrapper; NSString *wrapperPath; } // ============================================================================ // ==== Init and free // ============================================================================ - (id)init; - (PCProject *)openWithWrapperAt:(NSString *)path; - (void)dealloc; - (void)loadPreferences:(NSNotification *)aNotification; // ============================================================================ // ==== Project handling // ============================================================================ - (BOOL)assignProjectDict:(NSDictionary *)pDict atPath:(NSString *)pPath; //- (BOOL)assignProjectDict:(NSDictionary *)aDict; - (BOOL)isValidDictionary:(NSDictionary *)aDict; // Validates the project dictionary and inserts missing keys if needed. // It calls isValidDictionary to validate. - (void)validateProjectDict; - (void)setProjectDictObject:(id)object forKey:(NSString *)key notify:(BOOL)yn; - (void)updateProjectDict; - (NSDictionary *)projectDict; - (NSString *)projectName; - (void)setProjectName:(NSString *)aName; - (NSString *)projectPath; - (void)setProjectPath:(NSString *)aPath; - (BOOL)isProjectChanged; // Subclasses need to call this before their customised implementation! - (BOOL)writeMakefile; - (BOOL)saveProjectWindowsAndPanels; - (BOOL)save; - (BOOL)close:(id)sender; // ============================================================================ // ==== Accessory methods // ============================================================================ - (PCProjectManager *)projectManager; - (void)setProjectManager:(PCProjectManager *)aManager; - (PCProjectWindow *)projectWindow; - (PCProjectBrowser *)projectBrowser; - (PCProjectLoadedFiles *)projectLoadedFiles; - (PCProjectBuilder *)projectBuilder; - (PCProjectLauncher *)projectLauncher; - (PCProjectEditor *)projectEditor; // =========================================================================== // ==== Can be overriden // =========================================================================== // Project Attributes Inspector - (NSView *)projectAttributesView; //--- Properties from Info.table - (NSDictionary *)projectBundleInfoTable; - (NSString *)projectTypeName; - (Class)builderClass; - (NSString *)projectDescription; - (BOOL)isExecutable; - (BOOL)canHavePublicHeaders; - (NSArray *)publicHeaders; - (void)setHeaderFile:(NSString *)file public:(BOOL)yn; - (NSArray *)localizedResources; - (NSString *)resourceDirForLanguage:(NSString *)language; - (void)setResourceFile:(NSString *)file localizable:(BOOL)yn; - (NSArray *)buildTargets; // Files placed into / - (NSArray *)sourceFileKeys; // Files placed into /Resources or /Language.lproj - (NSArray *)resourceFileKeys; - (NSArray *)otherKeys; - (NSArray *)allowableSubprojectTypes; - (NSArray *)localizableKeys; - (BOOL)isEditableCategory:(NSString *)category; - (BOOL)isEditableFile:(NSString *)filePath; - (NSArray *)fileTypesForCategoryKey:(NSString *)key; - (NSString *)categoryKeyForFileType:(NSString *)type; - (NSString *)dirForCategoryKey:(NSString *)key; - (NSString *)complementaryTypeForType:(NSString *)type; // ============================================================================ // ==== File Handling // ============================================================================ // Returns file path taking into account localizable resources - (NSString *)pathForFile:(NSString *)file forKey:(NSString *)key; // 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 notify:(BOOL)yn; - (BOOL)removeFiles:(NSArray *)files forKey:(NSString *)key notify:(BOOL)yn; - (BOOL)renameFile:(NSString *)fromFile toFile:(NSString *)toFile; // ============================================================================ // ==== 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 (ProjectBrowser) - (NSArray *)rootKeys; - (NSArray *)rootCategories; - (NSDictionary *)rootEntries; - (NSString *)keyForCategory:(NSString *)category; - (NSString *)categoryForKey:(NSString *)key; - (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 ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectLauncherPanel.h000644 001751 000024 00000002401 11126423157 025533 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003-2004 Free Software Foundation Authors: 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_ #import @class PCProjectManager; @interface PCProjectLauncherPanel : NSPanel { PCProjectManager *projectManager; PCProject *currentProject; NSBox *contentBox; NSBox *emptyBox; } - (id)initWithProjectManager:(PCProjectManager *)aManager; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCFileManager.h000644 001751 000024 00000010356 11427353164 023651 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCFileManager_h_ #define _PCFileManager_h_ //#import #import @class PCProject; @class PCProjectManager; @class PCAddFilesPanel; enum { PCOpenFileOperation, PCSaveFileOperation, PCAddFileOperation, PCOpenProjectOperation, PCOpenDirectoryOperation }; @interface PCFileManager : NSObject { PCProjectManager *projectManager; id delegate; // PCProjectManager // 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; PCAddFilesPanel *addFilesPanel; int operation; } //============================================================================== // ==== Class methods //============================================================================== + (PCFileManager *)defaultManager; //============================================================================== // ==== Init and free //============================================================================== - (id)initWithProjectManager:(PCProjectManager *)aProjectManager; - (void)dealloc; // =========================================================================== // ==== File stuff // =========================================================================== // Checks if directories in path exists and creates if not. - (BOOL)createDirectoriesIfNeededAtPath:(NSString *)path; // Create directories in toFile path if needed - (BOOL)copyFile:(NSString *)file toFile:(NSString *)toFile; // Calls copyFile:toFile: - (BOOL)copyFile:(NSString *)file intoDirectory:(NSString *)directory; // Calls copyFile:intoDirectory in cycle - (BOOL)copyFiles:(NSArray *)files intoDirectory:(NSString *)directory; // Calls copyFile:intoDirectory: - (BOOL)copyFile:(NSString *)file fromDirectory:(NSString *)fromDir intoDirectory:(NSString *)toDir; // If directory is empty remove it recursively - (BOOL)removeDirectoriesIfEmptyAtPath:(NSString *)path; // Remove 'file' located in 'directory' - (BOOL)removeFile:(NSString *)file fromDirectory:(NSString *)directory removeDirsIfEmpty:(BOOL)removeDirs; // Remove file with full path 'file' - (BOOL)removeFileAtPath:(NSString *)file removeDirsIfEmpty:(BOOL)removeDirs; // Remove array of files from directory - (BOOL)removeFiles:(NSArray *)files fromDirectory:(NSString *)directory removeDirsIfEmpty:(BOOL)removeDirs; - (BOOL)moveFile:(NSString *)file intoDirectory:(NSString *)directory; @end @interface PCFileManager (UInterface) // Shows panel and return selected files if any - (NSMutableArray *)filesOfTypes:(NSArray *)types operation:(int)op multiple:(BOOL)yn title:(NSString *)title accView:(NSView *)accessoryView; @end @interface PCFileManager (Misc) - (BOOL)isTextFile:(NSString *)filename; // Return list of files and directories absolute paths that has // specified 'extension' at directory 'dirPath'. If 'incDirs' // has value YES also include directories in this list. - (NSArray *)filesWithExtension:(NSString *)extension atPath:(NSString *)dirPath includeDirs:(BOOL)incDirs; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectBrowser.h000644 001751 000024 00000005525 11153575477 024464 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProjectBrowser_h_ #define _PCProjectBrowser_h_ #import extern NSString *PCBrowserDidSetPathNotification; @class PCProject; @interface PCProjectBrowser : NSObject { PCProject *project; NSBrowser *browser; } // ============================================================================ // ==== Intialization & deallocation // ============================================================================ - (id)initWithProject:(PCProject *)aProject; - (void)dealloc; // ============================================================================ // ==== Accessory methods // ============================================================================ - (NSView *)view; // Returns nil if multiple files selected - (NSString *)nameOfSelectedFile; - (NSString *)pathToSelectedFile; // Returns nil if multiple categories selected - (NSString *)nameOfSelectedCategory; - (NSString *)pathToSelectedCategory; - (NSString *)pathFromSelectedCategory; - (NSString *)nameOfSelectedRootCategory; // Returns nil if multiple category selected - (NSArray *)selectedFiles; - (NSString *)path; - (BOOL)setPath:(NSString *)path; - (void)reloadLastColumnAndNotify:(BOOL)yn; - (void)reloadLastColumnAndSelectFile:(NSString *)file; // ============================================================================ // ==== Actions // ============================================================================ - (void)click:(id)sender; - (void)doubleClick:(id)sender; // ============================================================================ // ==== Notifications // ============================================================================ - (void)projectDictDidChange:(NSNotification *)aNotif; @end @interface PCProjectBrowser (ProjectBrowserDelegate) - (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCButton.h000644 001751 000024 00000002354 11126423157 022745 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003-2004 Free Software Foundation Authors: 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_ #import /* * Button */ @interface PCButton : NSButton { NSToolTipTag mainToolTip; NSTimer *ttTimer; NSWindow *ttWindow; NSMutableDictionary *ttTitleAttrs; NSColor *ttBackground; BOOL _hasTooltips; } @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectEditor.h000644 001751 000024 00000005365 11146127423 024253 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProjectEditor_h_ #define _PCProjectEditor_h_ #import #import #import #import @class PCProject; @class NSBox; @class NSView; @class NSScrollView; @interface PCProjectEditor : PCEditorManager { PCProject *_project; NSBox *_componentView; NSScrollView *_scrollView; /* NSDictionary *_editorBundlesInfo; NSDictionary *_parserBundlesInfo; NSMutableDictionary *_editorsDict; id _activeEditor;*/ } // =========================================================================== // ==== Initialisation // =========================================================================== - (id)init; - (void)dealloc; - (NSView *)componentView; - (PCProject *)project; - (void)setProject:(PCProject *)aProject; // =========================================================================== // ==== Project and Editor handling // =========================================================================== - (BOOL)editorProvidesBrowserItemsForItem:(NSString *)item; - (id)openEditorForCategoryPath:(NSString *)categoryPath windowed:(BOOL)windowed; - (void)orderFrontEditorForFile:(NSString *)path; // =========================================================================== // ==== File handling // =========================================================================== - (BOOL)saveFileAs:(NSString *)file; // =========================================================================== // ==== Delegate // =========================================================================== - (void)editorDidClose:(NSNotification *)aNotif; - (void)editorDidBecomeActive:(NSNotification *)aNotif; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCDefines.h000644 001751 000024 00000017621 11547327720 023060 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2010 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCDefines_h_ #define _PCDefines_h_ #define PC_EXTERN extern #define PRIVATE_EXTERN __private_extern__ #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 #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 imageNamed:(X)] #endif //============================================================================= // ==== 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 //============================================================================= #import static NSString * const PCLastEditing = @"LAST_EDITING"; static NSString * const PCWindows = @"PC_WINDOWS"; 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 PCLanguage = @"LANGUAGE"; static NSString * const PCUserLanguages = @"USER_LANGUAGES"; static NSString * const PCLocalizedResources = @"LOCALIZED_RESOURCES"; static NSString * const PCBuildTool = @"BUILDTOOL"; static NSString * const PCCompilerOptions = @"COMPILEROPTIONS"; static NSString * const PCPreprocessorOptions = @"CPPOPTIONS"; static NSString * const PCCreationDate = @"CREATION_DATE"; static NSString * const PCInstallDomain = @"INSTALLDOMAIN"; static NSString * const PCLinkerOptions = @"LINKEROPTIONS"; 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 PCDocumentTypes = @"PROJECT_DOCUMENTTYPES"; 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 PCSummary = @"PROJECT_SUMMARY"; static NSString * const PCProjectType = @"PROJECT_TYPE"; static NSString * const PCURL = @"PROJECT_URL"; static NSString * const PCSearchHeaders = @"SEARCH_HEADER_DIRS"; static NSString * const PCSearchLibs = @"SEARCH_LIB_DIRS"; // Project Builder options static NSString * const PCBuilderTargets = @"BUILDER_TARGETS"; static NSString * const PCBuilderArguments = @"BUILDER_ARGS"; static NSString * const PCBuilderDebug = @"BUILDER_DEBUG"; static NSString * const PCBuilderStrip = @"BUILDER_STRIP"; static NSString * const PCBuilderVerbose = @"BUILDER_VERBOSE"; static NSString * const PCBuilderSharedLibs = @"BUILDER_SHARED_LIBS"; // Application specific static NSString * const PCAppIcon = @"APPLICATIONICON"; static NSString * const PCMainInterfaceFile = @"MAININTERFACE"; static NSString * const PCHelpFile = @"HELP_FILE"; static NSString * const PCDocumentBasedApp = @"APP_DOCUMENT_BASED"; static NSString * const PCAppType = @"APP_TYPE"; // Library specific static NSString * const PCPublicHeaders = @"PUBLIC_HEADERS"; 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 (compatibility) static NSString * const PCProjectBuilderClass = @"PROJECT_BUILDER"; #endif // _PCDEFINES_H_ ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectBuilder.h000644 001751 000024 00000010346 11427353164 024413 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProjectBuilder_h_ #define _PCProjectBuilder_h_ #import @class PCProject; @class PCButton; @class PCProjectBuilderOptions; typedef enum _ErrorLevel { ELFile, ELFunction, ELIncluded, ELIncludedError, ELError, ELNone } ErrorLevel; @interface PCProjectBuilder : NSObject { PCProject *project; PCProjectBuilderOptions *buildOptions; // Preferences NSString *successSound; NSString *failureSound; NSString *buildTool; NSString *rootBuildDir; BOOL promptOnClean; // Options panel BOOL verboseBuilding; NSString *buildStatus; NSMutableString *buildStatusTarget; NSMutableString *buildTarget; NSMutableArray *buildArgs; SEL postProcess; NSTask *makeTask; NSPipe *stdOutPipe; NSPipe *stdErrorPipe; NSFileHandle *stdOutHandle; NSFileHandle *stdErrorHandle; BOOL _isBuilding; BOOL _isCleaning; BOOL _isLogging; BOOL _isErrorLogging; // Component view BOOL _isCVLoaded; NSBox *componentView; PCButton *buildButton; PCButton *cleanButton; PCButton *optionsButton; NSTextField *errorsCountField; NSSplitView *split; NSTextField *statusField; NSTextField *targetField; // Error logging NSTableView *errorOutput; NSTableColumn *errorImageColumn; NSTableColumn *errorColumn; NSMutableArray *errorArray; NSMutableString *errorString; ErrorLevel currentEL; ErrorLevel lastEL; ErrorLevel nextEL; NSString *lastIndentString; int errorsCount; int warningsCount; // Output logging NSTextView *logOutput; NSMutableString *currentBuildFile; NSMutableString *currentBuildPath; } - (id)initWithProject:(PCProject *)aProject; - (void)dealloc; - (NSView *)componentView; - (void)loadPreferences:(NSNotification *)aNotification; - (void)updateTargetField; // --- Accessory - (BOOL)isBuilding; - (BOOL)isCleaning; - (void)performStartBuild; - (void)performStartClean; - (void)performStopBuild; - (NSArray *)buildArguments; // --- Actions - (void)startBuild:(id)sender; - (void)startClean:(id)sender; - (BOOL)stopMake:(id)sender; - (void)showOptionsPanel:(id)sender; - (void)cleanupAfterMake:(NSString *)statusString; - (BOOL)prebuildCheck; - (void)build:(id)sender; //- (void)buildDidTerminate; @end @interface PCProjectBuilder (Logging) - (void)updateErrorsCountField; - (void)logStdOut:(NSNotification *)aNotif; - (void)logErrOut:(NSNotification *)aNotif; - (void)logData:(NSData *)data error:(BOOL)isError; @end @interface PCProjectBuilder (BuildLogging) // --- Parsing utilities - (BOOL)line:(NSString *)lineString startsWithString:(NSString *)substring; - (NSArray *)componentsOfLine:(NSString *)lineString; - (void)parseMakeLine:(NSString *)lineString; - (NSString *)parseCompilerLine:(NSString *)lineString; - (void)logBuildString:(NSString *)string newLine:(BOOL)newLine; - (NSString *)parseBuildLine:(NSString *)string; @end @interface PCProjectBuilder (ErrorLogging) - (void)logErrorString:(NSString *)string; - (NSString *)lineTail:(NSString*)line afterString:(NSString*)string; - (NSArray *)parseErrorLine:(NSString *)string; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCEditorManager.h000644 001751 000024 00000007621 11152333126 024210 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCEditorManager_h_ #define _PCEditorManager_h_ #import #import #import @class PCProjectManager; @interface PCEditorManager : NSObject { PCProjectManager *_projectManager; NSMutableDictionary *_editorsDict; id _activeEditor; NSString *editorName; } // =========================================================================== // ==== Initialisation // =========================================================================== - (id)init; - (void)dealloc; - (PCProjectManager *)projectManager; - (void)setProjectManager:(PCProjectManager *)aProjectManager; - (void)loadPreferences:(NSNotification *)aNotification; // =========================================================================== // ==== Project and Editor handling // =========================================================================== // Returns nil if editor is not opened - (id)editorForFile:(NSString *)filePath; - (id)openEditorForFile:(NSString *)path editable:(BOOL)editable windowed:(BOOL)windowed; - (void)orderFrontEditorForFile:(NSString *)path; - (id)activeEditor; - (void)setActiveEditor:(id)anEditor; - (NSArray *)allEditors; - (void)closeActiveEditor:(id)sender; - (void)closeEditorForFile:(NSString *)file; - (NSArray *)modifiedFiles; - (BOOL)hasModifiedFiles; - (BOOL)reviewUnsaved:(NSArray *)modifiedFiles; - (BOOL)closeAllEditors; // =========================================================================== // ==== File handling // =========================================================================== - (BOOL)saveAllFiles; - (BOOL)saveFile; - (BOOL)saveFileAs:(NSString *)file; - (BOOL)saveFileTo:(NSString *)file; - (BOOL)revertFileToSaved; // =========================================================================== // ==== Delegate // =========================================================================== - (void)editorDidOpen:(NSNotification *)aNotif; - (void)editorDidClose:(NSNotification *)aNotif; - (void)editorDidBecomeActive:(NSNotification *)aNotif; - (void)editorDidResignActive:(NSNotification *)aNotif; - (void)editorDidChangeFileName:(NSNotification *)aNotif; @end extern NSString *PCEditorDidChangeFileNameNotification; extern NSString *PCEditorWillOpenNotification; extern NSString *PCEditorDidOpenNotification; extern NSString *PCEditorWillCloseNotification; extern NSString *PCEditorDidCloseNotification; extern NSString *PCEditorWillChangeNotification; extern NSString *PCEditorDidChangeNotification; extern NSString *PCEditorWillSaveNotification; extern NSString *PCEditorDidSaveNotification; extern NSString *PCEditorWillRevertNotification; extern NSString *PCEditorDidRevertNotification; extern NSString *PCEditorDidBecomeActiveNotification; extern NSString *PCEditorDidResignActiveNotification; /* extern NSString *PCEditorSaveDidFailNotification; */ #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectLoadedFilesPanel.h000644 001751 000024 00000002416 11126423157 026153 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003-2004 Free Software Foundation Authors: 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_ #import @class PCProjectManager; @interface PCProjectLoadedFilesPanel : NSPanel { PCProjectManager *projectManager; PCProject *currentProject; NSBox *contentBox; NSBox *emptyBox; } - (id)initWithProjectManager:(PCProjectManager *)aManager; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/ProjectCenter.h000644 001751 000024 00000003025 11126423157 024012 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html 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 _ProjectCenter_h_ #define _ProjectCenter_h_ #import #import #import #import #import #import #import #import #import #import #import #import #import #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCFileNameField.h000644 001751 000024 00000002235 10544200137 024106 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: 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 _PCFileNameField_h_ #define _PCFileNameField_h_ @class NSTextField; extern NSString *PCFileNameFieldNoFiles; @interface PCFileNameField : NSTextField { } - (void)setEditableField:(BOOL)yn; - (BOOL)textShouldSetEditable:(NSString *)text; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCLogController.h000644 001751 000024 00000003222 11126423157 024252 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001 Free Software Foundation 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 _PCLOGCONTROLLER_H #define _PCLOGCONTROLLER_H #import #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; } + (PCLogController *)sharedLogController; - (void)showPanel; - (void)logMessage:(NSString *)message withTag:(int)tag sender:(id)sender; - (void)putMessageOnScreen:(NSAttributedString *)message; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectLauncher.h000644 001751 000024 00000004246 11127452004 024556 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProjectDebugger_h_ #define _PCProjectDebugger_h_ #import #import @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; id debugger; BOOL _isRunning; BOOL _isDebugging; } - (id)initWithProject:(PCProject *)aProject; - (void)dealloc; - (NSView *) componentView; - (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 ProjectCenter-0.6.1/Headers/ProjectCenter/PCFileNameIcon.h000644 001751 000024 00000003275 11142676544 023776 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2005 Free Software Foundation Authors: 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 _PCFileNameIcon_h_ #define _PCFileNameIcon_h_ @class NSImageView; @interface PCFileNameIcon : NSImageView { NSString *filePath; NSTextField *fileNameField; id delegate; } - (void)setFileNameField:(NSTextField *)field; - (void)setDelegate:(id)object; - (void)updateIcon; @end @interface PCFileNameIcon (FileNameIconDelegate) // --- NSDraggingDestination protocol methods - (NSImage *)fileNameIconImage; - (NSString *)fileNameIconTitle; - (NSString *)fileNameIconPath; - (BOOL)canPerformDraggingOf:(NSArray *)paths; - (BOOL)prepareForDraggingOf:(NSArray *)paths; - (BOOL)performDraggingOf:(NSArray *)paths; - (BOOL)concludeDraggingOf:(NSArray *)paths; // --- NSDraggingSource protocol methods - (void)draggedImage:(NSImage *)anImage beganAt:(NSPoint)aPoint; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectBuilderOptions.h000644 001751 000024 00000003273 11161270542 025761 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2007 Free Software Foundation Authors: Philippe C.D. Robert Sergii Stoian 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. */ #import @class PCProject; @interface PCProjectBuilderOptions : NSObject { PCProject *project; id delegate; // Usually PCProjectBuilder NSPanel *optionsPanel; NSPopUpButton *targetPopup; NSTextField *buildArgsField; NSButton *verboseButton; // messages=yes NSButton *debugButton; // debug=no NSButton *stripButton; // strip=yes NSButton *sharedLibsButton; // shared=no } - (id)initWithProject:(PCProject *)aProject delegate:(id)aDelegate; - (void)show:(NSRect)builderRect; - (NSString *)buildTarget; - (void)loadProjectProperties:(NSNotification *)aNotif; @end @interface PCProjectBuilderOptions (Delegate) - (void)targetDidSet:(NSString *)aTarget; @end ProjectCenter-0.6.1/Headers/ProjectCenter/PCAddFilesPanel.h000644 001751 000024 00000002753 11126423157 024130 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2004 Free Software Foundation Authors: 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 _PCAddFilesPanel_h_ #define _PCAddFilesPanel_h_ //#import #import @interface PCAddFilesPanel : NSOpenPanel { NSBox *fileTypeAccessaryView; NSPopUpButton *fileTypePopup; } + (PCAddFilesPanel *)addFilesPanel; - (void)setCategories:(NSArray *)categories; - (void)selectCategory:(NSString *)category; - (NSString *)selectedCategory; - (void)setFileTypes:(NSArray *)fileTypes; - (void)filesForAddPopupClicked:(id)sender; @end @interface NSObject (PCAddFilesPanelDelegate) - (void)categoryChangedTo:(NSString *)category; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectBuilderPanel.h000644 001751 000024 00000002446 11126423157 025371 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003 Free Software Foundation Authors: 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 _PCProjectBuilderPanel_h_ #define _PCProjectBuilderPanel_h_ #import @class PCProjectManager; @interface PCProjectBuilderPanel : NSPanel { PCProjectManager *projectManager; PCProject *currentProject; NSWindow *panel; NSBox *contentBox; NSBox *emptyBox; } - (id)initWithProjectManager:(PCProjectManager *)aManager; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectInspector.h000644 001751 000024 00000015072 11504531142 024762 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola German Arias 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_ #import #import @class PCProjectManager; @class PCProjectBrowser; @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; 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 NSPopUpButton *installDomainPopup; IBOutlet NSTextField *toolField; // Project Attributes // Suplied by concrete project IBOutlet NSView *projectAttributesView; NSView *projectAttributesSubview; IBOutlet NSTextField *projectTypeField; IBOutlet NSTextField *projectNameField; IBOutlet NSPopUpButton *projectLanguagePB; // 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; // Project Languages IBOutlet NSBox *projectLanguagesView; IBOutlet NSTableView *languagesList; IBOutlet NSTextField *newLanguage; NSMutableArray *languagesItems; // File Attributes IBOutlet NSBox *fileAttributesView; IBOutlet PCFileNameIcon *fileIconView; IBOutlet PCFileNameField *fileNameField; NSString *fileName; IBOutlet NSButton *localizableButton; IBOutlet NSButton *publicHeaderButton; IBOutlet NSButton *projectHeaderButton; } // ============================================================================ // ==== 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 Attributes // ============================================================================ - (void)createProjectAttributes; - (void)setCurrentLanguage:(id)sender; // ============================================================================ // ==== Project Description // ============================================================================ - (void)createProjectDescription; // ============================================================================ // ==== Project Languages // ============================================================================ - (void)createProjectLanguages; - (void)addLanguage:(id)sender; - (void)removeLanguage:(id)sender; // ============================================================================ // ==== File Attributes // ============================================================================ - (void)createFileAttributes; - (void)updateFileAttributes; - (void)beginFileRename; - (void)fileNameDidChange:(id)sender; - (void)setPublicHeader:(id)sender; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectWindow.h000644 001751 000024 00000007367 11164512621 024276 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProjectWindow_h_ #define _PCProjectWindow_h_ #import #import #import @class PCProject; @class PCProjectBrowser; @class PCProjectLoadedFiles; @class PCButton; @interface PCProjectWindow : NSObject { PCProject *project; NSWindow *projectWindow; NSBox *toolbarView; PCButton *buildButton; PCButton *launchButton; PCButton *loadedFilesButton; PCButton *findButton; PCButton *inspectorButton; NSTextField *statusLine; PCFileNameIcon *fileIcon; PCFileNameField *fileIconTitle; NSView *browserView; NSSplitView *h_split; NSSplitView *v_split; NSBox *customView; NSResponder *firstResponder; BOOL _isToolbarVisible; BOOL _hasCustomView; BOOL _hasLoadedFilesView; BOOL _splitViewsRestored; } // ============================================================================ // ==== Intialization & deallocation // ============================================================================ - (id)initWithProject:(PCProject *)owner; - (void)setTitle; // ============================================================================ // ==== Accessory methods // ============================================================================ - (NSView *)customContentView; - (void)setCustomContentView:(NSView *)subview; - (void)updateStatusLineWithText:(NSString *)text; // ============================================================================ // ==== 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 ProjectCenter-0.6.1/Headers/ProjectCenter/PCFileCreator.h000644 001751 000024 00000005045 11144145373 023672 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCFileCreator_h_ #define _PCFileCreator_h_ #import #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 PCFileCreator : NSObject { PCProject *activeProject; NSMutableString *file; // New File in Project panel IBOutlet NSPanel *newFilePanel; IBOutlet NSImageView *nfImage; IBOutlet NSPopUpButton *nfTypePB; IBOutlet NSTextView *nfDescriptionTV; IBOutlet NSTextField *nfNameField; IBOutlet NSButton *nfCancelButton; IBOutlet NSButton *nfCreateButton; IBOutlet NSButton *nfAddHeaderButton; } + (id)sharedCreator; - (NSDictionary *)creatorDictionary; - (void)newFileInProject:(PCProject *)aProject; - (void)createFileOfType:(NSString *)fileType path:(NSString *)path project:(PCProject *)project; // Return list of file paths for creation - (NSDictionary *)filesToCreateForFileOfType:(NSString *)type path:(NSString *)path withComplementary:(BOOL)complementary; - (BOOL)createFiles:(NSDictionary *)fileList inProject:(PCProject *)aProject; - (void)replaceTagsInFileAtPath:(NSString *)newFile withProject:(PCProject *)aProject; @end @interface PCFileCreator (UInterface) - (void)showNewFilePanel; - (void)closeNewFilePanel:(id)sender; - (void)createFile:(id)sender; - (void)newFilePopupChanged:(id)sender; - (void)controlTextDidChange:(NSNotification *)aNotif; - (BOOL)createFile; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCSaveModified.h000644 001751 000024 00000003640 11150336705 024027 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCSaveModified_h_ #define _PCSaveModified_h_ #import BOOL PCRunSaveModifiedFilesPanel(PCEditorManager *manager, NSString *defaultText, NSString *alternateText, NSString *otherText); @interface PCSaveModified : NSObject { PCEditorManager *editorManager; NSWindow *panel; NSTableView *filesList; NSButton *defaultButton; NSButton *alternateButton; NSButton *otherButton; NSButton *clickedButton; } - (BOOL)saveFilesWithEditorManager:(PCEditorManager *)manager defaultButtonText:(NSString *)defaultText alternateButtonText:(NSString *)alternateText otherButtonText:(NSString *)otherText; - (void)dealloc; - (BOOL)saveSelectedFiles; // TableView delegate - (int)numberOfRowsInTableView:(NSTableView *)aTableView; - (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectManager.h000644 001751 000024 00000014307 11220252526 024367 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProjectManager_h_ #define _PCProjectManager_h_ #import #import @class PCBundleManager; @class PCFileManager; @class PCEditorManager; @class PCProject; @class PCProjectInspector; @class PCProjectBuilder; @class PCProjectLauncher; @class PCProjectLoadedFiles; @class PCProjectFinder; @class NewSubprojectController; extern NSString *PCActiveProjectDidChangeNotification; @interface PCProjectManager : NSObject { id delegate; id prefController; PCBundleManager *bundleManager; NSMutableDictionary *projectTypes; PCFileManager *fileManager; PCEditorManager *editorManager; PCProjectInspector *projectInspector; NSPanel *buildPanel; NSPanel *launchPanel; NSPanel *loadedFilesPanel; NSPanel *findPanel; NSMutableDictionary *loadedProjects; PCProject *activeProject; NSTimer *saveTimer; 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; } // ============================================================================ // ==== Intialization & deallocation // ============================================================================ - (id)init; - (BOOL)close; - (void)dealloc; - (void)setDelegate:(id)aDelegate; - (id)delegate; - (void)setPrefController:(id)aController; - (id )prefController; - (void)createProjectTypeAccessaryView; - (NSMutableDictionary *)loadProjectTypesInfo; // ============================================================================ // ==== Timer handling // ============================================================================ - (BOOL)startSaveTimer; - (BOOL)resetSaveTimer:(NSNotification *)notif; - (BOOL)stopSaveTimer; // ============================================================================ // ==== Accessory methods // ============================================================================ - (PCBundleManager *)bundleManager; - (PCFileManager *)fileManager; - (PCEditorManager *)editorManager; - (PCProjectInspector *)projectInspector; - (NSPanel *)inspectorPanel; - (void)showProjectInspector:(id)sender; - (NSPanel *)loadedFilesPanel; - (void)showProjectLoadedFiles:(id)sender; - (NSPanel *)buildPanel; - (NSPanel *)launchPanel; - (NSPanel *)projectFinderPanel; // ============================================================================ // ==== Project management // ============================================================================ // Returns all currently loaded projects. They are stored with their absolute // paths as keys. - (NSMutableDictionary *)loadedProjects; - (PCProject *)activeProject; - (PCProject *)rootActiveProject; - (void)setActiveProject:(PCProject *)aProject; // ============================================================================ // ==== Project actions // ============================================================================ - (PCProject *)convertLegacyProject:(NSMutableDictionary *)pDict atPath:(NSString *)aPath; - (PCProject *)openProjectAt:(NSString *)aPath makeActive: (BOOL)flag; - (void)openProject; - (PCProject *)createProjectOfType:(NSString *)projectType path:(NSString *)aPath; - (void)newProject; - (BOOL)saveProject; // Calls saveAllProjects if the preferences are setup accordingly. - (void)saveAllProjectsIfNeeded; // Saves all projects if needed. - (BOOL)saveAllProjects; - (BOOL)addProjectFiles; - (BOOL)saveProjectFiles; - (BOOL)removeProjectFiles; - (void)closeProject:(PCProject *)aProject; - (void)closeProject; - (BOOL)closeAllProjects; // ============================================================================ // ==== File actions // ============================================================================ // Also called by PCAppController - (void)openFileAtPath:(NSString *)filePath; - (void)openFile; - (void)newFile; - (BOOL)saveFile; - (BOOL)saveFileAs; - (BOOL)saveFileTo; - (BOOL)revertFileToSaved; - (BOOL)renameFile; - (void)closeFile; @end @interface NSObject (PCProjectManagerDelegates) - (void)projectManager:(id)sender willCloseProject:(PCProject *)aProject; - (void)projectManager:(id)sender didCloseProject:(PCProject *)aProject; - (void)projectManager:(id)sender didOpenProject:(PCProject *)aProject; - (BOOL)projectManager:(id)sender shouldOpenProject:(PCProject *)aProject; @end @interface NewSubprojectController : NSWindowController { id image; id nameTextField; id typePopup; id createButton; id cancelButton; } @end @interface PCProjectManager (Subprojects) - (BOOL)openNewSubprojectPanel; - (void)closeNewSubprojectPanel:(id)sender; - (void)createSubproject:(id)sender; - (PCProject *)createSubprojectOfType:(NSString *)projectType path:(NSString *)aPath; - (BOOL)addSubproject; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCProjectLoadedFiles.h000644 001751 000024 00000004110 11126423157 025164 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCProjectLoadedFiles_h_ #define _PCProjectLoadedFiles_h_ #import @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 ProjectCenter-0.6.1/Headers/ProjectCenter/PCBundleManager.h000644 001751 000024 00000005641 11134211030 024160 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Author: Philippe C.D. Robert 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 _PCBundleManager_h_ #define _PCBundleManager_h_ #include @interface PCBundleManager : NSObject { NSMutableDictionary *loadedBundles; NSMutableDictionary *bundlesInfo; } //---------------------------------------------------------------------------- // Init and free methods //---------------------------------------------------------------------------- - (id)init; - (void)dealloc; - (NSString *)resourcePath; // --- Handling of bundles' Info.table dictionaries without actual // --- bundles loading - (NSDictionary *)infoForBundlesType:(NSString *)extension; // Key value can be checked against NSString and NSArray values only. - (NSDictionary *)infoForBundleType:(NSString *)extension keyName:(NSString *)key keyContains:(NSString *)value; - (NSDictionary *)infoForBundleName:(NSString *)name type:(NSString *)type; - (NSString *)classNameForBundleType:(NSString*)type fileName:(NSString *)fileName; - (NSString *)bundlePathWithName:(NSString *)bundleName; // --- Invokes loading of bundle - (id)objectForClassName:(NSString *)className bundleType:(NSString *)bundleExtension protocol:(Protocol *)proto; - (id)objectForBundleWithName:(NSString *)name type:(NSString *)extension protocol:(Protocol *)proto; - (id)objectForBundleType:(NSString *)extension protocol:(Protocol *)proto fileName:(NSString *)fileName; - (NSBundle *)bundleOfType:(NSString *)type withClassName:(NSString *)className; // --- Bundle loading - (BOOL)loadBundleIfNeededWithName:(NSString *)bundleName; // Load all bundles found in the BundlePaths - (void)loadBundlesWithExtension:(NSString *)extension; - (void)loadBundlesAtPath:(NSString *)path withExtension:(NSString *)extension; - (BOOL)loadBundleWithFullPath:(NSString *)path; // Returns all loaded ProjectCenter bundles. - (NSDictionary *)loadedBundles; @end @interface NSObject (BundleManagerDelegates) - (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle; @end #endif ProjectCenter-0.6.1/Headers/ProjectCenter/PCMakefileFactory.h000644 001751 000024 00000003767 11126423157 024550 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCMakefileFactory_h_ #define _PCMakefileFactory_h_ #import @class PCProject; @interface PCMakefileFactory : NSObject { NSMutableString *mfile; NSString *pnme; } + (PCMakefileFactory *)sharedFactory; - (void)createMakefileForProject:(PCProject *)project; - (BOOL)createPreambleForProject:(PCProject *)project; - (BOOL)createPostambleForProject:(PCProject *)project; - (void)appendString:(NSString *)aString; - (void)appendLibraries:(NSArray *)array; - (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:(NSArray *)array inDir:(NSString *)dir; - (void)appendLocalizedResources:(NSArray *)resources forLanguages:(NSArray *)languages; - (void)appendSubprojects:(NSArray*)array; - (NSData *)encodedMakefile; @end #endif ProjectCenter-0.6.1/Headers/Protocols/CodeEditorView.h000644 001751 000024 00000002037 11410634754 023341 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2010 Free Software Foundation Authors: Riccardo Mottola 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. */ #import #import @protocol CodeEditorView - (NSObject *)editor; @end ProjectCenter-0.6.1/Headers/Protocols/CodeDebugger.h000644 001751 000024 00000003642 11126423157 023004 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2008 Free Software Foundation Authors: Gregory Casamento 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 _CodeDebugger_h_ #define _CodeDebugger_h_ #import #import @protocol CodeDebugger // =========================================================================== // ==== Initialization // =========================================================================== - (void)debugExecutableAtPath:(NSString *)filePath withDebugger: (NSString *)debuggerPath; - (void)show; // =========================================================================== // ==== Accessor methods // =========================================================================== - (NSWindow *)debuggerWindow; - (void)setDebuggerWindow: (NSWindow *)window; - (NSView *)debuggerView; - (void)setDebuggerView: (id)view; - (NSString *)path; - (void)setPath:(NSString *)path; // =========================================================================== // ==== Accessor methods // =========================================================================== - (void) startDebugger; @end #endif ProjectCenter-0.6.1/Headers/Protocols/CodeEditor.h000644 001751 000024 00000005271 11146127423 022505 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2005 Free Software Foundation Authors: 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 _CodeEditor_h_ #define _CodeEditor_h_ #import #import @protocol CodeEditor // =========================================================================== // ==== Initialization // =========================================================================== - (void)setParser:(id)parser; // Usually delegate is PCEditorManager or PCEditorManager - (id)openFileAtPath:(NSString *)filePath editorManager:(id)editorManager editable:(BOOL)editable; - (void)show; - (void)setWindowed:(BOOL)yn; - (BOOL)isWindowed; // =========================================================================== // ==== Accessor methods // =========================================================================== - (id)editorManager; - (NSWindow *)editorWindow; - (NSView *)editorView; - (NSView *)componentView; - (NSString *)path; - (void)setPath:(NSString *)path; - (NSString *)categoryPath; - (void)setCategoryPath:(NSString *)path; - (BOOL)isEdited; - (void)setIsEdited:(BOOL)yn; - (NSImage *)fileIcon; // Returns class or method names - (NSArray *)browserItemsForItem:(NSString *)item; // =========================================================================== // ==== Object managment // =========================================================================== - (BOOL)saveFileIfNeeded; - (BOOL)saveFile; - (BOOL)saveFileTo:(NSString *)path; - (BOOL)revertFileToSaved; - (BOOL)closeFile:(id)sender save:(BOOL)save; - (BOOL)close:(id)sender; // =========================================================================== // ==== Parser and scrolling // =========================================================================== - (void)fileStructureItemSelected:(NSString *)item; - (void)scrollToLineNumber:(unsigned int)lineNumber; @end #endif ProjectCenter-0.6.1/Headers/Protocols/Preferences.h000644 001751 000024 00000003711 11157302573 022725 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2005 Free Software Foundation Authors: 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 _PCPreferencesProtocols_h_ #define _PCPreferencesProtocols_h_ #import #define PCSavePeriodDidChangeNotification @"PCSavePeriodDidChangeNotification" #define PCPreferencesDidChangeNotification @"PCPreferencesDidChangeNotification" @protocol PCPreferences - (NSString *)stringForKey:(NSString *)key; - (NSString *)stringForKey:(NSString *)key defaultValue:(NSString *)defaultValue; - (BOOL)boolForKey:(NSString *)key; - (BOOL)boolForKey:(NSString *)key defaultValue:(BOOL)defaultValue; - (float)floatForKey:(NSString *)key; - (float)floatForKey:(NSString *)key defaultValue:(float)defaultValue; - (void)setString:(NSString *)stringValue forKey:(NSString *)aKey notify:(BOOL)notify; - (void)setBool:(BOOL)boolValue forKey:(NSString *)aKey notify:(BOOL)notify; - (void)setFloat:(float)floatValue forKey:(NSString *)aKey notify:(BOOL)notify; @end @protocol PCPrefsSection - (id)initWithPrefController:(id )aPrefs; - (void)readPreferences; - (NSView *)view; @end #endif ProjectCenter-0.6.1/Headers/Protocols/CodeParser.h000644 001751 000024 00000002210 11126423157 022502 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2005 Free Software Foundation Authors: 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 _CodeParserProtocol_h_ #define _CodeParserProtocol_h_ #import @class PCEditor; @protocol CodeParser - (id)setString:(NSString *)text; - (NSArray *)classNames; - (NSArray *)methodNames; @end #endif ProjectCenter-0.6.1/Headers/Protocols/ProjectType.h000644 001751 000024 00000002524 11126423157 022733 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html 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 _PROJECTTYPE_H #define _PROJECTTYPE_H /* Description: A ProjectType is used to create a project of a certain type. With this approach this procedure can be implemented as a bundle and therefore PC remains open for future extensions! */ #import @class PCProject; @protocol ProjectType - (PCProject *)createProjectAt:(NSString *)path; @end #endif ProjectCenter-0.6.1/Resources/Info-gnustep.plist000644 001751 000024 00000004045 11765637750 022377 0ustar00multixstaff000000 000000 { NOTE = "Automatically generated, do not edit!"; ApplicationName = "ProjectCenter"; ApplicationDescription = "GNUstep Integrated Development Environment"; ApplicationIcon = "ProjectCenter.tiff"; ApplicationRelease = "0.6.1"; FullVersionID = "HEAD"; Authors = ( "Philippe C.D. Robert", "Serg Stoyan", "David Ayers", "Richard Frith-Macdonald", "Nicola Pero", "Pierre-Yves Rivaille", "Adam Fedor", "Gregory Jonh Casamento", "Riccardo Mottola"); NSIcon = "ProjectCenter.tiff"; NSExecutable = ProjectCenter; NSMainNibFile = ProjectCenter.gorm; NSPrincipalClass = NSApplication; NSRole = "Editor"; NSTypes = ( { NSDocumentClass = PCProjectDocument; NSHumanReadableName = "GNUstep project"; NSIcon = FileProject.tiff; NSName = GSPCProjectFileType; NSRole = Editor; NSUnixExtensions = ( project ); }, { NSDocumentClass = PCProjectDocument; NSHumanReadableName = "GNUstep project"; NSIcon = FileProject.tiff; NSName = GSPCProjectFileType; NSRole = Editor; NSUnixExtensions = ( pcproj ); }, { NSDocumentClass = PCClassDocument; NSHumanReadableName = "Objective C class file"; NSIcon = ProjectCenter.editor/Resources/FileM.tiff; NSName = GSPClassType; NSRole = Editor; NSUnixExtensions = ( m ); }, { NSDocumentClass = PCHeaderDocument; NSHumanReadableName = "C or Objective C header file"; NSIcon = ProjectCenter.editor/Resources/FileH.tiff; NSName = GSPCHeaderType; NSRole = Editor; NSUnixExtensions = ( h ); }, { NSDocumentClass = PCCDocument; NSHumanReadableName = "C file"; NSIcon = ProjectCenter.editor/Resources/FileC.tiff; NSName = GSPCCType; NSRole = Editor; NSUnixExtensions = ( c, C, cp, cpp, c++ ); } ); URL = "See http://www.gnustep.org/"; Copyright = "Copyright (C) 1999 - 2012 Free Software Foundation"; CopyrightDescription = "Released under the GNU General Public License 3.0 or later"; } ProjectCenter-0.6.1/Documentation/BUGS000644 001751 000024 00000006361 11162516075 020254 0ustar00multixstaff000000 000000 KNOWN BUGS: ~~~~~~~~~~ - [bug #25571] exception on removing author in project inspector. This happens to me with project-center-0.5.0. in the Project Inspector -> Project Description, click the Add button to add an Author now the text input field is active, to add an author, as long as this is active, and then pressing remove button, to remove an author, then PC exits with the following exception: NSRangeException: Index 1 is out of range 1 (in 'removeObjectAtIndex:') - [sr #106614] ProjectCenter, document type extensions. In the project center project properties editor, if there are several extensions separated bya space, they should be encoded as element arrays - [bug #25193] pc fails to load project from ImageViewer.pc.project. - [bug #22815] ProjectCenter won't open a new project . [doesn't work for me] - [bug #22411] font types in ProjectCenter Editor. - [bug #22441] Usability: Project Center should have a separate project type for Renaissance based applications - [bug #22124] ProjectCenter doesn't support extra entries in Plist. - [bug #22008] Project Center should support more flexible directory configurations. - [bug #22026] ProjectCenter should split up project file. - [bug #11931] Build before launch on change. - [bug #20858] UI components (editor, builder, launcher). The latest change fixes the initial problem but introduces a new one! The new issue is that doesn't matter what I check or uncheck on the Interface Preferences the only thing that is shown is the Editor in the SplitView. It's reproducable every time, no matter what. All you need to do is check every option, so that only the browser will be shown, then uncheck random options. On another note, but still related, when the Editor is shown (after being hidden by the preferences) it doesn't preserve it's previous size. RELEASE CRTITICAL UNKNOWN BUGS: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ProjectBuilder's incorrectly parses output of gnustep-make (incorrect directories, incorrectly recognises initial point of error etc.). - Browser must be double checked for correct behaviour on browsing, file removal, opening editor (currently is bad). - It seems that changing subproject's attributes doesn't change 'edited' state of project window. - Removing files works bad (crashes, strange warnings, exceptions). Check it! Maybe this happens only in subprojects... It may be connected to browser's functionality. - PC tries to load internal editor for .gorm files. Fix it!!! - Setting localizable resources through inspector works bad. Double check it and fix!!! Also check this functionality when multiple files selected. - Double check support for "Resource Set" project type as subproject of existing projecttypes. - WHISH LIST: ~~~~~~~~~~ + Open panel with list of modified files on project close and project build. - Think about browser initial responder status: now very uncomfortable to find some file in browser list when editor is open. - "Project Attributes" for Application should be reviewed after split of "Application" to "Application" and "Renaissance" project types. - Add setting to preferences "Create template-based files on project creation". It should allow to switch off creation of .m, .h, .gorm files from templates. ProjectCenter-0.6.1/Documentation/SCHEME000644 001751 000024 00000005025 10631362633 020453 0ustar00multixstaff000000 000000 +- 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: ---------- - 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. - Add "Installable" or something to "Bundle" project type project attributes. Localization: ~~~~~~~~~~~~~ - On project creation, all resources go to Resources subdir and placed into GNUmakefile as *_RESOURCE_FILES; [done!] - If some file from [PC*Proj localizableKeys] categories selected as "Localizable Resource", that file removed from *_RESOURCE_FILES and placed into *_LOCALIZED_RESOURCE_FILES (for directories: Resources->Language.lproj); - in PC.project add USER_LANGUAGES=(); [done!] - in PC.project add LOCALIZED_RESOURCES=(); [done!] ProjectCenter-0.6.1/Documentation/AUTHORS000644 001751 000024 00000000600 10553176365 020636 0ustar00multixstaff000000 000000 Authors: Philippe C.D. Robert Sergii Stoian Contributors: David Ayers Richard Frith-Macdonald Nicola Pero Pierre-Yves Rivaille Adam Fedor Daniel Luederwald Gregory Jonh Casamento ProjectCenter-0.6.1/Documentation/ChangeLog-1000644 001751 000024 00000216526 10062333346 021503 0ustar00multixstaff000000 000000 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 ProjectCenter-0.6.1/Documentation/TODO000644 001751 000024 00000013644 11422267737 020272 0ustar00multixstaff000000 000000 TODO **** This is the GNUstep ProjectCenter TODO list. Feel free to propose changes to this list or make suggestions! ProjectCenter 0.4 Owner/Status ----------------- ------------ - Review and cleanup of PC project bundles/templates [done!] - Finish Project Inspector [done!] - Inspector UI using Gorm [done!] - File creation (File->New in project) cleanup and finishing [done!] - Initial suprojects support [done!] - Finish support of external editors [done!] - Preferences enhancements and UI using Gorm [done!] - Remember project windows and panels in PC.project [done!] ProjectCenter 0.5 ----------------- - Create ProjectWindow GORM file [done!] - Add "Framework" project type [done!] - Add "Resource Set" project type [done!] - Implement on demand loading of bundles [done!] - Localization support for projects [done!] - Finish save/restore size of split views in Project Window [done!] --- Project Editor: - Implement on demand loading (editor for file type) [done!] - Open some files read only (Supporting Files) [done!] - Implement code parser (get it from CodeEditor?) [done!] - Project Browser should show file structure. [done!] - Click on Browser item should move cursor to line in file [done!] --- Project Builder: - Create panel and builder GORM files [done!] - Implement root build directory handling [done!] - Finish options handling [done!] - Parse gcc output [95% done!] - Display warnings,errors,options etc. as clickable list [done!] - GNUstep make version 2.0 compliance [done!] - Save last used path separately for different file panels [done!] ProjectCenter 0.6 ----------------- - Create new Info panel [done!] - Implement support for integrated debugging [90% done] - change project type from file to bundle [done!] casamento/mottola - Finish FileNameIcon (draggable, files can be dragged to it) [done!] - More options for file creation [done!] - Review all situations when dialogs must be popped up [done!] - Check all textfields if 'scrollable' attribute set [done!] - Rewrite Preferences (3rd party sections etc.) [done!] --- Project Builder -------------------------------------------- - Review build, compiler, linker options setting (Build Options, Inspector) [done!] - Finish parsing build output (compiler errors/warnings, make errors, gnustep-make verbose mode) stoyan - Finish interaction with Editor (errors, warnings) stoyan - Add support for running configurable(Build Options) command before and after make stoyan --- Project Editor --------------------------------------------- - review situations when editor is opened stoyan - implement go to line stoyan - Implement interaction with Builder (errors, warnings) stoyan - Implement indentation stoyan - implement undo inside editor [done!] - Add and use basic editor preferences (fonts, colors, sizes) [50% done] --- Project Inspector ------------------------------------------ - Make sections as loadable bundles stoyan - Finish functionality of all sections stoyan - Review all sections for correct behaviour stoyan - Split "Application" to "Application GORM" and "Application Renaissance" project types stoyan - Add "Palette" project type ??? - Add "Component" project type ??? - Process reported bugs ??? - Think about imlementing pending adding/removal of files ??? - New icons. Need volunteers!!! ??? ProjectCenter 0.7 ----------------- - Finish suppor of integrated debugging ??? - Add support for browsing 'Library' category entries ??? - Add support for non-project files ??? - Implement symbols indexing. This feature touches Browser (class and method list) and Editor (autocompletion) ??? - Editor: implement autocompletion ??? - An initial project wide find feature ??? - Better integration with other tools (GORM). DevKit? ??? ProjectCenter 0.8 ----------------- - Implement code folding in Editor ??? - Direct code documentation (using autogsdoc) ??? - Think about adopting existing directory tree (more flexible directory configurations) [bug #22008] ??? ProjectCenter 0.9 ----------------- - ProjectCenter localization ??? - Initial user documentation ??? - Implement Plist editor for editing project files[bug #22124] ??? - 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. After 1.0 --------- - CVS/SVN integration ??? ProjectCenter-0.6.1/Documentation/ANNOUNCE000644 001751 000024 00000004043 10631362633 020714 0ustar00multixstaff000000 000000 ANNOUNCE ******** This is version 0.5.0 of ProjectCenter. What is ProjectCenter? ====================== ProjectCenter is GNUstep IDE(Intergated Development Environment) application. It is a clone of the OPENSTEP ProjectBuilder application for GNUstep. ProjectCenter is covered under the GNU General 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 Documentation/COPYING file for more information. Noteworthy changes in version `0.5.0'. ====================================== * Added new project types "Framework" and "Resource Set". * Implemented on demand loading of bundles (project types, editor). * Impemented localization support for projects. * Some user interface ehnancements were made (save/restore geometry of subviews in project window splitview, drag and drop for icons). * Clicking on .m and .h file in project browser expands to file structure (classes, methods). * Incorporated ProjectManager's editor with some modifications. Implemented syntax color highlighting. * All windows and panels are now GORM files. * Fixes for MingW environment. * Support for separate build directory added. 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 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/') ProjectCenter-0.6.1/Documentation/INSTALL000644 001751 000024 00000000716 10063657415 020623 0ustar00multixstaff000000 000000 Installation ************ This file documents the installation of the GNUstep ProjectCenter application. Installing `ProjectCenter' ========================= ProjectCenter requires GNUstep core to be installed. Make sure that you have the latest released version installed. Here is the quick way of building and installing ProjectCenter: cd ProjectCenter; make; make install; By default ProjectCenter gets installed under GNUSTEP_SYSTEM_ROOT. ProjectCenter-0.6.1/Documentation/COPYING000644 001751 000024 00000043076 10062333346 020624 0ustar00multixstaff000000 000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02111, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02111, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ProjectCenter-0.6.1/Documentation/README000644 001751 000024 00000001523 10065152530 020435 0ustar00multixstaff000000 000000 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 Documentation/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/experience/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, current maintainer is Serg Stoyan, but others have contributed a lot to the current state of the project (see Documentatio/AUTHORS). Many of the icons have been created by Andrew Lindsay. ProjectCenter-0.6.1/Documentation/README.contributions000644 001751 000024 00000002232 10062333346 023337 0ustar00multixstaff000000 000000 ProjectCenter Contributions =========================== Contributions are welcome! You can either send code diffs or new stuff to be added to the maintainer of ProjectCenter () or apply the change by yourself if you have write access to the CVS. If you plane to apply changes by yourself please consider to following rules: - Major features will first have to be approved, please contact the maintainer beforehand! This is because we want to keep the project as much focused as possible and not because we do not trust you! - If a feature is approved for a particular version it can be commited to the appropriate CVS branch, this might be HEAD or RELEASE_X_Y_Z. - If a feature is not yet approved for a specific release it might go into the respective UNSTABLE_X_Y tree. Changes from this branch will then later be merged into HEAD, if it makes sense. Remember, these rules are made to enhance the quality of the project and to be able to stick to our release plan! However if you think these rules have some weaknesses please let us know, so that we can discuss it! ProjectCenter-0.6.1/Modules/Parsers/000755 001751 000024 00000000000 11766110766 020010 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/000755 001751 000024 00000000000 11766110766 020632 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Debuggers/000755 001751 000024 00000000000 11766110766 020300 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/GNUmakefile.bundles000644 001751 000024 00000001256 10730305556 022073 0ustar00multixstaff000000 000000 # # Options common to bundles # ADDITIONAL_OBJCFLAGS += ADDITIONAL_CFLAGS += ADDITIONAL_CPPFLAGS += ADDITIONAL_INCLUDE_DIRS += -I../../../ -I../../../Headers ADDITIONAL_LIB_DIRS += -L../../../Framework/ProjectCenter.framework/$(GNUSTEP_TARGET_LDIR) BUNDLE_INSTALL_DIR = $(GNUSTEP_APPS)/ProjectCenter.app/Resources $(BUNDLE_NAME)_STANDARD_INSTALL = no DO_LIB_LINK=no ifeq ($(GNUSTEP_TARGET_OS), mingw32) DO_LIB_LINK=yes endif ifeq ($(GNUSTEP_TARGET_OS), cygwin) DO_LIB_LINK=yes endif ifeq ($(DO_LIB_LINK), yes) $(GNUSTEP_INSTANCE)_LIB_DIRS += -L../../../Framework/ProjectCenter.framework/$(GNUSTEP_TARGET_LDIR) $(GNUSTEP_INSTANCE)_BUNDLE_LIBS += -lProjectCenter endif ProjectCenter-0.6.1/Modules/Editors/000755 001751 000024 00000000000 11766110766 020002 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/GNUmakefile000644 001751 000024 00000001761 11155274316 020442 0ustar00multixstaff000000 000000 # # GNUmakefile # # Here are the several types of modules (bundles): # # Project types: # - Aggregate # - Application # - Bundle # - Framework # - Library # - ResourceSet # - Tool # Editors: # - ProjectCenter -- default PC editor # Parsers: # - ObjectiveC -- that's it! # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # SUBPROJECTS = \ Projects/Aggregate \ Projects/Application \ Projects/Bundle \ Projects/Framework \ Projects/Library \ Projects/ResourceSet \ Projects/Tool \ \ Editors/ProjectCenter \ \ Parsers/ProjectCenter \ \ Preferences/Build \ Preferences/Saving \ Preferences/Misc \ Preferences/EditorFSC # Do not compile the Debuggers/ProjectCenter module on MinGW since I'm # told at the moment it doesn't even compile there. ifneq ($(GNUSTEP_TARGET_OS), mingw32) SUBPROJECTS += Debuggers/ProjectCenter endif include $(GNUSTEP_MAKEFILES)/aggregate.make ProjectCenter-0.6.1/Modules/Projects/000755 001751 000024 00000000000 11766110767 020163 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Application/000755 001751 000024 00000000000 11766110767 022426 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/ResourceSet/000755 001751 000024 00000000000 11766110767 022426 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Library/000755 001751 000024 00000000000 11766110767 021567 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Aggregate/000755 001751 000024 00000000000 11766110767 022051 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Bundle/000755 001751 000024 00000000000 11766110767 021374 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Framework/000755 001751 000024 00000000000 11766110767 022120 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Tool/000755 001751 000024 00000000000 11766110767 021100 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/000755 001751 000024 00000000000 11766110767 023052 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Tool/PCToolProject.m000644 001751 000024 00000026775 11474545755 023773 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola 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. */ #import #import #import #import "PCToolProject.h" @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)loadInfoFile { PCFileManager *pcfm = [PCFileManager defaultManager]; NSMutableArray *otherRes = nil; NSString *oldFile = [NSString stringWithString:@"Info-gnustep.plist"]; NSString *oldFilePath = nil; NSString *infoFile = nil; NSString *infoFilePath = nil; infoFile = [NSString stringWithFormat:@"%@Info.plist",projectName]; infoFilePath = [projectPath stringByAppendingPathComponent:infoFile]; // Old project with info file Info-gnustep.plist located in Resources // directory. Move it to parent directory and replace it in PCOtherResources. otherRes = [[projectDict objectForKey:PCOtherResources] mutableCopy]; if ([otherRes containsObject:oldFile]) { oldFilePath = [self dirForCategoryKey:PCOtherResources]; oldFilePath = [oldFilePath stringByAppendingPathComponent:oldFile]; [pcfm copyFile:oldFilePath toFile:infoFilePath]; [pcfm removeFileAtPath:oldFilePath removeDirsIfEmpty:YES]; [otherRes removeObject:oldFile]; [otherRes addObject:infoFile]; [self setProjectDictObject:otherRes forKey:PCSupportingFiles notify:NO]; RELEASE(otherRes); } if ([[NSFileManager defaultManager] fileExistsAtPath:infoFilePath]) { infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:infoFilePath]; } else { infoDict = [[NSMutableDictionary alloc] init]; } } - (void)dealloc { [rootCategories release]; [rootKeys release]; [rootEntries release]; [super dealloc]; } - (Class)builderClass { return [PCToolProject class]; } // ---------------------------------------------------------------------------- // --- ProjectType protocol // ---------------------------------------------------------------------------- - (PCProject *)createProjectAt:(NSString *)path { PCFileManager *pcfm = [PCFileManager defaultManager]; PCFileCreator *pcfc = [PCFileCreator sharedCreator]; NSBundle *projectBundle = nil; NSString *_file = nil; NSString *_2file = nil; NSString *_resourcePath; NSMutableArray *_array = nil; NSAssert(path,@"No valid project path provided!"); projectBundle = [NSBundle bundleForClass:[self class]]; _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; [projectDict initWithContentsOfFile:_file]; // Customise the project [self setProjectPath:path]; [self setProjectName:[path lastPathComponent]]; if ([[projectName pathExtension] isEqualToString:@"subproj"]) { projectName = [projectName stringByDeletingPathExtension]; } [projectDict setObject:projectName forKey:PCProjectName]; [projectDict setObject:[[NSCalendarDate date] description] forKey:PCCreationDate]; [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; [projectDict setObject:[NSUserDefaults userLanguages] forKey:PCUserLanguages]; // Copy the project files to the provided path _file = [projectBundle pathForResource:@"main" ofType:@"m"]; _2file = [path stringByAppendingPathComponent:@"main.m"]; [pcfm copyFile:_file toFile:_2file]; [pcfc replaceTagsInFileAtPath:_2file withProject:self]; // GNUmakefile.postamble [[PCMakefileFactory sharedFactory] createPostambleForProject:self]; _resourcePath = [path stringByAppendingPathComponent:@"Resources"]; [pcfm createDirectoriesIfNeededAtPath:_resourcePath]; // Info-gnutstep.plist _file = [projectBundle pathForResource:@"Info" ofType:@"gnustep"]; infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:_file]; [infoDict setObject:projectName forKey:@"ToolName"]; // Write to ProjectNameInfo.plist _file = [NSString stringWithFormat:@"%@Info.plist",projectName]; _2file = [projectPath stringByAppendingPathComponent:_file]; [infoDict writeToFile:_2file atomically:YES]; // Add Info-gnustep.plist into SUPPORTING_FILES _array = [[projectDict objectForKey:PCSupportingFiles] mutableCopy]; [_array addObject:_file]; [projectDict setObject:_array forKey:PCSupportingFiles]; RELEASE(_array); // Save the project to disc [self writeMakefile]; [self save]; return self; } //---------------------------------------------------------------------------- // --- PCProject overridings //---------------------------------------------------------------------------- - (PCProject *)openWithWrapperAt:(NSString *)path { [super openWithWrapperAt: path]; [self loadInfoFile]; return self; } @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:PCRelease]; [self writeInfoEntry:@"Authors" forKey:PCAuthors]; [self writeInfoEntry:@"URL" forKey:PCURL]; [self writeInfoEntry:@"Copyright" forKey:PCCopyright]; [self writeInfoEntry:@"CopyrightDescription" forKey:PCCopyrightDescription]; infoFile = [NSString stringWithFormat:@"%@Info.plist",projectName]; infoFile = [projectPath stringByAppendingPathComponent:infoFile]; return [infoDict writeToFile:infoFile atomically:YES]; } - (BOOL)writeMakefile { PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; int i,count; NSString *mfl = nil; NSData *mfd = nil; NSString *key = nil; NSMutableArray *resources = nil; NSArray *localizedResources = nil; // Info-gnustep.plist [self writeInfoFile]; // Save the GNUmakefile backup [super writeMakefile]; // Save GNUmakefile.preamble [mf createPreambleForProject:self]; // Create the new file [mf createMakefileForProject:self]; // Head [self appendHead:mf]; // Libraries depend upon [mf appendLibraries:[projectDict objectForKey:PCLibraries]]; // Subprojects if ([[projectDict objectForKey:PCSubprojects] count] > 0) { [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; } // Resources count = [[self resourceFileKeys] count]; resources = [[NSMutableArray alloc] initWithCapacity:1]; for (i = 0; i < count; i++) { key = [[self resourceFileKeys] objectAtIndex:i]; [resources addObjectsFromArray:[projectDict objectForKey:key]]; } // Remove localized resource files from gathered array localizedResources = [projectDict objectForKey:PCLocalizedResources]; for (i = [resources count] - 1; i >= 0; i--) { if ([localizedResources containsObject:[resources objectAtIndex:i]]) { [resources removeObjectAtIndex:i]; } } [mf appendResources:resources inDir:@"Resources"]; [resources release]; // Localization [mf appendLocalizedResources:localizedResources forLanguages:[projectDict objectForKey:PCUserLanguages]]; // Sources [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 { NSString *installDomain = [projectDict objectForKey:PCInstallDomain]; [mff appendString:@"\n#\n# Tool\n#\n"]; [mff appendString:[NSString stringWithFormat:@"VERSION = %@\n", [projectDict objectForKey:PCRelease]]]; [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]]]; /* FIXME %@_COPY_INTO_DIR needs to be properly reinstantiated as well as %@_STANDARD_INSTALL = no */ /* set the domain if it was specified */ if (!(installDomain == nil) && ![installDomain isEqualToString:@""]) { [mff appendString: [NSString stringWithFormat:@"GNUSTEP_INSTALLATION_DOMAIN = %@\n",[installDomain uppercaseString]]]; } } - (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 { } @end ProjectCenter-0.6.1/Modules/Projects/Tool/GNUmakefile000644 001751 000024 00000001150 11122717015 023130 0ustar00multixstaff000000 000000 # # GNUmakefile - ToolProject # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Tool BUNDLE_EXTENSION = .project Tool_PRINCIPAL_CLASS = PCToolProject # # Additional libraries # Tool_LIBRARIES_DEPEND_UPON += # # Resource files # Tool_RESOURCE_FILES= \ Resources/PC.project \ Resources/main.m \ Resources/Inspector.gorm \ Resources/Info.table \ Resources/Info.gnustep # # Header files # Tool_HEADERS= \ PCToolProject.h # # Class files # Tool_OBJC_FILES= \ PCToolProject.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Projects/Tool/PCToolProject.h000644 001751 000024 00000004307 11126423157 023732 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2004 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan 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 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 _PCToolProject_h #define _PCToolProject_h #import #import #import #import @class PCMakefileFactory; @interface PCToolProject : PCProject { IBOutlet NSBox *projectAttributesView; NSMutableDictionary *infoDict; } //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init; - (void)assignInfoDict:(NSMutableDictionary *)dict; - (void)loadInfoFile; - (void)dealloc; - (PCProject *)createProjectAt:(NSString *)path; @end @interface PCToolProject (GeneratedFiles) - (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key; - (BOOL)writeInfoFile; - (BOOL)writeMakefile; - (void)appendHead:(PCMakefileFactory *)mff; - (void)appendTail:(PCMakefileFactory *)mff; @end @interface PCToolProject (Inspector) - (NSView *)projectAttributesView; - (void)updateInspectorValues:(NSNotification *)aNotif; @end #endif ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/Info.gnustep000644 001751 000024 00000000470 10544200321 025330 0ustar00multixstaff000000 000000 { "!" = "Generated by ProjectCenter, do not edit"; ToolDescription = "No description avaliable!"; ToolName = ""; ToolIcon = ""; ToolRelease = 0.1; FullVersionID = 0.1; Authors = (); URL = ""; Copyright = "Copyright (C) 200x"; CopyrightDescription = "Released under ..."; }ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/main.m000644 001751 000024 00000000443 11400407547 024143 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Author: $FULLUSERNAME$ Created: $DATE$ by $USERNAME$ */ #import int main(int argc, const char *argv[]) { id pool = [[NSAutoreleasePool alloc] init]; // Your code here... // The end... [pool release]; return 0; } ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/Info.table000644 001751 000024 00000002116 10662671644 024756 0ustar00multixstaff000000 000000 { Type = "Project"; Name = "Tool"; Description = "Project that handles GNUstep tools."; PrincipalClassName = "PCToolProject"; ExecToolName = "opentool"; Executable = YES; BuildTargets = ("all","install","uninstall","clean","distclean","dist"); CanHavePublicHeaders = NO; BrowserRootEntries = { CLASS_FILES = "Classes"; HEADER_FILES = "Headers"; OTHER_SOURCES = "Other Sources"; IMAGES = "Images"; OTHER_RESOURCES = "Other Resources"; SUBPROJECTS = "Subprojects"; DOCU_FILES = "Documentation"; SUPPORTING_FILES = "Supporting Files"; LIBRARIES = "Libraries"; NON_PROJECT_FILES = "Non Project Files"; }; SourceFileKeys = ( "CLASS_FILES", "HEADER_FILES", "OTHER_SOURCES", ); ResourceFileKeys = ( "IMAGES", "OTHER_RESOURCES", "DOCU_FILES" ); OtherFileKeys = ( "SUBPROJECTS", "SUPPORTING_FILES", "LIBRARIES", "NON_PROJECT_FILES" ); AllowableSubprojectTypes = ( "Bundle", "Library", "Framework" ); LocalizableCategories = ( IMAGES, OTHER_RESOURCES, DOCU_FILES ); } ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/PC.project000644 001751 000024 00000002125 11416163005 024725 0ustar00multixstaff000000 000000 { CLASS_FILES = (); COMPILEROPTIONS = ""; CPPOPTIONS = ""; LINKEROPTIONS = ""; CREATION_DATE = ""; DOCU_FILES = (); FRAMEWORKS = (); HEADER_FILES = (); IMAGES = (); LANGUAGE = "English"; USER_LANGUAGES = (); LIBRARIES = ("gnustep-base"); LOCALIZED_RESOURCES = (); MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; INSTALLDIR = "$(HOME)/GNUstep/Tools"; OBJC_COMPILEROPTIONS = ""; OTHER_RESOURCES = ("Version"); OTHER_SOURCES = ("main.m"); PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description available!"; PROJECT_GROUP = "No group available!"; PROJECT_SUMMARY = "No summary available!"; PROJECT_RELEASE = "0.1"; PROJECT_COPYRIGHT = "Copyright (C) 200x"; PROJECT_COPYRIGHT_DESC = "Released under ..."; PROJECT_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "Tool"; PROJECT_URL = ""; SEARCH_HEADER_DIRS = (); SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); TOOLICON = ""; } ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/Inspector.gorm/000755 001751 000024 00000000000 11766110767 025763 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/Inspector.gorm/data.info000644 001751 000024 00000000322 10544200321 027521 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Modules/Projects/Tool/Resources/Inspector.gorm/data.classes000644 001751 000024 00000000417 10544200321 030230 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; PCToolProject = { Actions = ( ); Outlets = ( projectAttributesView ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Projects/Tool/Resources/Inspector.gorm/objects.gorm000644 001751 000024 00000003205 10544200321 030255 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000018:00000024:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0& %  PCToolProject0&% GSCustomClassMap0&0&% Box01NSBox1NSView1 NSResponder%  C C  C C&0 1 NSMutableArray1 NSArray&0 %  C C  C C&0 &0 1 NSCell0 &% Title01 NSFont%&&&&&&&& %%0&% View 0& %  Inspector01 GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1NSWindow%  C C& % Cm D\0%  C C  C C&0 &01NSColor0&%NSNamedColorSpace0&% System0&% windowBackgroundColor0&% Window0&% Panel ? B F@ F@%01NSImage0&%NSApplicationIcon&   D D0 &01NSNibConnector0&%NSOwner0 0!0"1NSNibOutletConnector0#1NSMutableString&% projectAttributesView0$1 GSMutableSet1 NSMutableSet1NSSet&ProjectCenter-0.6.1/Modules/Projects/Framework/Resources/000755 001751 000024 00000000000 11766110767 024072 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Framework/PCFrameworkProject.m000644 001751 000024 00000023140 11472344201 025767 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2005 Free Software Foundation Authors: 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. */ #import #import #import #import #import #import "PCFrameworkProject.h" @implementation PCFrameworkProject //---------------------------------------------------------------------------- // 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]; } //---------------------------------------------------------------------------- // --- PCProject overridings //---------------------------------------------------------------------------- - (Class)builderClass { return [PCFrameworkProject class]; } // ---------------------------------------------------------------------------- // --- ProjectType protocol // ---------------------------------------------------------------------------- - (PCProject *)createProjectAt:(NSString *)path { // PCFileManager *pcfm = [PCFileManager defaultManager]; PCFileCreator *pcfc = [PCFileCreator sharedCreator]; NSBundle *projectBundle = nil; NSString *_file = nil; NSString *_2file = nil; // NSString *_resourcePath; NSAssert(path,@"No valid project path provided!"); projectBundle = [NSBundle bundleForClass:[self class]]; _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; [projectDict initWithContentsOfFile:_file]; // Customise the project [self setProjectPath:path]; [self setProjectName:[path lastPathComponent]]; if ([[projectName pathExtension] isEqualToString:@"subproj"]) { projectName = [projectName stringByDeletingPathExtension]; } [projectDict setObject:projectName forKey:PCProjectName]; [projectDict setObject:[NSUserDefaults userLanguages] forKey:PCUserLanguages]; // 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:self]; [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]; [projectDict setObject:[NSArray arrayWithObjects:_file,nil] forKey:PCPublicHeaders]; // GNUmakefile.postamble [[PCMakefileFactory sharedFactory] createPostambleForProject:self]; // Resources // _resourcePath = [path stringByAppendingPathComponent:@"Resources"]; // Save the project to disc [self writeMakefile]; [self save]; return self; } // ---------------------------------------------------------------------------- // --- File Handling // ---------------------------------------------------------------------------- - (void)addFiles:(NSArray *)files forKey:(NSString *)type notify:(BOOL)yn { if ([type isEqualToString:PCHeaders]) { [super addFiles:files forKey:PCPublicHeaders notify:NO]; } [super addFiles:files forKey:type notify:YES]; } - (BOOL)renameFile:(NSString *)fromFile toFile:(NSString *)toFile { NSString *category = [projectBrowser nameOfSelectedCategory]; BOOL success = NO; BOOL isPublicHeader = YES; isPublicHeader = [[projectDict objectForKey:PCPublicHeaders] containsObject:fromFile]; success = [super renameFile:fromFile toFile:toFile]; if (success && [category isEqualToString:[super categoryForKey:PCHeaders]]) { if (isPublicHeader == NO) { [self setHeaderFile:toFile public:NO]; } } return success; } @end @implementation PCFrameworkProject (GeneratedFiles) - (BOOL)writeMakefile { PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; int i,count; NSString *mfl = nil; NSData *mfd = nil; NSString *key = nil; NSMutableArray *resources = nil; NSArray *localizedResources = nil; // Save the GNUmakefile backup [super writeMakefile]; // Save GNUmakefile.preamble [mf createPreambleForProject:self]; // Create the new file [mf createMakefileForProject:self]; // Head [self appendHead:mf]; // Libraries depend upon [mf appendLibraries:[projectDict objectForKey:PCLibraries]]; // Subprojects if ([[projectDict objectForKey:PCSubprojects] count] > 0) { [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; } // Resources count = [[self resourceFileKeys] count]; resources = [[NSMutableArray alloc] initWithCapacity:1]; // Gather all resource files into one array for (i = 0; i < count; i++) { key = [[self resourceFileKeys] objectAtIndex:i]; [resources addObjectsFromArray:[projectDict objectForKey:key]]; } // Remove localized resource files from gathered array localizedResources = [projectDict objectForKey:PCLocalizedResources]; for (i = [resources count] - 1; i >= 0; i--) { if ([localizedResources containsObject:[resources objectAtIndex:i]]) { [resources removeObjectAtIndex:i]; } } [mf appendResources:resources inDir:@"Resources"]; [resources release]; // Localization [mf appendLocalizedResources:localizedResources forLanguages:[projectDict objectForKey:PCUserLanguages]]; // Sources [self appendPublicHeaders:mf]; [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# Framework\n#\n"]; [mff appendString:[NSString stringWithFormat:@"VERSION = %@\n", [projectDict objectForKey:PCRelease]]]; [mff appendString:[NSString stringWithFormat:@"FRAMEWORK_NAME = %@\n", projectName]]; [mff appendString:[NSString stringWithFormat:@"%@_CURRENT_VERSION_NAME = %@\n", projectName, [projectDict objectForKey:PCRelease]]]; [mff appendString:[NSString stringWithFormat:@"%@_DEPLOY_WITH_CURRENT_VERSION = yes\n", projectName]]; } - (void)appendPublicHeaders:(PCMakefileFactory *)mff { NSArray *array = [projectDict objectForKey:PCPublicHeaders]; if (array == nil || [array count] == 0) { return; } [mff appendString:@"\n\n#\n# Public headers (will be installed)\n#\n"]; [mff appendString:[NSString stringWithFormat:@"%@_HEADER_FILES = ", projectName]]; if (array && [array count]) { NSString *tmp; NSEnumerator *enumerator = [array objectEnumerator]; while ((tmp = [enumerator nextObject])) { [mff appendString:[NSString stringWithFormat:@"\\\n%@ ",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)/framework.make\n"]; [mff appendString:@"-include GNUmakefile.postamble\n"]; } @end @implementation PCFrameworkProject (Inspector) - (NSView *)projectAttributesView { if (projectAttributesView == nil) { if ([NSBundle loadNibNamed:@"Inspector" owner:self] == NO) { NSLog(@"PCFrameworkProject: error loading Inspector NIB!"); return nil; } [projectAttributesView retain]; [self updateInspectorValues:nil]; } return projectAttributesView; } - (void)updateInspectorValues:(NSNotification *)aNotif { [principalClassField setStringValue:[projectDict objectForKey:PCPrincipalClass]]; } - (void)setPrincipalClass:(id)sender { [self setProjectDictObject:[principalClassField stringValue] forKey:PCPrincipalClass notify:YES]; } @end ProjectCenter-0.6.1/Modules/Projects/Framework/GNUmakefile000644 001751 000024 00000001153 11122717015 024153 0ustar00multixstaff000000 000000 # # GNUmakefile - FrameworkProject # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Framework BUNDLE_EXTENSION = .project Framework_PRINCIPAL_CLASS = PCFrameworkProject # # Additional libraries # Framework_LIBRARIES_DEPEND_UPON += # # Resource files # Framework_RESOURCE_FILES= \ Resources/PC.project \ Resources/Inspector.gorm \ Resources/Info.table # # Header files # Framework_HEADERS= \ PCFrameworkProject.h # # Class files # Framework_OBJC_FILES= \ PCFrameworkProject.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Projects/Framework/PCFrameworkProject.h000644 001751 000024 00000004163 11126423157 025772 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2004 Free Software Foundation Authors: Serg Stoyan Description: This is the project type 'Library' for GNUstep. You never should create it yourself but use PCFrameworkProj for doing this. Otherwise needed files don't get copied to the right place. 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 _PCFrameworkProject_h #define _PCFrameworkProject_h #import #import #import @class PCMakefileFactory; @interface PCFrameworkProject : PCProject { IBOutlet NSBox *projectAttributesView; IBOutlet NSTextField *principalClassField; IBOutlet NSTextField *currentVersionNameField; } //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init; - (void)dealloc; - (PCProject *)createProjectAt:(NSString *)path; @end @interface PCFrameworkProject (GeneratedFiles) - (BOOL)writeMakefile; - (void)appendHead:(PCMakefileFactory *)mff; - (void)appendPublicHeaders:(PCMakefileFactory *)mff; - (void)appendTail:(PCMakefileFactory *)mff; @end @interface PCFrameworkProject (Inspector) - (NSView *)projectAttributesView; - (void)updateInspectorValues:(NSNotification *)aNotif; @end #endif ProjectCenter-0.6.1/Modules/Projects/Framework/Resources/Info.table000644 001751 000024 00000001774 10662671644 026007 0ustar00multixstaff000000 000000 { Type = "Project"; Name = "Framework"; Description = "Project that handles GNUstep frameworks."; PrincipalClassName = "PCFrameworkProject"; ExecToolName = ""; BuildTargets = ("all","install","uninstall","clean","distclean","dist"); CanHavePublicHeaders = YES; BrowserRootEntries = { CLASS_FILES = "Classes"; HEADER_FILES = "Headers"; OTHER_SOURCES = "Other Sources"; OTHER_RESOURCES = "Other Resources"; SUBPROJECTS = "Subprojects"; DOCU_FILES = "Documentation"; SUPPORTING_FILES = "Supporting Files"; LIBRARIES = "Libraries"; NON_PROJECT_FILES = "Non Project Files"; }; SourceFileKeys = ( "CLASS_FILES", "HEADER_FILES", "OTHER_SOURCES" ); ResourceFileKeys = ( "OTHER_RESOURCES", "DOCU_FILES" ); OtherFileKeys = ( "SUBPROJECTS", "SUPPORTING_FILES", "LIBRARIES", "NON_PROJECT_FILES" ); AllowableSubprojectTypes = ( "Bundle", "Tool" ); LocalizableCategories = ( OTHER_RESOURCES, DOCU_FILES ); } ProjectCenter-0.6.1/Modules/Projects/Framework/Resources/PC.project000644 001751 000024 00000002165 11416163005 025751 0ustar00multixstaff000000 000000 { CLASS_FILES = (); COMPILEROPTIONS = ""; CPPOPTIONS = ""; LINKEROPTIONS = ""; CREATION_DATE = ""; DOCU_FILES = (); FRAMEWORKS = (); HEADER_FILES = (); HEADERS_INSTALL_DIR = ""; PUBLIC_HEADERS = (); INTERFACES = (); IMAGES = (); LANGUAGE = "English"; LIBRARIES = ("gnustep-base","gnustep-gui"); MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; INSTALLDIR = "$(HOME)/GNUstep/Library/Frameworks"; OBJC_COMPILEROPTIONS = ""; OTHER_RESOURCES = (); 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_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "Framework"; PROJECT_URL = ""; SEARCH_HEADER_DIRS = (); SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } ProjectCenter-0.6.1/Modules/Projects/Framework/Resources/Inspector.gorm/000755 001751 000024 00000000000 11766110767 027003 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Framework/Resources/Inspector.gorm/data.info000644 001751 000024 00000000322 10544200321 030541 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Modules/Projects/Framework/Resources/Inspector.gorm/data.classes000644 001751 000024 00000000514 10544200321 031246 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; PCFrameworkProject = { Actions = ( ); Outlets = ( projectAttributesView, currentVersionNameField, principalClassField ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Projects/Framework/Resources/Inspector.gorm/objects.gorm000644 001751 000024 00000007011 10544200321 031274 0ustar00multixstaff000000 000000 GNUstep archive00002af9:0000001c:00000056:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&%NSOwner0&% PCFrameworkProject0& %  TextField401 NSTextField1 NSControl1NSView1 NSResponder% B Cz C9 A  C9 A&01 NSMutableArray1 NSArray&%01 NSTextFieldCell1 NSActionCell1NSCell0 &0 1NSFont%&&&&&&&&0%0 1NSColor0 &%NSNamedColorSpace0 &% System0&% textBackgroundColor0 0& %  textColor0&% GSCustomClassMap0&0& %  TextField50% @ Cz B A  B A&0 &%0 0& %  Version Name:0%0& %  Helvetica A@A@&&&&&&&&0%0 0&% System0&% textBackgroundColor0 0& %  textColor0&% Box0 1NSBox%  C C  C C&0! &0"%  C C  C C&0# &0$% @ C B A  B A&0% &%0& 0'&% Principal Class:&&&&&&&&0%0( 0)&% System0*&% textBackgroundColor0+ )0,& %  textColor0-% B C C9 A  C9 A&0. &%0/ 00& &&&&&&&&0%01 02&% System03&% textBackgroundColor04 205& %  textColor0607&% Title &&&&&&&& %%08& %  TextField$09&% View"0:& %  TextField1-0;& %  Inspector0<1GSWindowTemplate1GSClassSwapper0=&%NSPanel1NSPanel1NSWindow%  C C& % C- De@0>%  C C  C C&0? & 0@ 0A&% System0B&% windowBackgroundColor0C&% Window0D&% PanelD ? B F@ F@%0E1NSImage0F&%NSApplicationIcon&   D D0G &  0H1NSNibConnector;0I&%NSOwner0JI0K9I0L8I0M:I0NI0OI0P1NSNibOutletConnectorI0Q1NSMutableString&% projectAttributesView0RI:0S&% principalClassField0TI0U&% currentVersionNameField0V1 GSMutableSet1 NSMutableSet1NSSet&<ProjectCenter-0.6.1/Modules/Projects/Bundle/Resources/000755 001751 000024 00000000000 11766110767 023346 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Bundle/GNUmakefile000644 001751 000024 00000001116 11122717015 023426 0ustar00multixstaff000000 000000 # # GNUmakefile - BundleProject # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Bundle BUNDLE_EXTENSION = .project Bundle_PRINCIPAL_CLASS = PCBundleProject # # Additional libraries # Bundle_LIBRARIES_DEPEND_UPON += # # Resource files # Bundle_RESOURCE_FILES = \ Resources/PC.project \ Resources/Inspector.gorm \ Resources/Info.table # # Header files # Bundle_HEADERS = \ PCBundleProject.h # # Class files # Bundle_OBJC_FILES= \ PCBundleProject.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Projects/Bundle/PCBundleProject.h000644 001751 000024 00000004226 11126423157 024522 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2004 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Description: 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. 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 _PCBundleProject_h #define _PCBundleProject_h #import #import #import @class PCMakefileFactory; @interface PCBundleProject : PCProject { IBOutlet NSBox *projectAttributesView; IBOutlet NSTextField *principalClassField; IBOutlet NSTextField *bundleExtensionField; } //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init; - (void)dealloc; - (PCProject *)createProjectAt:(NSString *)path; @end @interface PCBundleProject (GeneratedFiles) - (BOOL)writeMakefile; - (void)appendHead:(PCMakefileFactory *)mff; - (void)appendTail:(PCMakefileFactory *)mff; @end @interface PCBundleProject (Inspector) - (NSView *)projectAttributesView; - (void)updateInspectorValues:(NSNotification *)aNotif; - (void)setPrincipalClass:(id)sender; - (void)setBundleExtension:(id)sender; @end #endif ProjectCenter-0.6.1/Modules/Projects/Bundle/PCBundleProject.m000644 001751 000024 00000022177 11474545755 024553 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola 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. */ #import #import #import #import #import "PCBundleProject.h" @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 { #ifdef DEVELOPMENT NSLog(@"PCBundleProject: dealloc"); #endif [rootCategories release]; [rootKeys release]; [rootEntries release]; [projectAttributesView release]; [super dealloc]; } //---------------------------------------------------------------------------- // Project //---------------------------------------------------------------------------- - (Class)builderClass { return [PCBundleProject class]; } // ---------------------------------------------------------------------------- // --- ProjectType protocol // ---------------------------------------------------------------------------- - (PCProject *)createProjectAt:(NSString *)path { NSBundle *projectBundle = nil; NSString *_file = nil; NSString *_2file = nil; NSString *_resourcePath = nil; PCFileCreator *pcfc = [PCFileCreator sharedCreator]; NSAssert(path,@"No valid project path provided!"); projectBundle = [NSBundle bundleForClass:[self class]]; _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; [projectDict initWithContentsOfFile:_file]; // Customise the project [self setProjectPath:path]; [self setProjectName:[path lastPathComponent]]; if ([[projectName pathExtension] isEqualToString:@"subproj"]) { projectName = [projectName stringByDeletingPathExtension]; } [projectDict setObject:projectName forKey:PCProjectName]; [projectDict setObject:projectName forKey:PCPrincipalClass]; [projectDict setObject:[[NSCalendarDate date] description] forKey:PCCreationDate]; [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; [projectDict setObject:[NSUserDefaults userLanguages] forKey:PCUserLanguages]; // 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:self]; [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:self]; // Resources _resourcePath = [path stringByAppendingPathComponent:@"Resources"]; // Save the project to disc [self writeMakefile]; [self save]; return self; } @end @implementation PCBundleProject (GeneratedFiles) - (BOOL)writeMakefile { PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; int i,count; NSString *mfl = nil; NSData *mfd = nil; NSString *key = nil; NSMutableArray *resources = nil; NSArray *localizedResources = nil; // Save the GNUmakefile backup [super writeMakefile]; // Save GNUmakefile.preamble [mf createPreambleForProject:self]; // Create the new file [mf createMakefileForProject:self]; // Head [self appendHead:mf]; // Libraries depend upon [mf appendLibraries:[projectDict objectForKey:PCLibraries]]; // Subprojects if ([[projectDict objectForKey:PCSubprojects] count] > 0) { [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; } // Resources count = [[self resourceFileKeys] count]; resources = [[NSMutableArray alloc] initWithCapacity:1]; // Gather all resource files into one array for (i = 0; i < count; i++) { key = [[self resourceFileKeys] objectAtIndex:i]; [resources addObjectsFromArray:[projectDict objectForKey:key]]; } // Remove localized resource files from gathered array localizedResources = [projectDict objectForKey:PCLocalizedResources]; for (i = [resources count] - 1; i >= 0; i--) { if ([localizedResources containsObject:[resources objectAtIndex:i]]) { [resources removeObjectAtIndex:i]; } } [mf appendResources:resources inDir:@"Resources"]; [resources release]; // Localization [mf appendLocalizedResources:localizedResources forLanguages:[projectDict objectForKey:PCUserLanguages]]; // Sources [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 { NSString *installDomain = [projectDict objectForKey:PCInstallDomain]; [mff appendString:@"\n#\n# Bundle\n#\n"]; [mff appendString:[NSString stringWithFormat:@"VERSION = %@\n", [projectDict objectForKey:PCRelease]]]; [mff appendString:[NSString stringWithFormat:@"PACKAGE_NAME = %@\n", projectName]]; [mff appendString:[NSString stringWithFormat:@"BUNDLE_NAME = %@\n", projectName]]; [mff appendString:[NSString stringWithFormat:@"%@_PRINCIPAL_CLASS = %@\n", projectName, [projectDict objectForKey:PCPrincipalClass]]]; [mff appendString:[NSString stringWithFormat:@"BUNDLE_EXTENSION = %@\n", [projectDict objectForKey:PCBundleExtension]]]; /* FIXME %@_COPY_INTO_DIR needs to be properly reinstantiated as well as %@_STANDARD_INSTALL = no */ /* set the domain if it was specified */ if (!(installDomain == nil) && ![installDomain isEqualToString:@""]) { [mff appendString: [NSString stringWithFormat:@"GNUSTEP_INSTALLATION_DOMAIN = %@\n", [installDomain uppercaseString]]]; } } - (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 { [principalClassField setStringValue:[projectDict objectForKey:PCPrincipalClass]]; [bundleExtensionField setStringValue:[projectDict objectForKey:PCBundleExtension]]; } - (void)setPrincipalClass:(id)sender { [self setProjectDictObject:[principalClassField stringValue] forKey:PCPrincipalClass notify:YES]; } - (void)setBundleExtension:(id)sender { [self setProjectDictObject:[bundleExtensionField stringValue] forKey:PCBundleExtension notify:YES]; } @end ProjectCenter-0.6.1/Modules/Projects/Bundle/Resources/Info.table000644 001751 000024 00000002225 10662671644 025253 0ustar00multixstaff000000 000000 { Type = "Project"; Name = "Bundle"; Description = "Project that handles GNUstep bundles."; PrincipalClassName = "PCBundleProject"; ExecToolName = ""; BuildTargets = ("all","install","uninstall","clean","distclean","dist"); CanHavePublicHeaders = NO; BrowserRootEntries = { CLASS_FILES = "Classes"; HEADER_FILES = "Headers"; OTHER_SOURCES = "Other Sources"; INTERFACES = "Interfaces"; IMAGES = "Images"; OTHER_RESOURCES = "Other Resources"; SUBPROJECTS = "Subprojects"; DOCU_FILES = "Documentation"; SUPPORTING_FILES = "Supporting Files"; LIBRARIES = "Libraries"; NON_PROJECT_FILES = "Non Project Files"; }; SourceFileKeys = ( "CLASS_FILES", "HEADER_FILES", "OTHER_SOURCES" ); ResourceFileKeys = ( "INTERFACES", "IMAGES", "OTHER_RESOURCES", "DOCU_FILES" ); OtherFileKeys = ( "SUBPROJECTS", "SUPPORTING_FILES", "LIBRARIES", "NON_PROJECT_FILES" ); AllowableSubprojectTypes = ( "Aggregate", "Bundle", "Library", "Framework", "Tool" ); LocalizableCategories = ( INTERFACES, IMAGES, OTHER_RESOURCES, DOCU_FILES ); } ProjectCenter-0.6.1/Modules/Projects/Bundle/Resources/PC.project000644 001751 000024 00000002217 11416163005 025223 0ustar00multixstaff000000 000000 { BUNDLE_EXTENSION = ".bundle"; CLASS_FILES = (); COMPILEROPTIONS = ""; CPPOPTIONS = ""; LINKEROPTIONS = ""; CREATION_DATE = ""; DOCU_FILES = (); FRAMEWORKS = (); HEADER_FILES = (); INTERFACES = (); IMAGES = (); LANGUAGE = "English"; USER_LANGUAGES = (); LIBRARIES = ("gnustep-base","gnustep-gui"); LOCALIZED_RESOURCES = (); MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; INSTALLDIR = "$(GNUSTEP_BUNDLES)"; OBJC_COMPILEROPTIONS = ""; OTHER_RESOURCES = (); OTHER_SOURCES = (); PRINCIPAL_CLASS = ""; PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description available!"; PROJECT_GROUP = "No group available!"; PROJECT_SUMMARY = "No summary available!"; PROJECT_RELEASE = "0.1"; PROJECT_COPYRIGHT = "Copyright (C) 200x"; PROJECT_COPYRIGHT_DESC = "Released under ..."; PROJECT_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "Bundle"; PROJECT_URL = ""; SEARCH_HEADER_DIRS = (); SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } ProjectCenter-0.6.1/Modules/Projects/Bundle/Resources/Inspector.gorm/000755 001751 000024 00000000000 11766110767 026257 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Bundle/Resources/Inspector.gorm/data.info000644 001751 000024 00000000322 10544200321 030015 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Modules/Projects/Bundle/Resources/Inspector.gorm/data.classes000644 001751 000024 00000000663 10544200321 030527 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "setPrincipalClass:", "setBundleExtension:" ); Super = NSObject; }; PCBundleProject = { Actions = ( "setPrincipalClass:", "setBundleExtension:" ); Outlets = ( projectAttributesView, principalClassField, bundleExtensionField ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Projects/Bundle/Resources/Inspector.gorm/objects.gorm000644 001751 000024 00000007345 10544200321 030562 0ustar00multixstaff000000 000000 GNUstep archive00002af9:0000001d:0000005d:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&% PCBundleProject0&% GSCustomClassMap0&0& %  TextField601 NSTextField1 NSControl1NSView1 NSResponder% @ C B A  B A&0 1 NSMutableArray1 NSArray&%0 1 NSTextFieldCell1 NSActionCell1NSCell0 &% Principal Class:0 1NSFont%0 & %  Helvetica A@A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&% System0&% textBackgroundColor00& %  textColor0& %  TextField70% B C C9 A  C9 A&0 &%0 0&0%&&&&&&&&0%00&% System0&% textBackgroundColor00& %  textColor0&% Box0 1NSBox%  C C  C C&0! &0"%  C C  C C&0# &0$% @ Cz B A  B A&0% &%0& 0'&% Bundle Extension: &&&&&&&&0%0(0)&% System0*&% textBackgroundColor0+)0,& %  textColor0-% B Cz C9 A  C9 A&0. &%0/ 00&&&&&&&&&0%0102&% System03&% textBackgroundColor04205& %  textColor0607&% Title&&&&&&&& %%08& %  TextField8$09& %  TextField9-0:& %  Inspector0;1GSWindowTemplate1GSClassSwapper0<&%NSPanel1NSPanel1NSWindow%  C C& % D D<0=%  C C  C C&0> & 0?0@&% System0A&% windowBackgroundColor0B&% Window0C&% PanelC ? B F@ F@%0D1NSImage0E&%NSApplicationIcon&   D D0F &0G1NSNibConnector:0H&%NSOwner0IH0JH0K1NSNibOutletConnectorH0L&% principalClassField0M1NSNibControlConnectorH0N&% setPrincipalClass:0O8H0P9H0QH90R&% bundleExtensionField0S9H0T&% setBundleExtension:0UH0V1NSMutableString&% delegate0W9HV0X90Y& %  nextKeyView0Z0[H0\&% projectAttributesView0]1 GSMutableSet1 NSMutableSet1NSSet&;ProjectCenter-0.6.1/Modules/Projects/Aggregate/Resources/000755 001751 000024 00000000000 11766110767 024023 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Aggregate/PCAggregateProject.h000644 001751 000024 00000003432 11126423157 025652 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2004 Free Software Foundation Authors: 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 _PCAggregateProject_h #define _PCAggregateProject_h #import #import #import @class PCMakefileFactory; @interface PCAggregateProject : PCProject { IBOutlet NSBox *projectAttributesView; NSMutableDictionary *infoDict; } //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init; - (void)dealloc; - (PCProject *)createProjectAt:(NSString *)path; @end @interface PCAggregateProject (GeneratedFiles) - (BOOL)writeMakefile; - (void)appendHead:(PCMakefileFactory *)mff; - (void)appendTail:(PCMakefileFactory *)mff; @end @interface PCAggregateProject (Inspector) - (NSView *)projectAttributesView; - (void)updateInspectorValues:(NSNotification *)aNotif; @end #endif ProjectCenter-0.6.1/Modules/Projects/Aggregate/GNUmakefile000644 001751 000024 00000001165 11122717015 024107 0ustar00multixstaff000000 000000 # # GNUmakefile - Aggregate.project # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Aggregate BUNDLE_EXTENSION = .project Aggregate_PRINCIPAL_CLASS = PCAggregateProject # # Additional libraries # Aggregate_LIBRARIES_DEPEND_UPON += # # Resource files # Aggregate_RESOURCE_FILES= \ Resources/PC.project \ Resources/Inspector.gorm \ Resources/Info.table # # Header files # Aggregate_HEADERS= \ PCAggregateProject.h # # Class files # Aggregate_OBJC_FILES= \ PCAggregateProject.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Projects/Aggregate/PCAggregateProject.m000644 001751 000024 00000013512 11472344201 025653 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2004 Free Software Foundation Authors: 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. */ #import #import #import #import "PCAggregateProject.h" @implementation PCAggregateProject //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init { if ((self = [super init])) { /* NSString *_file; Class class = [self builderClass]; _file = [[NSBundle bundleForClass:class] pathForResource:@"Info" ofType:@"table"]; infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; rootEntries = [infoDict objectForKey:@"BrowserRootEntries"]; rootKeys = [[rootEntries allKeys] retain]; rootCategories = [[rootEntries allValues] retain];*/ rootKeys = [[NSArray arrayWithObjects: PCSubprojects, PCSupportingFiles, PCNonProject, nil] retain]; rootCategories = [[NSArray arrayWithObjects: @"Subprojects", @"Supporting Files", @"Non Project Files", nil] retain]; rootEntries = [[NSDictionary dictionaryWithObjects:rootCategories forKeys:rootKeys] retain]; } return self; } - (void)dealloc { [rootCategories release]; [rootKeys release]; [rootEntries release]; if (projectAttributesView) [projectAttributesView release]; [super dealloc]; } //---------------------------------------------------------------------------- // --- PCProject overridings //---------------------------------------------------------------------------- - (Class)builderClass { return [PCAggregateProject class]; } // ---------------------------------------------------------------------------- // --- ProjectType protocol // ---------------------------------------------------------------------------- - (PCProject *)createProjectAt:(NSString *)path { PCFileManager *pcfm = [PCFileManager defaultManager]; NSString *_file; NSBundle *projectBundle; NSAssert(path,@"No valid project path provided!"); projectBundle = [NSBundle bundleForClass:[self class]]; [pcfm createDirectoriesIfNeededAtPath:path]; _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; [projectDict initWithContentsOfFile:_file]; // Customise the project [self setProjectPath:path]; [self setProjectName:[path lastPathComponent]]; if ([[projectName pathExtension] isEqualToString:@"subproj"]) { projectName = [projectName stringByDeletingPathExtension]; } [projectDict setObject:projectName forKey:PCProjectName]; [projectDict setObject:[[NSCalendarDate date] description] forKey:PCCreationDate]; [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; [projectDict setObject:[NSUserDefaults userLanguages] forKey:PCUserLanguages]; // GNUmakefile.postamble [[PCMakefileFactory sharedFactory] createPostambleForProject:self]; // Save the project to disc [self writeMakefile]; [self save]; return self; } @end @implementation PCAggregateProject (GeneratedFiles) - (BOOL)writeMakefile { PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; NSString *mfl = nil; NSData *mfd = nil; // Save the GNUmakefile backup [super writeMakefile]; // Save GNUmakefile.preamble [mf createPreambleForProject:self]; // Create the new file [mf createMakefileForProject:self]; // Head [self appendHead:mf]; // Subprojects if ([[projectDict objectForKey:PCSubprojects] count] > 0) { [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; } // Tail [self appendTail:mf]; // Write the new file to disc! mfl = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; if ((mfd = [mf encodedMakefile])) { if ([mfd writeToFile:mfl atomically:NO]) { return YES; } } return NO; } - (void)appendHead:(PCMakefileFactory *)mff { [mff appendString:@"\n#\n# Aggregate\n#\n"]; [mff appendString:[NSString stringWithFormat:@"VERSION = %@\n", [projectDict objectForKey:PCRelease]]]; [mff appendString:[NSString stringWithFormat:@"PACKAGE_NAME = %@\n", projectName]]; } - (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 GNUmakefile.postamble\n"]; } @end @implementation PCAggregateProject (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 { } @end ProjectCenter-0.6.1/Modules/Projects/Aggregate/Resources/Info.table000644 001751 000024 00000001142 10662672435 025724 0ustar00multixstaff000000 000000 { Type = "Project"; Name = "Aggregate"; Description = "Project that contains subprojects."; PrincipalClassName = "PCAggregateProject"; CanHavePublicHeaders = NO; BuildTargets = ("all","install","uninstall","clean","distclean","dist"); BrowserRootEntries = { SUBPROJECTS = "Subprojects"; SUPPORTING_FILES = "Supporting Files"; NON_PROJECT_FILES = "Non Project Files"; }; SourceFileKeys = ( ); OtherFileKeys = ( "SUPPORTING_FILES", "NON_PROJECT_FILES" ); AllowableSubprojectTypes = ( "Application", "Bundle", "Library", "Framework", "Tool" ); }ProjectCenter-0.6.1/Modules/Projects/Aggregate/Resources/PC.project000644 001751 000024 00000001475 11416163005 025705 0ustar00multixstaff000000 000000 { COMPILEROPTIONS = ""; CPPOPTIONS = ""; LINKEROPTIONS = ""; CREATION_DATE = ""; LANGUAGE = "English"; MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; INSTALLDIR = "$(HOME)/GNUstep"; OBJC_COMPILEROPTIONS = ""; PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description avaliable!"; PROJECT_GROUP = "No group available!"; PROJECT_SUMMARY = "No summary available!"; PROJECT_RELEASE = "0.1"; PROJECT_COPYRIGHT = "Copyright (C) 200x"; PROJECT_COPYRIGHT_DESC = "Released under ..."; PROJECT_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "Aggregate"; PROJECT_URL = ""; SEARCH_HEADER_DIRS = (); SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } ProjectCenter-0.6.1/Modules/Projects/Aggregate/Resources/Inspector.gorm/000755 001751 000024 00000000000 11766110767 026734 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Aggregate/Resources/Inspector.gorm/data.info000644 001751 000024 00000000322 10544200321 030472 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Modules/Projects/Aggregate/Resources/Inspector.gorm/data.classes000644 001751 000024 00000000417 10544200321 031201 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; PCToolProject = { Actions = ( ); Outlets = ( projectAttributesView ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Projects/Aggregate/Resources/Inspector.gorm/objects.gorm000644 001751 000024 00000003205 10544200321 031226 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000018:00000024:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0& %  PCToolProject0&% GSCustomClassMap0&0&% Box01NSBox1NSView1 NSResponder%  C C  C C&0 1 NSMutableArray1 NSArray&0 %  C C  C C&0 &0 1 NSCell0 &% Title01 NSFont%&&&&&&&& %%0&% View 0& %  Inspector01 GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1NSWindow%  C C& % C D]0%  C C  C C&0 &01NSColor0&%NSNamedColorSpace0&% System0&% windowBackgroundColor0&% Window0&% Panel ? B F@ F@%01NSImage0&%NSApplicationIcon&   D D0 &01NSNibConnector0&%NSOwner0 0!0"1NSNibOutletConnector0#1NSMutableString&% projectAttributesView0$1 GSMutableSet1 NSMutableSet1NSSet&ProjectCenter-0.6.1/Modules/Projects/Library/Resources/000755 001751 000024 00000000000 11766110767 023541 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Library/PCLibProject.h000644 001751 000024 00000003533 11126423157 024212 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2004 Free Software Foundation Authors: Philippe C.D. Robert 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 _PCLibProject_h #define _PCLibProject_h #import #import #import #import @class PCMakefileFactory; @interface PCLibProject : PCProject { IBOutlet NSBox *projectAttributesView; } //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init; - (void)dealloc; - (PCProject *)createProjectAt:(NSString *)path; @end @interface PCLibProject (GeneratedFiles) - (BOOL)writeMakefile; - (void)appendHead:(PCMakefileFactory *)mff; - (void)appendPublicHeaders:(PCMakefileFactory *)mff; - (void)appendTail:(PCMakefileFactory *)mff; @end @interface PCLibProject (Inspector) - (NSView *)projectAttributesView; - (void)updateInspectorValues:(NSNotification *)aNotif; @end #endif ProjectCenter-0.6.1/Modules/Projects/Library/GNUmakefile000644 001751 000024 00000001141 11122717015 023617 0ustar00multixstaff000000 000000 # # GNUmakefile - LibraryProject # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Library BUNDLE_EXTENSION = .project Library_PRINCIPAL_CLASS = PCLibProject # # Additional libraries # Library_LIBRARIES_DEPEND_UPON += # # Resource files # Library_RESOURCE_FILES= \ Resources/PC.project \ Resources/Version \ Resources/Inspector.gorm \ Resources/Info.table # # Header files # Library_HEADERS= \ PCLibProject.h # # Class files # Library_OBJC_FILES= \ PCLibProject.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Projects/Library/PCLibProject.m000644 001751 000024 00000023775 11472344201 024225 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import "PCLibProject.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]; } //---------------------------------------------------------------------------- // --- PCProject overridings //---------------------------------------------------------------------------- - (Class)builderClass { return [PCLibProject class]; } // ---------------------------------------------------------------------------- // --- ProjectType protocol // ---------------------------------------------------------------------------- - (PCProject *)createProjectAt:(NSString *)path { PCFileManager *pcfm = [PCFileManager defaultManager]; PCFileCreator *pcfc = [PCFileCreator sharedCreator]; NSBundle *projectBundle = nil; NSString *_file = nil; NSString *_2file = nil; NSString *_resourcePath = nil; NSAssert(path,@"No valid project path provided!"); projectBundle = [NSBundle bundleForClass:[self class]]; _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; [projectDict initWithContentsOfFile:_file]; // Customise the project [self setProjectPath:path]; [self setProjectName:[path lastPathComponent]]; if ([[projectName pathExtension] isEqualToString:@"subproj"]) { projectName = [projectName stringByDeletingPathExtension]; } [projectDict setObject:projectName forKey:PCProjectName]; [projectDict setObject:[[NSCalendarDate date] description] forKey:PCCreationDate]; [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; [projectDict setObject:[NSUserDefaults userLanguages] forKey:PCUserLanguages]; // 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:self]; [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]; [projectDict setObject:[NSArray arrayWithObjects:_file,nil] forKey:PCPublicHeaders]; // GNUmakefile.postamble [[PCMakefileFactory sharedFactory] createPostambleForProject:self]; // Resources _resourcePath = [path stringByAppendingPathComponent:@"Resources"]; _file = [projectBundle pathForResource:@"Version" ofType:@""]; _2file = [_resourcePath stringByAppendingPathComponent:@"Version"]; [pcfm copyFile:_file toFile:_2file]; // Save the project to disc [self writeMakefile]; [self save]; return self; } // ---------------------------------------------------------------------------- // --- File Handling // ---------------------------------------------------------------------------- - (void)addFiles:(NSArray *)files forKey:(NSString *)type notify:(BOOL)yn { if ([type isEqualToString:PCHeaders]) { [super addFiles:files forKey:PCPublicHeaders notify:NO]; } [super addFiles:files forKey:type notify:YES]; } - (BOOL)renameFile:(NSString *)fromFile toFile:(NSString *)toFile { NSString *category = [projectBrowser nameOfSelectedCategory]; BOOL success = NO; BOOL isPublicHeader = YES; isPublicHeader = [[projectDict objectForKey:PCPublicHeaders] containsObject:fromFile]; success = [super renameFile:fromFile toFile:toFile]; if (success && [category isEqualToString:[super categoryForKey:PCHeaders]]) { if (isPublicHeader == NO) { [self setHeaderFile:toFile public:NO]; } } return success; } @end @implementation PCLibProject (GeneratedFiles) - (BOOL)writeMakefile { PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; int i,count; NSString *mfl = nil; NSData *mfd = nil; NSString *key = nil; NSMutableArray *resources = nil; NSArray *localizedResources = nil; // Save the GNUmakefile backup [super writeMakefile]; // Save GNUmakefile.preamble [mf createPreambleForProject:self]; // Create the new file [mf createMakefileForProject:self]; // Head [self appendHead:mf]; // Libraries depend upon [mf appendLibraries:[projectDict objectForKey:PCLibraries]]; // Subprojects if ([[projectDict objectForKey:PCSubprojects] count] > 0) { [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; } // Resources count = [[self resourceFileKeys] count]; resources = [[NSMutableArray alloc] initWithCapacity:1]; // Gather all resource files into one array for (i = 0; i < count; i++) { key = [[self resourceFileKeys] objectAtIndex:i]; [resources addObjectsFromArray:[projectDict objectForKey:key]]; } // Remove localized resource files from gathered array localizedResources = [projectDict objectForKey:PCLocalizedResources]; for (i = [resources count] - 1; i >= 0; i--) { if ([localizedResources containsObject:[resources objectAtIndex:i]]) { [resources removeObjectAtIndex:i]; } } [mf appendResources:resources inDir:@"Resources"]; [resources release]; // Localization [mf appendLocalizedResources:localizedResources forLanguages:[projectDict objectForKey:PCUserLanguages]]; // Sources [self appendPublicHeaders:mf]; [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# Library\n#\n"]; [mff appendString:[NSString stringWithFormat:@"VERSION = %@\n", [projectDict objectForKey:PCRelease]]]; [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)appendPublicHeaders:(PCMakefileFactory *)mff { NSArray *array = [projectDict objectForKey:PCPublicHeaders]; if ([array count] == 0) { return; } [mff appendString:@"\n\n#\n# Public headers (will be installed)\n#\n"]; [mff appendString:[NSString stringWithFormat:@"%@_HEADER_FILES = ", projectName]]; if (array && [array count]) { NSString *tmp; NSEnumerator *enumerator = [array objectEnumerator]; while ((tmp = [enumerator nextObject])) { [mff appendString:[NSString stringWithFormat:@"\\\n%@ ",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 { } @end ProjectCenter-0.6.1/Modules/Projects/Library/Resources/Info.table000644 001751 000024 00000001763 10662671644 025454 0ustar00multixstaff000000 000000 { Type = "Project"; Name = "Library"; Description = "Project that handles GNUstep libraries."; PrincipalClassName = "PCLibProject"; ExecToolName = ""; BuildTargets = ("all","install","uninstall","clean","distclean","dist"); CanHavePublicHeaders = YES; BrowserRootEntries = { CLASS_FILES = "Classes"; HEADER_FILES = "Headers"; OTHER_SOURCES = "Other Sources"; OTHER_RESOURCES = "Other Resources"; SUBPROJECTS = "Subprojects"; DOCU_FILES = "Documentation"; SUPPORTING_FILES = "Supporting Files"; LIBRARIES = "Libraries"; NON_PROJECT_FILES = "Non Project Files"; }; SourceFileKeys = ( "CLASS_FILES", "HEADER_FILES", "OTHER_SOURCES" ); ResourceFileKeys = ( "OTHER_RESOURCES", "DOCU_FILES" ); OtherFileKeys = ( "SUBPROJECTS", "SUPPORTING_FILES", "LIBRARIES", "NON_PROJECT_FILES" ); AllowableSubprojectTypes = ( "Bundle", "Tool" ); LocalizableCategories = ( OTHER_RESOURCES, DOCU_FILES ); } ProjectCenter-0.6.1/Modules/Projects/Library/Resources/Version000644 001751 000024 00000000611 10665367132 025104 0ustar00multixstaff000000 000000 # This file is included in various Makefile's to get version information. # Compatible with Bourne shell syntax, so it can included there too. # The gcc version required to compile the library. GCC_VERSION=2.95.3 # The version number of this release. MAJOR_VERSION=0 MINOR_VERSION=0 SUBMINOR_VERSION=1 LIB_VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} VERSION=${LIB_VERSION} ProjectCenter-0.6.1/Modules/Projects/Library/Resources/PC.project000644 001751 000024 00000002175 11416163005 025421 0ustar00multixstaff000000 000000 { CLASS_FILES = (); COMPILEROPTIONS = ""; CPPOPTIONS = ""; LINKEROPTIONS = ""; CREATION_DATE = ""; DOCU_FILES = (); FRAMEWORKS = (); HEADER_FILES = (); HEADERS_INSTALL_DIR = ""; PUBLIC_HEADERS = (); LANGUAGE = "English"; USER_LANGUAGES = (); LIBRARIES = ("gnustep-base","gnustep-gui"); LOCALIZED_RESOURCES = (); MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; INSTALLDIR = "$(HOME)/GNUstep/Library/Libraries"; OBJC_COMPILEROPTIONS = ""; OTHER_RESOURCES = ("Version"); OTHER_SOURCES = (); PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description available!"; PROJECT_GROUP = "No group available!"; PROJECT_SUMMARY = "No summary available!"; PROJECT_RELEASE = "0.1"; PROJECT_COPYRIGHT = "Copyright (C) 200x"; PROJECT_COPYRIGHT_DESC = "Released under ..."; PROJECT_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "Library"; PROJECT_URL = ""; SEARCH_HEADER_DIRS = (); SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } ProjectCenter-0.6.1/Modules/Projects/Library/Resources/Inspector.gorm/000755 001751 000024 00000000000 11766110767 026452 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Library/Resources/Inspector.gorm/data.info000644 001751 000024 00000000322 10544200321 030210 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Modules/Projects/Library/Resources/Inspector.gorm/data.classes000644 001751 000024 00000000422 10544200321 030713 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; PCLibraryProject = { Actions = ( ); Outlets = ( projectAttributesView ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Projects/Library/Resources/Inspector.gorm/objects.gorm000644 001751 000024 00000003213 10544200321 030743 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000018:00000024:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&% PCLibraryProject0&% GSCustomClassMap0&0&% Box01NSBox1NSView1 NSResponder%  C C  C C&0 1 NSMutableArray1 NSArray&0 %  C C  C C&0 &0 1 NSCell0 &% Title01 NSFont%&&&&&&&& %%0&% View 0& %  Inspector01 GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1NSWindow%  C C& % C D]0%  C C  C C&0 &01NSColor0&%NSNamedColorSpace0&% System0&% windowBackgroundColor0&% Window0&% Panel ? B F@ F@%01NSImage0&%NSApplicationIcon&   D D0 &01NSNibConnector0&%NSOwner0 0!0"1NSNibOutletConnector0#1NSMutableString&% projectAttributesView0$1 GSMutableSet1 NSMutableSet1NSSet&ProjectCenter-0.6.1/Modules/Projects/ResourceSet/Resources/000755 001751 000024 00000000000 11766110767 024400 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/ResourceSet/PCResourceSetProject.h000644 001751 000024 00000003511 11126423157 026602 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2004 Free Software Foundation Authors: 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 _PCResourceSetProject_h #define _PCResourceSetProject_h #import #import #import #import @class PCMakefileFactory; @interface PCResourceSetProject : PCProject { IBOutlet NSBox *projectAttributesView; NSMutableDictionary *infoDict; } //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init; - (void)dealloc; - (PCProject *)createProjectAt:(NSString *)path; @end @interface PCResourceSetProject (GeneratedFiles) - (BOOL)writeMakefile; - (void)appendHead:(PCMakefileFactory *)mff; - (void)appendTail:(PCMakefileFactory *)mff; @end @interface PCResourceSetProject (Inspector) - (NSView *)projectAttributesView; - (void)updateInspectorValues:(NSNotification *)aNotif; @end #endif ProjectCenter-0.6.1/Modules/Projects/ResourceSet/GNUmakefile000644 001751 000024 00000001207 11122717015 024461 0ustar00multixstaff000000 000000 # # GNUmakefile - Aggregate.project # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = ResourceSet BUNDLE_EXTENSION = .project ResourceSet_PRINCIPAL_CLASS = PCResourceSetProject # # Additional libraries # ResourceSet_LIBRARIES_DEPEND_UPON += # # Resource files # ResourceSet_RESOURCE_FILES= \ Resources/PC.project \ Resources/Inspector.gorm \ Resources/Info.table # # Header files # ResourceSet_HEADERS= \ PCResourceSetProject.h # # Class files # ResourceSet_OBJC_FILES= \ PCResourceSetProject.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Projects/ResourceSet/PCResourceSetProject.m000644 001751 000024 00000014334 11537371357 026626 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2004-2010 Free Software Foundation Authors: 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. */ #import #import "PCResourceSetProject.h" @implementation PCResourceSetProject //---------------------------------------------------------------------------- // Init and free //---------------------------------------------------------------------------- - (id)init { if ((self = [super init])) { rootKeys = [[NSArray arrayWithObjects: PCOtherResources, PCSupportingFiles, PCNonProject, nil] retain]; rootCategories = [[NSArray arrayWithObjects: @"Other Resources", @"Supporting Files", @"Non Project Files", nil] retain]; rootEntries = [[NSDictionary dictionaryWithObjects:rootCategories forKeys:rootKeys] retain]; } return self; } - (void)dealloc { [rootCategories release]; [rootKeys release]; [rootEntries release]; if (projectAttributesView) [projectAttributesView release]; [super dealloc]; } //---------------------------------------------------------------------------- // --- PCProject overridings //---------------------------------------------------------------------------- - (Class)builderClass { return [PCResourceSetProject class]; } // ---------------------------------------------------------------------------- // --- ProjectType protocol // ---------------------------------------------------------------------------- - (PCProject *)createProjectAt:(NSString *)path { NSBundle *projectBundle = nil; NSString *_file = nil; NSAssert(path,@"No valid project path provided!"); projectBundle = [NSBundle bundleForClass:[self class]]; _file = [projectBundle pathForResource:@"PC" ofType:@"project"]; [projectDict initWithContentsOfFile:_file]; // Customise the project [self setProjectPath:path]; [self setProjectName:[path lastPathComponent]]; if ([[projectName pathExtension] isEqualToString:@"subproj"]) { projectName = [projectName stringByDeletingPathExtension]; } [projectDict setObject:projectName forKey:PCProjectName]; [projectDict setObject:[[NSCalendarDate date] description] forKey:PCCreationDate]; [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; [projectDict setObject:[NSUserDefaults userLanguages] forKey:PCUserLanguages]; // GNUmakefile.postamble [[PCMakefileFactory sharedFactory] createPostambleForProject:self]; // Save the project to disc [self writeMakefile]; [self save]; return self; } @end @implementation PCResourceSetProject (GeneratedFiles) - (BOOL)writeMakefile { PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; int i,count; NSString *mfl = nil; NSData *mfd = nil; NSString *key = nil; NSMutableArray *resources = nil; NSArray *localizedResources = nil; // Save the GNUmakefile backup [super writeMakefile]; // Save GNUmakefile.preamble [mf createPreambleForProject:self]; // Create the new file [mf createMakefileForProject:self]; // Head [self appendHead:mf]; // Resources count = [[self resourceFileKeys] count]; resources = [[NSMutableArray alloc] initWithCapacity:1]; // Gather all resource files into one array for (i = 0; i < count; i++) { key = [[self resourceFileKeys] objectAtIndex:i]; [resources addObjectsFromArray:[projectDict objectForKey:key]]; } // Remove localized resource files from gathered array localizedResources = [projectDict objectForKey:PCLocalizedResources]; for (i = [resources count] - 1; i >= 0; i--) { if ([localizedResources containsObject:[resources objectAtIndex:i]]) { [resources removeObjectAtIndex:i]; } } [mf appendResources:resources inDir:@"Resources"]; [resources release]; // Localization [mf appendLocalizedResources:localizedResources forLanguages:[projectDict objectForKey:PCUserLanguages]]; // 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# Resource Set\n#\n"]; [mff appendString:[NSString stringWithFormat:@"RESOURCE_SET_NAME = %@\n", projectName]]; /* FIXME: This was deprecated in 2007 and has even been removed from the latest gnustep-make! The variable to use is xxx_INSTALL_DIR. */ [mff appendString: [NSString stringWithFormat:@"@%RESOURCE_FILES_INSTALL_DIR = %@\n", [projectDict objectForKey:PCInstallDomain]]]; } - (void)appendTail:(PCMakefileFactory *)mff { [mff appendString:@"\n\n#\n# Makefiles\n#\n"]; [mff appendString:@"-include GNUmakefile.preamble\n"]; [mff appendString:@"include $(GNUSTEP_MAKEFILES)/resource-set.make\n"]; [mff appendString:@"-include GNUmakefile.postamble\n"]; } @end @implementation PCResourceSetProject (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 { } @end ProjectCenter-0.6.1/Modules/Projects/ResourceSet/Resources/Info.table000644 001751 000024 00000001356 10662672435 026310 0ustar00multixstaff000000 000000 { Type = "Project"; Name = "Resource Set"; Description = "Project that handles GNUstep resources."; PrincipalClassName = "PCResourceSetProject"; ExecToolName = ""; BuildTargets = ("all","install","uninstall","clean","distclean","dist"); CanHavePublicHeaders = NO; BrowserRootEntries = { OTHER_RESOURCES = "Other Resources"; SUPPORTING_FILES = "Supporting Files"; NON_PROJECT_FILES = "Non Project Files"; }; SourceFileKeys = (); ResourceFileKeys = ( "OTHER_RESOURCES" ); OtherFileKeys = ( "SUPPORTING_FILES", "NON_PROJECT_FILES" ); AllowableSubprojectTypes = ( "Application", "Bundle", "Library", "Framework", "Tool" ); LocalizableCategories = ( OTHER_RESOURCES ); } ProjectCenter-0.6.1/Modules/Projects/ResourceSet/Resources/PC.project000644 001751 000024 00000001500 11416163101 026244 0ustar00multixstaff000000 000000 { COMPILEROPTIONS = ""; CPPOPTIONS = ""; LINKEROPTIONS = ""; CREATION_DATE = ""; LANGUAGE = "English"; MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; INSTALLDIR = "$(HOME)/GNUstep"; OBJC_COMPILEROPTIONS = ""; PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description avaliable!"; PROJECT_GROUP = "No group available!"; PROJECT_SUMMARY = "No summary available!"; PROJECT_RELEASE = "0.1"; PROJECT_COPYRIGHT = "Copyright (C) 200x"; PROJECT_COPYRIGHT_DESC = "Released under ..."; PROJECT_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "Resource Set"; PROJECT_URL = ""; SEARCH_HEADER_DIRS = (); SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } ProjectCenter-0.6.1/Modules/Projects/ResourceSet/Resources/Inspector.gorm/000755 001751 000024 00000000000 11766110767 027311 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/ResourceSet/Resources/Inspector.gorm/data.info000644 001751 000024 00000000322 10544200321 031047 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Modules/Projects/ResourceSet/Resources/Inspector.gorm/data.classes000644 001751 000024 00000000417 10544200321 031556 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; PCToolProject = { Actions = ( ); Outlets = ( projectAttributesView ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Projects/ResourceSet/Resources/Inspector.gorm/objects.gorm000644 001751 000024 00000003205 10544200321 031603 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000018:00000024:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0& %  PCToolProject0&% GSCustomClassMap0&0&% Box01NSBox1NSView1 NSResponder%  C C  C C&0 1 NSMutableArray1 NSArray&0 %  C C  C C&0 &0 1 NSCell0 &% Title01 NSFont%&&&&&&&& %%0&% View 0& %  Inspector01 GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1NSWindow%  C C& % C D]0%  C C  C C&0 &01NSColor0&%NSNamedColorSpace0&% System0&% windowBackgroundColor0&% Window0&% Panel ? B F@ F@%01NSImage0&%NSApplicationIcon&   D D0 &01NSNibConnector0&%NSOwner0 0!0"1NSNibOutletConnector0#1NSMutableString&% projectAttributesView0$1 GSMutableSet1 NSMutableSet1NSSet&ProjectCenter-0.6.1/Modules/Projects/Application/Resources/000755 001751 000024 00000000000 11766110767 024400 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Application/PCAppProject.h000644 001751 000024 00000007272 11142676544 025077 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2004 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan 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. 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_h_ #define _PCAppProject_h_ #import #import #import #import #import #import @interface PCAppTextField : NSTextField { } @end @interface PCAppProject : PCProject { IBOutlet NSBox *projectAttributesView; IBOutlet NSPopUpButton *appTypeField; IBOutlet NSTextField *appClassField; PCAppTextField *activeTextField; IBOutlet PCAppTextField *appImageField; IBOutlet PCAppTextField *helpFileField; IBOutlet PCAppTextField *mainNIBField; IBOutlet NSTextView *helpText; IBOutlet PCFileNameIcon *iconView; NSImage *icon; IBOutlet NSButton *docTypesButton; IBOutlet NSPanel *docTypesPanel; IBOutlet NSButton *addDocTypeButton; IBOutlet NSButton *removeDocTypeButton; IBOutlet NSButton *docBasedAppButton; IBOutlet NSScrollView *docTypesScroll; NSTableView *docTypesList; NSTableColumn *typeColumn; // NSName NSTableColumn *nameColumn; // NSHumanReadableName NSTableColumn *extensionsColumn; // NSUnixExtensions NSTableColumn *iconColumn; // NSIcon NSTableColumn *roleColumn; // NSRole NSTableColumn *classColumn; // NSDocumentClass NSMutableArray *docTypesItems; IBOutlet NSTextField *docTypeLabel; IBOutlet NSTextField *docTypeField; IBOutlet NSTextField *docNameLabel; IBOutlet NSTextField *docNameField; IBOutlet NSTextField *docIconLabel; IBOutlet NSTextField *docIconField; IBOutlet NSTextField *docExtensionsLabel; IBOutlet NSTextField *docExtensionsField; IBOutlet NSTextField *docRoleLabel; IBOutlet NSTextField *docRoleField; IBOutlet NSTextField *docClassLabel; IBOutlet NSTextField *docClassField; NSMutableDictionary *infoDict; } // ---------------------------------------------------------------------------- // --- Init and free // ---------------------------------------------------------------------------- - (id)init; - (void)loadInfoFile; - (void)dealloc; - (PCProject *)createProjectAt:(NSString *)path; @end @interface PCAppProject (GeneratedFiles) - (void)writeInfoEntry:(NSString *)name forKey:(NSString *)key; - (BOOL)writeInfoFile; - (BOOL)writeMakefile; - (void)appendHead:(PCMakefileFactory *)mff; - (void)appendTail:(PCMakefileFactory *)mff; @end #endif ProjectCenter-0.6.1/Modules/Projects/Application/PCAppProject+Inspector.h000644 001751 000024 00000005160 11142676544 027033 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html 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_ #import "PCAppProject.h" @interface PCAppProject (Inspector) // ---------------------------------------------------------------------------- // --- User Interface // ---------------------------------------------------------------------------- - (NSView *)projectAttributesView; // ---------------------------------------------------------------------------- // --- Actions // ---------------------------------------------------------------------------- - (void)setAppType:(id)sender; - (void)setAppClass:(id)sender; - (void)clearAppIcon:(id)sender; - (BOOL)setAppIconWithFileAtPath:(NSString *)path; - (void)clearHelpFile:(id)sender; - (void)clearMainNib:(id)sender; - (BOOL)setMainNibWithFileAtPath:(NSString *)path; - (void)setDocBasedApp:(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; - (void)fillFieldsForRow:(int)rowIndex; // ---------------------------------------------------------------------------- // --- Notifications // ---------------------------------------------------------------------------- - (void)updateInspectorValues:(NSNotification *)aNotif; - (void)tfGetFocus:(NSNotification *)aNotif; @end @interface PCAppProject (FileNameIconDelegate) - (BOOL)canPerformDraggingOf:(NSArray *)paths; - (BOOL)prepareForDraggingOf:(NSArray *)paths; - (BOOL)performDraggingOf:(NSArray *)paths; @end #endif ProjectCenter-0.6.1/Modules/Projects/Application/PCAppProject.m000644 001751 000024 00000042176 11476354461 025107 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola 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. */ #import #import #import #import #import "PCAppProject.h" #import "PCAppProject+Inspector.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)loadInfoFile { PCFileManager *pcfm = [PCFileManager defaultManager]; NSMutableArray *otherRes = nil; NSString *oldFile = [NSString stringWithString:@"Info-gnustep.plist"]; NSString *oldFilePath = nil; NSString *infoFile = nil; NSString *infoFilePath = nil; infoFile = [NSString stringWithFormat:@"%@Info.plist",projectName]; infoFilePath = [projectPath stringByAppendingPathComponent:infoFile]; // Old project with info file Info-gnustep.plist located in Resources // directory. Move it to parent directory and replace it in PCOtherResources. otherRes = [[projectDict objectForKey:PCOtherResources] mutableCopy]; if ([otherRes containsObject:oldFile]) { oldFilePath = [self dirForCategoryKey:PCOtherResources]; oldFilePath = [oldFilePath stringByAppendingPathComponent:oldFile]; [pcfm copyFile:oldFilePath toFile:infoFilePath]; [pcfm removeFileAtPath:oldFilePath removeDirsIfEmpty:YES]; [otherRes removeObject:oldFile]; [otherRes addObject:infoFile]; [self setProjectDictObject:otherRes forKey:PCSupportingFiles notify:NO]; RELEASE(otherRes); } if ([[NSFileManager defaultManager] fileExistsAtPath:infoFilePath]) { infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:infoFilePath]; } else { infoDict = [[NSMutableDictionary alloc] init]; } } - (void)dealloc { // TODO: Never called. Should be fixed. #ifdef DEBUG NSLog (@"PCAppProject: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(infoDict); RELEASE(projectAttributesView); RELEASE(rootCategories); RELEASE(rootKeys); RELEASE(rootEntries); [super dealloc]; } // ---------------------------------------------------------------------------- // --- ProjectType protocol // ---------------------------------------------------------------------------- - (PCProject *)createProjectAt:(NSString *)path { PCFileManager *pcfm = [PCFileManager defaultManager]; PCFileCreator *pcfc = [PCFileCreator sharedCreator]; NSString *_file = nil; NSString *_2file = nil; NSString *_resourcePath = nil; NSBundle *projBundle = [NSBundle bundleForClass:[self class]]; NSString *mainNibFile = nil; NSMutableArray *_array = nil; NSAssert(path,@"No valid project path provided!"); // PC.project _file = [projBundle pathForResource:@"PC" ofType:@"project"]; [projectDict initWithContentsOfFile:_file]; // Customise the project [self setProjectPath:path]; [self setProjectName: [path lastPathComponent]]; if ([[projectName pathExtension] isEqualToString:@"subproj"]) { projectName = [projectName stringByDeletingPathExtension]; } [projectDict setObject:projectName forKey:PCProjectName]; [projectDict setObject:[[NSCalendarDate date] description] forKey:PCCreationDate]; [projectDict setObject:NSFullUserName() forKey:PCProjectCreator]; [projectDict setObject:NSFullUserName() forKey:PCProjectMaintainer]; [projectDict setObject:[NSUserDefaults userLanguages] forKey:PCUserLanguages]; // Copy the project files to the provided path _file = [projBundle pathForResource:@"main" ofType:@"m"]; _2file = [path stringByAppendingPathComponent: [NSString stringWithFormat:@"%@_main.m", projectName]]; [pcfm copyFile:_file toFile:_2file]; [pcfc replaceTagsInFileAtPath:_2file withProject:self]; [projectDict setObject:[NSArray arrayWithObjects:[_2file lastPathComponent],nil] forKey:PCOtherSources]; _file = [projBundle pathForResource:@"AppController" ofType:@"m"]; _2file = [path stringByAppendingPathComponent:@"AppController.m"]; [pcfm copyFile:_file toFile:_2file]; [pcfc replaceTagsInFileAtPath:_2file withProject:self]; _file = [projBundle pathForResource:@"AppController" ofType:@"h"]; _2file = [path stringByAppendingPathComponent:@"AppController.h"]; [pcfm copyFile:_file toFile:_2file]; [pcfc replaceTagsInFileAtPath:_2file withProject:self]; // GNUmakefile.postamble [[PCMakefileFactory sharedFactory] createPostambleForProject:self]; // Resources // By default resources located at Resources subdir. // If any resource marked as "Localizable" in Inspector it's moved // into English.lproj and copied into all available .lproj subdirs. _resourcePath = [path stringByAppendingPathComponent:@"Resources"]; // Main NIB _file = [projBundle pathForResource:@"Main" ofType:@"gorm"]; mainNibFile = [NSString stringWithFormat:@"%@.gorm", projectName]; mainNibFile = [_resourcePath stringByAppendingPathComponent:mainNibFile]; [pcfm copyFile:_file toFile:mainNibFile]; [projectDict setObject:[mainNibFile lastPathComponent] forKey:PCMainInterfaceFile]; // Renaissance _file = [projBundle pathForResource:@"Main" ofType:@"gsmarkup"]; _2file = [_resourcePath stringByAppendingPathComponent:@"Main.gsmarkup"]; [pcfm copyFile:_file toFile:_2file]; _file = [projBundle pathForResource:@"MainMenu-GNUstep" ofType:@"gsmarkup"]; _2file = [_resourcePath stringByAppendingPathComponent:@"MainMenu-GNUstep.gsmarkup"]; [pcfm copyFile:_file toFile:_2file]; _file = [projBundle pathForResource:@"MainMenu-OSX" ofType:@"gsmarkup"]; _2file = [_resourcePath stringByAppendingPathComponent:@"MainMenu-OSX.gsmarkup"]; [pcfm copyFile:_file toFile:_2file]; [projectDict setObject:[NSArray arrayWithObjects:[mainNibFile lastPathComponent], @"Main.gsmarkup", @"MainMenu-GNUstep.gsmarkup", @"MainMenu-OSX.gsmarkup", nil] forKey:PCInterfaces]; // Info-gnutstep.plist _file = [projBundle pathForResource:@"Info" ofType:@"gnustep"]; infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:_file]; [infoDict setObject:projectName forKey:@"ApplicationName"]; [infoDict setObject:projectName forKey:@"NSExecutable"]; [infoDict setObject:[mainNibFile lastPathComponent] forKey:@"NSMainNibFile"]; [infoDict setObject:[projectDict objectForKey:PCPrincipalClass] forKey:@"NSPrincipalClass"]; // Write to ProjectNameInfo.plist _file = [NSString stringWithFormat:@"%@Info.plist",projectName]; _2file = [projectPath stringByAppendingPathComponent:_file]; [infoDict writeToFile:_2file atomically:YES]; // Add Info-gnustep.plist into SUPPORTING_FILES _array = [[projectDict objectForKey:PCSupportingFiles] mutableCopy]; [_array addObject:_file]; [projectDict setObject:_array forKey:PCSupportingFiles]; RELEASE(_array); // Save the project to disc [self writeMakefile]; [self save]; return self; } // ---------------------------------------------------------------------------- // --- PCProject overridings // ---------------------------------------------------------------------------- - (PCProject *)openWithWrapperAt:(NSString *)path { [super openWithWrapperAt: path]; [self loadInfoFile]; return self; } - (Class)builderClass { return [PCAppProject class]; } // ---------------------------------------------------------------------------- // --- File Handling // ---------------------------------------------------------------------------- - (BOOL)removeFiles:(NSArray *)files forKey:(NSString *)key notify:(BOOL)yn { 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 notify:yn]; } - (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 setAppIconWithFileAtPath: [[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:PCRelease]; [self writeInfoEntry:@"NSExecutable" forKey:PCProjectName]; [self writeInfoEntry:@"NSIcon" forKey:PCAppIcon]; if ([[projectDict objectForKey:PCAppType] isEqualToString:@"GORM"]) { [self writeInfoEntry:@"NSMainNibFile" forKey:PCMainInterfaceFile]; [infoDict removeObjectForKey:@"GSMainMarkupFile"]; } else { [self writeInfoEntry:@"GSMainMarkupFile" forKey:PCMainInterfaceFile]; [infoDict removeObjectForKey:@"NSMainNibFile"]; } [self writeInfoEntry:@"NSPrincipalClass" forKey:PCPrincipalClass]; [infoDict setObject:@"Application" forKey:@"NSRole"]; [self writeInfoEntry:@"NSTypes" forKey:PCDocumentTypes]; [self writeInfoEntry:@"URL" forKey:PCURL]; infoFile = [NSString stringWithFormat:@"%@Info.plist",projectName]; infoFile = [projectPath stringByAppendingPathComponent:infoFile]; return [infoDict writeToFile:infoFile atomically:YES]; } // Overriding - (BOOL)writeMakefile { PCMakefileFactory *mf = [PCMakefileFactory sharedFactory]; int i,count; NSString *mfl = nil; NSData *mfd = nil; NSString *key = nil; NSMutableArray *resources = nil; NSArray *localizedResources = 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:self]; // Head (Application) [self appendHead:mf]; // Libraries depend upon [mf appendLibraries:[projectDict objectForKey:PCLibraries]]; // Subprojects if ([[projectDict objectForKey:PCSubprojects] count] > 0) { [mf appendSubprojects:[projectDict objectForKey:PCSubprojects]]; } // Resources count = [[self resourceFileKeys] count]; resources = [[NSMutableArray alloc] initWithCapacity:1]; // Gather all resource files into one array for (i = 0; i < count; i++) { key = [[self resourceFileKeys] objectAtIndex:i]; [resources addObjectsFromArray:[projectDict objectForKey:key]]; } // Remove localized resource files from gathered array localizedResources = [projectDict objectForKey:PCLocalizedResources]; for (i = [resources count] - 1; i >= 0; i--) { if ([localizedResources containsObject:[resources objectAtIndex:i]]) { [resources removeObjectAtIndex:i]; } } [mf appendResources:resources inDir:@"Resources"]; [resources release]; // Localization [mf appendLocalizedResources:localizedResources forLanguages:[projectDict objectForKey:PCUserLanguages]]; // Sources [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 { NSString *installDomain = [projectDict objectForKey:PCInstallDomain]; [mff appendString:@"\n#\n# Application\n#\n"]; [mff appendString:[NSString stringWithFormat:@"VERSION = %@\n", [projectDict objectForKey:PCRelease]]]; [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]]]; /* FIXME %@_COPY_INTO_DIR needs to be properly reinstantiated as well as %@_STANDARD_INSTALL = no */ /* set the domain if it was specified */ if (!(installDomain == nil) && ![installDomain isEqualToString:@""]) { [mff appendString: [NSString stringWithFormat:@"GNUSTEP_INSTALLATION_DOMAIN = %@\n", [installDomain uppercaseString]]]; } } - (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 ProjectCenter-0.6.1/Modules/Projects/Application/GNUmakefile000644 001751 000024 00000001616 11122717015 024465 0ustar00multixstaff000000 000000 # # GNUmakefile - ApplicationProject # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Application BUNDLE_EXTENSION = .project Application_PRINCIPAL_CLASS = PCAppProject # # Additional libraries # Application_LIBRARIES_DEPEND_UPON += # # Resource files # Application_RESOURCE_FILES= \ Resources/AppController.h \ Resources/AppController.m \ Resources/main.m \ Resources/PC.project \ Resources/Main.gorm \ Resources/Inspector.gorm \ Resources/Main.gsmarkup \ Resources/MainMenu-GNUstep.gsmarkup \ Resources/MainMenu-OSX.gsmarkup \ Resources/Info.table \ Resources/Info.gnustep # # Header files # Application_HEADERS= \ PCAppProject.h \ PCAppProject+Inspector.h # # Class files # Application_OBJC_FILES= \ PCAppProject.m \ PCAppProject+Inspector.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Projects/Application/PCAppProject+Inspector.m000644 001751 000024 00000047622 11511364623 027041 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html 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. */ #import #import #import "PCAppProject+Inspector.h" // ---------------------------------------------------------------------------- // --- Customized text field // ---------------------------------------------------------------------------- NSString *PCITextFieldGetFocus = @"PCITextFieldGetFocusNotification"; static void setOrRemove(NSMutableDictionary *m, id v, NSString *k) { if ([v isKindOfClass: [NSString class]]) { v = [v stringByTrimmingSpaces]; if ([v length] == 0) v = nil; } else if ([v isKindOfClass: [NSArray class]]) { if ([v count] == 0) v = nil; } if (v == nil) [m removeObjectForKey: k]; else [m setObject: v forKey: k]; } static id cleanup(NSMutableDictionary *m, NSString *k) { id v; setOrRemove(m, [m objectForKey: k], k); v = [m objectForKey: k]; if (v == nil) v = @""; return v; } @implementation PCAppTextField - (BOOL)becomeFirstResponder { [[NSNotificationCenter defaultCenter] postNotificationName:PCITextFieldGetFocus object:self]; return [super becomeFirstResponder]; } @end @implementation PCAppProject (Inspector) - (void)awakeFromNib { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tfGetFocus:) name:PCITextFieldGetFocus object:nil]; // Icon view [iconView setImage:nil]; [iconView setDelegate:self]; // Help text view [helpText setDrawsBackground:NO]; [helpText setTextColor:[NSColor darkGrayColor]]; [helpText setFont:[NSFont systemFontOfSize:11.0]]; [helpText setText:@"Click on the field and drop file in the box above"]; // Document types buttons [addDocTypeButton setRefusesFirstResponder:YES]; [removeDocTypeButton setRefusesFirstResponder:YES]; [docBasedAppButton setRefusesFirstResponder:YES]; [docBasedAppButton setState: ([[projectDict objectForKey:PCDocumentBasedApp] isEqualToString:@"YES"]) ? NSOnState : NSOffState]; [self setDocBasedApp:docBasedAppButton]; [self updateInspectorValues:nil]; } // ---------------------------------------------------------------------------- // --- User Interface // ---------------------------------------------------------------------------- - (NSView *)projectAttributesView { if (!projectAttributesView) { if ([NSBundle loadNibNamed: @"Inspector" owner: self] == NO) { NSLog(@"PCAppProject: error loading Inspector NIB!"); return nil; } [projectAttributesView retain]; } return projectAttributesView; } // ---------------------------------------------------------------------------- // --- Actions // ---------------------------------------------------------------------------- - (void)setAppType:(id)sender { NSString *appType = [appTypeField stringValue]; NSMutableArray *libs = [[projectDict objectForKey:PCLibraries] mutableCopy]; if ([appType isEqualToString:@"Renaissance"]) { [libs addObject:@"Renaissance"]; } else { [libs removeObject:@"Renaissance"]; } [self setProjectDictObject:libs forKey:PCLibraries notify:YES]; RELEASE(libs); [self setProjectDictObject:appType forKey:PCAppType notify:YES]; } - (void)setAppClass:(id)sender { [self setProjectDictObject:[appClassField stringValue] forKey:PCPrincipalClass notify:YES]; } // Application Icon - (void)clearAppIcon:(id)sender { [appImageField setStringValue:@""]; [infoDict setObject:@"" forKey:@"NSIcon"]; [infoDict setObject:@"" forKey:@"ApplicationIcon"]; [self setProjectDictObject:@"" forKey:PCAppIcon notify:YES]; } - (BOOL)setAppIconWithFileAtPath:(NSString *)path { NSImage *image = [[NSImage alloc] initWithContentsOfFile:path]; NSString *imageName = nil; NSFileManager *fm = [NSFileManager defaultManager]; NSArray *fileTypes = [self fileTypesForCategoryKey:PCImages]; NSLog(@"setAppIconWithFileAtPath -- %@", path); // TODO: GNUstep bug - NSImage should return nil if image cannot // be created, but it doesn't if (!path || !image || ![fm fileExistsAtPath:path] || ![fileTypes containsObject:[path pathExtension]]) { [iconView setImage:nil]; [self clearAppIcon:self]; return NO; } // TODO: Image nil here even if 'path' exists. Why? It results in // empty imageView on drag&drop operation. [iconView setImage:image]; imageName = [path lastPathComponent]; [appImageField setStringValue:imageName]; [self addAndCopyFiles:[NSArray arrayWithObject:path] forKey:PCImages]; [infoDict setObject:imageName forKey:@"NSIcon"]; [infoDict setObject:imageName forKey:@"ApplicationIcon"]; [self setProjectDictObject:imageName forKey:PCAppIcon notify:YES]; return YES; } // Help file - (void)clearHelpFile:(id)sender { [infoDict removeObjectForKey:@"GSHelpContentsFile"]; [self setProjectDictObject:@"" forKey:PCHelpFile notify:YES]; } // Main Interface File - (void)clearMainNib: (id)sender { [mainNIBField setStringValue:@""]; [infoDict setObject:@"" forKey:@"NSMainNibFile"]; [self setProjectDictObject:@"" forKey:PCMainInterfaceFile notify:YES]; } - (BOOL)setMainNibWithFileAtPath: (NSString *)path { NSString *nibName = [path lastPathComponent]; NSFileManager *fm = [NSFileManager defaultManager]; NSArray *fileTypes = [self fileTypesForCategoryKey:PCInterfaces]; // TODO: check if it's interface file and it exists if (![fm fileExistsAtPath:path] || ![fileTypes containsObject:[path pathExtension]]) { [iconView setImage:nil]; [self clearMainNib:self]; return NO; } [iconView setImage:[[NSWorkspace sharedWorkspace] iconForFile:path]]; [self addAndCopyFiles:[NSArray arrayWithObject: path] forKey:PCInterfaces]; [infoDict setObject:nibName forKey:@"NSMainNibFile"]; [self setProjectDictObject:nibName forKey:PCMainInterfaceFile notify:YES]; [mainNIBField setStringValue:nibName]; return YES; } // Document Types - (void)showDocTypesPanel: (id)sender { [docTypesPanel makeKeyAndOrderFront: nil]; } - (void)setDocBasedApp: (id)sender { NSString *docBased = [projectDict objectForKey: PCDocumentBasedApp]; if ([docBasedAppButton state] == NSOnState) { [docTypeLabel setTextColor: [NSColor blackColor]]; [docTypeField setBackgroundColor: [NSColor whiteColor]]; [docTypeField setTextColor: [NSColor blackColor]]; [docTypeField setEditable: YES]; [docNameLabel setTextColor: [NSColor blackColor]]; [docNameField setBackgroundColor: [NSColor whiteColor]]; [docNameField setTextColor: [NSColor blackColor]]; [docNameField setEditable: YES]; [docRoleLabel setTextColor: [NSColor blackColor]]; [docRoleField setBackgroundColor: [NSColor whiteColor]]; [docRoleField setTextColor: [NSColor blackColor]]; [docRoleField setEditable: YES]; [docClassLabel setTextColor: [NSColor blackColor]]; [docClassField setBackgroundColor: [NSColor whiteColor]]; [docClassField setTextColor: [NSColor blackColor]]; [docClassField setEditable: YES]; [nameColumn setIdentifier: @"NSHumanReadableName"]; [[nameColumn headerCell] setStringValue: @"Name"]; [docTypesList addTableColumn: roleColumn]; [docTypesList addTableColumn: classColumn]; RELEASE(roleColumn); RELEASE(classColumn); if (![docBased isEqualToString: @"YES"]) { [self setProjectDictObject: @"YES" forKey: PCDocumentBasedApp notify: YES]; } } else { [docTypeLabel setTextColor: [NSColor darkGrayColor]]; [docTypeField setBackgroundColor: [NSColor lightGrayColor]]; [docTypeField setTextColor: [NSColor darkGrayColor]]; [docTypeField setEditable: NO]; [docNameLabel setTextColor: [NSColor darkGrayColor]]; [docNameField setBackgroundColor: [NSColor lightGrayColor]]; [docNameField setTextColor: [NSColor darkGrayColor]]; [docNameField setEditable: NO]; [docRoleLabel setTextColor: [NSColor darkGrayColor]]; [docRoleField setBackgroundColor: [NSColor lightGrayColor]]; [docRoleField setTextColor: [NSColor darkGrayColor]]; [docRoleField setEditable: NO]; [docClassLabel setTextColor: [NSColor darkGrayColor]]; [docClassField setBackgroundColor: [NSColor lightGrayColor]]; [docClassField setTextColor: [NSColor darkGrayColor]]; [docClassField setEditable: NO]; // Columns // [docTypesList removeTableColumn:nameColumn]; [nameColumn setIdentifier: @"NSIcon"]; [[nameColumn headerCell] setStringValue: @"Icon"]; RETAIN(roleColumn); RETAIN(classColumn); [docTypesList removeTableColumn: roleColumn]; [docTypesList removeTableColumn: classColumn]; if (![docBased isEqualToString: @"NO"]) { [self setProjectDictObject: @"NO" forKey: PCDocumentBasedApp notify: YES]; } } } - (void)addDocType: (id)sender { int row; NSMutableDictionary *entry = [NSMutableDictionary dictionaryWithCapacity: 6]; int selectedRow = [docTypesList selectedRow]; setOrRemove(entry, [docTypeField stringValue], @"NSName"); setOrRemove(entry, [docNameField stringValue], @"NSHumanReadableName"); setOrRemove(entry, [[docExtensionsField stringValue] componentsSeparatedByString: @","], @"NSUnixExtensions"); setOrRemove(entry, [docIconField stringValue], @"NSIcon"); setOrRemove(entry, [docRoleField stringValue], @"NSRole"); setOrRemove(entry, [docClassField stringValue], @"NSDocumentClass"); if (selectedRow >= 0 && [docTypesItems count] > 0) { [docTypesItems insertObject: entry atIndex: selectedRow + 1]; row = selectedRow + 1; } else { [docTypesItems addObject: entry]; row = [docTypesItems count] - 1; } [docTypesList reloadData]; [docTypesList selectRow: row byExtendingSelection: NO]; [self fillFieldsForRow: row]; [self setProjectDictObject: docTypesItems forKey: PCDocumentTypes notify: YES]; } - (void)removeDocType: (id)sender { int selectedRow = [docTypesList selectedRow]; if (selectedRow >= 0) { [docTypesItems removeObjectAtIndex: selectedRow]; [docTypesList reloadData]; } if (([docTypesList selectedRow] < 0) && ([docTypesItems count] > 0)) { [docTypesList selectRow: [docTypesItems count]-1 byExtendingSelection: NO]; [self fillFieldsForRow: [docTypesItems count]-1]; } [self setProjectDictObject: docTypesItems forKey: PCDocumentTypes notify: YES]; } - (void)docFieldSet: (id)sender { NSMutableDictionary *object = nil; NSLog(@"docFieldSet"); if (sender != docTypeField && sender != docNameField && sender != docIconField && sender != docExtensionsField && sender != docRoleField && sender != docClassField) { return; } if ([docTypesItems count] <= 0) { [self addDocType: addDocTypeButton]; } object = [[docTypesItems objectAtIndex: [docTypesList selectedRow]] mutableCopy]; if (sender == docTypeField) { setOrRemove(object, [sender stringValue], @"NSName"); } else if (sender == docNameField) { setOrRemove(object, [sender stringValue], @"NSHumanReadableName"); } else if (sender == docIconField) { setOrRemove(object, [sender stringValue], @"NSIcon"); } else if (sender == docExtensionsField) { setOrRemove(object, [[sender stringValue] componentsSeparatedByString: @","], @"NSUnixExtensions"); } else if (sender == docRoleField) { setOrRemove(object, [sender stringValue], @"NSRole"); } else if (sender == docClassField) { setOrRemove(object, [sender stringValue], @"NSDocumentClass"); } [docTypesItems replaceObjectAtIndex: [docTypesList selectedRow] withObject: object]; [docTypesList reloadData]; [object release]; } // ---------------------------------------------------------------------------- // --- Document Types browser // ---------------------------------------------------------------------------- - (int)numberOfRowsInTableView: (NSTableView *)aTableView { return [docTypesItems count]; } - (id) tableView: (NSTableView *)aTableView objectValueForTableColumn: (NSTableColumn *)aTableColumn row: (int)rowIndex { NSDictionary *object = nil; if (docTypesItems != nil || [docTypesItems count] > 0) { object = [docTypesItems objectAtIndex: rowIndex]; if (aTableColumn == extensionsColumn) { return [[object objectForKey: @"NSUnixExtensions"] componentsJoinedByString: @","]; } else { return [object objectForKey: [aTableColumn identifier]]; } } return nil; } - (void)tableView: (NSTableView *)aTableView setObjectValue: anObject forTableColumn: (NSTableColumn *)aTableColumn row: (int)rowIndex { NSMutableDictionary *type = nil; if (docTypesItems == nil || [docTypesItems count] <= 0) { return; } type = [docTypesItems objectAtIndex: rowIndex]; if ([[aTableColumn identifier] isEqualToString: @"NSUnixExtensions"]) { setOrRemove(type, anObject, @"Extension"); } else if ([[aTableColumn identifier] isEqualToString: @"NSIcon"]) { setOrRemove(type, anObject, @"Icon"); } [self setProjectDictObject: docTypesItems forKey: PCDocumentTypes notify: YES]; } - (BOOL)tableView: (NSTableView *)aTableView shouldSelectRow: (int)rowIndex { [self fillFieldsForRow: rowIndex]; return YES; } - (void)fillFieldsForRow: (int)rowIndex { NSMutableDictionary *type = nil; int itemCount = [docTypesItems count]; if (itemCount <= 0 || rowIndex > itemCount || rowIndex < 0) { [docTypeField setStringValue: @""]; [docNameField setStringValue: @""]; [docIconField setStringValue: @""]; [docExtensionsField setStringValue: @""]; [docRoleField setStringValue: @""]; [docClassField setStringValue: @""]; return; } type = [docTypesItems objectAtIndex: rowIndex]; [docTypeField setStringValue: cleanup(type, @"NSName")]; [docNameField setStringValue: cleanup(type, @"NSHumanReadableName")]; [docIconField setStringValue: cleanup(type, @"NSIcon")]; [docExtensionsField setStringValue: @""]; if ([[type objectForKey: @"NSUnixExtensions"] count] > 0) { [docExtensionsField setStringValue: [[type objectForKey: @"NSUnixExtensions"] componentsJoinedByString: @","]]; } [docRoleField setStringValue: cleanup(type, @"NSRole")]; [docClassField setStringValue: cleanup(type, @"NSDocumentClass")]; } // ---------------------------------------------------------------------------- // --- Notifications // ---------------------------------------------------------------------------- - (void)updateInspectorValues: (NSNotification *)aNotif { // NSLog (@"PCAppProject: updateInspectorValues"); // Project Attributes view [appTypeField selectItemWithTitle:[projectDict objectForKey:PCAppType]]; [appClassField setStringValue:[projectDict objectForKey: PCPrincipalClass]]; [appImageField setStringValue:[projectDict objectForKey:PCAppIcon]]; [helpFileField setStringValue:[projectDict objectForKey:PCHelpFile]]; [mainNIBField setStringValue: [projectDict objectForKey:PCMainInterfaceFile]]; docTypesItems = [projectDict objectForKey:PCDocumentTypes]; [docTypesList 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; NSImage *image = 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]; image = [[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]; image = [[NSWorkspace sharedWorkspace] iconForFile:path]; } activeTextField = mainNIBField; } [iconView setImage:image]; } - (void)controlTextDidEndEditing:(NSNotification *)aNotification { NSControl *anObject = [aNotification object]; id target = [anObject target]; SEL action = [anObject action]; NSString *fileName; NSString *filePath; if (anObject != appImageField && anObject != helpFileField && anObject != mainNIBField) { if ([target respondsToSelector:action]) { [target performSelector:action withObject:anObject]; } return; } fileName = [anObject stringValue]; if (anObject == appImageField) { filePath = [self pathForFile:fileName forKey:PCImages]; [self setAppIconWithFileAtPath:filePath]; } else if (anObject == helpFileField) { } else if (anObject == mainNIBField) { filePath = [self pathForFile:fileName forKey:PCInterfaces]; [self setMainNibWithFileAtPath:filePath]; } } @end @implementation PCAppProject (FileNameIconDelegate) - (BOOL)canPerformDraggingOf:(NSArray *)paths { NSString *categoryKey; NSArray *fileTypes; NSEnumerator *e = [paths objectEnumerator]; NSString *s; if (activeTextField == appImageField) { categoryKey = PCImages; } else if (activeTextField == helpFileField) { return NO; } else if (activeTextField == mainNIBField) { categoryKey = PCInterfaces; } else { return NO; } NSLog(@"PCAppProject: canPerformDraggingOf -> %@", [self projectFileFromFile:[paths objectAtIndex:0] forKey:categoryKey]); fileTypes = [self fileTypesForCategoryKey:categoryKey]; // Check if we can accept files of such types while ((s = [e nextObject])) { if (![fileTypes containsObject:[s pathExtension]]) { return NO; } } return YES; } - (BOOL)prepareForDraggingOf:(NSArray *)paths { return YES; } - (BOOL)performDraggingOf:(NSArray *)paths { if (activeTextField == appImageField) { [self setAppIconWithFileAtPath:[paths objectAtIndex:0]]; } else if (activeTextField == helpFileField) { } else if (activeTextField == mainNIBField) { [self setMainNibWithFileAtPath:[paths objectAtIndex:0]]; } return YES; } @end ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Main.gorm/000755 001751 000024 00000000000 11766110767 026227 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Application/Resources/AppController.m000644 001751 000024 00000002224 11400407547 027330 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Author: $FULLUSERNAME$ Created: $DATE$ by $USERNAME$ Application Controller */ #import "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 { } - (void) applicationDidFinishLaunching: (NSNotification *)aNotif { // Uncomment if your application is Renaissance-based // [NSBundle loadGSMarkupNamed: @"Main" owner: self]; } - (BOOL) applicationShouldTerminate: (id)sender { return YES; } - (void) applicationWillTerminate: (NSNotification *)aNotif { } - (BOOL) application: (NSApplication *)application openFile: (NSString *)fileName { return NO; } - (void) showPrefPanel: (id)sender { } @end ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Info.gnustep000644 001751 000024 00000000611 10544200321 026653 0ustar00multixstaff000000 000000 { "!" = "Generated by ProjectCenter, do not edit"; ApplicationDescription = "No description avaliable!"; ApplicationName = ""; ApplicationRelease = 0.1; Copyright = "Copyright (C) 200x"; CopyrightDescription = "Released under ..."; FullVersionID = 0.1; NSExecutable = ""; NSMainNibFile = ""; NSPrincipalClass = NSApplication; NSRole = Application; }ProjectCenter-0.6.1/Modules/Projects/Application/Resources/main.m000644 001751 000024 00000001132 11400412401 025446 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Author: $FULLUSERNAME$ Created: $DATE$ by $USERNAME$ */ #import int main(int argc, const char *argv[]) { // Uncomment if your application is Renaissance application /* 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); } ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Info.table000644 001751 000024 00000002251 10662671644 026304 0ustar00multixstaff000000 000000 { Type = "Project"; Name = "Application"; Description = "Project that handles GNUstep ObjC based applications."; PrincipalClassName = "PCAppProject"; Executable = YES; ExecToolName = "openapp"; BuildTargets = ("all","install","uninstall","clean","distclean","dist"); CanHavePublicHeaders = NO; BrowserRootEntries = { CLASS_FILES = "Classes"; HEADER_FILES = "Headers"; OTHER_SOURCES = "Other Sources"; INTERFACES = "Interfaces"; IMAGES = "Images"; OTHER_RESOURCES = "Other Resources"; SUBPROJECTS = "Subprojects"; DOCU_FILES = "Documentation"; SUPPORTING_FILES = "Supporting Files"; LIBRARIES = "Libraries"; NON_PROJECT_FILES = "Non Project Files"; }; SourceFileKeys = ( "CLASS_FILES", "HEADER_FILES", "OTHER_SOURCES" ); ResourceFileKeys = ( "INTERFACES", "IMAGES", "DOCU_FILES", "OTHER_RESOURCES" ); OtherFileKeys = ( "LIBRARIES", "NON_PROJECT_FILES" ); AllowableSubprojectTypes = ( "Aggregate", "Application", "Bundle", "Library", "Framework", "Tool" ); LocalizableCategories = ( INTERFACES, IMAGES, OTHER_RESOURCES, DOCU_FILES ); }ProjectCenter-0.6.1/Modules/Projects/Application/Resources/MainMenu-GNUstep.gsmarkup000644 001751 000024 00000001601 10544200321 031160 0ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Application/Resources/PC.project000644 001751 000024 00000002444 11416163005 026257 0ustar00multixstaff000000 000000 { APPLICATIONICON = ""; APP_DOCUMENT_BASED = NO; APP_TYPE = GORM; CLASS_FILES = ("AppController.m"); COMPILEROPTIONS = ""; CPPOPTIONS = ""; LINKEROPTIONS = ""; CREATION_DATE = ""; DOCU_FILES = (); FRAMEWORKS = (); HEADER_FILES = ("AppController.h"); INTERFACES = (); IMAGES = (); LANGUAGE = "English"; USER_LANGUAGES = (); LIBRARIES = ("gnustep-base","gnustep-gui"); LOCALIZED_RESOURCES = (); MAININTERFACE = ""; MAKEFILEDIR = "$(GNUSTEP_MAKEFILES)"; INSTALLDIR = "$(HOME)/GNUstep"; OBJC_COMPILEROPTIONS = ""; OTHER_RESOURCES = (); OTHER_SOURCES = (""); PRINCIPAL_CLASS = "NSApplication"; PROJECT_AUTHORS = (); PROJECT_CREATOR = ""; PROJECT_DESCRIPTION = "No description avaliable!"; PROJECT_DOCUMENTTYPES = (); 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_MAINTAINER = ""; PROJECT_NAME = ""; PROJECT_TYPE = "Application"; PROJECT_URL = ""; SEARCH_HEADER_DIRS = (); SEARCH_LIB_DIRS = (); SUBPROJECTS = (); SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); } ProjectCenter-0.6.1/Modules/Projects/Application/Resources/MainMenu-OSX.gsmarkup000644 001751 000024 00000004225 10544200321 030311 0ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Inspector.gorm/000755 001751 000024 00000000000 11766110767 027311 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Application/Resources/AppController.h000644 001751 000024 00000001357 11400407547 027331 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Author: $FULLUSERNAME$ Created: $DATE$ by $USERNAME$ Application Controller */ #ifndef _PCAPPPROJ_APPCONTROLLER_H #define _PCAPPPROJ_APPCONTROLLER_H #import // Uncomment if your application is Renaissance-based //#import @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 ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Main.gsmarkup000644 001751 000024 00000000152 10544200321 027010 0ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Inspector.gorm/data.info000644 001751 000024 00000000270 11142676544 031074 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Modules/Projects/Application/Resources/Inspector.gorm/data.classes000644 001751 000024 00000002710 11142676544 031577 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "clearFile:", "docFieldSet:", "setAppType:", "removeDocType:", "setAppClass:", "setDocBasedApp:", "setDocIcon:", "setFile:", "showDocTypesPanel:" ); Super = NSObject; }; PCAppProject = { Actions = ( "setAppClass:", "setFile:", "clearFile:", "addDocType:", "removeDocType:", "setCurrentLanguage:", "showDocTypesPanel:", "setDocBasedApp:", "docFieldSet:", "setAppType:" ); Outlets = ( projectAttributesView, appClassField, iconView, setFieldButton, clearFieldButton, appImageField, helpFileField, mainNIBField, docTypesButton, docTypesPanel, addDocTypeButton, removeDocTypeButton, docBasedAppButton, docTypeLabel, docTypeField, docNameLabel, docNameField, docIconLabel, docIconField, docExtensionsLabel, docExtensionsField, docRoleLabel, docRoleField, docClassLabel, docClassField, docTypesList, typeColumn, nameColumn, extensionsColumn, iconColumn, roleColumn, classColumn, appTypeField, helpText ); Super = NSObject; }; PCAppTextField = { Actions = ( ); Outlets = ( ); Super = NSTextField; }; PCFileNameIcon = { Actions = ( ); Outlets = ( ); Super = NSImageView; }; }ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Inspector.gorm/objects.gorm000644 001751 000024 00000070646 11142676544 031643 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000034:00000232:00000001:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C& % D@ D)01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 1 NSTextField1 NSControl% @ Cy B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&%Application Class:01NSFont%0& % Helvetica A@A@&&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B Cy C7 A  C7 A&0 &%00&0%&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00 & % textColor0!% @ B C C/  C C/&0" &0# % @ @ C C+  C C+&0$ &  0%% @ C B A  B A&0& &%0'0(&%Application Icon:&&&&&&&& &&&&&&%0)0*&%System0+&%textBackgroundColor0,*0-& % textColor0.1GSControlTemplate0/&%PCFileNameIcon1 NSImageView% Ca B B` B`  B` B`&00 &%011 NSImageCell&&&&&&&&&&&&&&%%% ? ?02% @ B B A  B A&03 &%0405& % Help File:&&&&&&&& &&&&&&%0607&%System08&%textBackgroundColor0970:& % textColor0;0<&%PCAppTextField% @ B CX A  CX A&0= &%0>0?&&&&&&&&& &&&&&&%0@0A&%System0B&%textBackgroundColor0CA0D& % textColor0E% @ B B A  B A&0F &%0G0H&%Main Interface File:&&&&&&&& &&&&&&%0I0J&%System0K&%textBackgroundColor0LJ0M& % textColor0N0O&%PCAppTextField% @ B, CX A  CX A&0P &%0Q0R&&&&&&&&& &&&&&&%0S0T&%System0U&%textBackgroundColor0VT0W& % textColor0X0Y&%PCAppTextField% @ B CX A  CX A&0Z &%0[0\&\&&&&&&&& &&&&&&%0]0^&%System0_&%textBackgroundColor0`^0a& % textColor0b1NSButton% B A  C A  C A&0c &%0d1 NSButtonCell0e&%Document Types...&&&&&&&&&&&&&&%0f&0g&&&& &&0h1 GSCustomView1 GSNibItem0i& % NSTextView Ca B B` B&0j0k&%Box&&&&&&&&&&&&&& %%0l% @ C B A  B A&0m &%0n0o&%Application Type:&&&&&&&& &&&&&&%0p0q&%System0r&%textBackgroundColor0sq0t& % textColor0u1 NSPopUpButton% B C C7 A  C7 A&0v &%0w1NSPopUpButtonCell1 NSMenuItemCell0x&&&&&&&&&0y1!NSMenu0z&0{ &0|1" NSMenuItem0}&%GORM0~&&&%01#NSImage0& % common_Nibble%0"0& % Renaissance~&&%%&&&&&&%0&0&&&& &&|y%%%%%00&%Title&&&&&&&&&&&&&& %%00&%System0&%windowBackgroundColor0&%Window0&%Panel ? B F@ F@%0# B@ B@00&%NSCalibratedWhiteColorSpace 0 &01$NSBitmapImageRep1% NSImageRep0&%NSDeviceRGBColorSpace B@ B@%%0%001&NSData&$$II*$[=T8J2R-!k[=U:K3xB-H'R-!k[=S7J2xB-H'/ ?[=S7I2xB-H'/ ?[=S7H0xB-H'/ ?[=R7I2xB-H'/ ?[=S7I0xB-H'/ ?[=R7I2xB-H'/ ?[=R7H0xB-H'/ ?[>X/!j:)H'/ ?D49  ?hft{y<;D ?hft}<;D ?<;D ?43:""""43:zzzzͱ""""EEEEEEEEEEEE43:555222t43:0?55hhhiiiyyyVVV777?43:~=0rdxxxUUU444?/17?43:5?0\Mzz{]]]QQQmmm_bn:9@5?0I>e]xxwvtsqpo}66<5?2A3QFA4H:|zzywutrqpbao++05?2@2@2A3B3C4E6}}|zxxwutrqpn}VT_=,, 5@2@3A3A3JdbqihvFEOQ-)Y)!W)`/$k3'q6*n4)l3'i2'f0&c/$`-$Y*!)5C4C4D4E6F7H7Ʀkkk)))LJRkjxihvhgu::B\/&[-$Y-$c/&l3'o4)l3'j2'g2&d0$a/$^-#X*!)5@2D4E6F7H7I8{{{[[[322QPZ^]jjhwhguQP[K33\-&W)_/$j3'm3'm4)j3'h2&d0&b/$_-#],#X*!)P'~>>ddd>>?87?4$$E)&_-#`0'_0&]/&^/&`/&`/&c0&j2'n3'k3'h2&d0$a/$^-#\,!Z,!X*!U)T))ttttttzzz;;;rqyjhwPPZ43:C@?w9,c2)b2)^,#_0&d2'g2'h2'k3)l3)l3)l3'l3'i2'f0&c/$_-#],#Z,!X*!W)T)S))rrr```FFF000mmm\[a<;CA)'^3,I::76v8,_-$b2'g2'l4)r7*s7*s7*w8,t7,q6*n4)k3'g2&d0$`-$],#[,!X*!W)U)S'S')YYY777XWcKJS|||SSS\2,KDD4I:I;A?>~>0b2)f2'p6*x:-y:-{;-x:-v9,s7*o4)l3'i2&f0&c/$_-#\,#Y*!W)T)S'R'S')TR^|z@?Gↄ\Zg<;CJJJm4)D4E6J;UIPEvI@q:/l4)m4)x:,};/{:-y:-w9,t7*q6*m4)j3'h2&c0&a/$]-#[,!X*!V)T)R'R'R')0/5?_^kCBJ43:?QQQ ^-#I:O>SBP?H7?2p6*s7*0|;/y:-p6*f0&d0&c/&`/$_-$]-#\,#T)!T)!T)!T)!T)!T)!T)!)))) ?h3'z;/T)!T)!T)!`/$`/$))))) ? 00$$R&   D D0 % ? A C C&% B D90 % ? A C C  C C&0 &0% A C  B| A  B| A&0 &%00&%Type:0% A@&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor0% B C  C A  C A&0 &%00&&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor0% A B B| A  B| A&0 &%00&%Name:&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor0% A A B A  B A&0 &%00&%Class:&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor0% A B B A  B A&0 &%00&%Role:&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor0±0ñ& % textColor0ı% A Bp B A  B A&0ű &%0Ʊ0DZ& % Extensions:&&&&&&&& &&&&&&%0ȱ0ɱ&%System0ʱ&%textBackgroundColor0˱0̱& % textColor0ͱ% A B B| A  B| A&0α &%0ϱ0б&%Icon:&&&&&&&& &&&&&&%0ѱ0ұ&%System0ӱ&%textBackgroundColor0Ա0ձ& % textColor0ֱ% B B C A  C A&0ױ &%0ر0ٱ&&&&&&&&& &&&&&&%0ڱ0۱&%System0ܱ&%textBackgroundColor0ݱ0ޱ& % textColor0߱% B B C A  C A&0 &%00&&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor0% B Bp C A  C A&0 &%00&&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor0% B B C A  C A&0 &%00&&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor0% B A C A  C A&0 &%00&&&&&&&&& &&&&&&%00&%SystemP&%textBackgroundColorPP& % textColorP% B C$ C8 A  C8 A&P &%PP&%Document-Based ApplicationP#P1'NSMutableString&%common_SwitchOff&&&&&&&&&&&&&&%P &P &P #P '&%common_SwitchOn&&& &&P % A C$ A A  A A&P &%PP&%+&&&&&&&&&&&&&&%P&P&&&& &&P% A C$ A A  A A&P &%PP&%-&&&&&&&&&&&&&&%P&P&&&& &&P1( NSScrollView% A C: C B  C B&P &P1) NSClipView% A A Cπ B  Cπ B&P &P1* NSTableView%  C C!  C C!&P &%PP &&&&&&&&&&&&&&&P! &P"1+ NSTableColumnP#&%NSHumanRedableName B A GPP$1,NSTableHeaderCellP%&% NameP&% &&&&&&&& &&&&&&%P'P(&%SystemP)&%controlShadowColorP*(P+&%windowFrameTextColorP,P-&%five-&&&&&&&& &&&&&&%P.P/&%SystemP0&%textBackgroundColorP1/P2& % textColorP3+P4&%NSUnixExtensions B A GPP5,P6& %  Extensions&&&&&&&&& &&&&&&%'*P7--&&&&&&&& &&&&&&%.1P8+P9&%NSRole B A GPP:,P;&% Role&&&&&&&&& &&&&&&%'*P<--&&&&&&&& &&&&&&%P=P>&%SystemP?&%textBackgroundColorP@>PA& % textColorPB+PC&%NSDocumentClass B A GPPD,PE&% Class&&&&&&&&& &&&&&&%'*PF--&&&&&&&& &&&&&&%PGPH&%SystemPI&%textBackgroundColorPJHPK& % textColorPL/PM& % gridColorPN ?* ?PO1-NSTableHeaderView%  C A  C A&PP &PQ1.GSTableCornerView% @ @ A A  A A&PR &%% A @ @@PS ?* ?PT1/ NSScroller% @ A A B  A B&PU &%PV &&&&&&&&&&&&&&&2 _doScroll:v12@0:4@8PW)% A @ Cπ A  Cπ A&PX &OPY/PZ& % controlColorQ% A A A A TWP[P\&%SystemP]&%windowBackgroundColorP^&%WindowP_&%Document Types_ ? ? F@ F@%&   D DP` &Pa &Pb10NSMutableDictionary11 NSDictionary&,Pc& % TextField13NPd& % TextField25Pe&%Button5Pf&%DocTypesPg& % TextField15Ph& % TableColumn"Pi& % CustomView(0)hPj& % InspectorPk& % TextField16Pl& % TextField17Pm&%Box1!Pn& % TextField18Po& % TextField19Pp& % TextFieldlPq& % ScrollViewPr&%BoxPs&%GormNSTableViewPt& % TextField5Pu& % TextField6 Pv&%NSOwnerPw& % PCAppProjectPx& % TextField7Py& % TableColumn13Pz& % MenuItem1P{"P|&%AddP}&&&%%P~& % TextField8%P& % TextField9XP& % TableColumn28P&%MenuItemP"P&%Edit...}&&%P#P&%common_3DArrowDown%P& % TextField20P& % MenuItem2P"P&%Remove}&&%%P& % MenuItem3|P& % TextField21P& % TableColumn3BP& % TextField22P& % MenuItem4P&%Button2P& % TextField102P& % TextField23P&%Button3 P& % TextField11;P&%GormNSPopUpButtonuP& % ImageView.P& % TextField24P&%Button4bP& % TextField12EP &jjP12NSNibConnectorjvP2uvP2xvP2mP2~P2P2vP2vP2vP2cvP13NSNibOutletConnectorvxP& % appClassFieldP3vP&%iconViewP3vP& % helpFileFieldP3vcP& % mainNIBFieldP14NSNibControlConnectorxvP& % setAppClass:P3vP&%delegateP3cvP2vP3vP& % appImageFieldP3P'& % nextKeyViewP3cP3cP3xvP'&%delegateP3vP2P2zP2P2fvP2tP2gP2kvP±2lvPñ2nvPı2ovPű2vPƱ2vPDZ2vPȱ2vPɱ2vPʱ2dvP˱2vP̱2Pͱ2evPα2Pϱ3vPб&%docTypesButtonPѱ3vfPұ& % docTypesPanelPӱ3vPԱ&%addDocTypeButtonPձ3vePֱ&%removeDocTypeButtonPױ3vPر&%docBasedAppButtonPٱ4vPڱ&%showDocTypesPanel:P۱3vtPܱ& % docTypeLabelPݱ3vgPޱ& % docTypeFieldP߱3vkP& % docNameLabelP3vP& % docNameFieldP3vP& % docIconLabelP3vP& % docIconFieldP3voP&%docExtensionsLabelP3vP&%docExtensionsFieldP3vnP& % docRoleLabelP3vP& % docRoleFieldP3vlP& % docClassLabelP3vdP& % docClassFieldP3gP'& % nextKeyViewP3P3P3P3dP3dgP4vP&%setDocBasedApp:P4vP& % addDocType:P4evP&%removeDocType:P4gvP& % docFieldSet:P4vP4vP4vP4vP4dvP2qP2sP 2hP 2yP 2vP 3vsP & % docTypesListP3vyP&%extensionsColumnP3vP& % roleColumnP3svP'&%delegateP3svP'& % dataSourceP2vP3vP'& % classColumnP3vhP'& % nameColumnP3gvP'&%delegateP3vP3vP3vP 3vP!3dvP"2pvP#2P$2P%2P&2rP'3vrP('&%projectAttributesViewP)4vP*& % setAppType:P+3vP,& % appTypeFieldP-2iP.3viP/&%helpTextP00&</cOYProjectCenter-0.6.1/Modules/Projects/Application/Resources/Main.gorm/data.info000644 001751 000024 00000000322 10544200321 027765 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Modules/Projects/Application/Resources/Main.gorm/data.classes000644 001751 000024 00000000441 10544200321 030471 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; AppController = { Actions = ( "showPrefPanel:" ); Outlets = ( ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "showPrefPanel:" ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Projects/Application/Resources/Main.gorm/objects.gorm000644 001751 000024 00000010134 10544200321 030520 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000012:00000084:00000001:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&&01NSString& %  MenuItem701 NSMenuItem0&% Windows0&&&%01NSImage01NSMutableString&% common_2DCheckMark0 0 & %  common_2DDash2submenuAction:%0 1 NSMenu0 1 NSMutableArray1 NSArray&0 0&% Arrange In Front0&&&% %00&% Miniaturize Window0&% m&&% %00& %  Close Window0&% w&&% %0 0& %  Main Menu0 &00&% Info0&&&% %0 0 &00& %  Info Panel...0 &&&% %0!0"&% Preferences...0#&&&% %0$0%&% Help...0&&% ?&&% %0'0(&% Services0)&&&% %0* (0+ &0,0-&% Hide0.&% h&&% %0/00&% Quit01&% q&&% %02& %  MenuItem2103& %  GormNSMenu04& %  MenuItem8 05& %  MenuItem1006& %  NSWindowsMenu 07& %  MenuItem22!08& %  AppController091 GSNibItem8  &0:& %  MenuItem90;& %  MenuItem110<& %  MenuItem23$0=& %  MenuItem12,0>& %  MenuItem24'0?& %  MenuItem130@& %  GormNSMenu1*0A& %  MenuItem25/0B& %  MenuItem14,0C& %  GormNSMenu2 0D& %  MenuItem260E& %  MenuItem150F& %  GormNSMenu30G& %  MenuItem16 0H& %  MenuItem170I& %  MenuItem180J& %  MenuItem19,0K&% GSCustomClassMap0L&0M&% NSServicesMenu*0N& %  NSVisible0O &0P&% NSMenu0Q&%NSOwner0R& %  NSApplication0S& %  MenuItem1/0T&% MenuItem,0U& %  MenuItem20V& %  MenuItem30W& %  MenuItem4!0X& %  MenuItem5$0Y& %  MenuItem200Z& %  MenuItem6'0[ &0\1 NSNibConnectorP0]&%NSOwner0^ TP0_ SP0` YP0a FY0b VF0c WF0d XF0e ZP0f MZ0g EP0h CE0i GC0j HC0k IC0l1NSNibControlConnectorYP0m&% submenuAction:0nEP0o&% submenuAction:0pZP0q&% submenuAction:0rT0s&%NSFirst0t&% hide:0uSs0v& %  terminate:0wVs0x&% orderFrontStandardInfoPanel:0yGs0z&% arrangeInFront:0{Hs0|&% performMiniaturize:0}Is0~& %  performClose:0 8]0W80&% showPrefPanel:01NSNibOutletConnector]80&% delegate01 GSMutableSet1 NSMutableSet1NSSet&9ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/000755 001751 000024 00000000000 11766110767 022552 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/000755 001751 000024 00000000000 11766110767 024524 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/PCEditor.h000644 001751 000024 00000011417 11410157271 024363 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola 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. */ #import #import #import #import @class PCEditorView; @interface PCEditor : NSObject { id _editorManager; NSScrollView *_extScrollView; PCEditorView *_extEditorView; NSScrollView *_intScrollView; PCEditorView *_intEditorView; NSTextStorage *_storage; NSMutableString *_path; NSString *_categoryPath; NSWindow *_window; BOOL _isEdited; BOOL _isEditable; BOOL _isWindowed; BOOL _isExternal; // Search NSView *goToLineView; NSView *quickFindView; // Parser id aParser; NSArray *parserClasses; NSArray *parserMethods; // Syntax highlighter (used in PCEditorView) BOOL _highlightSyntax; // Default text attributes (not syntax) and open/close brackets // highlighting ([],{},()) NSFont *defaultFont; NSFont *highlightFont; NSColor *textColor; NSColor *highlightColor; NSColor *backgroundColor; NSColor *readOnlyColor; NSColor *textBackground; // location of the highlit delimiter character unsigned int highlitCharacterLocation; // is YES if we are currently highlighting a delimiter character // otherwise NO BOOL isCharacterHighlit; int highlited_chars[2]; // the stored color and font attributes of the highlit character, so // that they can be restored later on when the character is un-highlit NSColor *previousFGColor; NSColor *previousBGColor; NSColor *previousFont; // This is used to protect that -textViewDidChangeSelection: invocations // don't do anything when the text view changing, because this causes // further changes to the text view and infinite recursive invocations // of this method. BOOL editorTextViewIsPressingKey; // keep one undo manager for the editor NSUndoManager *undoManager; } - (BOOL)editorShouldClose; // =========================================================================== // ==== Window delegate // =========================================================================== - (BOOL)windowShouldClose:(id)sender; - (void)windowDidBecomeKey:(NSNotification *)aNotification; - (void)windowDidResignKey:(NSNotification *)aNotification; // =========================================================================== // ==== TextView (_intEditorView, _extEditorView) delegate // =========================================================================== - (void)textDidChange:(NSNotification *)aNotification; - (void)textViewDidChangeSelection:(NSNotification *)notification; - (void)editorTextViewWillPressKey:sender; - (void)editorTextViewDidPressKey:sender; - (BOOL)becomeFirstResponder:(PCEditorView *)view; - (BOOL)resignFirstResponder:(PCEditorView *)view; // =========================================================================== // ==== Parser and scrolling // =========================================================================== - (void)fileStructureItemSelected:(NSString *)item; // CodeEditor protocol - (void)scrollToClassName:(NSString *)className; - (void)scrollToMethodName:(NSString *)methodName; - (void)scrollToLineNumber:(unsigned int)lineNumber; // CodeEditor protocol @end @interface PCEditor (UInterface) - (void)_createWindow; - (void)_createInternalView; - (PCEditorView *)_createEditorViewWithFrame:(NSRect)fr; @end @interface PCEditor (Menu) - (void)pipeOutputOfCommand:(NSString *)command; // Find - (void)findNext:sender; - (void)findPrevious:sender; - (void)jumpToSelection:sender; @end @interface PCEditor (Parenthesis) - (void)unhighlightCharacter: (NSTextView *)editorView; - (void)highlightCharacterAt:(unsigned int)location inEditor: (NSTextView *)editorView; - (void)computeNewParenthesisNesting: (NSTextView *)editorView; @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/PCEditorView.m000644 001751 000024 00000035043 11517277130 025231 0ustar00multixstaff000000 000000 /* PCEditorView.m Implementation of the PCEditorView class for the ProjectManager application. Copyright (C) 2005-2010 Free Software Foundation Saso Kiselkov Serg Stoyan Riccardo Mottola This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import "PCEditorView.h" #import #import #import #import #import #import #import #import #import #import #import #import "PCEditor.h" #import "SyntaxHighlighter.h" static inline float my_abs(float aValue) { if (aValue >= 0) { return aValue; } else { return -aValue; } } /** * Computes the indenting offset of the last line before the passed * start offset containg text in the passed string, e.g. * * ComputeIndentingOffset(@" Hello World", 12) = 2 * ComputeIndentingOffset(@" Try this one out\n" * @" ", 27) = 4 * * @argument string The string in which to do the computation. * @argument start The start offset from which to start looking backwards. * @return The ammount of spaces the last line containing text is offset * from it's start. */ static int ComputeIndentingOffset(NSString * string, unsigned int start) { SEL sel = @selector(characterAtIndex:); unichar (* charAtIndex)(NSString *, SEL, unsigned int) = (unichar (*)(NSString *, SEL, unsigned int)) [string methodForSelector: sel]; unichar c; int firstCharOffset = -1; int offset; int startOffsetFromLineStart = -1; for (offset = start - 1; offset >= 0; offset--) { c = charAtIndex(string, sel, offset); if (c == '\n') { if (startOffsetFromLineStart < 0) { startOffsetFromLineStart = start - offset - 1; } if (firstCharOffset >= 0) { firstCharOffset = firstCharOffset - offset - 1; break; } } else if (!isspace(c)) { firstCharOffset = offset; } } return firstCharOffset >= 0 ? firstCharOffset : 0; /* if (firstCharOffset >= 0) { // if the indenting of the current line is lower than the indenting // of the previous actual line, we return the lower indenting if (startOffsetFromLineStart >= 0 && startOffsetFromLineStart < firstCharOffset) { return startOffsetFromLineStart; } // otherwise we return the actual indenting, so that any excess // space is trimmed and the lines are aligned according the last // indenting level else { return firstCharOffset; } } else { return 0; }*/ } @interface PCEditorView (Private) - (void)insertSpaceFillAlignedAtTabsOfSize:(unsigned int)tabSize; - (void)performIndentation; @end @implementation PCEditorView (Private) /** * Makes the receiver insert as many spaces at the current insertion * location as are required to reach the nearest tab-character boundary. * * @argument tabSize Specifies how many spaces represent one tab. */ - (void)insertSpaceFillAlignedAtTabsOfSize:(unsigned int)tabSize { char buf[tabSize]; NSString * string = [self string]; unsigned int lineLength; SEL sel = @selector(characterAtIndex:); unichar (* charAtIndex)(NSString*, SEL, unsigned int) = (unichar (*)(NSString*, SEL, unsigned int)) [string methodForSelector: sel]; int i; int skip; // computes the length of the current line for (i = [self selectedRange].location - 1, lineLength = 0; i >= 0; i--, lineLength++) { if (charAtIndex(string, sel, i) == '\n') { break; } } skip = tabSize - (lineLength % tabSize); if (skip == 0) { skip = tabSize; } memset(buf, ' ', skip); [super insertText: [NSString stringWithCString: buf length: skip]]; } // Go backward to first '\n' char or start of file - (int)lineStartIndexForIndex:(int)index forString:(NSString *)string { int line_start; // Get line start index moving from index backwards for (line_start = index;line_start > 0;line_start--) { if ([string characterAtIndex:line_start] == '\n' && line_start != index) { line_start++; break; } } NSLog(@"index: %i start: %i", index, line_start); return line_start > index ? index : line_start; } - (int)lineEndIndexForIndex:(int)index forString:(NSString *)string { int line_end; int string_length = [string length]; // Get line start index moving from index backwards for (line_end = index;line_end < string_length;line_end++) { if ([string characterAtIndex:line_end] == '\n') { break; } } NSLog(@"index: %i end: %i", index, line_end); return line_end < string_length ? line_end : string_length; } - (int)previousLineStartIndexForIndex:(int)index forString:(NSString *)string { int cur_line_start; int prev_line_start; cur_line_start = [self lineStartIndexForIndex:index forString:string]; prev_line_start = [self lineStartIndexForIndex:cur_line_start-1 forString:string]; NSLog(@"index: %i prev_start: %i", index, prev_line_start); return prev_line_start; } - (int)nextLineStartIndexForIndex:(int)index forString:(NSString *)string { int cur_line_end; int next_line_start; int string_length = [string length]; cur_line_end = [self lineEndIndexForIndex:index forString:string]; next_line_start = cur_line_end + 1; if (next_line_start < string_length) { return next_line_start; } else { return string_length; } } - (unichar)firstCharOfLineForIndex:(int)index forString:(NSString *)string { int line_start = [self lineStartIndexForIndex:index forString:string]; int i; unichar c; // Get leading whitespaces range for (i = line_start; i >= 0; i++) { c = [string characterAtIndex:i]; if (!isspace(c)) { break; } } fprintf(stderr, "First char: %c\n", c); return c; } - (unichar)firstCharOfPrevLineForIndex:(int)index forString:(NSString *)string { int line_start = [self previousLineStartIndexForIndex:index forString:string]; return [self firstCharOfLineForIndex:line_start forString:string]; } - (unichar)firstCharOfNextLineForIndex:(int)index { return 0; } - (void)performIndentation { NSString *string = [self string]; int location; int line_start; int offset; unichar c, plfc, clfc; NSRange wsRange; NSMutableString *indentString; NSCharacterSet *wsCharSet = [NSCharacterSet whitespaceCharacterSet]; int i; // int point; location = [self selectedRange].location; // point = [self nextLineStartIndexForIndex:location forString:string]; // [self setSelectedRange:NSMakeRange(point, 0)]; clfc = [self firstCharOfLineForIndex:location forString:string]; plfc = [self firstCharOfPrevLineForIndex:location forString:string]; // Get leading whitespaces range line_start = [self lineStartIndexForIndex:location forString:string]; for (offset = line_start; offset >= 0; offset++) { c = [string characterAtIndex:offset]; if (![wsCharSet characterIsMember:c]) { wsRange = NSMakeRange(line_start, offset-line_start); break; } } // Get indent line_start = [self previousLineStartIndexForIndex:location forString:string]; for (offset = line_start; offset >= 0; offset++) { c = [string characterAtIndex:offset]; if (![wsCharSet characterIsMember:c]) { offset = offset - line_start; NSLog(@"offset: %i", offset); break; } } NSLog (@"clfc: %c plfc: %c", clfc, plfc); if (plfc == '{' || clfc == '{') { offset += 2; } else if (clfc == '}' && plfc != '{') { offset -= 2; } // Get offset from BOL of previous line // offset = ComputeIndentingOffset([self string], line_start-1); NSLog(@"Indent offset: %i", offset); // Replace current line whitespaces with new ones indentString = [[NSMutableString alloc] initWithString:@""]; for (i = offset; i > 0; i--) { [indentString appendString:@" "]; } if ([self shouldChangeTextInRange:wsRange replacementString:indentString]) [[self textStorage] replaceCharactersInRange:wsRange withString:indentString]; /* if (location > line_start + offset) { point = location - offset; } else { point = location; } [self setSelectedRange:NSMakeRange(point, 0)];*/ [indentString release]; } @end @implementation PCEditorView + (NSFont *)defaultEditorFont { NSUserDefaults *df = [NSUserDefaults standardUserDefaults]; NSString *fontName; float fontSize; NSFont *font = nil; fontName = [df objectForKey:@"EditorFont"]; fontSize = [df floatForKey:@"EditorFontSize"]; if (fontName != nil) { font = [NSFont fontWithName:fontName size:fontSize]; } if (font == nil) { font = [NSFont userFixedPitchFontOfSize:fontSize]; } return font; } + (NSFont *)defaultEditorBoldFont { NSFont *font = [self defaultEditorFont]; return [[NSFontManager sharedFontManager] convertFont:font toHaveTrait:NSBoldFontMask]; } + (NSFont *)defaultEditorItalicFont { NSFont *font = [self defaultEditorFont]; return [[NSFontManager sharedFontManager] convertFont:font toHaveTrait:NSItalicFontMask]; } + (NSFont *)defaultEditorBoldItalicFont { NSFont *font = [self defaultEditorFont]; return [[NSFontManager sharedFontManager] convertFont:font toHaveTrait:NSBoldFontMask | NSItalicFontMask]; } // --- - (BOOL)becomeFirstResponder { return [editor becomeFirstResponder:self]; } - (BOOL)resignFirstResponder { return [editor resignFirstResponder:self]; } - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; } // --- - (void)dealloc { TEST_RELEASE(highlighter); [super dealloc]; } - (void)setEditor:(PCEditor *)anEditor { editor = anEditor; } - (PCEditor *)editor { return editor; } - (void)awakeFromNib { /* NSData * data; NSUserDefaults * df = [NSUserDefaults standardUserDefaults]; drawCrosshairs = [df boolForKey: @"DrawCrosshairs"]; if (drawCrosshairs) { if ((data = [df dataForKey: @"CrosshairColor"]) == nil || (crosshairColor = [NSUnarchiver unarchiveObjectWithData: data]) == nil) { crosshairColor = [NSColor lightGrayColor]; } [crosshairColor retain]; } guides = [NSMutableArray new];*/ } - (void)drawRect:(NSRect)r { NSRange drawnRange; if (highlighter) { drawnRange = [[self layoutManager] glyphRangeForBoundingRect:r inTextContainer:[self textContainer]]; [highlighter highlightRange:drawnRange]; } [super drawRect:r]; } - (void)createSyntaxHighlighterForFileType:(NSString *)fileType { ASSIGN(highlighter, [[[SyntaxHighlighter alloc] initWithFileType:fileType textStorage:[self textStorage]] autorelease]); } - (void)insertText:text { if ([text isKindOfClass:[NSString class]]) { NSString * string = text; if ([text characterAtIndex:0] == 27) { NSLog(@"ESC key pressed. Ignoring it"); return; } if ([string isEqualToString:@"\n"]) { /* if ([[NSUserDefaults standardUserDefaults] boolForKey:@"ReturnDoesAutoindent"]) {*/ int location = [self selectedRange].location; int offset = ComputeIndentingOffset([self string], location); char *buf; buf = (char *) malloc((offset + 2) * sizeof(unichar)); buf[0] = '\n'; memset(&buf[1], ' ', offset); buf[offset+1] = '\0'; [super insertText:[NSString stringWithCString:buf]]; free(buf); /* } else { [super insertText:text]; }*/ } else if ([string isEqualToString:@"\t"]) { [self performIndentation]; /* switch ([[NSUserDefaults standardUserDefaults] integerForKey:@"TabConversion"]) { case 0: // no conversion [super insertText:text]; break; case 1: // 2 spaces [super insertText:@" "]; break; case 2: // 4 spaces [super insertText:@" "]; break; case 3: // 8 spaces [super insertText:@" "]; break; case 4: // aligned to tab boundaries of 2 spaces long tabs [self insertSpaceFillAlignedAtTabsOfSize:2]; break; case 5: // aligned to tab boundaries of 4 spaces long tabs [self insertSpaceFillAlignedAtTabsOfSize:4]; break; case 6: // aligned to tab boundaries of 8 spaces long tabs [self insertSpaceFillAlignedAtTabsOfSize:8]; break; }*/ } else { [super insertText: text]; } } else { [super insertText: text]; } } /* This extra change tracking is required in order to inform the document * that the text is changing _before_ it actually changes. This is required * so that the document can un-highlight any highlit characters before the * change occurs and after the change recompute any new highlighting. */ - (void)keyDown:(NSEvent *)ev { [editor editorTextViewWillPressKey:self]; [super keyDown:ev]; [editor editorTextViewDidPressKey:self]; } - (void)paste:sender { [editor editorTextViewWillPressKey:self]; [super paste:sender]; [editor editorTextViewDidPressKey:self]; } - (void)mouseDown:(NSEvent *)ev { [editor editorTextViewWillPressKey:self]; [super mouseDown:ev]; [editor editorTextViewDidPressKey:self]; } - (NSRect)selectionRect { return _insertionPointRect; } @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/SyntaxHighlighter.m000644 001751 000024 00000056364 10544200321 026366 0ustar00multixstaff000000 000000 /* SyntaxHighlighter.m Implementation of the SyntaxHighlighter class for the ProjectManager application. Copyright (C) 2005 Saso Kiselkov This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import "SyntaxHighlighter.h" #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "PCEditorView.h" #import "SyntaxDefinition.h" static NSString * const KeywordsNotFixedAttributeName = @"KNF"; static NSString * const ContextAttributeName = @"C"; static inline BOOL my_isspace(unichar c) { if (c == ' ' || c == '\t' || c == '\f') { return YES; } else { return NO; } } /** * This function looks ahead and after `startRange' in `string' and * tries to return the range of a whitespace delimited word at the * specified range. E.g. string = @"abc def ghi" and startRange = {5, 1}, * then {4, 3} is returned, because the word "def" lies within the range. * Please note that even when the range points to a whitespace area * (e.g. string = @"abc def" and startRange = {3, 1}), the lookup * will occur and not return `not found' (e.g. in the above example it * would return {0, 7}). When the range is also surrounded by whitespace * (e.g. @" " and startRange = {1, 1}) the startRange itself is returned. */ static NSRange RangeOfWordInString(NSString * string, NSRange startRange) { SEL sel = @selector(characterAtIndex:); unichar (*characterAtIndex)(id, SEL, unsigned int) = (unichar (*)(id, SEL, unsigned int)) [string methodForSelector: sel]; int ahead, after; unsigned int length = [string length]; for (ahead = 1; ahead <= (int) startRange.location; ahead++) { if (my_isspace(characterAtIndex(string, sel, startRange.location - ahead))) { break; } } ahead--; for (after = 0; (after + NSMaxRange(startRange)) < length; after++) { if (my_isspace(characterAtIndex(string, sel, (after + NSMaxRange(startRange))))) { break; } } { unsigned int start = startRange.location - ahead, length = startRange.length + ahead + after; if (start > 0) { start--; length++; } if (length + 1 < length) { length++; } return NSMakeRange(start, length); } } static inline BOOL LocateString(NSString * str, unichar * buf, unsigned int length, unsigned int offset) { unsigned int i, n; for (i = 0, n = [str length]; i < n; i++) { if (i >= length) { return NO; } if (buf[i + offset] != [str characterAtIndex: i]) { return NO; } } return YES; } @interface SyntaxHighlighter (Private) - (void) fixUpContextsInRange: (NSRange) r; - (void) fixUpKeywordsInRange: (NSRange) r; - (void) lazilyFixUpKeywordsInRange: (NSRange) r; - (void) assignGraphicalAttributesOfContext: (unsigned int) context toRange: (NSRange) r; - (void) assignGraphicalAttributesOfKeyword: (unsigned int) keyword inContext: (unsigned int) context toRange: (NSRange) r; - (int) contextBeforeRange: (NSRange) r; - (int) contextAfterRange: (NSRange) r; - (int) contextAtEndOfRange: (NSRange) r; - (void) beginEditingIfNeeded; - (void) endEditingIfNeeded; @end @implementation SyntaxHighlighter (Private) /** * Fixes up the contexts inside the text storage in range `r'. A context * is recognized by the "Context" attribute which holds the number of * the context. This method also applies graphical attributes of the * corresponding contexts to the context ranges. */ - (void) fixUpContextsInRange: (NSRange) r { TextPattern ** beginnings = [syntax contextBeginnings]; const char * beginningChars = [syntax contextBeginningCharacters]; unsigned numBeginningChars = [syntax numberOfContextBeginningCharacters]; unsigned int i; unichar * string; unsigned int context; string = (unichar *) malloc(r.length * sizeof(unichar)); [[textStorage string] getCharacters: string range: r]; i = 0; context = [self contextBeforeRange: r]; while (i < r.length) { // marks the beginning of the currently processed range unsigned int mark = i; // default context - look for beginning symbols if (context == 0) { unsigned int j = 0; TextPattern * pattern = NULL; NSRange ctxtRange; int l = 0; TextPattern ** skips = [syntax contextSkipsForContext: 0]; const char * skipChars = [syntax contextSkipCharactersForContext: 0]; unsigned int numSkipChars = [syntax numberOfContextSkipCharactersForContext: 0]; for (;i < r.length; i++) { unichar c = string[i]; // Optimize - look into the skip characters array if the // character could be the beginning of a skip sequence. // If not, don't perform skip sequence recognition at all. if (c < numSkipChars && skipChars[c]) { for (j = 0; (pattern = skips[j]) != NULL; j++) { l = CheckTextPatternPresenceInString(pattern, string, r.length, i); if (l > 0) { break; } } if (l > 0) { i += l - 1; continue; } } // optimize - skip unneeded characters if (c < numBeginningChars && !beginningChars[c]) { continue; } for (j = 0; (pattern = beginnings[j]) != NULL; j++) { l = CheckTextPatternPresenceInString(pattern, string, r.length, i); if (l > 0) { break; } } if (l > 0) { break; } } // non-default contexts begin with number 1, not zero j++; ctxtRange = NSMakeRange(r.location + mark, i - mark); if (ctxtRange.length > 0) { // add an attribute telling the context into the text storage [textStorage addAttribute: ContextAttributeName value: [NSNumber numberWithInt: 0] range: ctxtRange]; [self assignGraphicalAttributesOfContext: 0 toRange: ctxtRange]; } ctxtRange = NSMakeRange(r.location + i, l); if (ctxtRange.length > 0) { [textStorage addAttribute: ContextAttributeName value: [NSNumber numberWithInt: j] range: ctxtRange]; [self assignGraphicalAttributesOfContext: j toRange: ctxtRange]; } i += l; // switch to the found context again context = j; } // specific context - look for it's terminator, but skip it's // exceptions else { int l = 0; TextPattern * ending = [syntax contextEndingForContext: context - 1]; NSRange ctxtRange; TextPattern ** skips = [syntax contextSkipsForContext: context]; const char * skipChars = [syntax contextSkipCharactersForContext: context]; unsigned int numSkipChars = [syntax numberOfContextSkipCharactersForContext: context]; for (;i < r.length; i++) { unichar c = string[i]; unsigned int j; if (c < numSkipChars && skipChars[c]) { unsigned int j; TextPattern * pattern; for (j = 0; (pattern = skips[j]) != NULL; j++) { l = CheckTextPatternPresenceInString(pattern, string, r.length, i); if (l > 0) { break; } } if (l > 0) { i += l - 1; continue; } } l = CheckTextPatternPresenceInString(ending, string, r.length, i); if (l > 0) { break; } } ctxtRange = NSMakeRange(r.location + mark, i - mark); if (ctxtRange.length > 0) { // add an attribute telling the context into the // text storage [textStorage addAttribute: ContextAttributeName value: [NSNumber numberWithInt: context] range: ctxtRange]; [self assignGraphicalAttributesOfContext: context toRange: ctxtRange]; } ctxtRange = NSMakeRange(r.location + i, l); if (ctxtRange.length > 0) { [textStorage addAttribute: ContextAttributeName value: [NSNumber numberWithInt: 0] range: ctxtRange]; [self assignGraphicalAttributesOfContext: context toRange: ctxtRange]; } i += l; // switch to the default context again context = 0; } } free(string); } - (void) fixUpKeywordsInRange: (NSRange) r { unichar * string; unsigned int i; string = malloc(r.length * sizeof(unichar)); [[textStorage string] getCharacters: string range: r]; for (i = 0; i < r.length;) { NSRange contextRange; TextPattern ** patterns; int context; context = [[textStorage attribute: ContextAttributeName atIndex: i + r.location effectiveRange: &contextRange] intValue]; contextRange = NSIntersectionRange(r, contextRange); contextRange.location -= r.location; patterns = [syntax keywordsInContext: context]; while (i < NSMaxRange(contextRange)) { unichar c = string[i]; unsigned int l = 0; unsigned int j; TextPattern * pattern; // skip whitespace - it can't start a keyword if (my_isspace(c) || c == '\r' || c == '\n') { i++; continue; } for (j = 0; (pattern = patterns[j]) != NULL; j++) { l = CheckTextPatternPresenceInString(pattern, string, r.length, i); if (l > 0) { break; } } // found a pattern? if (pattern != NULL) { NSRange keywordRange = NSMakeRange(i + r.location, l); [self assignGraphicalAttributesOfKeyword: j inContext: context toRange: keywordRange]; i += l; } else { i++; } } } free(string); } - (void) lazilyFixUpKeywordsInRange: (NSRange) r { unsigned int i; BOOL localDidBeginEditing = NO; for (i = r.location; i < NSMaxRange(r);) { NSRange effectiveRange; // locate non-fixed areas and fix them up if ([textStorage attribute: KeywordsNotFixedAttributeName atIndex: i longestEffectiveRange: &effectiveRange inRange: r] != nil) { if (localDidBeginEditing == NO) { localDidBeginEditing = YES; [textStorage beginEditing]; } effectiveRange = NSIntersectionRange(effectiveRange, r); [self fixUpKeywordsInRange: effectiveRange]; [textStorage removeAttribute: KeywordsNotFixedAttributeName range: effectiveRange]; i += effectiveRange.length; } // skip over fixed areas else { i += effectiveRange.length; } } if (localDidBeginEditing == YES) { [textStorage endEditing]; } } - (void) assignGraphicalAttributesOfContext: (unsigned int) ctxt toRange: (NSRange) r { BOOL bold, italic; NSColor * color; color = [syntax foregroundColorForContext: ctxt]; if (color != nil) { [textStorage addAttribute: NSForegroundColorAttributeName value: color range: r]; } else { [textStorage removeAttribute: NSForegroundColorAttributeName range: r]; } color = [syntax backgroundColorForContext: ctxt]; if (color != nil) { [textStorage addAttribute: NSBackgroundColorAttributeName value: color range: r]; } else { [textStorage removeAttribute: NSBackgroundColorAttributeName range: r]; } bold = [syntax isBoldFontForContext: ctxt]; italic = [syntax isItalicFontForContext: ctxt]; if (bold && italic) { [textStorage addAttribute: NSFontAttributeName value: boldItalicFont range: r]; } else if (bold) { [textStorage addAttribute: NSFontAttributeName value: boldFont range: r]; } else if (italic) { [textStorage addAttribute: NSFontAttributeName value: italicFont range: r]; } else { [textStorage addAttribute: NSFontAttributeName value: normalFont range: r]; } } - (void) assignGraphicalAttributesOfKeyword: (unsigned int) keyword inContext: (unsigned int) context toRange: (NSRange) r { BOOL bold, italic; NSColor * color; color = [syntax foregroundColorForKeyword: keyword inContext: context]; if (color != nil) { [textStorage addAttribute: NSForegroundColorAttributeName value: color range: r]; } else { color = [syntax foregroundColorForContext: context]; if (color != nil) { [textStorage addAttribute: NSForegroundColorAttributeName value: color range: r]; } else { [textStorage removeAttribute: NSForegroundColorAttributeName range: r]; } } color = [syntax backgroundColorForKeyword: keyword inContext: context]; if (color != nil) { [textStorage addAttribute: NSBackgroundColorAttributeName value: color range: r]; } else { color = [syntax backgroundColorForContext: context]; if (color != nil) { [textStorage addAttribute: NSBackgroundColorAttributeName value: color range: r]; } else { [textStorage removeAttribute: NSBackgroundColorAttributeName range: r]; } } bold = [syntax isBoldFontForKeyword: keyword inContext: context]; italic = [syntax isItalicFontForKeyword: keyword inContext: context]; if (bold && italic) { [textStorage addAttribute: NSFontAttributeName value: boldItalicFont range: r]; } else if (bold) { [textStorage addAttribute: NSFontAttributeName value: boldFont range: r]; } else if (italic) { [textStorage addAttribute: NSFontAttributeName value: italicFont range: r]; } else { [textStorage addAttribute: NSFontAttributeName value: normalFont range: r]; } } - (int) contextBeforeRange: (NSRange) r { NSRange tmp; if (r.location == 0) { return 0; } else { return [[textStorage attribute: ContextAttributeName atIndex: r.location - 1 effectiveRange: &tmp] intValue]; } } - (int) contextAfterRange: (NSRange) r { NSRange tmp; unsigned int i, length; i = NSMaxRange(r); length = [textStorage length]; if (length == 0) { return 0; } else if (i < length) { return [[textStorage attribute: ContextAttributeName atIndex: i effectiveRange: &tmp] intValue]; } else { return 0; } } - (int) contextAtEndOfRange: (NSRange) r { NSRange tmp; int i = (int) NSMaxRange(r) - 1; if (i < 0) { return 0; } else { return [[textStorage attribute: ContextAttributeName atIndex: i effectiveRange: &tmp] intValue]; } } - (void) beginEditingIfNeeded { if (didBeginEditing == NO) { didBeginEditing = YES; [textStorage beginEditing]; } } - (void) endEditingIfNeeded { if (didBeginEditing == YES) { didBeginEditing = NO; [textStorage endEditing]; } } @end @implementation SyntaxHighlighter - initWithFileType:(NSString *)fileType textStorage:(NSTextStorage *)aStorage { if ([self init]) { NSRange r; ASSIGN(textStorage, aStorage); ASSIGN(syntax, [SyntaxDefinition syntaxDefinitionForFileType:fileType textStorage:textStorage]); // no syntax definition - no highlighting possible if (syntax == nil) { [self release]; return nil; } // mark all of the text storage as requiring keyword fixing r = NSMakeRange(0, [textStorage length]); [textStorage addAttribute: KeywordsNotFixedAttributeName value: [NSNull null] range: r]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(textStorageWillProcessEditing:) name: NSTextStorageWillProcessEditingNotification object: textStorage]; ASSIGN(normalFont, [PCEditorView defaultEditorFont]); ASSIGN(boldFont, [PCEditorView defaultEditorBoldFont]); ASSIGN(italicFont, [PCEditorView defaultEditorItalicFont]); ASSIGN(boldItalicFont, [PCEditorView defaultEditorBoldItalicFont]); return self; } else { return nil; } } - (void) dealloc { NSDebugLLog(@"SyntaxHighlighter", @"SyntaxHighlighter: dealloc"); [[NSNotificationCenter defaultCenter] removeObserver: self]; TEST_RELEASE(textStorage); TEST_RELEASE(syntax); TEST_RELEASE(normalFont); TEST_RELEASE(boldFont); TEST_RELEASE(italicFont); TEST_RELEASE(boldItalicFont); [super dealloc]; } - (void) highlightRange: (NSRange) r { if (delayedProcessedRange.length > 0) { [self beginEditingIfNeeded]; [self fixUpContextsInRange: delayedProcessedRange]; [self fixUpKeywordsInRange: delayedProcessedRange]; if ([self contextAtEndOfRange: delayedProcessedRange] != [self contextAfterRange: delayedProcessedRange]) { NSRange invalidatedRange; lastProcessedContextIndex = NSMaxRange(delayedProcessedRange); invalidatedRange = NSMakeRange(NSMaxRange(delayedProcessedRange), [textStorage length] - NSMaxRange(delayedProcessedRange)); [textStorage addAttribute: KeywordsNotFixedAttributeName value: [NSNull null] range: invalidatedRange]; } } else { if (delayedProcessedRange.location > 0 && [self contextBeforeRange: delayedProcessedRange] != [self contextAfterRange: delayedProcessedRange]) { NSRange invalidatedRange; lastProcessedContextIndex = NSMaxRange(delayedProcessedRange); [self beginEditingIfNeeded]; invalidatedRange = NSMakeRange(NSMaxRange(delayedProcessedRange), [textStorage length] - NSMaxRange(delayedProcessedRange)); [textStorage addAttribute: KeywordsNotFixedAttributeName value: [NSNull null] range: invalidatedRange]; } } delayedProcessedRange = NSMakeRange(0, 0); r = RangeOfWordInString([textStorage string], r); // need to fixup contexts? if (NSMaxRange(r) > lastProcessedContextIndex) { unsigned int prevContext; NSRange fixupRange; fixupRange = NSMakeRange(lastProcessedContextIndex, NSMaxRange(r) - lastProcessedContextIndex); [self beginEditingIfNeeded]; [self fixUpContextsInRange: fixupRange]; lastProcessedContextIndex = NSMaxRange(r); } [self lazilyFixUpKeywordsInRange: r]; [self endEditingIfNeeded]; } - (void) textStorageWillProcessEditing: (NSNotification *) notif { if ([textStorage editedMask] & NSTextStorageEditedCharacters) { NSRange editedRange = [textStorage editedRange]; delayedProcessedRange = RangeOfWordInString([textStorage string], editedRange); if (lastProcessedContextIndex > editedRange.location) { lastProcessedContextIndex += [textStorage changeInLength]; } } } @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/TextFinder.h000644 001751 000024 00000003131 10544200321 024750 0ustar00multixstaff000000 000000 #import #define Forward YES #define Backward NO @interface TextFinder : NSObject { NSString *findString; id findTextField; id replaceTextField; id ignoreCaseButton; id findNextButton; id replaceAllScopeMatrix; id statusField; BOOL findStringChangedSinceLastPasteboardUpdate; BOOL lastFindWasSuccessful; /* A bit of a kludge */ } /* Common way to get a text finder. One instance of TextFinder per app is good enough. */ + (id)sharedInstance; /* Main method for external users; does a find in the first responder. Selects found range or beeps. */ - (BOOL)find:(BOOL)direction; /* Loads UI lazily */ - (NSPanel *)findPanel; /* Gets the first responder and returns it if it's an NSTextView */ - (NSTextView *)textObjectToSearchIn; /* Get/set the current find string. Will update UI if UI is loaded */ - (NSString *)findString; - (void)setFindString:(NSString *)string; /* Misc internal methods */ - (void)appDidActivate:(NSNotification *)notification; - (void)addWillDeactivate:(NSNotification *)notification; - (void)loadFindStringFromPasteboard; - (void)loadFindStringToPasteboard; /* Methods sent from the find panel UI */ - (void)findNext:(id)sender; - (void)findPrevious:(id)sender; - (void)findNextAndOrderFindPanelOut:(id)sender; - (void)replace:(id)sender; - (void)replaceAndFind:(id)sender; - (void)replaceAll:(id)sender; - (void)orderFrontFindPanel:(id)sender; @end @interface NSString (NSStringTextFinding) - (NSRange)findString:(NSString *)string selectedRange:(NSRange)selectedRange options:(unsigned)mask wrap:(BOOL)wrapFlag; @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/PCEditor.m000644 001751 000024 00000104545 11517277310 024402 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola 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. */ #import "PCEditor.h" #import "PCEditorView.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; rect = NSMakeRect(0,0,windowWidth,320); _window = [[NSWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:YES]; [_window setReleasedWhenClosed:NO]; [_window setMinSize:NSMakeSize(512,320)]; [_window setDelegate:self]; [_window center]; 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]; // Text 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); // Honor "edited" state [_window setDocumentEdited:_isEdited]; } - (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 = nil; NSTextContainer *tc = nil; NSLayoutManager *lm = nil; /* * 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 setBackgroundColor:textBackground]; [ev setTextColor:textColor]; [ev setEditor:self]; if (_highlightSyntax) { [ev createSyntaxHighlighterForFileType:[_path pathExtension]]; } [ev setMinSize:NSMakeSize(0, 0)]; [ev setMaxSize:NSMakeSize(1e7, 1e7)]; [ev setRichText: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)]; [ev setEditable:_isEditable]; // Activate undo [ev setAllowsUndo: YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:NSTextDidChangeNotification object:ev]; return ev; } @end @implementation PCEditor // =========================================================================== // ==== Initialization // =========================================================================== - (id)init { if ((self = [super init])) { _extScrollView = nil; _extEditorView = nil; _intScrollView = nil; _intEditorView = nil; _storage = nil; _categoryPath = nil; _window = nil; _isEdited = NO; _isWindowed = NO; _isExternal = YES; _highlightSyntax = YES; ASSIGN(defaultFont, [PCEditorView defaultEditorFont]); ASSIGN(highlightFont, [PCEditorView defaultEditorFont]); ASSIGN(highlightColor, [NSColor greenColor]); ASSIGN(textColor, [NSColor blackColor]); ASSIGN(backgroundColor, [NSColor whiteColor]); ASSIGN(readOnlyColor, [NSColor lightGrayColor]); previousFGColor = nil; previousBGColor = nil; previousFont = nil; isCharacterHighlit = NO; highlited_chars[0] = -1; highlited_chars[1] = -1; undoManager = [[NSUndoManager alloc] init]; } return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog(@"PCEditor: %@ dealloc", [_path lastPathComponent]); #endif [_extEditorView setEditor: nil]; [_window setDelegate: nil]; [[NSNotificationCenter defaultCenter] removeObserver:self]; [_window close]; // _window is setReleasedWhenClosed:YES RELEASE(_path); RELEASE(_categoryPath); RELEASE(_intScrollView); RELEASE(_storage); RELEASE(_window); // RELEASE(parserClasses); RELEASE(parserMethods); RELEASE(aParser); RELEASE(defaultFont); RELEASE(highlightFont); RELEASE(textColor); RELEASE(backgroundColor); RELEASE(readOnlyColor); RELEASE(undoManager); [super dealloc]; } // --- Protocol - (void)setParser:(id)parser { // NSLog(@"RC aParser:%i parser:%i", // [aParser retainCount], [parser retainCount]); ASSIGN(aParser, parser); // NSLog(@"RC aParser:%i parser:%i", // [aParser retainCount], [parser retainCount]); } - (id)openFileAtPath:(NSString *)filePath editorManager:(id)editorManager editable:(BOOL)editable { NSString *text; NSAttributedString *attributedString = [NSAttributedString alloc]; NSMutableDictionary *attributes = [NSMutableDictionary new]; NSFont *font; // Inform about future file opening [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorWillOpenNotification object:self]; _editorManager = editorManager; _path = [filePath copy]; _isEditable = editable; // Prepare font = [NSFont userFixedPitchFontOfSize:0.0]; if (editable) { textBackground = backgroundColor; } else { textBackground = readOnlyColor; } [attributes setObject:font forKey:NSFontAttributeName]; [attributes setObject:textBackground forKey:NSBackgroundColorAttributeName]; text = [NSString stringWithContentsOfFile:_path]; attributedString = [attributedString initWithString:text attributes:attributes]; _storage = [[NSTextStorage alloc] init]; [_storage setAttributedString:attributedString]; RELEASE(attributedString); // [self _createInternalView]; /* if (categoryPath) // category == nil if we're non project editor { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; if (![[ud objectForKey:SeparateEditor] isEqualToString:@"YES"]) { [self _createInternalView]; } }*/ // File open was finished [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidOpenNotification object:self]; return self; } - (id)openExternalEditor:(NSString *)editor withPath:(NSString *)file editorManager:(id)aDelegate { NSTask *editorTask = nil; NSArray *ea = nil; NSMutableArray *args = nil; NSString *app = nil; if (!(self = [super init])) { return nil; } _editorManager = aDelegate; _path = [file copy]; // 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; } // --- Protocol End - (void)externalEditorDidClose:(NSNotification *)aNotif { NSString *path = [[[aNotif object] arguments] lastObject]; if (![path isEqualToString:_path]) { NSLog(@"external editor task terminated"); return; } NSLog(@"Our Editor task terminated"); // Inform about closing [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidCloseNotification object:self]; } // =========================================================================== // ==== CodeEditor protocol // =========================================================================== // --- Accessor methods - (id)editorManager { return _editorManager; } - (NSWindow *)editorWindow { return _window; } - (NSView *)editorView { if (!_intScrollView) { [self _createInternalView]; } return _intEditorView; } - (NSView *)componentView { if (!_intScrollView) { [self _createInternalView]; } return _intScrollView; } - (NSString *)path { return _path; } - (void)setPath:(NSString *)path { NSMutableDictionary *notifDict = [[NSMutableDictionary dictionary] retain]; // Prepare notification object [notifDict setObject:self forKey:@"Editor"]; [notifDict setObject:_path forKey:@"OldFile"]; [notifDict setObject:path forKey:@"NewFile"]; // Set path [_path autorelease]; _path = [path copy]; // Post notification [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidChangeFileNameNotification object:notifDict]; [notifDict autorelease]; } - (NSString *)categoryPath { return _categoryPath; } - (void)setCategoryPath:(NSString *)path { [_categoryPath autorelease]; _categoryPath = [path copy]; } - (BOOL)isEdited { return _isEdited; } - (void)setIsEdited:(BOOL)yn { if (_window) { [_window setDocumentEdited:yn]; } _isEdited = yn; } - (NSImage *)fileIcon { NSString *fileExtension = [[_path lastPathComponent] uppercaseString]; NSString *imageName = nil; NSString *imagePath = nil; NSBundle *bundle = nil; NSImage *image = nil; fileExtension = [[[_path lastPathComponent] pathExtension] uppercaseString]; if (_isEdited) { imageName = [NSString stringWithFormat:@"File%@H", fileExtension]; } else { imageName = [NSString stringWithFormat:@"File%@", fileExtension]; } bundle = [NSBundle bundleForClass:NSClassFromString(@"PCEditor")]; imagePath = [bundle pathForResource:imageName ofType:@"tiff"]; image = [[NSImage alloc] initWithContentsOfFile:imagePath]; return AUTORELEASE(image); } - (NSArray *)_methodsForClass:(NSString *)className { NSEnumerator *enumerator; NSDictionary *method; NSDictionary *class; NSMutableArray *items = [NSMutableArray array]; NSRange classRange; NSRange methodRange; ASSIGN(parserClasses, [aParser classNames]); ASSIGN(parserMethods, [aParser methodNames]); enumerator = [parserClasses objectEnumerator]; while ((class = [enumerator nextObject])) { if ([[class objectForKey:@"ClassName"] isEqualToString:className]) { classRange = NSRangeFromString([class objectForKey:@"ClassBodyRange"]); break; } } methodRange = NSMakeRange(0, 0); enumerator = [parserMethods objectEnumerator]; while ((method = [enumerator nextObject])) { // NSLog(@"Method> %@", method); methodRange = NSRangeFromString([method objectForKey:@"MethodBodyRange"]); if (NSIntersectionRange(classRange, methodRange).length != 0) { [items addObject:[method objectForKey:@"MethodName"]]; } } return items; } - (NSArray *)browserItemsForItem:(NSString *)item { NSEnumerator *enumerator; // NSDictionary *method; NSDictionary *class; NSMutableArray *items = [NSMutableArray array]; NSLog(@"PCEditor: asked for browser items for: %@", item); [aParser setString:[_storage string]]; // If item is .m or .h file show class list if ([[item pathExtension] isEqualToString:@"m"] || [[item pathExtension] isEqualToString:@"h"]) { ASSIGN(parserClasses, [aParser classNames]); enumerator = [parserClasses objectEnumerator]; while ((class = [enumerator nextObject])) { NSLog(@"Class> %@", class); [items addObject:[class objectForKey:@"ClassName"]]; } } // If item starts with "@" show method list if ([[item substringToIndex:1] isEqualToString:@"@"]) { /* ASSIGN(parserMethods, [aParser methodNames]); enumerator = [parserMethods objectEnumerator]; while ((method = [enumerator nextObject])) { // NSLog(@"Method> %@", method); [items addObject:[method objectForKey:@"MethodName"]]; }*/ return [self _methodsForClass:item]; } return items; } - (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; } // --- Object managment - (BOOL)saveFileIfNeeded { if ((_isEdited)) { return [self saveFile]; } return YES; } - (BOOL)saveFile { BOOL saved = NO; if (_isEdited == NO) { return YES; } [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorWillSaveNotification object:self]; // Send the notification to Gorm... if([[_path pathExtension] isEqual: @"h"]) { [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GormParseClassNotification" object: _path]; } saved = [[_storage string] writeToFile:_path atomically:YES]; if (saved == YES) { [self setIsEdited:NO]; [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidSaveNotification object:self]; } else { NSRunAlertPanel(@"Save File", @"Couldn't save file '%@'!", @"OK", nil, nil, [_path lastPathComponent]); } return saved; } - (BOOL)saveFileTo:(NSString *)path { return [[_storage string] writeToFile:path atomically:YES]; } - (BOOL)revertFileToSaved { NSString *text = [NSString stringWithContentsOfFile:_path]; NSAttributedString *as = nil; NSDictionary *at = nil; NSFont *ft = nil; if (_isEdited == NO) { return YES; } if (NSAlertDefaultReturn != NSRunAlertPanel(@"Revert", @"%@ has been modified. " @"Are you sure you want to undo changes?", @"Revert", @"Cancel", nil, [_path lastPathComponent])) { return NO; } [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorWillRevertNotification object:self]; // 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]; [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidRevertNotification object:self]; return YES; } // FIXME: Do we really need this method? - (BOOL)closeFile:(id)sender save:(BOOL)save { if (save == YES) { [self saveFileIfNeeded]; } // Close window first if visible if (_isWindowed && [_window isVisible] && (sender != _window)) { [_window close]; } // Inform about closing [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidCloseNotification object:self]; return YES; } - (BOOL)close:(id)sender { if ([self editorShouldClose] == YES) { // 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) { int ret; if (_isWindowed && [_window isVisible]) { [_window makeKeyAndOrderFront:self]; } ret = NSRunAlertPanel(@"Close File", @"File %@ has been modified. Save?", @"Save and Close", @"Don't save", @"Cancel", [_path lastPathComponent]); switch (ret) { case NSAlertDefaultReturn: // Save And Close if ([self saveFile] == NO) { return NO; } break; case NSAlertAlternateReturn: // Don't save break; case NSAlertOtherReturn: // Cancel return NO; break; } [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 close:sender]; } } 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:_extEditorView]; }*/ [self resignFirstResponder:_extEditorView]; } - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window { return undoManager; } // =========================================================================== // ==== TextView (_intEditorView, _extEditorView) delegate // =========================================================================== - (void)textDidChange:(NSNotification *)aNotification { id object = [aNotification object]; if ([object isKindOfClass:[PCEditorView class]] && (object == _intEditorView || object == _extEditorView)) { if (_isEdited == NO) { [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorWillChangeNotification object:self]; [self setIsEdited:YES]; [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidChangeNotification object:self]; } } } - (void)textViewDidChangeSelection:(NSNotification *)notification { if (editorTextViewIsPressingKey == NO) { id object; object = [notification object]; if (object == _intEditorView || object == _extEditorView) [self computeNewParenthesisNesting: object]; } } - (void)editorTextViewWillPressKey:sender { editorTextViewIsPressingKey = YES; // NSLog(@"Will pressing key"); if (sender == _intEditorView || sender == _extEditorView) [self unhighlightCharacter: sender]; else NSLog(@"PCEditor: unexpected sender"); } - (void)editorTextViewDidPressKey:sender { // NSLog(@"Did pressing key"); if (sender == _intEditorView || sender == _extEditorView) [self computeNewParenthesisNesting: sender]; else NSLog(@"PCEditor: unexpected sender"); editorTextViewIsPressingKey = NO; } - (BOOL)becomeFirstResponder:(PCEditorView *)view { [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidBecomeActiveNotification object:self]; return YES; } - (BOOL)resignFirstResponder:(PCEditorView *)view { [[NSNotificationCenter defaultCenter] postNotificationName:PCEditorDidResignActiveNotification object:self]; return YES; } // =========================================================================== // ==== Parser and scrolling // =========================================================================== // === Scrolling - (void)fileStructureItemSelected:(NSString *)item { NSString *firstSymbol; NSLog(@"[PCEditor] selected file structure item: %@", item); firstSymbol = [item substringToIndex:1]; if ([firstSymbol isEqualToString:@"@"]) // class selected { [self scrollToClassName:item]; } else if ([firstSymbol isEqualToString:@"-"] // method selected || [firstSymbol isEqualToString:@"+"]) { [self scrollToMethodName:item]; } } - (void)scrollToClassName:(NSString *)className { NSEnumerator *enumerator = nil; NSDictionary *class = nil; NSRange classNameRange; NSLog(@"SCROLL to class: \"%@\"", className); classNameRange = NSMakeRange(0, 0); enumerator = [parserClasses objectEnumerator]; while ((class = [enumerator nextObject])) { if ([[class objectForKey:@"ClassName"] isEqualToString:className]) { classNameRange = NSRangeFromString([class objectForKey:@"ClassNameRange"]); break; } } NSLog(@"classNameRange: %@", NSStringFromRange(classNameRange)); if (classNameRange.length != 0) { [_intEditorView setSelectedRange:classNameRange]; [_intEditorView scrollRangeToVisible:classNameRange]; } } - (void)scrollToMethodName:(NSString *)methodName { NSEnumerator *enumerator = nil; NSDictionary *method = nil; NSRange methodNameRange; NSLog(@"SCROLL to method: \"%@\"", methodName); methodNameRange = NSMakeRange(0, 0); enumerator = [parserMethods objectEnumerator]; while ((method = [enumerator nextObject])) { if ([[method objectForKey:@"MethodName"] isEqualToString:methodName]) { methodNameRange = NSRangeFromString([method objectForKey:@"MethodNameRange"]); break; } } NSLog(@"methodNameRange: %@", NSStringFromRange(methodNameRange)); if (methodNameRange.length != 0) { [_intEditorView setSelectedRange:methodNameRange]; [_intEditorView scrollRangeToVisible:methodNameRange]; } } - (void)scrollToLineNumber:(unsigned int)lineNumber { unsigned int offset; unsigned int i; NSString *line; NSEnumerator *e; NSArray *lines; NSRange range; lines = [[_intEditorView string] componentsSeparatedByString: @"\n"]; e = [lines objectEnumerator]; for (offset = 0, i = 1; (line = [e nextObject]) != nil && i < lineNumber; i++, offset += [line length] + 1); if (line != nil) { range = NSMakeRange(offset, [line length]); } else { range = NSMakeRange([[_intEditorView string] length], 0); } [_intEditorView setSelectedRange:range]; [_intEditorView scrollRangeToVisible:range]; } @end // =========================================================================== // ==== Menu actions // =========================================================================== @implementation PCEditor (Menu) - (void)pipeOutputOfCommand:(NSString *)command { NSTask * task; NSPipe * inPipe, * outPipe; NSString * inString, * outString; NSFileHandle * inputHandle; inString = [[_intEditorView string] substringWithRange: [_intEditorView selectedRange]]; inPipe = [NSPipe pipe]; outPipe = [NSPipe pipe]; task = [[NSTask new] autorelease]; [task setLaunchPath: @"/bin/sh"]; [task setArguments: [NSArray arrayWithObjects: @"-c", command, nil]]; [task setStandardInput: inPipe]; [task setStandardOutput: outPipe]; [task setStandardError: outPipe]; inputHandle = [inPipe fileHandleForWriting]; [task launch]; [inputHandle writeData: [inString dataUsingEncoding: NSUTF8StringEncoding]]; [inputHandle closeFile]; [task waitUntilExit]; outString = [[[NSString alloc] initWithData: [[outPipe fileHandleForReading] availableData] encoding: NSUTF8StringEncoding] autorelease]; if ([task terminationStatus] != 0) { if (NSRunAlertPanel(_(@"Error running command"), _(@"The command returned with a non-zero exit status" @" -- aborting pipe.\n" @"Do you want to see the command's output?\n"), _(@"No"), _(@"Yes"), nil) == NSAlertAlternateReturn) { NSRunAlertPanel(_(@"The command's output"), outString, nil, nil, nil); } } else { [_intEditorView replaceCharactersInRange:[_intEditorView selectedRange] withString:outString]; [self textDidChange: nil]; } } - (void)findNext:sender { // [[TextFinder sharedInstance] findNext:self]; } - (void)findPrevious:sender { // [[TextFinder sharedInstance] findPrevious:self]; } - (void)jumpToSelection:sender { [_intEditorView scrollRangeToVisible:[_intEditorView selectedRange]]; } @end // =========================================================================== // ==== Parenthesis highlighting // =========================================================================== /** * Checks whether a character is a delimiter. * * This function checks whether `character' is a delimiter character, * (i.e. one of "(", ")", "[", "]", "{", "}") and returns YES if it * is and NO if it isn't. Additionaly, if `character' is a delimiter, * `oppositeDelimiter' is set to a string denoting it's opposite * delimiter and `searchBackwards' is set to YES if the opposite * delimiter is located before the checked delimiter character, or * to NO if it is located after the delimiter character. */ static inline BOOL CheckDelimiter(unichar character, unichar * oppositeDelimiter, BOOL * searchBackwards) { if (character == '(') { *oppositeDelimiter = ')'; *searchBackwards = NO; return YES; } else if (character == ')') { *oppositeDelimiter = '('; *searchBackwards = YES; return YES; } else if (character == '[') { *oppositeDelimiter = ']'; *searchBackwards = NO; return YES; } else if (character == ']') { *oppositeDelimiter = '['; *searchBackwards = YES; return YES; } else if (character == '{') { *oppositeDelimiter = '}'; *searchBackwards = NO; return YES; } else if (character == '}') { *oppositeDelimiter = '{'; *searchBackwards = YES; return YES; } else { return NO; } } /** * Attempts to find a delimiter in a certain string around a certain location. * * Attempts to locate `delimiter' in `string', starting at * location `startLocation' a searching forwards (backwards if * searchBackwards = YES) at most 1000 characters. The argument * `oppositeDelimiter' denotes what is considered to be the opposite * delimiter of the one being search for, so that nested delimiters * are ignored correctly. * * @return The location of the delimiter if it is found, or NSNotFound * if it isn't. */ unsigned int FindDelimiterInString(NSString * string, unichar delimiter, unichar oppositeDelimiter, unsigned int startLocation, BOOL searchBackwards) { unsigned int i; unsigned int length; unichar (*charAtIndex)(id, SEL, unsigned int); SEL sel = @selector(characterAtIndex:); int nesting = 1; charAtIndex = (unichar (*)(id, SEL, unsigned int)) [string methodForSelector: sel]; if (searchBackwards) { if (startLocation < 1000) length = startLocation; else length = 1000; for (i=1; i <= length; i++) { unichar c; c = charAtIndex(string, sel, startLocation - i); if (c == delimiter) nesting--; else if (c == oppositeDelimiter) nesting++; if (nesting == 0) break; } if (i > length) return NSNotFound; else return startLocation - i; } else { if ([string length] < startLocation + 1000) length = [string length] - startLocation; else length = 1000; for (i=1; i < length; i++) { unichar c; c = charAtIndex(string, sel, startLocation + i); if (c == delimiter) nesting--; else if (c == oppositeDelimiter) nesting++; if (nesting == 0) break; } if (i == length) return NSNotFound; else return startLocation + i; } } @implementation PCEditor (Parenthesis) - (void)unhighlightCharacter: (NSTextView *)editorView { int i; NSTextStorage *textStorage = [editorView textStorage]; [textStorage beginEditing]; // if (isCharacterHighlit) for (i = 0; (highlited_chars[i] != -1 && i < 2); i++) { NSRange r = NSMakeRange(highlited_chars[i], 1); // NSRange r = NSMakeRange(highlitCharacterLocation, i); isCharacterHighlit = NO; // restore the character's color and font attributes if (previousFont != nil) { [textStorage addAttribute:NSFontAttributeName value:previousFont range:r]; } else { [textStorage removeAttribute:NSFontAttributeName range:r]; } if (previousFGColor != nil) { [textStorage addAttribute:NSForegroundColorAttributeName value:previousFGColor range:r]; } else { [textStorage removeAttribute:NSForegroundColorAttributeName range:r]; } if (previousBGColor != nil) { [textStorage addAttribute:NSBackgroundColorAttributeName value:previousBGColor range:r]; } else { [textStorage removeAttribute:NSBackgroundColorAttributeName range:r]; } highlited_chars[i] = -1; } [textStorage endEditing]; } - (void)highlightCharacterAt:(unsigned int)location inEditor: (NSTextView *)editorView { int i; for (i = 0; highlited_chars[i] != -1; i++) {}; // if (isCharacterHighlit == NO) if (i < 2) { NSTextStorage *textStorage = [editorView textStorage]; NSRange r = NSMakeRange(location, 1); NSRange tmp; // NSLog(@"highlight"); // highlitCharacterLocation = location; highlited_chars[i] = location; isCharacterHighlit = YES; NSAssert(textStorage, @"textstorage can't be nil"); [textStorage beginEditing]; // store the previous character's attributes ASSIGN(previousFGColor, [textStorage attribute:NSForegroundColorAttributeName atIndex:location effectiveRange:&tmp]); ASSIGN(previousBGColor, [textStorage attribute:NSBackgroundColorAttributeName atIndex:location effectiveRange:&tmp]); ASSIGN(previousFont, [textStorage attribute:NSFontAttributeName atIndex:location effectiveRange:&tmp]); [textStorage addAttribute:NSFontAttributeName value:highlightFont range:r]; [textStorage addAttribute:NSBackgroundColorAttributeName value:highlightColor range:r]; /* [textStorage addAttribute:NSForegroundColorAttributeName value:highlightColor range:r]; [textStorage removeAttribute:NSBackgroundColorAttributeName range:r];*/ [textStorage endEditing]; } } - (void)computeNewParenthesisNesting: (NSTextView *)editorView { NSRange selectedRange; NSString *myString; if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DontTrackNesting"]) { return; } NSAssert(editorView, @"computeNewParenthesis: editorView is nil"); selectedRange = [editorView selectedRange]; // make sure we un-highlight a previously highlit delimiter [self unhighlightCharacter :editorView]; // if we have a character at the selected location, check // to see if it is a delimiter character myString = [editorView string]; if (selectedRange.length <= 1 && [myString length] > selectedRange.location) { unichar c; unichar oppositeDelimiter = 0; BOOL searchBackwards = NO; c = [myString characterAtIndex:selectedRange.location]; // if it is, search for the opposite delimiter in a range // of at most 1000 characters around it in either forward // or backward direction (depends on the kind of delimiter // we're searching for). if (CheckDelimiter(c, &oppositeDelimiter, &searchBackwards)) { unsigned int result; result = FindDelimiterInString(myString, oppositeDelimiter, c, selectedRange.location, searchBackwards); // and in case a delimiter is found, highlight it if (result != NSNotFound) { [self highlightCharacterAt:selectedRange.location inEditor:editorView]; [self highlightCharacterAt:result inEditor:editorView]; } } } } @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/SyntaxDefinition.h000644 001751 000024 00000005777 10544200321 026215 0ustar00multixstaff000000 000000 /* SyntaxDefinition.h Interface declaration of the SyntaxDefinition class for the ProjectManager application. Copyright (C) 2005 Saso Kiselkov This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import #import "TextPattern.h" @class NSTextStorage, NSColor, NSArray; @interface SyntaxDefinition : NSObject { NSTextStorage * textStorage; TextPattern ** contextBeginnings; char contextBeginningChars[128]; TextPattern *** contextSkips; char ** contextSkipChars; TextPattern ** contextEndings; NSArray * contextGraphics; // First indirection is context number, second is keyword // number, third is the keyword itself. Both lists are NULL pointer // terminated. TextPattern *** keywords; NSArray * keywordGraphics; } + syntaxDefinitionForFileType: (NSString *) fileType textStorage: (NSTextStorage *) textStorage; - initWithContextList: (NSArray *) contexts textStorage: (NSTextStorage *) aTextStorage; // Obtaining context starting, ending and skips - (TextPattern **) contextBeginnings; - (const char *) contextBeginningCharacters; - (unsigned int) numberOfContextBeginningCharacters; - (const char *) contextSkipCharactersForContext: (unsigned int) ctxt; - (unsigned int) numberOfContextSkipCharactersForContext: (unsigned int) ctxt; - (TextPattern **) contextSkipsForContext: (unsigned int) ctxt; - (TextPattern *) contextEndingForContext: (unsigned int) ctxt; // Inquiring about graphical attributes of contexts - (NSColor *) foregroundColorForContext: (unsigned int) context; - (NSColor *) backgroundColorForContext: (unsigned int) context; - (BOOL) isItalicFontForContext: (unsigned int) context; - (BOOL) isBoldFontForContext: (unsigned int) context; // Obtaining keyword patterns - (TextPattern **) keywordsInContext: (unsigned int) context; // Inquiring about graphical attributes of keywords - (NSColor *) foregroundColorForKeyword: (unsigned int) keyword inContext: (unsigned int) context; - (NSColor *) backgroundColorForKeyword: (unsigned int) keyword inContext: (unsigned int) context; - (BOOL) isItalicFontForKeyword: (unsigned int) keyword inContext: (unsigned int) context; - (BOOL) isBoldFontForKeyword: (unsigned int) keyword inContext: (unsigned int) context; @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/GNUmakefile000644 001751 000024 00000001721 11122717015 024606 0ustar00multixstaff000000 000000 # # GNUmakefile - ProjectCenter.editor # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = ProjectCenter BUNDLE_EXTENSION = .editor ProjectCenter_PRINCIPAL_CLASS = PCEditor # # Additional libraries # ProjectCenter_LIBRARIES_DEPEND_UPON += # # Resource files # ProjectCenter_RESOURCE_FILES= \ Resources/Info.table \ Resources/C.syntax \ Resources/ObjC.syntax \ Resources/Plist.syntax \ Resources/FileC.tiff \ Resources/FileCH.tiff \ Resources/FileH.tiff \ Resources/FileHH.tiff \ Resources/FileM.tiff \ Resources/FileMH.tiff # # Header files # ProjectCenter_HEADERS= \ PCEditor.h \ PCEditorView.h \ SyntaxDefinition.h \ SyntaxHighlighter.h # # Class files # ProjectCenter_OBJC_FILES= \ PCEditor.m \ PCEditorView.m \ TextPattern.m \ SyntaxDefinition.m \ SyntaxHighlighter.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/TextFinder.m000644 001751 000024 00000023026 10544200321 024762 0ustar00multixstaff000000 000000 /* TextFinder.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. Find and replace functionality with a minimal panel... In addition to including this class and FindPanel.nib in your app, you probably need to hook up the following action methods in your document object (or whatever object is first responder) to call the appropriate methods in [TextFinder sharedInstance]: orderFrontFindPanel: findNext: findPrevious: enterSelection: (calls setFindString:) */ #import #import "TextFinder.h" @implementation TextFinder - (id)init { if (!(self = [super init])) return nil; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidActivate:) name:NSApplicationDidBecomeActiveNotification object:[NSApplication sharedApplication]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addWillDeactivate:) name:NSApplicationWillResignActiveNotification object:[NSApplication sharedApplication]]; [self setFindString:@""]; [self loadFindStringFromPasteboard]; return self; } - (void)appDidActivate:(NSNotification *)notification { [self loadFindStringFromPasteboard]; } - (void)addWillDeactivate:(NSNotification *)notification { [self loadFindStringToPasteboard]; } - (void)loadFindStringFromPasteboard { NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:NSFindPboard]; if ([[pasteboard types] containsObject:NSStringPboardType]) { NSString *string = [pasteboard stringForType:NSStringPboardType]; if (string && [string length]) { [self setFindString:string]; findStringChangedSinceLastPasteboardUpdate = NO; } } } - (void)loadFindStringToPasteboard { NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:NSFindPboard]; if (findStringChangedSinceLastPasteboardUpdate) { [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; [pasteboard setString:[self findString] forType:NSStringPboardType]; findStringChangedSinceLastPasteboardUpdate = NO; } } static id sharedFindObject = nil; + (id)sharedInstance { if (!sharedFindObject) { sharedFindObject = [[self allocWithZone:[[NSApplication sharedApplication] zone]] init]; } return sharedFindObject; } - (void)loadUI { if (!findTextField) { if (![NSBundle loadNibNamed:@"FindPanel" owner:self]) { NSLog(@"Failed to load FindPanel.nib"); NSBeep(); } if (self == sharedFindObject) [[findTextField window] setFrameAutosaveName:@"Find"]; } [findTextField setStringValue:[self findString]]; } - (void)dealloc { if (self != sharedFindObject) { [findString release]; [super dealloc]; } } - (NSString *)findString { return findString; } - (void)setFindString:(NSString *)string { if ([string isEqualToString:findString]) return; [findString autorelease]; findString = [string copyWithZone:[self zone]]; if (findTextField) { [findTextField setStringValue:string]; [findTextField selectText:nil]; } findStringChangedSinceLastPasteboardUpdate = YES; } - (NSTextView *)textObjectToSearchIn { id obj = [[NSApp mainWindow] firstResponder]; return (obj && [obj isKindOfClass:[NSTextView class]]) ? obj : nil; } - (NSPanel *)findPanel { if (!findTextField) [self loadUI]; return (NSPanel *)[findTextField window]; } /* The primitive for finding; this ends up setting the status field (and beeping if necessary)... */ - (BOOL)find:(BOOL)direction { NSTextView *text = [self textObjectToSearchIn]; lastFindWasSuccessful = NO; if (text) { NSString *textContents = [text string]; unsigned textLength; if (textContents && (textLength = [textContents length])) { NSRange range; unsigned options = 0; if (direction == Backward) options |= NSBackwardsSearch; if ([ignoreCaseButton state]) options |= NSCaseInsensitiveSearch; range = [textContents findString:[self findString] selectedRange:[text selectedRange] options:options wrap:YES]; if (range.length) { [text setSelectedRange:range]; [text scrollRangeToVisible:range]; lastFindWasSuccessful = YES; } } } if (!lastFindWasSuccessful) { NSBeep(); [statusField setStringValue:NSLocalizedStringFromTable(@"Not found", @"FindPanel", @"Status displayed in find panel when the find string is not found.")]; } else { [statusField setStringValue:@""]; } return lastFindWasSuccessful; } - (void)orderFrontFindPanel:(id)sender { NSPanel *panel = [self findPanel]; [findTextField selectText:nil]; [panel makeKeyAndOrderFront:nil]; } /**** Action methods for gadgets in the find panel; these should all end up setting or clearing the status field ****/ - (void)findNextAndOrderFindPanelOut:(id)sender { [findNextButton performClick:nil]; if (lastFindWasSuccessful) { [[self findPanel] orderOut:sender]; } else { [findTextField selectText:nil]; } } - (void)findNext:(id)sender { if (findTextField) [self setFindString:[findTextField stringValue]]; /* findTextField should be set */ (void)[self find:Forward]; } - (void)findPrevious:(id)sender { if (findTextField) [self setFindString:[findTextField stringValue]]; /* findTextField should be set */ (void)[self find:Backward]; } - (void)replace:(id)sender { NSTextView *text = [self textObjectToSearchIn]; if (!text) { NSBeep(); } else { [[text textStorage] replaceCharactersInRange:[text selectedRange] withString:[replaceTextField stringValue]]; [text didChangeText]; } [statusField setStringValue:@""]; } - (void)replaceAndFind:(id)sender { [self replace:sender]; [self findNext:sender]; } #define ReplaceAllScopeEntireFile 42 #define ReplaceAllScopeSelection 43 - (void)replaceAll:(id)sender { NSTextView *text = [self textObjectToSearchIn]; if (!text) { NSBeep(); } else { NSTextStorage *textStorage = [text textStorage]; NSString *textContents = [text string]; NSString *replaceString = [replaceTextField stringValue]; BOOL entireFile = replaceAllScopeMatrix ? ([replaceAllScopeMatrix selectedTag] == ReplaceAllScopeEntireFile) : YES; NSRange replaceRange = entireFile ? NSMakeRange(0, [textStorage length]) : [text selectedRange]; unsigned options = NSBackwardsSearch | ([ignoreCaseButton state] ? NSCaseInsensitiveSearch : 0); unsigned replaced = 0; if (findTextField) [self setFindString:[findTextField stringValue]]; while (1) { NSRange foundRange = [textContents rangeOfString:[self findString] options:options range:replaceRange]; if (foundRange.length == 0) break; if ([text shouldChangeTextInRange:foundRange replacementString:replaceString]) { if (replaced == 0) [textStorage beginEditing]; replaced++; [textStorage replaceCharactersInRange:foundRange withString:replaceString]; replaceRange.length = foundRange.location - replaceRange.location; } } if (replaced > 0) { /* There was at least one replacement */ [textStorage endEditing]; /* We need this to bracket the beginEditing */ [text didChangeText]; /* We need one of these to terminate the shouldChange... methods we sent */ [statusField setStringValue:[NSString localizedStringWithFormat:NSLocalizedStringFromTable(@"%d replaced", @"FindPanel", @"Status displayed in find panel when indicated number of matches are replaced."), replaced]]; } else { /* No replacements were done... */ NSBeep(); [statusField setStringValue:NSLocalizedStringFromTable(@"Not found", @"FindPanel", @"Status displayed in find panel when the find string is not found.")]; } } } @end @implementation NSString (NSStringTextFinding) - (NSRange)findString:(NSString *)string selectedRange:(NSRange)selectedRange options:(unsigned)options wrap:(BOOL)wrap { BOOL forwards = (options & NSBackwardsSearch) == 0; unsigned length = [self length]; NSRange searchRange, range; if (forwards) { searchRange.location = NSMaxRange(selectedRange); searchRange.length = length - searchRange.location; range = [self rangeOfString:string options:options range:searchRange]; if ((range.length == 0) && wrap) { /* If not found look at the first part of the string */ searchRange.location = 0; searchRange.length = selectedRange.location; range = [self rangeOfString:string options:options range:searchRange]; } } else { searchRange.location = 0; searchRange.length = selectedRange.location; range = [self rangeOfString:string options:options range:searchRange]; if ((range.length == 0) && wrap) { searchRange.location = NSMaxRange(selectedRange); searchRange.length = length - searchRange.location; range = [self rangeOfString:string options:options range:searchRange]; } } return range; } @end /* 2/21/95 aozer Created for Edit II. 2/24/95 aozer Find pasteboard support 8/16/95 aozer Replace functionality 10/4/95 aozer Status field update 11/12/96 aozer Correctly send shouldChange... to the textview while doing a replace */ ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/TextPattern.h000644 001751 000024 00000004102 10544200321 025155 0ustar00multixstaff000000 000000 /* TextPattern.h Declarations of data structures and functions for text pattern manipulation for the ProjectManager application. Copyright (C) 2005 Saso Kiselkov This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import #import typedef struct { enum { SingleCharacterTextPatternItem, MultipleCharactersTextPatternItem, AnyCharacterTextPatternItem, BeginningOfWordTextPatternItem, EndingOfWordTextPatternItem, BeginningOfLineTextPatternItem, EndingOfLineTextPatternItem } type; union { unichar singleChar; struct { unichar * characters; unsigned int nCharacters; } multiChar; } data; unsigned int minCount, maxCount; } TextPatternItem; typedef struct { NSString * string; TextPatternItem ** items; unsigned int nItems; } TextPattern; TextPattern * CompileTextPattern (NSString * string); void FreeTextPattern (TextPattern * pattern); static inline BOOL TextPatternsEqual(TextPattern * pattern1, TextPattern * pattern2) { return [pattern1->string isEqualToString: pattern2->string]; } unsigned int CheckTextPatternPresenceInString(TextPattern * pattern, unichar * string, unsigned int stringLength, unsigned int index); unichar * PermissibleCharactersAtPatternBeginning(TextPattern * pattern); ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/PCEditorView.h000644 001751 000024 00000002736 11401567561 025231 0ustar00multixstaff000000 000000 /* EditorTextView.h Interface declaration of the EditorTextView class for the ProjectManager application. Copyright (C) 2005-2010 Free Software Foundation Saso Kiselkov Riccardo Mottola This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import #import @class NSColor; @class PCEditor; @class SyntaxHighlighter; @interface PCEditorView : NSTextView { PCEditor *editor; SyntaxHighlighter *highlighter; } + (NSFont *)defaultEditorFont; + (NSFont *)defaultEditorBoldFont; + (NSFont *)defaultEditorItalicFont; + (NSFont *)defaultEditorBoldItalicFont; - (void)setEditor:(PCEditor *)anEditor; - (void)createSyntaxHighlighterForFileType:(NSString *)fileType; - (void)insertText:text; - (NSRect)selectionRect; @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/SyntaxDefinition.m000644 001751 000024 00000037737 10544200321 026223 0ustar00multixstaff000000 000000 /* SyntaxDefinition.h Implementation of the SyntaxDefinition class for the ProjectManager application. Copyright (C) 2005 Saso Kiselkov This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import "SyntaxDefinition.h" #import #import #import #import #import #import NSDictionary * ParseSyntaxGraphics(NSDictionary * specification) { NSMutableDictionary * dict = [NSMutableDictionary dictionary]; NSString * value; value = [specification objectForKey: @"ForegroundColor"]; if (value != nil) { float r, g, b, a; NSScanner * scanner = [NSScanner scannerWithString: value]; if ([scanner scanFloat: &r] && [scanner scanFloat: &g] && [scanner scanFloat: &b]) { if ([scanner scanFloat: &a] == NO) { a = 1.0; } [dict setObject: [NSColor colorWithCalibratedRed: r green: g blue: b alpha: a] forKey: @"ForegroundColor"]; } else { NSLog(_(@"Invalid ForegroundColor specification \"%@\" found: " @"the correct format is \"r g b [a]\" where each component" @"is a real number in the range of 0.0 thru 1.0 inclusive, " @"specifying the red, green, blue and alpha (optional) " @"components of the desired color."), value); } } value = [specification objectForKey: @"BackgroundColor"]; if (value != nil) { float r, g, b, a; NSScanner * scanner = [NSScanner scannerWithString: value]; if ([scanner scanFloat: &r] && [scanner scanFloat: &g] && [scanner scanFloat: &b]) { if ([scanner scanFloat: &a] == NO) { a = 1.0; } [dict setObject: [NSColor colorWithCalibratedRed: r green: g blue: b alpha: a] forKey: @"BackgroundColor"]; } else { NSLog(_(@"Invalid BackgroundColor specification \"%@\" found: " @"the correct format is \"r g b [a]\" where each component" @"is a real number in the range of 0.0 thru 1.0 inclusive, " @"specifying the red, green, blue and alpha (optional) " @"components of the desired color."), value); } } value = [specification objectForKey: @"Bold"]; if (value != nil) { [dict setObject: [NSNumber numberWithBool: [value boolValue]] forKey: @"Bold"]; } value = [specification objectForKey: @"Italic"]; if (value != nil) { [dict setObject: [NSNumber numberWithBool: [value boolValue]] forKey: @"Italic"]; } return [[dict copy] autorelease]; } void MarkTextPatternBeginningCharacters(TextPattern * pattern, char * buffer, unsigned int bufSize) { unichar * chars = PermissibleCharactersAtPatternBeginning(pattern); if (chars == (unichar *) -1) { memset(buffer, 1, 128); } else if (chars != NULL) { unsigned int i; unichar c; for (i = 0; (c = chars[i]) != 0; i++) { if (c < bufSize) { buffer[c] = 1; } } free(chars); } } static NSDictionary * syntaxes = nil; static NSMutableDictionary * syntaxDefinitions = nil; @interface SyntaxDefinition (Private) + (void)loadSyntaxDefinitions; @end @implementation SyntaxDefinition (Private) /** * Loads all syntax definition files and associates them in the * static global variable `syntaxes' with their respective * file types. The syntax definitions aren't compiled yet - they * are left in their pure format and are compiled on a per-use * basis. */ + (void)loadSyntaxDefinitions { NSMutableDictionary *dict; NSArray *filePaths; NSString *filePath; NSEnumerator *e; NSBundle *bundle; // FIXME: need better algorithm to locate syntax files. This is good // only for a quick'n'dirty implementation bundle = [NSBundle bundleForClass:NSClassFromString(@"PCEditor")]; filePaths = [bundle pathsForResourcesOfType:@"syntax" inDirectory:nil]; dict = [NSMutableDictionary dictionary]; e = [filePaths objectEnumerator]; while ((filePath = [e nextObject]) != nil) { NSDictionary * syntax; syntax = [NSDictionary dictionaryWithContentsOfFile: filePath]; if (syntax != nil) { NSEnumerator * ee = [[syntax objectForKey: @"FileTypes"] objectEnumerator]; NSString * fileType; while ((fileType = [ee nextObject]) != nil) { [dict setObject: [syntax objectForKey: @"Contexts"] forKey: fileType]; } } } ASSIGNCOPY(syntaxes, dict); } @end @implementation SyntaxDefinition + (void)initialize { if (syntaxes == nil) { [self loadSyntaxDefinitions]; syntaxDefinitions = [NSMutableDictionary new]; } } + syntaxDefinitionForFileType:(NSString *)fileType textStorage:(NSTextStorage *)aTextStorage { SyntaxDefinition * def; def = [syntaxDefinitions objectForKey: fileType]; if (def == nil) { NSArray * contexts = [syntaxes objectForKey: fileType]; if (contexts != nil) { def = [[[SyntaxDefinition alloc] initWithContextList: contexts textStorage: aTextStorage] autorelease]; if (def != nil) { [syntaxDefinitions setObject: def forKey: fileType]; } return def; } else { return nil; } } else { return def; } } - initWithContextList:(NSArray *)contexts textStorage:(NSTextStorage *)aTextStorage { if ([self init]) { unsigned int i, n; NSMutableArray * contextGraphicsTmp = [NSMutableArray array], * keywordGraphicsTmp = [NSMutableArray array]; ASSIGN(textStorage, aTextStorage); // compile the syntax definition for (i = 0, n = [contexts count]; i < n; i++) { unsigned int j, keywordCount, skipCount; NSDictionary * context = [contexts objectAtIndex: i]; NSArray * ctxtKeywords, * skips; NSMutableArray * contextKeywordsGraphicsTmp; // context beginning/ending missing? if (([context objectForKey: @"Beginning"] == nil || [context objectForKey: @"Ending"] == nil) && i > 0) { NSLog(_(@"Syntax compilation error: context %i missing " @"beginning or ending symbol.")); [self release]; return nil; } // process context beginnings/endings if (i > 0) { contextBeginnings = realloc(contextBeginnings, i * sizeof(TextPattern *)); contextBeginnings[i - 1] = CompileTextPattern([context objectForKey: @"Beginning"]); MarkTextPatternBeginningCharacters(contextBeginnings[i - 1], contextBeginningChars, sizeof(contextBeginningChars)); contextEndings = realloc(contextEndings, i * sizeof(TextPattern *)); contextEndings[i - 1] = CompileTextPattern([context objectForKey: @"Ending"]); } // process context skips contextSkipChars = realloc(contextSkipChars, (i + 1) * sizeof(char *)); contextSkipChars[i] = calloc(128, sizeof(char)); contextSkips = realloc(contextSkips, sizeof(TextPattern **) * (i + 1)); contextSkips[i] = NULL; skips = [context objectForKey: @"ContextSkips"]; for (j = 0, skipCount = [skips count]; j < skipCount; j++) { NSString * skip = [skips objectAtIndex: j]; contextSkips[i] = realloc(contextSkips[i], (j + 1) * sizeof(TextPattern *)); contextSkips[i][j] = CompileTextPattern(skip); MarkTextPatternBeginningCharacters(contextSkips[i][j], contextSkipChars[i], 128); } contextSkips[i] = realloc(contextSkips[i], (j + 1) * sizeof(TextPattern *)); contextSkips[i][j] = NULL; // process context graphics [contextGraphicsTmp addObject: ParseSyntaxGraphics(context)]; keywords = realloc(keywords, (i + 1) * sizeof(TextPattern **)); keywords[i] = NULL; ctxtKeywords = [context objectForKey: @"Keywords"]; contextKeywordsGraphicsTmp = [NSMutableArray arrayWithCapacity: [ctxtKeywords count]]; // run through all keywords in the context for (j = 0, keywordCount = [ctxtKeywords count]; j < keywordCount; j++) { NSDictionary * keyword = [ctxtKeywords objectAtIndex: j]; NSString * keywordString = [keyword objectForKey: @"Pattern"]; TextPattern * pattern; if (keywordString == nil) { NSLog(_(@"Missing keyword pattern declaration " @"in context %i keyword %i. Ignoring all the " @"remaining of the keywords in this context."), i, j); break; } pattern = CompileTextPattern(keywordString); if (pattern == NULL) { break; } keywords[i] = realloc(keywords[i], (j + 1) * sizeof(TextPattern *)); keywords[i][j] = pattern; [contextKeywordsGraphicsTmp addObject: ParseSyntaxGraphics(keyword)]; } // append a trailing NULL to terminate the list keywords[i] = realloc(keywords[i], (j + 1) * sizeof(TextPattern *)); keywords[i][j] = NULL; [keywordGraphicsTmp addObject: [[contextKeywordsGraphicsTmp copy] autorelease]]; } // terminate the keywords array by appending a trailing NULL pointer keywords = realloc(keywords, (i + 1) * sizeof(TextPattern **)); keywords[i] = NULL; // begining and ending arrays don't include the default context! // Thus it is indexed by 'i' not 'i + 1' contextBeginnings = realloc(contextBeginnings, i * sizeof(TextPattern **)); contextBeginnings[i - 1] = NULL; contextEndings = realloc(contextEndings, i * sizeof(TextPattern **)); contextEndings[i - 1] = NULL; contextSkipChars = realloc(contextSkipChars, (i + 1) * sizeof(char *)); contextSkipChars[i] = NULL; ASSIGNCOPY(contextGraphics, contextGraphicsTmp); ASSIGNCOPY(keywordGraphics, keywordGraphicsTmp); return self; } else { return nil; } } - (void) dealloc { TextPattern * pattern; unsigned int i; TextPattern ** patternList; char * buf; // free context beginnings for (i = 0; (pattern = contextBeginnings[i]) != NULL; i++) { FreeTextPattern(pattern); } free(contextBeginnings); // free context endings for (i = 0; (pattern = contextEndings[i]) != NULL; i++) { FreeTextPattern(pattern); } free(contextEndings); // free context skip characters for (i = 0; (buf = contextSkipChars[i]) != NULL; i++) { free(buf); } free(contextSkipChars); // free context skips for (i = 0; (patternList = contextSkips[i]) != NULL; i++) { unsigned int j; for (j = 0; (pattern = patternList[j]) != NULL; j++) { FreeTextPattern(pattern); } free(patternList); } free(contextSkips); // free keywords for (i = 0; (patternList = keywords[i]) != NULL; i++) { unsigned int j; for (j = 0; (pattern = patternList[j]) != NULL; j++) { FreeTextPattern(pattern); } free(patternList); } free(keywords); TEST_RELEASE(textStorage); TEST_RELEASE(contextGraphics); TEST_RELEASE(keywordGraphics); [super dealloc]; } /** * Returns a NULL pointer terminated list of context beginning symbols. */ - (TextPattern **)contextBeginnings { return contextBeginnings; } - (const char *)contextBeginningCharacters { return contextBeginningChars; } - (unsigned int)numberOfContextBeginningCharacters { return sizeof(contextBeginningChars); } - (const char *)contextSkipCharactersForContext:(unsigned int)ctxt { return contextSkipChars[ctxt]; } - (unsigned int)numberOfContextSkipCharactersForContext:(unsigned int)ctxt { return 128; } /** * Returns the context ending symbol for the context identified by `ctxt'. */ - (TextPattern *)contextEndingForContext:(unsigned int)ctxt { return contextEndings[ctxt]; } - (TextPattern **)contextSkipsForContext:(unsigned int)ctxt { return contextSkips[ctxt]; } - (NSColor *)foregroundColorForContext:(unsigned int)context { return [[contextGraphics objectAtIndex: context] objectForKey: @"ForegroundColor"]; } - (NSColor *)backgroundColorForContext:(unsigned int)context { return [[contextGraphics objectAtIndex: context] objectForKey: @"BackgroundColor"]; } - (BOOL)isItalicFontForContext:(unsigned int)context { return [[[contextGraphics objectAtIndex: context] objectForKey: @"Italic"] boolValue]; } - (BOOL)isBoldFontForContext:(unsigned int)context { return [[[contextGraphics objectAtIndex: context] objectForKey: @"Bold"] boolValue]; } /** * Returns a NULL pointer terminated list of text patterns representing * keywords to be matched inside context `context'. */ - (TextPattern **)keywordsInContext:(unsigned int)context { return keywords[context]; } /** * Returns the color with which the keyword identified by `keyword' * in `contextName' should be colored. The argument `keyword' is the * index of the keyword in the array returned by -keywordsInContext:. */ - (NSColor *)foregroundColorForKeyword:(unsigned int)keyword inContext:(unsigned int)context { return [[[keywordGraphics objectAtIndex:context] objectAtIndex:keyword] objectForKey:@"ForegroundColor"]; } - (NSColor *)backgroundColorForKeyword:(unsigned int)keyword inContext:(unsigned int)context { return [[[keywordGraphics objectAtIndex:context] objectAtIndex:keyword] objectForKey:@"BackgroundColor"]; } - (BOOL)isItalicFontForKeyword:(unsigned int)keyword inContext:(unsigned int)context { return [[[[keywordGraphics objectAtIndex:context] objectAtIndex:keyword] objectForKey:@"Italic"] boolValue]; } /** * Returns YES if the font with which the keyword identified by `keyword' * should be bold and NO if it should be normal weigth. */ - (BOOL)isBoldFontForKeyword:(unsigned int)keyword inContext:(unsigned int)context { return [[[[keywordGraphics objectAtIndex:context] objectAtIndex:keyword] objectForKey:@"Bold"] boolValue]; } @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/SyntaxHighlighter.h000644 001751 000024 00000003153 10544200321 026345 0ustar00multixstaff000000 000000 /* SyntaxHighlighter.h Interface declaration of the SyntaxHighlighter class for the ProjectManager application. Copyright (C) 2005 Saso Kiselkov This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import #import #import @class NSNotification, NSDictionary, NSMutableDictionary, NSString, NSTextStorage; @class NSFont; @class SyntaxDefinition; @interface SyntaxHighlighter : NSObject { NSTextStorage *textStorage; SyntaxDefinition *syntax; NSFont * normalFont, * boldFont, * italicFont, * boldItalicFont; unsigned int lastProcessedContextIndex; NSRange delayedProcessedRange; BOOL didBeginEditing; } - initWithFileType:(NSString *)fileType textStorage:(NSTextStorage *)aStorage; - (void)highlightRange:(NSRange)r; - (void)textStorageWillProcessEditing:(NSNotification *)notif; @end ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/TextPattern.m000644 001751 000024 00000035550 10544200321 025175 0ustar00multixstaff000000 000000 /* TextPattern.m Implementation of operations on text patterns for the ProjectManager application. Copyright (C) 2005 Saso Kiselkov This program 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 program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #import "TextPattern.h" #import #import #import static void FreeTextPatternItem (TextPatternItem *item) { if (item->type == MultipleCharactersTextPatternItem) { free (item->data.multiChar.characters); } free (item); } static TextPatternItem * ParseTextPatternItem (NSString *string, unsigned int *index) { unsigned int i = *index, n = [string length]; TextPatternItem * newItem; unichar c; newItem = (TextPatternItem *) calloc(1, sizeof (TextPatternItem)); c = [string characterAtIndex: i]; i++; switch (c) { case '[': { unichar * buf = NULL; unsigned int nChars = 0; for (; i < n; i++) { unichar c = [string characterAtIndex: i]; // handle escapes if (c == '\\') { if (i + 1 >= n) { NSLog(_(@"Text pattern item parse error in text " @"pattern \"%@\" at index %i: unexpected end of " @"pattern. Escape sequence expected."), string); free (buf); free (newItem); return NULL; } i++; c = [string characterAtIndex: i]; } else if (c == ']') { i++; break; } nChars++; buf = (unichar *) realloc(buf, sizeof (unichar) * nChars); buf[nChars - 1] = c; } if (i == n) { NSLog(_(@"Text pattern item parse error in text pattern " @"\"%@\" at index %i: unexpected end of character class."), string, i); free (buf); free (newItem); return NULL; } newItem->type = MultipleCharactersTextPatternItem; newItem->data.multiChar.nCharacters = nChars; newItem->data.multiChar.characters = buf; } break; case '.': newItem->type = AnyCharacterTextPatternItem; break; case '<': newItem->type = BeginningOfWordTextPatternItem; break; case '>': newItem->type = EndingOfWordTextPatternItem; break; case '^': newItem->type = BeginningOfLineTextPatternItem; break; case '$': newItem->type = EndingOfLineTextPatternItem; break; case '\\': if (i >= n) { NSLog(_(@"Text pattern item parse error in text pattern " @"\"%@\" at index %i: unexpected end of pattern. Escape " @"sequence expected."), string); free (newItem); return NULL; } c = [string characterAtIndex: i]; i++; default: newItem->type = SingleCharacterTextPatternItem; newItem->data.singleChar = c; break; } // is there trailing cardinality indication? if (i < n) { c = [string characterAtIndex: i]; i++; switch (c) { case '{': { NSScanner * scanner; int value; if (newItem->type != SingleCharacterTextPatternItem && newItem->type != MultipleCharactersTextPatternItem && newItem->type != AnyCharacterTextPatternItem) { NSLog(_(@"Text pattern item parse error in text pattern " @"\"%@\" at index %i: no cardinality indication in " @"'<', '>', '^' or '$' allowed."), string, i); FreeTextPatternItem(newItem); return NULL; } scanner = [NSScanner scannerWithString: string]; [scanner setScanLocation: i]; if (![scanner scanInt: &value]) { NSLog(_(@"Text pattern item parse error in text pattern " @"\"%@\" at index %i: integer expected."), string, [scanner scanLocation]); FreeTextPatternItem(newItem); return NULL; } newItem->minCount = newItem->maxCount = value; i = [scanner scanLocation]; if (i + 1 >= n) { NSLog(_(@"Text pattern item parse error in text pattern " @"\"%@\": unexpected end of pattern, '}' or ',' " @"expected."), string); FreeTextPatternItem(newItem); return NULL; } c = [string characterAtIndex: i]; if (c == ',') { [scanner setScanLocation: i + 1]; if (![scanner scanInt: &value]) { NSLog(_(@"Text pattern item parser error in text " @"pattern \"%@\" at index %i: integer expected."), string, [scanner scanLocation]); FreeTextPatternItem(newItem); return NULL; } newItem->maxCount = value; i = [scanner scanLocation]; } if (i >= n) { NSLog(_(@"Text pattern item parse error in text pattern " @"\"%@\": unexpected end of pattern, '}' expected."), string); FreeTextPatternItem(newItem); return NULL; } c = [string characterAtIndex: i]; i++; if (c != '}') { NSLog(_(@"Text pattern item parse error in text pattern " @"\"%@\" at index %i: '}' expected."), string, i); FreeTextPatternItem(newItem); return NULL; } } break; // no cardinality indication - the next character is part of // the next text pattern case '*': newItem->minCount = 0; newItem->maxCount = 0x7fffffff; break; case '?': newItem->minCount = 0; newItem->maxCount = 1; break; default: i--; newItem->minCount = newItem->maxCount = 1; break; } } else { newItem->minCount = newItem->maxCount = 1; } *index = i; return newItem; } static void DescribeTextPatternItem(TextPatternItem *item) { switch (item->type) { case SingleCharacterTextPatternItem: NSLog(@" type: single char, value: '%c', min: %i, max: %i", item->data.singleChar, item->minCount, item->maxCount); break; case MultipleCharactersTextPatternItem: NSLog(@" type: multi char, value: '%@', min: %i, max: %i", [NSString stringWithCharacters: item->data.multiChar.characters length: item->data.multiChar.nCharacters], item->minCount, item->maxCount); break; case BeginningOfWordTextPatternItem: NSLog(@" type: beginning of word"); break; case EndingOfWordTextPatternItem: NSLog(@" type: ending of word"); break; case AnyCharacterTextPatternItem: NSLog(@" type: any character, min: %i, max: %i", item->minCount, item->maxCount); break; case BeginningOfLineTextPatternItem: NSLog(@" type: beginning of line"); break; case EndingOfLineTextPatternItem: NSLog(@" type: ending of line"); break; } } TextPattern * CompileTextPattern (NSString *string) { TextPattern * pattern; unsigned int i, n; pattern = (TextPattern *) calloc(1, sizeof(TextPattern)); ASSIGN(pattern->string, string); for (i = 0, n = [string length]; i < n;) { TextPatternItem * item; item = ParseTextPatternItem(string, &i); if (item == NULL) { FreeTextPattern (pattern); return NULL; } // enlarge the pattern buffer pattern->nItems++; pattern->items = (TextPatternItem **) realloc(pattern->items, pattern->nItems * sizeof(TextPatternItem *)); pattern->items[pattern->nItems - 1] = item; } return pattern; } void FreeTextPattern (TextPattern *pattern) { unsigned int i; for (i = 0; i < pattern->nItems; i++) { FreeTextPatternItem(pattern->items[i]); } free(pattern->items); TEST_RELEASE(pattern->string); free(pattern); } static inline BOOL IsMemberOfCharacterClass(unichar c, unichar *charClass, unsigned int n) { unsigned int i; for (i = 0; i < n; i++) { if (charClass[i] == c) { return YES; } } return NO; } /** * Returns YES if the passed character argument is an alphanumeric * character, and NO if it isn't. */ static inline BOOL my_isalnum (unichar c) { if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) { return YES; } else { return NO; } } static inline BOOL CheckTextPatternItemPresence(TextPatternItem *item, unichar *string, unsigned int stringLength, unsigned int *offset) { switch (item->type) { case SingleCharacterTextPatternItem: { unsigned int i; unsigned int n; // read characters while they are equal to our letter for (n = 0, i = *offset; i < stringLength && n < item->maxCount; i++, n++) { if (string[i] != item->data.singleChar) { break; } } if (n >= item->minCount) { *offset = i; return YES; } else { return NO; } } break; case MultipleCharactersTextPatternItem: { unsigned int i; unsigned int n; for (n = 0, i = *offset; i < stringLength && n < item->maxCount; i++, n++) { if (!IsMemberOfCharacterClass(string[i], item->data.multiChar.characters, item->data.multiChar.nCharacters)) { break; } } if (n >= item->minCount) { *offset = i; return YES; } else { return NO; } } break; case AnyCharacterTextPatternItem: { unsigned int i, n; for (i = *offset, n = 0; n < item->minCount; i++, n++) { if (i >= stringLength) { return NO; } } *offset = i; return YES; } break; case BeginningOfWordTextPatternItem: { unsigned int i = *offset; if (i >= stringLength) { return NO; } if (i > 0) { if (my_isalnum(string[i - 1])) { return NO; } else { return YES; } } else { return YES; } } break; case EndingOfWordTextPatternItem: { unsigned int i = *offset; if (i >= stringLength) { return YES; } if (!my_isalnum(string[i])) { return YES; } else { return NO; } } break; case BeginningOfLineTextPatternItem: { unsigned int i = *offset; if (i > 0) { return (string[i - 1] == '\n' || string[i - 1] == '\r'); } else { return YES; } } break; case EndingOfLineTextPatternItem: { unsigned int i = *offset; if (i + 1 < stringLength) { return (string[i + 1] == '\n' || string[i + 1] == '\r'); } else { return YES; } } break; } /* [NSException raise: NSInternalInconsistencyException format: _(@"Unknown text pattern item type %i encountered."), item->type];*/ return NO; } unsigned int CheckTextPatternPresenceInString(TextPattern *pattern, unichar *string, unsigned int stringLength, unsigned int index) { unsigned int i, off; off = index; for (i = 0; i < pattern->nItems; i++) { if (!CheckTextPatternItemPresence(pattern->items[i], string, stringLength, &off)) { break; } } if (i == pattern->nItems) { return off - index; } else { return 0; } } unichar *PermissibleCharactersAtPatternBeginning(TextPattern *pattern) { unsigned int i; for (i = 0; i < pattern->nItems; i++) { switch(pattern->items[i]->type) { case SingleCharacterTextPatternItem: { unichar * buf; buf = malloc(2 * sizeof(unichar)); buf[0] = pattern->items[i]->data.singleChar; buf[1] = 0; return buf; } case MultipleCharactersTextPatternItem: { unichar * buf; unsigned int n = pattern->items[i]->data.multiChar.nCharacters + 1; buf = malloc(n * sizeof(unichar)); memcpy(buf, pattern->items[i]->data.multiChar.characters, n * sizeof(unichar)); buf[n - 1] = 0; return buf; } case AnyCharacterTextPatternItem: return (unichar *) -1; default: break; } } return NULL; } ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/Plist.syntax000644 001751 000024 00000003126 10544200321 027044 0ustar00multixstaff000000 000000 { FileTypes = ( "plist", "syntax" ); Contexts = ( { Keywords = ( { Pattern = "\\{"; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = "\\}"; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = "("; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ")"; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ","; ForegroundColor = "0.6 0.6 0.8"; Bold = YES; }, { Pattern = "="; ForegroundColor = "0.6 0.6 0.8"; Bold = YES; }, { Pattern = ";"; ForegroundColor = "0.8 0.8 0"; Bold = YES; } ); }, /* string */ { Beginning = "\""; Ending = "\""; ContextSkips = ( "\\\\\\\\", "\\\\\"" ); ForegroundColor = "0 0.7 0"; Keywords = ( { Pattern = "\\\\\""; ForegroundColor = "0 1 0"; }, { Pattern = "\\\\\\\\"; ForegroundColor = "0 1 0"; } ); }, /* preproc directive */ { Beginning = "^#"; Ending = "\n"; ContextSkips = ( "\\\\\n" ); ForegroundColor = "0.8 0 0"; Bold = YES; }, /* multi-line comment */ { Beginning = "/\\*"; Ending = "\\*/"; ForegroundColor = "0.4 0.4 0.4"; Italic = YES; }, ); }ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/FileCH.tiff000644 001751 000024 00000022536 10670164707 026474 0ustar00multixstaff000000 000000 II*$CnAžBA@?>=<;:88CnDʾDA=5110//.--25654CnEB>3+'#"#""""! "$*/220GnGD;-&$$####"""!!! !#(-.,HҾG&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`c\nGnF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ld`=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ\SnGnE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcXRHվA%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\VQLGnD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[PKHҾ@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwPwPwLq.YE,"  6*AaPwPwPwLq[io5|LGIDG5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPw4dM  1_ILq:rW PwPwPwPw;rW7zJEHAF4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPw%H8=w[PwPwLr&5fNPwPwPwPw8mS<)yHCE@E2$$$$##mx`PwPwPwPwPwPwPwPwPwPw3cL ?1PwPwPwPwPwPwPwPwPwPwPwBb}R,xPJD@E/$$$###mw^PwPwPwPwPwPwPwPwPwOv ?z]PwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?A=D/$$####dFld”PwPwPwPwPwPwPwPwPwEfMrPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=@ }s>9<8B2####""!{PwPwPwPwPwPw CdPw.ZEDeNt;rX-#JoPwPwPwPw=v[K>~|r<8:6A7###"""!fClPwPwPwPwPw'#D4OvPwPw7jR$  4(9oUPwPwPwPwPwPw2aJD6~~}ne:6vl@;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=`Y>4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62tj>9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8^V<7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .?63% #)+48)}F<4., ~}|{tQK2 /}4?5.! xo8~}|yg^8 41 - 4?3+ rj3}|yja<8SM0" 0?1*!nf1~}wjb?;TN_WxEB>$0?/+"ja/~~sTN=8UOX PTPUC3,?-*!e],|{pSM;71 .c_YUNB4$,)$aY*uc[FA:6ynphc\TMC6$(}?(z&z#~]V(zukc[LGB>WPN Gc_\WRPPM; u"nCx$pw$ov"ov~VO'~|yod]RMGCA=\UZRVUQNLIDCD4)Hiajbjcjckdc\d]KFo g]VZSWQNHHCc\f]mci=<<;;<>5*%"d^b\XRQLOIJEIDFBDAqh#########"00$ k$@$N%V%(R/home/heron/Development/gnustep/dev-apps/projectcenter/Modules/Editors/ProjectCenter/Resources/FileCH.tiffHHProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/Info.table000644 001751 000024 00000000344 10544200321 026404 0ustar00multixstaff000000 000000 { Type = "Editor"; Name = "ProjectCenter"; Description = "Default ProjectCenter code editor (C, ObjectiveC, C++ files)"; PrincipalClassName = "PCEditor"; FileTypes = (C,c,m,M,h,H,cc,CC); ProvidesBrowserItems = YES; }ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/ObjC.syntax000644 001751 000024 00000020753 10663134335 026610 0ustar00multixstaff000000 000000 { FileTypes = ( "m", "h" ); Contexts = ( { Keywords = ( { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0."; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.0 0.0 0.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = "<\\.\\.\\.>"; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = "<[nN]il>"; ForegroundColor = "1.0 0.0 1.0"; Bold = NO; }, { Pattern = ""; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = ""; ForegroundColor = "1.0 0.0 1.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "1.0 0.0 1.0"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.18 0.55 0.34"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.65 0.16 0.16"; }, { Pattern = ""; ForegroundColor = "0.65 0.16 0.16"; }, { Pattern = ""; ForegroundColor = "0.65 0.16 0.16"; }, { Pattern = "<@interface>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@implementation>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@end>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@class>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@selector>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@protocol>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@throw>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@try>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@catch>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@synchronized>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@defs>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@finally>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@private>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@protected>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@public>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@encode>"; ForegroundColor = "0.65 0.16 0.16"; Bold = YES; }, { Pattern = "<@\""; ForegroundColor = "0.8 0.0 0.0"; } ); }, /* string */ { Beginning = "\""; Ending = "\""; ContextSkips = ( "\\\\\\\\", "\\\\\"" ); ForegroundColor = "0.8 0.0 0.0"; Keywords = ( { Pattern = "\\\\\""; ForegroundColor = "0 1 0"; }, { Pattern = "\\\\\\\\"; ForegroundColor = "0 1 0"; } ); }, /* character constant */ { Beginning = "'"; Ending = "'"; ContextSkips = ( "\\\\\\\\", "\\\\'" ); ForegroundColor = "0.2 0.2 0.8"; BackgroundColor = "0.8 0.8 0"; }, /* preproc directive */ { Beginning = "^#"; Ending = "\n"; ContextSkips = ( "\\\\\n" ); ForegroundColor = "0.63 0.13 0.94"; Bold = NO; }, /* multi-line comment */ { Beginning = "/\\*"; Ending = "\\*/"; ForegroundColor = "0.0 0.0 1.0"; Italic = YES; }, /* inline comment */ { Beginning = "//"; Ending = "\n"; ForegroundColor = "0.0 0.0 1.0"; Italic = YES; } ); }ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/FileM.tiff000644 001751 000024 00000022302 10670164707 026365 0ustar00multixstaff000000 000000 II*$\Un1BA@?>=<;:5*{^Yn3DA=5110//.--2562{'s`YnAB>3+'#"#""""! "$*/22s$lb[nCD;-&$$####"""!!! !#(-.l!d6G&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`+ (nc\nF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ldZUD=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ( $nc\nE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcSM6A%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQN GnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\V=9b[nD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[KF6@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwLq[io5|LG73G5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPwPwPw;rW7zJE61F4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mS<)yHC4 0E2$$$$##mx`PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwBb}R,xPJ3 0E/$$$###mw^PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?1 .D/$$####dFld”PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=0 -C.$####" `Yi͜PwPwPwPwPwPwPwPwPwPwPwPwPwPw.YDB+t@;. +C0####""!vmPwPwPwPwPwPwPwPwPwPwPwPwPw+T@> }s>9B2####""!{PwPwPwPwPwPwPwPwPwPwPwPw=v[K>~|r<817###"""!fClPwPwPwPwPwPwPw2aJD6~~}ne:6; 6f _;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=HC/4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62: 5a[9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51-)?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8GA^X7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /-)?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .-)?)|3% #)+48)}F<4., ~}|{tQK2 /f^+ (?5.! xo8~}|yg^8 4& # * '?3+ rj3}|yja<8SM0" ( %?1*!nf1~}wjb?;TN-)xEB>$& $?/+"ja/~~sTN=8UO-)TPUC3% #?-*!e],|{pSM;7* 'c_YUNB4$j!c)$aY*uc[FA:6h_phc\TMC6$" ?c\&z#~]V(zukc[LGB>KE-)c_\WRPPM;  C\Vw$ov"ov~VO'~|yod]RMGCA=MG-)VUQNLIDCD4)-)H95RLjcjckdc\d]KFo g]VZSWQNHHCPJ> 9-)i=<<;;<>5*%"2/1./,- *, )* ') &' %& $? :#########" 00$$$$(R ' 'ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/FileHH.tiff000644 001751 000024 00000022302 10670164707 026470 0ustar00multixstaff000000 000000 II*$\Un1BA@?>=<;:5*{^Yn3DA=5110//.--2562{'s`YnAB>3+'#"#""""! "$*/22s$lb[nCD;-&$$####"""!!! !#(-.l!d6G&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`+ (nc\nF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ldZUD=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ( $nc\nE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcSM6A%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQN GnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\V=9b[nD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[KF6@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwLq[io5|LG73G5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw;rW7zJE61F4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mS<)yHC4 0E2$$$$##mx`PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwBb}R,xPJ3 0E/$$$###mw^PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?1 .D/$$####dFld”PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=0 -C.$####" `Yi͜PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw.YDB+t@;. +C0####""!vmfǘPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw+T@> }s>9B2####""!{\mqYPwPwPwPwPwPwPwPwPwPwPwPwPw=v[K>~|r<817###"""!fCl[PwPwPwPwPwPwPwPwPwPwPwPwPw2aJD6~~}ne:6; 6f _;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=HC/4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62: 5a[9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51-)?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8GA^X7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /-)?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .-)?)|3% #)+48)}F<4., ~}|{tQK2 /f^+ (?5.! xo8~}|yg^8 4& # * '?3+ rj3}|yja<8SM0" ( %?1*!nf1~}wjb?;TN-)xEB>$& $?/+"ja/~~sTN=8UO-)TPUC3% #?-*!e],|{pSM;7* 'c_YUNB4$j!c)$aY*uc[FA:6h_phc\TMC6$" ?c\&z#~]V(zukc[LGB>KE-)c_\WRPPM;  C\Vw$ov"ov~VO'~|yod]RMGCA=MG-)VUQNLIDCD4)-)H95RLjcjckdc\d]KFo g]VZSWQNHHCPJ> 9-)i=<<;;<>5*%"2/1./,- *, )* ') &' %& $? :#########" 00$$$$(R ' 'ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/C.syntax000644 001751 000024 00000012370 10544200321 026134 0ustar00multixstaff000000 000000 { FileTypes = ( "c" ); Contexts = ( { Keywords = ( { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = ""; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; }, { Pattern = "<\\.\\.\\.>"; ForegroundColor = "0.6 0.45 0.75"; Bold = YES; } ); }, /* string */ { Beginning = "\""; Ending = "\""; ContextSkips = ( "\\\\\\\\", "\\\\\"" ); ForegroundColor = "0 0.7 0"; Keywords = ( { Pattern = "\\\\\""; ForegroundColor = "0 1 0"; }, { Pattern = "\\\\\\\\"; ForegroundColor = "0 1 0"; } ); }, /* character constant */ { Beginning = "'"; Ending = "'"; ContextSkips = ( "\\\\\\\\", "\\\\'" ); ForegroundColor = "0.2 0.2 0.8"; BackgroundColor = "0.8 0.8 0"; }, /* preproc directive */ { Beginning = "^#"; Ending = "\n"; ContextSkips = ( "\\\\\n" ); ForegroundColor = "0.8 0 0"; Bold = YES; }, /* multi-line comment */ { Beginning = "/\\*"; Ending = "\\*/"; ForegroundColor = "0.4 0.4 0.4"; Italic = YES; }, /* inline comment */ { Beginning = "//"; Ending = "\n"; ForegroundColor = "0.4 0.4 0.4"; Italic = YES; } ); }ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/FileC.tiff000644 001751 000024 00000022534 10670164707 026362 0ustar00multixstaff000000 000000 II*$CnAžBA@?>=<;:88CnDʾDA=5110//.--25654CnEB>3+'#"#""""! "$*/220GnGD;-&$$####"""!!! !#(-.,HҾG&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`c\nGnF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ld`=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ\SnGnE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcXRHվA%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\VQLGnD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[PKHҾ@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwPwPwLq.YE,"  6*AaPwPwPwLq[io5|LGIDG5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPw4dM  1_ILq:rW PwPwPwPw;rW7zJEHAF4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPw%H8=w[PwPwLr&5fNPwPwPwPw8mS<)yHCE@E2$$$$##mx`PwPwPwPwPwPwPwPwPwPw3cL ?1PwPwPwPwPwPwPwPwPwPwPwBb}R,xPJD@E/$$$###mw^PwPwPwPwPwPwPwPwPwOv ?z]PwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?A=D/$$####dFld”PwPwPwPwPwPwPwPwPwEfMrPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=@ }s>9<8B2####""!{PwPwPwPwPwPw CdPw.ZEDeNt;rX-#JoPwPwPwPw=v[K>~|r<8:6A7###"""!fClPwPwPwPwPw'#D4OvPwPw7jR$  4(9oUPwPwPwPwPwPw2aJD6~~}ne:6vl@;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=`Y>4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62tj>9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8^V<7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .?63% #)+48)}F<4., ~}|{tQK2 /}4?5.! xo8~}|yg^8 41 - 4?3+ rj3}|yja<8SM0" 0?1*!nf1~}wjb?;TN_WxEB>$0?/+"ja/~~sTN=8UOX PTPUC3,?-*!e],|{pSM;71 .c_YUNB4$,)$aY*uc[FA:6ynphc\TMC6$(}?(z&z#~]V(zukc[LGB>WPN Gc_\WRPPM; u"nCx$pw$ov"ov~VO'~|yod]RMGCA=\UZRVUQNLIDCD4)Hiajbjcjckdc\d]KFo g]VZSWQNHHCc\f]mci=<<;;<>5*%"d^b\XRQLOIJEIDFBDAqh#########"00$ j$@$L%T%(R/home/heron/Development/gnustep/dev-apps/projectcenter/Modules/Editors/ProjectCenter/Resources/FileC.tiffHHProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/FileMH.tiff000644 001751 000024 00000022302 10670164707 026475 0ustar00multixstaff000000 000000 II*$\Un1BA@?>=<;:5*{^Yn3DA=5110//.--2562{'s`YnAB>3+'#"#""""! "$*/22s$lb[nCD;-&$$####"""!!! !#(-.l!d6G&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`+ (nc\nF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ldZUD=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ( $nc\nE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcSM6A%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQN GnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\V=9b[nD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[KF6@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwLq[io5|LG73G5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPwPwPw;rW7zJE61F4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mS<)yHC4 0E2$$$$##mx`PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwBb}R,xPJ3 0E/$$$###mw^PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?1 .D/$$####dFld”PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=0 -C.$####" `Yi͜PwPwPwPwPwPwPwPwPwPwPwPwPwPw.YDB+t@;. +C0####""!vmPwPwPwPwPwPwPwPwPwPwPwPwPw+T@> }s>9B2####""!{PwPwPwPwPwPwPwPwPwPwPwPw=v[K>~|r<817###"""!fClPwPwPwPwPwPwPw2aJD6~~}ne:6; 6f _;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=HC/4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62: 5a[9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51-)?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8GA^X7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /-)?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .-)?)|3% #)+48)}F<4., ~}|{tQK2 /f^+ (?5.! xo8~}|yg^8 4& # * '?3+ rj3}|yja<8SM0" ( %?1*!nf1~}wjb?;TN-)xEB>$& $?/+"ja/~~sTN=8UO-)TPUC3% #?-*!e],|{pSM;7* 'c_YUNB4$j!c)$aY*uc[FA:6h_phc\TMC6$" ?c\&z#~]V(zukc[LGB>KE-)c_\WRPPM;  C\Vw$ov"ov~VO'~|yod]RMGCA=MG-)VUQNLIDCD4)-)H95RLjcjckdc\d]KFo g]VZSWQNHHCPJ> 9-)i=<<;;<>5*%"2/1./,- *, )* ') &' %& $? :#########" 00$$$$(R ' 'ProjectCenter-0.6.1/Modules/Editors/ProjectCenter/Resources/FileH.tiff000644 001751 000024 00000022302 10670164707 026360 0ustar00multixstaff000000 000000 II*$\Un1BA@?>=<;:5*{^Yn3DA=5110//.--2562{'s`YnAB>3+'#"#""""! "$*/22s$lb[nCD;-&$$####"""!!! !#(-.l!d6G&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`+ (nc\nF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ldZUD=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ( $nc\nE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcSM6A%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQN GnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\V=9b[nD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[KF6@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwLq[io5|LG73G5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw;rW7zJE61F4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mS<)yHC4 0E2$$$$##mx`PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwBb}R,xPJ3 0E/$$$###mw^PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?1 .D/$$####dFld”PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=0 -C.$####" `Yi͜PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw.YDB+t@;. +C0####""!vmfǘPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw+T@> }s>9B2####""!{\mqYPwPwPwPwPwPwPwPwPwPwPwPwPw=v[K>~|r<817###"""!fCl[PwPwPwPwPwPwPwPwPwPwPwPwPw2aJD6~~}ne:6; 6f _;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=HC/4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62: 5a[9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51-)?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8GA^X7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /-)?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .-)?)|3% #)+48)}F<4., ~}|{tQK2 /f^+ (?5.! xo8~}|yg^8 4& # * '?3+ rj3}|yja<8SM0" ( %?1*!nf1~}wjb?;TN-)xEB>$& $?/+"ja/~~sTN=8UO-)TPUC3% #?-*!e],|{pSM;7* 'c_YUNB4$j!c)$aY*uc[FA:6h_phc\TMC6$" ?c\&z#~]V(zukc[LGB>KE-)c_\WRPPM;  C\Vw$ov"ov~VO'~|yod]RMGCA=MG-)VUQNLIDCD4)-)H95RLjcjckdc\d]KFo g]VZSWQNHHCPJ> 9-)i=<<;;<>5*%"2/1./,- *, )* ') &' %& $? :#########" 00$$$$(R ' 'ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/000755 001751 000024 00000000000 11766110766 023047 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/000755 001751 000024 00000000000 11766110766 025021 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/PCDebugger.m000644 001751 000024 00000022336 11144710541 025165 0ustar00multixstaff000000 000000 /* ** PCDebugger ** ** Copyright (c) 2008 ** ** Author: Gregory Casamento ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import #import "PCDebugger.h" #import "PCDebuggerView.h" #ifndef NOTIFICATION_CENTER #define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter] #endif static NSImage *goImage = nil; static NSImage *pauseImage = nil; static NSImage *continueImage = nil; static NSImage *restartImage = nil; static NSImage *nextImage = nil; static NSImage *stepInImage = nil; static NSImage *stepOutImage = nil; static NSImage *upImage = nil; static NSImage *downImage = nil; @implementation PCDebugger + (void) initialize { if (self == [PCDebugger class]) { NSBundle *bundle; NSString *path; bundle = [NSBundle bundleForClass: self]; path = [bundle pathForImageResource: @"go_button"]; if (path != nil) { goImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"pause_button"]; if (path != nil) { pauseImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"continue_button"]; if (path != nil) { continueImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"restart_button"]; if (path != nil) { restartImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"next_button"]; if (path != nil) { nextImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"stepin_button"]; if (path != nil) { stepInImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"stepout_button"]; if (path != nil) { stepOutImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"up_button"]; if (path != nil) { upImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"down_button"]; if (path != nil) { downImage = [[NSImage alloc] initWithContentsOfFile: path]; } } } - (id) init { if((self = [super init]) != nil) { // initialization here... if([NSBundle loadNibNamed: @"PCDebugger" owner: self] == NO) { return nil; } [(PCDebuggerView *)debuggerView setDebugger:self]; } return self; } -(void) debugExecutableAtPath: (NSString *)filePath withDebugger: (NSString *)debugger { ASSIGN(path,filePath); ASSIGN(debuggerPath,debugger); [debuggerWindow setTitle: [NSString stringWithFormat: @"Debugger (%@)",filePath]]; [self show]; } - (void) show { [debuggerWindow makeKeyAndOrderFront: self]; [self startDebugger]; } - (void) startDebugger { [debuggerView runProgram: debuggerPath inCurrentDirectory: [path stringByDeletingLastPathComponent] withArguments: [[NSArray alloc] initWithObjects: @"-f", path, nil] logStandardError: YES]; } - (void) awakeFromNib { NSToolbar *toolbar = [(NSToolbar *)[NSToolbar alloc] initWithIdentifier: @"PCDebuggerToolbar"]; [toolbar setAllowsUserCustomization: NO]; [toolbar setDelegate: self]; [debuggerWindow setToolbar: toolbar]; RELEASE(toolbar); [debuggerView setFont: [NSFont userFixedPitchFontOfSize: 0]]; [debuggerWindow setFrameAutosaveName: @"PCDebuggerWindow"]; [self setStatus: @"Idle."]; } - (NSWindow *)debuggerWindow { return debuggerWindow; } - (void)setDebuggerWindow: (NSWindow *)window { debuggerWindow = window; } - (NSView *)debuggerView { return debuggerView; } - (void)setDebuggerView: (id)view { debuggerView = view; } - (NSString *)path { return path; } - (void)setPath:(NSString *)p { ASSIGN(path,p); } // action methods for toolbar... - (void) go: (id) sender { [self setStatus: @"Running..."]; [debuggerView putString: @"run\n"]; } - (void) pause: (id) sender { [self setStatus: @"Stopped."]; [debuggerView interrupt]; } - (void) continue: (id) sender { [self setStatus: @"Continue..."]; [debuggerView putString: @"continue\n"]; } - (void) restart: (id) sender { [self setStatus: @"Restarting..."]; [debuggerView interrupt]; [debuggerView putString: @"run\n"]; [self setStatus: @"Running..."]; } - (void) next: (id) sender { [self setStatus: @"Going to next line."]; [debuggerView putString: @"next\n"]; } - (void) stepInto: (id) sender { [self setStatus: @"Stepping into method."]; [debuggerView putString: @"step\n"]; } - (void) stepOut: (id) sender { [self setStatus: @"Finishing method."]; [debuggerView putString: @"finish\n"]; } - (void) up: (id) sender { [self setStatus: @"Up to calling method."]; [debuggerView putString: @"up\n"]; } - (void) down: (id) sender { [self setStatus: @"Down to called method."]; [debuggerView putString: @"down\n"]; } // Status.. - (void) setStatus: (NSString *) status { [statusField setStringValue: status]; } - (NSString *) status { return [statusField stringValue]; } - (void) dealloc { [debuggerWindow close]; [super dealloc]; } @end @implementation PCDebugger (NSToolbarDelegate) - (NSToolbarItem*)toolbar: (NSToolbar*)toolbar itemForItemIdentifier: (NSString*)itemIdentifier willBeInsertedIntoToolbar: (BOOL)flag { NSToolbarItem *toolbarItem = AUTORELEASE([[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier]); if([itemIdentifier isEqual: @"GoItem"]) { [toolbarItem setLabel: @"Go"]; [toolbarItem setImage: goImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(go:)]; [toolbarItem setTag: 0]; } else if([itemIdentifier isEqual: @"PauseItem"]) { [toolbarItem setLabel: @"Pause"]; [toolbarItem setImage: pauseImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(pause:)]; [toolbarItem setTag: 1]; } else if([itemIdentifier isEqual: @"ContinueItem"]) { [toolbarItem setLabel: @"Continue"]; [toolbarItem setImage: continueImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(continue:)]; [toolbarItem setTag: 1]; } else if([itemIdentifier isEqual: @"RestartItem"]) { [toolbarItem setLabel: @"Restart"]; [toolbarItem setImage: restartImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(restart:)]; [toolbarItem setTag: 2]; } else if([itemIdentifier isEqual: @"NextItem"]) { [toolbarItem setLabel: @"Next"]; [toolbarItem setImage: nextImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(next:)]; [toolbarItem setTag: 3]; } else if([itemIdentifier isEqual: @"StepIntoItem"]) { [toolbarItem setLabel: @"Step Into"]; [toolbarItem setImage: stepInImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(stepInto:)]; [toolbarItem setTag: 4]; } else if([itemIdentifier isEqual: @"StepOutItem"]) { [toolbarItem setLabel: @"Step Out"]; [toolbarItem setImage: stepOutImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(stepOut:)]; [toolbarItem setTag: 5]; } else if([itemIdentifier isEqual: @"UpItem"]) { [toolbarItem setLabel: @"Up"]; [toolbarItem setImage: upImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(up:)]; [toolbarItem setTag: 6]; } else if([itemIdentifier isEqual: @"DownItem"]) { [toolbarItem setLabel: @"Down"]; [toolbarItem setImage: downImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(down:)]; [toolbarItem setTag: 7]; } return toolbarItem; } - (NSArray*) toolbarAllowedItemIdentifiers: (NSToolbar*)toolbar { return [NSArray arrayWithObjects: @"GoItem", @"PauseItem", @"ContinueItem", @"RestartItem", @"NextItem", @"StepIntoItem", @"StepOutItem", @"UpItem", @"DownItem", nil]; } - (NSArray*) toolbarDefaultItemIdentifiers: (NSToolbar*)toolbar { return [NSArray arrayWithObjects: @"GoItem", @"PauseItem", @"ContinueItem", @"RestartItem", @"NextItem", @"StepIntoItem", @"StepOutItem", @"UpItem", @"DownItem", nil]; } - (NSArray*) toolbarSelectableItemIdentifiers: (NSToolbar*)toolbar { return [NSArray arrayWithObjects: @"GoItem", @"PauseItem", @"ContinueItem", @"RestartItem", @"NextItem", @"StepIntoItem", @"StepOutItem", @"UpItem", @"DownItem", nil]; } @end ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/PTYView.m000644 001751 000024 00000022350 11744217722 024532 0ustar00multixstaff000000 000000 /* ** PTYView ** ** Copyright (c) 2008-2012 Free Software Foundation ** ** Author: Gregory Casamento ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include /* for stderr and perror*/ #include /* for int errno */ #include #include #if defined (__FreeBSD__) #include #include #include #else #include #endif #include #include #include #if !defined(__OpenBSD__) && !defined(__FreeBSD__) && !(defined (__NetBSD__)) #include #endif #ifndef NOTIFICATION_CENTER #define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter] #endif /* check for solaris */ #if defined (__SVR4) && defined (__sun) #define __SOLARIS__ 1 #define USE_FORKPTY_REPLACEMENT 1 #endif #if !(defined (__NetBSD__)) && !(defined (__SOLARIS__)) && !(defined (__OpenBSD__)) && !(defined(__FreeBSD__)) # include #endif #import "PTYView.h" #ifdef USE_FORKPTY_REPLACEMENT int openpty(int *amaster, int *aslave, char *name, const struct termios *termp, const struct winsize *winp) { int fdm, fds; char *slaveName; fdm = open("/dev/ptmx", O_RDWR); /* open master */ if (fdm == -1) { perror("openpty:open(master)"); return -1; } if(grantpt(fdm)) /* grant access to the slave */ { perror("openpty:grantpt(master)"); close(fdm); return -1; } if(unlockpt(fdm)) /* unlock the slave terminal */ { perror("openpty:unlockpt(master)"); close(fdm); return -1; } slaveName = ptsname(fdm); /* get name of the slave */ if (slaveName == NULL) { perror("openpty:ptsname(master)"); close(fdm); return -1; } if (name) /* of name ptr not null, copy it name back */ strcpy(name, slaveName); fds = open(slaveName, O_RDWR | O_NOCTTY); /* open slave */ if (fds == -1) { perror("openpty:open(slave)"); close (fdm); return -1; } /* ldterm and ttcompat are automatically pushed on the stack on some systems*/ #ifdef __SOLARIS__ if (ioctl(fds, I_PUSH, "ptem") == -1) /* pseudo terminal module */ { perror("openpty:ioctl(I_PUSH, ptem"); close(fdm); close(fds); return -1; } if (ioctl(fds, I_PUSH, "ldterm") == -1) /* ldterm must stay atop ptem */ { perror("forkpty:ioctl(I_PUSH, ldterm"); close(fdm); close(fds); return -1; } #endif /* set terminal parameters if present */ // if (termp) // ioctl(fds, TCSETS, termp); //if (winp) // ioctl(fds, TIOCSWINSZ, winp); *amaster = fdm; *aslave = fds; return 0; } #endif @implementation PTYView /** * Creates master device. */ - (int) openpty { if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) == -1) { NSLog(@"Call to openpty(...) failed."); } return master_fd; } /** * Log string to the view. */ - (void) logString:(NSString *)str newLine:(BOOL)newLine { NSRange range; [self replaceCharactersInRange: NSMakeRange([[self string] length],0) withString:str]; if (newLine) { [self replaceCharactersInRange: NSMakeRange([[self string] length], 0) withString:@"\n"]; } // // Is it backspace? If so, remove one character from the terminal to reflect // the deletion. For some reason backspace sends multiple characters, so I have to remove // one more character than what is sent in order to appropriately delete from the buffer. // range = [str rangeOfString: @"\b"]; if (range.location != NSNotFound) { NSString *newString = [[self string] substringToIndex: [[self string] length] - 4]; [self setString: newString]; } [self scrollRangeToVisible:NSMakeRange([[self string] length], 0)]; [self setNeedsDisplay:YES]; } /** * Log data. */ - (void) logData:(NSData *)data { NSString *dataString; dataString = [[NSString alloc] initWithData:data encoding:[NSString defaultCStringEncoding]]; [self logString: dataString newLine: NO]; RELEASE(dataString); } /** * Log standard out. */ - (void) logStdOut:(NSNotification *)aNotif { NSData *data; NSFileHandle *handle = master_handle; if ((data = [handle availableData]) && [data length] > 0) { [self logData: data]; } if (task) { [handle waitForDataInBackgroundAndNotify]; } else { [NOTIFICATION_CENTER removeObserver: self name: NSFileHandleDataAvailableNotification object: handle]; } } /** * Log error out. */ - (void) logErrOut:(NSNotification *)aNotif { NSData *data; NSFileHandle *handle = error_handle; if ((data = [handle availableData]) && [data length] > 0) { // [self logString: @"\n" newLine: NO]; [self logData: data]; } if (task) { [handle waitForDataInBackgroundAndNotify]; } else { [NOTIFICATION_CENTER removeObserver:self name: NSFileHandleDataAvailableNotification object: handle]; } } /** * Notified when the task is completed. */ - (void) taskDidTerminate: (NSNotification *)notif { NSLog(@"Task Terminated..."); [self logString: [self stopMessage] newLine:YES]; } /** * Message to print when the task starts */ - (NSString *) startMessage { return @"=== Task Started ==="; } /** * Message to print when the task stops */ - (NSString *) stopMessage { return @"\n=== Task Stopped ==="; } /** * Start the program. */ - (void) runProgram: (NSString *)path inCurrentDirectory: (NSString *)directory withArguments: (NSArray *)array logStandardError: (BOOL)logError { task = [[NSTask alloc] init]; [task setArguments: array]; [task setCurrentDirectoryPath: directory]; [task setLaunchPath: path]; master_fd = [self openpty]; if(master_fd > 0) { if(slave_fd > 0) { slave_handle = [[NSFileHandle alloc] initWithFileDescriptor: slave_fd]; master_handle = [[NSFileHandle alloc] initWithFileDescriptor: master_fd]; [task setStandardOutput: slave_handle]; [task setStandardInput: slave_handle]; [master_handle waitForDataInBackgroundAndNotify]; // Log standard error, if requested. if(logError) { [task setStandardError: [NSPipe pipe]]; error_handle = [[task standardError] fileHandleForReading]; [error_handle waitForDataInBackgroundAndNotify]; [NOTIFICATION_CENTER addObserver:self selector:@selector(logErrOut:) name:NSFileHandleDataAvailableNotification object:error_handle]; } // set up notifications to get data. [NOTIFICATION_CENTER addObserver:self selector:@selector(logStdOut:) name:NSFileHandleDataAvailableNotification object:master_handle]; [NOTIFICATION_CENTER addObserver:self selector:@selector(taskDidTerminate:) name:NSTaskDidTerminateNotification object:task]; // run the task... NS_DURING { [self logString: [self startMessage] newLine:YES]; [task launch]; } NS_HANDLER { NSRunAlertPanel(@"Problem Launching Debugger", [localException reason], @"OK", nil, nil, nil); NSLog(@"Task Terminated Unexpectedly..."); [self logString: @"\n=== Task Terminated Unexpectedly ===\n" newLine:YES]; //Clean up after task is terminated [[NSNotificationCenter defaultCenter] postNotificationName: NSTaskDidTerminateNotification object: task]; } NS_ENDHANDLER } } } - (void) terminate { if(task) { [task terminate]; } } - (void) dealloc { [NOTIFICATION_CENTER removeObserver: self]; [self terminate]; [super dealloc]; } - (void) putString: (NSString *)string; { unichar *str = (unichar *)[string cStringUsingEncoding: [NSString defaultCStringEncoding]]; int len = strlen((char *)str); NSData *data = [NSData dataWithBytes: str length: len]; [master_handle writeData: data]; } /** * Put a single character into the stream. */ - (void) putChar:(unichar)ch { NSData *data = [NSData dataWithBytes: &ch length: 1]; [master_handle writeData: data]; } - (void) interrupt { [task interrupt]; } /** * Respond to key events and pipe them down to the debugger */ - (void) keyDown: (NSEvent*)theEvent { NSString *chars; chars = [theEvent characters]; if ([chars length] == 1) { unichar c; c = [chars characterAtIndex: 0]; if (c == 3) // ETX, Control-C { [self interrupt]; // send the interrupt signal to the subtask } else { [self putChar: c]; } } } @end ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/GNUmakefile000644 001751 000024 00000001771 11127202406 025107 0ustar00multixstaff000000 000000 # # GNUmakefile - ProjectCenter.debugger # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = ProjectCenter BUNDLE_EXTENSION = .debugger ProjectCenter_PRINCIPAL_CLASS = PCDebugger # # Additional libraries # ProjectCenter_LIBRARIES_DEPEND_UPON += # # Resource files # ProjectCenter_RESOURCE_FILES= \ Resources/PCDebugger.gorm \ Resources/Info.table \ Resources/go_button.png \ Resources/continue_button.png \ Resources/pause_button.png \ Resources/restart_button.png \ Resources/next_button.png \ Resources/stepin_button.png \ Resources/stepout_button.png \ Resources/up_button.png \ Resources/down_button.png # # Header files # ProjectCenter_HEADERS= \ PCDebugger.h \ PCDebugggerView.h \ PTYView.h # # Class files # ProjectCenter_OBJC_FILES= \ PCDebugger.m \ PCDebuggerView.m \ PTYView.m ADDITIONAL_NATIVE_LIBS += util include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/PCDebuggerView.h000644 001751 000024 00000002205 11126423157 026010 0ustar00multixstaff000000 000000 /* ** PCDebuggerView ** ** Copyright (c) 2008 ** ** Author: Gregory Casamento ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import "PTYView.h" @class PCDebugger; @class NSString; @interface PCDebuggerView : PTYView { PCDebugger *debugger; NSString *currentFile; int subProcessId; } - (void) setDebugger:(PCDebugger *)theDebugger; - (void) setCurrentFile: (NSString *)fileName; - (NSString *) currentFile; - (int) subProcessId; @end ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/PCDebugger.h000644 001751 000024 00000002307 11126423157 025160 0ustar00multixstaff000000 000000 /* ** PCDebugger ** ** Copyright (c) 2008 ** ** Author: Gregory Casamento ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import #import #import #import @interface PCDebugger : NSObject { id debuggerView; id debuggerWindow; id statusField; NSString *path; NSString *debuggerPath; } - (void) setStatus: (NSString *) status; - (NSString *) status; @end ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/PCDebuggerView.m000644 001751 000024 00000013137 11415144774 026031 0ustar00multixstaff000000 000000 /* ** PCDebuggerView ** ** Copyright (c) 2008 ** ** Author: Gregory Casamento ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import "PCDebuggerView.h" #import "PCDebugger.h" #import #import #import #import #ifndef NOTIFICATION_CENTER #define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter] #endif @implementation PCDebuggerView -(void)setDebugger:(PCDebugger *)theDebugger { debugger = theDebugger; } /** * Log string to the view. */ - (void) logString:(NSString *)str newLine:(BOOL)newLine { NSRange range; BOOL printLine = YES; range = [str rangeOfString: @"\032\032"]; // Breakpoint"]; if (range.location != NSNotFound) { NSScanner *scanner = [NSScanner scannerWithString: str]; NSCharacterSet *empty = [NSCharacterSet characterSetWithCharactersInString: @""]; NSString *file = nil; NSString *line = nil; NSString *bytes = nil; int l = 0, b = 0; [scanner setCharactersToBeSkipped: empty]; [scanner scanUpToString: @"\032\032" intoString: NULL]; [scanner scanString: @"\032\032" intoString: NULL]; [scanner scanUpToString: @":" intoString: &file]; [scanner scanString: @":" intoString: NULL]; [scanner scanUpToString: @":" intoString: &line]; if (line != nil) { l = [line intValue]; [scanner scanString: @":" intoString: NULL]; [scanner scanUpToString: @":" intoString: &bytes]; if (bytes != nil) { b = [bytes intValue]; if (l != 0 && b != 0) // if the line & bytes are parsable, then send the notification. { NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: file, @"file", line, @"line", nil]; NSString *statusString = [NSString stringWithFormat: @"Stopped, %@:%@",file,line]; [debugger setStatus: statusString]; [NOTIFICATION_CENTER postNotificationName: PCProjectBreakpointNotification object: dict]; [[self window] makeKeyAndOrderFront: self]; printLine = NO; } } } } // NOTE: This works on certain versions of gdb, but we need to come up with another way of getting // the process id in a more generic way. range = [str rangeOfString: @"[New Thread"]; if (range.location != NSNotFound) { NSScanner *scanner = [NSScanner scannerWithString: str]; NSString *process = nil; [scanner scanUpToString: @"(LWP" intoString: NULL]; [scanner scanString: @"(LWP" intoString: NULL]; [scanner scanUpToString: @")" intoString: &process]; subProcessId = [process intValue]; } // Check certain status messages from GDB and set the state correctly. range = [str rangeOfString: @"Starting program:"]; if (range.location != NSNotFound) { [debugger setStatus: @"Running..."]; } // Check certain status messages from GDB and set the state correctly. range = [str rangeOfString: @"Program received signal"]; if (range.location != NSNotFound) { [debugger setStatus: @"Stopped"]; } // Check certain status messages from GDB and set the state correctly. range = [str rangeOfString: @"Terminated"]; if (range.location != NSNotFound) { [debugger setStatus: @"Terminated"]; } // Check certain status messages from GDB and set the state correctly. range = [str rangeOfString: @"Program exited"]; if (range.location != NSNotFound) { [debugger setStatus: @"Terminated"]; } // FIXME: Filter this error, until we find a better way to deal with it. range = [str rangeOfString: @"[tcsetpgrp failed in terminal_inferior:"]; if (range.location != NSNotFound) { printLine = NO; } // if the line is not filtered, print it... if(printLine) { [super logString: str newLine: newLine]; } } - (void) setCurrentFile: (NSString *)fileName { ASSIGN(currentFile,fileName); } - (NSString *) currentFile { return currentFile; } /** * lookup the process id. */ /* - (int) subProcessId { int task_pid = [task processIdentifier]; int child_pid = 0; NSArray *entries = [[NSFileManager defaultManager] directoryContentsAtPath: @"/proc"]; NSEnumerator *en = [entries objectEnumerator]; NSString *entry = nil; // FIXME: I'm looking for a generic way to do this, what we have here is very /proc specific. // which I don't like since it ties this functionality to systems which have /proc. while((entry = [en nextObject]) != nil) { int pid = [entry intValue]; if (pid != 0) { int ppid = getppid(pid); if (ppid == task_pid) { child_pid = pid; break; } } } return child_pid; } */ - (int) subProcessId { return subProcessId; } - (void) interrupt { int pid = [self subProcessId]; if(pid != 0) { #ifndef __MINGW32__ kill(pid,SIGINT); #endif } } - (void) terminate { [super terminate]; } - (void) mouseDown: (NSEvent *)event { // do nothing... } @end ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/PTYView.h000644 001751 000024 00000003173 11127260401 024512 0ustar00multixstaff000000 000000 /* ** PTYView ** ** Copyright (c) 2008 ** ** Author: Gregory Casamento ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import #import @interface PTYView : NSTextView { NSTask *task; NSFileHandle *master_handle; NSFileHandle *slave_handle; NSFileHandle *error_handle; int master_fd, slave_fd; } - (int)openpty; - (void)logString:(NSString *)str newLine:(BOOL)newLine; - (void)logData:(NSData *)data; - (void)logStdOut:(NSNotification *)aNotif; - (void)logErrOut:(NSNotification *)aNotif; - (void) taskDidTerminate: (NSNotification *)notif; - (NSString *) startMessage; - (NSString *) stopMessage; - (void) runProgram: (NSString *)path inCurrentDirectory: (NSString *)directory withArguments: (NSArray *)array logStandardError: (BOOL)logError; - (void) terminate; - (void) interrupt; - (void) putString: (NSString *)string; - (void) putChar:(unichar)ch; @end ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/stepin_button.png000644 001751 000024 00000001027 11125624221 030405 0ustar00multixstaff000000 000000 PNG  IHDR szzbKGDNm~ pHYs  tIME 䘃9tEXtCommentCreated with The GIMPd%n{IDATX!r@e 8ʊ(jvj0pp``@tbZ,3pDjv:!,Y0ӮLv?ٷ39'`DW`lU<_լJFy?)0O`ȳX}q6i)m˞C|U%9ּ `m_v/m-\r"uد}[J'lY3&;DD0 ]ٳSϴz7!]-(\S c{ `bۋZEg:VDK~;ͽt k>3IENDB`ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/continue_button.png000644 001751 000024 00000001556 11126311745 030743 0ustar00multixstaff000000 000000 PNG  IHDR szzbKGD pHYs  tIME  tEXtCommentCreated with The GIMPd%nIDATXKHTQG jJZd #ƈYT$- zjM61C0#2 mDp#FHri&33jAԷsEY {Om ʵ9 D~ n+5tz'@ {?p|'.gj{xضP4mηv=ozpgêѯgwhUAc] T8d4͆в=+Oh;p784O\M%kӴl8,|_ wY6&cZ +$KMQw)ޏ$Z:,̳PYjGX^ɼw^6Sզevj5bq9AMaGUw؇E;BU Pm xB%O!6+{0Ԓޖj=Slġ!^d/UDUeƽ"}gYG LVm<1g_Uò'f3ÑoL&Ja<1[JMhuΤ4MCu~)QUUy8ՍWTWuK[[+ׁx^t]'1FW !]4L1~.`p|>LD4laS ~]udXv=/C <k*Y.LF!d)@H@g%d$h.g4 vLXNWNԡ( apb{OHwx>a aP+'nnٜ`ĩ!f g^qZ5&߲ΐUUv?RҒq Z =loaQϱb$_ZcP6Lpr~$`x8^)oV,XZΓp!\nX˛R%T*E& $_c"Q+HtKbvZo4@4\U1DIENDB`ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/up_button.png000644 001751 000024 00000001046 11126273221 027531 0ustar00multixstaff000000 000000 PNG  IHDR szzbKGD pHYs  tIME #5tEXtCommentCreated with The GIMPd%nIDATX/R@ "8AHD5(zTq k*`b@0H9CNP̖Iӗ0f-PM: ́ 0<)b` l6/Nȿ~kC'4/T X)m> <y,6am~[H@w3c$t zH37>t)<9%H#3*$|o=D6GQLGO9\ o3M -4@pTO:s'S^rmLd&\eL/^!V7=ҭ>}"E9_jȏՈ.rk 7 [{ĕY&}v35y gJV_;tPUUe׮O~tJYq/A#nvPh:_tw)Һ#;yy[k4TU.+ub<~ЮA]C7XȎ%iUs3I˝̚REl=\a'fi2'IENDB`ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/down_button.png000644 001751 000024 00000001061 11126273221 030051 0ustar00multixstaff000000 000000 PNG  IHDR szzbKGD pHYs  tIME X-tEXtCommentCreated with The GIMPd%nIDATX1N@EF VЬH4>UrhpM R|#f"g̮;)㙿fg_7UǹH[` 82 6Ji*" )pw ,6ˣIx ́QCLi^@#?9)mbo6S6@ Zعİ\8 96漼}vVrH}ׅ˃Cn7ac@bR 2 *60z Q=TIQ0.&(_&H%u؁J6KFū*xIQC46\` xF\+mn\z`fCۖ*$N{/&-1WJ{ VZ7Ձ|io_-,MIENDB`ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/PCDebugger.gorm/000755 001751 000024 00000000000 11766110766 027733 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/pause_button.png000644 001751 000024 00000000757 11125624221 030231 0ustar00multixstaff000000 000000 PNG  IHDR szzbKGD pHYs  tIME ;&otEXtCommentCreated with The GIMPd%nSIDATX-n@FF |ӂ( %VaMr, JhbT>OPV2+%=U|ogw_wMLX!HS@ .e ly`&L-f+jL7`~6kD}iΓVebywJǭO608SNj²_ 6ulTd"H20Xh!@ cv@kj!@ب@Z*?#pՄթOqC2SLXOfNg2cϔzbLT|X< m,fIENDB`ProjectCenter-0.6.1/Modules/Debuggers/ProjectCenter/Resources/next_button.png000644 001751 000024 00000001041 11125624221 030055 0ustar00multixstaff000000 000000 PNG  IHDR szzbKGDNm~ pHYs  tIME 1 1tEXtCommentCreated with The GIMPd%nIDATX1r0E< (r  i1NSNibConnector90?&%NSOwner0@<90A8<0B:80C1NSNibOutletConnector:?0D1NSMutableString&%delegate0E9?0F&%delegate0G9:0H&%initialFirstResponder0I?90J&%debuggerWindow0K?:0L& % debuggerView0M5<0N;<0O?;0P& % statusField0Q&: ProjectCenter-0.6.1/Modules/Preferences/Build/000755 001751 000024 00000000000 11766110766 021671 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/000755 001751 000024 00000000000 11766110766 022414 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Saving/000755 001751 000024 00000000000 11766110766 022061 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Misc/000755 001751 000024 00000000000 11766110766 021525 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Misc/Resources/000755 001751 000024 00000000000 11766110766 023477 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Misc/PCMiscPrefs.h000644 001751 000024 00000003550 11153620023 023775 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2009 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import #import #ifndef PCDefaultDebugger #define PCDefaultDebugger @"/usr/bin/gdb" #endif #define PromptOnQuit @"PromtOnQuit" #define FullPathInFilePanels @"FullPathInFilePanels" #define RememberWindows @"RememberWindows" #define DisplayLog @"DisplayLog" #define UseTearOffWindows @"UseTearOffWindows" #define Debugger @"Debugger" #define Editor @"Editor" @interface PCMiscPrefs : NSObject { id prefs; IBOutlet NSBox *miscView; IBOutlet NSButton *promptWhenQuit; IBOutlet NSButton *fullPathInFilePanels; IBOutlet NSButton *rememberWindows; IBOutlet NSButton *displayLog; IBOutlet NSButton *useTearOffWindows; IBOutlet NSTextField *debuggerField; IBOutlet NSButton *debuggerButton; IBOutlet NSTextField *editorField; IBOutlet NSTextField *editorButton; } @end ProjectCenter-0.6.1/Modules/Preferences/Misc/GNUmakefile000644 001751 000024 00000001031 11151633741 023561 0ustar00multixstaff000000 000000 # # GNUmakefile - Misc preferences # PACKAGE_NAME = Misc include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Misc BUNDLE_EXTENSION = .preferences Misc_PRINCIPAL_CLASS = PCMiscPrefs # # Additional libraries # Misc_LIBRARIES_DEPEND_UPON += # # Resource files # Misc_RESOURCE_FILES= \ Resources/MiscPrefs.gorm \ Resources/Info.table # # Header files # Misc_HEADERS= \ PCMiscPrefs.h # # Class files # Misc_OBJC_FILES= \ PCMiscPrefs.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Preferences/Misc/PCMiscPrefs.m000644 001751 000024 00000016217 11547363036 024025 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2011 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import #import "PCMiscPrefs.h" @implementation PCMiscPrefs // ---------------------------------------------------------------------------- // --- Init and free // ---------------------------------------------------------------------------- - (id)initWithPrefController:(id )aPrefs { self = [super init]; if ([NSBundle loadNibNamed:@"MiscPrefs" owner:self] == NO) { NSLog(@"PCMiscPrefs: error loading NIB file!"); } prefs = aPrefs; RETAIN(miscView); return self; } - (void)awakeFromNib { [promptWhenQuit setRefusesFirstResponder:YES]; [fullPathInFilePanels setRefusesFirstResponder:YES]; [rememberWindows setRefusesFirstResponder:YES]; [displayLog setRefusesFirstResponder:YES]; [useTearOffWindows setRefusesFirstResponder:YES]; [debuggerButton setRefusesFirstResponder:YES]; [editorButton setRefusesFirstResponder:YES]; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCMiscPrefs: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(miscView); [super dealloc]; } // Protocol - (void)readPreferences { NSString *val; BOOL bVal; int state; bVal = [prefs boolForKey:PromptOnQuit defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [promptWhenQuit setState:state]; bVal = [prefs boolForKey:FullPathInFilePanels defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [fullPathInFilePanels setState:state]; bVal = [prefs boolForKey:RememberWindows defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [rememberWindows setState:state]; bVal = [prefs boolForKey:DisplayLog defaultValue:NO]; state = bVal ? NSOnState : NSOffState; [displayLog setState:state]; bVal = [prefs boolForKey:UseTearOffWindows defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [useTearOffWindows setState:state]; val = [prefs stringForKey:Debugger defaultValue:PCDefaultDebugger]; [debuggerField setStringValue:val]; val = [prefs stringForKey:Editor defaultValue:@"ProjectCenter"]; [editorField setStringValue:val]; } - (NSView *)view { return miscView; } // Actions - (void)setPromptWhenQuit:(id)sender { BOOL state; if (promptWhenQuit == nil) {// HACK!!! need to be fixed in GNUstep promptWhenQuit = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:PromptOnQuit notify:YES]; } - (void)setFullPathInFilePanels:(id)sender { BOOL state; if (fullPathInFilePanels == nil) {// HACK!!! need to be fixed in GNUstep fullPathInFilePanels = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:FullPathInFilePanels notify:YES]; } - (void)setRememberWindows:(id)sender { BOOL state; if (rememberWindows == nil) { rememberWindows = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:RememberWindows notify:YES]; } - (void)setDisplayLog:(id)sender { BOOL state; if (displayLog == nil) { displayLog = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:DisplayLog notify:YES]; } - (void)setUseTearOffWindows:(id)sender { BOOL state; if (useTearOffWindows == nil) { useTearOffWindows = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:UseTearOffWindows notify:YES]; } - (void)setDebugger:(id)sender { NSArray *files; NSString *path; NSFileManager *fm = [NSFileManager defaultManager]; // Choose if (sender == debuggerField) { path = [debuggerField stringValue]; } else { files = [[PCFileManager defaultManager] filesOfTypes:nil operation:PCOpenFileOperation multiple:NO title:@"Choose Debugger Tool" accView:nil]; path = [files objectAtIndex:0]; } [[miscView window] makeFirstResponder:debuggerField]; if (!path) { return; } // Check if (path && ![fm fileExistsAtPath:path]) { NSRunAlertPanel(@"Set Debugger Tool", @"File %@ doesn't exist!\n" @"Setting field to default value.", @"Close", nil, nil, path); path = @""; } else if (path && ![fm isExecutableFileAtPath:path]) { NSRunAlertPanel(@"Set Debugger Tool", @"File %@ exists but is not executable!\n" @"Setting field to default value.", @"Close", nil, nil, path); path = @""; } if ([path isEqualToString:@""]) { path = PCDefaultDebugger; } // Set [debuggerField setStringValue:path]; [prefs setString:path forKey:Debugger notify:YES]; } - (void)setEditor:(id)sender { NSArray *files; NSString *path; NSString *editorPath; NSFileManager *fm = [NSFileManager defaultManager]; NSWorkspace *ws = [NSWorkspace sharedWorkspace]; // Choose if (sender == debuggerField) { path = [debuggerField stringValue]; } else if ([path = [editorField stringValue] isEqualToString:@""]) { files = [[PCFileManager defaultManager] filesOfTypes:nil operation:PCOpenFileOperation multiple:NO title:@"Choose Editor" accView:nil]; path = [files objectAtIndex:0]; } [[miscView window] makeFirstResponder:editorField]; if (!path) { return; } // Check if (path && ![ws fullPathForApplication:path]) { editorPath = [[path componentsSeparatedByString:@" "] objectAtIndex:0]; if (![fm fileExistsAtPath:editorPath]) { [editorField selectText:self]; NSRunAlertPanel(@"Set Editor", @"Editor %@ doesn't exist!\n" @"Setting field to default value.", @"Close", nil, nil, path); path = @""; } else if (path && ![fm isExecutableFileAtPath:editorPath]) { [editorField selectText:self]; NSRunAlertPanel(@"Set Editor", @"File %@ exists but is not executable!\n" @"Setting field to default value.", @"Close", nil, nil, path); path = @""; } } if ([path isEqualToString:@""] || !path) { path = @"ProjectCenter"; } // Set [editorField setStringValue:path]; [prefs setString:path forKey:Editor notify:YES]; } @end ProjectCenter-0.6.1/Modules/Preferences/Misc/Resources/Info.table000644 001751 000024 00000000224 11151633741 025370 0ustar00multixstaff000000 000000 { Type = "Preferences"; Name = "Miscellaneous"; Description = "Miscellaneous ProjectCenter options."; PrincipalClassName = "PCMiscPrefs"; } ProjectCenter-0.6.1/Modules/Preferences/Misc/Resources/MiscPrefs.gorm/000755 001751 000024 00000000000 11766110766 026335 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Misc/Resources/MiscPrefs.gorm/data.info000644 001751 000024 00000000270 11151633741 030111 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Modules/Preferences/Misc/Resources/MiscPrefs.gorm/data.classes000644 001751 000024 00000001411 11153620023 030600 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "setUseTearOffWindows:", "setDebugger:", "setDisplayLog:", "setEditor:", "setFullPathInFilePanels:", "setPromptWhenQuit:", "setRememberWindows:" ); Super = NSObject; }; PCMiscPrefs = { Actions = ( "setEditor:", "setDebugger:", "setFullPathInFilePanels:", "setPromptWhenQuit:", "setDisplayLog:", "setRememberWindows:", "setUseTearOffWindows:" ); Outlets = ( debuggerButton, debuggerField, editorButton, editorField, fullPathInFilePanels, miscView, promptWhenQuit, displayLog, rememberWindows, useTearOffWindows ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Preferences/Misc/Resources/MiscPrefs.gorm/objects.gorm000644 001751 000024 00000015550 11153620023 030640 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:0000001f:000000ba:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C& % C݀ Dr01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C|  C C|&0 &0 % A A C B  C B&0 &0 % @ @ C Bx  C Bx&0 &01 NSTextField1 NSControl% A Bl A  Bl A&0 &%01NSTextFieldCell1 NSActionCell1NSCell0& % Debugger:01NSFont%0& % Helvetica A@A@&&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% @ Bl A  Bl A&0 &%00&%Editor:&&&&&&&& &&&&&&%00 &%System0!&%textBackgroundColor0" 0#& % textColor0$% B A C9 A  C9 A&0% &%0&0'&0(%'&&&&&&&& &&&&&&%0)0*&%System0+&%textBackgroundColor0,*0-& % textColor0.% B @ C9 A  C9 A&0/ &%0001&(&&&&&&&& &&&&&&%0203&%System04&%textBackgroundColor05306& % textColor071NSButton% C~ @ B( A  B( A&08 &%091 NSButtonCell0:&%Set...(:&&&&&&&&&&&&&&%0;&0<&&&& &&0=% C~ A B( A  B( A&0> &%0?0@&%Set...(@&&&&&&&&&&&&&&%0A&0B&&&& &&0C0D&%External Tools(&&&&&&&&&&&&&& @ @%%0E% A Cb C A  C A&0F &%0G0H&.%.Always prompt when quitting or closing project0I1NSImage0J1NSMutableString&%common_SwitchOff(&&&&&&&&&&&&&&%0K&0L&0M0N&%common_SwitchOn&&& &&0O% A CM C A  C A&0P &%0Q0R&&%&Select full path in Open Quickly panelI(&&&&&&&&&&&&&&%0S&0T&M&&& &&0U% A C8 C A  C A&0V &%0W0X&-%-Remember windows and panels opened in projectI(&&&&&&&&&&&&&&%0Y&0Z&M&&& &&0[% A C# C A  C A&0\ &%0]0^&%Display Log Panel at startupI(&&&&&&&&&&&&&&%0_&0`&M&&& &&0a% A C C A  C A&0b &%0c0d&(%(Use "tear off" windows for project toolsI(d&&&&&&&&&&&&&&%0e&0f&M&&& &&0g0h&%Box(&&&&&&&&&&&&&& %%0i0j&%System0k&%windowBackgroundColor0l&%Window0m&%Miscm @@ B F@ F@%&   D D0n &0o &0p1NSMutableDictionary1 NSDictionary&0q& % Button(6)[0r&%NSOwner0s& % PCMiscPrefs0t&%View(1) 0u&%Box(0)0v& % Button(1)=0w& % TextField(1)0x& % TextField(3).0y& % Button(5)U0z& % Button(7)a0{& % Misc Section0|&%View(0)0}& % Button(0)70~&%View(2) 0& % TextField(0)0&%Box(1) 0& % Button(2)E0& % TextField(2)$0& % Button(4)O0 &$$01NSNibConnector{r0|{0u|0tu0t0~0~0w~0~0x~0}~0v~0t0t01NSNibOutletConnectorr0&%promptWhenQuit0r0&%fullPathInFilePanels0r0& % debuggerField0rv0&%debuggerButton0rx0& % editorField0r}0& % editorButton01NSNibControlConnectorr0&%setPromptWhenQuit:0r0&%setFullPathInFilePanels:0r0& % setDebugger:0vr0xr0& % setEditor:0}r0ru0&%miscView0yt0qt0zt0ry0&%rememberWindows0rq0& % displayLog0yr0&%setRememberWindows:0qr0&%setDisplayLog:0zr0&%setUseTearOffWindows:0rz0&%useTearOffWindows0&ProjectCenter-0.6.1/Modules/Preferences/Saving/Resources/000755 001751 000024 00000000000 11766110766 024033 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Saving/PCSavingPrefs.h000644 001751 000024 00000002603 11151633741 024674 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2009 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import #import #define SaveOnQuit @"SaveOnQuit" #define KeepBackup @"KeepBackup" #define AutoSavePeriod @"AutoSavePeriod" @interface PCSavingPrefs : NSObject { id prefs; IBOutlet NSBox *savingView; IBOutlet NSButton *saveOnQuit; IBOutlet NSButton *keepBackup; IBOutlet NSSlider *autosaveSlider; IBOutlet NSTextField *autosaveField; } @end ProjectCenter-0.6.1/Modules/Preferences/Saving/PCSavingPrefs.m000644 001751 000024 00000006355 11157302573 024713 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2009 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import "PCSavingPrefs.h" @implementation PCSavingPrefs // ---------------------------------------------------------------------------- // --- Init and free // ---------------------------------------------------------------------------- - (id)initWithPrefController:(id )aPrefs { self = [super init]; if ([NSBundle loadNibNamed:@"SavingPrefs" owner:self] == NO) { NSLog(@"PCSavingPrefs: error loading NIB file!"); } prefs = aPrefs; RETAIN(savingView); return self; } - (void)awakeFromNib { [saveOnQuit setRefusesFirstResponder:YES]; [keepBackup setRefusesFirstResponder:YES]; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCSavingPrefs: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(savingView); [super dealloc]; } // Protocol - (void)readPreferences { NSString *val; BOOL bVal; int state; val = [prefs stringForKey:AutoSavePeriod defaultValue:@"120"]; [autosaveField setStringValue:val]; [autosaveSlider setFloatValue:[val floatValue]]; bVal = [prefs boolForKey:SaveOnQuit defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [saveOnQuit setState:state]; bVal = [prefs boolForKey:KeepBackup defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [keepBackup setState:state]; } - (NSView *)view { return savingView; } // Actions - (void)setSaveOnQuit:(id)sender { BOOL state; if (saveOnQuit == nil) {// HACK!!! need to be fixed in GNUstep saveOnQuit = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:SaveOnQuit notify:YES]; } - (void)setKeepBackup:(id)sender { BOOL state; if (keepBackup == nil) {// HACK!!! need to be fixed in GNUstep keepBackup = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:KeepBackup notify:YES]; } - (void)setSavePeriod:(id)sender { NSString *periodString; if (sender == autosaveSlider) { [autosaveField setIntValue:[sender intValue]]; } periodString = [autosaveField stringValue]; [prefs setString:periodString forKey:AutoSavePeriod notify:YES]; [[NSNotificationCenter defaultCenter] postNotificationName:PCSavePeriodDidChangeNotification object:periodString]; } @end ProjectCenter-0.6.1/Modules/Preferences/Saving/GNUmakefile000644 001751 000024 00000001061 11151633741 024120 0ustar00multixstaff000000 000000 # # GNUmakefile - Saving preferences # PACKAGE_NAME = Saving include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Saving BUNDLE_EXTENSION = .preferences Saving_PRINCIPAL_CLASS = PCSavingPrefs # # Additional libraries # Saving_LIBRARIES_DEPEND_UPON += # # Resource files # Saving_RESOURCE_FILES= \ Resources/SavingPrefs.gorm \ Resources/Info.table # # Header files # Saving_HEADERS= \ PCSavingPrefs.h # # Class files # Saving_OBJC_FILES= \ PCSavingPrefs.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Preferences/Saving/Resources/Info.table000644 001751 000024 00000000202 11151633741 025720 0ustar00multixstaff000000 000000 { Type = "Preferences"; Name = "Saving"; Description = "Project saving options."; PrincipalClassName = "PCSavingPrefs"; } ProjectCenter-0.6.1/Modules/Preferences/Saving/Resources/SavingPrefs.gorm/000755 001751 000024 00000000000 11766110766 027225 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Saving/Resources/SavingPrefs.gorm/data.info000644 001751 000024 00000000270 11151633741 031001 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Modules/Preferences/Saving/Resources/SavingPrefs.gorm/data.classes000644 001751 000024 00000000672 11151633741 031511 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "setSavePeriod:", "setKeepBackup:", "setSaveOnQuit:" ); Super = NSObject; }; PCBuildPrefs = { Actions = ( "setSavePeriod:", "setKeepBackup:", "setSaveOnQuit:" ); Outlets = ( autosaveSlider, keepBackup, autosaveField, saveOnQuit, savingView ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Preferences/Saving/Resources/SavingPrefs.gorm/objects.gorm000644 001751 000024 00000012160 11151633741 031533 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000023:00000085:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C& % C Dk01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C|  C C|&0 &0 % A C C B  C B&0 &0 % @ @ C B  C B&0 &01NSButton1 NSControl% B< B C? A  C? A&0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Save Project Upon Quit01NSImage01NSMutableString&%common_SwitchOff01NSFont%&&&&&&&&&&&&&&%0&0&00&%common_SwitchOn&&& &&0% B< AP C? A  C? A&0 &%00&%Keep Project Backup File&&&&&&&&&&&&&&%0&0&&&& &&0 0!&%Project Save Options&&&&&&&&&&&&&& @ @%%0"% A B` C B  C B&0# &0$ % @ @ C B  C B&0% &0&1 NSTextField% A @@ C A  C A&0' &%0(1NSTextFieldCell0)&%Frequency in Seconds0*% A@&&&&&&&& &&&&&&%0+1NSColor0,&%NSNamedColorSpace0-&%System0.&%textBackgroundColor0/,-00& % textColor01% A B0 C A  C A&02 &%0304&%1204&&&&&&&& &&&&&&%05,06&%System07&%textBackgroundColor08,609& % textColor0:1NSSlider% A A C A  C A&0; &%0<1 NSSliderCell0=&%1200>1NSNumber1NSValued @^&&&&&&&&&&&&&&% B %0?0@&&&&&&&&& &&&&&&%0A,0B&%System0C&%textBackgroundColor0D,B0E&%controlTextColor0F0G&0H0I&%common_SliderHoriz&&&&&&&&&&&&&&%%0J0K&%Project Auto-Save Options&&&&&&&&&&&&&& @ @%%0L0M&%Box&&&&&&&&&&&&&& %%0N,0O&%System0P&%windowBackgroundColor0Q&%Window0R&%BuildR @@ B F@ F@%&   D D0S &0T &0U1NSMutableDictionary1 NSDictionary&0V&%NSOwner0W& % PCBuildPrefs0X&%View(1) 0Y&%View(3)$0Z&%Box(0)0[& % TextField(1)10\& % Button(1)0]& % Build Section0^&%Box(2)"0_&%View(0)0`& % TextField(0)&0a&%View(2) 0b& % Slider(0):0c& % Button(0)0d&%Box(1) 0e &0f1!NSNibConnector]0g&%NSOwner0h!_]0i!Z_0j!XZ0k!dX0l!ad0m!ca0n!\a0o!^X0p!Y^0q!`Y0r![Y0s!bY0t1"NSNibOutletConnectorgZ0u& % savingView0v"gc0w& % saveOnQuit0x"g[0y& % autosaveField0z"g\0{& % keepBackup0|"gb0}&%autosaveSlider0~1#NSNibControlConnectorcg0&%setSaveOnQuit:0#\g0&%setKeepBackup:0#bg0&%setSavePeriod:0#[g0&ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/Resources/000755 001751 000024 00000000000 11766110766 024366 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/PCEditorFSCPrefs.m000644 001751 000024 00000022433 11157302573 025574 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2009 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import #import "PCEditorFSCPrefs.h" // ---------------------------------------------------------------------------- // --- PCEditorFSCPrefsFontButton created to forward changeFont: message // --- to PCEditorFSCPrefs class // ---------------------------------------------------------------------------- @interface PCEditorFSCPrefsFontButton : NSButton { } @end @implementation PCEditorFSCPrefsFontButton - (void)changeFont:(id)sender { [[_cell target] changeFont:sender]; } - (BOOL)resignFirstResponder { [[NSFontPanel sharedFontPanel] close]; return YES; } @end @implementation PCEditorFSCPrefs // ---------------------------------------------------------------------------- // --- Init and free // ---------------------------------------------------------------------------- - (id)initWithPrefController:(id )aPrefs { self = [super init]; if ([NSBundle loadNibNamed:@"EditorFSCPrefs" owner:self] == NO) { NSLog(@"PCEditorFSCPrefs: error loading NIB file!"); } prefs = aPrefs; currentPlainFont = nil; currentRichFont = nil; RETAIN(editorFSCView); return self; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCEditorFSCPrefs: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(editorFSCView); [super dealloc]; } - (void)awakeFromNib { [plainTextFontButton setTarget:self]; [plainTextFontField setAllowsEditingTextAttributes:YES]; [richTextFontButton setTarget:self]; [richTextFontField setAllowsEditingTextAttributes:YES]; } // ---------------------------------------------------------------------------- // --- Utility methods // ---------------------------------------------------------------------------- - (void)pickFont:(NSFont *)currentFont { NSFontManager *fontManager = [NSFontManager sharedFontManager]; [fontManager setSelectedFont:currentPlainFont isMultiple:NO]; [fontManager orderFrontFontPanel:self]; } - (void)changeFont:(id)sender { NSButton *button = (NSButton *)[[editorFSCView window] firstResponder]; int buttonTag; NSFont *font; NSString *fontString; if (![button isKindOfClass:[NSButton class]]) { return; } font = [sender convertFont:currentPlainFont]; fontString = [NSString stringWithFormat:@"%@ %0.1f", [font fontName], [font pointSize]]; buttonTag = [button tag]; if (buttonTag == 0) // plain text font button { [plainTextFontField setStringValue:fontString]; [plainTextFontField setFont:font]; [prefs setString:[font fontName] forKey:EditorPlainTextFont notify:YES]; [prefs setFloat:[font pointSize] forKey:EditorPlainTextFontSize notify:YES]; } else if (buttonTag == 1) // rich text font button { [richTextFontField setStringValue:fontString]; [richTextFontField setFont:font]; [prefs setString:[font fontName] forKey:EditorRichTextFont notify:YES]; [prefs setFloat:[font pointSize] forKey:EditorRichTextFontSize notify:YES]; } } - (NSColor *)colorFromString:(NSString *)colorString { NSArray *colorComponents; NSString *colorSpaceName; NSColor *color; colorComponents = [colorString componentsSeparatedByString:@" "]; colorSpaceName = [colorComponents objectAtIndex:0]; if ([colorSpaceName isEqualToString:@"White"]) // Treat as WhiteColorSpace { color = [NSColor colorWithCalibratedWhite:[[colorComponents objectAtIndex:1] floatValue] alpha:1.0]; } else if ([colorSpaceName isEqualToString:@"RGB"]) // Treat as RGBColorSpace { color = [NSColor colorWithCalibratedRed:[[colorComponents objectAtIndex:1] floatValue] green:[[colorComponents objectAtIndex:2] floatValue] blue:[[colorComponents objectAtIndex:3] floatValue] alpha:1.0]; } return color; } // ---------------------------------------------------------------------------- // --- Protocol // ---------------------------------------------------------------------------- - (void)readPreferences { NSString *fontName; float fontSize; NSFont *plainFont = [NSFont userFixedPitchFontOfSize:0.0]; NSFont *richFont = [NSFont systemFontOfSize:0.0]; NSString *val; // Plain text font fontName = [prefs stringForKey:EditorPlainTextFont defaultValue:[plainFont fontName]]; fontSize = [prefs floatForKey:EditorPlainTextFontSize defaultValue:[plainFont pointSize]]; currentPlainFont = [NSFont fontWithName:fontName size:fontSize]; [plainTextFontField setStringValue:[NSString stringWithFormat:@"%@ %0.1f", [currentPlainFont fontName], [currentPlainFont pointSize]]]; [plainTextFontField setFont:currentPlainFont]; // Rich text font fontName = [prefs stringForKey:EditorRichTextFont defaultValue:[richFont fontName]]; fontSize = [prefs floatForKey:EditorRichTextFontSize defaultValue:[richFont pointSize]]; currentRichFont = [NSFont fontWithName:fontName size:fontSize]; [richTextFontField setStringValue:[NSString stringWithFormat:@"%@ %0.1f", [currentRichFont fontName], [currentRichFont pointSize]]]; [richTextFontField setFont:currentRichFont]; // Editor window size val = [prefs stringForKey:EditorLines defaultValue:@"30"]; [editorLinesField setStringValue:val]; val = [prefs stringForKey:EditorColumns defaultValue:@"80"]; [editorColumnsField setStringValue:val]; // Colors val = [prefs stringForKey:EditorForegroundColor defaultValue:@"White 0.0"]; currentForegroundColor = [self colorFromString:val]; [foregroundColorWell setColor:currentForegroundColor]; val = [prefs stringForKey:EditorBackgroundColor defaultValue:@"White 1.0"]; currentBackgroundColor = [self colorFromString:val]; [backgroundColorWell setColor:currentBackgroundColor]; val = [prefs stringForKey:EditorSelectionColor defaultValue:@"White 0.66"]; currentSelectionColor = [self colorFromString:val]; [selectionColorWell setColor:currentSelectionColor]; } - (NSView *)view { return editorFSCView; } // ---------------------------------------------------------------------------- // --- Actions // ---------------------------------------------------------------------------- - (void)setEditorPlainTextFont:(id)sender { [[editorFSCView window] makeFirstResponder:plainTextFontButton]; [self pickFont:currentPlainFont]; } - (void)setEditorRichTextFont:(id)sender { [[editorFSCView window] makeFirstResponder:richTextFontButton]; [self pickFont:currentRichFont]; } - (void)setEditorSize:(id)sender { NSString *val; NSString *key; if (sender == editorLinesField) { key = EditorLines; val = [editorLinesField stringValue]; } else if (sender == editorColumnsField) { key = EditorColumns; val = [editorColumnsField stringValue]; } [prefs setString:val forKey:key notify:YES]; } - (void)setEditorColor:(id)sender { NSColor *color; NSColor *currentColor; NSString *colorString; NSString *key; NSString *colorSpaceName; if (sender == foregroundColorWell) { NSLog(@"foregroundColorWell"); color = [foregroundColorWell color]; currentColor = currentForegroundColor; key = EditorForegroundColor; } else if (sender == backgroundColorWell) { NSLog(@"backgroundColorWell"); color = [backgroundColorWell color]; currentColor = currentBackgroundColor; key = EditorBackgroundColor; } else if (sender == selectionColorWell) { NSLog(@"selectionColorWell"); color = [selectionColorWell color]; currentColor = currentSelectionColor; key = EditorSelectionColor; } colorSpaceName = [color colorSpaceName]; NSLog(@"Color's colorspace name: '%@'", colorSpaceName); if ([colorSpaceName isEqualToString:@"NSCalibratedRGBColorSpace"]) { /* [sender setColor:currentColor]; NSRunAlertPanel(@"Set Color", @"Please, use RGB color.\n" @"Color in color well left unchanged", @"Close", nil, nil);*/ colorString = [NSString stringWithFormat:@"RGB %0.1f %0.1f %0.1f", [color redComponent], [color greenComponent], [color blueComponent]]; } else if ([colorSpaceName isEqualToString:@"NSCalibratedWhiteColorSpace"]) { colorString = [NSString stringWithFormat:@"White %0.1f", [color whiteComponent]]; } else { return; } currentColor = color; NSLog(@"Selected color: '%@'", colorString); [prefs setString:colorString forKey:key notify:YES]; } @end ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/GNUmakefile000644 001751 000024 00000001125 11155274316 024457 0ustar00multixstaff000000 000000 # # GNUmakefile - EditorFSC preferences # PACKAGE_NAME = EditorFSC include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = EditorFSC BUNDLE_EXTENSION = .preferences EditorFSC_PRINCIPAL_CLASS = PCEditorFSCPrefs # # Additional libraries # EditorFSC_LIBRARIES_DEPEND_UPON += # # Resource files # EditorFSC_RESOURCE_FILES= \ Resources/EditorFSCPrefs.gorm \ Resources/Info.table # # Header files # EditorFSC_HEADERS= \ PCEditorFSCPrefs.h # # Class files # EditorFSC_OBJC_FILES= \ PCEditorFSCPrefs.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/PCEditorFSCPrefs.h000644 001751 000024 00000004573 11157302573 025574 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2009 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import #import #define EditorPlainTextFont @"EditorPlainTextFont" #define EditorPlainTextFontSize @"EditorPlainTextFontSize" #define EditorRichTextFont @"EditorRichTextFont" #define EditorRichTextFontSize @"EditorRichTextFontSize" #define EditorLines @"EditorLines" #define EditorColumns @"EditorColumns" #define EditorForegroundColor @"EditorForegroundColor" #define EditorBackgroundColor @"EditorBackgroundColor" #define EditorSelectionColor @"EditorSelectionColor" @interface PCEditorFSCPrefs : NSObject { id prefs; IBOutlet NSBox *editorFSCView; IBOutlet NSButton *plainTextFontButton; IBOutlet NSTextField *plainTextFontField; IBOutlet NSButton *richTextFontButton; IBOutlet NSTextField *richTextFontField; IBOutlet NSTextField *editorLinesField; IBOutlet NSTextField *editorColumnsField; IBOutlet NSColorWell *foregroundColorWell; IBOutlet NSColorWell *backgroundColorWell; IBOutlet NSColorWell *selectionColorWell; NSFont *currentPlainFont; NSFont *currentRichFont; NSColor *currentBackgroundColor; NSColor *currentForegroundColor; NSColor *currentSelectionColor; } - (void)setEditorPlainTextFont:(id)sender; - (void)setEditorRichTextFont:(id)sender; - (void)setEditorSize:(id)sender; - (void)setEditorColor:(id)sender; @end ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/Resources/Info.table000644 001751 000024 00000000244 11155274316 026264 0ustar00multixstaff000000 000000 { Type = "Preferences"; Name = "Editor: Fonts, Sizes & Colors"; Description = "Common editor's preferences."; PrincipalClassName = "PCEditorFSCPrefs"; } ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/Resources/EditorFSCPrefs.gorm/000755 001751 000024 00000000000 11766110766 030113 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/Resources/EditorFSCPrefs.gorm/data.info000644 001751 000024 00000000270 11155274316 031672 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Modules/Preferences/EditorFSC/Resources/EditorFSCPrefs.gorm/data.classes000644 001751 000024 00000001257 11157043720 032375 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; PCEditorFSCPrefs = { Actions = ( "setEditorPlainTextFont:", "setEditorRichTextFont:", "setEditorSize:", "setEditorColor:" ); Outlets = ( editorFSCView, plainTextFontButton, plainTextFontField, richTextFontButton, richTextFontField, editorLinesField, editorColumnsField, foregroundColorWell, backgroundColorWell, selectionColorWell ); Super = NSObject; }; PCEditorFSCPrefsFontButton = { Actions = ( ); Outlets = ( ); Super = NSButton; }; PCEditorFSCPrefsView = { Actions = ( ); Outlets = ( ); Super = NSBox; }; }ProjectCenter-0.6.1/Modules/Preferences/EditorFSC/Resources/EditorFSCPrefs.gorm/objects.gorm000644 001751 000024 00000021626 11157043720 032426 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000020:000000f4:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C& % C! D001 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C|  C C|&0 &0 % A A  C B  C B&0 &0 % @ @ C B  C B&0 &01 NSTextField1 NSControl% B\ Bl A  Bl A&0 &%01NSTextFieldCell1 NSActionCell1NSCell0&%Lines:01NSFont% A@&&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B B\ B A  B A&0 &%00&0%&&&&&&&& &&&&&&%00 &%System0!&%textBackgroundColor0" 0#& % textColor0$% A Bl A  Bl A&0% &%0&0'&%Columns:&&&&&&&& &&&&&&%0(0)&%System0*&%textBackgroundColor0+)0,& % textColor0-% B A B A  B A&0. &%0/00&&&&&&&&& &&&&&&%0102&%System03&%textBackgroundColor04205& % textColor0607&%Tear-Off Window Size7&&&&&&&&&&&&&& @ @%%08% C% A  C B  C B&09 &0: % @ @ C B  C B&0; &0<% B B A  B A&0= &%0>0?& % Foreground?&&&&&&&& &&&&&&%0@0A&%System0B&%textBackgroundColor0CA0D& % textColor0E1 NSColorWell% B B BT A  BT A&0F &%0G0H&&&&&&&&&&&&&&&0I0J&%NSCalibratedWhiteColorSpace ?0K% B B A  B A&0L &%0M0N& % BackgroundN&&&&&&&& &&&&&&%0O0P&%System0Q&%textBackgroundColor0RP0S& % textColor0T% B B BT A  BT A&0U &%0V0W&&&&&&&&&&&&&&&0XJ ? ?0Y% ? B A  B A&0Z &%0[0\& % Selection\&&&&&&&& &&&&&&%0]0^&%System0_&%textBackgroundColor0`^0a& % textColor0b% B ? BT A  BT A&0c &%0d0e&&&&&&&&&&&&&&&0fJ ?* ?0g0h& % Text Colorsh&&&&&&&&&&&&&& @ @%%0i% A C  C B8  C B8&0j &0k % @ @ C A  C A&0l &0m%  Cv A  Cv A&0n &%0o0p&p&&&&&&&& &&&&&&%0q0r&%System0s&%textBackgroundColor0tr0u& % textColor0v1GSControlTemplate0w&%PCEditorFSCPrefsFontButton1NSButton% C{  B4 A  B4 A&0x &%0y1 NSButtonCell0z&%Set...z&&&&&&&&&&&&&&%0{&0|&&&& &&0}0~&%Rich Text Font~&&&&&&&&&&&&&& @ @%%0% A C@ C B8  C B8&0 &0 % @ @ C A  C A&0 &0%  Cv A  Cv A&0 &%00&&&&&&&&& &&&&&&%00&%System0&%textBackgroundColor00& % textColor00&%PCEditorFSCPrefsFontButton% C{  B4 A  B4 A&0 &%00&%Set...&&&&&&&&&&&&&&%0&0&&&& &&00&%Plain Text Font&&&&&&&&&&&&&& @ @%%00&%Box&&&&&&&&&&&&&& %%00&%System0&%windowBackgroundColor0&%Window0& % Interface @@ B F@ F@%&   D D0 &0 &01NSMutableDictionary1 NSDictionary&0& % TextField(0)0& % TextField(7)m0&%NSOwner0&%PCEditorFSCPrefs0&%Box(3)i0& % ColorWell(1)T0&%View(1) 0& % TextField(2)$0&%View(3) 0& % TextField(4)<0& % Button(1)0&%Box(0)0&%View(5)0& % TextField(6)Y0& % ColorWell(0)E0&%Box(2) 0&%View(0)0& % TextField(1)0& % TextField(8)0& % ColorWell(2)b0&%Box(4)0&%View(2):0& % TextField(3)-0& % Button(0)v0&%View(4)k0& % Editor_FSC0& % TextField(5)K0&%Box(1)80 &**01NSNibConnector000000±0ñ0ı0ű0Ʊ0DZ0ȱ0ɱ0ʱ0˱0̱0ͱ0α0ϱ0б0ѱ0ұ0ӱ0Ա01NSNibOutletConnector01NSMutableString&%plainTextFontField0ױ0ر&%plainTextFontButton0ٱ0ڱ&%richTextFontField0۱0ܱ&%richTextFontButton0ݱ0ޱ&%editorLinesField0߱0&%editorColumnsField00&%foregroundColorWell00&%backgroundColorWell00&%selectionColorWell00& % editorFSCView01 NSNibControlConnector0&%setEditorPlainTextFont:0 0&%setEditorRichTextFont:0 0&%setEditorSize:0 0 0&%setEditorColor:0 0 0&wProjectCenter-0.6.1/Modules/Preferences/Build/Resources/000755 001751 000024 00000000000 11766110766 023643 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Build/GNUmakefile000644 001751 000024 00000001045 11151111063 023716 0ustar00multixstaff000000 000000 # # GNUmakefile - Build preferences # PACKAGE_NAME = Build include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = Build BUNDLE_EXTENSION = .preferences Build_PRINCIPAL_CLASS = PCBuildPrefs # # Additional libraries # Build_LIBRARIES_DEPEND_UPON += # # Resource files # Build_RESOURCE_FILES= \ Resources/BuildPrefs.gorm \ Resources/Info.table # # Header files # Build_HEADERS= \ PCBuildPrefs.h # # Class files # Build_OBJC_FILES= \ PCBuildPrefs.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Preferences/Build/PCBuildPrefs.h000644 001751 000024 00000003631 11152337411 024312 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2009 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import #import #ifndef PCDefaultBuildTool #define PCDefaultBuildTool @"/usr/bin/make" #endif #define SuccessSound @"SuccessSound" #define FailureSound @"FailureSound" #define RootBuildDirectory @"RootBuildDirectory" #define BuildTool @"BuildTool" #define DeleteCacheWhenQuitting @"DeleteBuildCacheWhenQuitting" #define PromptOnClean @"PromtOnClean" @interface PCBuildPrefs : NSObject { id prefs; IBOutlet NSBox *buildingView; IBOutlet NSTextField *successField; IBOutlet NSButton *setSuccessButton; IBOutlet NSTextField *failureField; IBOutlet NSButton *setFailureButton; IBOutlet NSTextField *rootBuildDirField; IBOutlet NSButton *setRootBuildDirButton; IBOutlet NSTextField *buildToolField; IBOutlet NSButton *setBuildToolButton; IBOutlet NSButton *deleteCache; IBOutlet NSButton *promptOnClean; } @end ProjectCenter-0.6.1/Modules/Preferences/Build/PCBuildPrefs.m000644 001751 000024 00000013755 11157302573 024335 0ustar00multixstaff000000 000000 // // GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html // // Copyright (C) 2001-2009 Free Software Foundation // // Authors: Sergii Stoian // // Description: // // 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. #import #import "PCBuildPrefs.h" @implementation PCBuildPrefs // ---------------------------------------------------------------------------- // --- Init and free // ---------------------------------------------------------------------------- - (id)initWithPrefController:(id )aPrefs { self = [super init]; if ([NSBundle loadNibNamed:@"BuildPrefs" owner:self] == NO) { NSLog(@"PCBuildPrefs: error loading NIB file!"); } prefs = aPrefs; RETAIN(buildingView); return self; } - (void)awakeFromNib { [setSuccessButton setRefusesFirstResponder:YES]; [setFailureButton setRefusesFirstResponder:YES]; [setRootBuildDirButton setRefusesFirstResponder:YES]; [setBuildToolButton setRefusesFirstResponder:YES]; [deleteCache setRefusesFirstResponder:YES]; [promptOnClean setRefusesFirstResponder:YES]; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCBuildPrefs: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(buildingView); [super dealloc]; } // Protocol - (void)readPreferences { NSString *val; BOOL bVal; int state; val = [prefs stringForKey:SuccessSound defaultValue:@""]; [successField setStringValue:val]; val = [prefs stringForKey:FailureSound defaultValue:@""]; [failureField setStringValue:val]; val = [prefs stringForKey:RootBuildDirectory defaultValue:@""]; [rootBuildDirField setStringValue:val]; val = [prefs stringForKey:BuildTool defaultValue:PCDefaultBuildTool]; [buildToolField setStringValue:val]; bVal = [prefs boolForKey:DeleteCacheWhenQuitting defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [deleteCache setState:state]; bVal = [prefs boolForKey:PromptOnClean defaultValue:YES]; state = bVal ? NSOnState : NSOffState; [promptOnClean setState:state]; } - (NSView *)view { return buildingView; } // Actions - (void)setSuccessSound:(id)sender { NSArray *types = [NSArray arrayWithObjects:@"snd",@"au",@"wav",nil]; NSArray *files; NSString *path; if ((sender == successField)) { path = [successField stringValue]; } else { files = [[PCFileManager defaultManager] filesOfTypes:types operation:PCOpenFileOperation multiple:NO title:@"Choose Success Sound" accView:nil]; path = [files objectAtIndex:0]; } /* { NSSound *sound; sound = [[NSSound alloc] initWithContentsOfFile:path byReference:YES]; [sound play]; RELEASE(sound); }*/ if (path) { [successField setStringValue:path]; [prefs setString:path forKey:SuccessSound notify:YES]; } [[buildingView window] makeFirstResponder:successField]; } - (void)setFailureSound:(id)sender { NSArray *types = [NSArray arrayWithObjects:@"snd",@"au",@"wav",nil]; NSArray *files; NSString *path; if ((sender == failureField)) { path = [failureField stringValue]; } else { files = [[PCFileManager defaultManager] filesOfTypes:types operation:PCOpenFileOperation multiple:NO title:@"Choose Failure Sound" accView:nil]; path = [files objectAtIndex:0]; } if (path) { [failureField setStringValue:path]; [prefs setString:path forKey:FailureSound notify:YES]; } [[buildingView window] makeFirstResponder:failureField]; } - (void)setRootBuildDir:(id)sender { NSArray *files; NSString *path; if ((sender == rootBuildDirField)) { path = [rootBuildDirField stringValue]; } else { files = [[PCFileManager defaultManager] filesOfTypes:nil operation:PCOpenDirectoryOperation multiple:NO title:@"Choose Build Directory" accView:nil]; path = [files objectAtIndex:0]; } if (path) { [rootBuildDirField setStringValue:path]; [prefs setString:path forKey:RootBuildDirectory notify:YES]; } [[buildingView window] makeFirstResponder:rootBuildDirField]; } - (void)setBuildTool:(id)sender { NSArray *files; NSString *path; if ((sender == buildToolField)) { path = [buildToolField stringValue]; } else { files = [[PCFileManager defaultManager] filesOfTypes:nil operation:PCOpenFileOperation multiple:NO title:@"Choose Build Tool" accView:nil]; path = [files objectAtIndex:0]; } if (path) { [buildToolField setStringValue:path]; [prefs setString:path forKey:BuildTool notify:YES]; } [[buildingView window] makeFirstResponder:buildToolField]; } - (void)setDeleteCache:(id)sender { BOOL state; if (deleteCache == nil) {// HACK!!! need to be fixed in GNUstep deleteCache = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:DeleteCacheWhenQuitting notify:YES]; } - (void)setPromptOnClean:(id)sender { BOOL state; if (promptOnClean == nil) {// HACK!!! need to be fixed in GNUstep promptOnClean = sender; return; } state = ([sender state] == NSOffState) ? NO : YES; [prefs setBool:state forKey:PromptOnClean notify:YES]; } @end ProjectCenter-0.6.1/Modules/Preferences/Build/Resources/Info.table000644 001751 000024 00000000207 11151111063 025521 0ustar00multixstaff000000 000000 { Type = "Preferences"; Name = "Build"; Description = "Preferences for Project Build."; PrincipalClassName = "PCBuildPrefs"; } ProjectCenter-0.6.1/Modules/Preferences/Build/Resources/BuildPrefs.gorm/000755 001751 000024 00000000000 11766110766 026645 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Preferences/Build/Resources/BuildPrefs.gorm/data.info000644 001751 000024 00000000270 11151111063 030405 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Modules/Preferences/Build/Resources/BuildPrefs.gorm/data.classes000644 001751 000024 00000001351 11152340355 031121 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "setDeleteCache:", "setBuildTool:", "setFailureSound:", "setPromptOnClean:", "setRootBuildDir:", "setSuccessSound:" ); Super = NSObject; }; PCBuildPrefs = { Actions = ( "setPromptOnClean:", "setFailureSound:", "setRootBuildDir:", "setSuccessSound:", "setBuildTool:", "setDeleteCache:" ); Outlets = ( buildingView, failureField, promptOnClean, rootBuildDirField, setRootBuildDirButton, setFailureButton, setSuccessButton, successField, buildToolField, setBuildToolButton, deleteCache ); Super = NSObject; }; }ProjectCenter-0.6.1/Modules/Preferences/Build/Resources/BuildPrefs.gorm/objects.gorm000644 001751 000024 00000023203 11152340355 031150 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:0000001f:00000107:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C& % C D@01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C|  C C|&0 &0 % A C) C B  C B&0 &0 % @ @ C B@  C B@&0 &01 NSTextField1 NSControl% A BL A  BL A&0 &%01NSTextFieldCell1 NSActionCell1NSCell0&%Success:01NSFont% A@&&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% ? BL A  BL A&0 &%00&%Failure:&&&&&&&& &&&&&&%00&%System0 &%textBackgroundColor0!0"& % textColor0#% B` A CC A  CC A&0$ &%0%0&&0'%&&&&&&&& &&&&&&%0(0)&%System0*&%textBackgroundColor0+)0,& % textColor0-1NSButton% C A B( A  B( A&0. &%0/1 NSButtonCell00&%Set...'&&&&&&&&&&&&&&%01&02&&&& &&03% C ? B( A  B( A&04 &%0506&%Set...'&&&&&&&&&&&&&&%07&08&&&& &&09% B` ? CC A  CC A&0: &%0;0<&'&&&&&&&& &&&&&&%0=0>&%System0?&%textBackgroundColor0@>0A& % textColor0B0C&%Sounds'&&&&&&&&&&&&&& @ @%%0D% A A  C A  C A&0E &%0F0G&%Prompt on clean0H1NSImage0I1NSMutableString&%common_SwitchOff'&&&&&&&&&&&&&&%0J&0K&0L0M&%common_SwitchOn&&& &&0N% A B C B@  C B@&0O &0P % @ @ C A  C A&0Q &0R% @ C{ A  C{ A&0S &%0T0U&%/tmp/ProjectCenterBuild'&&&&&&&& &&&&&&%0V0W&%System0X&%textBackgroundColor0YW0Z& % textColor0[% C @ B( A  B( A&0\ &%0]0^&%Set...'&&&&&&&&&&&&&&%0_&0`&&&& &&0a0b&%Root Build Directory'b&&&&&&&&&&&&&& @ @%%0c% A B C B8  C B8&0d &0e % @ @ C A  C A&0f &0g%  C{ A  C{ A&0h &%0i0j&%/usr/local/bin/gmake'j&&&&&&&& &&&&&&%0k0l&%System0m&%textBackgroundColor0nl0o& % textColor0p% C  B( A  B( A&0q &%0r0s&%Set...'&&&&&&&&&&&&&&%0t&0u&&&& &&0v0w&%External Build Tool'w&&&&&&&&&&&&&& @ @%%0x% A B C A  C A&0y &%0z0{&,%,Remove files in root build directory on quitH'{&&&&&&&&&&&&&&%0|&0}&L&&& &&0~0&%Box'&&&&&&&&&&&&&& %%00&%System0&%windowBackgroundColor0&%Window0&%Build @@ B F@ F@%&   D D0 &0 &01NSMutableDictionary1 NSDictionary&0&%View(2) 0&%Box(7)c0&%Box(6)N0&%View(1) 0&%View(0)0&%Box(5)0% @@ B C B8  C B8&0 &0 % @ @ C A  C A&0 &00&%Title'&&&&&&&&&&&&&& @ @%%0& % Button(5)x0&%Box(4)0% B B C B8  C B8&0 &0 % @ @ C} A  C} A&0 &0'&&&&&&&&&&&&&& @ @%%0& % Button(4)p0& % Build Section0&%Box(3)0% B B C B8  C B8&0 &0 % @ @ C} A  C} A&0 &0'&&&&&&&&&&&&&& @ @%%0& % Button(3)[0&%Box(2)0% A B C Bt  C Bt&0 &0 % @ @ C B  C B&0 &00&%Root Build Directory'&&&&&&&&&&&&&& @ @%%0& % Button(2)D0&%Box(1) 0& % Button(1)30&%Box(0)0& % TextField(7)g0& % Button(0)-0& % TextField(4)R0& % TextField(3)90&%View(8)e0& % TextField(2)#0&%View(7)P0& % TextField(1)0&%View(6)0&%NSOwner0& % PCBuildPrefs0& % TextField(0)0&%View(5)0&%View(4)0&%View(3)0 &3301NSNibConnector000±0ñ0ı0ű0Ʊ0DZ0ȱ0ɱ0ʱ0˱0̱0ͱ0α0ϱ01NSNibOutletConnector0ѱ& % buildingView0ұ0ӱ& % failureField0Ա0ձ& % promptOnClean0ֱ0ױ&%rootBuildDirField0ر0ٱ& % successField01NSNibControlConnector0۱&%setSuccessSound:0ܱ0ݱ&%setFailureSound:0ޱ0߱&%setRootBuildDir:00&%setPromptOnClean:0000&%buildToolField00&%setFailureButton00&%setSuccessButton00&%setBuildToolButton00&%setRootBuildDirButton00&%setSuccessSound:00&%setFailureSound:00&%setRootBuildDir:00& % setBuildTool:0000000000PP& % setBuildTool:PPP&%setDeleteCache:PP& % deleteCacheP&ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/000755 001751 000024 00000000000 11766110766 022557 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/Resources/000755 001751 000024 00000000000 11766110766 024531 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/ObjCMethodHandler.h000644 001751 000024 00000004305 11126423157 026175 0ustar00multixstaff000000 000000 /* ** ObjCMethodHandler.h ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ObjCMethodHandler_H_ #define _ObjCMethodHandler_H_ #import "CodeHandler.h" #import "ObjCCommentHandler.h" /** * MethodStart MethodSymbol MethodReturnValue MethodName MethodEnd * +/- ( id ) simpleMethod:value ; * * MethodStart is after each ';' or new line * MethodSymbol is +/- for objective-C * MethodReturnValue is surround by '(' and ')', and can be ignore * MethodName contain method name and messages * MethodNone is not method; */ typedef enum _CheckStep { MethodStart, MethodBody, MethodSymbol, MethodReturnValue, MethodName, MethodParameterStart, MethodParameter, MethodNone } CheckStep; @class NSMutableString; @class NSMutableArray; @interface ObjCMethodHandler : ObjCCommentHandler { unsigned int position; BOOL inSpace; NSMutableString *method; NSMutableArray *methods; unichar _preSymbol; unsigned nameBeginPosition; unsigned nameEndPosition; unsigned bodyBeginPosition; int bodySymbolCount; CheckStep step; CheckStep prev_step; } // NSArray of NSDictionaries // MethodName = NSString; // MethodNameRange = NSString <- NSStringFromRange(NSRange) // MethodBodyRange = NSString <- NSStringFromRange(NSRange) - (NSArray *)methods; - (void)addMethodToArray; @end #endif /* _ObjCMethodHandler_H_ */ ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/ObjCCommentHandler.h000644 001751 000024 00000002363 11126423157 026361 0ustar00multixstaff000000 000000 /* ** ObjCCommentHandler.h ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ObjCCommentHandler_H_ #define _ObjCCommentHandler_H_ #define EQUAL(str) ([element isEqualToString: str]) #import #import @class NSString; /* Require subclass to assign _preChar to work */ @interface ObjCCommentHandler: NSObject { CommentType _commentType; BOOL _stringBegin; unichar _preChar; unichar _stringSymbol; } @end #endif /* _ObjCCommentHandler_H_ */ ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/PCParser.h000644 001751 000024 00000002327 11126423157 024402 0ustar00multixstaff000000 000000 /* ** CodeParser.h ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _CodeParser_H_ #define _CodeParser_H_ #import #import #import #import "CodeHandler.h" #import "ObjCMethodHandler.h" @interface PCParser : NSObject { id _handler; NSString *_string; unsigned int _length; unichar *_uchar; } - (void)parse; @end #endif /* _CodeParser_H_ */ ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/GNUmakefile000644 001751 000024 00000001346 11122717015 024617 0ustar00multixstaff000000 000000 # # GNUmakefile - ProjectCenter.parser # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # BUNDLE_NAME = ProjectCenter BUNDLE_EXTENSION = .parser ProjectCenter_PRINCIPAL_CLASS = PCParser # # Additional libraries # ProjectCenter_LIBRARIES_DEPEND_UPON += # # Resource files # ProjectCenter_RESOURCE_FILES= \ Resources/Info.table # # Header files # ProjectCenter_HEADERS= \ PCParser.h \ CodeHandler.h \ ObjCCommentHandler.h \ ObjCClassHandler.h \ ObjCMethodHandler.h # # Class files # ProjectCenter_OBJC_FILES= \ PCParser.m \ ObjCCommentHandler.m \ ObjCClassHandler.m \ ObjCMethodHandler.m include ../../GNUmakefile.bundles include $(GNUSTEP_MAKEFILES)/bundle.make ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/ObjCClassHandler.h000644 001751 000024 00000004324 11126423157 026023 0ustar00multixstaff000000 000000 /* ** ObjCClassHandler.h ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ObjCClassHandler_H_ #define _ObjCClassHandler_H_ #import "CodeHandler.h" #import "ObjCCommentHandler.h" /** * ClassStart ClassSymbol ClassName ClassSuper ClassProto | ClassCategory * @... CName : CSuper < Protocol > | ( Category ) * * ClassStart is after each ';' or new line * ClassSymbol is '@' with 'interface'/'implementation' after that * ClassName started after ClassSymbol and next first ' ' * ClassCategory is surround by '(' and ')'. Started after ClassName and ' ' * ClassNone is not method; */ typedef enum _CS { ClassStart, ClassSymbol, ClassName, ClassSuper, ClassProto, ClassCategory, ClassBody, ClassNone, } CS; @class NSMutableString; @class NSMutableArray; @interface ObjCClassHandler : ObjCCommentHandler { unsigned int position; BOOL inSpace; NSMutableString *keyword; NSMutableString *class; NSMutableArray *classes; unichar _preSymbol; unsigned nameBeginPosition; unsigned nameEndPosition; unsigned bodyBeginPosition; int bodySymbolCount; CS step; CS prev_step; } // NSArray of NSDictionaries // ClassName = NSString; // ClassNameRange = NSString <- NSStringFromRange(NSRange) // ClassBodyRange = NSString <- NSStringFromRange(NSRange) - (NSArray *)classes; - (void)addClassToArray; @end #endif /* _ObjCClassHandler_H_ */ ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/ObjCMethodHandler.m000644 001751 000024 00000015045 11126423157 026205 0ustar00multixstaff000000 000000 /* ** ObjCMethodHandler.m ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import #import "ObjCMethodHandler.h" @implementation ObjCMethodHandler - (id)init { self = [super init]; position = 0; nameBeginPosition = 0; nameEndPosition = 0; bodyBeginPosition = 0; bodySymbolCount = -1; inSpace = NO; method = [[NSMutableString alloc] init]; methods = [[NSMutableArray alloc] init]; prev_step = step = MethodNone; _preSymbol = 0; return self; } - (void)dealloc { NSLog(@"MethodHandler: dealloc"); RELEASE(method); RELEASE(methods); [super dealloc]; } - (NSArray *)methods { return methods; } - (void)addMethodToArray { if ([method length]) { NSDictionary *dict; NSString *dMethod; NSString *dNRange; NSString *dBRange; dMethod = [method copy]; dNRange = NSStringFromRange(NSMakeRange(nameBeginPosition, nameEndPosition-nameBeginPosition)); dBRange = NSStringFromRange(NSMakeRange(bodyBeginPosition, position-bodyBeginPosition)); dict = [NSDictionary dictionaryWithObjectsAndKeys: dMethod, @"MethodName", dNRange, @"MethodNameRange", dBRange, @"MethodBodyRange", nil]; [methods addObject:dict]; RELEASE(dMethod); } [method setString:@""]; } #define NotMethod {step = MethodNone; [method setString: @""];} - (void)string:(NSString *)element { unsigned int len = [element length]; [super string:element]; /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin/* != NoString*/) { } else { inSpace = NO; if (step == MethodStart) { NotMethod; } else if (step == MethodName) { [method appendString:element]; } else if (step == MethodParameterStart) { step = MethodParameter; } } position += len; _preChar = 0; } - (void)number:(NSString *)element { [super number:element]; /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin) { } else { inSpace = NO; if (step == MethodStart) { NotMethod; } else if (step == MethodSymbol) { NotMethod; } else if (step == MethodReturnValue) { NotMethod; } else if ((step == MethodName)) { [method appendString:element]; } } position += [element length]; _preChar = 0; } - (void)spaceAndNewLine:(unichar)element { BOOL newline = NO; [super spaceAndNewLine: element]; if ((element == 0x0A) || (element == 0x0D)) { newline = YES; } /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin) { } else { if (step != MethodNone) { /* if ((!newline) && (!inSpace)) { [method appendString:[NSString stringWithFormat:@"%c",element]]; }*/ if (element == ' ' || newline) { if (step == MethodParameter) { step = MethodName; prev_step = MethodNone; } inSpace = YES; } } // Method name should start from beginning of line // (some spaces may prepend "+" or "-" symbol) if (newline && (step == MethodNone)) { step = MethodStart; } } position++; _preChar = element; } - (void)symbol:(unichar)element { [super symbol:element]; /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin) { } else { inSpace = NO; _preSymbol = element; if (step == MethodStart) { if ((element == '+') || (element == '-')) { step = MethodName; [method appendString:[NSString stringWithFormat: @"%c", element]]; nameBeginPosition = position; } } else if ((step == MethodName) || (step == MethodParameterStart)) { if (element == '(') { if (step == MethodParameterStart) { prev_step = step; } step = MethodReturnValue; } else if (element == ':') { step = MethodName; [method appendString:@":"]; } } else if (step == MethodReturnValue && element == ')') { if (prev_step == MethodParameterStart) { step = prev_step; } else { step = MethodName; } // [method appendString:[NSString stringWithFormat: @"%c", element]]; } else if ((step == MethodName) && (element != '{') && (element != ';')) { [method appendString:[NSString stringWithFormat: @"%c", element]]; } if (element == '{') { if ((step == MethodName) && (bodySymbolCount == -1)) { // Method body starts step = MethodBody; nameEndPosition = position - 1; bodyBeginPosition = position; bodySymbolCount += 2; // -1 + 2 = 1 // NSLog(@"methodBodyStart: %i", bodySymbolCount); } else if (step == MethodBody) { bodySymbolCount++; // NSLog(@"symbolCount++: %i", bodySymbolCount); } } if ((element == '}') && ((step == MethodBody) || (step == MethodBody))) { bodySymbolCount--; // NSLog(@"symbolCount--: %i", bodySymbolCount); } // Method definition (header files) if ((step == MethodName) && (element == ';')) { nameEndPosition = position; bodyBeginPosition = position - 1; [self addMethodToArray]; step = MethodNone; } // Method implemenation (class files) if ((step == MethodBody) && (bodySymbolCount == 0)) { [self addMethodToArray]; step = MethodNone; bodySymbolCount = -1; } } position++; _preChar = element; } - (void)invisible:(unichar)element { [super invisible: element]; position ++; _preChar = element; } @end ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/ObjCCommentHandler.m000644 001751 000024 00000004660 11126423157 026370 0ustar00multixstaff000000 000000 /* ** ObjCCommentHandler.m ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import #import "ObjCCommentHandler.h" @implementation ObjCCommentHandler - (void)string:(NSString *)element { } - (void)number:(NSString *)element { } - (void)spaceAndNewLine:(unichar)element { if (_commentType == SingleLineComment) { if ((element == 0x0A) || (element == 0x0D)) { _commentType = NoComment; } } } - (void)symbol:(unichar)element { if (_preChar == '/') { if (element == '*') _commentType = MultipleLineComment; else if (element == '/') _commentType = SingleLineComment; } else if ((element == '/') && (_preChar == '*')) { _commentType = NoComment; } if (_commentType == NoComment) { if ((element == '\"') && (_preChar != '\\')) { if ((_stringBegin) && (_stringSymbol == '\"')) { _stringBegin = NO; _stringSymbol = 0; } else if (!_stringBegin) { _stringBegin = YES; _stringSymbol = element; } } else if ((element == '\'') && (_preChar != '\\')) { if ((_stringBegin) && (_stringSymbol == '\'')) { _stringBegin = NO; _stringSymbol = 0; } else if (!_stringBegin) { _stringBegin = YES; _stringSymbol = element; } } } } - (void)invisible:(unichar)element { } - (id)init { self = [super init]; _commentType = NoComment; _stringBegin = NO; _stringSymbol = 0; return self; } @end ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/PCParser.m000644 001751 000024 00000013324 11547132353 024410 0ustar00multixstaff000000 000000 /* ** CodeParser.m ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import #import "PCParser.h" #import "ObjCClassHandler.h" #import "ObjCMethodHandler.h" typedef enum _CodeType { StringCodeType, /* 41-5A, 61-7A, 5F */ NumberCodeType, /* 30-39 */ SpaceAndNewLineCodeType, /* 20, 0a, 0d */ SymbolCodeType, /* others */ InvisibleCodeType /* before (contain) 1F, except 0a, 0d */ } CodeType; @implementation PCParser // =========================================================================== // ==== Initialisation // =========================================================================== - (id)init { self = [super init]; return self; } - (void)dealloc { NSLog(@"PCParser: dealloc"); free(_uchar); RELEASE(_string); [super dealloc]; } - (id)setString:(NSString *)text { if (_uchar != NULL) { free(_uchar); } ASSIGN(_string, text); _length = [_string length]; _uchar = malloc(sizeof(unichar)*_length); [_string getCharacters:_uchar]; return self; } - (NSArray *)classNames { _handler = [[ObjCClassHandler alloc] init]; [self parse]; AUTORELEASE(_handler); return [(ObjCClassHandler *)_handler classes]; } - (NSArray *)methodNames { _handler = [[ObjCMethodHandler alloc] init]; [self parse]; AUTORELEASE(_handler); return [(ObjCMethodHandler *)_handler methods]; } // =========================================================================== // ==== Parsing // =========================================================================== /* Private function */ CodeType codeType(unichar *ch) { if ( ((*ch > 0x40) && (*ch < 0x5B)) || ((*ch > 0x60) && (*ch < 0x7B)) || (*ch == 0x5F) ) { return StringCodeType; } else if ((*ch == 0x20) || (*ch == 0x0a) || (*ch == 0x0d)) { return SpaceAndNewLineCodeType; } else if ((*ch > 0x2F) && (*ch < 0x3A)) { return NumberCodeType; } else if (*ch < 0x20) { return InvisibleCodeType; } else if ((*ch > 0x20) && (*ch < 0x7F)) { return SymbolCodeType; } else { return StringCodeType; } } - (void)parse { unsigned int i, start, end; CodeType startType, endType; NSString *out; SEL selString = @selector(string:); SEL selNumber = @selector(number:); SEL selSpaceAndNewLine = @selector(spaceAndNewLine:); SEL selInvisible = @selector(invisible:); SEL selSymbol = @selector(symbol:); void (*impString)(id, SEL, id); void (*impNumber)(id, SEL, id); void (*impSpaceAndNewLine)(id, SEL, unichar); void (*impInvisible)(id, SEL, unichar); void (*impSymbol)(id, SEL, unichar); NSLog(@"CodeParser begin..."); impString = (void (*)(id, SEL, id)) [[_handler class] instanceMethodForSelector:selString]; impNumber = (void (*)(id, SEL, id)) [[_handler class] instanceMethodForSelector:selNumber]; impSpaceAndNewLine = (void (*)(id, SEL, unichar)) [[_handler class] instanceMethodForSelector:selSpaceAndNewLine]; impInvisible = (void (*)(id, SEL, unichar)) [[_handler class] instanceMethodForSelector:selInvisible]; impSymbol = (void (*)(id, SEL, unichar)) [[_handler class] instanceMethodForSelector:selSymbol]; start = end = 0; startType = codeType(_uchar+start); for (i = 1; i < _length+1; i++) { end = i; endType = codeType(_uchar+end); if ((startType != endType) || (end == _length)) { /* Check period in number */ if ((startType == NumberCodeType) && (_uchar[end] == 0x2E)) continue; if (startType == StringCodeType) { out = [_string substringWithRange:NSMakeRange(start, end-start)]; (*impString)(_handler, selString, out); } else if (startType == NumberCodeType) { out = [_string substringWithRange: NSMakeRange(start, end-start)]; (*impNumber)(_handler, selNumber, out); } else if (startType == SpaceAndNewLineCodeType) { unsigned int j, jlen = end-start/*[out length]*/; for (j = 0; j < jlen; j++) { (*impSpaceAndNewLine)(_handler, selSpaceAndNewLine, _uchar[start+j]); } } else if (startType == SymbolCodeType) { unsigned int j, jlen = end-start/*[out length]*/; for (j = 0; j < jlen; j++) { (*impSymbol)(_handler, selSymbol, _uchar[start+j]); } } else if (startType == InvisibleCodeType) { unsigned int j, jlen = end-start/*[out length]*/; for (j = 0; j < jlen; j++) { (*impInvisible)(_handler, selInvisible, _uchar[start+j]); } } start = i; startType = codeType(_uchar+start); } } NSLog(@"CodeParser end..."); } @end ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/ObjCClassHandler.m000644 001751 000024 00000014544 10756405720 026041 0ustar00multixstaff000000 000000 /* ** ObjCClassHandler.m ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #import #import "ObjCClassHandler.h" @implementation ObjCClassHandler - (id)init { self = [super init]; position = 0; nameBeginPosition = 0; nameEndPosition = 0; bodyBeginPosition = 0; bodySymbolCount = -1; inSpace = NO; keyword = [[NSMutableString alloc] init]; class = [[NSMutableString alloc] init]; classes = [[NSMutableArray alloc] init]; prev_step = ClassNone; step = ClassNone; _preSymbol = 0; return self; } - (void)dealloc { NSLog(@"ClassHandler: dealloc"); RELEASE(keyword); RELEASE(class); RELEASE(classes); [super dealloc]; } - (NSArray *)classes { return classes; } - (void)addClassToArray { // NSLog(@"OCCH: class: %@", class); if ([class length]) { NSDictionary *dict; NSString *dClass; NSString *dNRange; NSString *dBRange; dClass = [class copy]; dNRange = NSStringFromRange(NSMakeRange(nameBeginPosition, nameEndPosition-nameBeginPosition)); dBRange = NSStringFromRange(NSMakeRange(bodyBeginPosition, position-bodyBeginPosition)); dict = [NSDictionary dictionaryWithObjectsAndKeys: dClass, @"ClassName", dNRange, @"ClassNameRange", dBRange, @"ClassBodyRange", nil]; [classes addObject:dict]; RELEASE(dClass); } [class setString:@""]; } #define NotClass {step = ClassNone; [class setString: @""];} - (void)string:(NSString *)element { unsigned int len = [element length]; [super string:element]; /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin) { } else if (step != ClassNone) { inSpace = NO; if (step == ClassStart) { NotClass; } else if (step == ClassSymbol) { [keyword appendString:element]; } else if ((step == ClassName) || (step == ClassCategory)) { [class appendString:element]; if (prev_step == ClassNone) { prev_step = ClassName; } } } position += len; _preChar = 0; } - (void)number:(NSString *)element { [super number:element]; /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin) { } else { inSpace = NO; if (step == ClassStart) { NotClass; } /* else if (step == ClassSymbol) { NotClass; } else if (step == ClassCategory) { NotClass; }*/ else if (step == ClassName) { [class appendString:element]; } } position += [element length]; _preChar = 0; } - (void)spaceAndNewLine:(unichar)element { BOOL newline = NO; [super spaceAndNewLine:element]; if ((element == 0x0A) || (element == 0x0D)) { newline = YES; } /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin) { } else { if (step != ClassNone) { /* if ((!newline) && (!inSpace)) { [class appendString:[NSString stringWithFormat:@"%c",element]]; } else*/ if ((newline || element == ' ') && (step == ClassSymbol)) { // NSLog(@"keyword: %@", keyword); if ([keyword isEqualToString:@"end"]) { // NSLog(@"@end reached"); [self addClassToArray]; step = ClassNone; } else if ([keyword isEqualToString:@"interface"] || [keyword isEqualToString:@"implementation"]) { [class appendString:@"@"]; step = ClassName; prev_step = ClassNone; nameBeginPosition = position+1; } [keyword setString:@""]; if (prev_step == ClassBody) { step = ClassBody; prev_step = ClassNone; } inSpace = YES; } else if (newline && (step == ClassName)) { // NSLog(@"Class body start: \"%@\"", class); step = ClassBody; nameEndPosition = position; bodyBeginPosition = position+1; } else if ((element == ' ') && (step == ClassName) && (prev_step != ClassName)) { nameBeginPosition++; } } // Class name should start from beginning of line // (some spaces may prepend "@" symbol) if (newline && (step == ClassNone)) { step = ClassStart; } } position++; _preChar = element; } - (void)symbol:(unichar)element { [super symbol:element]; /* Comments */ if (_commentType != NoComment) { } else if (_stringBegin) { } else { inSpace = NO; _preSymbol = element; if ((step == ClassStart) || (step == ClassBody)) { if (element == '@') { prev_step = step; step = ClassSymbol; } } else if (step == ClassName) { if (element == '(') { step = ClassCategory; [class appendString:[NSString stringWithFormat:@"%c",element]]; } else if (element == '<') { step = ClassProto; } else if (element == ':') { [class appendString:[NSString stringWithFormat:@"%c",element]]; } } else if (step == ClassCategory) { if (element == ')') { step = ClassName; } [class appendString:[NSString stringWithFormat:@"%c",element]]; } else if (step == ClassProto) { if (element == '>') { step = ClassName; } } } position++; _preChar = element; } - (void)invisible:(unichar)element { [super invisible:element]; position++; _preChar = element; } @end ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/CodeHandler.h000644 001751 000024 00000002467 11126423157 025100 0ustar00multixstaff000000 000000 /* ** CodeHandler.h ** ** Copyright (c) 2003 ** ** Author: Yen-Ju ** ** This program 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _CodeHandler_H_ #define _CodeHandler_H_ #import #import typedef enum _CommentType { NoComment, MultipleLineComment, SingleLineComment } CommentType; @class NSString; @protocol CodeHandler /* Called by CodeParser */ - (void)string:(NSString *)element; - (void)number:(NSString *)element; - (void)spaceAndNewLine:(unichar)element; - (void)symbol:(unichar)element; - (void)invisible:(unichar)element; @end #endif /* _CodeHandler_H_ */ ProjectCenter-0.6.1/Modules/Parsers/ProjectCenter/Resources/Info.table000644 001751 000024 00000000314 10676571547 026442 0ustar00multixstaff000000 000000 { Type = "Parser"; Name = "ProjectCenter"; Description = "Parser for C and ObjectiveC language"; PrincipalClassName = "PCParser"; FileTypes = (C,c,m,M,h,H,cc,CC); ProvidesBrowserItems = YES; }ProjectCenter-0.6.1/Images/iconSuitcase.tiff000644 001751 000024 00000012272 10670164707 021472 0ustar00multixstaff000000 000000 II*txYytTuj_RIeTv (u<023n*tO0i.(3`׆V@U 4{BBRI*ͽ/U1d=_^U{w{ flŲq+uju[P Z>{֭]?7ZzUcU * SQ1>#ۭkύyJ*HM;E]T(`2!3>M;^r[P\Dµ!A M[#?'$`RSB !!B[\.GZ8d=NH@&٧=%qez[gϦ7v_O2j - Ry@DބDAT@T!/9 I(ADQaC|xrH& {<=FLu~ FpG:=z0OS N6`MX%hPL~,(+Âp^tOr7oG$p͑oȯ#gMA3fۤP*'%#?1%)^)~P잠;K3Ʈ!,QGgBtJ3*Ѩ@19]SOz9d7Hy9DqJhqL^Xu &^ACGN78vI(Plo,BdBM6j(Fַ9dSOOs:-knE\kʭ ;*-rCnˌra<ޠGON&gzIN~~pJdWW;`<G!&& L ԞMevu_NmN{=#Y"(ÕPcwx¾'z)$O؆_b=qOBAdi4466;w._vCCG!nL3 Elrw(7kHMT}Q\aY:)|jN'kvRgҥشi;#-- o] #hDxF59[0t0ن2Lխl/^Y랐bj ɣ\Fj@<~qrC1p.7gw5S8U|bL9S(ϸlZ=^imKKTDD.=fݩUyH0< =(1ѱ8٥%XnΜ).W`+@u<5bԛiogv3߇MKgO|Rjvg# TU_xC=ʜ:$#xWG8"5yQAFFZG|K5cߏ{AOXM1 a;"0t$C t\|t85k(sr&/ݵ'3%].d>1@vΙA0)CH"rB[3dZ/^ҋ纺Uck&%K}녋z'U#-@b{Fg٠0$·jht:1%%>1ŒNN=!!K~$؇/vv;V<"GnCaubV)nQY4:T뇱A!%V4/{W>}Caadӧ1{lI;).ҐI& ޯfvCA݉ o"xuz(UPH<`@nIE8$ @c3pU (j$o,b&SXϟG$>8qχ͆|\|Y|]=NnI;Y` 9;Z62(‰}ʦxD#Иs`n]mjV s IoYcf[y$_̯kG^^Yeed[F yൻ :vv єqs|FMx9E;ayNC^Z 3G+~'zZ1z?Ҍz|ֵۿ?̙~[:8G-e3Cmmmش]dd"dJG8@ 0}bV )$)#;ѹB6v< O)Nwt.~iC5gLn|={qԩmX񗯌?)n݊gdh>/b r~ ]R0z<$\?CX9c6Ri #vna܄wƕ?1zm-\o/#'oT}`~rp/^x`)y{?pH~?ǯZ-?k1VNBӒVʡPS- FGÇ۠2eJ~e1(Asz3nZD׋d Ͻ,//1sFa?k_?BRє扤b!مnT8\.׽ ӏN|W^dNAYa6t[8L3ZA9?>yeVQQ!{ィ-"q]wI`z҂dYk8233<{b-Lk}|"59IړAf}Vڽ^LKYNwK;=DŽ ŹБRx5#-.gpPΈ>w #GoX{jjj0m4)6zyyq:JMVQ7QSQQǮj+w1u/t齋z{csBvƩsh~ut͸'KQrN91 W::fȤd~, g;qYLa̧Ś4ydɎOGaA AI6,(^KYDw"sϹnteQ- j7To"R*fOlW;h;0!22~9?gƍ ''G >|rz.*a B'ɔxzT>t3cI8_y~L?{cnחQ̽mѣs8~>b_'2 7|OW*8::)Vjdā>:OaԪYo|4x2;|>a`rz, :LyD4KL Ӊ~Zjҋ<8-R Շ$ OJQn$_0PBkS4,VG68s KO0Ox1"G q JKK/uT1ÄH7K;Vϙ\ 䤯5Azi>fM@MwvhKk:yWAA%]8/bX.ZPwa} 3 WрKwfĕ -0Ҁl9dF'Eok)k2.O׸OՆ >ߡHF|gjVnXܸ趜ՉH+כw _堛|Qg3Y3p! }nddNkR~2_bU;BoJ%b$M\OvEWj.&WR.ә?}Qi_c}mF3Դ[}^G}}/6o!4pߑy'. $kKB^odx=8(00R PZ@l(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/iconSuitcase.tiffHHProjectCenter-0.6.1/Images/helpSuitcase.tiff000644 001751 000024 00000010552 10672656220 021467 0ustar00multixstaff000000 000000 II*$xYkpTy~]IҮ+iWWw Rj2LR׎PjZ:Icꔘf4MZOC!fH&xƩMx9m !Uk7v9{t>q@GO\yߌҿ_ᇖ]bdXt >hpk4}dsnGYv;EELqgp:HTȑ#@ƬUӊb* &j6ԖhYJј0L7$НBe!_,Q9|!/K4eF,Tl#{FA5Z;Yݻ!]W~;yA{`NLM<(.`0ZdI\F|տy*v; 1lWǴӎ]5~r'lЋ^M{x_0)YVؼy3};Ə +i~~nup޸fltIJYϸr;}|1vN}Kz+_`3w1Nh,I?;vqY\UUU'{ 𧖣e'ۂ[m6o/arW/%ptpO2*NY2HV~eFC>/؈|pλ޳|e雱sE9(/L_8 휏]3QT(9\Ui]%)&\Ν|gܽWEeMͨZsNE8;ȿK"@}{>ooڤ.k7n`?Au8PG_%SoU^Li48rp J|ݛH&:cY[}(o[ܙSHiDXUx}.~1Iқ#\ɩ) +R-%v KwuK;ge}QLyσށ9Rw꠺e8v(ާlHf 0`Rp )*~sG@ϧi69ʺk{Jj]Ӄ~(u 9I4<.Nb1ɟ\yH .~NkL@p;eӥ}PxLJի?/@ԉٓO@,7@ VTJ)'g·ftN:Scjr^'Ҕc-zMRCjVeh_BEcGŸ՘gfCk5u҂I rۗxa6br:t8&FGuT9J@HpßNmLTyiY{B!Bp9#׉w%zJa_~{1 Q~0j}޲?M׈}O;qO[|VHZ6w\@5aw7O=ǼG&D["1嬦^^44-mzsz*٬Uıa3"Z- `Gު'~ϾO0 i#3)8eӔ'c^Kl o7lؠCJ9>8 wc߂…a$}c{C V/nD*0U0t5fc7nǖ/!F1N'Cg8Q^%\}XH {  ckښⴰH˔GӘO#Bůo[g;wNknżUps"W. #F@ #H@6![ ̴ܙN"H94{':~jeXslʨ&EDKŖln:V|J⇁񥝙s1QDo^39_2tehj@m h}ux1>zi!nKKZ?~~& 3}wl׳/țfLl>wgKGm+=ss5'''U豈>Z AzrwR^??f<"wvsC/ #˳3Bſgn rQ~I]?֏n}4x]o>l~G&Ƣ/b&D5ޣBԁ~kf?D&c>X?=;ML] ú]gmsnW kQxu|2lM3q?_/b? t^d6t>Ik˽.i+7e2G蚐N7i{5n㿓c~hhZ?]tWX/ftܸeܳ-EwG(+bTTJqw[^T00 P @Zb(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/helpSuitcase.tiffHHProjectCenter-0.6.1/Images/headerSuitcase.tiff000644 001751 000024 00000012224 10667702276 021774 0ustar00multixstaff000000 000000 II*vxYyt[i-[!gqVp 4I 0eXڔvR2PBʰL9eZ`@K @f,YͻeKӓ,003?|~~~o-Zt-K6Ѽ,mDhV}b6:Zs?0d`H߫HAf۶m mĿ6 ,>(昢h0@s=̣X^6 $d(o-t[JMUus%*Ahp͘psTQ`g {v>jܾ}'_̿(ᷥ+e t"(2Nфٞ*T55C[kk\GL?70˵uxLc6F؉s.SY:3{Ҵ~= !d7ѿĞja}]}ůaI?y_~@s!˫׹ F4[̨9Gv8GAw98jd1DTedFc~'8GzǯE͛\`M}T]ŏߕu8JM?[ A[!a0Z#6Lߚn4Mp8Kv=l1R fӡ_+{sBӠ׸ONxS\h?D##o߰258{ itzL̦E1`/?etG[~pwb۵ݷ J ȗL3[8q!& łر]t} ,qTlaD8=p]-iYOTZ֣/b?F_V[C>W"iC{4^>gؼy3ۇK_Sش nYShvUNyaOKp3$c6>1/|7g62RΒGRįgh̓--8sM7M{c܃O.TOŢ)r:)onx}:m{,N{:7*M⹳»\#!GqgϠ-f?%4㲇ƪ5ke~<|uőfHތNn},z߇gǶWc?t/{ɧMs=?~߻DlLR>`hhD&-$լ]ʅ I$0[S.6Je<,rL8svغw|WnԆ;@mEOu\#=}{%Lœ5N)ѳY-$"/)QpvpR߃qN+#CX_Ql6NLWݔtGZB>oCTÎ_fgMiufHـ);u&#!TmQ=gtRs}PY(K1b c<",.Y"[naJ4ꑋfZf {NcD x^Iov0c/Q3Z:H ё'}0UAcHâK)Eثc 1`~Nb|xq^ҁD,8rfyf9oU #b޽d(7]i/I3vcFŤBF'r9Xo2B`h UO@{b #p5sq06~1N,qf Gbx`0[S X9aů!rg[IFm!,]Wڊx?m7lj%37p؜yWw*`5X1>(1ո.-<ƈPDV_EMtؐpx虗:oGCߴ{|˞d(&+aRS32HxK*hh0|UuۀK;“j9G\Xu? {C%Aڰr:=aߛk|~ lf*"ްu8^ -'.9wrPts^i8anCgT[ίAGIˆyt4+F:lJb]_Fc8?@fljk3FL%h/ys|PKw˱BhQ%Cȥ>șCXĵ/΃-i^~*im' ½hn#r"aXGSLNEˮ?v̮`֭g }TZclރ :Ēg6?;6V*]#y:>^j/)Ϝbٜz4y'͎rTexUHU]~c_c.E nޫS¯W@ñ?p)5 ɃH$Sư2 _m _/&D>dEJZyvd(d6|{j&O1!dA.i~BNw n26>U#(IաaُPs B(Ι8ά}_օ8?&ot#ZC"4| 2ƦQ}x{UZ5yt1l˥T{v+~Q)ݟïWD  :Xq{q iaaajXv6܋y>Z2e=5Aqk [)ƯV?ك Waxφ?12yTA01VfG4JnnAU<;վ@ըlSh#4ڜOG=SV% So^궘KIY/Hy$i;w% >?M!7D(.F%2rJnPg4JC#{Ň400b}}{[aS>nH+qL\)6فFXÁ+Z^gb? =S33 [B;'t Vs ۹zLq]b_p9kifs] i:}sq~hReﻄnݫYLP3v~+e]t1Vt`qo~Dg7M,+௉o~Cb iWkn2l$HnIQʛ\@1nL=>_+&dU3Ӣ<<.l(̖4_xݷIE9͆B7 Ȼq'0iK+'mbΙbpb\RnwY^@aM(a̋oJv<$ӳԯOgq B.F.@_egoy2/?eI~Y;s6mOxGR~O4sS8WTa@&ҹWPYE6i0yOF#Cc/511Eߎ/6-yb }>J؏eӉ~bIg_xD(a1$F:{^dӹy.dS ߎFs[s5m(r>a؋ǣU$yEw$cS$ȧ^t#KWPPd>3OY t:w֊UUմ;:PoOiu|wF7ElAJoc.\ZQ%F9/K|6d owe >> ###UYU]x{gTKc xELLLiKKK|||<< D , (((R ' 'ProjectCenter-0.6.1/Images/iconSuitcaseH.tiff000644 001751 000024 00000011352 10673165017 021576 0ustar00multixstaff000000 000000 II*xYYlWv=UM"2R+ BȊ1g# 0@x|Nx$y˲dIJ-(z类jrlO U{畀7+t{wtx,~^?}{U+x|8>D~=:<sgZvcxxx4`~ۘWD8 _]e 1-Zy۫iyMیŲKz`۷oص;BUG6 bi@q9ATj 2SaV.^\FJ̲dK|-:a{(G2D*{ēg->k\]{ӳ;&(si#6WrÕZ 렦# Q>F|:{=#>jPA@.Wי]gDS#iPU:bӶr]?O0WbRyV~/Onܬk#ULb8g\py(9g^l#1z_[b#~5Z k ]tSDPS 8/4FB"}a}SXZ|/CTj뱻_ǂCc)k>}Zx%z|w{8s Tb-uh/˘c!v-E}q ؠj.:ГfM7E|G5쌿gOHU #kCihkkS:MVa\ARw%0x2jx G ]=ln>5h݀^ XNPEዂx7*O=x+,PN-r^ bFFFx" _@Z#0k[̋^{$}2ck9hmCKHS.FOW'ZF^E3,9x y=I9cU],szz[l[LJ&*|x>".ZrURoĻzBkgӣ( >}j o,R)m?;97_.}X#7__~]>P=Z'*j*VՊ }f6tnSH5|(?x|7:=4`7(l-c}7a?/~Pr>̼ JeS efyk}-! Z6C J"ݾ.9(Xq Z{'|O Byy,:zߌsWQ,װyÆ??;?z]v}}6| $Q|x0l%R2[z@ ߹s}!Y齜~jOT|GS H(#FQ1wGb p&_((hђL S,۴R*"xMWzi=qqKVE9e/uFŃHӓR;G(+vɗ~<'nrPWq % j ]V, $U+ҿWhRiҷ3&65r`%VdG/㮰vo)]lOaT9"(?r.-{%8=F)0UMCsNW-G9O߶mw}H?gyF"s8yNO m]X_D8CK{gg΍bǦdm80ث^;Κ̏_/x]lWY+[ZZ *Ξ\~5G,UKNFbǢ_㼬a@L_C7 /0}v`3`n fIٚmLo/3N:hEk蠪"F <нuvJ ] _˛Y;d;?7vΚWyN=wOwWԾ}`f!̊eubþH䅨c3cqƬ >yL.954mW/h0I$sMۯҟC?E;wT\pATgYa~\#m}4U+,"mq\OgUD5EU? }!{/_3&gXgN\tIC|<%gy%z۩$땇sjR>y@1M+T+*y6?T,-_84a!"ZT닏}cp5,ĉsH;y"q{WHd]6/ L~>ebuw.ܯkX<C*G<"E@C6mt?|٘n؁*0ȆtA}E-Nqеn"jlb?#=?8xCр_3SDj=9 bqv9k=EJ&D4J9T(Q|@>8F1F'?㌄e{ 9 _Q{ Ω=F9]Ӑuc{ANlG{?WAo@yu ^7㧾hF3ǑQJ9D9ñ0"y~-F"FrNMqk;8jYɨuw*9C ' cxR,&xCzVV/=zHO蚂;/{?zʮvfaQiMD*`7NX&ʄ4(J:77G}+VQ:(q ?~t%n%UuBa5]dO^5g c]=Aw 7I1ĉXrn,&r4ڊ]oz2r齃wNMVuw ճ(ZkI8MӹH."|aч/oCEBڜCa!=WtzZ5w.mŎrxDkkM}hhP!!Tm0 s[!:;a#V.Q#;Mߋ )~5jǓ#|駟70ʫu A~T~$78Y$91whR(}3)od?^jC9Dj!]ݸ]VGhw4W:J1-Q}sz.'uaC y |o;e!>Int ?5$q:J{(fѵ|)b}+ XU+,7<׊s{ >|؈X8Ɛ%Diu<ʼn7)UwF[RAP@^F 5-Ebr3/c0W{o333A2>[;G;-lQydи-[R{8uwvL4hϠ`Upq,_q3Tcj I=9uܯ۽}F^&?d\[@`;,>tgrjh߹oݍɸIj֗$:;ڠZV)d-9inߝ?r9 ׉oO(1\v-]O`f{A[4Ifsn2), F㳮h ްlGɹ%3.YEc[@fu_fx}n:|W}O6^-XOQPֵ۶WtRV~؅9EtZ3qGG:Fqa~E_J3Un3dk3=̅OζWϭ@9/8do**lj{lU7 f9#3\Q=iIM\P491ctzOoKDKBg"'٧l߯vܐqXlYE_ XJ:nO6W, >X6= u|6E%; Hl?/N_¿rȜo4ےU%cQ*=A&;qJKsr 7OBۢҠ](-}V |tR/Ŕk1B pāVVqXՠP'ʥ[gZ/!unp}9o'{Y8=(琏(v'H_@v<a]}8)GCOpAZ355?)_D|N}9V|kަ_ٙ,S6,^q(a0ԪJO6\|e=I4\yWZpki7]+׹~W)m%3|\g.!BzmGAΆ999¯AkMgx r m/ kXeC?KṫGAMֺ@UY/[ƣIyPqФu8<ٲ3دMYŜʶu)o}}}WUsy~<0\~^cCFM^?~5'E'I#Tum~ iu,υߞקK\B^y?G! V5hBݖ=Y-u\}~Gj5.=?P,n+{8χ5d ~dD.{ײַ_<:cZ`̓͟?ӭ ;X2~Z+4S\ANpE|2fcDZiC!޹?K! yo~` 26n]Cͷ+U+粒vg7 %£? a7~8합t[ z]iդwۃ5|@!BBZQI8r4gc DEѵX"ӝrD|ѹK)M)Ÿ 3|b\D!"d:;.\;va* BґB~?_'ݚɜ%Ra.K VLl (.CBU+WH'Fdysğ-;4)5  !9Rȇ1t$N^4~矦w8@&;7g?CiS+`qrtDd qO"pp?jP Y҈S3jĦ˗_} m j_؃b`ĀmyǮD\6,kc zy|iنǷ|<Ȥzdnn˘iGܿR+oKGӽzY۲EZ/#ňWzw0[I7Fr5#62 ~~_%j:hN?IuVi_zE`u~G&sҕ5҈/Asdrk֬瞃z%zhK[\r 8R>.a*!~-aJ5uLft5$CGE=Jt7̀?[l}099>i?|c!A">yibj"$O5s!tB޹BcwѰ\h7Z J(8pꍟNؿihZ?p]o%%ີbnz$%b\#*RD'KqϐҤ?hP.Mwx8|4tڡGGؿsÎ(UF3^cjB zʁ w%tbERWK;DlsC )Dl=c!FߥWS Ψ\Fn|o/D(cv::GyTJ3~beq ZS5"BfPLS@NOAJelw t%Vbęb:`iT yTuGk R TrJv'_~n>gUS&kt#fSe1UB&ѵ\5br ]qʗ2:Co&%+hmW58iı:$z:sHP/`^;~.^?=Ϥ?yi Fᐾk7+Fs2-֠8̉, 놖m9,ܺ-Q!70s4;aΧߕByU [͞?ܓ_l_\L3f@o,·:)!7؍7|Mw4IU9,uD?V|8~?oMs0\>.~iSf[W j=s9(&cYB~1(XtCnu'xx[8z+K6.F^YjFOMӗPl"2w${A?A[}A'UI83p &ߠZraOP]V *Bݔkr\3XqɷPւpl4^y[׿⣹=8ժ 'ǃeM|%+j lT#y-e_%VZmY#I5WwO㋗.}֨ͧM!:K\W .% *;^?72g_;؄% ʣsQQ+&P?F:|a?k~XoຯrY OnWݻOpg%], Y{7cU4[o&nS\"*lKM~tV(WSתJ eA+m?+kz=u;Ǫ|)_rFX Ar}TR ;M|ކ9M{c̲n/9MW= d1RT,UGHW'ENzP֨V6I3ĝ]]1# (EStS.k9&893Rs-2ɣ١2P1Mz'Q[^#I:Obkc-txdg~^j弱}Q?}\"k, .HxzQ_$:K C,z%(duu|/J y}d/roV=J[wTKsv^a(SLS}àZ̪b 72A UcgmZ^dMQXLOVKOVKOVMQWCFL./1 ????CCCQSXNRYIMSFJPEHNEHNCEL148~~~}}}|||}}}xxxBDIDGM>AF;>D;>C027????79>58=027),0#%) ?$//H//J11J22L33M44Q77R88V;;Y<<[==\>>_@@`@@`@@`>>_==^==[l1Cÿ #!$###$//H//J11K22L33O66Q77T99W;;Z==\>>_@@aAAcAAcAAc@@a>>_m2FK?bY...$//J11J11K33M44P77R88U;;Y<<[>>_@@aBBdBBeCCeBBeBBdooÿVLK?uuuBBB)...%11L22L33M44P77R88V;;Y==^@@`BBdCCfFFiGGjGGkGGjssK?K?ÿՄuuu555@@@%%%,,,'33M44P44Q77T88V;;Z==\@@`BBdEEhFFjJJnJJoKKpwwÿÿK?ՄZUuuu555JJJ%%%***(33O66Q66R77U99W<<[>>^AAcCCeFFjHHmKKrLLsxxK?ÿɬtWU5+**,*ffk""')))|||(44Q66R77T99W;;Z==^@@`CCeEEhHHnKKpMMuzzՄ' r% 3 NIVwv|$$$'''vvv)66R77T88U;;Y<<[>>_AAaCCfFFjJJoLLs{{uuu2'';QQY###$$$mmm*77T88V99W;;Z==\@@aBBdFFiHHmNNjRR\UUUuuu5+*))>,,>ieo###"""ggg*77T88V99W<<[==^AAaUUUuuu555"**@((<00Cjop""" ]]]*77T88V99W<<[==^UUUUUUUUUUUUuuu555#--D**@++A=>WXXX*77T88V99WDDbUUUUUUUUUUUUuuu555$++?--D55Q88V??YOOO)66R88UDD_{{~TTTTTTUUUUUUuuu555""+++?--G55S77V88V88VJJJ)<>_<>_==\;;Z88V66T44Q22L11K11J333JJSUU_bblijpsssmmpffooqpz|yRXc #..,*)(%%$222zzzsssooojjjhhhdddccccccccceeeiiikkkooouuu}}}222222#((!""//////////////////......---------?111111111}}}yyysssmmm___QQQJJJBBB;;;000+++&&&!!!?yyyeeeYYY((( 666A,A,A,666666,A,A,A,    ,A,AAA666666AAA,A,,     ###?^^^^^^]]]]]]\\\YYYWWWTTTojj_j_e[eFFFC>>>99444###050     ?###?zzzwwwejedidrrrrrrrrry~yGSG$$$6A66A6A,A,A,6A6666,A,AAA666666AAA,A,,A,6A6666666AAA6666666A6,A,6666A66A6666AAA,A,6666A6 (((R ' 'ProjectCenter-0.6.1/Images/Install.tiff000644 001751 000024 00000015150 10062333346 020435 0ustar00multixstaff000000 000000 II*)cm]9'| zp*X o|❰0!wG/#HHM˒ۆ?2/{u]>***1NNOhrqu[\_''*Z6ќ㤷KC9+~wn/d...5zz{qpxBAI)$[ӄRT_b9+zw9y 556Iqpsxw<5<2R&< &!!!2PTu ܱbd9+wq:~ WWXi|{^\e?6:A"V&c+c*M 444}}JEQ/$&J"_)d+b)`(a*D"--.=ysx&!'2$`8hΕ܍o??Fqp<;F UUUbkkr~SHNJ.,P$`)`(_']&]&}THund[^m_`c91b,2 >ub2&@8"geskjyxvttzpm5+1B!b+d+`(]&^([%[%{y6-3I& 8#|5!j-2 $Q}^~gzywpo~|YWg) H#^(b*_(\&[%m>0c\zzypvU?>_-!u3!6!y4 v2f* \/OuhznrqON[0*/C#P#W%]'[%Y%m@3zrSPZT3.w6%w3 {4 x3t2l-j,_'\)Eg''(\[_mms=J:?Q,%8"}5 y3x3q/k,j+h+g*O  @'ZZZ{zőpn|O;>C%A S$V$V$W$i>4xjhocEDc1$x4 }5 z4 t0q.n-k,i+h*g+e*A.87A$R%R#R#S#U#Y(_1$~[T`B#{6"|5 |5 {4 v1p.n-m-k,i+f*e)c(a(<*+*2h % zU#Q!R!Y*pjkVYj;2r2 ~6 |5 w3t1q/o-m-k,j+i+g*d)b(a(_' / fZ$R#cZtq?)'u6%{5 |5 |5 z4t1p.q0n-l,k,j+g+f*f+a(_'^']& RA<{kfwnwH//x5"7!{4v1t0s/p.p/o.m.k,j+h+f*e*c)b(_'^'\%R!zxN<h-1R!HI{3m-q/p.o.n-m-k,j,i+g+g+f+b)a(a)^&^'Z%Z%V#8 ]) \N FG}5 n-o-n-l,k,j+h+g*f)d)c)b)a(^']%[%Y$W#W$T#" ' \JCB8"m-m-k,j,i+j,f*f+d*b(`'^(^'\&Z%X$Y%T"R!Q! $ \G@Iz3k,j,j,g+h+f+c)a(`(`']&\%Z%Y%Y$W$U#X%Q"I!\C=a'g+i+h*g*e)e*d*b)^'_(]'Z%Z&W#V#V$Y$T#DM B  \@; b)d)g*e*d)b(a'_'^'\&[%Z$X#V#X$T"R"L KC.   \< 8 g,c)f+b(a(_'^']%[%[&Z%X%W#V#GKMD# 3++LKPrt=QZ  ]8 8 f+c)a(`'^&]&\&Z%Y$Z&W$W%P"HL<( *$&hkoE^ih \5 >c)a(_'_(]&[%Y$W#[&N!N!LL1   rrIej\2 ;\&^&^([%Z%X$Z%T#DP J3 s},Iho-\0 Bb)[%Z%\&T"P LQ!=+ `59cJT\. H`(^'V$EP S"D \. ,UxW. ]#K Y%L S"I9   P':QF' ] O!S"Q"- |N'  > G% c?  p|T+(( SB@X`(R/home/phr/Developer/GNUstep/ProjectCenter/ProjectCenter/ProjectCenter_install.tiffCreated with The GIMPHHProjectCenter-0.6.1/Images/genericSuitcase.tiff000644 001751 000024 00000012270 10670164707 022154 0ustar00multixstaff000000 000000 II*xYyx[Օi,[!gqVp 4I M6P~aX|>P 僖 @f,YͻeKڥ'm}zvf\7W{s9Wa…wҹxd6ATgGl[Sf;;q98FEw t8ݺukp# 1YE1E;hu1lV,$d[ŷ#-[%*`Ѻں9d K4epɄYv;ɞ:Mh V[&4^>/o3m6-y≩K5j~kJ.RVT AHoEF^b`2a51]&t~;>hok):;$GyFpKZ`D$.> "O[0)][zڣ.ګ &t޼,eP69lsu'xE<u: ג]<j3q٤7Pc#U8qNe%:k轍ٓ ;Xf{uu}LX$}>h7},zKo@ل ZsdGs?63CNG,h` phwT|p^T޼ ͕neJm*~fG8J;s7۴] J ȗ^3:¤Giloߎ.߸^fqTZla@0mh'])9k*_qq h7Ď/Oݴ=[qǢxn:lڴ {Œ%Kx7nxtV4sÉH^ÀPVfCđeoN- M*?)g#Y)WJw?QіL妛N{c܃cONLŢ(r(%o o>{qevm^*)zwL 5}uoTE[Yv.}ţQ3hGsq&cjqrp_{fHWISmOoF76uӺU<>Kzڣ;piiNc{v!#ɬig3YQ7:I o5kVrq lMR܁,Ewu%CtV19T7gb{ ˭zMr}"~:|1n0eS{JlV ynbZ쾮jע 1{"0=JAa:-EZs<bcy/6TR4Ϟ,GέjaxUM"ts M%:S4' C5NӌpO<qk j`06w;0Uwr̙;mحԼ+a;-c@`WjLGD~sC P0bo¶&Tڭxٗ6w.GS_{|Ϟx(Ʒ)!%fd,#1674"IQM<+7%bx1u];V_`'"}Z,H E=3݆x"6Oh*FşObDpF$TgƆq0t@Na׼ާnSN~vNd/u!;~櫟rۿ5?u{v]<: IT}6Fx!M{{w, E'K85˺ gG~^Dy_؛•/Fz4V 4_}4?{^%1ةo{01VNFhmWVa0Pk=vS}'h#Rٻj1R?ӇGMQ'/ޚ5b84}G `ucӈs/Z DZ{ ^Z2e=#51ëwaK)ƯV?>χ ٦S[zC/cti˧i\A >QfG4JnnAU<Ycv}ըɗh4#ښ8z\Twi5}7WEx)PuNCb|[*f6Xs CHRZ|jQ aUO^a"_3rHN(t_^?T.޲z-M}{j.l%}f UNI?sOqSEȍ$L zA҃jԙCTKr%l B1=,l`ΚחS2Cfz[GDb,#cv;>B@:/g~CYF ߞHG^~PnKͪi6(fI@I=+ikJ9 an63:G΂as lHֺbeyx霩K~v~jl77+Xvvv)f[ʼ̛ Z^B4 >\Xcy<ԣdiс9dћ?[pPEVJpϸ3g3Ohw5~:) MM(aɚxK)ߔ3uDG{9|Q__ jϮ*< }r +qx38N~$l7LeIjY_~n˒3[ֲȑjg3<{[ũ/E(Q/+M1o ՜Ud&y0'j$4H{2Z{; \lk<_f5=}և8=n7L6Q7PMEPME10,?>7QOF10,????~~''#''#B?9dbXs|zn$$! CB;HF?{ymvvq˽B?9{xmYWN}}~dzA@: {zdaXdaXdaX}][Sroc|pED<6mk_ED<8®\ZQWTK22,{432к~}yRPHUTK@?9' ,;;4][R22,{FFE;:4ki^ki]@?8@?8-,'vʵ22,{;93mk_mj_XWMA@:A@8ED7ӾĿHG?ԍ{22,a_V@?9?>7ҽӾ¯RQI44/?ԍ{22,a_V@?9?>7ѽм¾_]T;:3 ԍ{22,><6pnc?>8?>7мԿ¾rv)ԍ{22,22,pnc?>7?>7лҾJH@,*&,*&}}|>ԍ{66022,pnc?>7?>7кdbX<;6<;6}}}|k%ԍ{;9322,pnc?>7?>7ϺfcY><6><6}}}}}|yd,{ym;9322,pnc?>7gdZ&$!><6}}}}}}ykaD764/22,pnc?>7hf[?>7?>7}}}}}|rhaD722,~?>7jg\@?9@>7}}}}}|rhS>)?>7kh]@?8@?8}}}||ykhS>) ki^A@8A?8}}}}|ykaD7 ?}}}}}rhS>7>ahhS>)  00$$$$(R ' 'ProjectCenter-0.6.1/Images/classSuitcaseH.tiff000644 001751 000024 00000011364 10673165017 021756 0ustar00multixstaff000000 000000 II*xYiy~{fwvw.:$2TFITƩlm0cTQR/.W%e\(Ja'rX ,BZ9{~=ݳ(; ?u~}m^oFrgOCza6S?}IҶ[z'$R Y!p|^%Nڶ}zllxp>i#\>zӁ/>$CF3@("58'Y\ 㣣'?lؘN#1 8l! %Ib$W Y3^4{L'vzm|'ğڐN$ 0&ALH6H{%͢mz WQ*IqɱUy"u29mߜ]rV׺a*Nmd bH>Uyp$ytpl4/# oJg!N!ώ{< p\>Dž>I|(&#Gw2IAs]- ԯ#g`c:3FӤ+6uo9;b,6( F3#zt$||نQӇbJ\<xCdrx M1s^r-yw<n?Ӷ淧{9t'/;`~WݷPn>x}zT͖QLBIh(7v'n 1NNz5_C~b&"]-jүN2&GM; Z'$gO3,ftRx이ļk.1KnT|슮:k$P:XfKC9ǷJ"< 6Rc1jSX'f鑣kcp ;oLNq9u^?럮,)5s#YT= >0]X70c\#ha,aET !YD~E ĝ8"?ju+رPM^L1')>mbm?BE`̹Ko͖G28 )߅]wB1 I3Hw9xHQ%bϦm׮j&9N'2 udc/Խ߆[&;wH@H#d2ؔ@q!s۝39ŭJ= H c M}R>͛?[:-}WhI6Z'>|j"$O5uu n .Ͱ;hTZΙH%i8pO'JܰT6꒕0ݚbnz$$XJJsrS=vFJ&7NuGblwi!H#kp)h5SߍmU"]-F뻨y 5hIfʅؕ9KD]@N$|KOJƳ'aY2K&?u;QujVBf<1X"c9_~U {8넯;-Ƌ<*}=OՈ4 )&s8ˇdpȟZTvg W)(eXhC&MLqAsz2:;rj:;WcĴ[OBO?+W5j-5QEOEQdW EGǴ/:!2&c/EtH׬ J(#WQv*MWUXL=Yĩ0-;|WUUʥSOzguyqWA&}HoLs2-ڠ8tvC٤s.8u[G}cx?/_`oNZ]6ޒ:7+D,dM޴jBDޯPoߗϡH:_7-L2|f.ÿ'|7V֫cj.srW=?rH[Lb4+, s5Sq!8㐞 |K#琻RGzoyhWUT9]g[71x|nLp4gkQذb|1ǴsMRKRaat j$Sg!Y4*qm'ݷqR{8Ž'^;@x+.u]9WB\Ҳ/%Bh[2lEj /\.QO5?C̋¹/t,K\uOA룲(1 v-&bf6| Cxk{Z [[>R}x^EyZ3==+h\U߇fĜܡvo/?p4lnՄjiMބ-KD-)iy++ D zk?'鏆a201_gE_ֺw ~u1}aSV@I)Nu#-~'hg\g6wGUq;:@83>_wx+4HQSP!;8I /ZubHAYZٳ>L%\G{3NѨNַg-xz bdsTC3%Bs _bKM[=ܥa-N(pշFpttnRݟp:X>Hߜs[Yy֪mz;cߋr&+N^ /瑣+dWDQ:lQmS|)ɣ[vcY@6>g@C}W۰d ׋boy\ȣֱ*9^GloӼcfrI.o9?7ю艷B?;VBTw!  #|!+T &P7%"!ˇE 6YΒE6fE_3́2ް8_ix}߾j'dG 2堁xO>t~:n qrS'_UEj1M?k?D3TBWBG7pߎLagwʮ}+c+/eksIփjư;6g~M}uU,~`L#ʡUyM7P9MTCG2Da.= w1dO[^j8Qم&>JS:RY~@oޘLmI{-;/4#DWB/ۏ7wȑ@$ϐwܠK+f?{nhw{صkjFӵ14y_re/ܝ[|cT|#ɱp(8?aqQC5uB\FxlˋT3mGe$/ku00 R@(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/classSuitcaseH.tiffHHProjectCenter-0.6.1/Images/ProjectCenter_add.tiff000644 001751 000024 00000014702 07656023755 022427 0ustar00multixstaff000000 000000 II*???~\{ZN??.=,X \yY-/?.<,0VVVVTVVUVVVVVTVVUVVVVVTVVUVVVVVTVVUVVVVVTVVUVVVV@?@ϗ)) ϗ(G dddzzzooouuujjj~\Ζ(vW\0 ļNs]G}[y|[|ZgKyYxXxXƒuVmB ۟nM1+*)}[R<tuVwN" b3'$#""!}[xzZzYeJxWvWvWĐuV~U) S.$$#""! |Zʔ'tU~U) M*%$##" _Wȓ'~U) T4%$#"3tO}hxffRG^Ȓ'wN" )>3$&Ph[U~QxRzU$=,:*~mB M(#:-V`RzPwPwPwPwPwLryYsU~{\0 1$$N_PwPwPw@{^!&$#6ePwPwPwGj8kRPw8kR PwPwJo@|^(*{qY0 :%#"LY~PwPwPwPwPw8kR )L;PwPwOuImWJasjC =&#  AAAbbbfM- 9##"PX}PwJmPwPwPw!wv_NͨWj8t: (eC=X<޼sNF /Jec('`Fspq[`Pv.CN)-p4őH3{*L޼eH %ɨ"1۰Vb4d|hQ0؝mi{7 ۔ ɵ^fo.WGT'dI 9 ۻa wc'=߳~=xkCG~ͽpO1LQL D*tZBYz-_,{mF 2~+'wxNج& !ϗ\fy'F1 Jv۷/ëVa`nYXܘ*w~k2e(*K6mF)Z2e?9]-Slo yڢ 3իyfcԩ}7H<,=s1sN:я2g2pr* 7LߘnuR)#_=I9'BpR| Asi)FYfEk=8g/繘r"᭛ޯ]=?Шaq g7ŵۤN(}Ld|T(YAhNGQ\S~s.}3mmx/.] L.jLGW/(~-Lr28$i8T;Ul~ ZSa¤%_ꂾ6f>끟lN%Rj2¤ rkh0Yˠ6j⤆¢dLF qb$'/D5xÓ@q[Vִy QCe F~G#!Ɇ1O5/@F^Ǝ&i>zoՁb3v#nwjG{Oɤ\? hC5 *}ϼ X2gC;XP(1,HnzgW x tFC!C~ℂ0X,^_"b3S]fsb5&JD9$`{fUq7šF7,Z_aw@sZps[C*ݞA>|3_[KlNes$a.ᮭ(A0D14u R朷}XO gfN1GSMlzX,ys=[14S'lqI#jgٍ;AeƮP:(T X\%P !/\ƹQlROĒī0^:xo\+*9J·ߋ"ܶp&CbpbQp3G Y T0;]TLB?|Jm^ F-a=UdFX뱽d}KiAl|yڤ3תfQ?AyFFNjϊu}p \\kK 0.pfh<2-hjZ> ԻPrXPb@r!\V{Ex!t' %{RGYϸ/0rmA=p~2ũm:ab FvH 4XQNCF@;Z럡~^63r u8}(Dӳ\؄܆ Y2SÍ4p'|$\~>y/y?w sʹdž("*'Dvi6CoA(:P!9wZppS<jdc^%3yP9#HTaG1S_}l*uNF^(7 !~ZR|33[+rfA!`7B}In}$0>΃hk+GYj2XFl"^;?/.rTtPlg@&aO,6dHL|*M UK\*&Xlg]Mm(7k<:QIC}3zU(^֖p57C:JJ[7?vjm^} tE/;I*=RRz@&ZD:*5(..D$am= )j a8z s6hϝ1}a HWe wN`+;G06,AF;I;ru, (@B5_0FNO4>/\JsUsFuBg2,4R,fR{ۓͲ=\}('KshZbwle]Y lߘb Nj6h aN X鳍xKT;rgg;>oC-t?l$ocFoXj]G}xs.`̺QjKtp ! LF!o1G6gd+QH;D|Sfޑ\7Tq2OJ}}V7SWRg}_/u(PHF8sw:K Z%y~EG NL͞t.' \\AA*͢oY t6dKgx eH6ñ[7=涙4lZj9Mg=nνvv;wh >{?϶ />g6_P(5!b5C["#ξNþd*%f-K̖StZ$#ߟzn{j726L?/Mm3W|.HOdV/)^Nƴe((-^j2j`p[Gwnok?X@C/,Yxr:{\^lJ}k._էڒq<'yR00 V@LT(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/subprojectSuitcase.tiffHHProjectCenter-0.6.1/Images/Debug.tiff000644 001751 000024 00000015146 10062333346 020062 0ustar00multixstaff000000 000000 II*)cm]9'| zp*X o|❰0!wG/˒ۆ?2/{u]>6ќ㤷KC9+~wn/d[ӄRT_b9+zw9y PTu ܱbd9+wq:~/tQwרoy?2g@}$`8hΕ܍o>ub2&@8_fa.~$Q}^RѲtW&/Ouhz'5~qmr]J7 )Eg###0L`;/#p#'>Y}Šu+h R "3Pv: |%&U OXQ-pj5 i.BTc~Ueo24mn~yŪk^iL)2!;"= npbͷнϺDZowbdlJ glG3RWHȰѽŰFJAy}fu{UOV:F W$$$/0&ϳŮлad[HMF|euzU\bB b]UTmవƯʵqtg:?7[bXtamtPX^@ 4 s/25$|n-/+W\TTYOtkyZdnKT\@+4 a+qvQ_kz02+DH?Y^SEH>c}[luP\dFMU=68<0W  ?+79/bjGntQyXcGJ9&($V[OQWLCG9txTiqO^fHOW=CG5347=AM '!!!,/#QWE1KR8EL5@E09>/;>9BDI>@CABI?U_i #^59);>,37);=8QSMCE@-/,;?-<@,7:)27(/3)EJHfknehn3589OS) O q-0'/3( >@:CE?240"$ 59+.3'+/&)-%*_^kKLS&7:3C&($' 13.351#$!!,-'(*&'($ "8W(>  ''#&&!X.0Uv  kH' 8Ngtg wq8  #143. hB&  K(( Q@@V^(R/home/phr/Developer/GNUstep/ProjectCenter/ProjectCenter/ProjectCenter_debug.tiffCreated with The GIMPHHProjectCenter-0.6.1/Images/ProjectCenter_cvs.tiff000644 001751 000024 00000014702 07656023755 022472 0ustar00multixstaff000000 000000 II*$$$U===SSSQQQNNNJJJIIIGGGEEE,,,q ***^mmm}}}{{{xxxqqqiiifffdddbbb``````TTT222BBBkkkzzz}}}zzzrrriiidddcccaaa```^^^]]][[[YYYXXXKKKTTTT}}}|||}}}zzznnnfffeeecccbbb```___^^^[[[ZZZXXXVVVTTTPPP!!!qTTT}}}||||||{{{nnngggeeeeeecccbbb```bbbfffqqqoookkkgggeeebbb^^^888CCC}}}|||{{{{{{ooogggfffeeeddd```gggwww}}}{{{xxxqqqiiifffdddbbb``````TTT222Hhhhkkkkkkxxxxxxhhhgggfffeeennnwwwzzz}}}zzzrrriiidddcccaaa```^^^]]][[[YYYXXXKKKTQQQooonnnjjjIIInnnrrrggghhhuuu}}}|||}}}zzznnnfffeeecccbbb```___^^^[[[ZZZXXXVVVTTTPPP!!!q8yyywwwvvvxxxjjjJJJ[[[|||vvv}}}||||||{{{nnngggeeeeeecccbbbT{LMLJFFDBxBsU```vvvttttttzzzjjjfffWWWjjj}}}|||{{{{{{ooogggfffeeel^iTFBBA9.,**)/5]W8uuutttqqquuuuuuhhhgggaaajjjkkkkkkxxxxxxhhhgggfffQG@BA7*$#""!! "()1-T***UrrrpppooosssmmmffffffbbbooonnnjjjIIInnnrrrtcrPBAC@0%$##""!  )=9qBBBnnnmmmkkksssjjjffffffyyywwwvvvxxxjjjJJJ[[[WBABA0%$$##"!! &* 'UfffkkkiiijjjtttgggfffvvvvvvttttttzzzjjjfffNCBAA/%$$##"!! %y ooogggeeefffrrrfffjjjuuutttqqquuuuuuhhhsZoFFFMA%$$$# {.x\y/w|4|0|  lllcccaaabbboooeeelllrrrpppooosssmmmfff<;;9({L9%$#nsgdÖ[acki}ukBB%$ "Uhhh^^^\\\]]]mmmdddnnnnnnmmmkkksssjjjz\v@>>@. ==@($!5xBlT~PwPwPwPwPwPwPwQxQvH&tk8aaaTTTSSSUUUkkkcccooogggeeefffrrr_~>=;?8%%##g\uYPwPwPwPwPwPwPwPwPwPwh}w:6ZZZPPPNNNMMMeeebbblllcccaaabbbooo[<;:=.$$# pPwPwPwPw>x\5gOGiPwPwPwPwNt/D@@@@KKKIIIGGGWWWdddhhh^^^\\\]]]mmmP:98<)$$#oCuT}PwPwPw3'"3'  5gOPwPwPwNuN_X000GGGEEECCCPPPgggdddZZZXXXYYYlllB878;%$$!hPwPwPw>x\"PwPwGiPwPwPwPwffx of8GGGAAA???FFFcccaaaTTTSSSUUUkkk<656:%$#_PwPwPwGi>x\PwPw5gO  PwPwPwPwml*of???===<<<:::RRRZZZPPPNNNMMMeee:4347$$#eŖPwPwPwPwPw5gO,VBPwPwPwPw=vZ1me8>>>888666>>>TTTKKKIIIGGGWWW81015###aPwPwPwPwPwPwPw>x\  >x\PwPwPwMpe3kc???555444555TTTGGGEEECCCPPP6/./5##"^~PwPwPw,VB>x\PwPwPw3'5gOPwPwPwpj1iaU777111111CCCGGGAAA???FFF4,+-6##" ^dqPwPwPw5gO"GiPw>x\  GiPwPwPw{Z*~g_(((//////...LLL===<<<:::0*)~(~4$""!{.xS{PwPwPw#E5  ">x\PwPwPwImC}YR+++------:::>>>888666.u'z&w%t.)"!!\{PwPwPwPwPwPwPwPwPwPwPwdSo0}wKE ///++++++DDD555444q1f%s$p"m+0"!! 0}PwPwPwPwPwPwPwPwPwPwFh@!}|qh$ !q,,,777777111Q3N%t|"jy g%s3#! nVxMrPwPwPwPwPwPwPwA~aqBt,~|{WP+ (666//////~,rucrap`+& "{GEgMsPwPwPwKp8mSD3}{wQK+++---L0Iv!fl\iYw h+! 5lSvS_e9nTRWatIyC-|{c[* ' ///+++y&lfWdUfX+'%,:6*"~|~s6 28qN,Ji[_Q^Pk^*"4#}xRK%"qV"O\NZMYLr!f) 4!y^VLFPHWJVIWJq f'4 |[T+ (WMTGSGUIk_#~4tTN; 651qSIRFSG\Pmd x3{xnZSRL5 1q  2,:3NDTI`Uh^odd]j)`[UTN:67 3q (((R ' 'ProjectCenter-0.6.1/Images/genericSuitcaseH.tiff000644 001751 000024 00000011366 10673165017 022267 0ustar00multixstaff000000 000000 II*xYiy~{fwvw.:$2TFITƩlm0cTQR/.W%e\(Ja'rX ,BZ9{~=ݳ(; ?u~}m^oFrgOCza6S?}IҶ[z'$R Y!p|^%Nڶ}zllxp>i#\>zӁ/>$CF3@("58'Y\ 㣣'?lؘN#1 8l! %Ib$W Y3^4{L'vzm|'ğڐN$ 0&ALH6H{%͢mz WQ*IqɱUy"u29mߜ]rV׺a*Nmd bH>Uyp$ytpl4/# oJg!N!ώ{< p\>Dž>I|(&#Gw2IAs]- ԯ#g`c:3FӤ+6uo9;b,6( F3#zt$||نQӇbJ\<xCdrx M1s^r-yw<n?Ӷ淧{9t'/;`~WݷPn>x}zT͖QLBIh(7v'n 1NNz5_C~b&"]-jүN2&GM; Z'$gO3,ftRx이ļk.1KnT|슮:k$P:XfKC9ǷJ"< 6Rc1jSX'f鑣kcp ;oLNq9u^?럮,)5s#YT= >0]X70c\#ha,aET !YD~E ĝ8"?ju+رPM^L1')>mbm?BE`̹Ko͖G28 )߅]wB1 I3Hw9xHQ%bϦm׮j&9N'2 udc/Խ߆[&;wH@H#d2ؔ@q!s۝39ŭJ= H c M}R>͛?[:-}WhI6Z'>|j"$O5uu n .Ͱ;hTZΙH%i8pO'JܰT6꒕0ݚbnz$$XJJsrS=vFJ&7NuGblwi!H#kp)h5SߍmU"]-F뻨y 5hIfʅؕ9KD]@N$|KOJƳ'aY2K&?u;QujVBf<1X"c9_~U {8넯;-Ƌ<*}=OՈ4 )&s8ˇdpȟZTvg W)(eXhC&MLqAsz2:;rj:;WcĴ[OBO?+W5j-5QEOEQdW EGǴ/:!2&c/EtH׬ J(#WQv*MWUXL=Yĩ0-;|WUUʥSOzguyqWA&}HoLs2-ڠ8tvC٤s.8u[G}cx?/_`oNZ]6ޒ:7+D,dM޴jBDޯPoߗϡH:_7-L2|f.ÿ'|7V֫cj.srW=?rH[Lb4+, s5Sq!8㐞 |K#琻RGzoyhWUT9]g[71x|nLp4gkQذb|1ǴsMRKRaat j$Sg!Y4*qm'ݷqR{8Ž'^;@x+.u]9WB\Ҳ/%Bh[2lEj /\.QO5?C̋¹/t,K\uOA룲(1 v-&bf6| Cxk{Z [[>R}x^EyZ3==+h\U߇fĜܡvo/?p4lnՄjiMބ-KD-)iy++ D zk?'鏆a201_gE_ֺw ~u1}aSV@I)Nu#-~'hg\g6wGUq;:@83>_wx+4HQSP!;8I /ZubHAYZٳ>L%\G{3NѨNַg-xz bdsTC3%Bs _bKM[=ܥa-N(pշFpttnRݟp:X>Hߜs[Yy֪mz;cߋr&+N^ /瑣+dWDQ:lQmS|)ɣ[vcY@6>g@C}W۰d ׋boy\ȣֱ*9^GloӼcfrI.o9?7ю艷B?;VBTw!  #|!+T &P7%"!ˇE 6YΒE6fE_3́2ް8_ix}߾j'dG 2堁xO>t~:n qrS'_UEj1M?k?D3TBWBG7pߎLagwʮ}+c+/eksIփjư;6g~M}uU,~`L#ʡUyM7P9MTCG2Da.= w1dO[^j8Qم&>JS:RY~@oޘLmI{-;/4#DWB/ۏ7wȑ@$ϐwܠK+f?{nhw{صkjFӵ14y_re/ܝ[|cT|#ɱp(8?aqQC5uB\FxlˋT3mGe$/ku00 T@(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/genericSuitcaseH.tiffHHProjectCenter-0.6.1/Images/ProjectCenter_profile.tiff000644 001751 000024 00000015150 07656023755 023335 0ustar00multixstaff000000 000000 II*)cm]9'| zp*X o|❰0!wG/˒ۆ?2/{u]>6ќ㤷KC9+~wn/d[ӄRT_b9+zw9y PTu ܱbd9+wq:~/tQwרoy?2g@}$`8hΕ܍o>ub2&@8_fa.~$Q}^RѲtW&/Ouhz'5~qmr]J7)Eg###0L`;/#p'>Y}Šu+h "3Pv: |%&U .BTc~Tdm35>>[S;\M U9/y)ʆYwrYffffff```^^^ZZZZZZYYYXXXWWWVVVUUUTTTSSSRRRRRROOOKKKEEEAAADB=ga@Q+@9.9/`NbW'>Chhheeeaaa^^^VVVVVVTTTTTTSSSRRRQQQPPPIIIFFFBBBAA@g]:=wǭ+  NA7d17N]eeedddccc\\\RRRQQQPPPOOOHHHEEEEEEAAAED?ecç>ӶF_ih +$ @vd 7z/HiWyqP______TTTIIIEEECCCCCCYWDQ֐7\kIej&-(sHOJ#ѽO->{KQQQ[XCAAAFD=zn>@ݻTwy.s(Iho-I0ѽO?7g-ȰA_lleAB:U>9H7cJT*$ e*$ J-GAX_HB:kB:U~n)( ,UxW.:0UGAV_#:QF' (( SB@X`(R/home/phr/Developer/GNUstep/ProjectCenter/ProjectCenter/ProjectCenter_profile.tiffCreated with The GIMPHHProjectCenter-0.6.1/Images/subprojectSuitcaseH.tiff000644 001751 000024 00000013136 10672657534 023041 0ustar00multixstaff000000 000000 II*xZyxU=w߷$MPU(ږH;n8VNRkUBuʃ%7= Bt1|{rݾfhY[{S֫4d=>wv_NͨWj8t: (eC=X<޼sNF /Jec('`Fspq[`Pv.CN)-p4őH3{*L޼eH %ɨ"1۰Vb4d|hQ0؝mi{7 ۔ ɵ^fo.WGT'dI 9 ۻa wc'=߳~=xkCG~ͽpO1LQL D*tZBYz-_,{mF 2~+'wxNج& !ϗ\fy'F1 Jv۷/ëVa`nYXܘ*w~k2e(*K6mF)Z2e?9]-Slo yڢ 3իyfcԩ}7H<,=s1sN:я2g2pr* 7LߘnuR)#_=I9'BpR| Asi)FYfEk=8g/繘r"᭛ޯ]=?Шaq g7ŵۤN(}Ld|T(YAhNGQ\S~s.}3mmx/.] L.jLGW/(~-Lr28$i8T;Ul~ ZSa¤%_ꂾ6f>끟lN%Rj2¤ rkh0Yˠ6j⤆¢dLF qb$'/D5xÓ@q[Vִy QCe F~G#!Ɇ1O5/@F^Ǝ&i>zoՁb3v#nwjG{Oɤ\? hC5 *}ϼ X2gC;XP(1,HnzgW x tFC!C~ℂ0X,^_"b3S]fsb5&JD9$`{fUq7šF7,Z_aw@sZps[C*ݞA>|3_[KlNes$a.ᮭ(A0D14u R朷}XO gfN1GSMlzX,ys=[14S'lqI#jgٍ;AeƮP:(T X\%P !/\ƹQlROĒī0^:xo\+*9J·ߋ"ܶp&CbpbQp3G Y T0;]TLB?|Jm^ F-a=UdFX뱽d}KiAl|yڤ3תfQ?AyFFNjϊu}p \\kK 0.pfh<2-hjZ> ԻPrXPb@r!\V{Ex!t' %{RGYϸ/0rmA=p~2ũm:ab FvH 4XQNCF@;Z럡~^63r u8}(Dӳ\؄܆ Y2SÍ4p'|$\~>y/y?w sʹdž("*'Dvi6CoA(:P!9wZppS<jdc^%3yP9#HTaG1S_}l*uNF^(7 !~ZR|33[+rfA!`7B}In}$0>΃hk+GYj2XFl"^;?/.rTtPlg@&aO,6dHL|*M UK\*&Xlg]Mm(7k<:QIC}3zU(^֖p57C:JJ[7?vjm^} tE/;I*=RRz@&ZD:*5(..D$am= )j a8z s6hϝ1}a HWe wN`+;G06,AF;I;ru, (@B5_0FNO4>/\JsUsFuBg2,4R,fR{ۓͲ=\}('KshZbwle]Y lߘb Nj6h aN X鳍xKT;rgg;>oC-t?l$ocFoXj]G}xs.`̺QjKtp ! LF!o1G6gd+QH;D|Sfޑ\7Tq2OJ}}V7SWRg}_/u(PHF8sw:K Z%y~EG NL͞t.' \\AA*͢oY t6dKgx eH6ñ[7=涙4lZj9Mg=nνvv;wh >{?϶ />g6_P(5!b5C["#ξNþd*%f-K̖StZ$#ߟzn{j726L?/Mm3W|.HOdV/)^Nƴe((-^j2j`p[Gwnok?X@C/,Yxr:{\^lJ}k._էڒq<'yR00 W@NV(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/subprojectSuitcaseH.tiffHHProjectCenter-0.6.1/Images/soundSuitcase.tiff000644 001751 000024 00000012314 10670164707 021667 0ustar00multixstaff000000 000000 II*xYit[յt%K` lIxJl'`$Phh yڗ6iB JaR @J i$В@IBg3ڎg˖%YoY"NjC{㝵tuoos iU+Ri_8D~!\qU#Opi&-E%#S*%R#OࣟFoٶmm 1@RCơ HX J451fL&rW,H,v8 t6nI:`2H9"DɆHqPJT*MҐV#~{yYR~2XYGwXWKC_'~P`4'rol̕1M<DKD!̳DJĐKR.'~%(X8Xk~S{4@mFӉ qpr1Fyfa t>SE9 9hb4bNM\?b~Zlsğ3OAI"1ƀ 3?GW ,@ @]أ̭*]FX '~б5@(N# W&!cst=SAzrȜQ6!N&J$d`$rh*{[A5$\J =r®~!aG/8g%%j "뙽=RQF1ba lϟhr$W]Zt4E戬XqMd (*1>9!dF'mq cv=+V Fv T3b.)f! 81JR5]Nw_[Szʽ#-KpHh lz-ِK>3n5FiL&CGGvڅ  |2yq-L7f(UK$]tOK7NA+Aá?bt_L?J>5SՄ?xwۉY :Ӭ{S^~s.sٛػOtU.[ShNP"o/kOIeq9B?qV6LXBZ8B|3\q9h'TC~ARǏdQDy.cIrsg?ٓFeZs ޅTh1?W(@ q^b}'xj.,ӥ ߏQꝘjn(D{R(J xl~XxOIiiCv9nՔgtcaQZn)rMfdT0)SStš$d/,E+ 8/dzQaZ5Ƨ]X^-Kv=]E.ƿrUf=^p?Ğ t ]uo:wM]|9nKVI SDA:t60}"6#h׎*l/4 ٙ3//? '&MpnZ->ipʧ!u*y :p_/ >FFw֭?zonck0-7f 'hjj’pU(nAJ"{45(7'P<^/< 09l@5TٺS9@Mj@pzr8`moGy{ͻ+³aY½Y~O}R} X|q@3&= ļ s[I[6gwelW@P Y'j6GI!bQdvL9pv c.yȯ6zT;ۉg[_ؚs~ᱹy~bb& o 0w<IQ^h&[]"ݎ랣j%؇KY=Iy,iO<cVC46hSaHCqA.xh1G0 @d[YVERzzQ: M"{EH!jDK4pen!mرG[h\#QL]a+`VG :SNkjf ʃ qN9ư,΁V)/_89Fچ3ϾߖOӴaW:ò+l:"Lks,?H~Bkk}շO!SևkK6Ȱ}6 wf7(ZbN|~Qwn*$:=ln `n'14ri *r8Ja5#C|K^M3g| XM)@P*+`'R?2Rގ:Nҥ3^*6+g.2`-Aea v+j =sFq.jꡅp F:gYzʟt/V~~jVw㸊tu HG<.Eu!\Yw7N>"!n1/"ߗ.rc%"RC<= !ʢl;äQHCC#o_nܸ1<Ħop _l 7]~=%OӍnWD`i)>tiPfU¤nnC6H j P #WYD>mվ %ۺHR 1@eS07ƜyYFf3I֔AR w[XsѢbI'Dz7@Ԣش+IW>44YBzDJZk~9: Ss1Aapj" g_Cɶ\&{tif8џoZXوś0#23_/*K!$T'.W0{(9 b4ec0#3^&pox_tw9GX?@{`?NhhȼiZR<H!~3[b{z泸f&#Q{}& [{iFzDž{w\Ge|o[s]#D7OƍX^̜:<^wZӉsmgMEGgGܖ(d/#Q/ c{ﹳЧktMz:4թVx-`9h{и^ܒ: l6y}o#:ߗ_2$4;$%3g5-0f#'c ϥÿb8ȟ>g9#[Z'M;eϭ!lF礴o>L_ivѴO{&fN30+iw~q}Efb i 1hk*@17B+daeRymYYM=10γs0\Gt=~֘ڙU`Lܬ|\c{2v>[߻n&=k:_?ӛT}OL3Ѩgk4;a@l-6 sh6V_S0jw"[PvEMùOrTC|SEYܛWq)~Y}HK}Ո5]=lo~&dI5;;O ƧTcȎvu"kw[NTz{}f-4ڪTU+E+#3t,uD #87 ɟ86f(m ̎M\qKF:Z)%$.?38EI30w<Fr?Lt/)JvY 7Z O n1hAVpׇ.ݕ8zpԁ55 =??o%RE: tuU*dx;c#€ech7 8ap 5 j^oXPVYtsǹgmt y?|y5캛  ##\+xl ?o`<ޒqYw߃p(}00b Qj@{(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/soundSuitcase.tiffHHProjectCenter-0.6.1/Images/otherSuitcaseH.tiff000644 001751 000024 00000010754 10673165017 021774 0ustar00multixstaff000000 000000 II*xYklufgvwvf.KDٖ,[V5BpB&MFSh 4.#NGH?jG~(l(Yi$o}L;+h1K fuwwν mw2m]YKS9{vFaM z ,tm:eYхicn:p͚ 7PvOA :B!yU$(I.m;L>yln34p\I ߏp0HR"1PCɄf[։O?u'_nj?T#f1vYҲG +ƸvD%GP@<bipsFFQ#PD.[ 쉭|ƓhsPx`b/us7@׎pxv݈orW0[aZj~4=N|+q=\!F[4z6fpx~~hRؚs>ȁvėdYS2?r'mw׋9fv{s vҮs_IN[,[4Mq\z=R.O!c*a9_eΗ}RN,*w me1꼽kP$5Ha.//Ɔ ϣ0v 9Ҧ Ž4&_fm{I YڴaPVqv!4 }ŏ2J>LMM!JAu?tB%/|U/vmlp}t{|}d~{GZݚ1EBP^єɉS|4v;Zbcs=ԪjNJ{k|>e [\ׇ\c%Elu@A}z jВf=n{.HE@.EgN~QHgU #tz;^.H|r-bC?x.azlWKұcRCwE.vM2\YiL)]&L~$,r*3>o=MrЌ}j_yϞ=J$:p®|`wtxeGA`F:Yug> &W-"|8\ۨ}BٛF>G+i%yV-~Oj'Bq:;;*AfqPvIv - 3*? =.13Kặ[+։`!;PhjaKۓ^ZW 㽸)`bC:"wD[I?dÈ`Rmp0Y݆p؀^SA(y&*uy<NWw{7kz wqCτp%׽ւh"ާ%-j36~29Ih$O0Wa_48FQ#+T Dω\\`% 5JnqX2cSk>LX7^PeՐDL-/JG S#琦 $ ^xgU8^SѢv$Q%k~EhA¬A˴E(L~|,/ k|5'ᧆX}g=v٫GGsv꫎Ͻw<E5njEAgC? 3NlU9d&~Ap=\u=y_~s74ƈ=pAFwwjU/0i ꉤ ž@jpZ&˼+f] Pܟ_ wcVę̬m+zr3?h"7,R|X0|/|)\ש(lPgl(9:>Wm}o<:E!ZuV.7,ZAH:f}eu>IDUrԥfPkvm539o ݳґjI^ׁZ/.n ilִ0Tc_T2y|/Њ,1ͼ A+;#cD4Igc(萮gc#yZ_~q"Ϊ-Mq#sE}2VxkR{k V(ܹ9rw@UCAK>R-Aw%\1K+Gh;ۆ]&c],?E׿h8~o]7+hC9J)_{h^О'q%:NnYRp\Yʿ)W U00 R@(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/otherSuitcaseH.tiffHHProjectCenter-0.6.1/Images/Options.tiff000644 001751 000024 00000002356 11255250267 020473 0ustar00multixstaff000000 000000 II* P8$ BaPS?4)@1(HdR9$C lop&B9PeB8>")6i}TA@f ʏv2ZegӒroO+rV| v@~8!'Ps81K@UMU1pVrHw=ht/A1UNS-W's|poCG K=J73U?'V*v[ pdn/h&/\dQ!~sݞn~;28Oq=C>@ڲ.3r!.r9V:|lj8ga ѫ۠2G !L%x2D0(aa!NS`9(9́R 09:Γ;S?ϓ).NFbɃ.DN9x"G 9PE?P5-GPh<cF%Rd3#Q5MNRT5cApUa^Eqn%5Cd[ T]l'uÜsa'l+apTW" sAVr2tC=ע{ y%IĘV[t3 ssBULeJj21# 8m%(塅k(?k/ m ӭ CRN[V۶ {Fȷ~ŻZ@7;FĤq!5r1fC|'3Lc=b r=}].6ќ㤷KC9+~wn/d[ӄRT_b9+zw9y PTu ܱbd9+wq:~/tQwרoy?2g@}$`8hΕ܍o>ub2&@8_fa.~$Q}^RѲtW&/Ouhz'5~qmr]J7)Eg###0L`;/#p'>Y}Šu+h "3Pv: |%&U .BTc~Ueo24~󙛪/,  gr7UMT Jkiem},xk7#/bZ6 R"+% K[XguEY^M_gf7 \ Z~Z&!bHiesz-d `pPju Jm@T\(R/home/phr/Developer/GNUstep/ProjectCenter/ProjectCenter/ProjectCenter_make.tiffCreated with The GIMPHHProjectCenter-0.6.1/Images/soundSuitcaseH.tiff000644 001751 000024 00000011400 10673165017 021770 0ustar00multixstaff000000 000000 II*xYily~fٓK.I,Y%۲*3ql%v/8vl$Rzu'懋QnqFE Ԏ-#ڑHxHo.=fv7ܕVm|~7Cmm}⎶.sf&0q``q#v︻O=n QX۴鬮熆獹y*,O *mx|𺜖K dіeomSزUUOW0a,#$Ib,xˋ [+bCwh)\tg?K a%~_'KkaK1\<Œ ms9TyD Rh.wƟ1ɹgO푁T_Z:4e0V6b1TXT1\!)- c4tf79GtA/p:ŵUlOÆ0j5XTmsGq3e1Eg jf?x_׭WNkbӾU J_yex?+”#/Z,(EsFFRy!Erqwe2\ShrPxx7/uv=<@maYA27[0]bRa~~$=J|kmiZoc#-m4+/7ܳNOVyPN՞|MTQ/Wd%hGmrJВz=nomzX ?:'}/ b.a3n$#_V/~ 1nX._NΝ:`8~xv2ށU.r6%5S f-F rk+tr*=2 w!:g=ur6ꉸGhFB~ϕjw ÇKV|uKNJf^qyȃnxV1.s3ЏenxP#Mc+Oh<{ST'/(5| ;/{"*E!;{vM?\.DdߚHbJk"S2NB@u;{.XXcRpw[=o>]okaCq^J[cˀ<}5rGvE+Eq9]vO?͞Gf~F`_E\ &*[Pkpޒ2/̓ijY>!{YT]#6\unmAlHSNB{"YXS;qh>D{zvN29iK%EȌ%Cqe1tC֥%6&/}#cf|6t2&>ǒHv ԅ=Tns6YX97S.8}m,͜+J0 (5[GS^c66iCXc8Ν8լM|FXl&j _bmp셤  E -EdjC+|/[|c6ɐatY>?6:)lԃu V/3\Te"8 r(p((NUO5 -FP8ؽ{8kOX&^56B[W'kqT?^~ ߽c_d/{˦M<9@zêHg.8r4I~oFY۶!]Rg=#^E-0.~{5hs&/θ2ĪPB GBVi'Vu4eaR,0Ue?P?*?Q?qiڏmkP3}'N[G'*W'bkSCg9߀ E_̧H8 wYtpn >72jyмk_<^Ums|Gsi%/r=†+l'1X`Kځw۴Jtt@{{/w\- ȱ|ˀ d*U:hKQ, ?lg_[ZMˮ/ר,B)3DpZ ~g sݔy.UaVAv=Gqް ݘMhc#;ŲU} h hjkz˵KGxdyko_'9Sa [B/R~%pZEtԥy\2N(~>1@'Gh+;bE޴{PSJkt}2YWdc[4u,b{a?kU-^*4C/m{aq؎d'xS3 NgT?{8hZmc-RG &xͦxgGo6D?\Ѷ4.֡NSy}2REl۔%z+~}'u[u01?/8a͏_֏J[:/_Dr}\?BbOC"MOw Yx7 X⏰AlH:{/O}1B,OUQqi Ϲeto[O_p](U*w$4{j/ަ:#N磛o垠e+a}*Bo҆P߯]uWVqi‰BIpLRݶuŽkd߮QT92x#p/6M0`׏/'6*כ=3$&Ph[U~QxRzUYub/{r5"%yDDDxxxy M(#:-V`RzPwPwPwPwPwPwSzjt~*yA$Q;7;xxxy 1$$N_PwPwPwPwPwPwPwPwPwOv{j ul'%okoy Y*$#pQyPwPwJo:qW:qW?{_Eg:qWPwPwOr4ypqKm!UESy >&$#6ePwPwPw>y]     /]GPwOu|Nvi0c%";8y :%#"LY~PwPwPw64R^DσJ!"pҩ䇉tX(nپ}sWc?,@RP$yiHbXy5r5Z@S#S䱄 N&MRJfv$݉dCBHq2rj=6Z-r>RvUNlU'Օh8ܜk^o*ڎ~ePuf3HқDZ@<žA&C)h!?+Wׇ ʼs>.'⸣P/_GkR 'Gb61'ERYy, JaFvZiVZ2JDܟpT\>?9OmtZM 2#!{|FgjxiYfI,"i5(1d*fO֯5H R;'Ʉ=& wJ3r’}v7 :F"3e1Fvr~ATkLu2!DF&-'}ɇw._ Wuef* *==~pt# ]G#a-Ȟ|!#Flmt( \.W'Zzc|-=/굢;dR\;jw[c6[G\\,o!ct-a w>N~^jk/Oq^CH㢘b6#Mcq\* =rolFfKٕZjk'l&=0Ɨ1ߧqqM DArسg͛ouv서8i}vg Ӎj&;]tJxuI&k O2 엔⑐ßGk>L_%<5kp_BC|>1-PLx>Ɓ)rum!Lw|ߓ/3vɚҢRX&MALj>) :lg~Xyh%뻹1HpuC҅yM xRJ;z֡$dO.ͦ /"dz(IZ7sm=OÇXB׼qAOC_zS\+o<`+-dž:AtGX\;&-q'=%wTA=ķ:(^ fX&d aGQ<*@ՓϠ#-KolI (۫N4H=780WО?|δiod2#AYJ=L,)5wN;^P EGvwn ۿn{THڟ9F5ggeN6DHceӐ nu!J90xz7v=t=,=o0l-/t;2D4C.Sw\kf=PjC=g1g|2Ԅ{Y*Jm2 75A< UO@d/H G Ϗ4N?9"K[Ζmtaһgn{>MMMXtn`n4t=@WЀ";}߮y e* R##]g=aQf}zD8#z 7Mq p gByMx0 cO<-ǰ=`Ph̀RHH߆n H3{p]Y+ՠ)|p.} )0)5+ٮ7BHes6Gܑy!n|x{?{NL :PTW >jm鳭((*i-<ӞC°yMnEaL g"RH_ke^<#d?Ae;s{`h\صgS3JM 0KPW֠?ԚMӉsk؃6 CL| h6+"ɿ_s]kkmp*VT' I$)-JЋԯKp\rĨ-םTC:kwS<G{'1i ;Hs=~"s)i]LZs G1HwQ1vW+ E ''zsB?|s 2bY-_vLY[-Max&P5Hq{RZ^ylȡ]}x 9vx=7SDYM5,^3S?k.fFڟBb0#}+&UB)$f zwZ:>nWZ_Xw\qPVWnIЩ3sA[*6S߸/ǐT %v[LRpG EW~x(w?P=/[/ŵpsd׭PrJ-JLa)R!QH) yb!LU I^OpS}\y"QVoEBj{/uau NbqWp7pz/ZQ\@)?*E~Bm+£.dt)Iyc(i:\;߃L EWf2Zlڵ+,9,@M}['1)i!c)ZviϞI FBd >[nW QV0Pǖe)Oh0bҥ"6j+%8>#io@?%Ʉdi95 pUCe|01Jfӑ}(}zli =T";Hm=yRuO9]&:~E=ZGq.ts!RP!%בM](d졞/*C{(h WRM[X*+IriW (6 !M]Ǚ/0%q=^aHT,.7 h]rS-{qrL_ekT``k0Mw\vHmTd[xj]j7i)F#hOx$x]8BU%-\e}-I׌ܧAFZW}?;kf_q,/|ltү]PSԓޤ:m!Ntn ?;zOzא\7a?FNF]~JX@RJ;ڮ¼#Ɇ(6AZ{~e|/<Wf'MpXɝ׏l,}b%)Rr]s~onl*`I?D8UŰ2A9 =a4Η9Q0γެ6TҼ'ɪ']]QHK:kh;nS-5h)to^?ӛ`!'d2ώd!}Y[:13cˋbj.EI8ch!£̧zunK1h5;Ξ]Ζ>+U?F흄 - ʤSҾ&pj9o1CH$iR[pJpT+%o\FLG;HDY#7,_ʃ4iI[yb{Qo{{_va@[ߩDI)hq2iT>o/{I30ɒ?|4IO'~[+Sz -_7p2Zj4ԯޑjdYUܱߎf6ߵd)="~F=ܹaߙ{j4ItZ&Bk QIUZQ/a7lRD}2}2L߻\&[`}8W˙JF7Npwcoƛ ca|`$ 7>Y%BIZ&B#šHKi]d4 1u⾀DȑGJJH6ynVk7Qwgtx3@H~PЬp|ujN6bHMp: i@ZJ9pwם^wu.(ol'12>cΝa|2%_=MUBWʗT%&"zC?K$lǨh&RH"-Y00^ Sf@x(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/librarySuitcase.tiffHHProjectCenter-0.6.1/Images/ProjectCenter_prefs.tiff000644 001751 000024 00000015146 07656023755 023021 0ustar00multixstaff000000 000000 II* _///;;;aaarrrqqqVVV000***|"""iii̙緷KKKdnnnܨ|||FFFJZZZxKKKcccdCCC6dvvvFFFWWWsssVVVhxxx^^^... ;;;|,*ZYīddd@@@jjjbb("؄fffFFF A<5XSɚiiiGGG""" ʟèlllFFF$$$D///oooEEE))) 333λqqqDDD((( 222Ʒkkk>>>%%% '''ddd777{t{{{ZZZ000oootttNNN'''IIIeee??? vvvHHH***_;UUUۥ}}}^^^... (((~~~~~~kkk999!!!_:::Â~~~lllMMM%%% JJJلxxxaaa:::$$$U(((gggnnnooowww}}}vvvhhhLLL///!!!,,,OOOWWW]]]ccciiimmmooorrrrrrfff]]]PPP???*** """<<>ba^dj $$$jjjwww000"""888nnnPPPbbb>>>H{lTT||D + |rr777YYY@@@ ///IIIgggPPPlllKJJB$$5MM= xsnMHG.--''':::dddPPPwwwWWW644P(0zzw'(&ddd???GP@GP@PPPPPPPPPPPPPPPPPPPPPPPP^^^F;;?,POMnomvwv\\\NNNrrrOOO===333 aa`###$$$^^^|||eee...}{!"!jjjttt;;;{{{+++ ihgHHGWWW,,,999FDCNNNZZZ))'kkjnnnZZZ$$$'''"""+**aa_kkiEEE yyykkjaaa777yyy QQQ222\\\cccMMM##"¿¾333ooo&&&%%%<<)*yg "/ 0-\n|yvtrolifc`^[WSNHB @ Bq X$ 0PPPP>vl+,r~|zywtqnkigc`]ZXTKvPPPP 0 0E.(ڨӫ /Wq }|yvsroljfda^Y PPPPӣ%05QVw$% "#!"]:"v~|{xuspomhf !ĶPPPP 0 0 0 02&>S,_A)*!"'(V"%l ! ~|zm!m#ts #+ 0PPPPs_gsɪPce58()o s **&'$%"# DFk0Tmz;B<<PPPP 0 0򌑓x|yMOy}çUNb\55T$$i -../././,-@Chw![]PPPPyccaba()0dFbx)))P %&)*-.12))MQjvzToPPPP 0r5G34`##aTT]ccE ;_{&-27ADgCF|} !HKa@vDRr 0 0 0PPPP}~BC?@77j--qDDllV2\Jl */0E:;r|x:=aErH}NPPPP@`M/045BCKL./ls!!zeg[g/Pj!& Yfkpwz&(^u_PPPP3412./23<?78ceZգm*2,9%('{auPPPP?@12121201/03478LLwxsKTH6 {t7}vkiq[lPPPP\]121212121212*+XXbbgmXVu+mhMVհPPPP0@@P}}121212121212./=>ADOHȁ`k\m;=!!)*DH0@@@PPPP硡45121212121201,-cdƑ<=),,,8:\_ȉwc~p}/.$$!"67PPPP 00@EF1245341212-.IJuu34*+231212/0+,++88OT~&& !$%@APPPP񧜜b!-/4623/0WX33<=DD,-121212121212/0--//,, !"#$%TTPPPP 0𢙙NO1212KLRSNOCD,-121212121212121212()!""##$~mmPPPP𾻻kk34:;JL2301121212121212121223()!"$%t55PPPP  -y0045341212121212121223&'#$x  PPPP񱪪hh453445231212121212%&!"dVWPPPP %}124534121201&'>  PPPP񦜜RR01344523}$%kjiPPPP򚂂EF-.X?@PPPP񮪪PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP00$ E$@$(%0%(R/Users/me/Source/GNUstep/ProjectCenter/trunk/Images/FileProject.tiffHHProjectCenter-0.6.1/Images/classSuitcase.tiff000644 001751 000024 00000012270 10667702276 021652 0ustar00multixstaff000000 000000 II*xYyx[Օi,[!gqVp 4I M6P~aX|>P 僖 @f,YͻeKڥ'm}zvf\7W{s9Wa…wҹxd6ATgGl[Sf;;q98FEw t8ݺukp# 1YE1E;hu1lV,$d[ŷ#-[%*`Ѻں9d K4epɄYv;ɞ:Mh V[&4^>/o3m6-y≩K5j~kJ.RVT AHoEF^b`2a51]&t~;>hok):;$GyFpKZ`D$.> "O[0)][zڣ.ګ &t޼,eP69lsu'xE<u: ג]<j3q٤7Pc#U8qNe%:k轍ٓ ;Xf{uu}LX$}>h7},zKo@ل ZsdGs?63CNG,h` phwT|p^T޼ ͕neJm*~fG8J;s7۴] J ȗ^3:¤Giloߎ.߸^fqTZla@0mh'])9k*_qq h7Ď/Oݴ=[qǢxn:lڴ {Œ%Kx7nxtV4sÉH^ÀPVfCđeoN- M*?)g#Y)WJw?QіL妛N{c܃cONLŢ(r(%o o>{qevm^*)zwL 5}uoTE[Yv.}ţQ3hGsq&cjqrp_{fHWISmOoF76uӺU<>Kzڣ;piiNc{v!#ɬig3YQ7:I o5kVrq lMR܁,Ewu%CtV19T7gb{ ˭zMr}"~:|1n0eS{JlV ynbZ쾮jע 1{"0=JAa:-EZs<bcy/6TR4Ϟ,GέjaxUM"ts M%:S4' C5NӌpO<qk j`06w;0Uwr̙;mحԼ+a;-c@`WjLGD~sC P0bo¶&Tڭxٗ6w.GS_{|Ϟx(Ʒ)!%fd,#1674"IQM<+7%bx1u];V_`'"}Z,H E=3݆x"6Oh*FşObDpF$TgƆq0t@Na׼ާnSN~vNd/u!;~櫟rۿ5?u{v]<: IT}6Fx!M{{w, E'K85˺ gG~^Dy_؛•/Fz4V 4_}4?{^%1ةo{01VNFhmWVa0Pk=vS}'h#Rٻj1R?ӇGMQ'/ޚ5b84}G `ucӈs/Z DZ{ ^Z2e=#51ëwaK)ƯV?>χ ٦S[zC/cti˧i\A >QfG4JnnAU<Ycv}ըɗh4#ښ8z\Twi5}7WEx)PuNCb|[*f6Xs CHRZ|jQ aUO^a"_3rHN(t_^?T.޲z-M}{j.l%}f UNI?sOqSEȍ$L zA҃jԙCTKr%l B1=,l`ΚחS2Cfz[GDb,#cv;>B@:/g~CYF ߞHG^~PnKͪi6(fI@I=+ikJ9 an63:G΂as lHֺbeyx霩K~v~jl77+Xvvv)f[ʼ̛ Z^B4 >\Xcy<ԣdiс9dћ?[pPEVJpϸ3g3Ohw5~:) MM(aɚxK)ߔ3uDG{9|Q__ jϮ*< }r +qx38N~$l7LeIjY_~n˒3[ֲȑjg3<{[ũ/E(Q/+M1o ՜Ud&y0'j$4H{2Z{; \lk<_f5=}և8=n7L6Q V7̷<<zl1hw8[N졐׆˭fB!J!@$4[mM9-d%ľmc]R 'g2 >TLL) D7nZZlLF'LƿM<`]Zݑ( G Df\.dN&C\Gs;L^_+X|yo0UZ] BK2d38N4@$@A@aN60d`p'O=r` p /N.aL8=qڋh *1qN.CQV**S,Y:ZmcÍơױ2BO}:i(m;A #<>i&;F8Gg5Ťg,2i*rYQ2|)js[ZM'#g"+' j\D)88IG|>zϻ>tZ&W >;CQB@6 )F,6L MfTP%vaƆ)yY}=1Yv'Q(R7}rB7qH] &YWF~ORH$q^N1ؤ`4Z?@_oݧ_] Gࠥ+^ў!('̆Q>s;oY0G##  8s vލ'7݄CHGgclaQ'2.ߞl̆'ȷ~Zw<ӓ)[% t\6;jVxH?Q\A1Eq? ܹryuh}yȈrG8|ʜX-}`<ѡSr _}Pޜ:qm<x붅BB!@=v;<{P|Gu4>UVq٩eXhrZyk۳m@ BAofV r#wqC6jhQeH )JK1R({<;'Wxwbš<iz@( X^=.7`oO-iVx-[ׯ&S(]1kEKENu:I"5š |I#2ŋ C$=&{ԊM5e3I 3CP47"B6dy8XM㯫[{ڵol|ۦkouEitVG_(e0*KȖ  O p "+ԫBb'Y ^q)̬FÎc괸^/.V?ĉ&o>ze] tك(##>x0au(-E>( Ja?zfl+/^~9z oŖŴb4] q(ԣxNq(9i^tl&J!'DjVeCXM损&iK\wݻ2HH\:ņ\^ʲ:3b]n*r5 5/< :'!Ȅp/GQI-ɊA1A$nTd^ ofoV~7} BA;[j;xx-+;1EnެYt]ԄKcaE4ݽ%]J(kQTGߡ]{Q:><|!r 0yl@TٺSBْ$p@u@vmE0lՅʮ&L59 l}-kwm0}m%^T>Xl>T*,ᆔFq$rI#AfwAՙ@vi=$ಚ%E,9tw2D ®ϩI؍v̽=QX=, ڙ8z:%v|3"P1|+KK:(=:)fn(VU\LMmx'H> b{@p4oǎOSM͢ҙ؇Y=G.AR9S}ZC4 h3Y%CiQ>zmN͊f-&O#E=x~E{.D*w6yN^+!">DI/_}U0H8C&-h U%3-wlvä>c-%D_ 񏷅w] vvݍVOQA\{/zJxVH 5Nxz䩕pW8vg74l|{ͅ`ݤR/6POp N*6oF6]m}pI]x%vбN;4b>jRla Ĉ+ݸm? mc> AT*I;/?g OGvvRȖJʇZ؀`,j& ܰ42dXw;E؍L;kw`ߘtB{.IQirUǓ|UXm^|-|mmmkкa祿!N/:MBzBG\`y%a!ܖ!#>g?$n!ˠz'|{h4p!8Ger1ҢI>T78z7D̒".S%]xh%Ia|5T"VRДZ +-VQ F5FM@yd/~ }V6NSO4'|S/ K5d\&˂wnT2͌Ͽ?An1|ԫ$i=X}( sSTmaPs:x KѤ.I!mmחK5VKn{CM&yHŏnPHԣkк/PW!vIKuG>9HB%Ztʞ=38Fg(5FӞz.pi5eK,I鉑y;B=ܷp!N!$$rc#w~vz_>m>]֯%GG>a~\~-u2Y&f=Wވl6= vw é_%>3KwFp${b #a60r:I$VhWR˙ĝ"-$a(td/?sh`hj2}@4{hZ/Dd윕wt CA7ae0{-ìW{Ɲ r!>anHBn HE3hcŒv/vi[|JWB9DnT]RP B>K}Lsvv{6ڰ~Uˈ`gN'cGq6oY.>ӣƝ` Fj-:pNoi _kdՒ HS/䮓xFgov GS;q?.y__ ~FsӍj HB3ԫe0փse"¾dBq2N&2 oX`%#acl՞32((I$+oQkֳ$qgpxc9ތagG:<(osG#m.v#g6[Ŏ*dޒqYw S 002 +:@Kfn(=R/home/diablos/pm_files/ProjectManager.tiffHHProjectCenter-0.6.1/Images/projectSuitcase.tiff000644 001751 000024 00000011566 10672657534 022224 0ustar00multixstaff000000 000000 II*TxYy|~fLfO2d_HB !bPYElT- ^^۫^lhzVm+ElD@@> V7̷<<zl1hw8[N졐׆˭fB!J!@$4[mM9-d%ľmc]R 'g2 >TLL) D7nZZlLF'LƿM<`]Zݑ( G Df\.dN&C\Gs;L^_+X|yo0UZ] BK2d38N4@$@A@aN60d`p'O=r` p /N.aL8=qڋh *1qN.CQV**S,Y:ZmcÍơױ2BO}:i(m;A #<>i&;F8Gg5Ťg,2i*rYQ2|)js[ZM'#g"+' j\D)88IG|>zϻ>tZ&W >;CQB@6 )F,6L MfTP%vaƆ)yY}=1Yv'Q(R7}rB7qH] &YWF~ORH$q^N1ؤ`4Z?@_oݧ_] Gࠥ+^ў!('̆Q>s;oY0G##  8s vލ'7݄CHGgclaQ'2.ߞl̆'ȷ~Zw<ӓ)[% t\6;jVxH?Q\A1Eq? ܹryuh}yȈrG8|ʜX-}`<ѡSr _}Pޜ:qm<x붅BB!@=v;<{P|Gu4>UVq٩eXhrZyk۳m@ BAofV r#wqC6jhQeH )JK1R({<;'Wxwbš<iz@( X^=.7`oO-iVx-[ׯ&S(]1kEKENu:I"5š |I#2ŋ C$=&{ԊM5e3I 3CP47"B6dy8XM㯫[{ڵol|ۦkouEitVG_(e0*KȖ  O p "+ԫBb'Y ^q)̬FÎc괸^/.V?ĉ&o>ze] tك(##>x0au(-E>( Ja?zfl+/^~9z oŖŴb4] q(ԣxNq(9i^tl&J!'DjVeCXM损&iK\wݻ2HH\:ņ\^ʲ:3b]n*r5 5/< :'!Ȅp/GQI-ɊA1A$nTd^ ofoV~7} BA;[j;xx-+;1EnެYt]ԄKcaE4ݽ%]J(kQTGߡ]{Q:><|!r 0yl@TٺSBْ$p@u@vmE0lՅʮ&L59 l}-kwm0}m%^T>Xl>T*,ᆔFq$rI#AfwAՙ@vi=$ಚ%E,9tw2D ®ϩI؍v̽=QX=, ڙ8z:%v|3"P1|+KK:(=:)fn(VU\LMmx'H> b{@p4oǎOSM͢ҙ؇Y=G.AR9S}ZC4 h3Y%CiQ>zmN͊f-&O#E=x~E{.D*w6yN^+!">DI/_}U0H8C&-h U%3-wlvä>c-%D_ 񏷅w] vvݍVOQA\{/zJxVH 5Nxz䩕pW8vg74l|{ͅ`ݤR/6POp N*6oF6]m}pI]x%vбN;4b>jRla Ĉ+ݸm? mc> AT*I;/?g OGvvRȖJʇZ؀`,j& ܰ42dXw;E؍L;kw`ߘtB{.IQirUǓ|UXm^|-|mmmkкa祿!N/:MBzBG\`y%a!ܖ!#>g?$n!ˠz'|{h4p!8Ger1ҢI>T78z7D̒".S%]xh%Ia|5T"VRДZ +-VQ F5FM@yd/~ }V6NSO4'|S/ K5d\&˂wnT2͌Ͽ?An1|ԫ$i=X}( sSTmaPs:x KѤ.I!mmחK5VKn{CM&yHŏnPHԣkк/PW!vIKuG>9HB%Ztʞ=38Fg(5FӞz.pi5eK,I鉑y;B=ܷp!N!$$rc#w~vz_>m>]֯%GG>a~\~-u2Y&f=Wވl6= vw é_%>3KwFp${b #a60r:I$VhWR˙ĝ"-$a(td/?sh`hj2}@4{hZ/Dd윕wt CA7ae0{-ìW{Ɲ r!>anHBn HE3hcŒv/vi[|JWB9DnT]RP B>K}Lsvv{6ڰ~Uˈ`gN'cGq6oY.>ӣƝ` Fj-:pNoi _kdՒ HS/䮓xFgov GS;q?.y__ ~FsӍj HB3ԫe0փse"¾dBq2N&2 oX`%#acl՞32((I$+oQkֳ$qgpxc9ތagG:<(osG#m.v#g6[Ŏ*dޒqYw S 002 +:@Kfn(=R/home/diablos/pm_files/ProjectManager.tiffHHProjectCenter-0.6.1/Images/Find.tiff000644 001751 000024 00000015144 10062333346 017712 0ustar00multixstaff000000 000000 II*!x%֬19ëBϹMV_`^ {"#+7ëBϹMV`gjmmObPx$+WǓhaSyl'u_xnȽeRϻIv%~;xeƭ?6tcw]O巙1,-' L)$yf٪+-$+/8?8c7+TtttMMMKKKyh$ĩ@8+7tyyy||{mmm{rN̲GƳHddd\\\5ëB~~~yyxҼMQBBBªAϹM}}}DDDUUU|||vvutttSQθLVhhhxxxxxxvvvSҿLS`???YYYGGFnnnxxxxxx|||vvvxxwzzzNκHccB@3kkk}}}HHHWWW|||||{~~}мJƯBDc}AAAeeeɼqʲC5gQo>>=???~~~{{{ʲCè;^OOOBc}kkkIIIyyxſè;:vQVqsssè;4|xFQc_P4N***GQcYªǦè;4+S{{{i22+[˿ιѻ˛oʲCè;7XR+S7/8ĩ@̲GҼMSSNмJʲCé;ëF7jR+cbL>ɳFQSMκIʳFdzW7jRyuQQLLyvßyu],-888b//SSyvßyuX((l/1SSyvßyuU$$# m45SSyvßyuR }}}444Lp:@T\(R/home/phr/Developer/GNUstep/ProjectCenter/ProjectCenter/ProjectCentre_find.tiffCreated with The GIMPHHProjectCenter-0.6.1/Images/nibSuitcase.tiff000644 001751 000024 00000013330 10667702276 021313 0ustar00multixstaff000000 000000 II*xYyxu~g{23$if_ZKBhQ,뵈?<|o==s(xM-RX*ٙr]wm&\Wm'&ZQRA%@*~p{ӹLW4;cfWcy5&x.'rD(Q)aSkPe0`6-L+ #"?lq5Cm2Jzi}PyipdC:P(R*ERRǢVL1w}]Rg8hW$bå;wni}챩K&v]#iWfslAHHegH"TЗ[w8@Muu Iӹ[ cojzx8E81K3:rdU&oG'O4#t7J1ZHA*TeGy2?sğYA"Yg@̱hT 9o3q$aR4jTt3赂әYd;;sٱ#`[oPvaO><~I=8Ɠ):H L d4tO!ZQ)!^&}d{W">vbx x|x^n܌PޕoZٜFN<~{nf"tgݟcah_-Pa2 7V ;v?ֲ+)W!Ri_JK]U5㱆XB5^%ON{z0A9| Ȓ]So9G6rV4sk5itP闃Ϙh1Hn3iwS鯬gc%fԑO |çw^v1N4H&a``Xl\oq<:sa ӍJbGLOB"?a҉ͤϑvNS8JUb!Z { /`>k8~$_[l} ٌկоy3ģ/3잋TjxS]w,ylȈMW$ר̆ԩ}nO1TP.CϾI5+K< sg(d(\q#qn8YsN<;ӟ>/pbʜG¡?mqn<{ Vler"tvoz}N5UUT #IybϠuZ-p`ѥˎ~t|BX+e5hjx"ޏ q$+|gGT,&-L] ]C } Raf A6ÿ(3{TQڏ"|obxwW hIC0z L{vp̺ eDF]̉.D cy}^79 jhG^oX,0NLWTGu"Aڐlvh ^$?44΃ummǕ] 6O[oƲN 'txj[0U(%kȌ "š$dͪ9&#ϋ8C*fg<`Gq35bOB E6^2pG#-tq\7ncނkdK~o'^66-[bڇDfĨU%^-|n%bOBNzzѲ (=.ܩBJ 1joNc괢 `N'^ڎsP?!{3pY-_]pK 4:p ;Q] >\l+C Wuګ`5k_.ըF;o~9еg7R(qA=9F='3>G q\e5Jr?dV;QҭAT 1dz G-x7/gxukjj$ |H'8x \.V^__.jt@ ^w_ZTZ/?+V!#SS>(pbVͤPKM}!q~P R Q 'Ŭa*d ۿx.޵k|xzG"-]VhtvvbXR_`P>\gGo%&++QD EcV=P:PNqFJ=/ឈ0b}h^|!䗭CO>O0mW=Zw-??<:w{{!H%!șLXuFLx -PWC`g$J*"eT0p!KBBI ʠ,bnOKarxuIT4#+^GN+fسu3hVG&R̂ii,zF, b$@4'ެBmD$#C*H"I:$ewA.+B ;BD(@Rb>Ek89 J;=~<ԟx*E<0 ΢xzs3--w‡ 1QHBJDP-u fOrƓ1$Ef%h&fsW$9_@sC(~!H1h{!J`8ckF4VA#OٳA3rPn5߿osiq̀B AN V.݊k,R! s:3zt=bN emXbפ)/Gc?m.}b a1E~w:̩-|& rB&ްaV*ش536Vt+Y(ժi" ,@e&-*z)=4/ oU:nye"eb s/5NaZz1ڎyuhij8|0 lFƟ|#/,RPbW+E|QȿD2z:;j%tas!HyK#TӺYuķDIPS.@t&K18DN>5 wcU)aqC G1E<م=SQrѶmR3^WU`$ɢILYcsۢ HHG A~ȥhp^3>)db_SN@z 5 [S.3 ͲlD 7NET?C?ķ[~Y/Q+@C+˩ވxn$Rilߍ]8dT_ʨ':A60{Xr'H~%}Y@͕bVZ!ٛ+A\|rg`wGF8V_zKx+Y4Q(됞)fՑ ߫3,Y3"qAHMYDL8tG8 D8tWo =&TIŠD61raCQs}=^5's:OJ㳽Of[syKZ&ԃgPAuxhcW4-$\Zx9S"cܟ*Zxbؓ?1S3pן؋4W`\.D'<ޑ^y}4V{gq3ϛۺ!HZNLߗ(3č;Ewbb+RK'aGe|MN/~#C˛? ַZVI{.;;:'P#%ݨ* X3+qp0U8v,7ay0 R.f3Zz <9)T8B}2c7ɽk Ŀ;^]^[RLjrP'N?/_MqZDIc#ܣIO(F}K}aK%.{ Lkj ~vӑ_Cbg?̆$T>EMLﯞS^>O: su xS~{6J '<4Td WHb57j*.ZS]h6YkvաAwzҞPA]L: xh}%zt,ܤaQ iak8HQu:^8`ޖpp]?d/|VfA0=gURf{VD[\4i*R!#~T OP q4g ?ۿcw57u`șw`vw;?#*-+}B¨Kd9'%@Ŕ* 6#2ǨRzHwӱzr hI"4^g3}3)/Y<cN"HGM8?y}VܲB{u>Z.Zޅqgb@H8<5hn*%h7|\FO NR37;GR) W}K$BEiU9wŨ6 C}u}{`b4XxgYĂXumg(ɴnTH{>3M۽15yx30,^Nťu- -*>BhxNu}dvsx|h]VNXkBkj%#W-jW/.hQ)eL#mi~/P}Aek|髿swR/b~hbz)(p@(H2%dH\ط-\& /MKi4V#Jĝ;w'; 3y{kxRSX4;vyF~ YLs{zzRe }'O}̙ş5wZ Ma5]u EtsY7lADχ~!Ic iE"+81]iN% u7fx…_9ztli'lX;ZҶG,EH2.F<{Q+Q/ՕbqƟɹLNcfۧIj+9CYĥ. NAQʴmFG?cQU搔!1}p1:ӧK#Y?*p*-uiOۆr=$Xs(#iH[kž27y)f3x*{ȟ]vlm _o^\k6QڐdUEŧo$@CG9*rqW^[|F:G PCwKzvbSnvM`\~1]]^B{|?}s5o8ᥥZr`}؈E:PqLɎv|^Btrf[9Ni;@@oN e[C%+s;NG_Ms!are>S}ubmO.)_E5{xzݩLqj\]__ǧ?iGiTr:?tC})3?wcg?LZ(ѯZ-JUW)~ö'><||͏ Z-8~΢h [۾`>8C=Ά@5S>֊٥/h.e-{ 2FEBP)^H-N|Kvۇ=w_>/#BNlfNnS:^f;#1Ce*71jAk~ʐd l?Yx\%z~2E{ rٰkn W#3b\F jUڲǨR,;o6Z#024ɩEhCvٮ')KhfPd(Ŗ^pyRR-eqW//yg1&hXe.vQƳ7E|1ЏWWΜyV^'mC/rSܧn?.[Y̖+l_"m1G5p^Y[S{*blfV fRwZF/¶v&_5{!X=5˹v.CG>?/5{/ǧx}y[N&IQ,m1S߅X̆m^SU5rB٫;Ϣw\orbl "Gz$HMD4)yġRn@{}`[9Rla0jR ؞x֥q)e6,sܱ&Xt MgLLdžHa†& 5@ACm0+/<[p*{>nߎƜU]sssTl2eajgif NvOk/(k#rZ;/ͺY=k=RlEº H_eh8]v:]>hΏ/0麉&{ayxqlc4~PODa7D/sqGhD=EgO酶LP^2566Ah#бSpjM20O~6 Ÿ^XZbNfG))BPP16`%烱 |Z'G~}5ڮRCGԣUE-(s;r$θye$zzP7d9"LM&C?|$U5񢓅aG' T *XS Q25 &.,Dqp1T.`a D30G'gzh,.8STP✓a> *;m:u´9sWĽon-/ Sw#|1׳W<†4"lD>T0}2[NH+;0g.9Ԑ3\ȱReD&Yhc-bV*o$_zw=u> x c.We^ K Ry$- Q]S8{ZŅmX(\:G/ۑmV^x4adXeB&rwbOZgZ or6?֙{JHb^nu$uBZyaA?7ETÆT0`_.yqɳ*{&y=M[_!+uwbg|Jٮ] WMT b;wDyHxH4GcMZ{_~b+g}A&5ִg*m1}NŜaھ:ALI,]+ BWω\ЯLZ{;r(SҎyם݌_]W %LɀFj[69+Tvֆ$u)ߩ}{kg+xU~X?Gf('i.Fm6/=H0N[.%%=|{t\?U{U{ ꮡ;jZ9ܖ2k9ީK 2 iiwT"ݶC*ܼܰ6Z6 n0ff} a_|+Bȷ~rE]4i7ՇhmX9_ /Q_ bCRԱ4B=㉟D 8kvN<@FMe#~u[/rLrd^;Ctp׍Ao!o5ߪKԖ^[CObRp_fpoDh{ho/4˯K7\ȷvJ(i_Q.I7ӥ|O \B"D=xm$}Wݤ>6|?8R,>V}k/l)c+ɘג-Cўl[j>#|n\8~ut)%QOc6^yQ{gkӵ?9l;߁]8_8w_Dl}6"3x)_!~cZ'~ɾfy79u)ޔZ75i_l+w\gl;Fa3F?"$ W ,[#b_y:y"hBsƟR`k̇^B`ipcuH_w _#SvgZ֯o^u쿉|x٫M:TMlho~Q޴IҊQϖߎI1"KYDK:b)Z*~ v)n1͏杽wEO!jH|m'٢c}(>"7`r0u]?~~a|feD,j }m޴_j'ۛ-8wG+f>bJ 5s4㑒TyKUaY;Sl_y+px(zDJO`}]!Gr̋4R#Wf[ 7[xrc 00l Tt@(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/librarySuitcaseH.tiffHHProjectCenter-0.6.1/Images/projectSuitcaseH.tiff000644 001751 000024 00000011566 10672657534 022334 0ustar00multixstaff000000 000000 II*TxYy|~fLfO2d_HB !bPYElT- ^^۫^lhzVm+ElD@@> V7̷<<zl1hw8[N졐׆˭fB!J!@$4[mM9-d%ľmc]R 'g2 >TLL) D7nZZlLF'LƿM<`]Zݑ( G Df\.dN&C\Gs;L^_+X|yo0UZ] BK2d38N4@$@A@aN60d`p'O=r` p /N.aL8=qڋh *1qN.CQV**S,Y:ZmcÍơױ2BO}:i(m;A #<>i&;F8Gg5Ťg,2i*rYQ2|)js[ZM'#g"+' j\D)88IG|>zϻ>tZ&W >;CQB@6 )F,6L MfTP%vaƆ)yY}=1Yv'Q(R7}rB7qH] &YWF~ORH$q^N1ؤ`4Z?@_oݧ_] Gࠥ+^ў!('̆Q>s;oY0G##  8s vލ'7݄CHGgclaQ'2.ߞl̆'ȷ~Zw<ӓ)[% t\6;jVxH?Q\A1Eq? ܹryuh}yȈrG8|ʜX-}`<ѡSr _}Pޜ:qm<x붅BB!@=v;<{P|Gu4>UVq٩eXhrZyk۳m@ BAofV r#wqC6jhQeH )JK1R({<;'Wxwbš<iz@( X^=.7`oO-iVx-[ׯ&S(]1kEKENu:I"5š |I#2ŋ C$=&{ԊM5e3I 3CP47"B6dy8XM㯫[{ڵol|ۦkouEitVG_(e0*KȖ  O p "+ԫBb'Y ^q)̬FÎc괸^/.V?ĉ&o>ze] tك(##>x0au(-E>( Ja?zfl+/^~9z oŖŴb4] q(ԣxNq(9i^tl&J!'DjVeCXM损&iK\wݻ2HH\:ņ\^ʲ:3b]n*r5 5/< :'!Ȅp/GQI-ɊA1A$nTd^ ofoV~7} BA;[j;xx-+;1EnެYt]ԄKcaE4ݽ%]J(kQTGߡ]{Q:><|!r 0yl@TٺSBْ$p@u@vmE0lՅʮ&L59 l}-kwm0}m%^T>Xl>T*,ᆔFq$rI#AfwAՙ@vi=$ಚ%E,9tw2D ®ϩI؍v̽=QX=, ڙ8z:%v|3"P1|+KK:(=:)fn(VU\LMmx'H> b{@p4oǎOSM͢ҙ؇Y=G.AR9S}ZC4 h3Y%CiQ>zmN͊f-&O#E=x~E{.D*w6yN^+!">DI/_}U0H8C&-h U%3-wlvä>c-%D_ 񏷅w] vvݍVOQA\{/zJxVH 5Nxz䩕pW8vg74l|{ͅ`ݤR/6POp N*6oF6]m}pI]x%vбN;4b>jRla Ĉ+ݸm? mc> AT*I;/?g OGvvRȖJʇZ؀`,j& ܰ42dXw;E؍L;kw`ߘtB{.IQirUǓ|UXm^|-|mmmkкa祿!N/:MBzBG\`y%a!ܖ!#>g?$n!ˠz'|{h4p!8Ger1ҢI>T78z7D̒".S%]xh%Ia|5T"VRДZ +-VQ F5FM@yd/~ }V6NSO4'|S/ K5d\&˂wnT2͌Ͽ?An1|ԫ$i=X}( sSTmaPs:x KѤ.I!mmחK5VKn{CM&yHŏnPHԣkк/PW!vIKuG>9HB%Ztʞ=38Fg(5FӞz.pi5eK,I鉑y;B=ܷp!N!$$rc#w~vz_>m>]֯%GG>a~\~-u2Y&f=Wވl6= vw é_%>3KwFp${b #a60r:I$VhWR˙ĝ"-$a(td/?sh`hj2}@4{hZ/Dd윕wt CA7ae0{-ìW{Ɲ r!>anHBn HE3hcŒv/vi[|JWB9DnT]RP B>K}Lsvv{6ڰ~Uˈ`gN'cGq6oY.>ӣƝ` Fj-:pNoi _kdՒ HS/䮓xFgov GS;q?.y__ ~FsӍj HB3ԫe0փse"¾dBq2N&2 oX`%#acl՞32((I$+oQkֳ$qgpxc9ތagG:<(osG#m.v#g6[Ŏ*dޒqYw S 002 +:@Kfn(=R/home/diablos/pm_files/ProjectManager.tiffHHProjectCenter-0.6.1/Images/nibSuitcaseH.tiff000644 001751 000024 00000012236 10673165017 021420 0ustar00multixstaff000000 000000 II*XxYkU>==هmEVe%q"&#'U!pQ UTQ#UJ!N1؉pĤcgXdK%KV+j;wzV~9;9.ad>wGOр9ܹ5nTu=QCJ`L$#/æ7,:3992Ad1w00¯,Kd†HPD(DIZ@T$[{u{fp"ڽ4OVs\r#I$BRD`FQ#AdUUɠ:kg҆mYG.]zǗ/D67?f|\-{x(LqEFg|5eJ&Z_?,&`){|rhm&Hm_@nlJp-i"6AG@9$d~y >8 '9 q*>~|tl qȓ$^s2c!-Hq]aTIqOYl4?{$!O۾ބ3_EeƏk])PHÙ:.HDBpl89P~pfPx}k/5>rߙ pAȔyQƮv|'j|y5!ߓl= lbtaSV-]^i4f;|REúFS`<6yiNcX ? V&|FG\m'yvŲ ^OJB:n|fHK+9|o;6n񖔎99_lJB\.Gԧhdd{i*O]8ҥ lG =֍3-W ]u߆ryo>ӜBS:t(R8GOjPs)9;Ú@xR~j͘<F{Cw\`cGeLQzxs{z ;eǞ8R.ОO SU9?VE%(ث4Y@]H4taC ҕ+TUۢII!͝d,3.D{"1[ІPHޏ8hO=RG_[hPsԀ.xkaÄns-4l#t'$5hP P /coَ8H.UURkmΈ߹{yHGvLZ x :?   O2d!'WUD]ZUjZB8!kKg= LrF 9B 8~>RU sKX_FBID>-~tMJR3Z>3~ϧ{5T*ZB}Z#w,mԵVp6cVdM`oB9SKj]\?O>ʠEjXzS1KDZoXo6O|;oGݛ5C?AMEM^+% C8wU9ֈrIk:0X"AOGMykLj6(PȰjeԋdE5<i1Ͽx??[& ~a<HEA䜧Mg'KԃXv A>%"dTIp^7s ƎwXCm(+o7;wՍ?;D/ZYn:07X8X̟ V ky]g6NE.~cpkM }/I+8#6e6rDIRh*sS_R6{W"!_S2!/|f _dQr4V8ٞ0xEQ`+ǂ}>a=IU2e>PK̑0.b}PfcwEGw>~g;~~p\l'ٛb9..Qov|_"a.Wy63ϼfD;ld2v/S6f:΢Z_(3|]={znu1CL7|3鉞vM  ݶ2K6YǨlDd+ $z EѫJ>LZK>X,{+}Gȷ(ea&i4SgΊ>hha<uya>Z6#z7MB V(m^;snc)꩕AF3BW##ќ+ZpR{>l_iڳ=QZX_]\^ :ꏂXEwY>ͮE/\;`g{5 q࿟ ^FECh,Ԓ^lVNTs9s>b`;'C!]g1m\jjV6|+[ktU\ xC5~63w~"U[ɼi!PJ=]}ѷv zσ:}AO~rۼfv$V4h֪Sıd?svZFqkw ;'Mm~yD#_ tO%G5`N)rI]ʮk1UmvKۭACQL$}C? 'o۵|97es{F;H8$a>YϏ1V\._)._{!ʋڕuWwiZ}v[Xoi+_-x\q7|}l@23pnDqc mQ^X,snTKϯNkhfmDL,}dsql_U {NWL8_rZmfQZ}}ؿ %CXZǂٸZZvՙ /繺/#Ao/C 1qt: {}ն{7}߿-oc#e=tkh}ӟblOj,ZVߛnڼ_qo{Ⲭ,V.M_AoƸ+iF2i;QeuzK3006 P>@O(=R/home/heron/Development/gnustep/dev-apps/projectcenter/Images/nibSuitcaseH.tiffHHProjectCenter-0.6.1/Images/Clean.tiff000644 001751 000024 00000015146 10062333346 020056 0ustar00multixstaff000000 000000 II*)cm]9'| zp*X o|❰0!wG/˒ۆ?2/{u]>6ќ㤷KC9+~wn/d[ӄRT_b9+zw9y  $ND 3PTu ܱbd9+wq:~ %<1 9/tQwרoy?2g@} y!5-,$`8hΕ܍o4+*]_QP=00 >ub2&@8_fa.~bbbbŠ[[[[CCCwp$Q}^RѲtW&5555IJwwwwXXXXTTTZAAA} 1/Ouhz'5~qmr]J7 qqqrèxxxx[[[[WWWWWWWWUUUXNNNf777~)Eg###0L`;/#pʙmmmm[[[[YYYYWWWWWWWWWWWWWWWWUUUW==='>Y}Šu+h \\\\VVVVWWWWWWWWWWWWQQQ_'''"3Pv: |%&U xxxx````\\\\^^^^eeeeddddZZZZWWWWWWWWWWWWWWWWMMMf.BTc~Ueo24~󚛫GjGjjjVVVZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW+++r  lw\\\VVV]WWWWWWWWWWWWWWWWWWWWWWWWWWWW000poczcududududududuCS' Y`zernYtZoZmZmZmZmZlDV56=0._21mB?1fyLqlkLmJ^I\I]I\H[tgweu`o_rpnneyImBS)MKJFXMMG_qpfñI7.й,DZ*(&$=peudtcs]nkooo_tFY *Olkas̺QEDJ2/Լ-ʳ+)&%"dl}dtcsbs`pReqopoSj%0V ]X444210׾.η,ů*(%#!hk|csbraqZlL_tsqrk~3Cvh G43321/.и,ȱ*(&$! qiz_p\mWhNaJ]cwwusp4Ew33211/.Һ,ɲ+)'$" rflr^pReObNaM`J]I]Htk~mTm.;m-110/.Ѻ,˴+ì)'%#!~.) gyXkM`M`M`L_I[H\I\M`IkG[.=p_pTKֿ:к6˴,Į*('#xl`82 gyUhM_L_J]H[GZHZH[G\I\GZ5E8MeƸ]N:0v'ZQA;&" sz`sK]GZEXDVCVCVCVCUCVCWCV4D~M64281(s!bXG?.)  mvQcH\GZG[H[H[I[G[G[GZFYBT/>v20Ѻ.'!xkZPA9 .(  t V7̷<<zl1hw8[N졐׆˭fB!J!@$4[mM9-d%ľmc]R 'g2 >TLL) D7nZZlLF'LƿM<`]Zݑ( G Df\.dN&C\Gs;L^_+X|yo0UZ] BK2d38N4@$@A@aN60d`p'O=r` p /N.aL8=qڋh *1qN.CQV**S,Y:ZmcÍơױ2BO}:i(m;A #<>i&;F8Gg5Ťg,2i*rYQ2|)js[ZM'#g"+' j\D)88IG|>zϻ>tZ&W >;CQB@6 )F,6L MfTP%vaƆ)yY}=1Yv'Q(R7}rB7qH] &YWF~ORH$q^N1ؤ`4Z?@_oݧ_] Gࠥ+^ў!('̆Q>s;oY0G##  8s vލ'7݄CHGgclaQ'2.ߞl̆'ȷ~Zw<ӓ)[% t\6;jVxH?Q\A1Eq? ܹryuh}yȈrG8|ʜX-}`<ѡSr _}Pޜ:qm<x붅BB!@=v;<{P|Gu4>UVq٩eXhrZyk۳m@ BAofV r#wqC6jhQeH )JK1R({<;'Wxwbš<iz@( X^=.7`oO-iVx-[ׯ&S(]1kEKENu:I"5š |I#2ŋ C$=&{ԊM5e3I 3CP47"B6dy8XM㯫[{ڵol|ۦkouEitVG_(e0*KȖ  O p "+ԫBb'Y ^q)̬FÎc괸^/.V?ĉ&o>ze] tك(##>x0au(-E>( Ja?zfl+/^~9z oŖŴb4] q(ԣxNq(9i^tl&J!'DjVeCXM损&iK\wݻ2HH\:ņ\^ʲ:3b]n*r5 5/< :'!Ȅp/GQI-ɊA1A$nTd^ ofoV~7} BA;[j;xx-+;1EnެYt]ԄKcaE4ݽ%]J(kQTGߡ]{Q:><|!r 0yl@TٺSBْ$p@u@vmE0lՅʮ&L59 l}-kwm0}m%^T>Xl>T*,ᆔFq$rI#AfwAՙ@vi=$ಚ%E,9tw2D ®ϩI؍v̽=QX=, ڙ8z:%v|3"P1|+KK:(=:)fn(VU\LMmx'H> b{@p4oǎOSM͢ҙ؇Y=G.AR9S}ZC4 h3Y%CiQ>zmN͊f-&O#E=x~E{.D*w6yN^+!">DI/_}U0H8C&-h U%3-wlvä>c-%D_ 񏷅w] vvݍVOQA\{/zJxVH 5Nxz䩕pW8vg74l|{ͅ`ݤR/6POp N*6oF6]m}pI]x%vбN;4b>jRla Ĉ+ݸm? mc> AT*I;/?g OGvvRȖJʇZ؀`,j& ܰ42dXw;E؍L;kw`ߘtB{.IQirUǓ|UXm^|-|mmmkкa祿!N/:MBzBG\`y%a!ܖ!#>g?$n!ˠz'|{h4p!8Ger1ҢI>T78z7D̒".S%]xh%Ia|5T"VRДZ +-VQ F5FM@yd/~ }V6NSO4'|S/ K5d\&˂wnT2͌Ͽ?An1|ԫ$i=X}( sSTmaPs:x KѤ.I!mmחK5VKn{CM&yHŏnPHԣkк/PW!vIKuG>9HB%Ztʞ=38Fg(5FӞz.pi5eK,I鉑y;B=ܷp!N!$$rc#w~vz_>m>]֯%GG>a~\~-u2Y&f=Wވl6= vw é_%>3KwFp${b #a60r:I$VhWR˙ĝ"-$a(td/?sh`hj2}@4{hZ/Dd윕wt CA7ae0{-ìW{Ɲ r!>anHBn HE3hcŒv/vi[|JWB9DnT]RP B>K}Lsvv{6ڰ~Uˈ`gN'cGq6oY.>ӣƝ` Fj-:pNoi _kdՒ HS/䮓xFgov GS;q?.y__ ~FsӍj HB3ԫe0փse"¾dBq2N&2 oX`%#acl՞32((I$+oQkֳ$qgpxc9ތagG:<(osG#m.v#g6[Ŏ*dޒqYw S 002 +:@Kfn(=R/home/diablos/pm_files/ProjectManager.tiffHHProjectCenter-0.6.1/Images/ProjectCenter_uml.tiff000644 001751 000024 00000015144 07656023755 022475 0ustar00multixstaff000000 000000 II*VVVVTVVUVVUVVUVVVVVTVVUVVVVVTVVUVVUVVTVVVVVVVVTVVUVVVVVTVVVVVTVVUVVUVVUVVVVVTVVUVVVVVTVVUVVUVVUVVVV=9=v=9=vQHD˓=9=vF*$"!"-^<9<v0$#&;,V$$$<9;vD*$XaS{Xpj$y$$$$?=>v&*{SzPwPwPwPxjx%'$$$AAAv?$8V{PwPwPwPwPwPvD}A?@v-#ARxPwPwPwPwPwPw\_l{$$$$$$$$$$$$$$$$$$AAAv##"-"9SxPwPwPwPwPwOvvJ{w$$$<9<v##c"&a}PwPwPwPwPw\~w+|r$$$<9;v""!$ 'er{OtPvOsYzs:{<$$$=;=vQ 1z?z?$}mc$$$$$$$$$A@@vM!}$~rjƬ$$$$$$$$$??vF*$"!"-YAAAv0$#&;,V<9<vD*$XaS{Xpj$y$}<9;v&*{SzPwPwPwPxjx%'=;=v?$8V{PwPwPwPwPwPvD}A@@v-#ARxPwPwPwPwPwPw\_l{?@T\(R/home/phr/Developer/GNUstep/ProjectCenter/ProjectCenter/ProjectCentre_uml.tiffCreated with The GIMPHHProjectCenter-0.6.1/Images/ProjectCenter_rpm.tiff000644 001751 000024 00000015160 07656023755 022474 0ustar00multixstaff000000 000000 II*,'SBBB;;;003 222???&&&3000d&&&]]]tssu&#%#U"!p=>>>:::xv# &"O*(c  $$$)%"$  TTT䯭-+!) c`$   DDDKKKܗU*)l;;;JJJpppZZZVVVooovt.+"""&&&԰QO",LKG`f,KKKKK  + K(w|np|, #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "Protocols/ProjectType.h" #import "Protocols/CodeEditor.h" #import "Modules/Preferences/Saving/PCSavingPrefs.h" #import "Modules/Preferences/Misc/PCMiscPrefs.h" NSString *PCActiveProjectDidChangeNotification = @"PCActiveProjectDidChange"; @implementation PCProjectManager // ============================================================================ // ==== Intialization & deallocation // ============================================================================ - (id)init { if ((self = [super init])) { buildPanel = nil; launchPanel = nil; loadedFilesPanel = nil; findPanel = nil; // Prepare bundles bundleManager = [[PCBundleManager alloc] init]; projectTypes = [self loadProjectTypesInfo]; loadedProjects = [[NSMutableDictionary alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetSaveTimer:) name:PCSavePeriodDidChangeNotification object:nil]; fileManager = [[PCFileManager alloc] initWithProjectManager:self]; } return self; } - (BOOL)close { if ([self closeAllProjects] == NO) { return NO; } if ((editorManager != nil) && ([editorManager closeAllEditors] == NO)) { return NO; } return YES; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCProjectManager: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; if ([saveTimer isValid]) { [saveTimer invalidate]; } RELEASE(loadedProjects); RELEASE(fileManager); RELEASE(bundleManager); RELEASE(projectTypes); RELEASE(projectTypeAccessaryView); RELEASE(fileTypeAccessaryView); TEST_RELEASE(editorManager); TEST_RELEASE(projectInspector); TEST_RELEASE(loadedFilesPanel); TEST_RELEASE(buildPanel); TEST_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 setRefusesFirstResponder:YES]; [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); } - (NSMutableDictionary *)loadProjectTypesInfo { NSDictionary *bundlesInfo; NSEnumerator *enumerator; NSArray *bundlePaths; NSString *key; NSDictionary *infoTable; if (projectTypes == nil) { projectTypes = [[NSMutableDictionary alloc] init]; bundlesInfo = [bundleManager infoForBundlesType:@"project"]; bundlePaths = [bundlesInfo allKeys]; enumerator = [bundlePaths objectEnumerator]; while ((key = [enumerator nextObject])) { infoTable = [bundlesInfo objectForKey:key]; [projectTypes setObject:[infoTable objectForKey:@"PrincipalClassName"] forKey:[infoTable objectForKey:@"Name"]]; } } return projectTypes; } // ============================================================================ // ==== Timer handling // ============================================================================ - (BOOL)startSaveTimer { NSTimeInterval interval; interval = [[prefController stringForKey: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 // ============================================================================ - (PCBundleManager *)bundleManager { return bundleManager; } - (PCFileManager *)fileManager { return fileManager; } - (PCEditorManager *)editorManager { if (!editorManager) { // For non project editors editorManager = [[PCEditorManager alloc] init]; [editorManager setProjectManager:self]; } return editorManager; } - (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 { if (!loadedFilesPanel && [prefController boolForKey:UseTearOffWindows]) { loadedFilesPanel = [[PCProjectLoadedFilesPanel alloc] initWithProjectManager:self]; } return loadedFilesPanel; } - (void)showProjectLoadedFiles:(id)sender { if ([prefController boolForKey:UseTearOffWindows]) { [[self loadedFilesPanel] orderFront:nil]; } } - (NSPanel *)buildPanel { if (!buildPanel && [prefController boolForKey:UseTearOffWindows]) { buildPanel = [[PCProjectBuilderPanel alloc] initWithProjectManager:self]; } return buildPanel; } - (NSPanel *)launchPanel { if (!launchPanel && [prefController boolForKey:UseTearOffWindows]) { launchPanel = [[PCProjectLauncherPanel alloc] initWithProjectManager:self]; } return launchPanel; } - (NSPanel *)projectFinderPanel { return findPanel; } // ============================================================================ // ==== 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 { // PCLogInfo(self, @"saveAllProjectsIfNeeded"); // If this method was called not by NSTimer, check if we should save projects if ([prefController boolForKey:SaveOnQuit]) { [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 *)convertLegacyProject:(NSMutableDictionary *)pDict atPath:(NSString *)aPath { NSString *pPath = nil; NSString *projectClassName = nil; NSString *projectTypeName = nil; NSString *_projectPath = nil; NSFileManager *fm = [NSFileManager defaultManager]; NSString *_resPath = nil; NSArray *_fromDirArray = nil; NSString *_fromDirPath = nil; NSString *_file = nil; NSString *_2file = nil; NSString *_resFile = nil; unsigned i = 0; PCProject *project = nil; NSMutableArray *otherResArray = nil; NSString *plistFile = nil; projectClassName = [pDict objectForKey:PCProjectBuilderClass]; if (projectClassName == nil) { // Project created by 0.4 release or later return nil; } PCLogInfo(self, @"Converting legacy project"); // Gorm project type doesn't exists anymore if ([projectClassName isEqualToString:@"PCGormProj"] || [projectClassName isEqualToString:@"PCAppProj"]) { projectTypeName = [NSString stringWithString:@"Application"]; projectClassName = [projectTypes objectForKey:projectTypeName]; } // Handling directory layout _projectPath = [aPath stringByDeletingLastPathComponent]; _resPath = [_projectPath stringByAppendingPathComponent:@"Resources"]; [fm createDirectoryAtPath:_resPath attributes:nil]; // Documents _fromDirPath = [_projectPath stringByAppendingPathComponent:@"Documentation"]; _fromDirArray = [pDict objectForKey:PCDocuFiles]; for (i = 0; i < [_fromDirArray count]; i++) { _resFile = [_fromDirArray objectAtIndex:i]; _file = [_fromDirPath stringByAppendingPathComponent:_resFile]; _2file = [_resPath stringByAppendingPathComponent:_resFile]; [fm movePath:_file toPath:_2file handler:nil]; } [fm removeFileAtPath:_fromDirPath handler:nil]; // Images _fromDirPath = [_projectPath stringByAppendingPathComponent:@"Images"]; _fromDirArray = [pDict objectForKey:PCImages]; for (i = 0; i < [_fromDirArray count]; i++) { _resFile = [_fromDirArray objectAtIndex:i]; _file = [_fromDirPath stringByAppendingPathComponent:_resFile]; _2file = [_resPath stringByAppendingPathComponent:_resFile]; [fm movePath:_file toPath:_2file handler:nil]; } [fm removeFileAtPath:_fromDirPath handler:nil]; // Interfaces _fromDirArray = [pDict objectForKey:PCInterfaces]; for (i = 0; i < [_fromDirArray count]; i++) { _resFile = [_fromDirArray objectAtIndex:i]; _file = [_projectPath stringByAppendingPathComponent:_resFile]; _2file = [_resPath stringByAppendingPathComponent:_resFile]; [fm movePath:_file toPath:_2file handler:nil]; } // Other resources otherResArray = [NSMutableArray arrayWithArray:[pDict objectForKey:PCOtherResources]]; plistFile = [NSString stringWithFormat:@"%@Info.plist", [pDict objectForKey:PCProjectName]]; for (i = 0; i < [otherResArray count]; i++) { _resFile = [otherResArray objectAtIndex:i]; _file = [_projectPath stringByAppendingPathComponent:_resFile]; if ([_resFile isEqualToString:plistFile]) { _2file = [_resPath stringByAppendingPathComponent:@"Info-gnustep.plist"]; [otherResArray replaceObjectAtIndex:i withObject:@"Info-gnustep.plist"]; [pDict setObject:otherResArray forKey:PCOtherResources]; } else { _2file = [_resPath stringByAppendingPathComponent:_resFile]; } [fm movePath:_file toPath:_2file handler:nil]; } /* remove non meaningful keys */ [pDict removeObjectForKey: PCWindows]; [pDict removeObjectForKey: PCLastEditing]; // GNUmakefiles will be generated in [PCProject initWithProjectDictionary:] // Remove obsolete records from project dictionary and write to PC.project pPath = [[aPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"PC.project"]; project = [bundleManager objectForClassName:projectClassName bundleType:@"project" protocol:@protocol(ProjectType)]; projectTypeName = [project projectTypeName]; [pDict setObject:projectTypeName forKey:PCProjectType]; [pDict removeObjectForKey:PCProjectBuilderClass]; [pDict removeObjectForKey:PCPrincipalClass]; if ([pDict writeToFile:pPath atomically:YES] == YES) { // [[NSFileManager defaultManager] removeFileAtPath:aPath handler:nil]; } return project; } // aPath is path to a project file PC.project or project bundle *.pcproj. // Also it can be project directory where one of the above resides. - (PCProject *)openProjectAt:(NSString *)aPath makeActive: (BOOL)flag { NSString *projectPath = nil; NSString *projectFileType = nil; PCProject *project = nil; NSDictionary *wap = nil; // Check project path for invalid characters if ([aPath rangeOfString: @" "].location != NSNotFound || [aPath rangeOfString: @"\t"].location != NSNotFound || [aPath rangeOfString: @"\r"].location != NSNotFound || [aPath rangeOfString: @"\n"].location != NSNotFound) { if (NSRunAlertPanel (@"Open Project", @"Project path contains whitespaces.\n" @"GNUstep's build environment currently " @"can't handle that reliably.\n" @"Do you want to open a project anyway?\n", @"Open", @"Don't open", nil) != NSAlertDefaultReturn) { return nil; } } projectFileType = [[aPath lastPathComponent] pathExtension]; if ([projectFileType isEqualToString:@"pcproj"] || [projectFileType isEqualToString:@"project"]) { projectPath = [aPath stringByDeletingLastPathComponent]; } else { projectPath = aPath; } if ((project = [loadedProjects objectForKey:projectPath])== nil) { NSMutableDictionary *projectFile = nil; NSString *projectTypeName = nil; NSString *projectClassName = nil; BOOL isDir = NO; BOOL exists = NO; NSArray *tempList; exists = [[NSFileManager defaultManager] fileExistsAtPath:aPath isDirectory:&isDir]; if (!exists) { return nil; } if (isDir) { if ([projectFileType isEqualToString:@"pcproj"] == NO) { tempList = [fileManager filesWithExtension:@"pcproj" atPath:aPath includeDirs:YES]; if ([tempList count] > 0) { aPath = [tempList objectAtIndex:0]; } } aPath = [aPath stringByAppendingPathComponent:@"PC.project"]; projectFile = [NSMutableDictionary dictionaryWithContentsOfFile:aPath]; } else if ([projectFileType isEqualToString:@"project"]) { projectFile = [NSMutableDictionary dictionaryWithContentsOfFile:aPath]; } else { //TODO: Remove support of 0.3.x projects projectFile = [NSMutableDictionary dictionaryWithContentsOfFile:aPath]; if (projectFile != nil) { // For compatibility with 0.3.x projects project = [self convertLegacyProject:projectFile atPath:aPath]; } } if (projectFile == nil) return nil; if (project) {// Project was converted and created PC*Project with alloc&init aPath = [[aPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"PC.project"]; } else {// No conversion were taken projectTypeName = [projectFile objectForKey:PCProjectType]; projectClassName = [projectTypes objectForKey:projectTypeName]; if (projectClassName == nil) { NSRunAlertPanel(@"Open Project", @"Project type '%@' is not supported!\n" @"Report the bug, please!", @"OK", nil, nil, projectTypeName); return nil; } } project = [bundleManager objectForClassName:projectClassName bundleType:@"project" protocol:@protocol(ProjectType)]; if (!project || ![project openWithWrapperAt:aPath]) { NSRunAlertPanel(@"Open Project", @"Unable to open project '%@'.\nReport bug, please!", @"OK",nil,nil,aPath); return nil; } PCLogStatus(self, @"Project %@ loaded as %@", [project projectName], [project projectTypeName]); // Started only if there's not save timer yet [self startSaveTimer]; [project validateProjectDict]; if (!project) { return nil; } [loadedProjects setObject:project forKey:[project projectPath]]; if (flag) { [project setProjectManager:self]; // Windows and panels wap = [projectFile objectForKey:PCWindows]; 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] makeKeyAndOrderFront:self]; [self setActiveProject: project]; } } return project; } - (void)openProject { NSArray *fileTypes = nil; NSArray *files = nil; NSString *filePath = nil; NSFileManager *fm = [NSFileManager defaultManager]; BOOL isDir; NSArray *tempList = nil; fileTypes = [NSArray arrayWithObjects:@"pcproj",@"project",nil]; files = [fileManager filesOfTypes:fileTypes operation:PCOpenProjectOperation multiple:NO title:@"Open Project" accView:nil]; filePath = [files objectAtIndex:0]; [fm fileExistsAtPath:filePath isDirectory:&isDir]; if (isDir) { if (![[filePath pathExtension] isEqualToString:@"pcproj"]) { tempList = [fileManager filesWithExtension:@"pcproj" atPath:filePath includeDirs:YES]; if ([tempList count] > 0) { filePath = [tempList objectAtIndex:0]; } } filePath = [filePath stringByAppendingPathComponent:@"PC.project"]; } NSLog(@"PCPM: openProject: %@", filePath); if (filePath != nil) { [self openProjectAt:filePath makeActive:YES]; } } - (PCProject *)createProjectOfType:(NSString *)projectType path:(NSString *)aPath { NSString *className = [projectTypes objectForKey:projectType]; PCProject *projectCreator; PCProject *project = nil; if ((project = [loadedProjects objectForKey: [aPath stringByDeletingLastPathComponent]]) != nil) { [[project projectWindow] makeKeyAndOrderFront:self]; return project; } projectCreator = [bundleManager objectForClassName:className bundleType:@"project" protocol:@protocol(ProjectType)]; // NSLog(@"%@ CLASS: %@", className, projectCreator); if (!projectCreator) { NSRunAlertPanel(@"New Project", @"Could not create project directory %@.\n" @"No project creator. Report the bug, please!", @"OK", nil, nil, aPath); return nil; } // Create project directory if (![[PCFileManager defaultManager] createDirectoriesIfNeededAtPath:aPath]) { NSRunAlertPanel(@"New Project", @"Could not create project directory %@.\n" @"Check permissions of the directory where you" @" want to create a project", @"OK", nil, nil, aPath); return nil; } // Create project if (!(project = [projectCreator createProjectAt:aPath])) { NSRunAlertPanel(@"New Project", @"Project %@ could not be created.\nReport bug, please!", @"OK",nil,nil,[project projectName]); return nil; } [project setProjectManager:self]; [self startSaveTimer]; return project; } - (void)newProject { NSArray *files; NSString *filePath; NSString *projectType; PCProject *project; [self createProjectTypeAccessaryView]; files = [fileManager filesOfTypes:nil operation:PCSaveFileOperation multiple:NO title:@"New Project" accView:projectTypeAccessaryView]; filePath = [files objectAtIndex:0]; if (filePath != nil) { if ([filePath rangeOfString: @" "].location != NSNotFound || [filePath rangeOfString: @"\t"].location != NSNotFound || [filePath rangeOfString: @"\r"].location != NSNotFound || [filePath rangeOfString: @"\n"].location != NSNotFound) { if (NSRunAlertPanel (@"New Project", @"Are you sure you want to create a project with whitespace in it's path?\n" @"GNUstep's build environment currently can't handle that reliably.", @"OK", @"Cancel", nil) != NSAlertDefaultReturn) { return; } } projectType = [projectTypePopup titleOfSelectedItem]; if (!(project = [self createProjectOfType:projectType path:filePath])) { // No need to open alert panel. Alert panel was already opened // in createProjectOfType:path: method. return; } [loadedProjects setObject:project forKey: [project projectPath]]; [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(@"Save Project", @"Couldn't save project %@!", @"OK", nil, nil, [rootProject projectName]); return NO; } return YES; } - (BOOL)addProjectFiles { PCProject *project = [self rootActiveProject]; NSString *category = [[project projectBrowser] nameOfSelectedCategory]; NSString *categoryKey = [activeProject keyForCategory:category]; NSMutableArray *files = nil; NSString *file = nil; NSString *projectFile = nil; NSArray *fileTypes = [project fileTypesForCategoryKey:categoryKey]; files = [fileManager filesOfTypes:fileTypes operation:PCAddFileOperation multiple:NO title:nil accView:nil]; /* PCLogInfo(self, @"[addProjectFiles] %@ to category: %@ of project %@", files, categoryKey, [activeProject projectName]);*/ // Category may be changed category = [[project projectBrowser] nameOfSelectedCategory]; categoryKey = [activeProject keyForCategory:category]; // No files was selected if (!files) { return NO; } file = [[files objectAtIndex:0] lastPathComponent]; projectFile = [activeProject projectFileFromFile:[files objectAtIndex:0] forKey:categoryKey]; if (![projectFile isEqualToString:file]) { [activeProject addFiles:files forKey:categoryKey notify:YES]; } else { // 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 = nil; NSMutableArray *subprojs = [NSMutableArray array]; unsigned i; NSLog(@"Root active project '%@' category '%@'", [project projectName], category); // 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 { removeString = [NSString stringWithString:@"Remove files..."]; 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 File", @"Remove libraries from Project?", @"Remove", @"Cancel", nil); } else { ret = NSRunAlertPanel(@"Remove File", removeString, @"...from Project and Disk", @"...from Project only", @"Cancel"); } if (ret == NSAlertDefaultReturn || ret == NSAlertAlternateReturn) { BOOL flag = (ret == NSAlertDefaultReturn) ? YES : NO; // Remove from projectDict // If files localizable make them not localizable ret = [project removeFiles:files forKey:categoryKey notify:YES]; // 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 removeDirsIfEmpty:YES]; } if (!ret) { NSRunAlertPanel(@"Remove File", @"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 // TODO: Maybe fix it later? (add pending removal of files) [activeProject save]; } } else { return NO; } } // files return YES; } - (void)closeProject:(PCProject *)aProject { PCProject *currentProject = nil; currentProject = [loadedProjects objectForKey: [aProject projectPath]]; if (!currentProject) { return; } // Remove it from the loaded projects! [loadedProjects removeObjectForKey: [aProject projectPath]]; if ([loadedProjects count] == 0) { if (projectInspector) { [projectInspector close]; } if (loadedFilesPanel && [loadedFilesPanel isVisible]) { [loadedFilesPanel close]; } if (buildPanel && [buildPanel isVisible]) { [buildPanel close]; } if (launchPanel && [launchPanel isVisible]) { [launchPanel close]; } [self setActiveProject:nil]; [self stopSaveTimer]; } else if (currentProject == [self activeProject]) { [self setActiveProject:[[loadedProjects allValues] lastObject]]; } RELEASE(currentProject); } - (void)closeProject { if ([prefController boolForKey:SaveOnQuit]) { [activeProject save]; } [activeProject close:self]; } - (BOOL)closeAllProjects { PCProject *project = nil; NSEnumerator *enumerator = [[loadedProjects allValues] objectEnumerator]; // PCLogInfo(self, @"loaded %i projects", [loadedProjects count]); while ((project = [enumerator nextObject]) != nil) { if ([prefController boolForKey:SaveOnQuit]) { [project save]; } if ([project close:self] == NO) { return NO; } } return YES; } // ============================================================================ // ==== File actions // ============================================================================ - (void)openFileAtPath:(NSString *)filePath { editorManager = [self editorManager]; if (filePath != nil) { [editorManager openEditorForFile:filePath editable:YES windowed:YES]; [editorManager orderFrontEditorForFile:filePath]; } } - (void)openFile { NSArray *files = nil; NSString *filePath = nil; files = [fileManager filesOfTypes:nil operation:PCOpenFileOperation multiple:NO title:@"Open File" accView:nil]; filePath = [files objectAtIndex:0]; if (filePath) { [self openFileAtPath:filePath]; } } - (void)newFile { [[PCFileCreator sharedCreator] newFileInProject:activeProject]; } - (BOOL)saveFile { if (activeProject) { return [[[activeProject projectEditor] activeEditor] saveFile]; } else if (editorManager) { return [[editorManager activeEditor] saveFile]; } return NO; } - (BOOL)saveFileAs { NSArray *files = nil; NSString *filePath = nil; files = [fileManager filesOfTypes:nil operation:PCSaveFileOperation multiple:NO title:@"Save File As..." accView:nil]; filePath = [files objectAtIndex:0]; if (filePath != nil && ![[activeProject projectEditor] saveFileAs:filePath]) { NSRunAlertPanel(@"Save File As", @"Unable to save file as\n%@!", @"OK", nil, nil, filePath); return NO; } else { // TODO: implement 'Save File As' functionality wrt project and // non-project files /* PCProject *project = [projectManager activeProject]; NSString *categoryPath = nil; categoryPath = [NSString stringWithString:@"/"]; categoryPath = [categoryPath stringByAppendingPathComponent: [[project rootEntries] objectForKey:PCNonProject]]; [projectManager closeFile]; [project addFiles:[NSArray arrayWithObject:newFilePath] forKey:PCNonProject notify:YES]; [[activeProject projectEditor] openEditorForFile:newFilePath categoryPath:categoryPath editable:YES windowed:NO];*/ } return YES; } - (BOOL)saveFileTo { NSArray *files = nil; NSString *filePath = nil; files = [fileManager filesOfTypes:nil operation:PCSaveFileOperation multiple:NO title:@"Save File To..." accView:nil]; filePath = [files objectAtIndex:0]; if (filePath != nil && ![[activeProject projectEditor] saveFileTo:filePath]) { NSRunAlertPanel(@"Save File To", @"Unable to 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]; } @end @implementation PCProjectManager (Subprojects) - (BOOL)openNewSubprojectPanel { // PCLogInfo(self, @"newSubproject"); if (!nsPanel) { if ([NSBundle loadNibNamed:@"NewSubproject" owner:self] == NO) { NSRunAlertPanel(@"New Subproject", @"Internal error!" @" Install ProjectCenter again, please.", @"OK", nil, nil); 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]; [nsPanel setLevel:NSModalPanelWindowLevel]; [NSApp runModalForWindow:nsPanel]; return YES; } - (void)closeNewSubprojectPanel:(id)sender { [nsPanel orderOut:self]; [NSApp stopModal]; } - (void)createSubproject:(id)sender { PCProject *subproject = nil; NSString *spName = [nsNameField stringValue]; NSString *spPath = nil; NSString *spType = [nsTypePB titleOfSelectedItem]; // Check if subproject with entered name already exists. if (![activeProject doesAcceptFile:spName forKey:PCSubprojects]) { NSRunAlertPanel(@"New Subproject", @"Subproject with name %@ already exists in project %@", @"OK", nil, nil, spName, [activeProject projectName]); return; } [self closeNewSubprojectPanel:self]; 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; } - (PCProject *)createSubprojectOfType:(NSString *)projectType path:(NSString *)aPath { NSString *className = [projectTypes objectForKey:projectType]; PCProject *projectCreator; PCProject *subproject = nil; projectCreator = [bundleManager objectForClassName:className bundleType:@"project" protocol:@protocol(ProjectType)]; if (!(subproject = [projectCreator createProjectAt:aPath])) { NSRunAlertPanel(@"New Subproject", @"Internal error!" @" Install ProjectCenter again, please.", @"OK", nil, nil); 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 { NSString *tfString = nil; NSArray *subprojectList = nil; if ([aNotif object] != nsNameField) { return; } // Check for valid subproject names tfString = [nsNameField stringValue]; subprojectList = [[activeProject projectDict] objectForKey:PCSubprojects]; if (![subprojectList containsObject:tfString]) { [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; unsigned i; files = [fileManager filesOfTypes:[NSArray arrayWithObjects:@"subproj",nil] operation:PCAddFileOperation multiple:NO title:@"Add Subproject" accView:nil]; // 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 ProjectCenter-0.6.1/Framework/PCProjectLoadedFiles.m000644 001751 000024 00000022740 11157043720 023013 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" @implementation PCProjectLoadedFiles - (id)initWithProject:(PCProject *)aProj { id prefs; NSAssert(aProj, @"Project is mandatory!"); prefs = [[aProj projectManager] prefController]; PCLogStatus(self, @"init"); if ((self = [super init])) { project = aProj; editedFiles = [[NSMutableArray alloc] init]; // Column filesColumn = [(NSTableColumn *)[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 setDrawsGrid:NO]; [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 (![prefs boolForKey:UseTearOffWindows]) { [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]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editorDidChangeFileName:) name:PCEditorDidChangeFileNameNotification object:nil]; } return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog (@"PCProjectLoadedFiles: dealloc"); #endif [[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 { id editor = [aNotif object]; NSString *filePath = nil; int row; if ([editor editorManager] != [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 { id editor = [aNotif object]; NSString *filePath = [editor path]; if ([editor editorManager] != [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 { id editor = [aNotif object]; NSString *filePath = nil; unsigned index; unsigned filesCount; if ([editor editorManager] != [project projectEditor]) { return; } if ((filesCount = [editedFiles count]) > 0) { filePath = [editor path]; index = [[self editedFilesRep] indexOfObject:filePath]; if (index < filesCount) { [filesList selectRow:index byExtendingSelection:NO]; } } } - (void)editorDidChangeFileName:(NSNotification *)aNotif { NSDictionary *_editorDict = [aNotif object]; id _editor = [_editorDict objectForKey:@"Editor"]; NSString *_oldFileName = nil; NSString *_newFileName = nil; unsigned index; if ([_editor editorManager] != [project projectEditor]) { return; } _oldFileName = [_editorDict objectForKey:@"OldFile"]; _newFileName = [_editorDict objectForKey:@"NewFile"]; if ([editedFiles count] > 0) { index = [editedFiles indexOfObject:_oldFileName]; [editedFiles replaceObjectAtIndex:index withObject:_newFileName]; [filesList reloadData]; [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 ProjectCenter-0.6.1/Framework/PCBundleManager.m000644 001751 000024 00000025102 11157560560 022016 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ // TODO: Finish support for third party bundles. // It involves support for user defined bundle directories // through preferences. Now supported are: // - PC application resource dir // (GNUSTEP_SYSTEM_APPS/ProjectCenter.app/Resources) // - GNUSTEP_SYSTEM_LIBRARY/Bundles/ProjectCenter // (NSApplicationSupportDirectory) #import #import #import @implementation PCBundleManager //---------------------------------------------------------------------------- // Init and free methods //---------------------------------------------------------------------------- - (id)init { if ((self = [super init])) { loadedBundles = [[NSMutableDictionary alloc] init]; bundlesInfo = [[NSMutableDictionary alloc] init]; } return self; } - (void)dealloc { RELEASE(loadedBundles); RELEASE(bundlesInfo); [super dealloc]; } // - (NSString *)resourcePath { NSString *path = [[NSBundle mainBundle] resourcePath]; if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { [NSException raise:@"PCBundleManagerPathException" format:@"ProjectCenter installed incorrectly"]; return nil; } return path; } // --- Handling of bundles' Info.table dictionaries without actual // --- bundles loading // bundlesInfo is a dictionary. key/value pair is the following: // (NSString *) (NSDictionary *) // "full path of a bundle" = "Info.table contents" - (NSDictionary *)infoForBundlesType:(NSString *)extension { NSArray *bundles; NSEnumerator *enumerator; NSString *bundlePath; NSString *infoTablePath; NSDictionary *infoTable; NSMutableDictionary *reqBundlesInfo; reqBundlesInfo = [NSMutableDictionary dictionary]; bundles = [NSBundle pathsForResourcesOfType:extension inDirectory:[self resourcePath]]; enumerator = [bundles objectEnumerator]; while ((bundlePath = [enumerator nextObject])) { infoTablePath = [NSString stringWithFormat:@"%@/Resources/Info.table", bundlePath]; // TODO: fill 'reqBundlesInfo' with element from 'bundlesInfo' if // exists infoTable = [NSDictionary dictionaryWithContentsOfFile:infoTablePath]; [reqBundlesInfo setObject:infoTable forKey:bundlePath]; [bundlesInfo setObject:infoTable forKey:bundlePath]; } return reqBundlesInfo; } // Key value can be checked against NSString and NSArray values only. - (NSDictionary *)infoForBundleType:(NSString *)extension keyName:(NSString *)key keyContains:(NSString *)value { NSDictionary *reqBundlesInfo; NSEnumerator *enumerator; NSString *bundlePath; id keyValue; NSDictionary *infoTable; if (extension == nil) { return nil; } reqBundlesInfo = [self infoForBundlesType:extension]; enumerator = [[reqBundlesInfo allKeys] objectEnumerator]; while ((bundlePath = [enumerator nextObject])) { infoTable = [reqBundlesInfo objectForKey:bundlePath]; if (key == nil || value == nil) { break; } keyValue = [infoTable objectForKey:key]; if ([keyValue isKindOfClass:[NSString class]] && [keyValue isEqualToString:value]) { break; } else if ([keyValue isKindOfClass:[NSArray class]] && [keyValue containsObject:value]) { break; } else { infoTable = nil; } } return infoTable; } - (NSDictionary *)infoForBundleName:(NSString *)name type:(NSString *)type { NSDictionary *reqBundlesInfo = [self infoForBundlesType:type]; NSEnumerator *enumerator = [[reqBundlesInfo allKeys] objectEnumerator]; NSString *bundlePath; NSDictionary *infoTable; while ((bundlePath = [enumerator nextObject])) { infoTable = [reqBundlesInfo objectForKey:bundlePath]; if ([[infoTable objectForKey:@"Name"] isEqualToString:name]) { break; } else { infoTable = nil; } } return infoTable; } - (NSString *)classNameForBundleType:(NSString*)type fileName:(NSString *)fileName { NSString *fileExtension = [fileName pathExtension]; NSDictionary *infoTable = nil; NSString *className = nil; infoTable = [self infoForBundleType:type keyName:@"FileTypes" keyContains:fileExtension]; className = [infoTable objectForKey:@"PrincipalClassName"]; return className; } - (NSString *)bundlePathWithName:(NSString *)bundleName { NSArray *bundlePaths = nil; NSString *bundleFullPath = nil; NSEnumerator *enumerator = nil; // Search for bundle full path in bundlesInfo dictionary bundlePaths = [bundlesInfo allKeys]; enumerator = [bundlePaths objectEnumerator]; // NSLog(@"Bundle fullpath method #1: %@", // [[self resourcePath] stringByAppendingPathComponent:bundleName]); while ((bundleFullPath = [enumerator nextObject])) { if ([[bundleFullPath lastPathComponent] isEqualToString:bundleName]) { break; } } // NSLog(@"Bundle fullpath method #2: %@", bundleFullPath); return bundleFullPath; } // --- Invokes loading of bundle - (id)objectForClassName:(NSString *)className bundleType:(NSString *)bundleExtension protocol:(Protocol *)proto { Class objectClass; if (!className) { return nil; } if ([self bundleOfType:bundleExtension withClassName:className] == nil) { NSLog(@"Bundle for class %@ NOT FOUND!", className); return nil; } objectClass = NSClassFromString(className); if (proto != nil && ![objectClass conformsToProtocol:proto]) { [NSException raise:NOT_A_PROJECT_TYPE_EXCEPTION format:@"%@ does not conform to protocol!", className]; return nil; } return [[objectClass alloc] init]; } - (id)objectForBundleWithName:(NSString *)name type:(NSString *)extension protocol:(Protocol *)proto { NSDictionary *infoTable; NSString *className; infoTable = [self infoForBundleName:name type:extension]; className = [infoTable objectForKey:@"PrincipalClassName"]; return [self objectForClassName:className bundleType:extension protocol:proto]; } - (id)objectForBundleType:(NSString *)extension protocol:(Protocol *)proto fileName:(NSString *)fileName { NSString *className; className = [self classNameForBundleType:extension fileName:fileName]; return [self objectForClassName:className bundleType:extension protocol:proto]; } // --- Bundle loading - (NSBundle *)bundleOfType:(NSString *)type withClassName:(NSString *)className { NSArray *bundlePaths = nil; NSString *bundleFullPath = nil; NSDictionary *infoTable = nil; NSEnumerator *enumerator = nil; NSString *bundleName = nil; NSString *principalClass; // Search for bundle full path in bundlesInfo dictionary bundlePaths = [bundlesInfo allKeys]; enumerator = [bundlePaths objectEnumerator]; while ((bundleFullPath = [enumerator nextObject])) { if ([[bundleFullPath pathExtension] isEqualToString:type]) { infoTable = [bundlesInfo objectForKey:bundleFullPath]; principalClass = [infoTable objectForKey:@"PrincipalClassName"]; if ([className isEqualToString:principalClass]) { break; } } } // NSLog(@"bundleForClassName: %@ path %@", className, bundleFullPath); // Extract from full bundle path it's name and extension bundleName = [bundleFullPath lastPathComponent]; if (![self loadBundleIfNeededWithName:bundleName]) { return nil; } return [loadedBundles objectForKey:bundleFullPath]; } - (BOOL)loadBundleIfNeededWithName:(NSString *)bundleName { NSString *bundleFullPath = [self bundlePathWithName:bundleName]; // Check if bundle allready loaded if ([[loadedBundles allKeys] containsObject:bundleFullPath] == NO) { return [self loadBundleWithFullPath:bundleFullPath]; } return YES; } - (void)loadBundlesWithExtension:(NSString *)extension { NSEnumerator *enumerator; NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isDir; NSString *path = [self resourcePath]; if (path) { [self loadBundlesAtPath:path withExtension:extension]; } // Load third party bundles enumerator = [NSSearchPathForDirectoriesInDomains (NSApplicationSupportDirectory, NSAllDomainsMask, YES) objectEnumerator]; while ((path = [enumerator nextObject]) != nil) { path = [path stringByAppendingPathComponent:@"ProjectCenter"]; if ([fileManager fileExistsAtPath:path isDirectory:&isDir] && isDir) { PCLogInfo(self, @"Loading bundles at %@", path); [self loadBundlesAtPath:path withExtension:extension]; } } } - (void)loadBundlesAtPath:(NSString *)path withExtension:(NSString *)extension { NSEnumerator *enumerator; NSString *bundleName; NSArray *dir; dir = [[NSFileManager defaultManager] directoryContentsAtPath:path]; enumerator = [dir objectEnumerator]; while ((bundleName = [enumerator nextObject])) { if ([[bundleName pathExtension] isEqualToString:extension]) { NSString *fullPath = nil; fullPath = [NSString stringWithFormat:@"%@/%@", path, bundleName]; [self loadBundleWithFullPath:fullPath]; } } } - (BOOL)loadBundleWithFullPath:(NSString *)path { NSBundle *bundle = nil; if ((bundle = [NSBundle bundleWithPath:path]) && [bundle load]) { [loadedBundles setObject:bundle forKey:path]; PCLogInfo(self, @"Bundle %@ successfully loaded!", path); } else { NSRunAlertPanel(@"Load Bundle", @"Could not load bundle %@!", @"OK", nil, nil, path); return NO; } return YES; } - (NSDictionary *)loadedBundles { return loadedBundles; } @end ProjectCenter-0.6.1/Framework/PCMakefileFactory.m000644 001751 000024 00000035424 11474545755 022402 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2010 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import #import "../Modules/Preferences/Build/PCBuildPrefs.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# Other sources\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" #define COMMENT_LOCALIZATION @"\n\n#\n# Localization\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: (PCProject *)project { id prefs = [[project projectManager] prefController]; NSString *buildDir = [prefs stringForKey:RootBuildDirectory]; NSString *prName = [project projectName]; NSString *buildName = [prName stringByAppendingPathExtension: @"build"]; NSString *instDomain = [[project projectDict] objectForKey:PCInstallDomain]; 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: @"ifeq ($(GNUSTEP_MAKEFILES),)\n"]; [mfile appendString: @" GNUSTEP_MAKEFILES := $(shell gnustep-config "]; [mfile appendString: @"--variable=GNUSTEP_MAKEFILES 2>/dev/null)\n"]; [mfile appendString: @"endif\n"]; [mfile appendString: @"ifeq ($(GNUSTEP_MAKEFILES),)\n"]; [mfile appendString: @" $(error You need to set GNUSTEP_MAKEFILES"]; [mfile appendString: @" before compiling!)\n"]; [mfile appendString: @"endif\n"]; if ([instDomain isEqualToString: @"LOCAL"] || [instDomain isEqualToString: @"SYSTEM"] || [instDomain isEqualToString: @"USER"] || [instDomain isEqualToString: @"NETWORK"]) { [mfile appendString: [NSString stringWithFormat: @"\nGNUSTEP_INSTALLATION_DOMAIN = %@\n", instDomain]]; } /* If GNUSTEP_INSTALLATION_DOMAIN was not set explicitly by the * user, it should not be specified; gnustep-make will use the * default - normally, but not necessarily, LOCAL. */ [mfile appendString: @"\ninclude $(GNUSTEP_MAKEFILES)/common.make\n"]; if (![buildDir isEqualToString: @""] && buildDir != nil) { [mfile appendString: [NSString stringWithFormat: @"\nGNUSTEP_BUILD_DIR = %@\n", [buildDir stringByAppendingPathComponent:buildName]]]; } } - (BOOL)createPreambleForProject:(PCProject *)project { NSMutableString *mfp = [[NSMutableString alloc] init]; NSString *mfl = nil; NSArray *array = nil; NSDictionary *projectDict = [project projectDict]; NSString *projectPath = [project projectPath]; NSString *projectType = [project projectTypeName]; // 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]]]; [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]]; if ([projectType isEqualToString: @"Tool"]) { // Additional TOOL libraries [mfp appendString: @"# Additional TOOL libraries to link\n"]; [mfp appendString: @"ADDITIONAL_TOOL_LIBS += "]; array = [projectDict objectForKey:PCLibraries]; if (array && [array count]) { NSString *tmp; NSEnumerator *enumerator = [array objectEnumerator]; while ((tmp = [enumerator nextObject])) { if (![tmp isEqualToString: @"gnustep-base"]) { [mfp appendString: [NSString stringWithFormat: @"-l%@ ",tmp]]; } } } } else { // Additional GUI libraries // TODO: Let the user select objc, base, gui libraries/frameworks // on the gui - the following works well for GUI stuff only. [mfp appendString: @"# Additional GUI libraries to link\n"]; [mfp appendString: @"ADDITIONAL_GUI_LIBS += "]; 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"]; // Write the new file to disc! mfl = [projectPath stringByAppendingPathComponent: @"GNUmakefile.preamble"]; if (![mfp writeToFile:mfl atomically:YES]) { NSRunAlertPanel(@"Create Makefile", @"Couldn't create %@", @"Ok",nil,nil, mfl); return NO; } return YES; } - (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"]; if (![fm copyPath:template toPath:postamble handler:nil]) { NSRunAlertPanel(@"Create Makefile", @"Couldn't create %@", @"Ok",nil,nil, postamble); return NO; } return YES; } - (void)appendString:(NSString *)aString { NSAssert(mfile, @"No valid makefile available!"); NSAssert(aString, @"No valid string!"); [mfile appendString:aString]; } - (void)appendLibraries:(NSArray *)array { NSMutableArray *libs = [NSMutableArray arrayWithArray:array]; NSString *lib = nil; NSEnumerator *enumerator = nil; [libs removeObject: @"gnustep-base"]; [libs removeObject: @"gnustep-gui"]; if (libs == nil || [libs count] == 0) { return; } [self appendString: @"\n\n#\n# Libraries\n#\n"]; [self appendString: [NSString stringWithFormat: @"%@_LIBRARIES_DEPEND_UPON += ",pnme]]; enumerator = [libs objectEnumerator]; while ((lib = [enumerator nextObject])) { [self appendString: [NSString stringWithFormat: @"-l%@ ",lib]]; } } - (void)appendHeaders:(NSArray *)array { if (array == nil || [array count] == 0) return; [self appendHeaders:array forTarget:pnme]; } - (void)appendHeaders:(NSArray *)array forTarget:(NSString *)target { if (array == nil || [array count] == 0) return; [self appendString:COMMENT_HEADERS]; [self appendString: [NSString stringWithFormat: @"%@_HEADER_FILES = \\\n", target]]; [self appendString: [array componentsJoinedByString: @" \\\n"]]; } - (void)appendClasses:(NSArray *)array { if (array == nil || [array count] == 0) { return; } [self appendClasses:array forTarget:pnme]; } - (void)appendClasses:(NSArray *)array forTarget:(NSString *)target { if (array == nil || [array count] == 0) { return; } [self appendString:COMMENT_CLASSES]; [self appendString: [NSString stringWithFormat: @"%@_OBJC_FILES = \\\n",target]]; [self appendString: [array componentsJoinedByString: @" \\\n"]]; } - (void)appendOtherSources:(NSArray *)array { if (array == nil || [array count] == 0) { return; } [self appendOtherSources: array forTarget: pnme]; } - (void)appendOtherSources:(NSArray *)array forTarget: (NSString *)target { NSMutableArray *marray = nil; NSMutableArray *oarray = nil; NSEnumerator *oenum; NSString *file; if (array == nil || [array count] == 0) { return; } // Other Sources can have both .m files and non .m files oenum = [array objectEnumerator]; while ((file = [oenum nextObject])) { if ([file hasSuffix: @".m"]) { if (marray == nil) { marray = [NSMutableArray array]; } [marray addObject: file]; } else // non .m file { if (oarray == nil) { oarray = [NSMutableArray array]; } [oarray addObject: file]; } } [self appendString:COMMENT_CFILES]; // Add other sources if any if (oarray && [oarray count] != 0) { oenum = [oarray objectEnumerator]; [self appendString: [NSString stringWithFormat: @"%@_C_FILES = ", target]]; while ((file = [oenum nextObject])) { [self appendString: [NSString stringWithFormat: @"\\\n%@ ",file]]; } [self appendString: @"\n\n"]; } // Add .m files if any if (marray && [marray count] != 0) { oenum = [marray objectEnumerator]; [self appendString: [NSString stringWithFormat: @"%@_OBJC_FILES += ",pnme]]; while ((file = [oenum nextObject])) { [self appendString: [NSString stringWithFormat: @"\\\n%@ ", file]]; } } } - (void)appendResources:(NSArray *)array inDir:(NSString *)dir { int i = 0; int count = [array count]; NSString *string = nil; NSString *item = nil; NSString *eol = [NSString stringWithString: @"\\\n"]; if (array == nil || count <= 0) { return; } // Header [self appendString:COMMENT_RESOURCES]; [self appendString: [NSString stringWithFormat: @"%@_RESOURCE_FILES = \\\n",pnme]]; // Items for (i = 0; i < count; i++) { item = [array objectAtIndex:i]; string = [NSString stringWithFormat: @"%@/%@ %@", dir, item, eol]; [self appendString:string]; if (i == (count-2)) { eol = [NSString stringWithString: @"\n"]; } } } - (void)appendResourceItems:(NSArray *)array { if (array == nil || [array count] <= 0) { return; } [self appendString: @"\\\n"]; [self appendString: [array componentsJoinedByString: @" \\\n"]]; } - (void)appendLocalizedResources:(NSArray *)resources forLanguages:(NSArray *)languages { NSString *langs = [languages componentsJoinedByString: @" "]; NSString *string = nil; NSString *item = nil; NSString *eol = [NSString stringWithString: @"\\\n"]; int i = 0; int count = [resources count]; if (resources == nil || count <= 0) { return; } // Header [self appendString:COMMENT_LOCALIZATION]; // Languages string = [NSString stringWithFormat: @"%@_LANGUAGES = %@\n", pnme, langs]; [self appendString:string]; // Items [self appendString: [NSString stringWithFormat: @"%@_LOCALIZED_RESOURCE_FILES = \\\n",pnme]]; for (i = 0; i < count; i++) { if (i == (count-1)) { eol = [NSString stringWithString: @"\n"]; } item = [resources objectAtIndex:i]; string = [NSString stringWithFormat: @"%@ %@", item, eol]; [self appendString:string]; } } - (void)appendSubprojects:(NSArray*)array { NSString *tmp = nil; NSEnumerator *enumerator = nil; if (array == nil || [array count] == 0) { return; } [self appendString:COMMENT_SUBPROJECTS]; [self appendString: @"SUBPROJECTS = "]; 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 ProjectCenter-0.6.1/Framework/PCProject.m000644 001751 000024 00000135074 11472344201 020722 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2010 Free Software Foundation Authors: Philippe C.D. Robert 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. */ // TODO: Split into several files with categories // TODO: Take care of Libraries(gnustep-gui, gnustep-base) // and Non Project Files #import #import #import #import #import #import #import #import #import #import #import #import #import #import "Modules/Preferences/Saving/PCSavingPrefs.h" #import "Modules/Preferences/Misc/PCMiscPrefs.h" // #import // #import NSString *PCProjectDictDidChangeNotification = @"PCProjectDictDidChangeNotification"; NSString *PCProjectDictDidSaveNotification = @"PCProjectDictDidSaveNotification"; NSString *PCProjectBreakpointNotification = @"PCProjectBreakpointNotification"; @implementation PCProject // ============================================================================ // ==== Init and free // ============================================================================ - (id)init { if ((self = [super init])) { projectDict = [[NSMutableDictionary alloc] init]; projectPath = [[NSString alloc] init]; projectName = [[NSString alloc] init]; buildOptions = [[NSMutableDictionary alloc] init]; loadedSubprojects = [[NSMutableArray alloc] init]; projectBuilder = nil; projectLauncher = nil; isSubproject = NO; activeSubproject = nil; } return self; } - (PCProject *)openWithWrapperAt:(NSString *)aPath { BOOL isDir = NO; BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath: aPath isDirectory: &isDir]; if(isDir && exists) { projectFileWrapper = [[NSFileWrapper alloc] initWithPath: aPath]; if(projectFileWrapper != nil) { NSDictionary *wrappers = [projectFileWrapper fileWrappers]; NSData *data = [[wrappers objectForKey: @"PC.project"] regularFileContents]; NSData *userData = [[wrappers objectForKey: [NSUserName() stringByAppendingPathExtension: @"project"]] regularFileContents]; NSMutableDictionary *dict = [[[[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding] propertyList] mutableCopy]; NSDictionary *udict = [[[NSString alloc] initWithData: userData encoding: NSASCIIStringEncoding] propertyList]; if (udict != nil) [dict addEntriesFromDictionary: udict]; [udict release]; [self assignProjectDict:dict atPath: aPath]; } } else { NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile: aPath]; projectFileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers: [NSMutableDictionary dictionaryWithCapacity: 3]]; [projectFileWrapper addRegularFileWithContents: [NSData dataWithBytes: [[dict description] cString] length: [[dict description] length]] preferredFilename: @"PC.project"]; [self assignProjectDict: dict atPath: aPath]; } return self; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCProject %@: dealloc", projectName); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(projectDict); RELEASE(projectName); RELEASE(projectPath); RELEASE(buildOptions); RELEASE(loadedSubprojects); // Initialized in -setProjectManager: of project and // in setSuperProject: of subproject RELEASE(projectWindow); RELEASE(projectBrowser); RELEASE(projectLoadedFiles); RELEASE(projectEditor); TEST_RELEASE(projectBuilder); TEST_RELEASE(projectLauncher); if (isSubproject == YES) { RELEASE(rootProject); RELEASE(superProject); } [super dealloc]; } - (void)loadPreferences:(NSNotification *)aNotification { id prefs = [projectManager prefController]; rememberWindows = [prefs boolForKey:RememberWindows]; keepBackup = [prefs boolForKey:KeepBackup]; } // ============================================================================ // ==== Project handling // ============================================================================ // --- Dictionary - (BOOL)assignProjectDict:(NSDictionary *)pDict atPath:(NSString *)pPath { NSString *tempPath = nil; NSAssert(pDict,@"No valid project dictionary!"); PCLogStatus(self, @"assignProjectDict at %@", pPath); if (projectDict) { [projectDict release]; } projectDict = [[NSMutableDictionary alloc] initWithDictionary:pDict]; // Project path if ([[pPath lastPathComponent] isEqualToString:@"PC.project"] || [[[pPath lastPathComponent] pathExtension] isEqualToString:@"pcproj"]) { tempPath = [pPath stringByDeletingLastPathComponent]; if ([[tempPath pathExtension] isEqualToString:@"pcproj"]) { tempPath = [tempPath stringByDeletingLastPathComponent]; } [self setProjectPath:tempPath]; } else { [self setProjectPath:pPath]; } [self setProjectName:[projectDict objectForKey:PCProjectName]]; [self writeMakefile]; [self save]; return 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) { PCLogInfo(self, @"invalid dict entry for key %@", key); return NO; } } return YES; } - (void)validateProjectDict { if ([self isValidDictionary:projectDict] == NO) { [self updateProjectDict]; NSRunAlertPanel(@"Open Project!", @"The project file was converted from previous version!\n" @"Please make sure that every project attribute contain" @" valid values!", @"OK",nil,nil); } } - (void)setProjectDictObject:(id)object forKey:(NSString *)key notify:(BOOL)yn { id currentObject = [projectDict objectForKey:key]; NSMutableDictionary *notifObject = [NSMutableDictionary dictionary]; if ([object isKindOfClass:[NSString class]] && [currentObject isEqualToString:object]) { return; } [projectDict setObject:object forKey:key]; // Send in notification project itself and project dictionary object key // that was changed [notifObject setObject:self forKey:@"Project"]; [notifObject setObject:key forKey:@"Attribute"]; if (yn == YES) { [[NSNotificationCenter defaultCenter] postNotificationName:PCProjectDictDidChangeNotification object:notifObject]; } } - (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 opimization [projectDict setObject:[origin objectForKey:key] forKey:key]; } } [self save]; } - (NSDictionary *)projectDict { return (NSDictionary *)projectDict; } // --- Name and path - (NSString *)projectName { return projectName; } - (void)setProjectName:(NSString *)aName { if (projectName) { [projectName autorelease]; } projectName = [aName copy]; // [projectWindow setFileIconTitle:projectName]; } - (NSString *)projectPath { return projectPath; } - (void)setProjectPath:(NSString *)aPath { if (projectPath) { [projectPath autorelease]; } projectPath = [aPath copy]; } // --- Saving - (BOOL)isProjectChanged { return [projectWindow isDocumentEdited]; } // 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 NO; } } return YES; } - (BOOL)saveProjectWindowsAndPanels { NSMutableDictionary *windows = [NSMutableDictionary dictionary]; NSString *projectFile = nil; NSMutableDictionary *projectFileDict = nil; projectFile = [NSUserName() stringByAppendingPathExtension:@"project"]; projectFileDict = [[NSMutableDictionary alloc] initWithCapacity:4]; // 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"]; } // ProjectBrowser [windows setObject:NSStringFromRect([[projectBrowser view] frame]) forKey:@"ProjectBrowser"]; // Write to file and exit if preferences wasn't set to save panels if (!rememberWindows) { [projectFileDict setObject:windows forKey:PCWindows]; [projectFileDict writeToFile:projectFile atomically:YES]; [projectFileDict release]; 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"]; } // 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:PCWindows]; // Now save it directly to username.project file [projectFileDict setObject:windows forKey:PCWindows]; [projectFileDict setObject: [[NSCalendarDate date] description] forKey: PCLastEditing]; // add the file and write the wrapper. [projectFileWrapper addRegularFileWithContents: [NSData dataWithBytes: [[projectFileDict description] cString] length: [[projectFileDict description] length]] preferredFilename: projectFile]; [projectFileWrapper writeToFile: wrapperPath atomically: YES updateFilenames: YES]; // release [projectFileDict release]; return YES; } - (BOOL)save { NSFileManager *fm = [NSFileManager defaultManager]; int spCount = [loadedSubprojects count]; int i; NSString *wrapperFile = [projectName stringByAppendingPathExtension: @"pcproj"]; NSString *file = @"PC.project"; NSString *backup = [wrapperPath stringByAppendingPathExtension:@"backup"]; NSMutableDictionary *dict = [projectDict mutableCopy]; NSData *dictData = nil; // remove key.. [dict removeObjectForKey: PCWindows]; [dict removeObjectForKey: PCLastEditing]; // initialize the wrapper... projectFileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers: [NSMutableDictionary dictionaryWithCapacity: 3]]; wrapperPath = [projectPath stringByAppendingPathComponent: wrapperFile]; // load subprojects... 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", @"Couldn't remove the old project backup file", @"OK",nil,nil); [dict release]; return NO; } // Save backup if ((keepBackup == YES) && [fm isReadableFileAtPath: wrapperPath]) { if ([fm copyPath: wrapperPath toPath: backup handler:nil] == NO) { NSRunAlertPanel(@"Save Project", @"Couldn't save project backup file", @"OK",nil,nil); return NO; } } // Save project file dictData = [NSPropertyListSerialization dataFromPropertyList: dict format: NSPropertyListOpenStepFormat errorDescription: NULL]; [projectFileWrapper addRegularFileWithContents: dictData preferredFilename: file]; if ([projectFileWrapper writeToFile:wrapperPath atomically:YES updateFilenames: YES] == NO) { NSRunAlertPanel(@"Save Project", @"Couldn't save project file", @"OK",nil,nil,projectName); return NO; } [[NSNotificationCenter defaultCenter] postNotificationName:PCProjectDictDidSaveNotification object:self]; // Save GNUmakefile if ([self writeMakefile] == NO) { NSRunAlertPanel(@"Save Project", @"Couldn't write GNUmakefile", @"OK",nil,nil); return NO; } return YES; } - (BOOL)close:(id)sender { PCLogInfo(self, @"Closing %@ project", projectName); // Save visible windows and panels positions to project dictionary if (isSubproject == NO) { [self saveProjectWindowsAndPanels]; [projectBrowser setPath:@"/"]; [projectManager setActiveProject:self]; } // Project files (GNUmakefile, PC.project etc.) if (isSubproject == NO && [self isProjectChanged] == YES) { int ret; ret = NSRunAlertPanel(@"Close Project", @"Project or subprojects are modified", @"Save and Close",@"Don't save",@"Stop"); 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) { [projectManager closeProject:self]; 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; } // ============================================================================ // ==== Accessory methods // ============================================================================ - (PCProjectManager *)projectManager { return projectManager; } - (void)setProjectManager:(PCProjectManager *)aManager { projectManager = aManager; if (isSubproject) { return; } if (!projectBrowser) { projectBrowser = [[PCProjectBrowser alloc] initWithProject:self]; } if (!projectLoadedFiles) { projectLoadedFiles = [[PCProjectLoadedFiles alloc] initWithProject:self]; } if (!projectEditor) { projectEditor = [[PCProjectEditor alloc] init]; [projectEditor setProject:self]; [projectEditor setProjectManager:aManager]; } if (!projectWindow) { projectWindow = [[PCProjectWindow alloc] initWithProject:self]; } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadPreferences:) name:PCPreferencesDidChangeNotification object:nil]; [self loadPreferences:nil]; } - (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; } // ============================================================================ // ==== Bundle methods // ============================================================================ //--- Project Inspector's "Project Attributes" - (NSView *)projectAttributesView { return nil; } //--- Properties from Info.table - (NSDictionary *)projectBundleInfoTable { NSString *_file; Class class = [self builderClass]; _file = [[NSBundle bundleForClass:class] pathForResource:@"Info" ofType:@"table"]; return [NSMutableDictionary dictionaryWithContentsOfFile:_file]; } - (NSString *)projectTypeName { return [[self projectBundleInfoTable] objectForKey:@"Name"]; } - (Class)builderClass { return [[self projectBundleInfoTable] objectForKey:@"BuilderClassName"]; } - (NSString *)projectDescription { return [[self projectBundleInfoTable] objectForKey:@"Description"]; } - (BOOL)isExecutable { if ([[[self projectBundleInfoTable] objectForKey:@"Executable"] isEqualToString:@"YES"]) { return YES; } return NO; } - (NSArray *)buildTargets { NSArray *buildTargets = [projectDict objectForKey:PCBuilderTargets]; if (!buildTargets) { buildTargets = [[self projectBundleInfoTable] objectForKey:@"BuildTargets"]; [self setProjectDictObject:buildTargets forKey:PCBuilderTargets notify:NO]; } return buildTargets; } - (NSArray *)sourceFileKeys { return [[self projectBundleInfoTable] objectForKey:@"SourceFileKeys"]; } - (NSArray *)resourceFileKeys { return [[self projectBundleInfoTable] objectForKey:@"ResourceFileKeys"]; } - (NSArray *)otherKeys { return [[self projectBundleInfoTable] objectForKey:@"OtherFileKeys"]; } - (NSArray *)allowableSubprojectTypes { return [[self projectBundleInfoTable] objectForKey:@"AllowableSubprojectTypes"]; } - (NSArray *)localizableKeys { return [[self projectBundleInfoTable] objectForKey:@"LocalizableCategories"]; } //--- Public headers (for Library, Framework) - (BOOL)canHavePublicHeaders { if ([[[self projectBundleInfoTable] objectForKey:@"CanHavePublicHeaders"] isEqualToString:@"YES"]) { return YES; } return NO; } - (NSArray *)publicHeaders { if ([self canHavePublicHeaders] == YES) { return [projectDict objectForKey:PCPublicHeaders]; } return nil; } - (void)setHeaderFile:(NSString *)file public:(BOOL)yn { NSMutableArray *publicHeaders = nil; if ((yn == YES && [[self publicHeaders] containsObject:file]) || [self canHavePublicHeaders] == NO) { return; } publicHeaders = [[projectDict objectForKey:PCPublicHeaders] copy]; if (yn) { [publicHeaders addObject:file]; } else if ([publicHeaders count] > 0 && [publicHeaders containsObject:file]) { [publicHeaders removeObject:file]; } [self setProjectDictObject:publicHeaders forKey:PCPublicHeaders notify:YES]; [publicHeaders release]; } //--- Localization - (NSArray *)localizedResources { return [projectDict objectForKey:PCLocalizedResources]; } - (NSString *)resourceDirForLanguage:(NSString *)language { NSString *dir = nil; dir = [projectPath stringByAppendingPathComponent:language]; dir = [dir stringByAppendingPathExtension:@"lproj"]; return dir; } - (void)setResourceFile:(NSString *)file localizable:(BOOL)yn { PCFileManager *fileManager = [projectManager fileManager]; NSArray *userLanguages = nil; NSEnumerator *enumerator = nil; NSString *currentLanguage = nil; NSString *resPath = nil; NSString *resFilePath = nil; NSString *langPath = nil; NSMutableArray *localizedResources = nil; if (yn == YES && [[self localizedResources] containsObject:file]) { return; } resPath = [projectPath stringByAppendingPathComponent:@"Resources"]; resFilePath = [resPath stringByAppendingPathComponent:file]; localizedResources = [[self localizedResources] mutableCopy]; userLanguages = [projectDict objectForKey:PCUserLanguages]; enumerator = [userLanguages objectEnumerator]; while ((currentLanguage = [enumerator nextObject])) { langPath = [self resourceDirForLanguage:currentLanguage]; if (yn == YES) { [fileManager copyFile:resFilePath intoDirectory:langPath]; } else { if ([currentLanguage isEqualToString:@"English"]) { [fileManager copyFile:file fromDirectory:langPath intoDirectory:resPath]; } [fileManager removeFile:file fromDirectory:langPath removeDirsIfEmpty:YES]; } } if (yn == YES) { [fileManager removeFileAtPath:resFilePath removeDirsIfEmpty:YES]; [localizedResources addObject:file]; [self setProjectDictObject:localizedResources forKey:PCLocalizedResources notify:YES]; } else if ([localizedResources count] > 0 && [localizedResources containsObject:file]) { [localizedResources removeObject:file]; [self setProjectDictObject:localizedResources forKey:PCLocalizedResources notify:YES]; } [localizedResources release]; } //--- // May files will be added to category? - (BOOL)isEditableCategory:(NSString *)category { NSString *key = [self keyForCategory:category]; if ([key isEqualToString:PCSupportingFiles]) { return NO; } return YES; } // May file will be edited in PC editor? - (BOOL)isEditableFile:(NSString *)filePath { NSString *key = [self keyForCategory:[projectBrowser nameOfSelectedCategory]]; NSString *fileName = [filePath lastPathComponent]; NSString *extension = [filePath pathExtension]; if ([key isEqualToString:PCSupportingFiles]) { if ([fileName isEqualToString:@"GNUmakefile"] || [extension isEqualToString:@"plist"]) { return NO; } } return YES; } - (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", @"gsmarkup", @"nib", 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",@"dylib",nil]; } 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 { if ([[self resourceFileKeys] containsObject:key]) { return [projectPath stringByAppendingPathComponent:@"Resources"]; } return projectPath; } - (NSString *)localizedDirForCategoryKey:(NSString *)key { NSString *language = nil; if ([[self resourceFileKeys] containsObject:key]) { language = [projectDict objectForKey:PCLanguage]; language = [language stringByAppendingPathExtension:@"lproj"]; return [projectPath stringByAppendingPathComponent:language]; } 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; } // ============================================================================ // ==== File Handling // ============================================================================ - (NSString *)pathForFile:(NSString *)file forKey:(NSString *)key { NSString *resPath = nil; if ([[self resourceFileKeys] containsObject:key]) { if ([[projectDict objectForKey:PCLocalizedResources] containsObject:file]) { resPath = [self localizedDirForCategoryKey:key]; return [resPath stringByAppendingPathComponent:file]; } else { resPath = [self dirForCategoryKey:key]; return [resPath stringByAppendingPathComponent:file]; } } return [projectPath stringByAppendingPathComponent:file]; } - (NSString *)projectFileFromFile:(NSString *)file forKey:(NSString *)type { NSString *projectFile = nil; NSString *_path = nil; NSMutableArray *_pathComponents = nil; NSString *_file = nil; NSArray *subprojects = [projectDict objectForKey:PCSubprojects]; NSRange pathRange; NSString *spDir = nil; _path = [file stringByDeletingLastPathComponent]; _pathComponents = [[_path pathComponents] mutableCopy]; _file = [file lastPathComponent]; // Remove "lib" prefix from library name if ([type isEqualToString:PCLibraries]) { _file = [_file stringByDeletingPathExtension]; _file = [_file substringFromIndex:3]; } pathRange = [_path rangeOfString:projectPath]; // File is located in project's directory tree if (pathRange.length && ![type isEqualToString:PCLibraries]) { unsigned i; for (i = 0; i < [subprojects count]; i++) { spDir = [[subprojects objectAtIndex:i] stringByAppendingPathExtension:@"subproj"]; if ([_pathComponents containsObject:spDir]) { break; } spDir = nil; } } if (spDir != nil) { while (![[_pathComponents objectAtIndex:0] isEqualToString:spDir]) { [_pathComponents removeObjectAtIndex:0]; } } else { [_pathComponents removeAllObjects]; } // Construct project file name if ([_pathComponents count]) { projectFile = [NSString pathWithComponents:_pathComponents]; projectFile = [projectFile stringByAppendingPathComponent:_file]; } else { projectFile = [NSString stringWithString:_file]; } RELEASE(_pathComponents); return projectFile; } - (BOOL)doesAcceptFile:(NSString *)file forKey:(NSString *)type { NSString *pFile = [self projectFileFromFile:file forKey:type]; NSArray *sourceKeys = [self sourceFileKeys]; NSArray *resourceKeys = [self resourceFileKeys]; NSEnumerator *keyEnum = nil; NSString *key = nil; NSArray *projectFiles = nil; if ([sourceKeys containsObject:type]) { keyEnum = [sourceKeys objectEnumerator]; } else if ([resourceKeys containsObject:type]) { keyEnum = [resourceKeys objectEnumerator]; } else { return YES; } while ((key = [keyEnum nextObject])) { projectFiles = [projectDict objectForKey:key]; if ([projectFiles containsObject:pFile]) { return NO; } } return YES; } - (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(@"Add File(s)", @"Error adding files %@ to project %@!", @"OK", nil, nil, fileList, projectName); return NO; } // PCLogInfo(self, @"Complementary files: %@", complementaryFiles); // Complementaries if (![fileManager copyFiles:complementaryFiles intoDirectory:complementaryDir]) { NSRunAlertPanel(@"Add File(s)", @"Error adding files %@ to project %@!", @"OK", nil, nil, complementaryFiles, projectName); return NO; } } if ([complementaryFiles count] > 0) { [self addFiles:complementaryFiles forKey:complementaryKey notify:NO]; } // Add files to project [self addFiles:fileList forKey:key notify:YES]; return YES; } - (void)addFiles:(NSArray *)files forKey:(NSString *)type notify:(BOOL)yn { NSEnumerator *enumerator = nil; NSString *file = nil; NSString *pFile = nil; NSArray *types = [projectDict objectForKey:type]; NSMutableArray *projectFiles = [NSMutableArray arrayWithArray:types]; if ([type isEqualToString:PCLibraries]) { NSMutableArray *searchLibs = [NSMutableArray arrayWithCapacity:1]; NSString *path = nil; path = [[files objectAtIndex:0] stringByDeletingLastPathComponent]; [searchLibs setArray:[projectDict objectForKey:PCSearchLibs]]; [searchLibs addObject:path]; [self setProjectDictObject:searchLibs forKey:PCSearchLibs notify:yn]; } enumerator = [files objectEnumerator]; while ((file = [enumerator nextObject])) { pFile = [self projectFileFromFile:file forKey:type]; [projectFiles addObject:pFile]; } [self setProjectDictObject:projectFiles forKey:type notify:yn]; } - (BOOL)removeFiles:(NSArray *)files forKey:(NSString *)key notify:(BOOL)yn { NSEnumerator *enumerator = nil; NSString *filePath = nil; NSString *file = nil; NSMutableArray *projectFiles = [[NSMutableArray alloc] initWithCapacity:1]; NSArray *localizedFiles = nil; // Check if file localizable. If yes, make it not localizable so file moved // to Resources dir. localizedFiles = [[self localizedResources] copy]; enumerator = [files objectEnumerator]; while ((file = [enumerator nextObject])) { if ([localizedFiles containsObject:file]) { [self setResourceFile:file localizable:NO]; } } [localizedFiles release]; // Remove files from project // projectFiles = [NSMutableArray arrayWithArray:[projectDict objectForKey:key]]; [projectFiles setArray:[projectDict objectForKey:key]]; NSLog(@"--- projectFiles: %@ forKey: %@", projectFiles, key); enumerator = [files objectEnumerator]; while ((file = [enumerator nextObject])) { if ([key isEqualToString:PCSubprojects]) { NSLog(@"Removing subproject %@", file); [self removeSubprojectWithName:file]; } NSLog(@"Project %@ remove file %@", projectName, file); [projectFiles removeObject:file]; // Close editor filePath = [projectPath stringByAppendingPathComponent:file]; [projectEditor closeEditorForFile:filePath]; } NSLog(@"projectFiles: %@", projectFiles); [self setProjectDictObject:projectFiles forKey:key notify:yn]; [projectFiles release]; 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; int index = 0; id _editor; NSString *_editorPath = nil; NSMutableString *_editorCategory = nil; selectedCategory = [projectBrowser nameOfSelectedCategory]; selectedCategoryKey = [self keyForCategory:selectedCategory]; fromPath = [[self dirForCategoryKey:selectedCategoryKey] stringByAppendingPathComponent:fromFile]; toPath = [[self dirForCategoryKey:selectedCategoryKey] stringByAppendingPathComponent:toFile]; if ([fm fileExistsAtPath:toPath]) { switch (NSRunAlertPanel(@"Rename file", @"File \"%@\" already exist", @"Overwrite file",@"Stop",nil, toFile)) { case NSAlertDefaultReturn: // Overwrite if ([fm removeFileAtPath:toPath handler:nil] == NO) { return NO; } break; case NSAlertAlternateReturn: // Stop rename return NO; break; } } /* PCLogInfo(self, @"{%@} move %@ to %@ category: %@", projectName, fromPath, toPath, selectedCategory);*/ if ([[self localizedResources] containsObject:fromFile]) {// Rename file in language dirs NSArray *userLanguages; NSEnumerator *enumerator; NSString *lang; NSString *langPath; NSMutableArray *localizedResources; localizedResources = [NSMutableArray arrayWithArray:[self localizedResources]]; userLanguages = [projectDict objectForKey:PCUserLanguages]; enumerator = [userLanguages objectEnumerator]; while ((lang = [enumerator nextObject])) { langPath = [self resourceDirForLanguage:lang]; fromPath = [langPath stringByAppendingPathComponent:fromFile]; toPath = [langPath stringByAppendingPathComponent:toFile]; if ([fm movePath:fromPath toPath:toPath handler:nil] == NO) { return NO; } } index = [localizedResources indexOfObject:fromFile]; [localizedResources replaceObjectAtIndex:index withObject:toFile]; [projectDict setObject:localizedResources forKey:PCLocalizedResources]; } else if ([fm movePath:fromPath toPath:toPath handler:nil] == NO) { return NO; } // TODO: Rewrite this when file operations history will be implemented if ([self isProjectChanged]) { // Project already has changes saveToFile = YES; } // Make changes to projectDict _array = [projectDict objectForKey:selectedCategoryKey]; index = [_array indexOfObject:fromFile]; [_array replaceObjectAtIndex:index withObject:toFile]; // 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]; } // Handle editor(if any) information _editor = [projectEditor activeEditor]; if (_editor) { NSRange range; _editorPath = [_editor path]; _editorPath = [_editorPath stringByDeletingLastPathComponent]; _editorPath = [_editorPath stringByAppendingPathComponent:toFile]; [_editor setPath:_editorPath]; _editorCategory = [[_editor categoryPath] mutableCopy]; range = [_editorCategory rangeOfString:fromFile]; [_editorCategory replaceCharactersInRange:range withString:toFile]; [_editor setCategoryPath:_editorCategory]; [projectBrowser setPath:_editorCategory]; RELEASE(_editorCategory); } else { // Set browser path to new file name [projectBrowser reloadLastColumnAndSelectFile:toFile]; } return YES; } // ============================================================================ // ==== 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 *spPath = 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) { spPath = [projectPath stringByAppendingPathComponent:name]; spPath = [spPath stringByAppendingPathExtension:@"subproj"]; sp = [projectManager openProjectAt:spPath makeActive:NO]; 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 notify:YES]; } - (void)addSubprojectWithName:(NSString *)name { NSMutableArray *_subprojects = nil; if (!name) { return; } _subprojects = [NSMutableArray arrayWithArray:[projectDict objectForKey:PCSubprojects]]; [_subprojects addObject:name]; [self setProjectDictObject:_subprojects forKey:PCSubprojects notify:YES]; } - (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 (ProjectBrowser) // e.g. CLASS_FILES - (NSArray *)rootKeys { if (activeSubproject) { return [activeSubproject rootKeys]; } return rootKeys; } // e.g. Classes - (NSArray *)rootCategories { if (activeSubproject) { return [activeSubproject rootCategories]; } return rootCategories; } - (NSDictionary *)rootEntries { if (activeSubproject) { return [activeSubproject 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 = -1; if (activeSubproject) { return [activeSubproject keyForCategory:category]; } if (![rootCategories containsObject:category]) { return nil; } index = [rootCategories indexOfObject:category]; return [rootKeys objectAtIndex:index]; } - (NSString *)categoryForKey:(NSString *)key { if (activeSubproject) { return [activeSubproject categoryForKey:key]; } return [rootEntries objectForKey:key]; } - (NSString *)rootCategoryForCategoryPath:(NSString *)categoryPath { NSArray *pathComponents = nil; if ([categoryPath isEqualToString:@"/"] || [categoryPath isEqualToString:@""]) { return nil; } pathComponents = [categoryPath componentsSeparatedByString:@"/"]; return [pathComponents objectAtIndex:1]; } - (NSString *)keyForRootCategoryInCategoryPath:(NSString *)categoryPath { NSString *category = nil; NSString *key = nil; int index = -1; if (categoryPath == nil || [categoryPath isEqualToString:@""] || [categoryPath isEqualToString:@"/"]) { return nil; } category = [self rootCategoryForCategoryPath:categoryPath]; // Since keyForCategory subproject sensitive implement // key searching here // TODO: revise all code in PCProject against subproject // sensitiveness // key = [self keyForCategory:category]; if (![rootCategories containsObject:category]) { return nil; } index = [rootCategories indexOfObject:category]; key = [rootKeys objectAtIndex:index]; /* PCLogInfo(self, @"{%@}(keyForRootCategoryInCategoryPath): %@ key:%@", projectName, categoryPath, key);*/ return key; } // --- Requested by Project Browser - (NSArray *)contentAtCategoryPath:(NSString *)categoryPath { NSString *key = [self keyForRootCategoryInCategoryPath:categoryPath]; NSArray *pathArray = nil; NSString *listEntry = nil; pathArray = [categoryPath componentsSeparatedByString:@"/"]; listEntry = [pathArray lastObject]; /* PCLogInfo(self, @"{%@}{contentAtCategoryPath:} %@", projectName, categoryPath);*/ if ([categoryPath isEqualToString:@""] || [categoryPath isEqualToString:@"/"]) { if ([projectManager activeProject] != self) { [projectManager setActiveProject:self]; } return rootCategories; } else if ([pathArray count] == 2) { // Click on /Category. [pathArray count] == 2 even in subprojects // because category path stripped from leading path components before // going into subproject's code // NSLog(@"Click on Category"); if ([projectManager activeProject] != self) { [projectManager setActiveProject:self]; } activeSubproject = nil; return [projectDict objectForKey:key]; } else if ([key isEqualToString:PCSubprojects] && [pathArray count] > 2) { // Click on "/Subprojects/Name+" PCProject *_subproject = nil; NSString *spCategoryPath = nil; NSMutableArray *mCategoryPath = [NSMutableArray arrayWithArray:pathArray]; _subproject = [self subprojectWithName:[pathArray objectAtIndex:2]]; activeSubproject = _subproject; [mCategoryPath removeObjectAtIndex:1]; [mCategoryPath removeObjectAtIndex:1]; spCategoryPath = [mCategoryPath componentsJoinedByString:@"/"]; return [_subproject contentAtCategoryPath:spCategoryPath]; } else { // The file is selected, ask editor for browser items return [[projectEditor activeEditor] browserItemsForItem:listEntry]; } } - (BOOL)hasChildrenAtCategoryPath:(NSString *)categoryPath { NSString *listEntry = nil; PCProject *activeProject = [projectManager activeProject]; NSString *category = [projectBrowser nameOfSelectedCategory]; NSString *categoryKey = [self keyForCategory:category]; if (self != activeProject) { return [activeProject hasChildrenAtCategoryPath:categoryPath]; } listEntry = [[categoryPath componentsSeparatedByString:@"/"] lastObject]; // Categories if ([rootCategories containsObject:listEntry]) { return YES; } // Subprojects if ([[projectDict objectForKey:PCSubprojects] containsObject:listEntry] && [category isEqualToString:@"Subprojects"]) { return YES; } // Files. listEntry is file in category or contents of file if ([[projectDict objectForKey:categoryKey] containsObject:listEntry] || [projectBrowser nameOfSelectedFile]) { // TODO: Libraries if ([category isEqualToString:@"Libraries"]) { return NO; } if ([projectEditor editorProvidesBrowserItemsForItem:listEntry] == YES) { return YES; } } return NO; } @end ProjectCenter-0.6.1/Framework/PCProjectLauncherPanel.m000644 001751 000024 00000010421 11157043720 023352 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003-2004 Free Software Foundation Authors: 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. */ #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" @implementation PCProjectLauncherPanel - (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 { #ifdef DEVELOPMENT NSLog (@"PCLaunchPanel: dealloc"); #endif [[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; id prefs = [projectManager prefController]; if (![prefs boolForKey:UseTearOffWindows]) { return; } 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 ProjectCenter-0.6.1/Framework/GNUmakefile000644 001751 000024 00000004773 11472523616 020777 0ustar00multixstaff000000 000000 # # GNUmakefile - Generated by ProjectCenter # PACKAGE_NAME = ProjectCenter include $(GNUSTEP_MAKEFILES)/common.make # # Framework # VERSION = 0.6.0 FRAMEWORK_NAME = ProjectCenter ProjectCenter_CURRENT_VERSION_NAME = 0.6.0 ProjectCenter_DEPLOY_WITH_CURRENT_VERSION = yes ProjectCenter_HEADER_FILES_DIR = ../Headers/ProjectCenter ProjectCenter_LIBRARIES_DEPEND_UPON += $(OBJC_LIBS) $(FND_LIBS) $(GUI_LIBS) # # Subprojects # #SUBPROJECTS = Resources # # Header files # ProjectCenter_HEADER_FILES = \ PCDefines.h \ ProjectCenter.h \ \ PCBundleManager.h \ PCEditorManager.h \ PCFileManager.h \ PCAddFilesPanel.h \ PCFileCreator.h \ PCMakefileFactory.h \ PCSaveModified.h \ \ PCProjectManager.h \ PCProject.h \ PCProjectWindow.h \ PCProjectInspector.h \ PCProjectBuilder.h \ PCProjectBuilderOptions.h \ PCProjectBuilderPanel.h \ PCProjectLauncher.h \ PCProjectLauncherPanel.h \ PCProjectEditor.h \ \ PCProjectBrowser.h \ PCProjectLoadedFiles.h \ PCProjectLoadedFilesPanel.h \ \ PCFileNameField.h \ PCFileNameIcon.h \ \ PCLogController.h # # Class files # ProjectCenter_OBJC_FILES = \ PCBundleManager.m \ PCEditorManager.m \ PCMakefileFactory.m \ PCFileManager.m \ PCAddFilesPanel.m \ PCFileCreator.m \ PCSaveModified.m \ \ PCProjectManager.m \ PCProject.m \ PCProjectWindow.m \ PCProjectInspector.m \ PCProjectBuilder.m \ PCProjectBuilderOptions.m \ PCProjectBuilderPanel.m \ PCProjectLauncher.m \ PCProjectLauncherPanel.m \ PCProjectEditor.m \ \ PCProjectBrowser.m \ PCProjectLoadedFiles.m \ PCProjectLoadedFilesPanel.m \ \ PCButton.m \ PCFileNameField.m \ PCFileNameIcon.m \ \ PCLogController.m # # Resources # ProjectCenter_RESOURCE_FILES = \ Resources/cfile.template \ Resources/cheader.template \ Resources/class.template \ Resources/gsmarkup.template \ Resources/header.template \ Resources/postamble.template \ Resources/protocol.template \ # # Localization # ProjectCenter_LOCALIZED_RESOURCE_FILES = \ ProjectWindow.gorm \ BuilderPanel.gorm \ Builder.gorm \ BuilderOptions.gorm \ NewSubproject.gorm \ NewFile.gorm \ ProjectInspector.gorm \ BuildAttributes.gorm \ ProjectAttributes.gorm \ ProjectDescription.gorm \ ProjectLanguages.gorm \ FileAttributes.gorm \ LogPanel.gorm \ SaveModified.gorm ProjectCenter_LANGUAGES = \ English -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/framework.make include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble ProjectCenter-0.6.1/Framework/PCFileManager.m000644 001751 000024 00000037706 11556342436 021504 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2011 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import #import #import #import #import @implementation PCFileManager // =========================================================================== // ==== Class methods // =========================================================================== static PCFileManager *_mgr = nil; + (PCFileManager *)defaultManager { if (_mgr == nil) { _mgr = [[self alloc] init]; } return _mgr; } // =========================================================================== // ==== Init and free // =========================================================================== - (id)initWithProjectManager:(PCProjectManager *)aProjectManager { if ((self = [super init])) { projectManager = aProjectManager; } return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog (@"PCFileManager: dealloc"); #endif if (addFilesPanel) { RELEASE(addFilesPanel); } [super dealloc]; } // =========================================================================== // ==== NSFileManager delegate methods // =========================================================================== - (BOOL) fileManager:(NSFileManager *)manager shouldProceedAfterError:(NSDictionary *)errorDict { NSLog(@"FM error is: %@", [errorDict objectForKey:@"Error"]); return YES; } // =========================================================================== // ==== File handling // =========================================================================== - (BOOL)createDirectoriesIfNeededAtPath:(NSString *)path { NSString *_path = [NSString stringWithString:path]; NSString *_oldPath = nil; NSMutableArray *pathArray = [NSMutableArray array]; NSFileManager *fm = [NSFileManager defaultManager]; BOOL isDir; int i; /* We stop when we find a file, or when we can't remove any path * component any more. Else, you may end up in an infinite loop if * _path = @"". */ isDir = NO; while (_path != nil && ![_path isEqualToString: _oldPath] && ![fm fileExistsAtPath:_path isDirectory:&isDir]) { [pathArray addObject:[_path lastPathComponent]]; _oldPath = _path; _path = [_path stringByDeletingLastPathComponent]; } if (!isDir) { return NO; } if ([_path length] != [path length]) { for (i = [pathArray count]-1; i >= 0; i--) { _path = [_path stringByAppendingPathComponent:[pathArray objectAtIndex:i]]; if ([fm createDirectoryAtPath:_path attributes:nil] == NO) { return NO; } } } return YES; } - (BOOL)copyFile:(NSString *)file toFile:(NSString *)toFile { NSFileManager *fm = [NSFileManager defaultManager]; NSString *directoryPath = nil; if (!file) { return NO; } if (![fm fileExistsAtPath:toFile]) { directoryPath = [toFile stringByDeletingLastPathComponent]; if ([self createDirectoriesIfNeededAtPath:directoryPath] == NO) { NSRunAlertPanel(@"Copy File", @"Couldn't create directories at path %@", @"Ok",nil,nil, directoryPath); return NO; } if ([fm copyPath:file toPath:toFile handler:self] == NO) { NSRunAlertPanel(@"Copy File", @"Couldn't copy file %@ to %@", @"Ok",nil,nil, file, toFile); return NO; } } return YES; } - (BOOL)copyFile:(NSString *)file intoDirectory:(NSString *)directory { NSString *path = nil; if (!file) { return NO; } path = [directory stringByAppendingPathComponent:[file lastPathComponent]]; if (![self copyFile:file toFile:path]) { // No need to open aler panel here return NO; } return YES; } - (BOOL)copyFile:(NSString *)file fromDirectory:(NSString *)fromDir intoDirectory:(NSString *)toDir { NSString *path = nil; if (!file || !fromDir || !toDir) { return NO; } path = [fromDir stringByAppendingPathComponent:[file lastPathComponent]]; if (![self copyFile:path intoDirectory:toDir]) { return NO; } return YES; } - (BOOL)copyFiles:(NSArray *)files intoDirectory:(NSString *)directory { NSEnumerator *enumerator = nil; NSString *file = nil; if (!files) { return NO; } enumerator = [files objectEnumerator]; while ((file = [enumerator nextObject])) { if ([self copyFile:file intoDirectory:directory] == NO) { return NO; } } return YES; } - (BOOL)removeDirectoriesIfEmptyAtPath:(NSString *)path { NSFileManager *fm = [NSFileManager defaultManager]; while ([[fm directoryContentsAtPath:path] count] == 0) { if ([fm removeFileAtPath:path handler:nil] == NO) { NSRunAlertPanel(@"Remove Directory", @"Couldn't remove empty directory at path %@", @"Ok",nil,nil, path); return NO; } path = [path stringByDeletingLastPathComponent]; } return YES; } - (BOOL)removeFile:(NSString *)file fromDirectory:(NSString *)directory removeDirsIfEmpty:(BOOL)removeDirs { NSString *path = nil; NSFileManager *fm = [NSFileManager defaultManager]; if (!file) { return NO; } path = [directory stringByAppendingPathComponent:file]; if (![fm removeFileAtPath:path handler:nil]) { NSRunAlertPanel(@"Remove File", @"Couldn't remove file at path %@", @"Ok",nil,nil, path); return NO; } if (removeDirs) { [self removeDirectoriesIfEmptyAtPath:directory]; } return YES; } - (BOOL)removeFileAtPath:(NSString *)file removeDirsIfEmpty:(BOOL)removeDirs { return [self removeFile:[file lastPathComponent] fromDirectory:[file stringByDeletingLastPathComponent] removeDirsIfEmpty:removeDirs]; } - (BOOL)removeFiles:(NSArray *)files fromDirectory:(NSString *)directory removeDirsIfEmpty:(BOOL)removeDirs { NSEnumerator *filesEnum = nil; NSString *file = nil; if (!files) { return NO; } filesEnum = [files objectEnumerator]; while ((file = [filesEnum nextObject])) { if ([self removeFile:file fromDirectory:directory removeDirsIfEmpty:removeDirs] == NO) { return NO; } } return YES; } - (BOOL)moveFile:(NSString *)file intoDirectory:(NSString *)directory { if ([self copyFile:file intoDirectory:directory] == YES) { [self removeFileAtPath:file removeDirsIfEmpty:YES]; } else { NSRunAlertPanel(@"Move File", @"Couldn't move file %@ to %@", @"Ok",nil,nil, file, directory); return NO; } return YES; } @end @implementation PCFileManager (UInterface) // =========================================================================== // ==== Panels // =========================================================================== - (id)_panelForOperation:(int)op title:(NSString *)title accView:(NSView *)accessoryView { id prefs = [projectManager prefController]; NSString *lastOpenDir; id panel; operation = op; switch (op) { case PCOpenFileOperation: panel = [NSOpenPanel openPanel]; [panel setCanChooseFiles:YES]; [panel setCanChooseDirectories:NO]; lastOpenDir = [prefs stringForKey:@"FileOpenLastDirectory"]; break; case PCSaveFileOperation: panel = [NSSavePanel savePanel]; lastOpenDir = [prefs stringForKey:@"FileSaveLastDirectory"]; break; case PCOpenProjectOperation: panel = [NSOpenPanel openPanel]; [panel setAllowsMultipleSelection:NO]; [panel setCanChooseFiles:YES]; [panel setCanChooseDirectories:YES]; lastOpenDir = [prefs stringForKey:@"ProjectOpenLastDirectory"]; break; case PCOpenDirectoryOperation: panel = [NSOpenPanel openPanel]; [panel setCanChooseFiles:NO]; [panel setCanChooseDirectories:YES]; lastOpenDir = [prefs stringForKey:@"FileOpenLastDirectory"]; break; case PCAddFileOperation: if (addFilesPanel == nil) { addFilesPanel = [PCAddFilesPanel addFilesPanel]; [addFilesPanel setTreatsFilePackagesAsDirectories: YES]; } panel = addFilesPanel; lastOpenDir = [prefs stringForKey:@"FileAddLastDirectory"]; break; default: return nil; break; } if (!lastOpenDir) { lastOpenDir = NSHomeDirectory(); } [panel setDirectory:lastOpenDir]; [panel setDelegate:self]; if (title != nil) { [panel setTitle:title]; } if (accessoryView != nil) { [panel setAccessoryView:accessoryView]; } return panel; } - (void)_saveLastDirectoryForPanel:(id)panel { id prefs = [projectManager prefController]; NSString *key = nil; switch (operation) { case PCOpenFileOperation: key = @"FileOpenLastDirectory"; break; case PCSaveFileOperation: key = @"FileSaveLastDirectory"; break; case PCOpenProjectOperation: key = @"ProjectOpenLastDirectory"; break; case PCAddFileOperation: key = @"FileAddLastDirectory"; break; default: break; } if (key != nil) { [prefs setString:[panel directory] forKey:key notify:NO]; } } - (NSMutableArray *)filesOfTypes:(NSArray *)types operation:(int)op multiple:(BOOL)yn title:(NSString *)title accView:(NSView *)accessoryView { id panel; NSMutableArray *fileList = [[NSMutableArray alloc] init]; int result = -10; panel = [self _panelForOperation:op title:title accView:accessoryView]; if (types != nil) { [panel setAllowedFileTypes:types]; } if ((op == PCOpenFileOperation) || (op == PCOpenProjectOperation) || (op == PCOpenDirectoryOperation)) { if ((result = [panel runModalForTypes:types]) == NSOKButton) { [fileList addObjectsFromArray:[panel filenames]]; } } else if (op == PCSaveFileOperation) { if ((result = [panel runModal]) == NSOKButton) { [fileList addObject:[panel filename]]; } } else if (op == PCAddFileOperation) { PCProject *project = [projectManager activeProject]; NSString *selectedCategory = nil; [panel setCategories:[project rootCategories]]; selectedCategory = [[project projectBrowser] nameOfSelectedCategory]; [panel selectCategory:selectedCategory]; if ((result = [panel runModalForTypes:types]) == NSOKButton) { [fileList addObjectsFromArray:[panel filenames]]; } } if (result == NSOKButton) { [self _saveLastDirectoryForPanel:panel]; return [fileList autorelease]; } return nil; } // ============================================================================ // ==== PCAddFilesPanel delegate // ============================================================================ - (void)categoryChangedTo:(NSString *)category { PCProject *project = [projectManager activeProject]; NSArray *fileTypes = nil; PCProjectBrowser *browser = [project projectBrowser]; NSString *path = [browser path]; [addFilesPanel setTitle:[NSString stringWithFormat:@"Add %@",category]]; fileTypes = [project fileTypesForCategoryKey:[project keyForCategory:category]]; [addFilesPanel setFileTypes:fileTypes]; // Set project browser path path = [path stringByDeletingLastPathComponent]; path = [path stringByAppendingPathComponent:category]; [browser setPath:path]; } // ============================================================================ // ==== 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]; BOOL isDir; PCProject *project = nil; NSArray *fileTypes = nil; NSString *category = nil; NSString *categoryKey = nil; [fileManager fileExistsAtPath:filename isDirectory:&isDir]; if ([[filename pathExtension] isEqualToString:@"gorm"]) { isDir = NO; } if (sender == addFilesPanel && !isDir) { project = [projectManager activeProject]; category = [addFilesPanel selectedCategory]; categoryKey = [project keyForCategory:category]; fileTypes = [project fileTypesForCategoryKey:categoryKey]; // Wrong file extension if (fileTypes && ![fileTypes containsObject:[filename pathExtension]]) { return NO; } // File is already in project if (![project doesAcceptFile:filename forKey:categoryKey]) { return NO; } } return YES; } // Test if we should accept file name selected or entered - (BOOL)panel:(id)sender isValidFilename:(NSString *)filename { NSFileManager *fm = [NSFileManager defaultManager]; BOOL isDir; NSEnumerator *e = nil; NSArray *tempList = nil; NSString *tempExtension = nil; if (operation == PCOpenProjectOperation) { if ([fm fileExistsAtPath:filename isDirectory:&isDir] && isDir) { e = [[sender allowedFileTypes] objectEnumerator]; while ((tempExtension = [e nextObject]) != nil) { tempList = [self filesWithExtension:tempExtension atPath:filename includeDirs:YES]; if ([tempList count] > 0) { return YES; } } return NO; } } return YES; } @end @implementation PCFileManager (Misc) /** * Returns YES if the file identified by `filename' is a text file, * otherwise returns NO. * * The test is one by reading the first 512 bytes of the file * and checking whether at least 90% of the data are printable * ASCII characters. * * Author Saso Kiselkov */ - (BOOL)isTextFile:(NSString *)filename { NSFileHandle *fh; NSData *data; unsigned int i, n; const char *buf; unsigned int printable; fh = [NSFileHandle fileHandleForReadingAtPath:filename]; if (fh == nil) { return NO; } data = [fh readDataOfLength:512]; if ([data length] == 0) { return YES; } buf = [data bytes]; for (i = printable = 0, n = [data length]; i < n; i++) { if (isprint((int)(unsigned char)buf[i]) || isspace((int)(unsigned char)buf[i])) { printable++; } } return (((double) printable / n) > 0.9); } - (NSArray *)filesWithExtension:(NSString *)extension atPath:(NSString *)dirPath includeDirs:(BOOL)incDirs { NSFileManager *fm = [NSFileManager defaultManager]; NSMutableArray *filesList = [[NSMutableArray alloc] init]; NSEnumerator *e = nil; NSString *temp = nil; BOOL isDir; e = [[fm directoryContentsAtPath:dirPath] objectEnumerator]; while ((temp = [e nextObject]) != nil) { if ([fm fileExistsAtPath:temp isDirectory:&isDir] && isDir && !incDirs) { continue; } if ([[temp pathExtension] isEqual:extension]) { [filesList addObject:[dirPath stringByAppendingPathComponent:temp]]; } } return [filesList autorelease]; } @end ProjectCenter-0.6.1/Framework/PCProjectBrowser.m000644 001751 000024 00000051603 11430110513 022250 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" NSString *PCBrowserDidSetPathNotification = @"PCBrowserDidSetPathNotification"; @implementation PCProjectBrowser // ============================================================================ // ==== Intialization & deallocation // ============================================================================ - (id)initWithProject:(PCProject *)aProject { if ((self = [super init])) { project = aProject; browser = [[NSBrowser alloc] initWithFrame:NSMakeRect(-10,-10,256,128)]; [browser setRefusesFirstResponder:YES]; // [browser setAutoresizingMask: NSViewWidthSizable | NSViewMinYMargin]; [browser setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; [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 setRefusesFirstResponder:YES]; [browser loadColumnZero]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(projectDictDidChange:) name:PCProjectDictDidChangeNotification object:nil]; } return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog (@"PCProjectBrowser: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(browser); [super dealloc]; } // ============================================================================ // ==== Accessory methods // ============================================================================ - (NSView *)view { return browser; } // Returns nil if multiple files or category selected - (NSString *)nameOfSelectedFile { NSString *name = [[browser path] lastPathComponent]; NSString *category = [self nameOfSelectedCategory]; NSMutableArray *pathArray; NSEnumerator *enumerator; NSString *pathItem; // NSLog(@"---> Selected: %@: category: %@", name, category); if ([[browser selectedCells] count] != 1 || !category || [name isEqualToString:category]) { return nil; } pathArray = [[[browser path] pathComponents] mutableCopy]; enumerator = [pathArray objectEnumerator]; while ((pathItem = [enumerator nextObject])) { if ([pathItem isEqualToString:category]) { name = [enumerator nextObject]; break; } } RELEASE(pathArray); return name; } // Returns nil if multiple files selected - (NSString *)pathToSelectedFile { NSString *name = [self nameOfSelectedFile]; NSString *path = [browser path]; if (!name) { path = nil; } return path; } // Returns 'nil' if selected: // - root project (browser path is @"/") // - multiple categories // - name of subproject // Should not call any of the nameOf... or pathTo... methods to prevent // cyclic recursion. - (NSString *)nameOfSelectedCategory { NSArray *pathArray = [[browser path] componentsSeparatedByString:@"/"]; NSString *lastPathElement = [[browser path] lastPathComponent]; PCProject *activeProject = [[project projectManager] activeProject]; NSArray *rootCategories = [activeProject rootCategories]; NSString *name = nil; int i; // Name of subproject selected: Change active project to superproject // to check category against superproject's catgory list. // But: path '/Subproject/Foo' and '/Subprojects/Foo/Subprojects' will // return the same category 'Subprojects' and active project will be 'Foo' // in both cases // ![[self nameOfSelectedFile] isEqualToString:lastPathElement]) /* if ([lastPathElement isEqualToString:[activeProject projectName]]) { activeProject = [activeProject superProject]; rootCategories = [activeProject rootCategories]; }*/ // Multiple categories selected if (([rootCategories containsObject:lastPathElement] && [[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; } } // Subproject's name selected if ([name isEqualToString:@"Subprojects"] && [lastPathElement isEqualToString:[activeProject projectName]]) { return nil; } 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; } // Returns nil of multiple categories selected - (NSString *)pathFromSelectedCategory { NSString *selectedCategory = [self nameOfSelectedCategory]; NSMutableArray *bPathArray; NSString *path = nil; if (selectedCategory) { bPathArray = [[[browser path] componentsSeparatedByString:@"/"] mutableCopy]; while (![[bPathArray objectAtIndex:1] isEqualToString:selectedCategory]) { [bPathArray removeObjectAtIndex:1]; } path = [bPathArray componentsJoinedByString:@"/"]; RELEASE(bPathArray); } return path; } - (NSString *)nameOfSelectedRootCategory { NSString *categoryPath = [self pathToSelectedCategory]; NSArray *pathComponents; 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 AUTORELEASE((NSArray *)files); } - (NSString *)path { return [browser path]; } - (BOOL)setPath:(NSString *)path { BOOL res; if ([[browser path] isEqualToString: path]) { return YES; } // PCLogInfo(self, @"[setPath]: %@", path); res = [browser setPath:path]; [[NSNotificationCenter defaultCenter] postNotificationName:PCBrowserDidSetPathNotification object:self]; return res; } - (void)reloadLastColumnAndNotify:(BOOL)yn { 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]; NSString *selCellTitle = [[browser selectedCell] stringValue]; if ([category isEqualToString:@"Subprojects"] && ![selCellTitle isEqualToString:@"Subprojects"]) { // /Subprojects/Name selected if ([selCellTitle isEqualToString:[activeProject projectName]]) { activeProject = [activeProject superProject]; } [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]; if (yn) { [[NSNotificationCenter defaultCenter] postNotificationName:PCBrowserDidSetPathNotification object:self]; } } - (void)reloadLastColumnAndSelectFile:(NSString *)file { PCProject *p = [[project projectManager] activeProject]; NSString *catKey = [p keyForCategory:[self nameOfSelectedCategory]]; NSArray *array = [[p projectDict] objectForKey:catKey]; NSString *path = [self path]; NSString *tmp; // Determine last column with files (removing classes and methods from path) tmp = [[path lastPathComponent] substringWithRange:NSMakeRange(0,1)]; while ([tmp isEqualToString:@"@"] // classes || [tmp isEqualToString:@"+"] // factory methods || [tmp isEqualToString:@"-"]) // instance methods { path = [path stringByDeletingLastPathComponent]; tmp = [[path lastPathComponent] substringWithRange:NSMakeRange(0,1)]; } NSLog(@"PCBrowser set path: %@", path); [self setPath:[path stringByDeletingLastPathComponent]]; [self reloadLastColumnAndNotify:NO]; [browser selectRow:[array indexOfObject:file] inColumn:[browser lastColumn]]; // Notify [[NSNotificationCenter defaultCenter] postNotificationName:PCBrowserDidSetPathNotification object:self]; } // ============================================================================ // ==== Actions // ============================================================================ - (void)click:(id)sender { NSString *category; PCProject *activeProject; NSString *browserPath; NSString *filePath; NSString *fileName; if (sender != browser) { return; } category = [self nameOfSelectedCategory]; activeProject = [[project projectManager] activeProject]; browserPath = [self path]; filePath = [self pathToSelectedFile]; fileName = [self nameOfSelectedFile]; NSLog(@"[click] category: %@ forProject: %@ fileName: %@", category, [activeProject projectName], fileName); // ![fileName isEqualToString:[activeProject projectName]] && if (filePath && [filePath isEqualToString:browserPath] && category && ![category isEqualToString:@"Libraries"] ) { NSLog(@"[click] category: %@ filePath: %@", category, filePath); [[activeProject projectEditor] openEditorForCategoryPath:browserPath windowed:NO]; } [[NSNotificationCenter defaultCenter] postNotificationName:PCBrowserDidSetPathNotification object:self]; } - (void)doubleClick:(id)sender { NSString *category = [self nameOfSelectedCategory]; id selectedCell; NSString *fileName; PCProject *activeProject; NSString *key; NSString *filePath; id prefs = [[project projectManager] prefController]; NSWorkspace *workspace; NSString *appName, *type; if ((sender != browser) || [category isEqualToString:@"Libraries"]) { return; } selectedCell = [sender selectedCell]; fileName = [[sender selectedCell] stringValue]; activeProject = [[project projectManager] activeProject]; key = [activeProject keyForCategory:category]; filePath = [activeProject pathForFile:fileName forKey:key]; if ([self nameOfSelectedFile] != nil) { BOOL foundApp = NO; // PCLogInfo(self, @"{doubleClick} filePath: %@", filePath);*/ workspace = [NSWorkspace sharedWorkspace]; foundApp = [workspace getInfoForFile:filePath application:&appName type:&type]; // NSLog (@"Open file: %@ with app: %@", filePath, appName); // If 'Editor' role was set in .GNUstepExtPrefs application // name will be returned according that setting. Otherwise // 'ProjectCenter.app' will be returned accoring to NSTypes // from Info-gnustep.plist file of PC. if(foundApp == NO || [appName isEqualToString:@"ProjectCenter.app"]) { appName = [prefs stringForKey:Editor]; if (![appName isEqualToString:@"ProjectCenter"]) { [workspace openFile:filePath withApplication:appName]; } else { [[activeProject projectEditor] openEditorForCategoryPath:[self path] windowed:YES]; } } else { [workspace openFile:filePath]; } } else { if ([[selectedCell title] isEqualToString:@"Subprojects"]) { [[project projectManager] addSubproject]; } else { [[project projectManager] addProjectFiles]; } } } // ============================================================================ // ==== Notifications // ============================================================================ - (void)projectDictDidChange:(NSNotification *)aNotif { NSDictionary *notifObject = [aNotif object]; PCProject *changedProject = [notifObject objectForKey:@"Project"]; NSString *changedAttribute = [notifObject objectForKey:@"Attribute"]; if (!browser) { return; } if (changedProject != project && changedProject != [project activeSubproject] && [changedProject superProject] != [project activeSubproject]) { return; } // NSLog(@"PCPB: projectDictDidChange in %@ (%@)", // [changedProject projectName], [project projectName]); // If project dictionary changed after files adding/removal, // refresh file list if ([[changedProject rootKeys] containsObject:changedAttribute]) { [self reloadLastColumnAndNotify:YES]; } } @end @implementation PCProjectBrowser (ProjectBrowserDelegate) - (void) browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix { NSString *pathToCol; NSArray *files; 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]]; [cell setRefusesFirstResponder:YES]; } } @end @implementation PCProjectBrowser (FileNameIconDelegate) // If file was opened in editor: // 1. Determine editor // 2. Ask editor for icon - (NSImage *)_editorIconImageForFile:(NSString *)fileName { PCProjectEditor *projectEditor = [project projectEditor]; id editor = nil; NSString *categoryName = [self nameOfSelectedCategory]; NSString *categoryKey = [project keyForCategory:categoryName]; NSString *filePath; filePath = [project pathForFile:fileName forKey:categoryKey]; editor = [projectEditor editorForFile:filePath]; if (editor != nil) { return [editor fileIcon]; } return nil; } - (NSImage *)fileNameIconImage { NSString *categoryName = nil; NSString *fileName = nil; NSString *fileExtension = nil; NSString *iconName = nil; NSImage *icon = nil; PCProject *activeProject = [[project projectManager] activeProject]; fileName = [self nameOfSelectedFile]; if (fileName) { if ((icon = [self _editorIconImageForFile:fileName])) { return icon; } fileExtension = [fileName pathExtension]; } else { categoryName = [self nameOfSelectedCategory]; } /* PCLogError(self,@"{setFileIcon} file %@ category %@", fileName, categoryName);*/ if ([[self selectedFiles] count] > 1) { iconName = [[NSString alloc] initWithString:@"MultiFiles"]; } // Nothing or subproject name selected else if ((!categoryName && !fileName) || [fileName isEqualToString:[activeProject projectName]]) { iconName = [[NSString alloc] initWithString:@"FileProject"]; } 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 { icon = [[NSWorkspace sharedWorkspace] iconForFile:fileName]; } return icon; } - (NSString *)fileNameIconTitle { NSString *categoryName = [self nameOfSelectedCategory]; NSString *fileName = [self nameOfSelectedFile]; int filesCount = [[self selectedFiles] count]; if (filesCount > 1) { return [NSString stringWithFormat:@"%i files", filesCount]; } else if (fileName) { return fileName; } else if (categoryName) { return categoryName; } return PCFileNameFieldNoFiles; } - (NSString *)fileNameIconPath { NSString *fileName = [self nameOfSelectedFile]; NSString *category = [self nameOfSelectedCategory]; return [project pathForFile:fileName forKey:[project keyForCategory:category]]; } - (BOOL)canPerformDraggingOf:(NSArray *)paths { NSString *category = [self nameOfSelectedCategory]; NSString *categoryKey = [project keyForCategory:category]; NSArray *fileTypes = [project fileTypesForCategoryKey:categoryKey]; NSEnumerator *e = [paths objectEnumerator]; NSString *s; NSLog(@"PCBrowser: canPerformDraggingOf -> %@", category); if (!category || ([self nameOfSelectedFile] != nil)) { return NO; } if (![project isEditableCategory:category]) { return NO; } // Check if we can accept files of such types while ((s = [e nextObject])) { if (![fileTypes containsObject:[s pathExtension]]) { return NO; } } return YES; } - (BOOL)prepareForDraggingOf:(NSArray *)paths { return YES; } - (BOOL)performDraggingOf:(NSArray *)paths { NSString *category = [self nameOfSelectedCategory]; NSString *categoryKey = [project keyForCategory:category]; NSEnumerator *pathsEnum = [paths objectEnumerator]; NSString *file = nil; while ((file = [[pathsEnum nextObject] lastPathComponent])) { if (![project doesAcceptFile:file forKey:categoryKey]) { return NO; } } return [project addAndCopyFiles:paths forKey:categoryKey]; } @end ProjectCenter-0.6.1/Framework/PCButton.m000644 001751 000024 00000022403 11157560560 020566 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003-2004 Free Software Foundation Authors: 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. */ #import #import #import #import @implementation PCButton // ============================================================================ // ==== Main // ============================================================================ //- (id)initWithFrame:(NSRect)frameRect - (id)initWithCoder:(NSCoder *)coder { // NSLog(@"PCButton: initWithCoder"); self = [super initWithCoder:coder]; [_cell setGradientType:NSGradientConcaveWeak]; [_cell setImageDimsWhenDisabled:YES]; [self setImagePosition:NSImageOnly]; [self setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; [self setRefusesFirstResponder:YES]; _hasTooltips = NO; ttTimer = nil; ttWindow = nil; ttTitleAttrs = [[NSMutableDictionary alloc] init]; [ttTitleAttrs setObject:[NSFont systemFontOfSize:10.0] forKey:NSFontAttributeName]; ttBackground = [NSColor colorWithDeviceRed:1.0 green:1.0 blue:0.90 alpha:1.0]; RETAIN(ttBackground); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateTrackingRects:) name:NSViewFrameDidChangeNotification object:[[self window] contentView]]; return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog(@"PCButton %@: dealloc", [self stringValue]); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; if (_hasTooltips) { [self removeAllToolTips]; RELEASE(ttTitleAttrs); RELEASE(ttBackground); RELEASE(ttWindow); } [super dealloc]; } - (void)release { // If retain count is number of tracking rects + superview retain, // remove tracking rects. It seems that tracking rects retain this object. if (_hasTooltips && [self retainCount] == [_tracking_rects count] + 1) { [self removeAllToolTips]; } [super release]; } // ============================================================================ // ==== Private methods // ============================================================================ - (void)_updateTrackingRects:(NSNotification *)aNotif { NSTrackingRectTag tag; NSRect rect; NSString *string = nil; int i, j; GSTrackingRect *tr = nil; if (_hasTooltips == NO) { return; } j = [_tracking_rects count]; for (i = 0; i < j; i++) { tr = [_tracking_rects objectAtIndex:i]; // Save tooltip string for next addTrackingRect:::: string = [(NSString *)tr->user_data copy]; [self removeTrackingRect:tr->tag]; // NSLog(@"PCButton: tr: %i data: %@", tr->tag, tr->user_data); rect = [self frame]; rect.origin.x = 0; rect.origin.y = 0; tag = [self addTrackingRect:rect owner:self userData:string assumeInside:NO]; if (tr->tag == mainToolTip) { mainToolTip = tag; } RELEASE(string); } } - (void)_invalidateTimer { if (ttTimer == nil) { return; } // NSLog(@"_invalidateTimer"); if ([ttTimer isValid]) { [ttTimer invalidate]; } ttTimer = nil; } - (void)_closeToolTipWindow { if (ttWindow) { [ttWindow close]; ttWindow = nil; } } - (void)_drawToolTip:(NSAttributedString *)title { NSRectEdge sides[] = {NSMinXEdge, NSMaxYEdge, NSMaxXEdge, NSMinYEdge}; NSColor *black = [NSColor blackColor]; NSColor *colors[] = {black, black, black, black}; NSRect bounds = [[ttWindow contentView] bounds]; NSRect titleRect; titleRect = [ttWindow frame]; titleRect.origin.x = 2; titleRect.origin.y = -2; [[ttWindow contentView] lockFocus]; [title drawInRect:titleRect]; NSDrawColorTiledRects(bounds, bounds, sides, colors, 4); [[ttWindow contentView] unlockFocus]; } - (void)_showTooltip:(NSTimer *)timer { NSString *ttText = [timer userInfo]; [self _invalidateTimer]; // NSLog(@"showTooltip: %@", ttText); // NSLog(@"toolTips: %@", toolTips); if (ttWindow == nil) { NSAttributedString *attributedTitle = nil; NSSize titleSize; NSPoint mouseLocation = [NSEvent mouseLocation]; NSRect windowRect; attributedTitle = [[NSAttributedString alloc] initWithString:ttText attributes:ttTitleAttrs]; titleSize = [attributedTitle size]; // Window windowRect = NSMakeRect(mouseLocation.x + 8, mouseLocation.y - 16 - (titleSize.height+3), titleSize.width + 4, titleSize.height + 4); ttWindow = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreRetained defer:YES]; [ttWindow setBackgroundColor:ttBackground]; [ttWindow setReleasedWhenClosed:YES]; [ttWindow setExcludedFromWindowsMenu:YES]; [ttWindow setLevel:NSStatusWindowLevel]; [ttWindow orderFront:nil]; [self _drawToolTip:attributedTitle]; RELEASE(attributedTitle); } } // ============================================================================ // ==== Tool Tips // ============================================================================ /*- (void)mouseEntered:(NSEvent *)theEvent { NSLog (@"mouseEntered"); if (ttTimer == nil) { ttTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(_showTooltip:) userInfo:[theEvent userData] repeats:YES]; [[self window] setAcceptsMouseMovedEvents:YES]; } } - (void)mouseExited:(NSEvent *)theEvent { // NSLog (@"mouseExited"); [self _invalidateTimer]; [self _closeToolTipWindow]; [[self window] setAcceptsMouseMovedEvents:NO]; } - (void)mouseDown:(NSEvent *)theEvent { // NSLog (@"mouseDown"); [self _invalidateTimer]; [self _closeToolTipWindow]; [super mouseDown:theEvent]; } - (void)mouseMoved:(NSEvent *)theEvent { NSPoint mouseLocation; NSPoint origin; // NSLog(@"mouseMoved"); if (ttWindow == nil) { return; } mouseLocation = [NSEvent mouseLocation]; origin = NSMakePoint(mouseLocation.x + 8, mouseLocation.y - 16 - [ttWindow frame].size.height); [ttWindow setFrameOrigin:origin]; } // NSView methods - (NSToolTipTag)addToolTipRect:(NSRect)aRect owner:(id)anObject userData:(void *)data { SEL ownerSelector; NSTrackingRectTag tag; if (NSEqualRects(aRect,NSZeroRect) || ttTimer != nil) { return -1; } ownerSelector = @selector(view:stringForToolTip:point:userData:); if (![anObject respondsToSelector:ownerSelector] && ![anObject isKindOfClass:[NSString class]]) { return -1; } // Set rect tracking tag = [self addTrackingRect:aRect owner:self userData:data assumeInside:NO]; return tag; } - (void)removeAllToolTips { int i, j; GSTrackingRect *tr = nil; if (_hasTooltips == NO) { return; } [self _invalidateTimer]; [self _closeToolTipWindow]; j = [_tracking_rects count]; for (i = 0; i < j; i++) { tr = [_tracking_rects objectAtIndex:i]; [self removeTrackingRect:tr->tag]; } mainToolTip = -1; _hasTooltips = NO; } - (void)removeToolTip:(NSToolTipTag)tag { [self removeTrackingRect:tag]; } - (void)setToolTip:(NSString *)string { NSTrackingRectTag tag; NSRect rect; if (string == nil) // Remove old tooltip { if (_hasTooltips) { [self _invalidateTimer]; [self _closeToolTipWindow]; [self removeToolTip:mainToolTip]; mainToolTip = -1; _hasTooltips = NO; } } else { // NSLog(@"setToolTip"); rect = [self frame]; rect.origin.x = 0; rect.origin.y = 0; tag = [self addTrackingRect:rect owner:self userData:string assumeInside:NO]; _hasTooltips = YES; } } - (NSString *)toolTip { NSEnumerator *enumerator = [_tracking_rects objectEnumerator]; GSTrackingRect *tr = nil; while ((tr = [enumerator nextObject])) { if (tr->tag == mainToolTip) { return tr->user_data; } } return nil; }*/ @end ProjectCenter-0.6.1/Framework/PCProjectEditor.m000644 001751 000024 00000024310 11471170171 022061 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola 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. */ #import #import #import #import #import #import #import #import #import @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 // =========================================================================== // ==== Initialisation // =========================================================================== - (id)init { if ((self = [super init])) { PCLogStatus(self, @"[init]"); _componentView = nil; } return self; } - (void)dealloc { #ifdef DEVELOPMENT #endif NSLog (@"PCProjectEditor: dealloc"); // [[NSNotificationCenter defaultCenter] removeObserver:self]; if (_componentView) { RELEASE(_scrollView); RELEASE(_componentView); } // RELEASE(_editorsDict); [super dealloc]; } - (NSView *)componentView { if (_componentView == nil) { [self _createComponentView]; } return _componentView; } - (PCProject *)project { return _project; } - (void)setProject:(PCProject *)aProject { _project = aProject; } // =========================================================================== // ==== Project and Editor handling // =========================================================================== // TODO: Should it be editor or parser? - (BOOL)editorProvidesBrowserItemsForItem:(NSString *)item { NSString *file = [[_project projectBrowser] nameOfSelectedFile]; PCBundleManager *bundleManager = [[_project projectManager] bundleManager]; NSDictionary *infoTable = nil; // File selected and editor should already be loaded if (file != nil) { if ([[item substringToIndex:1] isEqualToString:@"@"]) { return YES; } } // Category selected infoTable = [bundleManager infoForBundleType:@"editor" keyName:@"FileTypes" keyContains:[item pathExtension]]; if ([[infoTable objectForKey:@"ProvidesBrowserItems"] isEqualToString:@"YES"]) { return YES; } return NO; } // Called by PCProjectBrowser // categoryPath: // 1. "/Classes/Class.m/- init" // 2. "/Subprojects/Project/Classes/Class.m/- init" // 3. "/Library/gnustep-gui" - (id)openEditorForCategoryPath:(NSString *)categoryPath windowed:(BOOL)windowed { NSArray *pathArray = [categoryPath pathComponents]; NSString *pathLastObject = [pathArray lastObject]; PCProject *activeProject = [[_project projectManager] activeProject]; NSString *category = [[_project projectBrowser] nameOfSelectedCategory]; NSString *categoryKey = [activeProject keyForCategory:category]; NSString *fileName = nil; NSString *filePath = nil; BOOL editable = YES; id editor; fileName = [[[[_project projectBrowser] pathFromSelectedCategory] pathComponents] objectAtIndex:2]; filePath = [activeProject pathForFile:fileName forKey:categoryKey]; /* NSLog(@"PCPE: fileName: %@ filePath: %@ project: %@", fileName, filePath, [activeProject projectName]);*/ // Determine if file should be opened for read only if (![_project isEditableFile:fileName]) { editable = NO; } // NSLog(@"fileName: %@ > %@", fileName, listEntry); // Set the 'editor' var either by requesting already opened // editor or by creating the new one. editor = [self openEditorForFile:filePath editable:editable windowed:windowed]; if (!editor) { NSLog(@"We don't have editor for file: %@", fileName); return nil; } // Category path was changed by user's clicking inside browser. // That's why new category path must be transfered to editor. [editor setCategoryPath:categoryPath]; [self orderFrontEditorForFile:filePath]; /* pathLastObject = [pathArray lastObject]; NSLog(@"pathArray: c: %i %@", [pathArray count], pathArray); NSLog(@"pathArray: lastObject %@", [pathArray lastObject]); NSLog(@"lastObject[1]: %@", [pathLastObject substringWithRange:NSMakeRange(0,1)]);*/ if ([pathLastObject isEqualToString:@"/"]) { pathLastObject = [pathArray objectAtIndex:[pathArray count]-2]; if ([pathLastObject isEqualToString:fileName]) // file selected { // Reload last column because editor has just been loaded [[_project projectBrowser] reloadLastColumnAndNotify:NO]; } else { [editor fileStructureItemSelected:pathLastObject]; } } else // TODO: rethink { [editor fileStructureItemSelected:pathLastObject]; } return editor; } - (void)orderFrontEditorForFile:(NSString *)path { id editor = [_editorsDict objectForKey:path]; if (!editor) { return; } if ([editor isWindowed]) { [editor show]; } else { [_componentView setContentView:[editor componentView]]; [[_project projectWindow] setCustomContentView:_componentView]; [[_project projectWindow] makeFirstResponder:[editor editorView]]; [[_project projectWindow] makeKeyAndOrderFront:self]; NSLog(@"PCPE: categoryPath - %@", [editor categoryPath]); [[_project projectBrowser] setPath:[editor categoryPath]]; } } // =========================================================================== // ==== File handling // =========================================================================== - (BOOL)saveFileAs:(NSString *)file { id editor = [self activeEditor]; NSString *categoryPath = nil; BOOL res; if (editor != nil) { categoryPath = [editor categoryPath]; res = [super saveFileAs:file]; [editor setCategoryPath:categoryPath]; return res; } return NO; } // =========================================================================== // ==== Notifications // =========================================================================== - (void)editorDidOpen:(NSNotification *)aNotif { /* PCEditor *editor = [aNotif object]; PCProjectBrowser *browser = [_project projectBrowser]; NSString *path = [browser path]; // Active editor is set after PCEditorDidBecomeActiveNotification will be // sent, but we should do it here for loading list of classes into browser. [self setActiveEditor:editor]; [browser reloadLastColumnAndNotify:NO]; [browser setPath:path];*/ NSLog(@"PCProjectEditor editorDidOpen!"); } - (void)editorDidClose:(NSNotification *)aNotif { id editor = [aNotif object]; // It is not our editor if (![[_editorsDict allValues] containsObject:editor]) { return; } [_editorsDict removeObjectForKey:[editor path]]; if ([_editorsDict count]) { NSString *lastEditorKey = [[_editorsDict allKeys] lastObject]; id lastEditor = [_editorsDict objectForKey:lastEditorKey]; [_componentView setContentView:[lastEditor componentView]]; [[_project projectWindow] makeFirstResponder:[lastEditor editorView]]; } else { PCProjectBrowser *browser = [_project projectBrowser]; [_componentView setContentView:_scrollView]; [[_project projectWindow] makeFirstResponder:_scrollView]; [browser setPath:[browser pathToSelectedCategory]]; [self setActiveEditor:nil]; } } - (void)editorDidBecomeActive:(NSNotification *)aNotif { id editor = [aNotif object]; NSString *categoryPath = [editor categoryPath]; if (![[_editorsDict allValues] containsObject:editor]) { return; } [self setActiveEditor:editor]; if (categoryPath) { [[_project projectBrowser] setPath:categoryPath]; } } @end ProjectCenter-0.6.1/Framework/PCProjectBuilder.m000644 001751 000024 00000106044 11506375034 022232 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola 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. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "../Modules/Preferences/Build/PCBuildPrefs.h" #ifndef IMAGE #define IMAGE(X) [NSImage imageNamed: X] #endif #ifndef NOTIFICATION_CENTER #define NOTIFICATION_CENTER [NSNotificationCenter defaultCenter] #endif @implementation PCProjectBuilder - (id)initWithProject:(PCProject *)aProject { #ifdef DEBUG NSLog (@"PCProjectBuilder: initWithProject"); #endif NSAssert(aProject, @"No project specified!"); if ((self = [super init])) { project = aProject; buildStatusTarget = [[NSMutableString alloc] initWithString:@"all"]; buildTarget = [[NSMutableString alloc] initWithString:@"all"]; buildArgs = [[NSMutableArray array] retain]; buildOptions = [[PCProjectBuilderOptions alloc] initWithProject:project delegate:self]; postProcess = NULL; makeTask = nil; _isBuilding = NO; _isCleaning = NO; _isCVLoaded = NO; if ([NSBundle loadNibNamed:@"Builder" owner:self] == NO) { PCLogError(self, @"error loading Builder NIB file!"); return nil; } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadPreferences:) name:PCPreferencesDidChangeNotification object:nil]; [self loadPreferences:nil]; } return self; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCProjectBuilder: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; if ([componentView superview]) { [componentView removeFromSuperview]; } RELEASE(buildStatusTarget); RELEASE(buildTarget); RELEASE(buildArgs); RELEASE(buildOptions); RELEASE(successSound); RELEASE(failureSound); RELEASE(rootBuildDir); RELEASE(buildTool); // NSLog(@"Project Builder--> componentView RC: %i", // [componentView retainCount]); RELEASE(componentView); RELEASE(errorArray); RELEASE(errorString); // NSLog(@"Project Builder--> RC: %i", [self retainCount]); [super dealloc]; } - (void)awakeFromNib { NSScrollView *errorScroll; NSScrollView *logScroll; if (_isCVLoaded) { return; } // NSLog(@"ProjectBuilder awakeFromNib"); [componentView retain]; [componentView removeFromSuperview]; // NSLog(@"ProjectBuilder awakeFromNib: componentView RC:%i", // [componentView retainCount]); /* * 4 build Buttons */ [buildButton setToolTip:@"Build"]; [buildButton setImage:IMAGE(@"Build")]; [cleanButton setToolTip:@"Clean"]; [cleanButton setImage:IMAGE(@"Clean")]; [optionsButton setToolTip:@"Build Options"]; [optionsButton setImage:IMAGE(@"Options")]; [errorsCountField setStringValue:@""]; [self updateTargetField]; /* * Error output */ errorArray = [[NSMutableArray alloc] initWithCapacity:0]; errorString = [[NSMutableString alloc] initWithString:@""]; errorImageColumn = [[NSTableColumn alloc] initWithIdentifier:@"ErrorImage"]; [errorImageColumn setEditable:NO]; [errorImageColumn setWidth:20.0]; errorColumn = [[NSTableColumn alloc] initWithIdentifier:@"Error"]; [errorColumn setEditable:NO]; errorOutput = [[NSTableView alloc] initWithFrame:NSMakeRect(0,0,209,111)]; [errorOutput setAllowsMultipleSelection:NO]; [errorOutput setAllowsColumnReordering:NO]; [errorOutput setAllowsColumnResizing:NO]; [errorOutput setAllowsEmptySelection:YES]; [errorOutput setAllowsColumnSelection:NO]; [errorOutput setRowHeight:19.0]; [errorOutput setCornerView:nil]; [errorOutput setHeaderView:nil]; [errorOutput addTableColumn:errorImageColumn]; [errorOutput addTableColumn:errorColumn]; [errorOutput setDataSource:self]; [errorOutput setBackgroundColor:[NSColor colorWithDeviceRed:0.88 green:0.76 blue:0.60 alpha:1.0]]; [errorOutput setDrawsGrid:NO]; [errorOutput setTarget:self]; [errorOutput setAction:@selector(errorItemClick:)]; errorScroll = [[NSScrollView alloc] initWithFrame:NSMakeRect(0,0,464,120)]; [errorScroll setHasHorizontalScroller:NO]; [errorScroll setHasVerticalScroller:YES]; [errorScroll setBorderType:NSBezelBorder]; [errorScroll setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; [errorScroll setDocumentView:errorOutput]; RELEASE(errorOutput); /* * Log output */ logScroll = [[NSScrollView alloc] initWithFrame:NSMakeRect(0,0,480,133)]; [logScroll setHasHorizontalScroller:NO]; [logScroll setHasVerticalScroller:YES]; [logScroll setBorderType:NSBezelBorder]; [logScroll setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; logOutput = [[NSTextView alloc] initWithFrame:[[logScroll 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]; [logScroll setDocumentView:logOutput]; RELEASE(logOutput); /* * Split view */ [split addSubview:errorScroll]; RELEASE(errorScroll); [split addSubview:logScroll]; RELEASE(logScroll); // [split adjustSubviews]; // [componentView addSubview:split]; // RELEASE (split); _isCVLoaded = YES; } - (NSView *)componentView { return componentView; } - (void)loadPreferences:(NSNotification *)aNotification { id prefs = [[project projectManager] prefController]; ASSIGN(successSound, [prefs stringForKey:SuccessSound]); ASSIGN(failureSound, [prefs stringForKey:FailureSound]); ASSIGN(rootBuildDir, [prefs stringForKey:RootBuildDirectory]); ASSIGN(buildTool, [prefs stringForKey:BuildTool]); promptOnClean = [prefs boolForKey:PromptOnClean]; } - (void)updateTargetField { NSString *s; NSString *args; args = [[[project projectDict] objectForKey:PCBuilderArguments] componentsJoinedByString:@" "]; if (!args) args = @" "; s = [NSString stringWithFormat:@"%@ with args '%@'", buildTarget, args]; [targetField setStringValue:s]; } // --- 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]; } } - (NSArray *)buildArguments { NSDictionary *projectDict = [project projectDict]; NSMutableArray *args = [NSMutableArray new]; [args addObjectsFromArray:[projectDict objectForKey:PCBuilderArguments]]; // --- Get arguments from options if ([[projectDict objectForKey:PCBuilderDebug] isEqualToString:@"YES"]) { // there is no clear default; the default configuration of GNUstep-make // uses debug=no (since release 2.2.1, it had debug=yes before), but // that default can easily be changed at configuration time with the // --enable-debug-by-default configure option. [args addObject:@"debug=yes"]; } else { // default is 'debug=yes' [args addObject:@"debug=no"]; } if ([[projectDict objectForKey:PCBuilderStrip] isEqualToString:@"YES"]) { // default is 'strip=no' [args addObject:@"strip=yes"]; } if ([[projectDict objectForKey:PCBuilderSharedLibs] isEqualToString:@"NO"]) { // default is 'shared=yes' [args addObject:@"shared=no"]; } // Always add 'messages=yes' argument. Build output parsing assumes this. [args addObject:@"messages=yes"]; // "Verbose ouput" option (Build Options panel) just toogle if build shows // as with argument 'messages=yes' or not. if ([[projectDict objectForKey:PCBuilderVerbose] isEqualToString:@"YES"]) { verboseBuilding = YES; } else { verboseBuilding = NO; } return args; } // --- GUI Actions - (void)startBuild:(id)sender { if ([self stopMake:self] == YES) {// We've just stopped build process return; } // Set build arguments [buildArgs addObject:buildTarget]; [buildArgs addObjectsFromArray:[self buildArguments]]; // NSLog(@"ProjectBuilder arguments: %@", buildArgs); currentEL = ELNone; lastEL = ELNone; nextEL = ELNone; lastIndentString = @""; buildStatus = [NSString stringWithString:@"Building..."]; [buildStatusTarget setString:@"Build"]; [cleanButton setEnabled:NO]; _isBuilding = YES; [self build:self]; } - (void)startClean:(id)sender { if ([self stopMake:self] == YES) {// We've just stopped build process return; } if (promptOnClean) { if (NSRunAlertPanel(@"Project Clean", @"Do you really want to clean project '%@'?", @"Clean", @"Stop", nil, [project projectName]) == NSAlertAlternateReturn) { [cleanButton setState:NSOffState]; return; } } // Set build arguments [buildArgs addObject:@"clean"]; [buildArgs addObjectsFromArray:[self buildArguments]]; buildStatus = [NSString stringWithString:@"Cleaning..."]; [buildStatusTarget setString:@"Clean"]; [buildButton setEnabled:NO]; _isCleaning = YES; [self build:self]; } - (BOOL)stopMake:(id)sender { if (makeTask && [makeTask isRunning]) { PCLogStatus(self, @"task will terminate"); NS_DURING { [makeTask terminate]; } NS_HANDLER { return NO; } NS_ENDHANDLER return YES; } return NO; } - (void)showOptionsPanel:(id)sender { [buildOptions show:[[componentView window] frame]]; } - (void)cleanupAfterMake:(NSString *)statusString { // NSString *statusString; if (_isBuilding || _isCleaning) { // statusString =[NSString stringWithFormat: // @"%@ - %@ terminated", [project projectName], buildStatusTarget]; [statusField setStringValue:statusString]; [[project projectWindow] updateStatusLineWithText:statusString]; } // Restore buttons state if (_isBuilding) { [buildButton setState:NSOffState]; [cleanButton setEnabled:YES]; _isBuilding = NO; } else if (_isCleaning) { [cleanButton setState:NSOffState]; [buildButton setEnabled:YES]; _isCleaning = NO; } [buildArgs removeAllObjects]; [buildStatusTarget setString:@"Default"]; // Initiated in [self build:] [currentBuildPath release]; [currentBuildFile release]; } // --- Actions - (BOOL)prebuildCheck { PCFileManager *pcfm = [PCFileManager defaultManager]; NSFileManager *fm = [NSFileManager defaultManager]; NSString *buildDir; PCProjectEditor *projectEditor; int ret; // Checking for project 'edited' state if ([project isProjectChanged]) { ret = NSRunAlertPanel(@"Project Build", @"Project was changed and not saved.\n" @"Do you want to save project before building it?", @"Stop Build", @"Save and Build", nil); switch (ret) { case NSAlertDefaultReturn: // Stop Build return NO; break; case NSAlertAlternateReturn: // Save Project [project save]; break; } } else { // Synchronize PC.project and generate files [project save]; } // Checking if edited files exist projectEditor = [project projectEditor]; if ([projectEditor hasModifiedFiles]) { if (!PCRunSaveModifiedFilesPanel(projectEditor, @"Save and Build", @"Build Anyway", @"Cancel")) { return NO; } } // Check build tool path if (!buildTool || ![fm fileExistsAtPath:buildTool]) { NSRunAlertPanel(@"Project Build", @"Build tool '%@' not found. Check preferences.\n" @"Build will be terminated.", @"Close", nil, nil, buildTool); return NO; } // Create root build directory if not exist if (rootBuildDir && ![rootBuildDir isEqualToString:@""]) { buildDir = [NSString stringWithFormat:@"%@.build", [project projectName]]; buildDir = [rootBuildDir stringByAppendingPathComponent:buildDir]; if (![fm fileExistsAtPath:rootBuildDir] || ![fm fileExistsAtPath:buildDir]) { [pcfm createDirectoriesIfNeededAtPath:buildDir]; } } return YES; } - (void)build:(id)sender { // Make runtime vars // Released in [self cleanupAfterMake] currentBuildPath = [[NSMutableString alloc] initWithString:[project projectPath]]; currentBuildFile = [[NSMutableString alloc] initWithString:@""]; // Checking build conditions if ([self prebuildCheck] == NO) { [self cleanupAfterMake:[NSString stringWithFormat: @"%@ - %@ terminated", [project projectName], buildStatusTarget]]; return; } // Prepearing to building stdOutPipe = [[NSPipe alloc] init]; stdOutHandle = [stdOutPipe fileHandleForReading]; stdErrorPipe = [[NSPipe alloc] init]; stdErrorHandle = [stdErrorPipe fileHandleForReading]; [errorsCountField setStringValue:[NSString stringWithString:@""]]; errorsCount = 0; warningsCount = 0; [statusField setStringValue:buildStatus]; [[project projectWindow] updateStatusLineWithText:buildStatus]; // Run make task [logOutput setString:@""]; [errorArray removeAllObjects]; [errorOutput reloadData]; [NOTIFICATION_CENTER addObserver:self selector:@selector(buildDidTerminate:) name:NSTaskDidTerminateNotification object:nil]; makeTask = [[NSTask alloc] init]; [makeTask setArguments:buildArgs]; [makeTask setCurrentDirectoryPath:[project projectPath]]; [makeTask setLaunchPath:buildTool]; [makeTask setStandardOutput:stdOutPipe]; [makeTask setStandardError:stdErrorPipe]; [self logBuildString: [NSString stringWithFormat:@"=== %@ started ===", buildStatusTarget] newLine:YES]; NS_DURING { [makeTask launch]; // now that we know that the task is running start logging [stdOutHandle waitForDataInBackgroundAndNotify]; [NOTIFICATION_CENTER addObserver:self selector:@selector(logStdOut:) name:NSFileHandleDataAvailableNotification object:stdOutHandle]; _isLogging = YES; [stdErrorHandle waitForDataInBackgroundAndNotify]; [NOTIFICATION_CENTER addObserver:self selector:@selector(logErrOut:) name:NSFileHandleDataAvailableNotification object:stdErrorHandle]; _isErrorLogging = YES; } NS_HANDLER { NSRunAlertPanel(@"Problem Launching Build Tool", [localException reason], @"OK", nil, nil, nil); //Clean up after task is terminated [NOTIFICATION_CENTER postNotificationName:NSTaskDidTerminateNotification object:makeTask]; } NS_ENDHANDLER } - (void)buildDidTerminate:(NSNotification *)aNotif { int status; NSString *logString; NSString *statusString; if ([aNotif object] != makeTask) { return; } // NSLog(@"task did terminate"); [NOTIFICATION_CENTER removeObserver:self name:NSTaskDidTerminateNotification object:nil]; // If task was not launched catch exception NS_DURING { status = [makeTask terminationStatus]; } NS_HANDLER { status = 1; } NS_ENDHANDLER // Finish task // TODO: Strange behaviour of pipe and file handlers alloc/release. Also // they have big retain count here (2 or 3). Why? Notification retains it? RELEASE(makeTask); makeTask = nil; // Wait while logging ends while (_isLogging || _isErrorLogging) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; } RELEASE(stdOutPipe); RELEASE(stdErrorPipe); [self updateErrorsCountField]; if (status == 0) { logString = [NSString stringWithFormat:@"=== %@ succeeded! ===", buildStatusTarget]; statusString = [NSString stringWithFormat:@"%@ - %@ succeeded", [project projectName], buildStatusTarget]; } else { logString = [NSString stringWithFormat:@"=== %@ terminated! ===", buildStatusTarget]; if (errorsCount > 0) { statusString = [NSString stringWithFormat: @"%@ - %@ failed (%i errors)", [project projectName], buildStatusTarget, errorsCount]; } else { statusString = [NSString stringWithFormat:@"%@ - %@ failed", [project projectName], buildStatusTarget]; } } [statusField setStringValue:statusString]; [[project projectWindow] updateStatusLineWithText:statusString]; [self logBuildString:logString newLine:YES]; // Run post process if configured /* if (status && postProcess) { [self performSelector:postProcess]; postProcess = NULL; }*/ [self cleanupAfterMake:statusString]; } // --- BuilderOptions delegate - (void)targetDidSet:(NSString *)target { [buildTarget setString:target]; [self updateTargetField]; } @end @implementation PCProjectBuilder (Logging) - (void)updateErrorsCountField { NSString *string; NSString *errorsString = [NSString stringWithString:@""]; NSString *warningsString = [NSString stringWithString:@""]; if (errorsCount > 0) { if (errorsCount > 1) { errorsString = [NSString stringWithFormat:@"%i errors", errorsCount]; } else { errorsString = [NSString stringWithString:@"1 error"]; } } if (warningsCount > 0) { if (warningsCount > 1) { warningsString = [NSString stringWithFormat:@"%i warnings", warningsCount]; } else { warningsString = [NSString stringWithString:@"1 warning"]; } } string = [NSString stringWithFormat:@"%@ %@", errorsString, warningsString]; [errorsCountField setStringValue:string]; } // --- Data notifications // Both methods make call to dipatcher logData:error: - (void)logStdOut:(NSNotification *)aNotif { NSData *data; if ((data = [stdOutHandle availableData]) && [data length] > 0) { [self logData:data error:NO]; [stdOutHandle waitForDataInBackgroundAndNotify]; } else { // stop logging after the task has closed the pipe [NOTIFICATION_CENTER removeObserver:self name:NSFileHandleDataAvailableNotification object:stdOutHandle]; _isLogging = NO; } } - (void)logErrOut:(NSNotification *)aNotif { NSData *data; if ((data = [stdErrorHandle availableData]) && [data length] > 0) { [self logData:data error:YES]; [stdErrorHandle waitForDataInBackgroundAndNotify]; } else { // stop logging after the task has closed the pipe [NOTIFICATION_CENTER removeObserver:self name:NSFileHandleDataAvailableNotification object:stdErrorHandle]; _isErrorLogging = NO; } } // --- Dispatching - (void)logData:(NSData *)data error:(BOOL)isError { NSString *dataString; NSRange newLineRange; NSRange lineRange; NSString *lineString; dataString = [[NSString alloc] initWithData:data encoding:[NSString defaultCStringEncoding]]; // Process new data lineRange.location = 0; newLineRange.location = 0; // 'errorString' collects data across logData:error: calls until // new line character is appeared. [errorString appendString:dataString]; while (newLineRange.location != NSNotFound) { newLineRange = [errorString rangeOfString:@"\n"]; /* NSLog(@"Line(%i) new line range: %i,%i for string\n<--|%@|-->", [errorString length], newLineRange.location, newLineRange.length, errorString);*/ if (newLineRange.location < [errorString length]) { // NSLog(@"<------%@------>", errorString); lineRange.length = newLineRange.location+1; lineString = [errorString substringWithRange:lineRange]; [errorString deleteCharactersInRange:lineRange]; // Send it to error view // Do not process make errors in other mode but building. Maybe // some day... if (_isBuilding && isError) { [self logErrorString:lineString]; } // Cleaning or building standard out string if (!isError || verboseBuilding) { [self logBuildString:lineString newLine:NO]; } } else { newLineRange.location = NSNotFound; continue; } } RELEASE(dataString); } @end @implementation PCProjectBuilder (BuildLogging) // --- Parsing utilities - (BOOL)line:(NSString *)lineString startsWithString:(NSString *)substring { int position = 0; NSRange range = NSMakeRange(position,1); while ([[lineString substringFromRange:range] isEqualToString:@" "]) { range.location = ++position; } /* NSLog(@"Line '%@' position: %i substring '%@'", lineString, position, substring);*/ range = [lineString rangeOfString:substring]; if ((range.location == NSNotFound) || (range.location != position)) { return NO; } return YES; } // Clean leading spaces and return cleaned array of components - (NSArray *)componentsOfLine:(NSString *)lineString { NSArray *lineComponents; NSMutableArray *tempComponents; lineComponents = [lineString componentsSeparatedByString:@" "]; tempComponents = [NSMutableArray arrayWithArray:lineComponents]; while ([[tempComponents objectAtIndex:0] isEqualToString:@""]) { [tempComponents removeObjectAtIndex:0]; } return tempComponents; } // Line starts with 'gmake' or 'make'. // Changes 'currentBuildPath' if line starts with // "Entering directory" or "Leaving directory". // For example: // gmake[1]: Entering directory '/Users/me/Project/Subproject.subproj' - (void)parseMakeLine:(NSString *)lineString { NSMutableArray *makeLineComponents; NSString *makeLine; NSString *pathComponent; NSString *path; // NSLog(@"parseMakeLine: %@", lineString); makeLineComponents = [NSMutableArray arrayWithArray:[lineString componentsSeparatedByString:@" "]]; // Don't check for item at index 0 contents (it's 'gmake[1]:' or 'make[1]:') // just remove it. [makeLineComponents removeObjectAtIndex:0]; makeLine = [makeLineComponents componentsJoinedByString:@" "]; if ([self line:makeLine startsWithString:@"Entering directory"]) { pathComponent = [makeLineComponents objectAtIndex:2]; path = [pathComponent substringWithRange:NSMakeRange(1,[pathComponent length]-3)]; // NSLog(@"Go down to %@", path); [currentBuildPath setString:path]; } else if ([self line:makeLine startsWithString:@"Leaving directory"]) { // NSLog(@"Go up from %@", [makeLineComponents objectAtIndex:2]); [currentBuildPath setString:[currentBuildPath stringByDeletingLastPathComponent]]; } // NSLog(@"Current build path: %@", currentBuildPath); } // Should return: // 'Compiling ...' // 'Linking ...' // Also updates currentBuildFile - (NSString *)parseCompilerLine:(NSString *)lineString { NSArray *lineComponents = [self componentsOfLine:lineString]; NSString *outputString = nil; if ([lineComponents containsObject:@"-c"]) { [currentBuildFile setString:[lineComponents objectAtIndex:1]]; outputString = [NSString stringWithFormat:@" Compiling %@...\n", currentBuildFile]; } else if ([lineComponents containsObject:@"-rdynamic"]) { outputString = [NSString stringWithFormat:@" Linking %@...\n", [lineComponents objectAtIndex:[lineComponents indexOfObject:@"-o"]+1]]; } return outputString; } // --- Parsing utilities end // Log output - (void)logBuildString:(NSString *)string newLine:(BOOL)newLine { NSString *logString = [self parseBuildLine:string]; if (!logString) { return; } [logOutput replaceCharactersInRange: NSMakeRange([[logOutput string] length],0) withString:logString]; if (newLine) { [logOutput replaceCharactersInRange: NSMakeRange([[logOutput string] length], 0) withString:@"\n"]; } [logOutput scrollRangeToVisible:NSMakeRange([[logOutput string] length], 0)]; [logOutput setNeedsDisplay:YES]; } // Standard out is parsed for detection of directory, file, etc. // Gets complete line (ended with '\n') as argument - (NSString *)parseBuildLine:(NSString *)string { NSArray *components = [self componentsOfLine:string]; NSString *parsedString = nil; if (!components) { return nil; } if ([self line:string startsWithString:@"gmake"] || [self line:string startsWithString:@"make"]) {// Do current path detection [self parseMakeLine:string]; } else if ([self line:string startsWithString:@"gcc"]) {// Parse compiler output parsedString = [self parseCompilerLine:string]; } else if ([self line:string startsWithString:@"Making"] || [self line:string startsWithString:@"==="]) {// It's a gnustep-make and self output parsedString = string; } if (parsedString && ![self line:parsedString startsWithString:@"==="]) { [statusField setStringValue:parsedString]; [[project projectWindow] updateStatusLineWithText:parsedString]; } if (verboseBuilding) { return string; } else { return parsedString; } } @end @implementation PCProjectBuilder (ErrorLogging) // Entry point for error logging - (void)logErrorString:(NSString *)string { NSArray *items; items = [self parseErrorLine:string]; if (items) { [errorArray addObjectsFromArray:items]; [errorOutput reloadData]; [errorOutput scrollRowToVisible:[errorArray count]-1]; } } // Used for warning or error message retrieval - (NSString *)lineTail:(NSString*)line afterString:(NSString*)string { NSRange substrRange; substrRange = [line rangeOfString:string]; /* NSLog(@"In function ':%i:%i", substrRange.location, substrRange.length);*/ substrRange.location += substrRange.length; substrRange.length = [line length] - (substrRange.location); /* NSLog(@"In function ':%i:%i", substrRange.location, substrRange.length);*/ return [line substringWithRange:substrRange]; } - (NSArray *)parseErrorLine:(NSString *)string { NSArray *components = [string componentsSeparatedByString:@":"]; NSString *file = [NSString stringWithString:@""]; NSString *includedFile = [NSString stringWithString:@""]; NSString *position = [NSString stringWithString:@"{x=0; y=0}"]; NSString *type = [NSString stringWithString:@""]; NSString *message = [NSString stringWithString:@""]; NSMutableArray *items = [NSMutableArray arrayWithCapacity:1]; NSMutableDictionary *errorItem; NSString *indentString = @"\t"; NSString *lastFile = @""; NSString *lastIncludedFile = @""; NSAttributedString *attributedString; NSMutableDictionary *attributes = [NSMutableDictionary new]; NSFont *font = [NSFont boldSystemFontOfSize:12.0]; [attributes setObject:font forKey:NSFontAttributeName]; [attributes setObject:[NSNumber numberWithInt:NSSingleUnderlineStyle] forKey:NSUnderlineStyleAttributeName]; lastEL = currentEL; /* if (lastEL == ELFile) NSLog(@"+++ELFile"); if (lastEL == ELFunction) NSLog(@"+++ELFunction"); if (lastEL == ELIncluded) NSLog(@"+++ELIncluded"); if (lastEL == ELError) NSLog(@"+++ELError"); if (lastEL == ELNone) NSLog(@"+++ELNone");*/ if ([errorArray count] > 0) { lastFile = [[errorArray lastObject] objectForKey:@"File"]; lastIncludedFile = [[errorArray lastObject] objectForKey:@"IncludedFile"]; } if ([string rangeOfString:@"In file included from "].location != NSNotFound) { currentEL = ELIncluded; return nil; } else if ([string rangeOfString:@"In function '"].location != NSNotFound) { currentEL = ELFunction; return nil; } else if ([string rangeOfString:@" At top level:"].location != NSNotFound) { currentEL = ELFile; return nil; } else if ([components count] > 3) { unsigned typeIndex; NSString *substr; // file and includedFile file = [currentBuildPath stringByAppendingPathComponent:currentBuildFile]; if (lastEL == ELIncluded || [[components objectAtIndex:0] isEqualToString:lastIncludedFile]) {// first message after "In file included from" // NSLog(@"Inlcuded File: %@", file); includedFile = [components objectAtIndex:0]; file = [currentBuildPath stringByAppendingPathComponent:includedFile]; currentEL = ELIncludedError; } else { currentEL = ELError; } // type if ((typeIndex = [components indexOfObject:@" warning"]) != NSNotFound) { type = [components objectAtIndex:typeIndex]; warningsCount++; } else if ((typeIndex = [components indexOfObject:@" error"]) != NSNotFound) { type = [components objectAtIndex:typeIndex]; errorsCount++; } // position if (typeIndex == 2) // :line: { int lInt = atoi([[components objectAtIndex:1] cString]); NSNumber *lNumber = [NSNumber numberWithInt:lInt]; position = [NSString stringWithFormat:@"{x=%i; y=0}", [lNumber intValue]]; } else if (typeIndex == 3) // :line:column: { int lInt = atoi([[components objectAtIndex:1] cString]); int cInt = atoi([[components objectAtIndex:2] cString]); NSNumber *lNumber = [NSNumber numberWithInt:lInt]; NSNumber *cNumber = [NSNumber numberWithInt:cInt]; position = [NSString stringWithFormat:@"{x=%i; y=%i}", [lNumber intValue], [cNumber floatValue]]; } // message substr = [NSString stringWithFormat:@"%@:", type]; message = [self lineTail:string afterString:substr]; } else { return nil; } // Insert indentation if (currentEL == ELError) { if (lastEL == ELFunction) { indentString = @"\t\t"; } else if (lastEL == ELError) { indentString = [NSString stringWithString:lastIndentString]; } } else if (currentEL == ELIncluded) { indentString = @""; } /* else if (currentEL == ELIncludedError) { indentString = @"\t\t"; }*/ message = [NSString stringWithFormat:@"%@%@", indentString, message]; lastIndentString = [indentString copy]; // Create array items if ((lastEL == ELNone || ![file isEqualToString:lastFile]) && [includedFile isEqualToString:@""]) { // NSLog(@"lastEL == ELNone (%@)", includedFile); // NSLog(@"File: %@ != %@", file, lastFile); errorItem = [NSMutableDictionary dictionaryWithCapacity:1]; [errorItem setObject:@"" forKey:@"ErrorImage"]; [errorItem setObject:[file copy] forKey:@"File"]; [errorItem setObject:[includedFile copy] forKey:@"IncludedFile"]; [errorItem setObject:@"" forKey:@"Position"]; [errorItem setObject:@"" forKey:@"Type"]; attributedString = [[NSAttributedString alloc] initWithString:[file lastPathComponent] attributes:attributes]; [errorItem setObject:[attributedString copy] forKey:@"Error"]; [attributedString release]; [items addObject:errorItem]; } if ((lastEL == ELIncluded || currentEL == ELIncludedError) && ![includedFile isEqualToString:lastIncludedFile]) { NSString *incMessage = [NSString stringWithFormat:@"%@", includedFile]; // NSLog(@"Included: %@ != %@", includedFile, lastIncludedFile); errorItem = [NSMutableDictionary dictionaryWithCapacity:1]; [errorItem setObject:@"" forKey:@"ErrorImage"]; [errorItem setObject:[file copy] forKey:@"File"]; [errorItem setObject:[includedFile copy] forKey:@"IncludedFile"]; [errorItem setObject:@"" forKey:@"Position"]; [errorItem setObject:@"" forKey:@"Type"]; attributedString = [[NSAttributedString alloc] initWithString:incMessage attributes:attributes]; [errorItem setObject:[attributedString copy] forKey:@"Error"]; [attributedString release]; [items addObject:errorItem]; } errorItem = [NSMutableDictionary dictionaryWithCapacity:1]; [errorItem setObject:@"" forKey:@"ErrorImage"]; [errorItem setObject:[file copy] forKey:@"File"]; [errorItem setObject:[includedFile copy] forKey:@"IncludedFile"]; [errorItem setObject:[position copy] forKey:@"Position"]; [errorItem setObject:[type copy] forKey:@"Type"]; [errorItem setObject:[message copy] forKey:@"Error"]; // NSLog(@"Parsed message:%@ (%@)", message, includedFile); [items addObject:errorItem]; return items; } // --- Error output table delegate methods - (int)numberOfRowsInTableView:(NSTableView *)aTableView { if (errorArray != nil && aTableView == errorOutput) { return [errorArray count]; } return 0; } - (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { NSDictionary *errorItem; if (errorArray != nil && aTableView == errorOutput) { errorItem = [errorArray objectAtIndex:rowIndex]; return [errorItem objectForKey:[aTableColumn identifier]]; } return nil; } - (void)errorItemClick:(id)sender { int rowIndex = [errorOutput selectedRow]; NSDictionary *error = [errorArray objectAtIndex:rowIndex]; NSPoint position; PCProjectEditor *projectEditor = [project projectEditor]; id editor; editor = [projectEditor openEditorForFile:[error objectForKey:@"File"] editable:YES windowed:NO]; if (editor) { position = NSPointFromString([error objectForKey:@"Position"]); [projectEditor orderFrontEditorForFile:[error objectForKey:@"File"]]; [editor scrollToLineNumber:(unsigned int)position.x]; /* NSLog(@"%i: %@(%@): %@", position.x, [error objectForKey:@"File"], [error objectForKey:@"IncludedFile"], [error objectForKey:@"Error"]);*/ } } @end ProjectCenter-0.6.1/Framework/PCEditorManager.m000644 001751 000024 00000031254 11204620364 022030 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2002-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" NSString *PCEditorDidChangeFileNameNotification = @"PCEditorDidChangeFileNameNotification"; NSString *PCEditorWillOpenNotification = @"PCEditorWillOpenNotification"; NSString *PCEditorDidOpenNotification = @"PCEditorDidOpenNotification"; NSString *PCEditorWillCloseNotification = @"PCEditorWillCloseNotification"; NSString *PCEditorDidCloseNotification = @"PCEditorDidCloseNotification"; NSString *PCEditorWillChangeNotification = @"PCEditorWillChangeNotification"; NSString *PCEditorDidChangeNotification = @"PCEditorDidChangeNotification"; NSString *PCEditorWillSaveNotification = @"PCEditorWillSaveNotification"; NSString *PCEditorDidSaveNotification = @"PCEditorDidSaveNotification"; NSString *PCEditorWillRevertNotification = @"PCEditorWillRevertNotification"; NSString *PCEditorDidRevertNotification = @"PCEditorDidRevertNotification"; NSString *PCEditorDidBecomeActiveNotification = @"PCEditorDidBecomeActiveNotification"; NSString *PCEditorDidResignActiveNotification = @"PCEditorDidResignActiveNotification"; @implementation PCEditorManager // =========================================================================== // ==== Initialisation // =========================================================================== - (id)init { if ((self = [super init])) { PCLogStatus(self, @"[init]"); _editorsDict = [[NSMutableDictionary alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editorDidOpen:) name:PCEditorDidOpenNotification object:nil]; [[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]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editorDidChangeFileName:) name:PCEditorDidChangeFileNameNotification object:nil]; // Debugger [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(debuggerDidHitBreakpoint:) name:PCProjectBreakpointNotification object:nil]; // Preferences } return self; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCEditorManager: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(editorName); RELEASE(_editorsDict); [super dealloc]; } - (PCProjectManager *)projectManager { return _projectManager; } - (void)setProjectManager:(PCProjectManager *)aProjectManager { _projectManager = aProjectManager; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadPreferences:) name:PCPreferencesDidChangeNotification object:nil]; [self loadPreferences:nil]; } - (void)loadPreferences:(NSNotification *)aNotification { id prefs = [_projectManager prefController]; ASSIGN(editorName, [prefs stringForKey:Editor]); } // =========================================================================== // ==== Editor handling // =========================================================================== - (id)editorForFile:(NSString *)filePath { return [_editorsDict objectForKey:filePath]; } - (id)openEditorForFile:(NSString *)filePath editable:(BOOL)editable windowed:(BOOL)windowed { NSFileManager *fm = [NSFileManager defaultManager]; BOOL isDir; PCBundleManager *bundleManager = [_projectManager bundleManager]; NSString *fileName = [filePath lastPathComponent]; id editor; id parser; BOOL exists = [fm fileExistsAtPath:filePath isDirectory:&isDir]; // Determine if file not exist or file is directory if (!exists) { NSRunAlertPanel(@"Open Editor", @"Couldn't open editor for file '%@'.\n" @"File doesn't exist.", @"Close", nil, nil, filePath); return nil; } // Determine if file is text file if(isDir == NO) { if (![[PCFileManager defaultManager] isTextFile:filePath] && !isDir) { // TODO: Do not open alert panel for now. Internal editor // for non text files must not be opened. Review PCProjectBrowser. /* NSRunAlertPanel(@"Open Editor", @"Couldn't open editor for file '%@'.\n" @"File is not plain text.", @"Close", nil, nil, filePath);*/ return nil; } } // NSLog(@"EditorManager 1: %@", _editorsDict); editor = [_editorsDict objectForKey: filePath]; if (editor == nil) { NSLog(@"Opening new editor. Editor: %@", editorName); // Editor editor = [bundleManager objectForBundleWithName:editorName type:@"editor" protocol:@protocol(CodeEditor)]; if (editor == nil) { editor = [bundleManager objectForBundleWithName:@"ProjectCenter" type:@"editor" protocol:@protocol(CodeEditor)]; if (editor == nil) { return nil; } } // Parser parser = [bundleManager objectForBundleType:@"parser" protocol:@protocol(CodeParser) fileName:fileName]; if(parser != nil) { [editor setParser:parser]; [editor openFileAtPath:filePath editorManager:self editable:editable]; [_editorsDict setObject:editor forKey:filePath]; RELEASE(editor); } else { // // If we don't have an editor or a parser, we fall back to opening the // file with the editor designated by the system. // [[NSWorkspace sharedWorkspace] openFile: filePath]; } } if(editor != nil) { [editor setWindowed:windowed]; } return editor; } - (void)orderFrontEditorForFile:(NSString *)path { id editor = [_editorsDict objectForKey:path]; if (!editor) { return; } [editor show]; } - (id)activeEditor { return _activeEditor; } - (void)setActiveEditor:(id)anEditor { if (anEditor != _activeEditor) { _activeEditor = anEditor; } } - (NSArray *)allEditors { return [_editorsDict allValues]; } - (void)closeActiveEditor:(id)sender { if (!_activeEditor) { return; } [_activeEditor close:sender]; } - (void)closeEditorForFile:(NSString *)file { id editor; if ([_editorsDict count] > 0 && (editor = [_editorsDict objectForKey:file])) { [editor close:self]; } } - (NSArray *)modifiedFiles { NSEnumerator *enumerator = [_editorsDict keyEnumerator]; NSString *key = nil; id editor; NSMutableArray *modifiedFiles = [[NSMutableArray alloc] init]; while ((key = [enumerator nextObject])) { editor = [_editorsDict objectForKey:key]; if ([editor isEdited]) { [modifiedFiles addObject:key]; } } return AUTORELEASE((NSArray *)modifiedFiles); } - (BOOL)hasModifiedFiles { if ([[self modifiedFiles] count]) { return YES; } return NO; } - (BOOL)reviewUnsaved:(NSArray *)modifiedFiles { NSEnumerator *enumerator = [modifiedFiles objectEnumerator]; NSString *filePath; id editor; while ((filePath = [enumerator nextObject])) { editor = [_editorsDict objectForKey:filePath]; [self orderFrontEditorForFile:filePath]; if ([editor close:self] == NO) { // Operation should be aborted return NO; } } return YES; } - (BOOL)closeAllEditors { NSArray *modifiedFiles = [self modifiedFiles]; if ([modifiedFiles count]) { if (!PCRunSaveModifiedFilesPanel(self, @"Save and Close", @"Close Anyway", @"Cancel")) { return NO; } } [_editorsDict removeAllObjects]; return YES; } // =========================================================================== // ==== File handling // =========================================================================== - (BOOL)saveAllFiles { NSEnumerator *enumerator = [_editorsDict keyEnumerator]; id editor; NSString *key; BOOL ret = YES; while ((key = [enumerator nextObject])) { editor = [_editorsDict objectForKey:key]; if ([editor saveFileIfNeeded] == NO) { ret = NSRunAlertPanel(@"Save Files", @"Couldn't save file '%@'.\n" @"Operation stopped.", @"Ok",nil,nil); return NO; } } return ret; } - (BOOL)saveFile { id editor = [self activeEditor]; if (editor != nil) { return [editor saveFileIfNeeded]; } return NO; } - (BOOL)saveFileAs:(NSString *)file { id editor = [self activeEditor]; if (editor != nil) { BOOL res; BOOL iw = [editor isWindowed]; res = [editor saveFileTo:file]; [editor closeFile:self save:NO]; [self openEditorForFile:file editable:YES windowed:iw]; return res; } return NO; } - (BOOL)saveFileTo:(NSString *)file { id editor = [self activeEditor]; if (editor != nil) { return [editor saveFileTo:file]; } return NO; } - (BOOL)revertFileToSaved { id editor = [self activeEditor]; if (editor != nil) { return [editor revertFileToSaved]; } return NO; } // =========================================================================== // ==== Notifications // =========================================================================== - (void)editorDidOpen:(NSNotification *)aNotif { id editor = [aNotif object]; [self setActiveEditor:editor]; } - (void)editorDidClose:(NSNotification *)aNotif { id editor = [aNotif object]; // It is not our editor if (![[_editorsDict allValues] containsObject:editor]) { return; } [_editorsDict removeObjectForKey:[editor path]]; if (![_editorsDict count]) { [self setActiveEditor:nil]; } } - (void)editorDidBecomeActive:(NSNotification *)aNotif { id editor = [aNotif object]; if (![[_editorsDict allValues] containsObject:editor]) { return; } [self setActiveEditor:editor]; } - (void)editorDidResignActive:(NSNotification *)aNotif { // Clearing activeEditor blocks the ability to get some information from // loaded and visible but not active editor /* PCEditor *editor = [aNotif object]; if ([editor projectEditor] != self) { return; } [self setActiveEditor:nil];*/ } - (void)editorDidChangeFileName:(NSNotification *)aNotif { NSDictionary *_editorDict = [aNotif object]; id _editor = [_editorDict objectForKey:@"Editor"]; NSString *_oldFileName = nil; NSString *_newFileName = nil; if (![[_editorsDict allValues] containsObject:_editor]) { return; } _oldFileName = [_editorDict objectForKey:@"OldFile"]; _newFileName = [_editorDict objectForKey:@"NewFile"]; [_editorsDict removeObjectForKey:_oldFileName]; [_editorsDict setObject:_editor forKey:_newFileName]; } - (void)debuggerDidHitBreakpoint:(NSNotification *)aNotif { id object = [aNotif object]; NSString *filePath = [object objectForKey: @"file"]; NSString *line = [object objectForKey: @"line"]; id editor = [self openEditorForFile: filePath editable: YES windowed: NO]; [self orderFrontEditorForFile:filePath]; [editor scrollToLineNumber: [line intValue]]; } @end ProjectCenter-0.6.1/Framework/PCProjectLoadedFilesPanel.m000644 001751 000024 00000010273 11157043720 023771 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003-2004 Free Software Foundation Authors: 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. */ #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" @implementation PCProjectLoadedFilesPanel - (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 { #ifdef DEVELOPMENT NSLog(@"PCLoadedFilesPanel: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(contentBox); RELEASE(emptyBox); [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; id prefs = [projectManager prefController]; if (![prefs boolForKey:UseTearOffWindows]) { return; } rootProject = [projectManager rootActiveProject]; if (rootProject == currentProject) { return; } currentProject = rootProject; if (!rootProject) { [contentBox setContentView:emptyBox]; } else { [self setTitle: [NSString stringWithFormat: @"%@ - Loaded Files", [rootProject projectName]]]; [contentBox setContentView:[[rootProject projectLoadedFiles] componentView]]; } } @end ProjectCenter-0.6.1/Framework/PCFileNameField.m000644 001751 000024 00000006314 11126423157 021736 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: 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. */ #import #import NSString *PCFileNameFieldNoFiles = @"No files selected"; @implementation PCFileNameField - (void)setFont:(NSFont *)fontObject { NSLog(@"PCFNF: setFont"); } - (void)setEditableField:(BOOL)yn { NSRect frame = [self frame]; NSRect fontFrame = [[self font] boundingRectForFont]; // NSLog (@"TF height: %f font height: %f", // frame.size.height, fontFrame.size.height); if ([self textShouldSetEditable:[self stringValue]] == NO) { return; } // Correct self size wrt font bounding rect if (frame.size.height > fontFrame.size.height+3) { frame.origin.y += (frame.size.height - (fontFrame.size.height+3))/2; frame.size.height = fontFrame.size.height+3; } if (yn == YES) { frame.size.width += 4; if ([self alignment] != NSRightTextAlignment) { 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; if ([self alignment] != NSRightTextAlignment) { 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]; } - (void)setStringValue:(NSString *)aString { id delegate = [self delegate]; SEL action = @selector(controlStringValueDidChange:); [super setStringValue:aString]; if ([delegate respondsToSelector:action]) { [delegate performSelector:action withObject:aString]; } } - (BOOL)textShouldSetEditable:(NSString *)text { id delegate = [self delegate]; if ([text isEqualToString:PCFileNameFieldNoFiles]) { return NO; } if ([delegate respondsToSelector:@selector(textShouldSetEditable:)]) { return [delegate textShouldSetEditable:text]; } return YES; } - (void)textDidEndEditing:(NSNotification *)aNotification { [self setEditableField:NO]; [super textDidEndEditing:aNotification]; } @end ProjectCenter-0.6.1/Framework/PCLogController.m000644 001751 000024 00000010557 11427353164 022107 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001 Free Software Foundation 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. */ #import 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 // =========================================================================== // ==== Class methods // =========================================================================== static PCLogController *_logCtrllr = nil; + (PCLogController *)sharedLogController { if (!_logCtrllr) { _logCtrllr = [[PCLogController alloc] init]; } 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:[NSFont systemFontSize]]; textAttributes = [NSMutableDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; [textAttributes retain]; return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog(@"PCLogController: dealloc"); #endif RELEASE(textAttributes); [super dealloc]; } - (void)showPanel { [panel makeKeyAndOrderFront: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 ProjectCenter-0.6.1/Framework/PCProjectLauncher.m000644 001751 000024 00000031253 11255001117 022371 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" #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 { #ifdef DEVELOPMENT NSLog (@"PCProjectLauncher: dealloc"); #endif RELEASE (componentView); RELEASE (textAttributes); RELEASE (debugger); [super dealloc]; } - (NSView *)componentView; { if (!componentView) { [self _createComponentView]; } return componentView; } - (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 *projectName = [project projectName]; NSString *fp = nil; NSString *gdbPath = nil; NSFileManager *fm = [NSFileManager defaultManager]; PCBundleManager *bundleManager = [[project projectManager] bundleManager]; // Check if project type is executable if (![project isExecutable]) { NSRunAlertPanel(@"Debug", @"The project is not executable", @"Close", nil, nil, nil); [debugButton setState:NSOffState]; return; } /* We try in the order: * xxx.debug/xxx (gnustep-make v1, application), * xxx.app/xxx (gnustep-make v1 and v2, application), * obj/xxx (gnustep-make v1 and v2, tool). */ fp = [project projectPath]; fp = [fp stringByAppendingPathComponent: [projectName stringByAppendingPathExtension: @"debug"]]; fp = [fp stringByAppendingPathComponent: projectName]; if (! [fm isExecutableFileAtPath: fp]) { fp = [project projectPath]; fp = [fp stringByAppendingPathComponent: [projectName stringByAppendingPathExtension: @"app"]]; fp = [fp stringByAppendingPathComponent: projectName]; if (! [fm isExecutableFileAtPath: fp]) { fp = [project projectPath]; fp = [fp stringByAppendingPathComponent: @"obj"]; fp = [fp stringByAppendingPathComponent: projectName]; } } if ([fm isExecutableFileAtPath:fp] == NO) { NSRunAlertPanel(@"Debug", @"No executable! Please build the project first.", @"Close",nil,nil); [debugButton setState:NSOffState]; return; } // Debugger gdbPath = [[[project projectManager] prefController] stringForKey:Debugger]; if (gdbPath == nil) { gdbPath = [NSString stringWithString:@"/usr/bin/gdb"]; } if ([fm isExecutableFileAtPath:gdbPath] == NO) { NSRunAlertPanel(@"Debug", @"Specified debugger `%@` cannot be executed!", @"Close",nil,nil,gdbPath); [debugButton setState:NSOffState]; return; } // Debugger debugger = [bundleManager objectForBundleType: @"debugger" protocol: @protocol(CodeDebugger) fileName: [fp stringByDeletingLastPathComponent]]; [debugger debugExecutableAtPath: fp withDebugger: gdbPath]; // turn debug button off... // [debugButton setState:NSOffState]; } - (void)run:(id)sender { NSMutableArray *args = [[NSMutableArray alloc] init]; NSPipe *logPipe; NSPipe *errorPipe; NSString *executablePath; executablePath = [NSMutableString stringWithString:[project projectPath]]; // Check if project type is executable if ([project isExecutable]) { NSString *prjType; prjType = [project projectTypeName]; NSLog(@"project is executable"); if ([prjType isEqualToString: @"Application"]) { /* MyApplication.app/MyApplication */ executablePath = [executablePath stringByAppendingPathComponent:[project projectName]]; executablePath = [executablePath stringByAppendingString:@".app"]; executablePath = [executablePath stringByAppendingPathComponent:[project projectName]]; } else if ([prjType isEqualToString: @"Tool"]) { /* obj/MyTool */ executablePath = [executablePath stringByAppendingPathComponent:@"obj"]; executablePath = [executablePath stringByAppendingPathComponent:[project projectName]]; } else { NSLog(@"Unknown project type to execute: %@", prjType); } } else { NSRunAlertPanel(@"Run", @"The project is not executable", @"Close", nil, nil, nil); [runButton setState:NSOffState]; return; } NSLog(@"executable launch path: %@", executablePath); // [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:executablePath]; [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 ProjectCenter-0.6.1/Framework/PCFileNameIcon.m000644 001751 000024 00000012461 11142676544 021613 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2005 Free Software Foundation Authors: 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. */ #import #import #import #import @implementation PCFileNameIcon - (void)awakeFromNib { filePath = nil; [self setRefusesFirstResponder:YES]; // [self setEditable:NO]; // prevents dragging // [self setImage:[NSImage imageNamed:@"ProjectCenter"]]; [self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; } - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect]; filePath = nil; [self setRefusesFirstResponder:YES]; // [self setEditable:NO]; // prevents dragging // [self setImage:[NSImage imageNamed:@"ProjectCenter"]]; return self; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCFileNameIcon: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(fileNameField); RELEASE(delegate); RELEASE(filePath); [super dealloc]; } - (void)setFileNameField:(NSTextField *)field { fileNameField = RETAIN(field); } - (void)setDelegate:(id)object { ASSIGN(delegate, object); } - (void)updateIcon { if (delegate) { if ([delegate respondsToSelector:@selector(fileNameIconImage)]) { [self setImage:[delegate fileNameIconImage]]; } if ((fileNameField != nil) && [delegate respondsToSelector:@selector(fileNameIconTitle)]) { [fileNameField setStringValue:[delegate fileNameIconTitle]]; } if ([delegate respondsToSelector:@selector(fileNameIconPath)]) { ASSIGN(filePath, [delegate fileNameIconPath]); } } } // --- Drag and drop - (void)mouseDown:(NSEvent *)theEvent { NSArray *fileList = [NSArray arrayWithObjects:filePath, nil]; NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard]; NSPoint dragPosition; [pboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType] owner:nil]; [pboard setPropertyList:fileList forType:NSFilenamesPboardType]; // Start the drag operation dragPosition = [self convertPoint:[theEvent locationInWindow] fromView:nil]; dragPosition.x -= 16; dragPosition.y -= 16; [self dragImage:[self image] at:dragPosition offset:NSZeroSize event:theEvent pasteboard:pboard source:self slideBack:YES]; } // --- NSDraggingDestination protocol methods // -- Before the image is released - (unsigned int)draggingEntered:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; unsigned int draggingOp = NSDragOperationNone; // NSLog(@"Dragging entered: %@", paths); if (![paths isKindOfClass:[NSArray class]] || [paths count] == 0) { return draggingOp; } if (delegate && [delegate respondsToSelector:@selector(canPerformDraggingOf:)] && [delegate canPerformDraggingOf:paths] == YES) { draggingOp = NSDragOperationCopy; } if (draggingOp == NSDragOperationCopy) { // TODO: Change icon to icon that shows open state of destination } return draggingOp; } - (void)draggingExited:(id )sender { NSLog(@"Dragging exited"); } // -- After the image is released - (BOOL)prepareForDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; NSLog(@"Prepare for drag operation"); if (delegate && [delegate respondsToSelector:@selector(prepareForDraggingOf:)]) { return [delegate prepareForDraggingOf:paths]; } return YES; } - (BOOL)performDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; NSLog(@"performDragOperation: %@", paths); if (delegate && [delegate respondsToSelector:@selector(performDraggingOf:)]) { return [delegate performDraggingOf:paths]; } return YES; } - (void)concludeDragOperation:(id )sender { NSPasteboard *pb = [sender draggingPasteboard]; NSArray *paths = [pb propertyListForType:NSFilenamesPboardType]; NSLog(@"Conclude drag operation"); if (delegate && [delegate respondsToSelector:@selector(concludeDraggingOf:)]) { [delegate concludeDraggingOf:paths]; } } // --- NSDraggingSource protocol methods - (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)isLocal { return NSDragOperationCopy; } @end ProjectCenter-0.6.1/Framework/PCProjectBuilderOptions.m000644 001751 000024 00000011446 11171215436 023604 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2007 Free Software Foundation Authors: Philippe C.D. Robert Sergii Stoian 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. */ #import #import #import #import @implementation PCProjectBuilderOptions - (void)_setStateForButton:(id)button key:(NSString *)key defaultState:(int)dState { NSString *value = [[project projectDict] objectForKey:key]; int state; if (value == nil) { state = dState; } else { if ([value isEqualToString:@"YES"]) state = NSOnState; else state = NSOffState; } [button setState:state]; } - (id)initWithProject:(PCProject *)aProject delegate:(id)aDelegate { if ((self = [super init])) { project = aProject; delegate = aDelegate; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadProjectProperties:) name:PCProjectDictDidChangeNotification object:nil]; } return self; } - (void)dealloc { #ifdef DEBUG NSLog (@"PCProjectBuilderOptions: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; [super dealloc]; } - (void)awakeFromNib { [verboseButton setRefusesFirstResponder:YES]; [debugButton setRefusesFirstResponder:YES]; [stripButton setRefusesFirstResponder:YES]; [sharedLibsButton setRefusesFirstResponder:YES]; [self loadProjectProperties:nil]; } - (void)show:(NSRect)builderRect { NSRect opRect; if (!optionsPanel) { if ([NSBundle loadNibNamed:@"BuilderOptions" owner:self] == NO) { PCLogError(self, @"error loading BuilderOptions NIB file!"); return; } } opRect = [optionsPanel frame]; opRect.origin.x = builderRect.origin.x + (builderRect.size.width - opRect.size.width)/2; opRect.origin.y = builderRect.origin.y + (builderRect.size.height - opRect.size.height)/2; [optionsPanel setFrame:opRect display:NO]; [optionsPanel makeKeyAndOrderFront:nil]; [optionsPanel makeFirstResponder:buildArgsField]; } - (NSString *)buildTarget { if (targetPopup) { return [targetPopup titleOfSelectedItem]; } return nil; } - (void)optionsPopupChanged:(id)sender { [delegate targetDidSet:[targetPopup titleOfSelectedItem]]; } - (void)controlTextDidEndEditing:(NSNotification *)aNotif { id object = [aNotif object]; NSMutableArray *args; if (object != buildArgsField) return; args = [[[buildArgsField stringValue] componentsSeparatedByString:@" "] mutableCopy]; [args removeObject:@""]; [args removeObject:@" "]; [project setProjectDictObject:args forKey:PCBuilderArguments notify:NO]; [delegate targetDidSet:[targetPopup titleOfSelectedItem]]; } - (void)optionsButtonClicked:(id)sender { NSString *value = [sender state] == NSOnState ? @"YES" : @"NO"; NSString *key; if (sender == verboseButton) key = PCBuilderVerbose; if (sender == debugButton) key = PCBuilderDebug; if (sender == stripButton) key = PCBuilderStrip; if (sender == sharedLibsButton) key = PCBuilderSharedLibs; [project setProjectDictObject:value forKey:key notify:NO]; } - (void)loadProjectProperties:(NSNotification *)aNotif { NSArray *args; // Setup target popup [targetPopup removeAllItems]; [targetPopup addItemsWithTitles:[project buildTargets]]; [targetPopup selectItemAtIndex:0]; // Setup build arguments field args = [[project projectDict] objectForKey:PCBuilderArguments]; [buildArgsField setStringValue:[args componentsJoinedByString:@" "]]; // Setup option buttons [self _setStateForButton:verboseButton key:PCBuilderVerbose defaultState:NSOffState]; [self _setStateForButton:debugButton key:PCBuilderDebug defaultState:NSOnState]; [self _setStateForButton:stripButton key:PCBuilderStrip defaultState:NSOffState]; [self _setStateForButton:sharedLibsButton key:PCBuilderSharedLibs defaultState:NSOnState]; } @end ProjectCenter-0.6.1/Framework/PCAddFilesPanel.m000644 001751 000024 00000005704 11632136631 021747 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2004-2011 Free Software Foundation Authors: Serg Stoyan Riccardo Mottola 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. */ #import #import static PCAddFilesPanel *addFilesPanel = nil; @implementation PCAddFilesPanel + (PCAddFilesPanel *)addFilesPanel { if (addFilesPanel == nil) { addFilesPanel = [[self alloc] init]; } return addFilesPanel; } // --- "Add Files..." panel - (id)init { NSRect fr; self = [super init]; fr = NSMakeRect(20,30,160,21); // File type popup fileTypePopup = [[NSPopUpButton alloc] initWithFrame:fr pullsDown:NO]; [fileTypePopup setRefusesFirstResponder:YES]; [fileTypePopup setAutoenablesItems:NO]; [fileTypePopup setTarget:self]; [fileTypePopup setAction:@selector(filesForAddPopupClicked:)]; [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]; // Panel [self setAllowsMultipleSelection:YES]; return self; } - (void)setCategories:(NSArray *)categories { [fileTypePopup removeAllItems]; [fileTypePopup addItemsWithTitles:categories]; } - (void)selectCategory:(NSString *)category { [self setAccessoryView:fileTypeAccessaryView]; [fileTypePopup selectItemWithTitle:category]; [self filesForAddPopupClicked:self]; } - (NSString *)selectedCategory { return [fileTypePopup titleOfSelectedItem]; } - (void)setFileTypes:(NSArray *)fileTypes { NSString *path = nil; [super setAllowedFileTypes: fileTypes]; path = [_browser path]; [self validateVisibleColumns]; [_browser setPath:path]; [self display]; } - (void)filesForAddPopupClicked:(id)sender { NSString *category = [fileTypePopup titleOfSelectedItem]; if ([_delegate respondsToSelector:@selector(categoryChangedTo:)]) { [_delegate categoryChangedTo:category]; } } @end ProjectCenter-0.6.1/Framework/PCProjectBuilderPanel.m000644 001751 000024 00000007445 11157560560 023221 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2003 Free Software Foundation Authors: 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. */ #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" @implementation PCProjectBuilderPanel - (void)awakeFromNib { PCProject *activeProject = [projectManager rootActiveProject]; [panel setFrameAutosaveName:@"ProjectBuilder"]; [panel setTitle:[NSString stringWithFormat: @"%@ - Project Build", [activeProject projectName]]]; // Panel's content view [panel setContentView:contentBox]; // Empty content view of contentBox RETAIN(emptyBox); // Track project switching [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activeProjectDidChange:) name:PCActiveProjectDidChangeNotification object:nil]; if (![panel setFrameUsingName:@"ProjectBuilder"]) { [panel center]; } } - (id)initWithProjectManager:(PCProjectManager *)aManager { projectManager = aManager; if ([NSBundle loadNibNamed:@"BuilderPanel" owner:self] == NO) { PCLogError(self, @"error loading BuilderPanel NIB file!"); return nil; } return self; } - (void)dealloc { #ifdef DEVELOPMENT NSLog(@"PCBuildPanel: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(emptyBox); [super dealloc]; } - (void)orderFront:(id)sender { PCProject *activeProject = [projectManager rootActiveProject]; NSView *builderView = [[activeProject projectBuilder] componentView]; if (!([contentBox contentView] == builderView)) { [contentBox setContentView:builderView]; } /* NSLog(self, @"orderFront: %@ -> %@", builderView, [builderView superview]);*/ [panel orderFront:self]; } - (void)close { // PCLogInfo(self, @"close: %@", [contentBox contentView]); [contentBox setContentView:emptyBox]; // PCLogInfo(self, @"close: %@", [contentBox contentView]); [panel close]; } - (void)activeProjectDidChange:(NSNotification *)aNotif { PCProject *rootProject; id prefs = [projectManager prefController]; if (![prefs boolForKey:UseTearOffWindows]) { return; } rootProject = [projectManager rootActiveProject]; if (rootProject == currentProject) { return; } currentProject = rootProject; // NSLog(@"Buider Panel: activeProjectDidChange to: %@", // [rootProject projectName]); if (!rootProject) { [contentBox setContentView:emptyBox]; } else { [panel setTitle:[NSString stringWithFormat: @"%@ - Project Build", [rootProject projectName]]]; [contentBox setContentView:[[rootProject projectBuilder] componentView]]; } } - (BOOL)isVisible { return [panel isVisible]; } // --- Panel delgate - (BOOL)windowShouldClose:(id)sender { [contentBox setContentView:emptyBox]; return YES; } @end ProjectCenter-0.6.1/Framework/PCProjectInspector.m000644 001751 000024 00000073652 11547336210 022620 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2010 Free Software Foundation Authors: Philippe C.D. Robert Serg Stoyan Riccardo Mottola German Arias 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. */ #import #import #import #import #import #import #import #import @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]; // Track project dictionary changing [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateValues:) name:PCProjectDictDidChangeNotification object:nil]; // Track Browser selection changes [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (browserDidSetPath:) name:PCBrowserDidSetPathNotification object:nil]; [self inspectorPopupDidChange:inspectorPopup]; return self; } - (void)close { [inspectorPanel performClose:self]; } - (void)dealloc { #ifdef DEVELOPMENT NSLog (@"PCProjectInspector: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; RELEASE(buildAttributesView); RELEASE(projectAttributesSubview); RELEASE(projectAttributesView); RELEASE(projectDescriptionView); RELEASE(projectLanguagesView); 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"]; project = [projectManager activeProject]; projectDict = [project projectDict]; // PopUp [inspectorPopup selectItemAtIndex:0]; // Build Attributes [self createBuildAttributes]; // Project Attributes [self createProjectAttributes]; // Project Description [self createProjectDescription]; // Project Languages [self createProjectLanguages]; // 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:projectLanguagesView]; break; case 4: [inspectorView setContentView:fileAttributesView]; break; } [inspectorView display]; } - (void)changeCommonProjectEntry:(id)sender { NSString *newEntry = [sender stringValue]; // Build Atributes if (sender == installDomainPopup) { [project setProjectDictObject:newEntry forKey:PCInstallDomain notify:YES]; } else if (sender == cppOptField) { [project setProjectDictObject:newEntry forKey:PCPreprocessorOptions notify:YES]; } else if (sender == objcOptField) { [project setProjectDictObject:newEntry forKey:PCObjCCompilerOptions notify:YES]; } else if (sender == cOptField) { [project setProjectDictObject:newEntry forKey:PCCompilerOptions notify:YES]; } else if (sender == ldOptField) { [project setProjectDictObject:newEntry forKey:PCLinkerOptions notify:YES]; } // Project Description else if (sender == descriptionField) { [project setProjectDictObject:newEntry forKey:PCDescription notify:YES]; } else if (sender == releaseField) { [project setProjectDictObject:newEntry forKey:PCRelease notify:YES]; } else if (sender == licenseField) { [project setProjectDictObject:newEntry forKey:PCCopyright notify:YES]; } else if (sender == licDescriptionField) { [project setProjectDictObject:newEntry forKey:PCCopyrightDescription notify:YES]; } else if (sender == urlField) { [project setProjectDictObject:newEntry forKey:PCURL notify:YES]; } } - (void)selectSectionWithTitle:(NSString *)sectionTitle { [inspectorPopup selectItemWithTitle:sectionTitle]; [self inspectorPopupDidChange:inspectorPopup]; } // When user ends editing of text field with Tab or changing focus, entered // changes should be accepted. The exception is PCFileName fields. I'm not sure // if this is correct implementation (action is performed twice if user ends // editing with Enter key) - (void)controlTextDidEndEditing:(NSNotification *)aNotif { NSControl *anObject = [aNotif object]; id target = [anObject target]; SEL action = [anObject action]; if ([anObject isKindOfClass:[PCFileNameField class]]) { return; } if ([target respondsToSelector:action]) { [target performSelector:action withObject:anObject]; } } // ============================================================================ // ==== Notifications // ============================================================================ - (void)activeProjectDidChange:(NSNotification *)aNotif { PCProject *rootProject = [projectManager rootActiveProject]; NSView *newProjAttrSubview = nil; if (rootProject != project) { [inspectorPanel setTitle: [NSString stringWithFormat: @"%@ - Project Inspector", [rootProject projectName]]]; } project = [projectManager activeProject]; projectDict = [project projectDict]; PCLogStatus(self, @"Active projectChanged to %@", [[project projectDict] objectForKey:PCProjectName]); // 1. Get custom project attributes view newProjAttrSubview = [project projectAttributesView]; if (projectAttributesSubview == nil) { [projectAttributesView addSubview:newProjAttrSubview]; } else { [projectAttributesView replaceSubview:projectAttributesSubview with:newProjAttrSubview]; } projectAttributesSubview = newProjAttrSubview; // 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]]; [installDomainPopup selectItemWithTitle: [projectDict objectForKey:PCInstallDomain]]; // Project Attributes [projectTypeField setStringValue:[projectDict objectForKey:PCProjectType]]; [projectNameField setStringValue:[projectDict objectForKey:PCProjectName]]; [projectLanguagePB removeAllItems]; [projectLanguagePB addItemsWithTitles: [projectDict objectForKey:PCUserLanguages]]; [projectLanguagePB selectItemWithTitle: [projectDict objectForKey:PCLanguage]]; // 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]; //Project Languages languagesItems = [projectDict objectForKey:PCUserLanguages]; [languagesList reloadData]; // File Attributes [fileIconView setDelegate:[project projectBrowser]]; [fileIconView updateIcon]; [self updateFileAttributes]; } - (void)browserDidSetPath:(NSNotification *)aNotif { [fileIconView updateIcon]; [self updateFileAttributes]; } // ============================================================================ // ==== 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 selectItemAtIndex:0]; // Table [searchOrderList setCornerView:nil]; [searchOrderList setHeaderView:nil]; [searchOrderList setTarget:self]; [searchOrderList setAction:@selector(searchOrderClick:)]; // [searchOrderColumn setEditable:NO]; // Buttons [self setSearchOrderButtonsState]; // 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 if ([selectedTitle isEqualToString:@"Build Targets"]) { ASSIGN(searchItems,[project buildTargets]); } else { ASSIGN(searchItems,nil); } [searchOrderList reloadData]; [searchOrderList deselectAll:self]; [searchOrderTF setStringValue:@""]; // Enable/disable buttons according to selected/not selected item [self setSearchOrderButtonsState]; } - (void)searchOrderDoubleClick:(id)sender { } - (void)searchOrderClick:(id)sender { int row = [searchOrderList selectedRow]; [searchOrderTF setStringValue:[searchItems objectAtIndex:row]]; [searchOrderTF selectText:self]; [self setSearchOrderButtonsState]; } - (void)setSearchOrderButtonsState { // "Set..." button is always off until functionality will be implemented [searchOrderSet setEnabled:NO]; // After loadable inspectors implementation make it work by // detection of text field becoming first responder. /* if ([inspectorPanel firstResponder] == searchOrderTF) { [searchOrderAdd setEnabled:YES]; } else { [searchOrderAdd setEnabled:NO]; }*/ 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]; if ([value isEqualToString:@""]) { return; } [searchItems addObject:value]; [searchOrderTF setStringValue:@""]; [self syncSearchOrder]; [searchOrderList reloadData]; } - (void)syncSearchOrder { int pIndex; pIndex = [searchOrderPopup indexOfSelectedItem]; switch (pIndex) { case 0: // Headers [project setProjectDictObject:searchItems forKey:PCSearchHeaders notify:YES]; break; case 1: // Libraries [project setProjectDictObject:searchItems forKey:PCSearchLibs notify:YES]; break; case 2: // Targets [project setProjectDictObject:searchItems forKey:PCBuilderTargets notify:YES]; return; } } // ============================================================================ // ==== Project Attributes // ============================================================================ - (void)createProjectAttributes { if (projectAttributesView) { return; } if ([NSBundle loadNibNamed:@"ProjectAttributes" owner:self] == NO) { PCLogError(self, @"error loading ProjectAttributes NIB file!"); return; } // Languages [projectLanguagePB removeAllItems]; [projectLanguagePB addItemsWithTitles: [projectDict objectForKey:PCUserLanguages]]; // Retain view [projectAttributesView retain]; } - (void)setCurrentLanguage:(id)sender { NSLog(@"set current language to %@", [sender titleOfSelectedItem]); [project setProjectDictObject:[sender titleOfSelectedItem] forKey:PCLanguage notify:NO]; [[project projectWindow] setTitle]; } // ============================================================================ // ==== 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 *)[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]; [authorsList setDelegate: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 notify:YES]; } - (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 notify:YES]; } - (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 notify:YES]; } } - (void)downAuthor:(id)sender { unsigned 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 notify:YES]; } } // ============================================================================ // ==== Project Languages // ============================================================================ - (void)createProjectLanguages { if (projectLanguagesView) { return; } if ([NSBundle loadNibNamed:@"ProjectLanguages" owner:self] == NO) { PCLogError(self, @"error loading ProjectLanguages NIB file!"); return; } [projectLanguagesView retain]; [languagesList setDataSource:self]; } - (void)addLanguage:(id)sender { NSString *language = [newLanguage stringValue]; [newLanguage setStringValue: @""]; //If there is a language and is new, add this if (([language length] > 0) && (![languagesItems containsObject: language])) { //Add the language to the projectDict [languagesItems addObject: language]; [project setProjectDictObject:languagesItems forKey:PCUserLanguages notify:YES]; /* If there are localizable resources, copy these into the new language directory */ if ([[projectDict objectForKey:PCLocalizedResources] count] > 0) { NSString *file, *englishPath, *languagePath; NSEnumerator *resources = [[projectDict objectForKey:PCLocalizedResources] objectEnumerator]; englishPath = [project resourceDirForLanguage:@"English"]; languagePath = [project resourceDirForLanguage:language]; while ((file = [resources nextObject])) { if ([[projectManager fileManager] copyFile:file fromDirectory:englishPath intoDirectory:languagePath]) { NSLog(@"file copied: %@", file); } } } } } - (void)removeLanguage:(id)sender { /* We don't remove the English language sice is needed if the app isn't available at the end user language */ if (![[languagesItems objectAtIndex: [languagesList selectedRow]] isEqualToString:@"English"]) { NSString *language = [languagesItems objectAtIndex:[languagesList selectedRow]]; NSString *languagePath = [project resourceDirForLanguage:language]; NSArray *resources = [projectDict objectForKey:PCLocalizedResources]; /* If there are localizable resources, remove these at the language directory and the directory itsel */ if ([resources count] > 0) { if ([[projectManager fileManager] removeFiles:resources fromDirectory:languagePath removeDirsIfEmpty:YES]) { NSLog(@"removed resources for language %@",language); } } //Update the languages list [languagesItems removeObject:language]; //If the removed language is the actual PCLanguage, set English if ([[projectDict objectForKey: PCLanguage] isEqualToString:language]) { NSLog(@"set current language to English"); [project setProjectDictObject:@"English" forKey:PCLanguage notify:NO]; } //Update the projectDict [project setProjectDictObject:languagesItems forKey:PCUserLanguages notify:YES]; } else { NSRunAlertPanel(@"Remove Language", @"You shouldn't remove language English", @"Ok",nil,nil); } } // ============================================================================ // ==== File Attributes // ============================================================================ - (void)createFileAttributes { if (fileAttributesView) { return; } if ([NSBundle loadNibNamed:@"FileAttributes" owner:self] == NO) { PCLogError(self, @"error loading FileAttributes NIB file!"); return; } [fileAttributesView retain]; [localizableButton setRefusesFirstResponder:YES]; [publicHeaderButton setRefusesFirstResponder:YES]; [fileIconView setFileNameField:fileNameField]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(panelDidResignKey:) name: NSWindowDidResignKeyNotification object:inspectorPanel]; } - (void)updateFileAttributes { PCProjectBrowser *browser = [project projectBrowser]; NSString *category = [browser nameOfSelectedCategory]; NSString *categoryKey = [project keyForCategory:category]; NSArray *files = [browser selectedFiles]; NSString *file = nil; int array_count = [files count]; int present_count = 0; NSArray *publicHeaders = nil; NSArray *localizedResources = nil; NSEnumerator *enumerator = nil; // Initial default buttons state [localizableButton setEnabled:NO]; [localizableButton setState:NSOffState]; [publicHeaderButton setEnabled:NO]; [publicHeaderButton setState:NSOffState]; if (files == nil) { return; } // --- Enable buttons // If selection is not category AND category is allow localization // enable localizableButton checkbox if ([[project localizableKeys] containsObject:categoryKey]) { [localizableButton setEnabled:YES]; } // If selection is not category // AND project accepts public headers // AND file extension is .h or .H enable publicHeaders checkbox. if ([project canHavePublicHeaders] == YES ) { BOOL enable = YES; enumerator = [files objectEnumerator]; while ((file = [enumerator nextObject])) { if (![[file pathExtension] isEqualToString:@"h"] && ![[file pathExtension] isEqualToString:@"H"]) { enable = NO; } } if (enable) { [publicHeaderButton setEnabled:YES]; } } // --- Set state of buttons // There are 3 sutiuations: // - all files present in group (state: ON) // - part of file present in group (state: OFF) // - no files present in group (state: OFF) // Set state of Public Headers button if ([publicHeaderButton isEnabled]) { publicHeaders = [project publicHeaders]; enumerator = [files objectEnumerator]; present_count = 0; while ((file = [enumerator nextObject])) { if ([publicHeaders containsObject:file]) { present_count++; } } if (array_count == present_count) { [publicHeaderButton setState:NSOnState]; } } // Set state of Localized Resource button if ([localizableButton isEnabled]) { localizedResources = [project localizedResources]; enumerator = [files objectEnumerator]; present_count = 0; while ((file = [enumerator nextObject])) { if ([localizedResources containsObject:file]) { present_count++; } } if (array_count == present_count) { [localizableButton setState:NSOnState]; } } } - (void)beginFileRename { [fileNameField setEditableField:YES]; [inspectorPanel makeFirstResponder:fileNameField]; } // Delegate method of PCFileNameField class - (void)controlStringValueDidChange:(NSString *)aString { if (fileName != nil) { [fileName release]; } fileName = [aString copy]; } // Delegate method of PCFileNameField class - (BOOL)textShouldSetEditable:(NSString *)text { if ([[project rootCategories] containsObject:text]) { return NO; } return YES; } - (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]; } } - (void)setPublicHeader:(id)sender { PCProjectBrowser *browser = [project projectBrowser]; NSArray *files = [browser selectedFiles]; NSEnumerator *enumerator = [files objectEnumerator]; NSString *file = nil; while ((file = [enumerator nextObject])) { if ([sender state] == NSOffState) { [project setHeaderFile:fileName public:NO]; } else { [project setHeaderFile:fileName public:YES]; } } } - (void)setLocalizableResource:(id)sender { PCProjectBrowser *browser = [project projectBrowser]; NSArray *files = [browser selectedFiles]; NSEnumerator *enumerator = [files objectEnumerator]; NSString *file = nil; while ((file = [enumerator nextObject])) { if ([sender state] == NSOffState) { [project setResourceFile:file localizable:NO]; } else { [project setResourceFile:file localizable:YES]; } } } - (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]; } else if (languagesList != nil && aTableView == languagesList) { return [languagesItems 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]; } else if (languagesList != nil && aTableView == languagesList) { return [languagesItems 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 notify:YES]; } } - (void) tableView: (NSTableView*)aTableView willDisplayCell: (id)aCell forTableColumn: (NSTableColumn*)aTableColumn row: (int)rowIndex { [(NSTextFieldCell *)aCell setScrollable:YES]; } @end ProjectCenter-0.6.1/Framework/GNUmakefile.postamble000644 001751 000024 00000002323 10730302044 022733 0ustar00multixstaff000000 000000 # # 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:: # cd ..;rm -f ProjectCenter;$(LN_S) Library ProjectCenter #after-clean:: # rm -f ../ProjectCenter #after-uninstall:: # rm -rf $(GNUSTEP_LIBRARIES)/libProjectCenter* #after-install:: # cp -r Protocols $(GNUSTEP_HEADERS)/ProjectCenter # cp -r Widgets $(GNUSTEP_HEADERS)/ProjectCenter ProjectCenter-0.6.1/Framework/PCProjectWindow.m000644 001751 000024 00000055721 11765616317 022131 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2010 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "Modules/Preferences/Misc/PCMiscPrefs.h" #import @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)awakeFromNib { id prefs = [[project projectManager] prefController]; NSRect rect; [buildButton setToolTip:@"Project Builder"]; [buildButton setImage:IMAGE(@"Build")]; [launchButton setToolTip:@"Project Launcher"]; [launchButton setImage:IMAGE(@"Run")]; if (![project isExecutable]) { [launchButton setEnabled:NO]; } [loadedFilesButton setToolTip:@"Loaded Files"]; [loadedFilesButton setImage:IMAGE(@"Files")]; if (![prefs boolForKey:UseTearOffWindows]) { [loadedFilesButton setEnabled:NO]; } [findButton setToolTip:@"Project Finder"]; [findButton setImage:IMAGE(@"Find")]; [inspectorButton setToolTip:@"Project Inspector"]; [inspectorButton setImage:IMAGE(@"Inspector")]; [fileIcon setFileNameField:fileIconTitle]; [fileIcon setDelegate:[project projectBrowser]]; [fileIcon updateIcon]; [statusLine setStringValue:@""]; /* * Horizontal split view */ rect = [[projectWindow contentView] frame]; rect.size.height -= 62; rect.size.width -= 16; rect.origin.x += 8; rect.origin.y = -2; [h_split setDelegate:self]; /* * Vertical split view */ rect = [[projectWindow contentView] frame]; if (h_split) { rect.size.height = 185; } v_split = [[NSSplitView alloc] initWithFrame:rect]; [v_split setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; [v_split setVertical:YES]; [v_split setDelegate:self]; /* * File Browser */ browserView = [[project projectBrowser] view]; [v_split addSubview:browserView]; /* * LoadedFiles */ if (![prefs boolForKey:UseTearOffWindows]) { [self showProjectLoadedFiles:self]; } [h_split addSubview:v_split]; RELEASE(v_split); /* * Custom view * View where non-separated Builder, Launcher, Editor goes. */ [self _createCustomView]; } - (id)initWithProject:(PCProject *)owner { if ((self = [super init])) { NSDictionary *pcWindows; NSString *windowFrame; project = owner; _isToolbarVisible = YES; _splitViewsRestored = NO; if (projectWindow == nil) { if ([NSBundle loadNibNamed:@"ProjectWindow" owner:self] == NO) { PCLogError(self, @"error loading ProjectWindow NIB file!"); return nil; } } [self setTitle]; // Window [projectWindow setFrameAutosaveName:@"ProjectWindow"]; pcWindows = [[project projectDict] objectForKey:PCWindows]; 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]; } // 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]; // Track Browser selection changes for file icon updates [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (browserDidSetPath:) name:PCBrowserDidSetPathNotification object:[project projectBrowser]]; // Editor changes [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (editorDidChange:) name:PCEditorDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (editorDidSave:) name:PCEditorDidSaveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (editorDidRevert:) name:PCEditorDidRevertNotification object:nil]; } return self; } - (void)setTitle { NSString *name = [project projectName]; NSString *path = [[project projectPath] stringByAbbreviatingWithTildeInPath]; NSString *language = [[project projectDict] objectForKey:PCLanguage]; [projectWindow setTitle:[NSString stringWithFormat:@"%@ - %@ [%@]",name,path,language]]; } - (void)dealloc { #ifdef DEVELOPMENT NSLog (@"PCProjectWindow: dealloc"); #endif [[NSNotificationCenter defaultCenter] removeObserver:self]; [projectWindow close]; [super dealloc]; } // ============================================================================ // ==== Accessory methods // ============================================================================ // TODO: Should be removed when two modes will be implemented: // Build, Launch and Loaded Files are tear-off and tear-on. // Custom view is always shown because editor always opened on // one click in Browser. External editor will be opened only on // double click. - (NSView *)customContentView { return [customView contentView]; } - (void)setCustomContentView:(NSView *)subview { if (!customView) { return; } [customView setContentView:subview]; [customView display]; } - (void)updateStatusLineWithText:(NSString *)text { [statusLine setStringValue:text]; } // ============================================================================ // ==== Actions // ============================================================================ - (void)showProjectBuild:(id)sender { id prefs = [[project projectManager] prefController]; NSView *view = [[project projectBuilder] componentView]; NSPanel *buildPanel = [[project projectManager] buildPanel]; PCProject *rootActiveProject; rootActiveProject = [[project projectManager] rootActiveProject]; // NSLog(@"ProjectWindow showProjectBuild: componentView RC:%i", // [view retainCount]); if ([prefs boolForKey:UseTearOffWindows]) { if ([customView contentView] == view) { [self showProjectEditor:self]; } if (rootActiveProject == project) { [buildPanel orderFront:nil]; } } else { if ((rootActiveProject == project) && [buildPanel isVisible]) { [buildPanel close]; } [self setCustomContentView:view]; } } - (void)showProjectLaunch:(id)sender { id prefs = [[project projectManager] prefController]; NSView *view = nil; NSPanel *launchPanel = nil; view = [[project projectLauncher] componentView]; launchPanel = [[project projectManager] launchPanel]; if ([prefs boolForKey:UseTearOffWindows]) { if ([customView contentView] == view) { [self showProjectEditor:self]; } [launchPanel orderFront:nil]; } else { if ([launchPanel isVisible]) { [launchPanel close]; } [self setCustomContentView:view]; } } - (void)showProjectLoadedFiles:(id)sender { id prefs = [[project projectManager] prefController]; NSPanel *panel = [[project projectManager] loadedFilesPanel]; PCProject *rootActiveProject; NSScrollView *componentView; rootActiveProject = [[project projectManager] rootActiveProject]; componentView = (NSScrollView *)[[project projectLoadedFiles] componentView]; // PCLogInfo(self, @"showProjectLoadedFiles"); if ([prefs boolForKey:UseTearOffWindows]) { [componentView setBorderType:NSNoBorder]; [componentView removeFromSuperview]; if (rootActiveProject == project) { [panel orderFront:nil]; } [v_split adjustSubviews]; } else { if ((rootActiveProject == project) && panel && [panel isVisible]) { [panel close]; } [componentView setBorderType:NSBezelBorder]; // Preserve width of view in panel // [componentView setFrame:NSMakeRect(0,0,128,130)]; [v_split addSubview:componentView]; [v_split adjustSubviews]; } } - (void)showProjectInspector:(id)sender { [[project projectManager] showProjectInspector:sender]; } - (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]; rect = [cView centerScanRect: rect]; [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]; rect = [cView centerScanRect: 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]; rect = [cView centerScanRect: rect]; [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 { NSDictionary *notifObject = [aNotif object]; PCProject *changedProject = [notifObject objectForKey:@"Project"]; if (changedProject != project && changedProject != [project activeSubproject]) { 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 { PCProject *savedProject = [aNotif object]; if (savedProject != project && savedProject != [project activeSubproject] && [savedProject superProject] != [project activeSubproject]) { return; } [projectWindow setDocumentEdited:NO]; } - (void)activeProjectDidChange:(NSNotification *)aNotif { /* PCProject *activeProject = [aNotif object]; if (activeProject != project && activeProject != [project activeSubproject] && [activeProject superProject] != [project activeSubproject]) { return; } [self makeKeyWindow];*/ } // TODO: Review determining of tear-off panels. Current implementation // loads Build, Launch and Loaded Files to check visibility status. // It is incorrect behaviour; Build. Launch and LoadedFiles initialized // even if not in use. - (void)preferencesDidChange:(NSNotification *)aNotif { id prefs = [aNotif object]; NSLog(@"ProjectWindow: Preferences did change"); /* if ([[project projectManager] rootActiveProject] != project) { return; }*/ if ([prefs boolForKey:UseTearOffWindows]) { // Project Build if ([[[project projectBuilder] componentView] window] == projectWindow) { [self showProjectBuild:self]; } // Project Launch if ([[[project projectLauncher] componentView] window] == projectWindow) { [self showProjectLaunch:self]; } // Loaded Files if ([[v_split subviews] count] == 2) { [self showProjectLoadedFiles:self]; } [loadedFilesButton setEnabled:YES]; } else { NSPanel *buildPanel = [[project projectManager] buildPanel]; NSPanel *launchPanel = [[project projectManager] launchPanel]; // Project Build if ([buildPanel isVisible] == YES) { [self showProjectBuild:self]; } // Project Launch if ([launchPanel isVisible] == YES) { [self showProjectLaunch:self]; } // Loaded Files if ([[v_split subviews] count] == 1) { [self showProjectLoadedFiles:self]; } [loadedFilesButton setEnabled:NO]; } } - (void)browserDidSetPath:(NSNotification *)aNotif { PCProjectBrowser *browser = [aNotif object]; if (browser != [project projectBrowser]) { return; } [fileIcon updateIcon]; } - (void)editorDidChange:(NSNotification *)aNotif { id editor = [aNotif object]; if ([editor editorManager] != [project projectEditor]) { return; } [fileIcon updateIcon]; } - (void)editorDidSave:(NSNotification *)aNotif { id editor = [aNotif object]; if ([editor editorManager] != [project projectEditor]) { return; } [fileIcon updateIcon]; } - (void)editorDidRevert:(NSNotification *)aNotif { id editor = [aNotif object]; if ([editor editorManager] != [project projectEditor]) { return; } [fileIcon updateIcon]; } // ============================================================================ // ==== 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]);*/ NSLog(@"windowDidBecomeKey: project %@", [project 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 { } - (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window { id responder; responder = [window firstResponder]; if ([responder conformsToProtocol: @protocol(CodeEditorView)]) { return [[responder editor] windowWillReturnUndoManager: window]; } return nil; } // ============================================================================ // ==== SplitView delegate // ============================================================================ // Subviews: browser and loaded files - (void)resizeVerticalSubiewsWithOldSize:(NSSize)oldSize { NSSize splitSize = [v_split frame].size; NSDictionary *projectDict = nil; NSDictionary *windowsDict = nil; NSString *browserString = nil; NSRect browserRect = NSMakeRect(0,0,0,0); NSRect boxRect; // NSLog(@"resizeVerticalSubiewsWithOldSize entered split view width: %f, height %f", splitSize.width, splitSize.height); boxRect = [v_split frame]; [v_split setFrame:boxRect]; if (splitSize.width == oldSize.width && splitSize.height == oldSize.height) { return; } // NSLog(@"resize vertical split view"); // NSLog(@"v_split %@", NSStringFromRect([v_split frame])); if (!_splitViewsRestored) { projectDict = [project projectDict]; windowsDict = [projectDict objectForKey:PCWindows]; if (windowsDict != nil) { browserString = [windowsDict objectForKey:@"ProjectBrowser"]; NSLog(@"Browser size '%@'", browserString); if (browserString != nil && ![browserString isEqualToString:@""]) { browserRect = NSRectFromString(browserString); } } // Unable to restore browser frame if (browserRect.size.width == 0 && browserRect.size.height == 0) { browserRect = NSMakeRect(0, 0, splitSize.width, splitSize.height); } [browserView setFrame:browserRect]; } // Use saved frame of ProjectBrowser only first time. Every time window is // resized use new size of subviews. /* if (_splitViewsRestored) { browserRect = [[[project projectBrowser] view] frame]; browserRect.size.height = splitSize.height; if ([[prefs objectForKey:UseTearOffWindows] isEqualToString:@"YES"]) { browserRect.size.width = splitSize.width; } } // Browser NSLog(@"%@ browser %@", [project projectName], NSStringFromRect(browserRect)); [browserView setFrame:browserRect];*/ // Loaded Files /* if ([[prefs objectForKey:UseTearOffWindows] isEqualToString:@"NO"]) { boxRect.origin.x = browserRect.size.width + [v_split dividerThickness]; boxRect.origin.y = 0; boxRect.size.width = [v_split frame].size.width - boxRect.origin.x; boxRect.size.height = [v_split frame].size.height; if (boxRect.size.width < 60) { boxRect.size.width = 60; boxRect.origin.x = [v_split frame].size.width - boxRect.size.width; } NSLog(@"%@ loadedFiles %@", [project projectName], NSStringFromRect(boxRect)); [[[project projectLoadedFiles] componentView] setFrame:boxRect]; }*/ [v_split adjustSubviews]; _splitViewsRestored = YES; } // Subviews: vertical split view and custom view - (void)resizeHorizontalSubiewsWithOldSize:(NSSize)oldSize { NSSize splitSize = [h_split frame].size; NSSize hSplitSize; NSRect vSplitRect; NSRect boxRect; // NSLog(@"resizeHorizontalSubiewsWithOldSize entered split view width: %f, height %f", splitSize.width, splitSize.height); if (splitSize.width == oldSize.width && splitSize.height == oldSize.height) { return; } // NSLog(@"resize horizontal split view"); hSplitSize = [h_split frame].size; // Vertical Split View vSplitRect = [browserView frame]; vSplitRect.origin.x = 0; vSplitRect.origin.y = 0; /* if (![self hasCustomView]) { vSplitRect.size = hSplitSize; } else {*/ vSplitRect.size.width = hSplitSize.width; /* }*/ vSplitRect = [browserView centerScanRect: vSplitRect]; [v_split setFrame:vSplitRect]; // Custom view (Editor|Builder|Launcher) /* if ([self hasCustomView]) {*/ boxRect.origin.x = 0; boxRect.origin.y = vSplitRect.size.height + [h_split dividerThickness]; boxRect.size.width = hSplitSize.width; boxRect.size.height = hSplitSize.height - boxRect.origin.y; boxRect = [customView centerScanRect: boxRect]; [customView setFrame:boxRect]; // } } - (void) splitView:(NSSplitView *)sender resizeSubviewsWithOldSize:(NSSize)oldSize { if (sender == v_split) { [self resizeVerticalSubiewsWithOldSize:oldSize]; } else { [self resizeHorizontalSubiewsWithOldSize:oldSize]; } return; } @end ProjectCenter-0.6.1/Framework/PCFileCreator.m000644 001751 000024 00000034156 11152627770 021524 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2001-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import #import #import #import static PCFileCreator *_creator = nil; static NSDictionary *dict = nil; @implementation PCFileCreator + (id)sharedCreator { if (_creator == nil) { NSDictionary *classDict; NSDictionary *headerDict; NSDictionary *ccDict; NSDictionary *chDict; NSDictionary *protocolDict; NSDictionary *gsmarkupDict; NSString *descr; NSString *template; NSBundle *bundle; _creator = [[[self class] alloc] init]; bundle = [NSBundle bundleForClass:[self class]]; // Setting up the dictionary needed for registration! // Objective C Class descr = [NSString stringWithString: @"Generic Objective-C class.\n\n" @"This is a plain subclass of NSObject which includes" @" only Foundation.h."]; template = [bundle pathForResource:@"class" ofType:@"template"]; classDict = [NSDictionary dictionaryWithObjectsAndKeys: PCClasses, @"ProjectKey", descr, @"TypeDescription", template,@"TemplateFile", nil]; // Objective C Header descr = [NSString stringWithString: @"Generic Objective-C header.\n\n" @"This is a plain interface subclassing NSObject." @" The file includes Foundation.h"]; template = [bundle pathForResource:@"header" ofType:@"template"]; headerDict =[NSDictionary dictionaryWithObjectsAndKeys: PCHeaders,@"ProjectKey", descr,@"TypeDescription", template,@"TemplateFile", nil]; // C File descr = [NSString stringWithString: @"Generic ANSI-C implementation file.\n\n" @"This file contains no Objective-C dependency in any form."]; template = [bundle pathForResource:@"cfile" ofType:@"template"]; ccDict = [NSDictionary dictionaryWithObjectsAndKeys: PCOtherSources,@"ProjectKey", descr,@"TypeDescription", template,@"TemplateFile", nil]; // C Header descr = [NSString stringWithString: @"Generic ANSI-C header.\n\n" @"This file contains no Objective-C dependency in any form."]; template = [bundle pathForResource:@"cheader" ofType:@"template"]; chDict = [NSDictionary dictionaryWithObjectsAndKeys: PCHeaders,@"ProjectKey", descr,@"TypeDescription", template,@"TemplateFile", nil]; // Objective C Protocol descr = [NSString stringWithString: @"Generic Objective-C protocol.\n\n" @"This is common Objective-C protocol, comparable" @" i.e. to a Java interface."]; template = [bundle pathForResource:@"protocol" ofType:@"template"]; protocolDict = [NSDictionary dictionaryWithObjectsAndKeys: PCHeaders,@"ProjectKey", descr,@"TypeDescription", template,@"TemplateFile", nil]; // GSMarkup descr = [NSString stringWithString: @"Generic GSMarkup File.\n\n" @"This is the interface description of GNUstep Renaissance."]; template = [bundle pathForResource:@"gsmarkup" ofType:@"template"]; gsmarkupDict =[NSDictionary dictionaryWithObjectsAndKeys: PCGSMarkupFiles,@"ProjectKey", descr,@"TypeDescription", template, @"TemplateFile", nil]; dict = [[NSDictionary alloc] initWithObjectsAndKeys: ccDict, CFile, chDict, CHeader, protocolDict, ProtocolFile, headerDict, ObjCHeader, classDict, ObjCClass, gsmarkupDict, GSMarkupFile, nil]; } return _creator; } - (id)init { self = [super init]; activeProject = nil; return self; } - (void)dealloc { RELEASE(newFilePanel); RELEASE(dict); [super dealloc]; } - (NSDictionary *)creatorDictionary { return dict; } - (void)newFileInProject:(PCProject *)aProject { // Set to nil after panel closing activeProject = aProject; [self showNewFilePanel]; } - (void)createFileOfType:(NSString *)fileType path:(NSString *)path project:(PCProject *)project { NSDictionary *newFiles; newFiles = [self filesToCreateForFileOfType:fileType path:path withComplementary:YES]; [self createFiles:newFiles inProject:project]; } - (NSDictionary *)filesToCreateForFileOfType:(NSString *)type path:(NSString *)path withComplementary:(BOOL)complementary { NSMutableDictionary *files = nil; NSString *newFile = nil; // A class and possibly a header files = [NSMutableDictionary dictionaryWithCapacity:2]; // Remove file extension from "path" if (![[path pathExtension] isEqualToString: @""]) { path = [path stringByDeletingPathExtension]; } // Objective-C Class if ([type isEqualToString:ObjCClass]) { newFile = [path stringByAppendingPathExtension:@"m"]; [files setObject:[dict objectForKey:ObjCClass] forKey:newFile]; } // C File else if ([type isEqualToString:CFile]) { newFile = [path stringByAppendingPathExtension:@"c"]; [files setObject:[dict objectForKey:CFile] forKey:newFile]; } // C Header // When creating C file also create C Header file if ([type isEqualToString:CHeader] || ([type isEqualToString:CFile] && complementary)) { newFile = [path stringByAppendingPathExtension:@"h"]; [files setObject:[dict objectForKey:CHeader] forKey:newFile]; } // Objective-C Header // When creating Objective C Class file also create Objective C Header file else if ([type isEqualToString:ObjCHeader] || ([type isEqualToString:ObjCClass] && complementary)) { newFile = [path stringByAppendingPathExtension:@"h"]; [files setObject:[dict objectForKey:ObjCHeader] forKey:newFile]; } // GSMarkup else if ([type isEqualToString:GSMarkupFile]) { newFile = [path stringByAppendingPathExtension:@"gsmarkup"]; [files setObject:[dict objectForKey:GSMarkupFile] forKey:newFile]; } // Objective-C Protocol else if ([type isEqualToString:ProtocolFile]) { newFile = [path stringByAppendingPathExtension:@"h"]; [files setObject:[dict objectForKey:ProtocolFile] forKey:newFile]; } return files; } - (BOOL)createFiles:(NSDictionary *)fileList inProject:(PCProject *)aProject { PCFileManager *pcfm = [PCFileManager defaultManager]; NSEnumerator *enumerator = [[fileList allKeys] objectEnumerator]; NSString *template = nil; NSString *newFile = nil; NSDictionary *fileType = nil; NSString *key = nil; while ((newFile = [enumerator nextObject])) { fileType = [fileList objectForKey:newFile]; key = [fileType objectForKey:@"ProjectKey"]; template = [fileType objectForKey:@"TemplateFile"]; [pcfm copyFile:template toFile:newFile]; [self replaceTagsInFileAtPath:newFile withProject:aProject]; [aProject addFiles:[NSArray arrayWithObject:newFile] forKey:key notify:YES]; } // Notify the browser! [[NSNotificationCenter defaultCenter] postNotificationName:@"ProjectDictDidChangeNotification" object:self]; return YES; } - (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 @implementation PCFileCreator (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]; } [nfImage setImage:[NSApp applicationIconImage]]; [nfTypePB setRefusesFirstResponder:YES]; [nfTypePB removeAllItems]; [nfTypePB addItemsWithTitles: [[dict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]]; [nfTypePB selectItemAtIndex:0]; [nfCancelButton setRefusesFirstResponder:YES]; [nfCreateButton setRefusesFirstResponder:YES]; [nfAddHeaderButton setRefusesFirstResponder:YES]; [newFilePanel setDefaultButtonCell:[nfCreateButton cell]]; } [self newFilePopupChanged:nfTypePB]; [newFilePanel makeKeyAndOrderFront:self]; [nfNameField setStringValue:@""]; [newFilePanel makeFirstResponder:nfNameField]; [newFilePanel setLevel:NSModalPanelWindowLevel]; [NSApp runModalForWindow:newFilePanel]; } - (void)closeNewFilePanel:(id)sender { [newFilePanel orderOut:self]; [NSApp stopModal]; activeProject = nil; } - (void)createFile:(id)sender { if ([self createFile]) { [self closeNewFilePanel:self]; } else { [newFilePanel makeKeyAndOrderFront:self]; } } - (void)newFilePopupChanged:(id)sender { NSString *typeTitle = [sender titleOfSelectedItem]; NSDictionary *fileType = [dict objectForKey:typeTitle]; if (!fileType) { return; } [nfDescriptionTV setString:[fileType objectForKey:@"TypeDescription"]]; [nfAddHeaderButton setState:NSOffState]; if ([typeTitle isEqualToString:ObjCClass] || [typeTitle isEqualToString:CFile]) { [nfAddHeaderButton setEnabled:YES]; } else { [nfAddHeaderButton setEnabled:NO]; } } - (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]; } } - (BOOL)createFile { NSString *fileName = [nfNameField stringValue]; NSString *fileType = [nfTypePB titleOfSelectedItem]; NSString *path = nil; NSString *key = nil; NSDictionary *newFiles = nil; NSEnumerator *enumerator = nil; NSString *filePath = nil; NSFileManager *fm = [NSFileManager defaultManager]; BOOL complementary; /* NSLog(@"PCFileCreator: [createFile] %@ in category: %@", fileName, projectKey);*/ path = [[activeProject projectPath] stringByAppendingPathComponent:fileName]; // Create file if (path) { // Get file list for creation complementary = [nfAddHeaderButton state]==NSOnState ? YES : NO; newFiles = [self filesToCreateForFileOfType:fileType path:path withComplementary:complementary]; // Check if project already has files with such names enumerator = [[newFiles allKeys] objectEnumerator]; while ((filePath = [enumerator nextObject])) { key = [[newFiles objectForKey:filePath] objectForKey:@"ProjectKey"]; fileName = [filePath lastPathComponent]; if (![activeProject doesAcceptFile:fileName forKey:key]) { NSRunAlertPanel(@"New File in Project", @"Project %@ already has file %@ in %@", @"OK", nil, nil, [activeProject projectName], fileName, key); return NO; } if ([fm fileExistsAtPath:filePath]) { int ret; ret = NSRunAlertPanel (@"New File in Project", @"Project directory %@ already has file %@.\n" @"Do you want to overwrite it?", @"Stop", @"Overwrite", nil, [filePath stringByDeletingLastPathComponent], fileName); if (ret == NSAlertDefaultReturn) // Stop { return NO; } else // Overwrite. Remove destination of copy operation { [fm removeFileAtPath:filePath handler:nil]; } } } // Create files return [self createFiles:newFiles inProject:activeProject]; } return NO; } @end ProjectCenter-0.6.1/Framework/GNUmakefile.preamble000644 001751 000024 00000004413 11137437603 022552 0ustar00multixstaff000000 000000 # 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. # # FIXME: Why are we hardcoding the full path to 'make' or 'gdb' in # here ? Can't we discover them at runtime ? GMAKE := $(shell which ${MAKE}) GDB := $(shell which gdb) # # Flags dealing with compiling and linking # # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += -DDEVELOPMENT\ -DPCDefaultBuildTool=@"\"$(GMAKE)\"" \ -DPCDefaultDebugger=@"\"$(GDB)\"" # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../ -I../Headers # 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 # ProjectCenter-0.6.1/Framework/PCSaveModified.m000644 001751 000024 00000007741 11400375737 021663 0ustar00multixstaff000000 000000 /* GNUstep ProjectCenter - http://www.gnustep.org/experience/ProjectCenter.html Copyright (C) 2000-2004 Free Software Foundation Authors: Philippe C.D. Robert 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. */ #import #import BOOL PCRunSaveModifiedFilesPanel(PCEditorManager *manager, NSString *defaultText, NSString *alternateText, NSString *otherText) { PCSaveModified *saveModifiedPanel; BOOL result; if (!(saveModifiedPanel = [[PCSaveModified alloc] init])) { return NO; } result = [saveModifiedPanel saveFilesWithEditorManager:manager defaultButtonText:defaultText alternateButtonText:alternateText otherButtonText:otherText]; RELEASE(saveModifiedPanel); return result; } @implementation PCSaveModified - (BOOL)saveFilesWithEditorManager:(PCEditorManager *)manager defaultButtonText:(NSString *)defaultText alternateButtonText:(NSString *)alternateText otherButtonText:(NSString *)otherText { if ([NSBundle loadNibNamed:@"SaveModified" owner:self] == NO) { NSLog(@"Error loading SaveModified NIB file!"); return NO; } editorManager = manager; // Table [filesList setCornerView:nil]; [filesList setHeaderView:nil]; [filesList setDataSource:self]; [filesList setTarget:self]; [filesList selectAll:self]; [filesList reloadData]; // Buttons [defaultButton setTitle:defaultText]; [alternateButton setTitle:alternateText]; [otherButton setTitle:otherText]; [panel makeKeyAndOrderFront:self]; [NSApp runModalForWindow:panel]; if (clickedButton == defaultButton) { [self saveSelectedFiles]; return YES; } else if (clickedButton == alternateButton) { return YES; } else if (clickedButton == otherButton) { return NO; } return YES; } - (void)dealloc { #ifdef DEBUG NSLog(@"PCSaveModified: dealloc"); #endif RELEASE(panel); [super dealloc]; } - (BOOL)saveSelectedFiles { NSArray *modifiedFiles = [editorManager modifiedFiles]; NSIndexSet *selectedRows = [filesList selectedRowIndexes]; NSArray *filesToSave = [modifiedFiles objectsAtIndexes:selectedRows]; NSEnumerator *enumerator = [filesToSave objectEnumerator]; NSString *filePath = nil; NSLog(@"SaveModified|filesToSave: %@", filesToSave); while ((filePath = [enumerator nextObject])) { [[editorManager editorForFile:filePath] saveFileIfNeeded]; } return YES; } - (void)buttonClicked:(id)sender { clickedButton = sender; [NSApp stopModal]; [panel close]; } // ============================================================================ // ==== TableView delegate // ============================================================================ - (int)numberOfRowsInTableView:(NSTableView *)aTableView { if (aTableView != filesList) { return 0; } return [[editorManager modifiedFiles] count]; } - (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { if (aTableView != filesList) { return nil; } return [[[editorManager modifiedFiles] objectAtIndex:rowIndex] lastPathComponent]; } @end ProjectCenter-0.6.1/Framework/English.lproj/000755 001751 000024 00000000000 11766110766 021434 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/ProjectAttributes.gorm/000755 001751 000024 00000000000 11766110765 026053 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/ProjectInspector.gorm/000755 001751 000024 00000000000 11766110765 025673 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/ProjectLanguages.gorm/000755 001751 000024 00000000000 11766110765 025633 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/ProjectWindow.gorm/000755 001751 000024 00000000000 11766110765 025174 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/SaveModified.gorm/000755 001751 000024 00000000000 11766110765 024735 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/LogPanel.gorm/000755 001751 000024 00000000000 11766110765 024077 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/BuilderOptions.gorm/000755 001751 000024 00000000000 11766110765 025340 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/BuildAttributes.gorm/000755 001751 000024 00000000000 11766110766 025505 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/Builder.gorm/000755 001751 000024 00000000000 11766110766 023765 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/BuilderPanel.gorm/000755 001751 000024 00000000000 11766110766 024745 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/FileAttributes.gorm/000755 001751 000024 00000000000 11766110766 025325 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/NewFile.gorm/000755 001751 000024 00000000000 11766110766 023730 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/NewSubproject.gorm/000755 001751 000024 00000000000 11766110766 025171 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/ProjectDescription.gorm/000755 001751 000024 00000000000 11766110766 026211 5ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/English.lproj/ProjectDescription.gorm/data.info000644 001751 000024 00000000270 11473716462 027776 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/ProjectDescription.gorm/data.classes000644 001751 000024 00000001263 10544200137 030464 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "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; }; }ProjectCenter-0.6.1/Framework/English.lproj/ProjectDescription.gorm/objects.gorm000644 001751 000024 00000016257 11473716462 030543 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000020:000000c4:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1NSPanel1 NSWindow1 NSResponder% ? A C C& % C D@01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C  C C&0 &  0 1 NSTextField1 NSControl% @ C B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0& % Description:01NSFont%0& % Helvetica A@A@&&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B C C1 A  C1 A&0 &%00&0%&&&&&&&& &&&&&&%0% @ C B A  B A&0 &%00&%Release:&&&&&&&& &&&&&&%0 % B C C1 A  C1 A&0! &%0"0#&#&&&&&&&& &&&&&&%0$% @ C B A  B A&0% &%0&0'&%License:&&&&&&&& &&&&&&%0(% B C C1 A  C1 A&0) &%0*0+&+&&&&&&&& &&&&&&%0,% @ C B A  B A&0- &%0.0/&%License Desc.:/&&&&&&&& &&&&&&%00% B C C1 A  C1 A&01 &%0203&&&&&&&&& &&&&&&%04% @ Cy B A  B A&05 &%0607&%URL:&&&&&&&& &&&&&&%08% B Cy C1 A  C1 A&09 &%0:0;&;&&&&&&&& &&&&&&%0<% @ B C C   C C &0= &0> % @ @ C B  C B&0? &0@1NSButton% C\ B Bp A  Bp A&0A &%0B1 NSButtonCell0C&%Add&&&&&&&&&&&&&&%0D&0E&&&& &&0F% C\ B Bp A  Bp A&0G &%0H0I&%Remove&&&&&&&&&&&&&&%0J&0K&&&& &&0L% C\ B  Bp A  Bp A&0M &%0N0O&%Button&&&&&&&&&&&&&&%0P&0Q&&&& &&0R% C\ @ Bp A  Bp A&0S &%0T0U&%Button&&&&&&&&&&&&&&%0V&0W&&&& &&0X1 GSCustomView1 GSNibItem0Y& % NSScrollView @ @ CQ B&0Z0[&%Authors&&&&&&&&&&&&&& %%0\0]&%projectDescription&&&&&&&&&&&&&& %%0^0_&%System0`&%windowBackgroundColor0a&%Window0b&%Panelb ? B F@ F@%0c1NSImage0d&%NSApplicationIcon&   D D0e &0f &0g1NSMutableDictionary1 NSDictionary&0h& % TextField700i&%NSOwner0j&%PCProjectInspector0k& % TextField840l& % TextField 0m& % TextField980n&%View(1)>0o&%Button@0p&%GormCustomViewX0q& % Description0r&%View(0) 0s&%Box0t& % TextField10u& % TextField20v&%Button1F0w& % TextField3 0x& % TextField4$0y&%Button2L0z&%Button3R0{&%Box1<0|& % TextField5(0}& % TextField6,0~ &2201NSNibConnectorq0&%NSOwner0s0lr0tr0ur0wr0xr0|r0}r0hr0kr0mr0{r0on0vn0yn0zn0pn01NSNibOutletConnectort0&%descriptionField0w0& % releaseField0|0& % licenseField0h0&%licDescriptionField0m0&%urlField0p0& % authorsScroll0o0& % authorAdd0v0& % authorRemove0y0&%authorUp0z0& % authorDown01NSNibControlConnectoro0& % addAuthor:0v0& % removeAuthor:0y0& % upAuthor:0z0& % downAuthor:0t0&%changeCommonProjectEntry:0w0|0h0m0s0&%projectDescriptionView0tw01 NSMutableString& % nextKeyView0w|0|h0hm0mt0t0 &%delegate0w0|0h0m0±rs0ñn{0ı&ProjectCenter-0.6.1/Framework/English.lproj/NewSubproject.gorm/data.info000644 001751 000024 00000000270 11144145373 026746 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/NewSubproject.gorm/data.classes000644 001751 000024 00000000767 10544200137 027454 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "closeNewSubprojectPanel:", "createSubproject:" ); Super = NSObject; }; PCProjectManager = { Actions = ( "closeNewSubprojectPanel:", "createSubproject:" ); Outlets = ( nsPanel, nsImage, nsTitle, nsNameField, nsTypePB, nsCancelButton, nsCreateButton, projectNameField ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/NewSubproject.gorm/objects.gorm000644 001751 000024 00000015160 11150347500 027474 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000025:000000b5:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C CG&% C DS01 NSView% ? A C CG  C CG&01 NSMutableArray1NSArray&  01 NSImageView1 NSControl% A C  B@ B@  B@ B@&0 &%0 1 NSImageCell1NSCell0 1NSFont%&&&&&&&&&&&&&&%%% ? ?0 1NSBox% C C @  C @&0 &0 % @ @ C   C &0 &01NSTextFieldCell1 NSActionCell0&%Box &&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor00&%System0& % textColor @ @%%01 NSTextField% B C Cx B   Cx B &0 &%00&%New Subproject0%0&%Helvetica-Bold AA&&&&&&&& &&&&&&%00&%System0 &%textBackgroundColor0!0"& % textColor0#% B B Cx A  Cx A&0$ &%0%0&& &&&&&&&& &&&&&&%0'0(&%System0)&%textBackgroundColor0*(0+& % textColor0,% @ B B` A  B` A&0- &%0.0/&%Name:00%01& % Helvetica A@A@&&&&&&&& &&&&&&%0203&%System04&%textBackgroundColor05306& % textColor07% AP B B@ A  B@ A&08 &%090:&%Type:0&&&&&&&& &&&&&&%0;0<&%System0=&%textBackgroundColor0><0?& % textColor0@1 NSPopUpButton1NSButton% B B Cx A  Cx A&0A &%0B1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0C& &&&&&&&&0D1NSMenu0E&0F &0G1 NSMenuItem0H&%Item 30I&&&%%&&&&&&%0J&0K&&&& &&D%%%%%0L% Cq A B A  B A&0M &%0N0O&%Create0P1 NSImage0Q& % common_ret O&&&&&&&&&&&&&&%0R&% 0S&0T 0U& % common_retH&&& &&0V% C# A B A  B A&0W &%0X0Y&%Cancel &&&&&&&&&&&&&&%0Z&%0[&&&& &&0\% B0 C @  C @&0] &0^ % @ @ C   C &0_ &0`0a&%Box &&&&&&&& &&&&&&%0b0c&%System0d&%windowBackgroundColor0e0f&%System0g& % textColor @ @%%0h% B C  BT A  BT A&0i &%0j0k& % In project:0k&&&&&&&& &&&&&&%0l0m&%System0n&%textBackgroundColor0om0p& % textColor0q% B C  C> A  C> A&0r &%0s0t& % Project name0u%0v&%Helvetica-Oblique A@A@&&&&&&&& &&&&&&%0w0x&%System0y&%textBackgroundColor0zx0{& % textColor0|&%Window0}&} ? B F@ F@%0~ 0&%NSApplicationIcon&   D D0 &0 &01!NSMutableDictionary1" NSDictionary&0&%Box1\0&%NSOwner0&%PCProjectManager0& % TextField1#0& % TextField2,0& % TextField0& % TextField370&%View^0& % NewSubproject0& % TextField4h0& % TextField5q0& % ImageView0&%GormNSPopUpButton@0&%ButtonL0&%Box 0&%Button1V0 &01#NSNibConnector0#0#0#0#0#0#0#0&%NSOwner01$NSNibOutletConnector0&%nsPanel0$0&%nsImage0$0&%nsTitle0$0& % nsNameField0$0&%nsTypePB0$0&%nsCancelButton0$0&%nsCreateButton01%NSNibControlConnector0&%closeNewSubprojectPanel:0%0&%createSubproject:0$0&%delegate0#0#0$0&%projectNameField0!&ProjectCenter-0.6.1/Framework/English.lproj/NewFile.gorm/data.info000644 001751 000024 00000000270 11144145373 025505 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/NewFile.gorm/data.classes000644 001751 000024 00000001007 11144145373 026206 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "closeNewFilePanel:", "createFile:", "newFilePopupChanged:" ); Super = NSObject; }; PCFileCreator = { Actions = ( "closeNewFilePanel:", "createFile:", "newFilePopupChanged:" ); Outlets = ( newFilePanel, nfImage, nfTypePB, nfDescriptionTV, nfNameField, nfCancelButton, nfCreateButton, nfAddHeaderButton ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/NewFile.gorm/objects.gorm000644 001751 000024 00000017367 11150347500 026246 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:0000002b:000000d3:00000001:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C&% C Dc01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&  01 NSImageView1 NSControl% A C` B@ B@  B@ B@&0 &%0 1 NSImageCell1NSCell0 1NSFont%&&&&&&&&&&&&&&%%% ? ?0 1 NSTextField% B Cb Cx B8  Cx B8&0 &%0 1NSTextFieldCell1 NSActionCell0&%New File in Project0%0& % Helvetica AA&&&&&&&&&&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor01NSBox% CW C @  C @&0 &0 % @ @ C   C &0 &00&%Box &&&&&&&&&&&&&&%00&%System0&%windowBackgroundColor0 0!&%System0"& % textColor @ @%%0#1NSButton% C% A B A  B A&!0$ &%0%1 NSButtonCell0&&%Cancel &&&&&&&&&&&&&&%0'&%0(&&&& &&0)% Cs A B A  B A&!0* &%0+0,&%Create0-1NSImage0.& % common_ret ,&&&&&&&&&&&&&&%0/&% 00&0102& % common_retH&&& &&03% B B Cu C  Cu C&04 &05 % @ @ Cq C  Cq C&06 &071 NSScrollView%  Cr B  Cr B&08 &091 NSClipView% A  C_ B A  C_ B&0: &0;1 NSTextView1NSText% A  C_   C_ &0< &0=0>&%NSCalibratedWhiteColorSpace ?* ?  K K0?0@&%System0A& % textColor C_ K=0B1 NSScroller%  A B  A B&0C &%0D0E& &&&&&&&&&&&&&&&72 _doScroll:v12@0:4@89% A A A A B0F1! NSPopUpButton% B Cq A  Cq A&0G &%0H1"NSPopUpButtonCell1#NSMenuItemCell0I& &&&&&&&&0J1$NSMenu0K&0L &0M1% NSMenuItem0N&%Item 10O&&&%0P0Q& % common_Nibble%0R%0S&%Item 2O&&%%0T%0U&%Item 3O&&%%&&&&&&%0V&0W&&&& &&MJ%%%%%0X0Y& % File Type &&&&&&&&&&&&&& %%0Z% A C= B` A  B` A&0[ &%0\0]& % File Type: &&&&&&&&&&&&&&%0^0_&%System0`&%textBackgroundColor0a_0b& % textColor0c% @ B@ Bp A  Bp A&0d &%0e0f& % File Name: &&&&&&&&&&&&&&%0g0h&%System0i&%textBackgroundColor0jh0k& % textColor0l% B B@ Cu A  Cu A&0m &%0n0o& o&&&&&&&&&&&&&&%0p0q&%System0r&%textBackgroundColor0sq0t& % textColor0u% B$ C @  C @&0v &0w % @ @ C   C &0x &0y0z&%Box &&&&&&&&&&&&&&%0{0|&%System0}&%windowBackgroundColor0~0&%System0& % textColor @ @%%0% @ A C A  C A&$0 &%00&%Add Header File001&NSMutableString&%common_SwitchOff &&&&&&&&&&&&&&%0&0&00&&%common_SwitchOn&&& &&00&%System0&%windowBackgroundColor0&%Window0& ? B F@ F@%00&%NSApplicationIcon&   D D0 &0 &01'NSMutableDictionary1( NSDictionary&0&%Box130&%NSOwner0& % PCFileCreator0&%Box2u0& % TextField1Z0& % ScrollView70& % TextField2c0& % TextField 0&%View0& % TextField3l0&%TextView;0&%View1w0& % ImageView0&%Button#0&%GormNSPopUpButton1F0& % GormNSPanel0&%Box0& % Button(0)0&%Button1)0 &01)NSNibConnector0&%NSOwner0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)01*NSNibOutletConnector0& % newFilePanel0*0&%nfImage0*0&%nfTypePB0*0&%nfDescriptionTV0±*0ñ& % nfNameField0ı*0ű&%nfCancelButton0Ʊ*0DZ&%nfCreateButton01+NSNibControlConnector0ɱ&%closeNewFilePanel:0ʱ+0˱& % createFile:0̱+0ͱ&%newFilePopupChanged:0α*0ϱ&%delegate0б)0ѱ*0ұ&%nfAddHeaderButton0ӱ'&ProjectCenter-0.6.1/Framework/English.lproj/FileAttributes.gorm/data.info000644 001751 000024 00000000270 11150347500 027073 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/FileAttributes.gorm/data.classes000644 001751 000024 00000001207 10544200137 027576 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "fileNameDidChange:", "setLocalizableResource:" ); Super = NSObject; }; PCFileNameField = { Actions = ( ); Outlets = ( ); Super = NSTextField; }; PCFileNameIcon = { Actions = ( ); Outlets = ( ); Super = NSImageView; }; PCProjectInspector = { Actions = ( "fileNameDidChange:", "setPublicHeader:", "setLocalizableResource:" ); Outlets = ( fileIconView, fileNameField, fileAttributesView, localizableButton, publicHeaderButton ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/FileAttributes.gorm/objects.gorm000644 001751 000024 00000007731 11150347500 027635 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000022:00000063:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C Cـ& % D DT@01 NSView% ? A C Cـ  C Cـ&01 NSMutableArray1NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C  C C&0 &0 1GSControlTemplate0 &%PCFileNameIcon1 NSImageView1 NSControl% A C B@ B@  B@ B@&0 &%01 NSImageCell1NSCell01NSFont%&&&&&&&&&&&&&&%%% ? ?00&%PCFileNameField1 NSTextField% B| C Cf B@  Cf B@&0 &%01NSTextFieldCell1 NSActionCell0&%No files selected0%0& % Helvetica AA&&&&&&&& &&&&&&%01NSColor0&%NSCalibratedWhiteColorSpace ?* ?00&%NSNamedColorSpace0&%System0& % textColor0% C C @  C @&0 &0 % @ @ C   C &0 &0!0"&%Box&&&&&&&&&&&&&& %%0#1NSButton% B| C C A  C A&0$ &%0%1 NSButtonCell0&&%Localizable Resource0'1NSImage0(1NSMutableString&%common_SwitchOff&&&&&&&&&&&&&&%0)&0*&0+0,&%common_SwitchOn&&& &&0-% B| C~ C A  C A&0. &%0/00& % Public Header'&&&&&&&&&&&&&&%01&02&+&&& &&0304&%FileAttributes&&&&&&&&&&&&&& %%0506&%System07&%windowBackgroundColor08&%Window09&%Panel9 ? B F@ F@%0:0;&%NSApplicationIcon&   D D0< &0= &0>1NSMutableDictionary1 NSDictionary&0?&%NSOwner0@&%PCProjectInspector0A& % ImageView 0B&%Button1-0C& % GormNSPanel0D&%Box0E&%Box10F& % TextField0G&%Button#0H &0I1 NSNibConnectorC0J&%NSOwner0K D0L A0M F0N E0O G0P1!NSNibOutletConnectorJD0Q&%fileAttributesView0R!JF0S& % fileNameField0T!JA0U& % fileIconView0V BJ0W1"NSNibControlConnectorFJ0X&%fileNameDidChange:0Y!JG0Z&%localizableButton0[!JB0\&%publicHeaderButton0]"BJ0^&%setPublicHeader:0_!FJ0`&%delegate0a"GJ0b&%setLocalizableResource:0c&A FProjectCenter-0.6.1/Framework/English.lproj/BuilderPanel.gorm/data.info000644 001751 000024 00000000270 11155274316 026524 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/BuilderPanel.gorm/data.classes000644 001751 000024 00000000745 10550743653 027240 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "showProjectInspector:", "showFindView:", "showProjectBuild:", "showProjectLaunch:", "showProjectLoadedFiles:" ); Super = NSObject; }; PCProjectBuilderPanel = { Actions = ( ); Outlets = ( contentBox, emptyBox, panel ); Super = NSPanel; }; PCSplitView = { Actions = ( ); Outlets = ( ); Super = NSSplitView; }; }ProjectCenter-0.6.1/Framework/English.lproj/BuilderPanel.gorm/objects.gorm000644 001751 000024 00000003715 11155274316 027264 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000016:00000032:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C C& % D3@01 NSView% ? A C C  C C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 % A  C C  C C&0 &0 %  C C  C C&0 &0 % @ @ C C  C C&0 &01NSCell0&%Box01NSFont%&&&&&&&&&&&&&& @ @%%00&%Box&&&&&&&&&&&&&& A %%01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor0&%Window0& % Project Build C Cp F@ F@%&   D D@0 &0 &01NSMutableDictionary1 NSDictionary&0&%NSOwner0&%PCProjectBuilderPanel0&%Panel0 &%Box(1) 0!&%View(1) 0"&%Box(0)0#&%View(0) 0$ &0%1NSNibConnector"0&#"0' #0(! 0)1NSNibOutletConnector0*&%NSOwner"0+& % contentBox0,* 0-&%emptyBox0.*0/&%panel00*011NSMutableString&%delegate02&ProjectCenter-0.6.1/Framework/English.lproj/Builder.gorm/data.info000644 001751 000024 00000000270 11152333126 025534 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/Builder.gorm/data.classes000644 001751 000024 00000001430 10662654574 026257 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "showOptionsPanel:", "showFindView:", "showProjectBuild:", "showProjectInspector:", "showProjectLaunch:", "showProjectLoadedFiles:", "startBuild:", "startClean:" ); Super = NSObject; }; PCButton = { Actions = ( ); Outlets = ( ); Super = NSButton; }; PCProjectBuilder = { Actions = ( "startBuild:", "startClean:", "showOptionsPanel:" ); Outlets = ( buildButton, cleanButton, componentView, split, optionsButton, statusField, targetField, errorsCountField ); Super = NSObject; }; PCSplitView = { Actions = ( ); Outlets = ( ); Super = NSSplitView; }; }ProjectCenter-0.6.1/Framework/English.lproj/Builder.gorm/objects.gorm000644 001751 000024 00000043070 11164512621 026274 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000024:000000a1:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A D C&% B D/@01 NSView% ? A D C  D C&01 NSMutableArray1 NSArray&01NSBox% A B\ C C  C C&0 &0 %  C C  C C&0 &  0 1GSControlTemplate0 &%PCButton1NSButton1 NSControl% C B0 B,  B0 B,& 0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Build01NSImage B B 01NSColor0&%NSCalibratedWhiteColorSpace 0 &01NSBitmapImageRep1 NSImageRep0&%NSDeviceRGBColorSpace B B %%(%(01NSData&II*)cm]9'| zp*X o|❰0!wG/˒ۆ?2/{u]>6ќ㤷KC9+~wn/d[ӄRT_b9+zw9y PTu ܱbd9+wq:~/tQwרoy?2g@}$`8hΕ܍o>ub2&@8_fa.~$Q}^RѲtW&/Ouhz'5~qmr]J7)Eg###0L`;/#p'>Y}Šu+h "3Pv: |%&U .BTc~Ueo24~󙛪/,  gr7UMT Jkiem},xk7#/bZ6 R"+% K[XguEY^M_gf7 \ Z~Z&!bHiesz-d `pPju Jm-+++@0@O+++@0@O@O+++@0@O+++@0+++@0@O@O+++@0+++@0+9+9+++@0+9+9+++@0UUU+9+9+++G>-UUU+9+9+++GD8& UUU+9+9+++GD;,  UUU+9+9+++GD;,  UUU+9+9+++GD;,  UUU+++GD;,  UUU++++++++++++++++++++++++++++++++++++GD;,  ,8>@@@@@@@@@>8,  &-000000000-&    %%dR&&& &&0&0'&%PCButton% B C B0 B,  B0 B,& 0( &%0)0*&%Options0+0,&"%"common_ToolbarCustomizeToolbarItem*&&&&&&&&&&&&&&%0-&0.&&&& &&0/1 GSCustomView1 GSNibItem00& % NSSplitView  C C&011 NSTextField% C4 C B A  B A& 02 &%031NSTextFieldCell04&%Target:05% A@4&&&&&&&&&&&&&&%0607&%NSNamedColorSpace08&%System09&%textBackgroundColor0:780;& % textColor0<% C5 C B| A  B| A& 0= &%0>0?&%Status:5?&&&&&&&&&&&&&&%0@70A&%System0B&%textBackgroundColor0C7A0D& % textColor0E% Cy C CW A  CW A& 0F &%0G0H&%Default with args ' '5H&&&&&&&&&&&&&&%0I70J&%System0K&%textBackgroundColor0L7J0M& % textColor0N% Cy C CW A  CW A& 0O &%0P0Q& % Waiting...5Q&&&&&&&&&&&&&&%0R70S&%System0T&%textBackgroundColor0U7S0V& % textColor0W% C C0 A  C0 A& 0X &%0Y0Z&%Warnings and errors0[% A0Z&&&&&&&&&&&&&&%0\70]&%System0^&%windowBackgroundColor0_70`&%System0a& % textColor0b0c&%Box&&&&&&&&&&&&&& %%0d70e&%System0f&%windowBackgroundColor0g&%Window0h& % Project Buildh ? ? F@ F@%&   D D@0i &0j &0k1NSMutableDictionary1 NSDictionary& 0l&%NSOwner0m&%PCProjectBuilder0n&%Box(0)0o& % TextField(1)<0p& % TextField(3)N0q& % Button(5)0r&%Window0s& % Button(7)&0t&%View(0) 0u& % CustomView(0)/0v& % TextField(0)10w& % TextField(2)E0x& % Button(4) 0y& % TextField(4)W0z &0{1!NSNibConnectorn0|!tn0}!xt0~!qt0!st0!ut01"NSNibOutletConnector0&%NSOwnerx0& % buildButton0"q0& % cleanButton0"s0& % optionsButton0"n0& % componentView0"u0&%split01#NSNibControlConnectorx0& % startBuild:0#q0& % startClean:0!vt0!ot0!wt0!pt0"w0& % targetField0!yt0"y01$NSMutableString&%errorsCountField0#s0&%showOptionsPanel:0"p0& % statusField0&qx s'ProjectCenter-0.6.1/Framework/English.lproj/BuildAttributes.gorm/data.info000644 001751 000024 00000000270 11474545755 027300 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/BuildAttributes.gorm/data.classes000644 001751 000024 00000001532 11474545755 030004 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "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, searchOrderScroll, searchOrderColumn, installDomainPopup ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/BuildAttributes.gorm/objects.gorm000644 001751 000024 00000031036 11474545755 030035 0ustar00multixstaff000000 000000 GNUstep archive00002f45:0000002b:00000156:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1NSPanel1 NSWindow1 NSResponder% ? A C€ C& % C D6@01 NSView% ? A C€ C  C€ C&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C  C C&0 &  0 1 NSTextField1 NSControl% @ C C A  C A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&%Title01NSFont%0& % Helvetica A@A@&&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% C C CC  C CC&0 &0 % @ @ C C5  C C5&0 &01 NSPopUpButton1NSButton% C  C A  C A&0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0&0%&&&&&&&&0 1NSMenu0!&0" &0#1 NSMenuItem0$&%Header Directories Search Order0%&&&%0&1NSImage0'& % common_Nibble%0(0)& % Library Directories Search Order%&&%%0*0+& % Build Targets%&&%%&&&&&&%0,&0-&&&& &&# %%%%%0.% A C A  C A&0/ &%0001&&&&&&&&& &&&&&&%02%  B A  B A&03 &%0405&%Set...&&&&&&&&&&&&&&%06&07&&&& &&08% B  B A  B A&09 &%0:0;&%Remove&&&&&&&&&&&&&&%0<&0=&&&& &&0>% CF  B A  B A&0? &%0@0A&%Add&&&&&&&&&&&&&&%0B&0C&&&& &&0D1 NSScrollView% B` C B  C B&0E &0F1 NSClipView% A A C B  C B&0G &0H1 NSTableView%  C C!  C C!&0I &%0J0K&&&&&&&&&&&&&&&0L &0M1! NSTableColumn0N&%SO List C A GP0O1"NSTableHeaderCell0P&% 0Q% &&&&&&&& &&&&&&%0R0S&%System0T&%controlShadowColor0US0V&%windowFrameTextColor0W0X&%fourX&&&&&&&& &&&&&&%0YS0Z& % gridColor0[S0\&%controlBackgroundColor0]1#NSTableHeaderView%  C A  C A&0^ &0_1$GSTableCornerView% @ @ A A  A A&0` &%% A @ @@[0a1% NSScroller% @ A A B  A B&0b &%0cK&&&&&&&&&&&&&&&0d% A @ C A  C A&0e &]0fS0g& % controlColor_F% A A A A ad0h0i&%Box&&&&&&&&&&&&&& @ @%%0j% B B A  B A&0k &%0l0m&%Preprocessor Flags:&&&&&&&& &&&&&&%0n% C B C& A  C& A&0o &%0p0q&q&&&&&&&& &&&&&&%0r% B C A  C A&0s &%0t0u&%ObjC Compiler Flags:u&&&&&&&& &&&&&&%0v% C B C& A  C& A&0w &%0x0y&y&&&&&&&& &&&&&&%0z% B B A  B A&0{ &%0|0}&%C Compiler Flags:&&&&&&&& &&&&&&%0~% C B C& A  C& A&0 &%00&&&&&&&&& &&&&&&%0% B  B A  B A&0 &%00& % Linker Flags:&&&&&&&& &&&&&&%0% C B  C& A  C& A&0 &%00&&&&&&&&& &&&&&&%0% A` B A  B A&0 &%00&%Install Domain:&&&&&&&& &&&&&&%0% C AP C& A  C& A&0 &%00&&&&&&&&&00&0 &00&0&&&%&%00&%Local&&%%00&%System&&%%00&%Network&&%%00&%User0&&&%%&&&&&&%0&&&& > =&&%%%%%00&%buildAttributes&&&&&&&&&&&&&& %%0S0&%windowBackgroundColor0&%Window0&%Panel ? B F@ F@%00&%NSApplicationIcon&   D D00&%Item0&&&%00&%NSMenuCheckmark00&%NSMenuMixedState%0 &0 &01&NSMutableDictionary1' NSDictionary&*0& % TableColumn0!0&%column1 C A GP0"0&% Q&&&&&&&& &&&&&&%RU00&%quatre&&&&&&&& &&&&&&%0&%View(1)0&%View(0) 0&%Button20&%Box10& % ClipView(1)d0& % TextField 0& % ClipView(0)F0±&%TableHeaderView(0)]0ñ&%PopUpButton(0)0ı& % Scroller(0)a0ű& % MenuItem(5)0Ʊ& % MenuItem(4)0DZ&%TableCornerView(0)_0ȱ& % ScrollViewD0ɱ& % MenuItem(3)0ʱ& % MenuItem(2)0˱& % TextField1.0̱&%Box0ͱ& % TextField2j0α& % MenuItem(1)0ϱ& % TextField3n0б&%GormNSTableViewH0ѱ& % TextField4r0ұ& % MenuItem(0)0ӱ& % TextField5v0Ա& % TextField6z0ձ& % TextField7~0ֱ&%NSOwner0ױ&%PCProjectInspector0ر& % MenuItem1(0ٱ& % TextField80ڱ&%BuildAttributes0۱& % TableColumn10ܱ!0ݱ&%column2 Cd A GP0ޱ"0߱&% Q&&&&&&&& &&&&&&%fU00&%four&&&&&&&& &&&&&&%0& % TextField90& % MenuItem2*0&%MenuItem#0& % TableColumn20!0&%column1 BP A GP0"0&% Q&&&&&&&& &&&&&&%fU00&%quatre&&&&&&&& &&&&&&%0&%Button180& % TableColumn3M0& % TextField100&%Button2>0&%GormNSPopUpButton0 &JJ01(NSNibConnector0&%NSOwner0(̐0(0(0(𰻐0(0(ذ0(0(0(ې0(˰0(0(찻P(ﰻP(ͰP(ϰP(ѰP(ӰP(԰P(հP(ٰP(ⰼP (P 1)NSNibOutletConnectorP & % ldOptFieldP )P & % cOptFieldP)P& % objcOptFieldP)P& % cppOptFieldP)P&%searchOrderAddP)P&%searchOrderRemoveP)P&%searchOrderSetP)P&%searchOrderPopupP)P&%projectNameLabelP)P&%buildAttributesViewP1*NSNibControlConnectorP&%searchOrderPopupDidChange:P *P!&%setSearchOrder:P"*P#&%removeSearchOrder:P$*P%&%addSearchOrder:P&)P'& % searchOrderTFP(*ϰP)&%changeCommonProjectEntry:P**Ӱ)P+*հ)P,*)P-)ϰP.1+NSMutableString&%delegateP/)Ӱ.P0)հ.P1).P2)ϰP3+& % nextKeyViewP4)Ӱ3P5)հ3P6(ȰP7(аP8(吐P9(АP:)P;+&%searchOrderListP<)P=&%searchOrderColumnP>)аP?+&%delegateP@)аPA+& % dataSourcePB(̐PC(PD(ȐPE(İȐPF*İPG& % _doScroll:PH(ȐPI(°PJ(ǰȐPK(ðPL(ҐPM(ΐPN(ʐPO(ɐPP)PQ&%installDomainPopupPR(ưPS(ŐPT*ðPU+&%changeCommonProjectEntry:PV&&ProjectCenter-0.6.1/Framework/English.lproj/BuilderOptions.gorm/data.info000644 001751 000024 00000000270 11145660254 027117 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/BuilderOptions.gorm/data.classes000644 001751 000024 00000000736 10662654574 027643 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "optionsButtonClicked:", "optionsPopupChanged:" ); Super = NSObject; }; PCProjectBuilderOptions = { Actions = ( "optionsPopupChanged:", "optionsButtonClicked:" ); Outlets = ( buildArgsField, debugButton, verboseButton, optionsPanel, stripButton, sharedLibsButton, targetPopup ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/BuilderOptions.gorm/objects.gorm000644 001751 000024 00000011455 11161270542 027652 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000023:00000081:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C)&% Cy D01 NSView% ? A C C)  C C)&01 NSMutableArray1NSArray&01 NSTextField1 NSControl% B B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 & % Arguments0 1NSFont% A@ &&&&&&&& &&&&&&%0 1NSColor0 &%NSNamedColorSpace0&%System0&%textBackgroundColor0 0& % textColor0% C  B A  B A&0 &%00&%Target &&&&&&&& &&&&&&%0 0&%System0&%textBackgroundColor0 0& % textColor01 NSPopUpButton1NSButton% B C  CP A  CP A& 0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0&0%&&&&&&&&0 1NSMenu0!&0" &0#1 NSMenuItem0$&&&%%&&&&&&%0%&%&&& && %%%%%0&% B B` CP A  CP A& 0' &%0(0)&%Generate debugging information0*1NSImage0+1NSMutableString&%common_SwitchOff)&&&&&&&&&&&&&&%0,&0-&0.0/&%common_SwitchOn&&& &&00% B B CP A  CP A& 01 &%0203&%Verbose output*3&&&&&&&&&&&&&&%04&05&.&&& &&06% B A` CP A  CP A& 07 &%0809&%Use shared libraries*9&&&&&&&&&&&&&&%0:&0;&.&&& &&0<% B B  CP A  CP A& 0= &%0>0?&%Strip executables and objects*?&&&&&&&&&&&&&&%0@&0A&.&&& &&0B% B B CP A  CP A&0C &%0D0E&E&&&&&&&& &&&&&&%0F 0G&%System0H&%textBackgroundColor0I G0J& % textColor0K 0L&%System0M&%windowBackgroundColor0N&%Window0O& % Build OptionsO @@ B F@ F@%&   D D@0P &0Q &0R1NSMutableDictionary1 NSDictionary& 0S& % Button(3)<0T& % Button(0)&0U& % TextField(0)0V&%NSOwner0W&%PCProjectBuilderOptions0X&%Panel(0)0Y& % TextField(2)0Z& % Button(2)60[&%PopUpButton(0)0\& % TextField(1)B0]& % Button(1)00^&%View(0)0_ &0`1!NSNibConnector^X0a!U^0b!Y^0c![^0d!T^0e!]^0f!Z^0g!S^0h1"NSNibOutletConnector0i&%NSOwnerX0j& % optionsPanel0k"i[0l& % targetPopup0m"i]0n& % verboseButton0o"iT0p& % debugButton0q"iS0r& % stripButton0s"iZ0t&%sharedLibsButton0u1#NSNibControlConnector[i0v&%optionsPopupChanged:0w#]i0x&%optionsButtonClicked:0y#Tix0z#Six0{#Zix0|!\^0}"i\0~&%buildArgsField0"\i0&%delegate0&ProjectCenter-0.6.1/Framework/English.lproj/LogPanel.gorm/data.info000644 001751 000024 00000000322 10544200137 025644 0ustar00multixstaff000000 000000 GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed StreamProjectCenter-0.6.1/Framework/English.lproj/LogPanel.gorm/data.classes000644 001751 000024 00000000262 10544200137 026351 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; PCLogController = { Actions = ( ); Outlets = ( panel, textView ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/LogPanel.gorm/objects.gorm000644 001751 000024 00000004262 10544200137 026404 0ustar00multixstaff000000 000000 GNUstep archive00002af9:0000001c:00000031:00000001:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&% PCLogController0&% GSCustomClassMap0&0&% TextView01 NSTextView1NSText1NSView1 NSResponder% A  C Ce  C Ce&0 1 NSMutableArray1 NSArray&0 1 NSColor0 &%NSNamedColorSpace0 &% System0 &% textBackgroundColor  K K0 0& %  textColor C K0& %  ScrollView01 NSScrollView%  C Ce  C Ce&0 &01 NSClipView% A  C Ce A  C Ce&0 & 01 NSScroller1 NSControl%  A Ce  A Ce&0 &%01NSCell0&01NSFont%&&&&&&&&&2 _doScroll:v12@0:4@8% A A A A 0&% Panel01GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1NSWindow%  C Ce& % C Df@0%  C Ce  C Ce&0 &0 0 &% System0!&% windowBackgroundColor0"&% Window0#&% Log# ? B F@ F@%0$1NSImage0%&%NSApplicationIcon&   D D0& &0'1NSNibConnector0(&%NSOwner0)0*0+1NSNibOutletConnector(0,&% panel0-(0.&% textView0/(00&% delegate011 GSMutableSet1 NSMutableSet1NSSet&ProjectCenter-0.6.1/Framework/English.lproj/SaveModified.gorm/data.info000644 001751 000024 00000000270 11400375737 026517 0ustar00multixstaff000000 000000 GNUstep archive00002f44:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/SaveModified.gorm/data.classes000644 001751 000024 00000000547 11150125371 027215 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "buttonClicked:" ); Super = NSObject; }; SaveModifiedFilesDelegate = { Actions = ( "buttonClicked:" ); Outlets = ( alternateButton, defaultButton, panel, otherButton, filesList ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/SaveModified.gorm/objects.gorm000644 001751 000024 00000040143 11400375737 027253 0ustar00multixstaff000000 000000 GNUstep archive00002f44:0000002b:000000a8:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? @" @w @m& % @{` @01 NSView% ? @" @w @m  @w @m&01 NSMutableArray1 NSArray&01 NSImageView1 NSControl% @$ @f @H @H  @H @H& 0 &%0 1 NSImageCell1NSCell0 1NSImage @H @H0 1NSColor0 &%NSCalibratedWhiteColorSpace 0 &01NSBitmapImageRep1 NSImageRep0&%NSDeviceRGBColorSpace @H @H%%0%001NSData&$$II*$ 3rJKۦEFe**w;G302?@HITUYZWXBDh*+x=H/d]LPg!!./@ARSYZWXLMΉ99Y%%i $+hcPLGB DOe -.:;HITTZ[ll_`XWWz &gcWWUSPLGA A GPo''CCttQQc((v:E"gc]_]ZXWUROMIB E]88Qh z77DDQRYZVWBCe**v:Egcbgeca_]ZXUSSTK JHE HK_z,,< > H^w**78EFRSVWLMϋ::_''q*? fclvsqonljhfh5 3WRPMID? < BIi#$56DERS:;9,P~c 6*Ldcp|ywvsrpnnkgjje^^NZVUSQNLIF? ; < l x^ ƚ1'G_dt~}|zywvup###rUUX _][YWUSQOLFwy c"/ ]dv ~}{z6 YYYX geca_][YWTS !XnWcv   i;66zzb olkigeca_[_#$>vM l36ci.0"#!"  U9f::^,-ttrqnmligfbj$%* *%<h{6<01 &'%&$%".1:v\\vvm01w}zyxvttsonjv$%T 7:@}kO!lBc  #$()-.01'(RVrZ^kBq.b2CPpq34FGadeGGa[[moo~<-W|h{"% %%$.14dnrr13~{y{ GJt\{e;lKv &(IJPQBCs%%d_''sHHss~U&UnfTn| !""NXZ@z}||x:=rXC^RUGzP Zq./67FGKLEF99q ]^}>?mnf%} \ew\)16>CF*+-EI{|yCGrX|.^zQT(EX&< K1212././67CCVWHI11|spIJx.h][u5UhAHHOTw EIpU~qkXu#./12121212/0/089CCLMMN12u??~~ģ;cU2@''&;>:nSri8JUm()12121212121201/0/0:;HIHIZ[v{%+ye_haiY\]T^`mZ|e^vd,2}12121212121212121201-/01ssvwLMw;>?(/bQm9mqq`qbt'*VVl1212121212121212121201,-͘XXLLjlKVU9|q~g]Xc#"; h6 D1212121212121212121201,-χbgHBr[~v[Yf{GL(( !"%A ./121212121212121212120156z}}nn&)/3>@\^ÇjT`HV7833 !"#! *+12121212121212121212/067mnefɪfg,-01./+,01CDehŐp\exbo++; &%0?0@&&&&&&&&&&&&&&&0A &0B1! NSTableColumn0C&%FileName BP A GP0D1"NSTableHeaderCell0E&% 0F% E&&&&&&&& &&&&&&%0G0H&%System0I&%controlShadowColor0JH0K&%windowFrameTextColor0L0M&%sixM&&&&&&&& &&&&&&%0NH0O& % gridColor0PH0Q&%controlBackgroundColor0R1#NSTableHeaderView%  @J @6  @J @6&0S &0T1$GSTableCornerView% @ @ @3 @6  @3 @6&0U &%% A @ @P0V1% NSScroller% @ @8 @2 @[  @2 @[&0W &%0X@&&&&&&&&&&&&&&&0Y% @5 @ @t @6  @t @6&0Z &RPT;% A A A A VY0[H0\&%windowBackgroundColor0]&%Window0^&^ @w @p @È @È%&  @ @0_ &0` &0a1&NSMutableDictionary1' NSDictionary&0b& % TextField(0)0c&%NSOwner0d&%SaveModifiedFilesDelegate0e&%View(1)0f&%TableCornerView(0)T0g&%Panel0h& % ScrollView(0)90i&%TableColumn(0)B0j& % Button(1))0k& % ClipView(1)Y0l&%Box(0)0m& % Scroller(0)V0n&%View(0)0o& % ImageView(0)0p& % Button(0)#0q& % TableView(0)=0r& % ClipView(0);0s&%TableHeaderView(0)R0t&%TableColumn(1)0u!0v&%column2 BT A GP0w"EFE&&&&&&&& &&&&&&%0x0y&%System0z&%controlHighlightColor0{H0|&%controlTextColor0}0~&%six~&&&&&&&& &&&&&&%0& % Button(2)/0 &01(NSNibConnectorg0&%NSOwner0(ng0(on0(bn0(ln0(el0(pn0(jn0(n01)NSNibOutletConnector0& % defaultButton0)j0&%alternateButton0)p0& % otherButton0)g0&%panel0(hn0(qr0(iq0(tq0)q0& % filesList0)g01*NSMutableString&%delegate01+NSNibControlConnector0&%buttonClicked:0+j0+p0(rh0(mh0+mh0& % _doScroll:0(kh0(sk0(fh0&&ProjectCenter-0.6.1/Framework/English.lproj/SaveModified.gorm/ProjectCenter.tiff000644 001751 000024 00000011566 11150125371 030351 0ustar00multixstaff000000 000000 II*TxYy|~fLfO2d_HB !bPYElT- ^^۫^lhzVm+ElD@@> V7̷<<zl1hw8[N졐׆˭fB!J!@$4[mM9-d%ľmc]R 'g2 >TLL) D7nZZlLF'LƿM<`]Zݑ( G Df\.dN&C\Gs;L^_+X|yo0UZ] BK2d38N4@$@A@aN60d`p'O=r` p /N.aL8=qڋh *1qN.CQV**S,Y:ZmcÍơױ2BO}:i(m;A #<>i&;F8Gg5Ťg,2i*rYQ2|)js[ZM'#g"+' j\D)88IG|>zϻ>tZ&W >;CQB@6 )F,6L MfTP%vaƆ)yY}=1Yv'Q(R7}rB7qH] &YWF~ORH$q^N1ؤ`4Z?@_oݧ_] Gࠥ+^ў!('̆Q>s;oY0G##  8s vލ'7݄CHGgclaQ'2.ߞl̆'ȷ~Zw<ӓ)[% t\6;jVxH?Q\A1Eq? ܹryuh}yȈrG8|ʜX-}`<ѡSr _}Pޜ:qm<x붅BB!@=v;<{P|Gu4>UVq٩eXhrZyk۳m@ BAofV r#wqC6jhQeH )JK1R({<;'Wxwbš<iz@( X^=.7`oO-iVx-[ׯ&S(]1kEKENu:I"5š |I#2ŋ C$=&{ԊM5e3I 3CP47"B6dy8XM㯫[{ڵol|ۦkouEitVG_(e0*KȖ  O p "+ԫBb'Y ^q)̬FÎc괸^/.V?ĉ&o>ze] tك(##>x0au(-E>( Ja?zfl+/^~9z oŖŴb4] q(ԣxNq(9i^tl&J!'DjVeCXM损&iK\wݻ2HH\:ņ\^ʲ:3b]n*r5 5/< :'!Ȅp/GQI-ɊA1A$nTd^ ofoV~7} BA;[j;xx-+;1EnެYt]ԄKcaE4ݽ%]J(kQTGߡ]{Q:><|!r 0yl@TٺSBْ$p@u@vmE0lՅʮ&L59 l}-kwm0}m%^T>Xl>T*,ᆔFq$rI#AfwAՙ@vi=$ಚ%E,9tw2D ®ϩI؍v̽=QX=, ڙ8z:%v|3"P1|+KK:(=:)fn(VU\LMmx'H> b{@p4oǎOSM͢ҙ؇Y=G.AR9S}ZC4 h3Y%CiQ>zmN͊f-&O#E=x~E{.D*w6yN^+!">DI/_}U0H8C&-h U%3-wlvä>c-%D_ 񏷅w] vvݍVOQA\{/zJxVH 5Nxz䩕pW8vg74l|{ͅ`ݤR/6POp N*6oF6]m}pI]x%vбN;4b>jRla Ĉ+ݸm? mc> AT*I;/?g OGvvRȖJʇZ؀`,j& ܰ42dXw;E؍L;kw`ߘtB{.IQirUǓ|UXm^|-|mmmkкa祿!N/:MBzBG\`y%a!ܖ!#>g?$n!ˠz'|{h4p!8Ger1ҢI>T78z7D̒".S%]xh%Ia|5T"VRДZ +-VQ F5FM@yd/~ }V6NSO4'|S/ K5d\&˂wnT2͌Ͽ?An1|ԫ$i=X}( sSTmaPs:x KѤ.I!mmחK5VKn{CM&yHŏnPHԣkк/PW!vIKuG>9HB%Ztʞ=38Fg(5FӞz.pi5eK,I鉑y;B=ܷp!N!$$rc#w~vz_>m>]֯%GG>a~\~-u2Y&f=Wވl6= vw é_%>3KwFp${b #a60r:I$VhWR˙ĝ"-$a(td/?sh`hj2}@4{hZ/Dd윕wt CA7ae0{-ìW{Ɲ r!>anHBn HE3hcŒv/vi[|JWB9DnT]RP B>K}Lsvv{6ڰ~Uˈ`gN'cGq6oY.>ӣƝ` Fj-:pNoi _kdՒ HS/䮓xFgov GS;q?.y__ ~FsӍj HB3ԫe0փse"¾dBq2N&2 oX`%#acl՞32((I$+oQkֳ$qgpxc9ތagG:<(osG#m.v#g6[Ŏ*dޒqYw S 002 +:@Kfn(=R/home/diablos/pm_files/ProjectManager.tiffHHProjectCenter-0.6.1/Framework/English.lproj/ProjectWindow.gorm/data.info000644 001751 000024 00000000270 11140440115 026736 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/ProjectWindow.gorm/data.classes000644 001751 000024 00000002002 10544200137 027440 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "showProjectInspector:", "showFindView:", "showProjectBuild:", "showProjectLaunch:", "showProjectLoadedFiles:" ); Super = NSObject; }; PCButton = { Actions = ( ); Outlets = ( ); Super = NSButton; }; PCFileNameField = { Actions = ( ); Outlets = ( ); Super = NSTextField; }; PCFileNameIcon = { Actions = ( ); Outlets = ( ); Super = NSImageView; }; PCProjectWindow = { Actions = ( "showProjectInspector:", "showFindView:", "showProjectBuild:", "showProjectLaunch:", "showProjectLoadedFiles:" ); Outlets = ( buildButton, fileIcon, fileIconTitle, findButton, h_split, inspectorButton, launchButton, loadedFilesButton, projectWindow, statusLine, toolbarView ); Super = NSObject; }; PCSplitView = { Actions = ( ); Outlets = ( ); Super = NSSplitView; }; }ProjectCenter-0.6.1/Framework/English.lproj/ProjectWindow.gorm/objects.gorm000644 001751 000024 00000114272 11164512621 027507 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000026:000000c2:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A D C&% CD D@01 NSView% ? A D C  D C&01 NSMutableArray1 NSArray&01NSBox% A Cπ D Bd  D Bd& 0 &0 %  D Bd  D Bd&0 &0 1GSControlTemplate0 &%PCFileNameIcon1 NSImageView1 NSControl% C  BH BH  BH BH&0 &%01 NSImageCell1NSCell01NSFont%&&&&&&&&&&&&&&%%% ? ?01 NSTextField% C`  C A  C A&0 &%01NSTextFieldCell1 NSActionCell0&%Project&&&&&&&&&&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor00&%System0& % textColor00&%PCButton1NSButton% B0 ? B0 B,  B0 B,&0 &%01 NSButtonCell0&%Button0 1NSImage B B0!0"&%NSCalibratedWhiteColorSpace 0# &0$1NSBitmapImageRep1 NSImageRep0%&%NSDeviceWhiteColorSpace B B%%%%%0&1NSData&II* %%v~Rzrr0'0(&%NSDeviceRGBColorSpace B B%%%%%0)&II*lUUUU몪#!- *MGgMGgMGgNGgOHiPIiPIjPIjPIjPIiOHiMGgMGgMGgMGgMGgMGgMGgMGgMGg(KEeXQn[Uq]Xt_Yw_YwaZzb\{aZz_Yx_Yw^Xw]Xu]Ws[Uq[Uq[Uq[UqXQnKEe%OHh]Xtc]ygakdkemfmgle_Zt[UqMGg"PIi_Ywe_}_Zt[UqMGg!PIj_Yxf`_Zt[UqMGg~~QJj`Zyga_Zt[UqMGg}~QJj`Zxga_Zt[UqMGg{{PIi_Ywe_|_Zt[UqMGgyxOHh]Wsb\x_Zt[UqMGgwwMGg\Vra[v_Zt[UqMGguuMGg[Uq_Zte_|c]{a[vaZu_Zt[UqMGgsr MGg[Uq_Ztc\xa\w_Zt_Zt_Zt[UqMGgrq~ MGg[Uq_Zta\waZu_Zt_Zt_Zt[UqMGgpo|  MGg\Vr[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq[Uq\VrMGgnmy MGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgMGgmlxkivQMeQMejhu}~}}zzyxwwuusrrq~QMe kivjhuuqijkijkVV^ECU20?(%2ECUijkqst(%2U{~ijkZZc>=L(%2ECUijk{~(%2UU3`\v(%2U33UUUUUUUUUUUUUUUUUUUU3 %%dR&&&&&&&&&&&&&&%0*&0+&&&& &&0,0-&%PCButton% B ? B, B,  B, B,&0. &%0/00&%Button01 B B02" 03 &04% B B%%%%%05&II*??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? %%v~Rzrr06( B B%%%%%07&II*lMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMBMMMBMMMUqUqUqUqUqUqUqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;B;;;zhzUqUqB;;;zhzB;;;\{\{ɪ\{\{\{ɪ\{zhzUqUqUqB;;;zhzB;;;\{\{ɪ&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&B;;;&&&B;;;\{\{&&&zhzB;;;&&&ffݻfffݻfB;;;\{ɪ&&&zhzB;;;&&&ffݻfݻffݻffB;;;\{\{&&&zhzB;;;&&&fݻfݻffݻB;;;\{\{&&&B;;;&&&fݻfݻfffݻfB;;;\{\{&&&UBBBB;;;&&&ffݻfݻfݻfU*;;;&&&U*;;;&&&ffݻfݻffffU*UUUUU&&&U*****&&&fffݻfffݻffU*&&&U*&&&U*&&&U*UUUUUUUUUUUUUUUUUUU******************** %%dR&&&&&&&&&&&&&&%08&09&&&& &&0:0;&%PCButton% C ? B, B,  B, B,&0< &%0=0>&%Button0? B B20@ &0A% B B%%%%%0B&II* %%v~Rzrr0C( B B%%%%%0D&II*l%%&,ww}ꪪ{{%%&,Ã99<;;<Ě668 114==D005 ..0ʘ !''*SS^TT^[[b``eddj``ecck))/̈́ !SSZPP]xxx~mmmtmmmymmm{lllllltttppxttz%%&,88:SSZOO]䥥ߟeeeeeedddeeelll88;Fww}''*OO]ttukkk``````___``````čIIJ--4>>A SS^\\dggg]]]\\\\\\\\\\\\]]]]]]֯ FSS^iii[[[[[[[[[[[[[[[[[[[[[[[[☘//0 ''0004XX`aaa[[[\\\]]]]]]``````___]]]эXXZ77C::CXX]]]]]]]aaaccceeeeeeeeeeeedddyy|BBP ..2ZZ^\\\aaafffiiiiiijjjjjjiiiiii\\^BBPTTZ[[[庺jjjlllmmmwmmmtmmmtmmmwmmmy..2 BBPyy}>>@ [[c[[[匌ッnnnpnnnnnnnnnnnnnnnn 66B##&B'',ccc]]]ԽܗnnnpnnnnnnnnnnnnnnnnuuuwNNQ**2&&.{{,,.iiphhhsssxxx}nnnpnnnnnnnnnnnnnnnnuuuwٱ BBPo1疖mmmtnnnpnnnnnnnnnnnnnnnn˱HHX**39 $RJJKɸ٧Ü̮QQT ``oUUf/4Brrw //0WWXssvWWY445 GGWUUf  :?##$N44;  00=BBP**3GGWUUfwE1":?4 H''/77CBBPBBPBBP77C''. dO]UUf\7(wE1":B?81,/6?IMV]b\7(vTwE14AFFHIIIHD?P\b\7(vTwE1 $1:?A>9/$"+L[b\7(vTwE1  &L[b\7(vTwE1&L[b\7(vTwE1&L[b\7(vTvT &L[b\7( 6"&L[b6"&L[bV?%JVT>$?># %%dR&&&&&&&&&&&&&&%0E&0F&&&& &&0G0H&%PCButton% C0 ? B, B,  B, B,&0I &%0J0K&%Button0L B B20M &0N% B B%%%%%0O&II* %%v~Rzrr0P( B B%%%%%0Q&II*l J !u...!u J-0,>%J&.\&.\'/\ &K$B.-.2%,\4?:F;G;GI?J9D,4]42,$,[6A9E:FV`Yc?J?K@KAL>I9>[22+5m9D9E:F;G6Az@KALAMBNCO>Ek "120;y9D9E:F;G;G!?ALAMBNCOCODPSWt &,)2g9D9E:F;G;G9E:F;G;GI?J6Az!?-"?9C{COCODPEPFQGRGRHSoq2 &P9E:F;G;GI?J9D@K-EPFQGRGRHSITIUJVKV `2;G;GI?J?K@KAL-FQGRGRHSITIUJVKVKW `"D;GI?J?K@KALAM-GRGRHSITIUJVKVKWLW,,,,3"DI?J?K@KALAMBN-GRHSITIUJVKVKWLWMX,,,,8=I>I?J?K@KALAMBNCO-HSITIUJVKVKWLWMXNY2>I?J?K@KALAMBNCOCO-ITIUJVKVKWLWMXNYX`ծ*6@z?K@KALAMBNCOCODP-IUJVKVKWLWMXNYOZvz3&.V@KALAMBNCOCODPEP-JVKVKWLWMXNYOZOZMMMM$;ALAMBNCOCODPEPFQ-KVKWLWMXNYOZOZkp/8bBNCOCODPEPFQGR.KWLWMXNYOZOZQ\襤bbbbOCNCODPEPFQMXNYOZOZQ\ %'6}DNEPFQGRGR----.....OZOZQ\!!!!47?eJRGRGRHSITIUJVKVKWLWMXNYOZOZU^ᓔ7777!!!!hk|KTITIUJVKVKWLWMXNYOZQ[wz!!!!MMMM|~diZ`U]LWV^[bfkMMMM7777mmmmmmmm7777 %%dR&&&&&&&&&&&&&&%0R&0S&&&& &&0T0U&%PCButton% ? B0 B,  B0 B,&0V &%0W0X&%Button0Y B B20Z &0[% B B%%%%%0\&II* %%v~Rzrr0]( B B%%%%%0^&II*l$$$$OOOOjjjjjjjjaaaaRRRR----AAAAƣhvy8?@z8?@ 1$'.. p<:4* iqrmLHB<4) UUUm%+-{?3*"  UUUyZimZim+ UUUmTbe112UUUUUUmQ^bKXZKXZmVeh UUUm>IL'-/'-/ vUUU Q^bTf%,-vUUU [fiEQTTSRSy%,-vUUU.+24D<=FNS%,-vUUU--- 2VD1 !,=Kd%,-v@@V  $?NTP7"9JS%,-Xgjqt**V (?JC( 8JS<<&&b$/( 8Jp<<&&^ 7JJ <<55S 9Ko((..S ">NPVVj<<..S (BPJ ....S -ERVVj<<..S 1GSJ ....S 5HTVVj<<..S 6ITJ %....S 7ITVVj<<..S 7ITJ o<<55S 7IT 7IT8 7IT E* 7ITTOB' 7IOC- .4(  %%dR&&&&&&&&&&&&&&%0_&0`&&&& &&0a0b&%Box&&&&&&&&&&&&&& %%0c1 GSCustomView1 GSNibItem0d& % NSSplitView A  D Cǀ&0e% A C C A@  C A@& 0f &%0g0h& % Status line0i% A0h&&&&&&&&&&&&&&%0j" > ?0k0l&%System0m&%windowBackgroundColor0n&%Window0o&%Project Windowo C C F@ F@%&   D D@0p &0q &0r1!NSMutableDictionary1" NSDictionary& 0s&%Button2,0t&%Button3:0u&%Button4G0v&%NSOwner0w&%PCProjectWindow0x& % TextField1e0y& % TextField0z&%Window0{&%ButtonT0|& % ImageView 0}&%View(0) 0~&%GormCustomViewc0&%Box0&%Button10 &01#NSNibConnectorz0&%NSOwner0#0#|}0#y}01$NSNibOutletConnectorz01%NSMutableString&%delegate0#~0$~0&%h_split0$y0& % fileIconTitle0$|0&%fileIcon0$z0& % projectWindow0#x0$x0& % statusLine0#}0#s}0#t}0#u}0#{}0${0%& % buildButton0$0%& % launchButton0$s0%&%loadedFilesButton0$t0%& % findButton0$u0%&%inspectorButton01&NSNibControlConnector{0%&%showProjectBuild:0&0%&%showProjectLaunch:0&s0%&%showProjectLoadedFiles:0&t0%& % showFindView:0&u0%&%showProjectInspector:0$0& % toolbarView0#}0!&0& % ImageView s-0&%ButtonUt;uHProjectCenter-0.6.1/Framework/English.lproj/ProjectLanguages.gorm/data.info000644 001751 000024 00000000270 11472523616 027415 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/ProjectLanguages.gorm/data.classes000644 001751 000024 00000000565 11504531142 030113 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "addLanguage:", "removeLanguage:" ); Super = NSObject; }; PCProjectInspector = { Actions = ( "addLanguage:", "removeLanguage:" ); Outlets = ( projectLanguagesView, languagesList, newLanguage ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/ProjectLanguages.gorm/objects.gorm000644 001751 000024 00000012617 11504531142 030143 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000025:0000007f:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1NSPanel1 NSWindow1 NSResponder% @ @ C C& % Ce D901 NSView% @ @ C C  C C&01 NSMutableArray1 NSArray&01NSBox% A A` C C  C C&0 &0 % @ @ C C  C C&0 &0 1 NSScrollView% C C Cr  C Cr&0 &0 1 NSClipView% A A C CX  C CX&0 &01 NSTableView1 NSControl%  C C!  C C!&0 &%01NSCell0&01NSFont%&&&&&&&&&&&&&&0 &01 NSTableColumn0&%column1 C A GP01NSTableHeaderCell1NSTextFieldCell1 NSActionCell0& % Languages0% &&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%controlShadowColor00&%windowFrameTextColor0 0!&&&&&&&&& &&&&&&%0"0#&%System0$&%textBackgroundColor0%#0&& % textColor0'0(& % gridColor0)0*&%controlBackgroundColor0+1NSTableHeaderView%  C A  C A&0, &0-1GSTableCornerView% @ @ A A  A A&0. &%% A @ @)0/1 NSScroller% @ A A CX  A CX&00 &%01&&&&&&&&&&&&&&& 2 _doScroll:02% A @ C A  C A&03 &+)- % A A A A /2041NSButton% B B A  B A&05 &%061 NSButtonCell07&%Add&&&&&&&&&&&&&&%08&09&&&& &&0:% B B B A  B A&0; &%0<0=&%Remove&&&&&&&&&&&&&&%0>&0?&&&& &&0@1 NSTextField% B C A  C A&0A &%0B0C&C&&&&&&&& &&&&&&%"%0D0E&%Title&&&&&&&&&&&&&& @ @%%0F0G&%windowBackgroundColor0H&%Window0I&%PanelI ? ? F@ F@%&   D D@0J &0K &0L1 NSMutableDictionary1! NSDictionary& 0M& % Inspector0N&%TableColumn(2)0O& % ScrollView(0) 0P&%NSOwner0Q&%PCProjectInspector0R& % TableView(0)0S&%Box(0)0T& % Button(1):0U& % TextField(1)@0V&%View0W % @ @ C C  C C&0X &0Y&%TableColumn(1)0Z0[&%column2 BT A GP0\0]&% ]&&&&&&&& &&&&&&%0^&&&&&&&& &&&&&&%"%0_&%View(0) 0`& % Button(0)40a&%TableColumn(0)0b0c&%column1 BL A GP0d0e& %  Languagese&&&&&&&& &&&&&&%0f&&&&&&&& &&&&&&%"%0g &0h1"NSNibConnectorM0i&%NSOwner0j"Vi0k"OS0l"RO0m"aR0n"YR0o"`S0p"TS0q"US0r1#NSNibOutletConnectoriR0s& % languagesList0t"NR0u"S0v"_S0w#iS0x1$NSMutableString&%projectLanguagesView0y#iU0z& % newLanguage0{1%NSNibControlConnector`i0|& % addLanguage:0}%Ti0~&%removeLanguage:0 &ProjectCenter-0.6.1/Framework/English.lproj/ProjectInspector.gorm/data.info000644 001751 000024 00000000270 11472523616 027455 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/ProjectInspector.gorm/data.classes000644 001751 000024 00000000611 10544200137 030143 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "inspectorPopupDidChange:" ); Super = NSObject; }; PCProjectInspector = { Actions = ( "inspectorPopupDidChange:" ); Outlets = ( inspectorPanel, inspectorPopup, inspectorView, contentView ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/ProjectInspector.gorm/objects.gorm000644 001751 000024 00000006403 11503277263 030211 0ustar00multixstaff000000 000000 GNUstep archive00002f45:00000020:00000059:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1NSPanel1 NSWindow1 NSResponder% @ @ C Cπ&% C D901 NSView% @ @ C Cπ  C Cπ&01 NSMutableArray1 NSArray&01NSBox%  C C  C C&0 &0 %  C C  C C&0 &0 1 NSPopUpButton1NSButton1 NSControl% B C C A  C A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%Build Attributes0&&&%%00&%Project Attributes&&%%00&%Project Description&&%%00&%Project Languages0&&&%%00&%File Attributes0&&&%%&&&&&&%0 &0!&&&& &&%%%%%0"%  C C  C C&0# &0$ %  C C  C C&0% &0&0'& % inspectorView&&&&&&&&&&&&&& %%0(0)& % contentView&&&&&&&&&&&&&& %%0*1NSColor0+&%NSNamedColorSpace0,&%System0-&%windowBackgroundColor0.&%Window0/&%Project Inspector/ C Cπ F@ F@%001NSImage01&%NSApplicationIcon&   D D@02 &03 &041NSMutableDictionary1 NSDictionary& 05& % MenuItem306&%NSOwner07&%PCProjectInspector08&%Box09&%Box1"0:& % MenuItem(0)0;&%View(1)$0<&%MenuItem0=& % MenuItem10>&%GormNSPopUpButton 0?& % MenuItem20@&%View(0) 0A& % Inspector0B &0C1NSNibConnectorA0D&%NSOwner0E80F>@0G9@0H1NSNibOutletConnectorDA0I&%inspectorPanel0JD80K& % contentView0LD>0M&%inspectorPopup0ND90O& % inspectorView0P1 NSNibControlConnector>D0Q&%inspectorPopupDidChange:0R<0S=0T?0U50V@80W;90X:0Y&ProjectCenter-0.6.1/Framework/English.lproj/ProjectAttributes.gorm/data.info000644 001751 000024 00000000270 11150347500 027622 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed StreamProjectCenter-0.6.1/Framework/English.lproj/ProjectAttributes.gorm/data.classes000644 001751 000024 00000000564 10544200137 030332 0ustar00multixstaff000000 000000 { "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "setCurrentLanguage:" ); Super = NSObject; }; PCProjectInspector = { Actions = ( "setCurrentLanguage:" ); Outlets = ( projectTypeField, projectAttributesView, projectLanguagePB, projectNameField ); Super = NSObject; }; }ProjectCenter-0.6.1/Framework/English.lproj/ProjectAttributes.gorm/objects.gorm000644 001751 000024 00000011132 11150347500 030352 0ustar00multixstaff000000 000000 GNUstep archive00002e7c:00000023:0000007a:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C& % Ce Dd@01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01NSBox%  C C  C C&0 &0 % @ @ C C  C C&0 &0 1 NSTextField1 NSControl% @ C B A  B A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0& % Project Type:01NSFont%0& % Helvetica A@A@&&&&&&&& &&&&&&%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B C C7 A  C7 A&0 &%00&%__________________________0%0&%Helvetica-Bold A@A@&&&&&&&& &&&&&&%00&%NSCalibratedWhiteColorSpace ?* ?00 &%System0!& % textColor0"% @ C B A  B A&0# &%0$0%& % Project Name:&&&&&&&& &&&&&&%0&0'&%System0(&%textBackgroundColor0)'0*& % textColor0+% B C C7 A  C7 A&0, &%0-0.&0/%&&&&&&&& &&&&&&%0001&%System02&%textBackgroundColor03104& % textColor05% @ C B A  B A&06 &%0708& % Language:&&&&&&&& &&&&&&%090:&%System0;&%textBackgroundColor0<:0=& % textColor0>1 NSPopUpButton1NSButton% B C C7 A  C7 A&0? &%0@1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0A&/&&&&&&&&0B1NSMenu0C&0D &0E1 NSMenuItem0F&%Item 10G&&&%0H1NSImage0I& % common_Nibble%0J0K&%Item 2G&&%%0L0M&%Item 3G&&%%&&&&&&%0N&0O&&&& &&EB%%%%%0P0Q&%projectAttributesView/&&&&&&&&&&&&&& %%0R0S&%System0T&%windowBackgroundColor0U&%Window0V&%PanelV ? ? F@ F@%&   D D0W &0X &0Y1NSMutableDictionary1 NSDictionary& 0Z& % TextField450[&%NSOwner0\&%PCProjectInspector0]&%Box0^& % TextField 0_&%View 0`& % TextField10a& % TextField2"0b&%GormNSPopUpButton>0c& % Inspector0d& % TextField3+0e &0f1!NSNibConnectorc0g&%NSOwner0h!]g0i!_g0j!^g0k!`g0l!ag0m!dg0n!Zg0o!bg0p1"NSNibOutletConnectorg`0q&%projectTypeField0r"gd0s&%projectNameField0t"gb0u&%projectLanguagePB0v"g]0w&%projectAttributesView0x1#NSNibControlConnectorbg0y&%setCurrentLanguage:0z&ProjectCenter-0.6.1/Framework/Resources/class.template000644 001751 000024 00000001631 11126423157 023522 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Copyright (C) $YEAR$ Free Software Foundation Author: $FULLUSERNAME$ 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 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. */ #import "$FILENAME$.h" @implementation $FILENAME$ @end ProjectCenter-0.6.1/Framework/Resources/postamble.template000644 001751 000024 00000001244 10544200137 024375 0ustar00multixstaff000000 000000 # # 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:: ProjectCenter-0.6.1/Framework/Resources/header.template000644 001751 000024 00000001777 11126423157 023660 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Copyright (C) $YEAR$ Free Software Foundation Author: $FULLUSERNAME$ 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 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 _$UCFILENAME$_H_ #define _$UCFILENAME$_H_ #import @interface $FILENAME$ : NSObject { } @end #endif // _$UCFILENAME$_H_ ProjectCenter-0.6.1/Framework/Resources/gsmarkup.template000644 001751 000024 00000000152 10544200137 024235 0ustar00multixstaff000000 000000 ProjectCenter-0.6.1/Framework/Resources/cheader.template000644 001751 000024 00000001657 10544200137 024012 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Copyright (C) $YEAR$ Free Software Foundation Author: $FULLUSERNAME$ 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 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 _$UCFILENAME$_H_ #define _$UCFILENAME$_H_ #endif // _$UCFILENAME$_H_ ProjectCenter-0.6.1/Framework/Resources/protocol.template000644 001751 000024 00000001606 10544200137 024252 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Copyright (C) $YEAR$ Free Software Foundation Author: $FULLUSERNAME$ 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 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. */ @protocol $FILENAME$ @end ProjectCenter-0.6.1/Framework/Resources/cfile.template000644 001751 000024 00000001567 11126423157 023507 0ustar00multixstaff000000 000000 /* Project: $PROJECTNAME$ Copyright (C) $YEAR$ Free Software Foundation Author: $FULLUSERNAME$ 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 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. */ #import "$FILENAME$.h"