From 611d39e4789257b2b70e41ac472f65d6af4c09c6 Mon Sep 17 00:00:00 2001 From: Robert Slover Date: Sun, 27 Aug 2000 19:11:42 +0000 Subject: [PATCH] Initial revision git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/apps/projectcenter/trunk@7258 72102866-910b-0410-8b05-ffd578937521 --- ANNOUNCE | 68 + COPYING | 339 ++++ GNUmakefile | 54 + GNUmakefile.postamble | 26 + GNUmakefile.preamble | 65 + INSTALL | 26 + PCAppProj/AppController.h | 22 + PCAppProj/AppController.m | 31 + PCAppProj/AppProject.gmodel | 133 ++ PCAppProj/GNUmakefile | 56 + PCAppProj/GNUmakefile.postamble | 30 + PCAppProj/GNUmakefile.preamble | 74 + PCAppProj/Info-project.plist | 12 + PCAppProj/Info.table | 29 + PCAppProj/Main.gmodel | 436 +++++ PCAppProj/Makefile | 48 + PCAppProj/Makefile.postamble | 122 ++ PCAppProj/Makefile.preamble | 130 ++ PCAppProj/PB.project | 24 + PCAppProj/PC.proj | 34 + PCAppProj/PCAppMakefileFactory.h | 38 + PCAppProj/PCAppMakefileFactory.m | 159 ++ PCAppProj/PCAppProj.h | 48 + PCAppProj/PCAppProj.m | 146 ++ PCAppProj/PCAppProject.h | 66 + PCAppProj/PCAppProject.m | 180 ++ PCAppProj/h.template | 11 + PCAppProj/m.template | 18 + PCAppProj/main.m | 5 + PCBaseFileTypes/FileIcon_.c.tiff | Bin 0 -> 3504 bytes PCBaseFileTypes/FileIcon_.h.tiff | Bin 0 -> 3502 bytes PCBaseFileTypes/FileIcon_.m.tiff | Bin 0 -> 3488 bytes PCBaseFileTypes/GNUmakefile | 48 + PCBaseFileTypes/Makefile | 49 + PCBaseFileTypes/Makefile.postamble | 122 ++ PCBaseFileTypes/Makefile.preamble | 130 ++ PCBaseFileTypes/PB.project | 25 + PCBaseFileTypes/PCBaseFileType.h | 49 + PCBaseFileTypes/PCBaseFileType.m | 203 ++ PCBaseFileTypes/cfile.template | 11 + PCBaseFileTypes/cheader.template | 10 + PCBaseFileTypes/class.template | 15 + PCBaseFileTypes/header.template | 18 + PCLib/FileCreator.h | 44 + PCLib/GNUmakefile | 97 + PCLib/GNUmakefile.preamble | 67 + PCLib/Makefile | 65 + PCLib/Makefile.postamble | 122 ++ PCLib/Makefile.preamble | 130 ++ PCLib/PB.project | 69 + PCLib/PCBrowserController.h | 58 + PCLib/PCBrowserController.m | 190 ++ PCLib/PCBundleLoader.h | 80 + PCLib/PCBundleLoader.m | 128 ++ PCLib/PCDataSource.h | 58 + PCLib/PCDataSource.m | 107 + PCLib/PCFileManager.h | 90 + PCLib/PCFileManager.m | 369 ++++ PCLib/PCProject.h | 230 +++ PCLib/PCProject.m | 800 ++++++++ PCLib/PCProjectBuilder.h | 60 + PCLib/PCProjectBuilder.m | 228 +++ PCLib/PCProjectManager.h | 169 ++ PCLib/PCProjectManager.m | 462 +++++ PCLib/PCServer.h | 101 + PCLib/PCServer.m | 123 ++ PCLib/PreferenceController.h | 47 + PCLib/ProjectBuilder.h | 37 + PCLib/ProjectCenter.h | 71 + PCLib/ProjectDebugger.h | 41 + PCLib/ProjectEditor.h | 56 + PCLib/ProjectType.h | 53 + PCLib/Server.h | 59 + PCLib/h.template | 34 + PCLib/m.template | 31 + PCLibProj/GNUmakefile | 54 + PCLibProj/GNUmakefile.postamble | 26 + PCLibProj/GNUmakefile.preamble | 71 + PCLibProj/Info.table | 29 + PCLibProj/LibProject.gmodel | 133 ++ PCLibProj/Makefile | 49 + PCLibProj/Makefile.postamble | 122 ++ PCLibProj/Makefile.preamble | 130 ++ PCLibProj/PB.project | 30 + PCLibProj/PC.proj | 28 + PCLibProj/PCLibMakefileFactory.h | 38 + PCLibProj/PCLibMakefileFactory.m | 148 ++ PCLibProj/PCLibProj.h | 48 + PCLibProj/PCLibProj.m | 134 ++ PCLibProj/PCLibProject.h | 65 + PCLibProj/PCLibProject.m | 172 ++ PCLibProj/Version | 12 + PCLibProj/h.template | 11 + PCLibProj/m.template | 18 + PCToolProj/GNUmakefile | 52 + PCToolProj/GNUmakefile.postamble | 30 + PCToolProj/GNUmakefile.preamble | 74 + PCToolProj/Info-project.plist | 12 + PCToolProj/Info.table | 29 + PCToolProj/PC.proj | 30 + PCToolProj/PCToolMakefileFactory.h | 38 + PCToolProj/PCToolMakefileFactory.m | 157 ++ PCToolProj/PCToolProj.h | 48 + PCToolProj/PCToolProj.m | 137 ++ PCToolProj/PCToolProject.h | 67 + PCToolProj/PCToolProject.m | 179 ++ PCToolProj/h.template | 11 + PCToolProj/m.template | 18 + PCToolProj/main.m | 13 + .../English.lproj/ProjectCenter.gmodel | 1734 +++++++++++++++++ ProjectCenter/FileIcon_.c.tiff | Bin 0 -> 3504 bytes ProjectCenter/FileIcon_.h.tiff | Bin 0 -> 3502 bytes ProjectCenter/FileIcon_.m.tiff | Bin 0 -> 3488 bytes ProjectCenter/FileIcon_rtf.tiff | Bin 0 -> 2276 bytes ProjectCenter/GNUmakefile | 85 + ProjectCenter/GNUmakefile.postamble | 26 + ProjectCenter/GNUmakefile.preamble | 73 + ProjectCenter/Info-project.plist | 12 + ProjectCenter/Makefile | 67 + ProjectCenter/Makefile.postamble | 122 ++ ProjectCenter/Makefile.preamble | 130 ++ ProjectCenter/PB.project | 77 + ProjectCenter/PC.project | 71 + ProjectCenter/PCAppController.h | 111 ++ ProjectCenter/PCAppController.m | 269 +++ ProjectCenter/PCFindController.h | 34 + ProjectCenter/PCFindController.m | 31 + ProjectCenter/PCInfoController.h | 40 + ProjectCenter/PCInfoController.m | 73 + ProjectCenter/PCLogController.h | 39 + ProjectCenter/PCLogController.m | 49 + ProjectCenter/PCMenuController.h | 81 + ProjectCenter/PCMenuController.m | 277 +++ ProjectCenter/PCPrefController.h | 79 + ProjectCenter/PCPrefController.m | 391 ++++ ProjectCenter/ProjectCenter.app.tiff | Bin 0 -> 9410 bytes ProjectCenter/ProjectCenter.tiff | Bin 0 -> 9410 bytes ProjectCenter/ProjectCenter_main.m | 31 + ProjectCenter/ProjectCentre_add.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_build.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_clean.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_cvs.tiff | Bin 0 -> 6594 bytes .../ProjectCentre_documentation.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_files.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_find.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_prefs.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_run.tiff | Bin 0 -> 6594 bytes ProjectCenter/ProjectCentre_uml.tiff | Bin 0 -> 6594 bytes ProjectCenter/h.template | 11 + ProjectCenter/m.template | 18 + README | 23 + Version | 12 + 152 files changed, 13565 insertions(+) create mode 100644 ANNOUNCE create mode 100644 COPYING create mode 100644 GNUmakefile create mode 100644 GNUmakefile.postamble create mode 100644 GNUmakefile.preamble create mode 100644 INSTALL create mode 100644 PCAppProj/AppController.h create mode 100644 PCAppProj/AppController.m create mode 100644 PCAppProj/AppProject.gmodel create mode 100644 PCAppProj/GNUmakefile create mode 100644 PCAppProj/GNUmakefile.postamble create mode 100644 PCAppProj/GNUmakefile.preamble create mode 100644 PCAppProj/Info-project.plist create mode 100644 PCAppProj/Info.table create mode 100644 PCAppProj/Main.gmodel create mode 100644 PCAppProj/Makefile create mode 100644 PCAppProj/Makefile.postamble create mode 100644 PCAppProj/Makefile.preamble create mode 100644 PCAppProj/PB.project create mode 100644 PCAppProj/PC.proj create mode 100644 PCAppProj/PCAppMakefileFactory.h create mode 100644 PCAppProj/PCAppMakefileFactory.m create mode 100644 PCAppProj/PCAppProj.h create mode 100644 PCAppProj/PCAppProj.m create mode 100644 PCAppProj/PCAppProject.h create mode 100644 PCAppProj/PCAppProject.m create mode 100644 PCAppProj/h.template create mode 100644 PCAppProj/m.template create mode 100644 PCAppProj/main.m create mode 100644 PCBaseFileTypes/FileIcon_.c.tiff create mode 100644 PCBaseFileTypes/FileIcon_.h.tiff create mode 100644 PCBaseFileTypes/FileIcon_.m.tiff create mode 100644 PCBaseFileTypes/GNUmakefile create mode 100755 PCBaseFileTypes/Makefile create mode 100755 PCBaseFileTypes/Makefile.postamble create mode 100755 PCBaseFileTypes/Makefile.preamble create mode 100755 PCBaseFileTypes/PB.project create mode 100644 PCBaseFileTypes/PCBaseFileType.h create mode 100644 PCBaseFileTypes/PCBaseFileType.m create mode 100644 PCBaseFileTypes/cfile.template create mode 100644 PCBaseFileTypes/cheader.template create mode 100644 PCBaseFileTypes/class.template create mode 100644 PCBaseFileTypes/header.template create mode 100644 PCLib/FileCreator.h create mode 100644 PCLib/GNUmakefile create mode 100644 PCLib/GNUmakefile.preamble create mode 100755 PCLib/Makefile create mode 100755 PCLib/Makefile.postamble create mode 100755 PCLib/Makefile.preamble create mode 100755 PCLib/PB.project create mode 100644 PCLib/PCBrowserController.h create mode 100644 PCLib/PCBrowserController.m create mode 100644 PCLib/PCBundleLoader.h create mode 100644 PCLib/PCBundleLoader.m create mode 100644 PCLib/PCDataSource.h create mode 100644 PCLib/PCDataSource.m create mode 100644 PCLib/PCFileManager.h create mode 100644 PCLib/PCFileManager.m create mode 100644 PCLib/PCProject.h create mode 100644 PCLib/PCProject.m create mode 100644 PCLib/PCProjectBuilder.h create mode 100644 PCLib/PCProjectBuilder.m create mode 100644 PCLib/PCProjectManager.h create mode 100644 PCLib/PCProjectManager.m create mode 100644 PCLib/PCServer.h create mode 100644 PCLib/PCServer.m create mode 100644 PCLib/PreferenceController.h create mode 100644 PCLib/ProjectBuilder.h create mode 100644 PCLib/ProjectCenter.h create mode 100644 PCLib/ProjectDebugger.h create mode 100644 PCLib/ProjectEditor.h create mode 100644 PCLib/ProjectType.h create mode 100644 PCLib/Server.h create mode 100644 PCLib/h.template create mode 100644 PCLib/m.template create mode 100644 PCLibProj/GNUmakefile create mode 100644 PCLibProj/GNUmakefile.postamble create mode 100644 PCLibProj/GNUmakefile.preamble create mode 100644 PCLibProj/Info.table create mode 100644 PCLibProj/LibProject.gmodel create mode 100755 PCLibProj/Makefile create mode 100755 PCLibProj/Makefile.postamble create mode 100755 PCLibProj/Makefile.preamble create mode 100755 PCLibProj/PB.project create mode 100644 PCLibProj/PC.proj create mode 100644 PCLibProj/PCLibMakefileFactory.h create mode 100644 PCLibProj/PCLibMakefileFactory.m create mode 100644 PCLibProj/PCLibProj.h create mode 100644 PCLibProj/PCLibProj.m create mode 100644 PCLibProj/PCLibProject.h create mode 100644 PCLibProj/PCLibProject.m create mode 100644 PCLibProj/Version create mode 100644 PCLibProj/h.template create mode 100644 PCLibProj/m.template create mode 100644 PCToolProj/GNUmakefile create mode 100644 PCToolProj/GNUmakefile.postamble create mode 100644 PCToolProj/GNUmakefile.preamble create mode 100644 PCToolProj/Info-project.plist create mode 100644 PCToolProj/Info.table create mode 100644 PCToolProj/PC.proj create mode 100644 PCToolProj/PCToolMakefileFactory.h create mode 100644 PCToolProj/PCToolMakefileFactory.m create mode 100644 PCToolProj/PCToolProj.h create mode 100644 PCToolProj/PCToolProj.m create mode 100644 PCToolProj/PCToolProject.h create mode 100644 PCToolProj/PCToolProject.m create mode 100644 PCToolProj/h.template create mode 100644 PCToolProj/m.template create mode 100644 PCToolProj/main.m create mode 100755 ProjectCenter/English.lproj/ProjectCenter.gmodel create mode 100644 ProjectCenter/FileIcon_.c.tiff create mode 100644 ProjectCenter/FileIcon_.h.tiff create mode 100644 ProjectCenter/FileIcon_.m.tiff create mode 100644 ProjectCenter/FileIcon_rtf.tiff create mode 100644 ProjectCenter/GNUmakefile create mode 100644 ProjectCenter/GNUmakefile.postamble create mode 100644 ProjectCenter/GNUmakefile.preamble create mode 100755 ProjectCenter/Info-project.plist create mode 100755 ProjectCenter/Makefile create mode 100755 ProjectCenter/Makefile.postamble create mode 100755 ProjectCenter/Makefile.preamble create mode 100755 ProjectCenter/PB.project create mode 100644 ProjectCenter/PC.project create mode 100644 ProjectCenter/PCAppController.h create mode 100644 ProjectCenter/PCAppController.m create mode 100644 ProjectCenter/PCFindController.h create mode 100644 ProjectCenter/PCFindController.m create mode 100644 ProjectCenter/PCInfoController.h create mode 100644 ProjectCenter/PCInfoController.m create mode 100644 ProjectCenter/PCLogController.h create mode 100644 ProjectCenter/PCLogController.m create mode 100644 ProjectCenter/PCMenuController.h create mode 100644 ProjectCenter/PCMenuController.m create mode 100644 ProjectCenter/PCPrefController.h create mode 100644 ProjectCenter/PCPrefController.m create mode 100644 ProjectCenter/ProjectCenter.app.tiff create mode 100644 ProjectCenter/ProjectCenter.tiff create mode 100644 ProjectCenter/ProjectCenter_main.m create mode 100644 ProjectCenter/ProjectCentre_add.tiff create mode 100644 ProjectCenter/ProjectCentre_build.tiff create mode 100644 ProjectCenter/ProjectCentre_clean.tiff create mode 100644 ProjectCenter/ProjectCentre_cvs.tiff create mode 100644 ProjectCenter/ProjectCentre_documentation.tiff create mode 100644 ProjectCenter/ProjectCentre_files.tiff create mode 100644 ProjectCenter/ProjectCentre_find.tiff create mode 100644 ProjectCenter/ProjectCentre_prefs.tiff create mode 100644 ProjectCenter/ProjectCentre_run.tiff create mode 100644 ProjectCenter/ProjectCentre_uml.tiff create mode 100644 ProjectCenter/h.template create mode 100644 ProjectCenter/m.template create mode 100644 README create mode 100644 Version diff --git a/ANNOUNCE b/ANNOUNCE new file mode 100644 index 0000000..b4cb9bd --- /dev/null +++ b/ANNOUNCE @@ -0,0 +1,68 @@ +Announcement +************ + +What is ProjectCenter? +====================== + + ProjectCenter is an application developed for GNUstep which one day should + becoime a full blown development environment. + + The file `INSTALL' gives instructions for installing the package. + + The GNUstep web site at `http://www.prjectcenter.ch' contains more + information. + + ProjectCenter is covered under the GNU Public License. This means if you + make changes to these programs, you cannot charge a fee, other than + distribution fees, for others to use the program. You should read the + COPYING file for more information. + +How can you help? +================= + + * Check the bug list at the ProjectCenter web site. + If you can volunteer for any of the todo's, or if you have any useful + comments send email! + + * Give us feedback! Tell us what you like; tell us what you think + could be better. Send bug reports to . + +Machines +======== + + GNUstep ProjectCenter is known to compile on the following machines. + + * OpenStep 4.x/m68k + + * OpenStep 4.x/ix86 + + * Linux/GNUstep 0.6.5 + +Where do I send bug reports? +============================ + + Bug reports can be sent to . + +Enjoy! +Philippe C.D. Robert + + +Obtaining GNU Software +====================== + + Check out the GNU web site. (`http://www.gnu.org/') + + Check out the GNUstep web site. (`http://www.gnustep.org/') + + Most GNU software is packed using the GNU `gzip' compression program. +Source code is available on most sites distributing GNU software. + + For information on how to order GNU software on tape, floppy or +cd-rom, or printed GNU manuals, check the file etc/ORDERS in the GNU +Emacs distribution or in GNUinfo/ORDERS on prep, or e-mail a request to: + + + By ordering your GNU software from the FSF, you help us continue to +develop more free software. Media revenues are our primary source of +support. Donations to FSF are deductible on US tax returns. + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d544fba --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + 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. diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..5a02f47 --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,54 @@ +# +# Main Makefile for ProjectCenter +# +# Copyright (C) 2000 Philippe C.D. Robert +# +# Written by: Philippe C.D. Robert +# +# This file is part of the ProjectCenter +# +# 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; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA +# + +# Install into the system root by default +GNUSTEP_INSTALLATION_DIR = $(GNUSTEP_SYSTEM_ROOT) + +GNUSTEP_MAKEFILES = $(GNUSTEP_SYSTEM_ROOT)/Makefiles + +include $(GNUSTEP_MAKEFILES)/common.make + +include ./Version + +PACKAGE_NAME = ProjectCenter + +# +# The list of subproject directories +# + +SUBPROJECTS = \ + PCLib \ + PCAppProj \ + PCToolProj \ + PCLibProj \ + PCBaseFileTypes \ + ProjectCenter + +-include GNUMakefile.preamble + +include $(GNUSTEP_MAKEFILES)/aggregate.make + +-include GNUMakefile.postamble + + diff --git a/GNUmakefile.postamble b/GNUmakefile.postamble new file mode 100644 index 0000000..1db2bd8 --- /dev/null +++ b/GNUmakefile.postamble @@ -0,0 +1,26 @@ +# +# GNUmakefile.postamble +# +# Copyright (C) 2000 Philippe C.D. Robert +# +# Author: Philippe C.D. Robert +# +# This file is part of ProjectCenter +# +# 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. + + + diff --git a/GNUmakefile.preamble b/GNUmakefile.preamble new file mode 100644 index 0000000..729b8e1 --- /dev/null +++ b/GNUmakefile.preamble @@ -0,0 +1,65 @@ +# +# GNUmakefile.preamble +# +# Copyright (C) 2000 Philippe C.D. Robert +# +# Author: Philippe C.D. Robert +# +# This file is part of ProjectCenter +# +# 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. +# +# Project specific makefile variables, and additional +# +# Do not put any Makefile rules in this file, instead they should +# be put into Makefile.postamble. +# + +# +# Flags dealing with compiling and linking +# + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += +#ADDITIONAL_CFLAGS += + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += + +# Additional LDFLAGS to pass to the linker +ADDITIONAL_LDFLAGS += + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS = + +# +# Local configuration +# diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..aab1b99 --- /dev/null +++ b/INSTALL @@ -0,0 +1,26 @@ +Installation +************ + +This file documents the installation of the GNUstep ProjectCenter. + + Copyright (C) 2000 Philippe C.D. Robert. You may copy, +distribute, and modify it freely as long as you preserve this copyright +notice and permission notice. + +Installing `ProjectCenter' +==================== + + The ProjectCenter tool runs on OpenStep 4.2 and GNUstep. It's +possible it will run on other versions of OPENSTEP, but it has not been +tried yet. + + Here is a quick-and-dirty example of installation commands: + + +OPENSTEP 4.2: make; make install + + (or open the project in PB.app and compile it from there) + +GNUstep: make; make install; + +In order to do this successfully you must first install PCLib and the bundles and then the application itself! \ No newline at end of file diff --git a/PCAppProj/AppController.h b/PCAppProj/AppController.h new file mode 100644 index 0000000..619b67b --- /dev/null +++ b/PCAppProj/AppController.h @@ -0,0 +1,22 @@ +/* + * AppController.h created by phr on 2000-08-27 11:38:59 +0000 + * + * Project TestApp + * + * Created with ProjectCenter - http://www.projectcenter.ch + * + * $Id$ + */ + +#import + +@interface AppController : NSObject +{ +} + +- (id)init; +- (void)dealloc; + +- (void)awakeFromNib; + +@end diff --git a/PCAppProj/AppController.m b/PCAppProj/AppController.m new file mode 100644 index 0000000..3829677 --- /dev/null +++ b/PCAppProj/AppController.m @@ -0,0 +1,31 @@ +/* + * AppController.m created by phr on 2000-08-27 11:38:58 +0000 + * + * Project TestApp + * + * Created with ProjectCenter - http://www.projectcenter.ch + * + * $Id$ + */ + +#import "AppController.h" + +@implementation AppController + +- (id)init +{ + if ((self = [super init])) { + } + return self; +} + +- (void)dealloc +{ + [super dealloc]; +} + +- (void)awakeFromNib +{ +} + +@end diff --git a/PCAppProj/AppProject.gmodel b/PCAppProj/AppProject.gmodel new file mode 100644 index 0000000..5dd296b --- /dev/null +++ b/PCAppProj/AppProject.gmodel @@ -0,0 +1,133 @@ +{ + "Object 1" = {elements = ("Object 2"); isa = NSMutableArray; }; + "Object 2" = {className = PCAppProject; isa = IMCustomObject; realObject = "Object 3"; }; + "Object 3" = { + delegate = nil; + isa = NSApplication; + keyWindow = nil; + mainMenu = nil; + mainWindow = nil; + windows = "Object 4"; + }; + "Object 4" = { + elements = ("Object 5", "Object 9", "Object 11"); + isa = NSMutableArray; + }; + "Object 5" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 256; height = 128}"; + contentView = "Object 6"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 6" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 256; height = 128}"; + frame = "{x = 0; y = 0; width = 256; height = 128}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 5"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 7" = {elements = (); isa = NSMutableArray; }; + "Object 8" = { + alpha = 1.000000; + blue = 0.666667; + brightness = 0.666667; + colorSpaceName = NSCalibratedRGBColorSpace; + green = 0.666667; + hue = 0.000000; + isa = NSColor; + red = 0.666667; + saturation = 0.000000; + }; + "Object 9" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 193; height = 208}"; + contentView = "Object 10"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 10" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 193; height = 208}"; + frame = "{x = 0; y = 0; width = 193; height = 208}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 9"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 11" = { + backgroundColor = "Object 8"; + backingType = 2; + contentFrame = "{x = 221; y = 299; width = 512; height = 320}"; + contentView = "Object 12"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = YES; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 514; height = 352}"; + representedFilename = ""; + styleMask = 14; + title = Window; + }; + "Object 12" = { + autoresizesSubviews = NO; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 512; height = 320}"; + frame = "{x = 1; y = 9; width = 512; height = 320}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 11"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + RootObject = {Connections = "Object 7"; Objects = "Object 1"; isa = GMModel; }; + TopLevelObjects = (RootObject); + Version = 1; +} diff --git a/PCAppProj/GNUmakefile b/PCAppProj/GNUmakefile new file mode 100644 index 0000000..2bca6e5 --- /dev/null +++ b/PCAppProj/GNUmakefile @@ -0,0 +1,56 @@ +# GNUmakefile +# +# Copyright (C) 2000 Philippe C.D. Robert +# +# Author: Philippe C.D. Robert +# Date: 2000 +# +# This file is part of ProjectCenter +# +# 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 02139, USA. + +include $(GNUSTEP_MAKEFILES)/common.make + +BUNDLE_NAME = PCAppProj +BUNDLE_EXTENSION =.bundle +BUNDLE_INSTALL_DIR =$(GNUSTEP_LOCAL_ROOT)/Library/ProjectCenter/ + +PCAppProj_OBJC_FILES = \ + PCAppProj.m \ + PCAppMakefileFactory.m \ + PCAppProject.m + +PCAppProj_HEADERS= \ + PCAppMakefileFactory.h \ + PCAppProj.h \ + PCAppProject.h + +PCAppProj_PRINCIPAL_CLASS = PCAppProj + +PCAppProj_RESOURCE_FILES = \ + AppProject.gmodel \ + PC.proj \ + Main.gmodel \ + main.m \ + AppController.h \ + AppController.m \ + Info-project.plist + +-include GNUmakefile.preamble + +include $(GNUSTEP_MAKEFILES)/bundle.make + +-include GNUmakefile.postamble + diff --git a/PCAppProj/GNUmakefile.postamble b/PCAppProj/GNUmakefile.postamble new file mode 100644 index 0000000..c85b08f --- /dev/null +++ b/PCAppProj/GNUmakefile.postamble @@ -0,0 +1,30 @@ +# +# Makefile.postamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# 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. + + + + diff --git a/PCAppProj/GNUmakefile.preamble b/PCAppProj/GNUmakefile.preamble new file mode 100644 index 0000000..f61a96d --- /dev/null +++ b/PCAppProj/GNUmakefile.preamble @@ -0,0 +1,74 @@ +# +# Makefile.preamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# If you are interested in a warranty or support for this source code, +# contact Scott Christley at scottc@net-community.com +# +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. +# If not, write to the Free Software Foundation, +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# +# Makefile.preamble +# +# Project specific makefile variables, and additional +# +# Do not put any Makefile rules in this file, instead they should +# be put into Makefile.postamble. +# + +# +# Flags dealing with compiling and linking +# + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += +#ADDITIONAL_CFLAGS += + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += + +# Additional LDFLAGS to pass to the linker +ADDITIONAL_LDFLAGS += -lPC + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS += + +# +# Local configuration +# + + + diff --git a/PCAppProj/Info-project.plist b/PCAppProj/Info-project.plist new file mode 100644 index 0000000..ed865ab --- /dev/null +++ b/PCAppProj/Info-project.plist @@ -0,0 +1,12 @@ +{ + NOTE = "Automatically generated, do not edit!"; + ApplicationName = ""; + ApplicationDescription = ""; + ApplicationIcon = ""; + ApplicationRelease = ""; + FullVersionID = ""; + Authors = (); + URL = ""; + Copyright = ""; + CopyrightDescription = ""; +} diff --git a/PCAppProj/Info.table b/PCAppProj/Info.table new file mode 100644 index 0000000..e0861e8 --- /dev/null +++ b/PCAppProj/Info.table @@ -0,0 +1,29 @@ +{ + AdditionalAttributes = { + PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; + }; + Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); + AttributesInspector = ApplicationInspector; + DefaultExtension = ""; + Default_Localizable_Keys = (INTERFACES); + GeneratedFiles = (Makefile, iconHeader); + INSTALLFLAGS = "-c -s -m 755"; + InfoName = ""; + Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); + MAKEFILE = app.make; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); + PBProjectTypeSubClass = "PBApplicationProjectType"; + ProvidesIcons = Yes; + Public_Keys = (H_FILES); + Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); + SOURCEMODE = 444; + Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); + Subproj_Keys = (SUBPROJECTS); + Targets = (app, debug, profile, install); + ExecutableResults = ( + "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" + ); +} diff --git a/PCAppProj/Main.gmodel b/PCAppProj/Main.gmodel new file mode 100644 index 0000000..ec0303c --- /dev/null +++ b/PCAppProj/Main.gmodel @@ -0,0 +1,436 @@ +{ + "Object 1" = {elements = ("Object 2", "Object 37"); isa = NSMutableArray; }; + "Object 2" = {className = NSApplication; isa = IMCustomObject; realObject = "Object 3"; }; + "Object 3" = { + delegate = nil; + isa = NSApplication; + keyWindow = nil; + mainMenu = "Object 11"; + mainWindow = nil; + windows = "Object 4"; + }; + "Object 4" = {elements = ("Object 5", "Object 9"); isa = NSMutableArray; }; + "Object 5" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 256; height = 128}"; + contentView = "Object 6"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 6" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 256; height = 128}"; + frame = "{x = 0; y = 0; width = 256; height = 128}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 5"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 7" = {elements = (); isa = NSMutableArray; }; + "Object 8" = { + alpha = 1.000000; + blue = 0.666667; + brightness = 0.666667; + colorSpaceName = NSCalibratedRGBColorSpace; + green = 0.666667; + hue = 0.000000; + isa = NSColor; + red = 0.666667; + saturation = 0.000000; + }; + "Object 9" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 193; height = 208}"; + contentView = "Object 10"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 10" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 193; height = 208}"; + frame = "{x = 0; y = 0; width = 193; height = 208}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 9"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 11" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 12"; + title = GNUstep; + }; + "Object 12" = { + elements = ( + "Object 13", + "Object 20", + "Object 27", + "Object 33", + "Object 35", + "Object 36" + ); + isa = NSMutableArray; + }; + "Object 13" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 15"; + title = Info; + }; + "Object 14" = {isa = NSImage; name = NSMenuArrow; size = "{width = 12; height = 9}"; }; + "Object 15" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 16"; + title = Info; + }; + "Object 16" = { + elements = ("Object 17", "Object 18", "Object 19"); + isa = NSMutableArray; + }; + "Object 17" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Info Panel..."; + }; + "Object 18" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Preferences...; + }; + "Object 19" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = "?"; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Help...; + }; + "Object 20" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 21"; + title = Edit; + }; + "Object 21" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 22"; + title = Edit; + }; + "Object 22" = { + elements = ("Object 23", "Object 24", "Object 25", "Object 26"); + isa = NSMutableArray; + }; + "Object 23" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = x; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Cut; + }; + "Object 24" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = c; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Copy; + }; + "Object 25" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = v; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Paste; + }; + "Object 26" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = a; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Select All"; + }; + "Object 27" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 28"; + title = Windows; + }; + "Object 28" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 29"; + title = Windows; + }; + "Object 29" = { + elements = ("Object 30", "Object 31", "Object 32"); + isa = NSMutableArray; + }; + "Object 30" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Arrange in Front"; + }; + "Object 31" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = m; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Miniaturize Window"; + }; + "Object 32" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = w; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Close Window"; + }; + "Object 33" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 34"; + title = Services; + }; + "Object 34" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 7"; + title = Services; + }; + "Object 35" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = h; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Hide; + }; + "Object 36" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = q; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Quit; + }; + "Object 37" = {className = AppController; isa = IMCustomObject; }; + "Object 38" = { + elements = ( + "Object 39", + "Object 41", + "Object 43", + "Object 45", + "Object 47", + "Object 49", + "Object 51", + "Object 53", + "Object 55", + "Object 57", + "Object 59" + ); + isa = NSMutableArray; + }; + "Object 39" = { + destination = nil; + isa = IMControlConnector; + label = "Object 40"; + source = "Object 23"; + }; + "Object 40" = {isa = NSString; string = "cut:"; }; + "Object 41" = { + destination = nil; + isa = IMControlConnector; + label = "Object 42"; + source = "Object 24"; + }; + "Object 42" = {isa = NSString; string = "copy:"; }; + "Object 43" = { + destination = nil; + isa = IMControlConnector; + label = "Object 44"; + source = "Object 25"; + }; + "Object 44" = {isa = NSString; string = "paste:"; }; + "Object 45" = { + destination = nil; + isa = IMControlConnector; + label = "Object 46"; + source = "Object 26"; + }; + "Object 46" = {isa = NSString; string = "selectAll:"; }; + "Object 47" = { + destination = "Object 2"; + isa = IMControlConnector; + label = "Object 48"; + source = "Object 36"; + }; + "Object 48" = {isa = NSString; string = "terminate:"; }; + "Object 49" = { + destination = "Object 2"; + isa = IMControlConnector; + label = "Object 50"; + source = "Object 35"; + }; + "Object 50" = {isa = NSString; string = "hide:"; }; + "Object 51" = { + destination = nil; + isa = IMControlConnector; + label = "Object 52"; + source = "Object 19"; + }; + "Object 52" = {isa = NSString; string = "showHelp:"; }; + "Object 53" = { + destination = nil; + isa = IMControlConnector; + label = "Object 54"; + source = "Object 31"; + }; + "Object 54" = {isa = NSString; string = "performMiniaturize:"; }; + "Object 55" = { + destination = nil; + isa = IMControlConnector; + label = "Object 56"; + source = "Object 32"; + }; + "Object 56" = {isa = NSString; string = "performClose:"; }; + "Object 57" = { + destination = nil; + isa = IMControlConnector; + label = "Object 58"; + source = "Object 30"; + }; + "Object 58" = {isa = NSString; string = "arrangeInFront:"; }; + "Object 59" = { + destination = "Object 37"; + isa = IMOutletConnector; + label = "Object 60"; + source = "Object 2"; + }; + "Object 60" = {isa = NSString; string = delegate; }; + RootObject = {Connections = "Object 38"; Objects = "Object 1"; isa = GMModel; }; + TopLevelObjects = (RootObject); + Version = 1; +} diff --git a/PCAppProj/Makefile b/PCAppProj/Makefile new file mode 100644 index 0000000..e93f004 --- /dev/null +++ b/PCAppProj/Makefile @@ -0,0 +1,48 @@ +# +# Generated by the NeXT Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = PCAppProj + +PROJECTVERSION = 2.6 +PROJECT_TYPE = Loadable Bundle +LANGUAGE = English + +GLOBAL_RESOURCES = AppProject.nib GNUmakefile.postamble\ + GNUmakefile.preamble Info.table main.m PC.proj + +CLASSES = PCAppMakefileFactory.m PCAppProj.m PCAppProject.m + +HFILES = PCAppMakefileFactory.h PCAppProj.h PCAppProject.h + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble m.template\ + h.template + +MAKEFILEDIR = $(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = bundle.make +NEXTSTEP_INSTALLDIR = /LocalLibrary/ProjectCenter/ +WINDOWS_INSTALLDIR = /MyBundles +LIBS = +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) +BUNDLE_EXTENSION = bundle + + +FRAMEWORKS = -framework Foundation + + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/PCAppProj/Makefile.postamble b/PCAppProj/Makefile.postamble new file mode 100644 index 0000000..36381d4 --- /dev/null +++ b/PCAppProj/Makefile.postamble @@ -0,0 +1,122 @@ +############################################################################### +# NeXT Makefile.postamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project, sub-project, bundle, or +# palette. Each node in the project's tree of sub-projects and bundles +# should have it's own Makefile.preamble and Makefile.postamble. Additional +# rules (e.g., after_install) that are defined by the developer should be +# defined in this file. +# +############################################################################### +# +# Here are the variables exported by the common "app" makefiles that can be +# used in any customizations you make to the template below: +# +# PRODUCT_ROOT - Name of the directory to which resources are copied. +# OFILE_DIR - Directory into which .o object files are generated. +# (Note that this name is calculated based on the target +# architectures specified in Project Builder). +# DERIVED_SRC_DIR - Directory used for all other derived files +# ALL_CFLAGS - All the flags passed to the cc(1) driver for compilations +# +# NAME - name of application, bundle, subproject, palette, etc. +# LANGUAGE - langage in which the project is written (default "English") +# LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES - non-localized resources of project +# PROJECTVERSION - version of ProjectBuilder project (NS3.X = 1.1, NS4.0 = 2.0) +# ICONSECTIONS - Specifies icon sections when linking executable +# +# CLASSES - Class implementation files in project. +# HFILES - Header files in project. +# MFILES - Other Objective-C source files in project. +# CFILES - Other C source files in project. +# PSWFILES - .psw files in the project +# PSWMFILES - .pswm files in the project +# SUBPROJECTS - Subprojects of this project +# BUNDLES - Bundle subprojects of this project +# OTHERSRCS - Other miscellaneous sources of this project +# OTHERLINKED - Source files not matching a standard source extention +# +# LIBS - Libraries to link with when making app target +# DEBUG_LIBS - Libraries to link with when making debug target +# PROF_LIBS - Libraries to link with when making profile target +# OTHERLINKEDOFILES - Other relocatable files to (always) link in. +# +# APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles +# MAKEFILEDIR - Directory in which to find $(MAKEFILE) +# MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make) +# INSTALLDIR - Directory app will be installed into by 'install' target +# +############################################################################### + + +# Change defaults assumed by the standard makefiles here. Edit the +# following default values as appropriate. (Note that if no Makefile.postamble +# exists, these values will have defaults set in common.make). + +# Versioning of frameworks, libraries, bundles, and palettes: +#CURRENTLY_ACTIVE_VERSION = YES + # Set to "NO" to produce a compatibility binary +#DEPLOY_WITH_VERSION_NAME = A + # This should be incremented as your API changes. +#COMPATIBILITY_PROJECT_VERSION = 1 + # This should be incremented as your API grows. +#CURRENT_PROJECT_VERSION = 1 + # Defaults to using the "vers_string" hack. + +# Some compiler flags can be easily overridden here, but onlytake effect at +# the top-level: +#OPTIMIZATION_CFLAG = -O +#DEBUG_SYMBOLS_CFLAG = -g +#WARNING_CFLAGS = -Wmost +#DEBUG_BUILD_CFLAGS = -DDEBUG +#PROFILE_BUILD_CFLAGS = -pg -DPROFILE + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +# Flags passed to yacc +#YFLAGS = -d + +# Library and Framework projects only: +# 1. If you want something other than the default .dylib name, override it here +#DYLIB_INSTALL_NAME = lib$(NAME).dylib + +# 2. If you want to change the -install_name flag from the absolute path to the development area, change it here. One good choice is the installation directory. Another one might be none at all. +#DYLIB_INSTALL_DIR = $(INSTALLDIR) + +# Ownership and permissions of files installed by 'install' target +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + +# Options to strip for various project types. Note: -S strips debugging symbols +# (executables can be stripped down further with -x or, if they load no bundles, with no +# options at all). +#APP_STRIP_OPTS = -S +#TOOL_STRIP_OPTS = -S +#LIBRARY_STRIP_OPTS = -S + # for .a archives +#DYNAMIC_STRIP_OPTS = -S + # for bundles and shared libraries + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. "Official" +# user-defined rules are: +# * before_install +# * after_install +# * after_installhdrs +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# +# Note: on MS Windows, executables, have an extension, so rules and dependencies +# for generated tools should use $(EXECUTABLE_EXT) on the end. diff --git a/PCAppProj/Makefile.preamble b/PCAppProj/Makefile.preamble new file mode 100644 index 0000000..5c0a25a --- /dev/null +++ b/PCAppProj/Makefile.preamble @@ -0,0 +1,130 @@ +############################################################################### +# NeXT Makefile.preamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project. Each node in a project +# tree of sub-projects, tools, etc. should have its own Makefile.preamble and +# Makefile.postamble. +# +############################################################################### +## Configure the flags passed to $(CC) here. These flags will also be +## inherited by all nested sub-projects and bundles. Put your -I, -D, -U, and +## -L flags in ProjectBuilder's Build Options inspector if at all possible. +## To change the default flags that get passed to ${CC} +## (e.g. change -O to -O2), see Makefile.postamble. + +# Flags passed to compiler (in addition to -g, -O, etc) +OTHER_CFLAGS = +# Flags passed to ld (in addition to -ObjC, etc.) +OTHER_LDFLAGS = +# Flags passed to libtool when building libraries +OTHER_LIBTOOL_FLAGS = +# For ordering named sections on NEXTSTEP (see ld(1)) +SECTORDER_FLAGS = + +# If you do not want any headers exported before compilations begin, +# uncomment the following line. This can be a big time saver. +#SKIP_EXPORTING_HEADERS = YES + +# Stuff related to exporting headers from this project that isn't already +# handled by PB. +OTHER_PUBLIC_HEADERS = +OTHER_PROJECT_HEADERS = +OTHER_PRIVATE_HEADERS = + +# Set these two macros if you want a precomp to be built as part of +# installation. The cc -precomp will be run in the public header directory +# on the specified public header files with the specified additional flags. +PUBLIC_PRECOMPILED_HEADERS = +PUBLIC_PRECOMPILED_HEADERS_CFLAGS = + +# Set this for library projects if you want to publish header files. If your +# app or tool project exports headers Don't +# include $(DSTROOT); this is added for you automatically. +PUBLIC_HEADER_DIR = +PRIVATE_HEADER_DIR = + +# If, in a subproject, you want to append to the parent's PUBLIC_HEADER_DIR# +# (say, to add a subdirectory like "/sys"), you can use: +PUBLIC_HEADER_DIR_SUFFIX = +PRIVATE_HEADER_DIR_SUFFIX = + +# Set this for dynamic library projects on platforms where code which references +# a dynamic library must link against an import library (i.e., Windows NT) +# Don't include $(DSTROOT); this is added for you automatically. +IMPORT_LIBRARY_DIR = + +# Additional (non-localized) resources for this project, which can be generated +OTHER_RESOURCES = + +# Uncomment this to produce a static archive-style (.a) library +#LIBRARY_STYLE = STATIC + +# Set this to YES if you don't want a final libtool call for a library/framework. +BUILD_OFILES_LIST_ONLY = + +# Additional relocatables to be linked into this project +OTHER_OFILES = +# Additional libraries to link against +OTHER_LIBS = +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +## Configure how things get built here. Additional dependencies, source files, +## derived files, and build order should be specified here. + +# Other dependencies of this project +OTHER_PRODUCT_DEPENDS = +# Built *before* building subprojects/bundles +OTHER_INITIAL_TARGETS = +# Other source files maintained by .pre/postamble +OTHER_SOURCEFILES = +# Additional files to be removed by `make clean' +OTHER_GARBAGE = + +# Targets to build before installation +OTHER_INSTALL_DEPENDS = + +# More obscure flags you might want to set for pswrap, yacc, lex, etc. +PSWFLAGS = +YFLAGS = +LFLAGS = + +## Delete this line if you want fast and loose cleans that will not remove +## things like precomps and user-defined OTHER_GARBAGE in subprojects. +CLEAN_ALL_SUBPROJECTS = YES + +## Add more obscure source files here to cause them to be automatically +## processed by the appropriate tool. Note that these files should also be +## added to "Supporting Files" in ProjectBuilder. The desired .o files that +## result from these files should also be added to OTHER_OFILES above so they +## will be linked in. + +# .msg files that should have msgwrap run on them +MSGFILES = +# .defs files that should have mig run on them +DEFSFILES = +# .mig files (no .defs files) that should have mig run on them +MIGFILES = +# .x files that should have rpcgen run on them +RPCFILES = + +## Add additional Help directories here (add them to the project as "Other +## Resources" in Project Builder) so that they will be compressed into .store +## files and copied into the app wrapper. If the help directories themselves +## need to also be in the app wrapper, then a cp command will need to be added +## in an after_install target. +OTHER_HELP_DIRS = + +# After you have saved your project using the 4.0 PB, you will automatically +# start using the makefiles in /NextDeveloper/Makefiles/project. If you should +# need to revert back to the old 3.3 Makefile behavior, override MAKEFILEDIR to +# be /NextDeveloper/Makefiles/app. + +# Don't add more rules here unless you want the first one to be the default +# target for make! Put all your targets in Makefile.postamble. + diff --git a/PCAppProj/PB.project b/PCAppProj/PB.project new file mode 100644 index 0000000..275c2df --- /dev/null +++ b/PCAppProj/PB.project @@ -0,0 +1,24 @@ +{ + APPCLASS = PCAppProj; + BUNDLE_EXTENSION = bundle; + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + CLASSES = (PCAppMakefileFactory.m, PCAppProj.m, PCAppProject.m); + FRAMEWORKS = (Foundation.framework); + H_FILES = (PCAppMakefileFactory.h, PCAppProj.h, PCAppProject.h); + INTERFACES = (AppProject.nib); + OTHER_RESOURCES = (GNUmakefile.postamble, GNUmakefile.preamble, Info.table, main.m, PC.proj); + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, m.template, h.template); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = {}; + MAKEFILEDIR = "$(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_INSTALLDIR = /LocalLibrary/ProjectCenter/; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/NextDeveloper/bin/make; + PROJECTNAME = PCAppProj; + PROJECTTYPE = "Loadable Bundle"; + PROJECTVERSION = 2.6; + WINDOWS_BUILDTOOL = $NEXT_ROOT/NextDeveloper/Executables/make; + WINDOWS_INSTALLDIR = /MyBundles; +} diff --git a/PCAppProj/PC.proj b/PCAppProj/PC.proj new file mode 100644 index 0000000..e78336c --- /dev/null +++ b/PCAppProj/PC.proj @@ -0,0 +1,34 @@ +{ + APPCLASS = "NSApplication"; + APPKIT = "GNUSTEP-GUI"; + APPLICATIONICON = ""; + BUILDTOOL = "gnumake"; + CLASS_FILES = ("main.m","AppController.m"); + COMPILEROPTIONS = ""; + CREATION_DATE = ""; + DOCU_FILES = (); + FOUNDATION = "GNUSTEP-BASE"; + FRAMEWORKS = (); + HEADER_FILES = ("AppController.h"); + INTERFACES = ("Main.gmodel"); + IMAGES = (); + LANGUAGE = "English"; + LAST_EDITING = ""; + LIBRARIES = ("gnustep-base","gnustep-gui"); + MAININTERFACE = "Main.gmodel"; + MAKEFILEDIR = "/usr/GNUstep/Makefiles"; + INSTALLDIR = "$(HOME)/Apps"; + OTHER_FILES = (); + OTHER_RESOURCES = (); + OTHER_SOURCES = (); + PRINCIPAL_CLASS = "main.m"; + PROJECT_CREATOR = ""; + PROJECT_DESCRIPTION = "No description avaliable!"; + PROJECT_MAINTAINER = ""; + PROJECT_NAME = ""; + PROJECT_TYPE = "Application"; + PROJECT_BUILDER = "PCAppProj"; + PROJECT_VERSION = 1.0; + SUBPROJECTS = (); + SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); +} diff --git a/PCAppProj/PCAppMakefileFactory.h b/PCAppProj/PCAppMakefileFactory.h new file mode 100644 index 0000000..43799f5 --- /dev/null +++ b/PCAppProj/PCAppMakefileFactory.h @@ -0,0 +1,38 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import +#import + +@interface PCAppMakefileFactory : NSObject +{ +} + ++ (PCAppMakefileFactory *)sharedFactory; + +- (NSData *)makefileForProject:(PCProject *)aProject; + +@end diff --git a/PCAppProj/PCAppMakefileFactory.m b/PCAppProj/PCAppMakefileFactory.m new file mode 100644 index 0000000..9e5e694 --- /dev/null +++ b/PCAppProj/PCAppMakefileFactory.m @@ -0,0 +1,159 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCAppMakefileFactory.h" + +@implementation PCAppMakefileFactory + +static PCAppMakefileFactory *_factory = nil; + ++ (PCAppMakefileFactory *)sharedFactory +{ + if (!_factory) { + _factory = [[[self class] alloc] init]; + } + return _factory; +} + +- (NSData *)makefileForProject:(PCProject *)aProject; +{ + NSMutableString *string = [NSMutableString string]; + NSString *prName = [aProject projectName]; + NSDictionary *prDict = [aProject projectDict]; + NSString *tmp; + NSEnumerator *enumerator; + int i; + + // Header information + [string appendString:@"#\n"]; + [string appendString:@"# GNUmakefile - Generated by the ProjectCenter\n"]; + [string appendString:@"# Written by Philippe C.D. Robert \n"]; + [string appendString:@"#\n"]; + [string appendString:@"# NOTE: Do NOT change this file -- ProjectCenter maintains it!\n"]; + [string appendString:@"#\n"]; + [string appendString:@"# Put all of your customisations in GNUmakefile.preamble and\n"]; + [string appendString:@"# GNUmakefile.postamble\n"]; + [string appendString:@"#\n\n"]; + + // The 'real' thing + [string appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"]; + + [string appendString:@"#\n\n"]; + [string appendString:@"# Subprojects\n"]; + [string appendString:@"#\n\n"]; + + if ([[aProject subprojects] count]) { + enumerator = [[prDict objectForKey:PCSubprojects] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + } + + [string appendString:@"#\n"]; + [string appendString:@"# Main application\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"APP_NAME=%@\n",prName]]; + // [string appendString:[NSString stringWithFormat:@"%@_PRINCIPAL_CLASS=%@\n",prName,[prDict objectForKey:PCPrincipalClass]]]; + [string appendString:[NSString stringWithFormat:@"%@_MAIN_MODEL_FILE=%@\n",prName,[prDict objectForKey:PCMainGModelFile]]]; + [string appendString:[NSString stringWithFormat:@"%@_APPLICATION_ICON=%@\n",prName, [prDict objectForKey:PCAppIcon]]]; + + [string appendString:@"#\n\n"]; + [string appendString:@"# Additional libraries\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_ADDITIONAL_GUI_LIBS += ",prName]]; + + if ([[prDict objectForKey:PCLibraries] count]) { + enumerator = [[prDict objectForKey:PCLibraries] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + if (![tmp isEqualToString:@"gnustep-base"] && + ![tmp isEqualToString:@"gnustep-gui"]) { + [string appendString:[NSString stringWithFormat:@"-l%@ ",tmp]]; + } + } + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Resource files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_RESOURCE_FILES= ",prName]]; + + for (i=0;i<[[aProject resourceFileKeys] count];i++) { + NSString *k = [[aProject resourceFileKeys] objectAtIndex:i]; + + enumerator = [[prDict objectForKey:k] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\nEnglish.lproj/%@ ",tmp]]; + } + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Header files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_HEADERS= ",prName]]; + + enumerator = [[prDict objectForKey:PCHeaders] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Class files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_OBJC_FILES= ",prName]]; + + enumerator = [[prDict objectForKey:PCClasses] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# C files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_C_FILES= ",prName]]; + + enumerator = [[prDict objectForKey:PCOtherSources] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n"]; + + [string appendString:@"-include GNUmakefile.preamble\n"]; + [string appendString:@"-include GNUmakefile.local\n"]; + [string appendString:@"include $(GNUSTEP_MAKEFILES)/aggregate.make\n"]; + [string appendString:@"include $(GNUSTEP_MAKEFILES)/application.make\n"]; + [string appendString:@"-include GNUmakefile.postamble\n"]; + + return [string dataUsingEncoding:[NSString defaultCStringEncoding]]; +} + +@end diff --git a/PCAppProj/PCAppProj.h b/PCAppProj/PCAppProj.h new file mode 100644 index 0000000..1cfe5cd --- /dev/null +++ b/PCAppProj/PCAppProj.h @@ -0,0 +1,48 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import +#import + +@interface PCAppProj : NSObject +{ +} + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator; + +- (Class)projectClass; + +- (NSString *)projectTypeName; +- (NSDictionary *)typeTable; + +- (PCProject *)createProjectAt:(NSString *)path; +- (PCProject *)openProjectAt:(NSString *)path; + +@end diff --git a/PCAppProj/PCAppProj.m b/PCAppProj/PCAppProj.m new file mode 100644 index 0000000..f74d3b3 --- /dev/null +++ b/PCAppProj/PCAppProj.m @@ -0,0 +1,146 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + PCAppProj creates new project of the type Application! + +*/ + +#import "PCAppProj.h" +#import "PCAppProject.h" + +@implementation PCAppProj + +static NSString *_projTypeName = @"Application"; +static PCAppProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) { + _creator = [[[self class] alloc] init]; + } + return _creator; +} + +- (Class)projectClass +{ + return [PCAppProject class]; +} + +- (NSString *)projectTypeName +{ + return _projTypeName; +} + +- (NSDictionary *)typeTable +{ + NSString *_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" ofType:@"table"]; + + return [NSDictionary dictionaryWithContentsOfFile:_path]; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCAppProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath:path attributes:nil]) { + NSString *_file; + NSString *_resourcePath; + NSMutableDictionary *dict; + + project = [[[PCAppProject alloc] init] autorelease]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"PC" ofType:@"proj"]; + dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + [dict setObject:[path lastPathComponent] forKey:PCProjectName]; + [dict setObject:[project principalClass] forKey:PCProjType]; + + // Save the project to disc + [dict writeToFile:[path stringByAppendingPathComponent:@"PC.project"] atomically:YES]; + + // Copy the project files to the provided path + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"postamble"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"preamble"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"main" ofType:@"m"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"main.m"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"AppController" ofType:@"m"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"AppController.m"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"AppController" ofType:@"h"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"AppController.h"] handler:nil]; + + // Resources + _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath attributes:nil]; + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] attributes:nil]; + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] attributes:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"Main" ofType:@"gmodel"]; + [fm copyPath:_file toPath:[_resourcePath stringByAppendingPathComponent:@"Main.gmodel"] handler:nil]; + + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + + // Set the new dictionary - this causes the GNUmakefile to be written to disc + if(![project assignProjectDict:dict]) { + NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); + return nil; + } + } + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + id obj; + + NSLog(@"<%@ %x>: opening project at %@",[self class],self,path); + + obj = [dict objectForKey:PCProjectBuilderClass]; + if ([obj isEqualToString:@"PCAppProj"]) { + return [[[PCAppProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; + } + return nil; +} + +@end diff --git a/PCAppProj/PCAppProject.h b/PCAppProj/PCAppProject.h new file mode 100644 index 0000000..0214a94 --- /dev/null +++ b/PCAppProj/PCAppProject.h @@ -0,0 +1,66 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + This is the project type 'Application' for GNUstep. You never should create + it yourself but use PCAppProj for doing this. Otherwise needed files don't + get copied to the right place. + + */ + +#import +#import + +@interface PCAppProject : PCProject +{ + @private + BOOL _needsAdditionalReleasing; +} + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init; +- (void)dealloc; + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (BOOL)writeMakefile; + +- (BOOL)isValidDictionary:(NSDictionary *)aDict; + +- (NSArray *)sourceFileKeys; +- (NSArray *)resourceFileKeys; +- (NSArray *)otherKeys; +- (NSArray *)buildTargets; +- (NSString *)projectDescription; + +@end diff --git a/PCAppProj/PCAppProject.m b/PCAppProj/PCAppProject.m new file mode 100644 index 0000000..25e1282 --- /dev/null +++ b/PCAppProj/PCAppProject.m @@ -0,0 +1,180 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCAppProject.h" +#import "PCAppMakefileFactory.h" + +#import + +#if defined(GNUSTEP) +#import +#endif + +@interface PCAppProject (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCAppProject (CreateUI) + +- (void)_initUI +{ + // Always call super!!! + [super _initUI]; + + projectAttributeInspectorView = [[NSBox alloc] init]; + [projectAttributeInspectorView setTitlePosition:NSAtTop]; + [projectAttributeInspectorView setBorderType:NSGrooveBorder]; + // [projectAttributeInspectorView addSubview:projectTypePopup]; + [projectAttributeInspectorView sizeToFit]; + [projectAttributeInspectorView setAutoresizingMask:NSViewWidthSizable]; + + projectProjectInspectorView = [[NSBox alloc] init]; + [projectProjectInspectorView setTitlePosition:NSAtTop]; + [projectProjectInspectorView setBorderType:NSGrooveBorder]; + // [projectProjectInspectorView addSubview:projectTypePopup]; + [projectProjectInspectorView sizeToFit]; + [projectProjectInspectorView setAutoresizingMask:NSViewWidthSizable]; + + projectFileInspectorView = [[NSBox alloc] init]; + [projectFileInspectorView setTitlePosition:NSAtTop]; + [projectFileInspectorView setBorderType:NSGrooveBorder]; + // [projectFileInspectorView addSubview:projectTypePopup]; + [projectFileInspectorView sizeToFit]; + [projectFileInspectorView setAutoresizingMask:NSViewWidthSizable]; + + _needsAdditionalReleasing = YES; +} + +@end + +@implementation PCAppProject + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) { + rootCategories = [[NSDictionary dictionaryWithObjectsAndKeys: + PCGModels,@"Interfaces", + PCImages,@"Images", + PCOtherResources,@"Other Resources", + PCSubprojects,@"Subprojects", + PCLibraries,@"Libraries", + PCDocuFiles,@"Documentation", + PCOtherSources,@"Other Sources", + PCHeaders,@"Headers", + PCClasses,@"Classes", + nil] retain]; + +#if defined(GNUSTEP) + [self _initUI]; +#else + if(![NSBundle loadNibNamed:@"AppProject.nib" owner:self]) { + [[NSException exceptionWithName:NIB_NOT_FOUND_EXCEPTION reason:@"Could not load AppProject.gmodel" userInfo:nil] raise]; + return nil; + } +#endif + } + return self; +} + +- (void)dealloc +{ + [rootCategories release]; + + if (_needsAdditionalReleasing) { + [projectAttributeInspectorView release]; + [projectProjectInspectorView release]; + [projectFileInspectorView release]; + } + + [super dealloc]; +} + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (BOOL)writeMakefile +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *makefile = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + NSData *content; + + if (![super writeMakefile]) { + NSLog(@"Couldn't update PC.project..."); + } + + if (![fm movePath:makefile toPath:[projectPath stringByAppendingPathComponent:@"GNUmakefile~"] handler:nil]) { + NSLog(@"Couldn't write a backup GNUmakefile..."); + } + + if (!(content = [[PCAppMakefileFactory sharedFactory] makefileForProject:self])) { + NSLog([NSString stringWithFormat:@"Couldn't build the GNUmakefile %@!",makefile]); + return NO; + } + if (![content writeToFile:makefile atomically:YES]) { + NSLog([NSString stringWithFormat:@"Couldn't write the GNUmakefile %@!",makefile]); + return NO; + } + return YES; +} + +- (BOOL)isValidDictionary:(NSDictionary *)aDict +{ +#warning No project check implemented, yet! + return YES; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects:PCGModels,PCOtherResources,PCImages,nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; +} + +- (NSArray *)buildTargets +{ +} + +- (NSString *)projectDescription +{ + return @"Project that handles GNUstep/ObjC based applications."; +} + +@end diff --git a/PCAppProj/h.template b/PCAppProj/h.template new file mode 100644 index 0000000..7b523c7 --- /dev/null +++ b/PCAppProj/h.template @@ -0,0 +1,11 @@ +$$ +/* $FILENAME$ created by $USERNAME$ on $DATE$ */ + +#import + +@interface $FILENAMESANSEXTENSION$ : NSObject +{ + +} + +@end diff --git a/PCAppProj/m.template b/PCAppProj/m.template new file mode 100644 index 0000000..1216fe5 --- /dev/null +++ b/PCAppProj/m.template @@ -0,0 +1,18 @@ +$$ Lines starting with $$ are not inserted into newly created files +$$ The following substitutions are made: +$$ +$$ $FILENAME$ e.g. foo.m +$$ $FILENAMESANSEXTENSION$ e.g. foo +$$ $DIRECTORY$ e.g. /tmp/MyNewApp +$$ $PROJECTNAME$ e.g. MyNewApp +$$ $SUBPROJECTNAME$ e.g. TheGoodPart.subproj +$$ $USERNAME$ e.g. mwagner +$$ $DATE$ e.g. Jan-1-1994 +$$ +/* $FILENAME$ created by $USERNAME$ on $DATE$ */ + +#import "$FILENAMESANSEXTENSION$.h" + +@implementation $FILENAMESANSEXTENSION$ + +@end diff --git a/PCAppProj/main.m b/PCAppProj/main.m new file mode 100644 index 0000000..1ef1c5b --- /dev/null +++ b/PCAppProj/main.m @@ -0,0 +1,5 @@ +#import + +int main(int argc, const char *argv[]) { + return NSApplicationMain(argc, argv); +} diff --git a/PCBaseFileTypes/FileIcon_.c.tiff b/PCBaseFileTypes/FileIcon_.c.tiff new file mode 100644 index 0000000000000000000000000000000000000000..60829b8c53130e8309f894759cd9a93a6a44aa71 GIT binary patch literal 3504 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 G_5T44+R5So literal 0 HcmV?d00001 diff --git a/PCBaseFileTypes/FileIcon_.h.tiff b/PCBaseFileTypes/FileIcon_.h.tiff new file mode 100644 index 0000000000000000000000000000000000000000..5ecfc90a5439f137eac37ea3a8d857876eea95eb GIT binary patch literal 3502 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 KFh>Kw`hNo=;=7{& literal 0 HcmV?d00001 diff --git a/PCBaseFileTypes/FileIcon_.m.tiff b/PCBaseFileTypes/FileIcon_.m.tiff new file mode 100644 index 0000000000000000000000000000000000000000..e667755b5ddee9ed0fde6855df90ecf7e5f664db GIT binary patch literal 3488 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 +# Date: 2000 +# +# This file is part of ProjectCenter +# +# 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 02139, USA. + +include $(GNUSTEP_MAKEFILES)/common.make + +BUNDLE_NAME = PCBaseFileTypes +BUNDLE_EXTENSION =.bundle +PCBaseFileTypes_PRINCIPAL_CLASS = PCBaseFileType +BUNDLE_INSTALL_DIR =$(GNUSTEP_LOCAL_ROOT)/Library/ProjectCenter/ + +PCBaseFileTypes_OBJC_FILES = \ + PCBaseFileType.m + +PCBaseFileTypes_HEADERS= \ + PCBaseFileType.h + +PCBaseFileTypes_RESOURCE_FILES = \ + cfile.template \ + cheader.template \ + class.template \ + header.template + +-include GNUmakefile.preamble + +include $(GNUSTEP_MAKEFILES)/bundle.make + +-include GNUmakefile.postamble + diff --git a/PCBaseFileTypes/Makefile b/PCBaseFileTypes/Makefile new file mode 100755 index 0000000..ec3ef51 --- /dev/null +++ b/PCBaseFileTypes/Makefile @@ -0,0 +1,49 @@ +# +# Generated by the NeXT Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = PCBaseFileTypes + +PROJECTVERSION = 2.6 +PROJECT_TYPE = Loadable Bundle +LANGUAGE = English + +GLOBAL_RESOURCES = FileIcon_.m.tiff FileIcon_.h.tiff FileIcon_.c.tiff\ + cfile.template cheader.template class.template\ + header.template + +CLASSES = PCBaseFileType.m + +HFILES = PCBaseFileType.h + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble m.template\ + h.template + +MAKEFILEDIR = $(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = bundle.make +NEXTSTEP_INSTALLDIR = /LocalLibrary/ProjectCenter +WINDOWS_INSTALLDIR = /MyBundles +LIBS = -lPCLib +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) +BUNDLE_EXTENSION = bundle + + +FRAMEWORKS = -framework Foundation + + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/PCBaseFileTypes/Makefile.postamble b/PCBaseFileTypes/Makefile.postamble new file mode 100755 index 0000000..36381d4 --- /dev/null +++ b/PCBaseFileTypes/Makefile.postamble @@ -0,0 +1,122 @@ +############################################################################### +# NeXT Makefile.postamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project, sub-project, bundle, or +# palette. Each node in the project's tree of sub-projects and bundles +# should have it's own Makefile.preamble and Makefile.postamble. Additional +# rules (e.g., after_install) that are defined by the developer should be +# defined in this file. +# +############################################################################### +# +# Here are the variables exported by the common "app" makefiles that can be +# used in any customizations you make to the template below: +# +# PRODUCT_ROOT - Name of the directory to which resources are copied. +# OFILE_DIR - Directory into which .o object files are generated. +# (Note that this name is calculated based on the target +# architectures specified in Project Builder). +# DERIVED_SRC_DIR - Directory used for all other derived files +# ALL_CFLAGS - All the flags passed to the cc(1) driver for compilations +# +# NAME - name of application, bundle, subproject, palette, etc. +# LANGUAGE - langage in which the project is written (default "English") +# LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES - non-localized resources of project +# PROJECTVERSION - version of ProjectBuilder project (NS3.X = 1.1, NS4.0 = 2.0) +# ICONSECTIONS - Specifies icon sections when linking executable +# +# CLASSES - Class implementation files in project. +# HFILES - Header files in project. +# MFILES - Other Objective-C source files in project. +# CFILES - Other C source files in project. +# PSWFILES - .psw files in the project +# PSWMFILES - .pswm files in the project +# SUBPROJECTS - Subprojects of this project +# BUNDLES - Bundle subprojects of this project +# OTHERSRCS - Other miscellaneous sources of this project +# OTHERLINKED - Source files not matching a standard source extention +# +# LIBS - Libraries to link with when making app target +# DEBUG_LIBS - Libraries to link with when making debug target +# PROF_LIBS - Libraries to link with when making profile target +# OTHERLINKEDOFILES - Other relocatable files to (always) link in. +# +# APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles +# MAKEFILEDIR - Directory in which to find $(MAKEFILE) +# MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make) +# INSTALLDIR - Directory app will be installed into by 'install' target +# +############################################################################### + + +# Change defaults assumed by the standard makefiles here. Edit the +# following default values as appropriate. (Note that if no Makefile.postamble +# exists, these values will have defaults set in common.make). + +# Versioning of frameworks, libraries, bundles, and palettes: +#CURRENTLY_ACTIVE_VERSION = YES + # Set to "NO" to produce a compatibility binary +#DEPLOY_WITH_VERSION_NAME = A + # This should be incremented as your API changes. +#COMPATIBILITY_PROJECT_VERSION = 1 + # This should be incremented as your API grows. +#CURRENT_PROJECT_VERSION = 1 + # Defaults to using the "vers_string" hack. + +# Some compiler flags can be easily overridden here, but onlytake effect at +# the top-level: +#OPTIMIZATION_CFLAG = -O +#DEBUG_SYMBOLS_CFLAG = -g +#WARNING_CFLAGS = -Wmost +#DEBUG_BUILD_CFLAGS = -DDEBUG +#PROFILE_BUILD_CFLAGS = -pg -DPROFILE + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +# Flags passed to yacc +#YFLAGS = -d + +# Library and Framework projects only: +# 1. If you want something other than the default .dylib name, override it here +#DYLIB_INSTALL_NAME = lib$(NAME).dylib + +# 2. If you want to change the -install_name flag from the absolute path to the development area, change it here. One good choice is the installation directory. Another one might be none at all. +#DYLIB_INSTALL_DIR = $(INSTALLDIR) + +# Ownership and permissions of files installed by 'install' target +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + +# Options to strip for various project types. Note: -S strips debugging symbols +# (executables can be stripped down further with -x or, if they load no bundles, with no +# options at all). +#APP_STRIP_OPTS = -S +#TOOL_STRIP_OPTS = -S +#LIBRARY_STRIP_OPTS = -S + # for .a archives +#DYNAMIC_STRIP_OPTS = -S + # for bundles and shared libraries + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. "Official" +# user-defined rules are: +# * before_install +# * after_install +# * after_installhdrs +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# +# Note: on MS Windows, executables, have an extension, so rules and dependencies +# for generated tools should use $(EXECUTABLE_EXT) on the end. diff --git a/PCBaseFileTypes/Makefile.preamble b/PCBaseFileTypes/Makefile.preamble new file mode 100755 index 0000000..5c0a25a --- /dev/null +++ b/PCBaseFileTypes/Makefile.preamble @@ -0,0 +1,130 @@ +############################################################################### +# NeXT Makefile.preamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project. Each node in a project +# tree of sub-projects, tools, etc. should have its own Makefile.preamble and +# Makefile.postamble. +# +############################################################################### +## Configure the flags passed to $(CC) here. These flags will also be +## inherited by all nested sub-projects and bundles. Put your -I, -D, -U, and +## -L flags in ProjectBuilder's Build Options inspector if at all possible. +## To change the default flags that get passed to ${CC} +## (e.g. change -O to -O2), see Makefile.postamble. + +# Flags passed to compiler (in addition to -g, -O, etc) +OTHER_CFLAGS = +# Flags passed to ld (in addition to -ObjC, etc.) +OTHER_LDFLAGS = +# Flags passed to libtool when building libraries +OTHER_LIBTOOL_FLAGS = +# For ordering named sections on NEXTSTEP (see ld(1)) +SECTORDER_FLAGS = + +# If you do not want any headers exported before compilations begin, +# uncomment the following line. This can be a big time saver. +#SKIP_EXPORTING_HEADERS = YES + +# Stuff related to exporting headers from this project that isn't already +# handled by PB. +OTHER_PUBLIC_HEADERS = +OTHER_PROJECT_HEADERS = +OTHER_PRIVATE_HEADERS = + +# Set these two macros if you want a precomp to be built as part of +# installation. The cc -precomp will be run in the public header directory +# on the specified public header files with the specified additional flags. +PUBLIC_PRECOMPILED_HEADERS = +PUBLIC_PRECOMPILED_HEADERS_CFLAGS = + +# Set this for library projects if you want to publish header files. If your +# app or tool project exports headers Don't +# include $(DSTROOT); this is added for you automatically. +PUBLIC_HEADER_DIR = +PRIVATE_HEADER_DIR = + +# If, in a subproject, you want to append to the parent's PUBLIC_HEADER_DIR# +# (say, to add a subdirectory like "/sys"), you can use: +PUBLIC_HEADER_DIR_SUFFIX = +PRIVATE_HEADER_DIR_SUFFIX = + +# Set this for dynamic library projects on platforms where code which references +# a dynamic library must link against an import library (i.e., Windows NT) +# Don't include $(DSTROOT); this is added for you automatically. +IMPORT_LIBRARY_DIR = + +# Additional (non-localized) resources for this project, which can be generated +OTHER_RESOURCES = + +# Uncomment this to produce a static archive-style (.a) library +#LIBRARY_STYLE = STATIC + +# Set this to YES if you don't want a final libtool call for a library/framework. +BUILD_OFILES_LIST_ONLY = + +# Additional relocatables to be linked into this project +OTHER_OFILES = +# Additional libraries to link against +OTHER_LIBS = +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +## Configure how things get built here. Additional dependencies, source files, +## derived files, and build order should be specified here. + +# Other dependencies of this project +OTHER_PRODUCT_DEPENDS = +# Built *before* building subprojects/bundles +OTHER_INITIAL_TARGETS = +# Other source files maintained by .pre/postamble +OTHER_SOURCEFILES = +# Additional files to be removed by `make clean' +OTHER_GARBAGE = + +# Targets to build before installation +OTHER_INSTALL_DEPENDS = + +# More obscure flags you might want to set for pswrap, yacc, lex, etc. +PSWFLAGS = +YFLAGS = +LFLAGS = + +## Delete this line if you want fast and loose cleans that will not remove +## things like precomps and user-defined OTHER_GARBAGE in subprojects. +CLEAN_ALL_SUBPROJECTS = YES + +## Add more obscure source files here to cause them to be automatically +## processed by the appropriate tool. Note that these files should also be +## added to "Supporting Files" in ProjectBuilder. The desired .o files that +## result from these files should also be added to OTHER_OFILES above so they +## will be linked in. + +# .msg files that should have msgwrap run on them +MSGFILES = +# .defs files that should have mig run on them +DEFSFILES = +# .mig files (no .defs files) that should have mig run on them +MIGFILES = +# .x files that should have rpcgen run on them +RPCFILES = + +## Add additional Help directories here (add them to the project as "Other +## Resources" in Project Builder) so that they will be compressed into .store +## files and copied into the app wrapper. If the help directories themselves +## need to also be in the app wrapper, then a cp command will need to be added +## in an after_install target. +OTHER_HELP_DIRS = + +# After you have saved your project using the 4.0 PB, you will automatically +# start using the makefiles in /NextDeveloper/Makefiles/project. If you should +# need to revert back to the old 3.3 Makefile behavior, override MAKEFILEDIR to +# be /NextDeveloper/Makefiles/app. + +# Don't add more rules here unless you want the first one to be the default +# target for make! Put all your targets in Makefile.postamble. + diff --git a/PCBaseFileTypes/PB.project b/PCBaseFileTypes/PB.project new file mode 100755 index 0000000..e352f96 --- /dev/null +++ b/PCBaseFileTypes/PB.project @@ -0,0 +1,25 @@ +{ + APPCLASS = PCBaseFileType; + BUNDLE_EXTENSION = bundle; + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + CLASSES = (PCBaseFileType.m); + FRAMEWORKS = (Foundation.framework); + H_FILES = (PCBaseFileType.h); + IMAGES = (FileIcon_.m.tiff, FileIcon_.h.tiff, FileIcon_.c.tiff); + OTHER_LIBS = (PCLib); + OTHER_RESOURCES = (cfile.template, cheader.template, class.template, header.template); + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, m.template, h.template); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = {}; + MAKEFILEDIR = "$(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_INSTALLDIR = /LocalLibrary/ProjectCenter; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/NextDeveloper/bin/make; + PROJECTNAME = PCBaseFileTypes; + PROJECTTYPE = "Loadable Bundle"; + PROJECTVERSION = 2.6; + WINDOWS_BUILDTOOL = $NEXT_ROOT/NextDeveloper/Executables/make; + WINDOWS_INSTALLDIR = /MyBundles; +} diff --git a/PCBaseFileTypes/PCBaseFileType.h b/PCBaseFileTypes/PCBaseFileType.h new file mode 100644 index 0000000..04c2c56 --- /dev/null +++ b/PCBaseFileTypes/PCBaseFileType.h @@ -0,0 +1,49 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import +#import + +@class PCProject; + +@interface PCBaseFileType : NSObject +{ + NSMutableString *file; +} + ++ (id)sharedCreator; + +- (NSString *)name; +- (NSDictionary *)creatorDictionary; + +- (NSDictionary *)createFileOfType:(NSString *)type path:(NSString *)path project:(PCProject *)aProject; + // The implementation needs some heavy cleanup! + +- (void)replaceTagsInFileAtPath:(NSString *)newFile withProject:(PCProject *)aProject type:(NSString *)aType; + +@end + + diff --git a/PCBaseFileTypes/PCBaseFileType.m b/PCBaseFileTypes/PCBaseFileType.m new file mode 100644 index 0000000..66b6c1b --- /dev/null +++ b/PCBaseFileTypes/PCBaseFileType.m @@ -0,0 +1,203 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCBaseFileType.h" +#import + +#define ObjCClass @"ObjC Class" +#define ObjCHeader @"ObjC Header" +#define CFile @"C File" +#define CHeaderFile @"C Header" + +@implementation PCBaseFileType + +static PCBaseFileType *_creator = nil; +static NSString *_name = @"BaseFileCreator"; +static NSDictionary *dict = nil; + ++ (id)sharedCreator +{ + if (!_creator) { + NSDictionary *classDict; + NSDictionary *headerDict; + NSDictionary *ccDict; + NSDictionary *chDict; + + _creator = [[[self class] alloc] init]; + + // Setting up the dictionary needed for registration! + classDict = [NSDictionary dictionaryWithObjectsAndKeys:_creator,@"Creator",PCClasses,@"ProjectKey",nil]; + headerDict = [NSDictionary dictionaryWithObjectsAndKeys:_creator,@"Creator",PCHeaders,@"ProjectKey",nil]; + ccDict = [NSDictionary dictionaryWithObjectsAndKeys:_creator,@"Creator",PCOtherSources,@"ProjectKey",nil]; + chDict = [NSDictionary dictionaryWithObjectsAndKeys:_creator,@"Creator",PCHeaders,@"ProjectKey",nil]; + + dict = [[NSDictionary alloc] initWithObjectsAndKeys:classDict,ObjCClass,headerDict,ObjCHeader,ccDict,CFile,chDict,CHeaderFile,nil]; + } + return _creator; +} + +- (NSString *)name +{ + return _name; +} + +- (NSDictionary *)creatorDictionary +{ + return dict; +} + +- (NSDictionary *)createFileOfType:(NSString *)type path:(NSString *)path project:(PCProject *)aProject +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *_file; + NSString *newFile = nil; + NSMutableDictionary *files; + + // A class and possibly a header + files = [NSMutableDictionary dictionaryWithCapacity:2]; + + NSLog(@"<%@ %x>: create %@ at %@",[self class],self,type,path); + + /* + * + */ + + if ([type isEqualToString:ObjCClass]) { + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"class" ofType:@"template"]; + newFile = [path stringByAppendingPathExtension:@"m"]; + [fm copyPath:_file toPath:newFile handler:nil]; + [files setObject:ObjCClass forKey:newFile]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; + + // Should a header be created as well? + newFile = [path stringByAppendingPathExtension:@"h"]; + if (NSRunAlertPanel(@"Attention!",@"Should %@ be created and inserted in the project as well?",@"Yes",@"No",nil,[newFile lastPathComponent])) { + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"header" ofType:@"template"]; + [fm copyPath:_file toPath:newFile handler:nil]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject type:ObjCHeader]; + [files setObject:ObjCHeader forKey:newFile]; + } + } + + /* + * + */ + + else if ([type isEqualToString:CFile]) { + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"cfile" ofType:@"template"]; + newFile = [path stringByAppendingPathExtension:@"c"]; + [fm copyPath:_file toPath:newFile handler:nil]; + [files setObject:CFile forKey:newFile]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; + + // Should a header be created as well? + newFile = [path stringByAppendingPathExtension:@"h"]; + if (NSRunAlertPanel(@"Attention!",@"Should %@ be created and inserted in the project as well?",@"Yes",@"No",nil,[newFile lastPathComponent])) { + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"cheader" ofType:@"template"]; + [fm copyPath:_file toPath:newFile handler:nil]; + + [self replaceTagsInFileAtPath:newFile withProject:aProject type:CHeaderFile]; + [files setObject:CHeaderFile forKey:newFile]; + } + } + + /* + * + */ + + else if ([type isEqualToString:ObjCHeader]) { + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"header" ofType:@"template"]; + newFile = [path stringByAppendingPathExtension:@"h"]; + [fm copyPath:_file toPath:newFile handler:nil]; + [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; + [files setObject:ObjCHeader forKey:newFile]; + } + + /* + * + */ + + else if ([type isEqualToString:CHeaderFile]) { + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"cheader" ofType:@"template"]; + newFile = [path stringByAppendingPathExtension:@"h"]; + [fm copyPath:_file toPath:newFile handler:nil]; + [self replaceTagsInFileAtPath:newFile withProject:aProject type:type]; + [files setObject:ObjCHeader forKey:newFile]; + } + + /* + * Notify the browser! + */ + + [[NSNotificationCenter defaultCenter] postNotificationName:@"ProjectDictDidChangeNotification" object:self]; + + return files; +} + +- (void)replaceTagsInFileAtPath:(NSString *)newFile withProject:(PCProject *)aProject type:(NSString *)aType +{ + NSString *user = NSUserName(); + NSString *pname = [aProject projectName]; + NSString *date = [[NSCalendarDate calendarDate] description]; + NSString *aFile = [newFile lastPathComponent]; + + file = [[NSMutableString stringWithContentsOfFile:newFile] retain]; + + [file replaceCharactersInRange: + [file rangeOfString:@"$FILENAME$"] withString:aFile]; + + [file replaceCharactersInRange: + [file rangeOfString:@"$USERNAME$"] withString:user]; + + [file replaceCharactersInRange: + [file rangeOfString:@"$PROJECTNAME$"] withString:pname]; + + [file replaceCharactersInRange: + [file rangeOfString:@"$DATE$"] withString:date]; + + if ([aType isEqualToString:ObjCClass] || + [aType isEqualToString:CFile] || + [aType isEqualToString:ObjCHeader]) { + NSString *name = [aFile stringByDeletingPathExtension]; + + [file replaceCharactersInRange: + [file rangeOfString:@"$FILENAMESANSEXTENSION$"] withString:name]; + + if ([aType isEqualToString:ObjCClass]) { + [file replaceCharactersInRange: + [file rangeOfString:@"$FILENAMESANSEXTENSION$"] withString:name]; + } + } + [file writeToFile:newFile atomically:YES]; + [file autorelease]; +} + +@end + + diff --git a/PCBaseFileTypes/cfile.template b/PCBaseFileTypes/cfile.template new file mode 100644 index 0000000..266a59e --- /dev/null +++ b/PCBaseFileTypes/cfile.template @@ -0,0 +1,11 @@ +/* + * $FILENAME$ created by $USERNAME$ on $DATE$ + * + * Project $PROJECTNAME$ + * + * Created with ProjectCenter - http://www.projectcenter.ch + * + * $Id$ + */ + +#include "$FILENAMESANSEXTENSION$.h" diff --git a/PCBaseFileTypes/cheader.template b/PCBaseFileTypes/cheader.template new file mode 100644 index 0000000..5b45ed0 --- /dev/null +++ b/PCBaseFileTypes/cheader.template @@ -0,0 +1,10 @@ +/* + * $FILENAME$ created by $USERNAME$ on $DATE$ + * + * Project $PROJECTNAME$ + * + * Created with ProjectCenter - http://www.projectcenter.ch + * + * $Id$ + */ + diff --git a/PCBaseFileTypes/class.template b/PCBaseFileTypes/class.template new file mode 100644 index 0000000..2100a62 --- /dev/null +++ b/PCBaseFileTypes/class.template @@ -0,0 +1,15 @@ +/* + * $FILENAME$ created by $USERNAME$ on $DATE$ + * + * Project $PROJECTNAME$ + * + * Created with ProjectCenter - http://www.projectcenter.ch + * + * $Id$ + */ + +#import "$FILENAMESANSEXTENSION$.h" + +@implementation $FILENAMESANSEXTENSION$ + +@end diff --git a/PCBaseFileTypes/header.template b/PCBaseFileTypes/header.template new file mode 100644 index 0000000..0cf48af --- /dev/null +++ b/PCBaseFileTypes/header.template @@ -0,0 +1,18 @@ +/* + * $FILENAME$ created by $USERNAME$ on $DATE$ + * + * Project $PROJECTNAME$ + * + * Created with ProjectCenter - http://www.projectcenter.ch + * + * $Id$ + */ + +#import + +@interface $FILENAMESANSEXTENSION$ : NSObject +{ + +} + +@end diff --git a/PCLib/FileCreator.h b/PCLib/FileCreator.h new file mode 100644 index 0000000..72eaf28 --- /dev/null +++ b/PCLib/FileCreator.h @@ -0,0 +1,44 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@class PCProject; + +@protocol FileCreator + ++ (id)sharedCreator; + +- (NSString *)name; +- (NSDictionary *)creatorDictionary; + // Object is the creator and key is the type of the file to be created + +- (NSDictionary *)createFileOfType:(NSString *)type path:(NSString *)path project:(PCProject *)aProject; + // Creates the file and returns a dictionary containing the full path of it as the key and the type as object (and perhaps other files that have been added during this process!); including path extensions etc! + +@end + + diff --git a/PCLib/GNUmakefile b/PCLib/GNUmakefile new file mode 100644 index 0000000..159db9e --- /dev/null +++ b/PCLib/GNUmakefile @@ -0,0 +1,97 @@ +# +# src makefile for the PCLib +# +# Copyright (C) 2000 Philippe C.D. Robert +# +# Written by: Philippe C.D. Robert +# +# This file is part of the ProjectCenter. +# +# 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; if not, write to the Free +# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. +# + +# Install into the system root by default +PCLIB_INSTALLATION_DIR = $(GNUSTEP_LOCAL_ROOT) +GNUSTEP_MAKEFILES = $(GNUSTEP_SYSTEM_ROOT)/Makefiles + +include $(GNUSTEP_MAKEFILES)/common.make + +include ../Version + +srcdir = . + +PACKAGE_NAME = PCLib +LIBRARY_VAR = PCLIB + +# The library to be compiled +LIBRARY_NAME=libPC + +PCLIB_INSTALL_PREFIX=$(GNUSTEP_LOCAL_ROOT) + +# Grep for these names to build the legally-required "AUTHORS" file. +FILE_AUTHORS = \ + "Philippe C.D. Robert" + +# The source files + +libPC_MFILES = \ + PCBrowserController.m \ + PCBundleLoader.m \ + PCDataSource.m \ + PCFileManager.m \ + PCProject.m \ + PCProjectBuilder.m \ + PCProjectManager.m \ + PCServer.m + +libPC_CFILES = + +libPC_HFILES = \ + FileCreator.h \ + PCBrowserController.h \ + PCBundleLoader.h \ + PCDataSource.h \ + PCFileManager.h \ + PCProject.h \ + PCProjectBuilder.h \ + PCProjectManager.h \ + PCServer.h \ + PreferenceController.h \ + ProjectBuilder.h \ + ProjectCenter.h \ + ProjectDebugger.h \ + ProjectEditor.h \ + ProjectType.h \ + Server.h + +HEADERS_INSTALL = $(libPC_HFILES) + +# The Objective-C source files to be compiled +libPC_OBJC_FILES = $(libPC_MFILES) + +# The C source files to be compiled +libPC_C_FILES = $(libPC_CFILES) + +# The headers +libPC_HEADER_FILES_DIR = . +libPC_HEADER_FILES_INSTALL_DIR = /ProjectCenter +libPC_HEADER_FILES = $(libPC_HFILES) + +-include GNUmakefile.preamble + +include $(GNUSTEP_MAKEFILES)/library.make + + + diff --git a/PCLib/GNUmakefile.preamble b/PCLib/GNUmakefile.preamble new file mode 100644 index 0000000..d878583 --- /dev/null +++ b/PCLib/GNUmakefile.preamble @@ -0,0 +1,67 @@ +# +# GNUmakefile.preamble +# +# Copyright (C) 1999 Philippe C.D. Robert +# +# Author: Philippe C.D. Robert +# +# This file is part of ProjectCenter +# +# 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. +# +# Project specific makefile variables, and additional +# +# Do not put any Makefile rules in this file, instead they should +# be put into Makefile.postamble. +# + +# +# Flags dealing with compiling and linking +# + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += +#ADDITIONAL_CFLAGS += + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += + +# Additional LDFLAGS to pass to the linker +ADDITIONAL_LDFLAGS += + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS = $(PCLIB_INSTALL_PREFIX)/Headers/ProjectCenter + +# +# Local configuration +# + + diff --git a/PCLib/Makefile b/PCLib/Makefile new file mode 100755 index 0000000..df60e97 --- /dev/null +++ b/PCLib/Makefile @@ -0,0 +1,65 @@ +# +# Generated by the NeXT Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = PCLib + +PROJECTVERSION = 2.6 +PROJECT_TYPE = Library +LANGUAGE = English + +CLASSES = PCBundleLoader.m PCDataSource.m PCProjectManager.m PCServer.m\ + PCProject.m PCFileManager.m PCBrowserController.m\ + PCProjectBuilder.m + +HFILES = PCBundleLoader.h PCDataSource.h PCProjectManager.h PCServer.h\ + PCProject.h PCFileManager.h PCBrowserController.h\ + PreferenceController.h ProjectCenter.h ProjectDebugger.h\ + ProjectEditor.h ProjectType.h Server.h ProjectBuilder.h\ + FileCreator.h PCProjectBuilder.h + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble m.template\ + h.template + +MAKEFILEDIR = $(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles +CURRENTLY_ACTIVE_VERSION = YES +DEPLOY_WITH_VERSION_NAME = A +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = library.make +NEXTSTEP_INSTALLDIR = /usr/local/lib +WINDOWS_INSTALLDIR = $(HOMEDRIVE)/LocalDeveloper/Libraries +PDO_UNIX_INSTALLDIR = /usr/local/lib +LIBS = +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) + + +FRAMEWORKS = -framework AppKit -framework Foundation +PUBLIC_HEADERS = PCBundleLoader.h PCProjectManager.h PCServer.h\ + ProjectCenter.h ProjectDebugger.h ProjectEditor.h\ + Server.h ProjectType.h PreferenceController.h\ + PCDataSource.h PCProject.h ProjectBuilder.h\ + FileCreator.h PCFileManager.h PCBrowserController.h + + + +NEXTSTEP_PUBLIC_HEADERS_DIR = /LocalDeveloper/Headers/$(NAME) + +WINDOWS_PUBLIC_HEADERS_DIR = $(HOMEDRIVE)/LocalDeveloper/Headers/$(NAME) + +PDO_UNIX_PUBLIC_HEADERS_DIR = /LocalDeveloper/Headers/$(NAME) + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/PCLib/Makefile.postamble b/PCLib/Makefile.postamble new file mode 100755 index 0000000..36381d4 --- /dev/null +++ b/PCLib/Makefile.postamble @@ -0,0 +1,122 @@ +############################################################################### +# NeXT Makefile.postamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project, sub-project, bundle, or +# palette. Each node in the project's tree of sub-projects and bundles +# should have it's own Makefile.preamble and Makefile.postamble. Additional +# rules (e.g., after_install) that are defined by the developer should be +# defined in this file. +# +############################################################################### +# +# Here are the variables exported by the common "app" makefiles that can be +# used in any customizations you make to the template below: +# +# PRODUCT_ROOT - Name of the directory to which resources are copied. +# OFILE_DIR - Directory into which .o object files are generated. +# (Note that this name is calculated based on the target +# architectures specified in Project Builder). +# DERIVED_SRC_DIR - Directory used for all other derived files +# ALL_CFLAGS - All the flags passed to the cc(1) driver for compilations +# +# NAME - name of application, bundle, subproject, palette, etc. +# LANGUAGE - langage in which the project is written (default "English") +# LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES - non-localized resources of project +# PROJECTVERSION - version of ProjectBuilder project (NS3.X = 1.1, NS4.0 = 2.0) +# ICONSECTIONS - Specifies icon sections when linking executable +# +# CLASSES - Class implementation files in project. +# HFILES - Header files in project. +# MFILES - Other Objective-C source files in project. +# CFILES - Other C source files in project. +# PSWFILES - .psw files in the project +# PSWMFILES - .pswm files in the project +# SUBPROJECTS - Subprojects of this project +# BUNDLES - Bundle subprojects of this project +# OTHERSRCS - Other miscellaneous sources of this project +# OTHERLINKED - Source files not matching a standard source extention +# +# LIBS - Libraries to link with when making app target +# DEBUG_LIBS - Libraries to link with when making debug target +# PROF_LIBS - Libraries to link with when making profile target +# OTHERLINKEDOFILES - Other relocatable files to (always) link in. +# +# APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles +# MAKEFILEDIR - Directory in which to find $(MAKEFILE) +# MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make) +# INSTALLDIR - Directory app will be installed into by 'install' target +# +############################################################################### + + +# Change defaults assumed by the standard makefiles here. Edit the +# following default values as appropriate. (Note that if no Makefile.postamble +# exists, these values will have defaults set in common.make). + +# Versioning of frameworks, libraries, bundles, and palettes: +#CURRENTLY_ACTIVE_VERSION = YES + # Set to "NO" to produce a compatibility binary +#DEPLOY_WITH_VERSION_NAME = A + # This should be incremented as your API changes. +#COMPATIBILITY_PROJECT_VERSION = 1 + # This should be incremented as your API grows. +#CURRENT_PROJECT_VERSION = 1 + # Defaults to using the "vers_string" hack. + +# Some compiler flags can be easily overridden here, but onlytake effect at +# the top-level: +#OPTIMIZATION_CFLAG = -O +#DEBUG_SYMBOLS_CFLAG = -g +#WARNING_CFLAGS = -Wmost +#DEBUG_BUILD_CFLAGS = -DDEBUG +#PROFILE_BUILD_CFLAGS = -pg -DPROFILE + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +# Flags passed to yacc +#YFLAGS = -d + +# Library and Framework projects only: +# 1. If you want something other than the default .dylib name, override it here +#DYLIB_INSTALL_NAME = lib$(NAME).dylib + +# 2. If you want to change the -install_name flag from the absolute path to the development area, change it here. One good choice is the installation directory. Another one might be none at all. +#DYLIB_INSTALL_DIR = $(INSTALLDIR) + +# Ownership and permissions of files installed by 'install' target +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + +# Options to strip for various project types. Note: -S strips debugging symbols +# (executables can be stripped down further with -x or, if they load no bundles, with no +# options at all). +#APP_STRIP_OPTS = -S +#TOOL_STRIP_OPTS = -S +#LIBRARY_STRIP_OPTS = -S + # for .a archives +#DYNAMIC_STRIP_OPTS = -S + # for bundles and shared libraries + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. "Official" +# user-defined rules are: +# * before_install +# * after_install +# * after_installhdrs +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# +# Note: on MS Windows, executables, have an extension, so rules and dependencies +# for generated tools should use $(EXECUTABLE_EXT) on the end. diff --git a/PCLib/Makefile.preamble b/PCLib/Makefile.preamble new file mode 100755 index 0000000..5c0a25a --- /dev/null +++ b/PCLib/Makefile.preamble @@ -0,0 +1,130 @@ +############################################################################### +# NeXT Makefile.preamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project. Each node in a project +# tree of sub-projects, tools, etc. should have its own Makefile.preamble and +# Makefile.postamble. +# +############################################################################### +## Configure the flags passed to $(CC) here. These flags will also be +## inherited by all nested sub-projects and bundles. Put your -I, -D, -U, and +## -L flags in ProjectBuilder's Build Options inspector if at all possible. +## To change the default flags that get passed to ${CC} +## (e.g. change -O to -O2), see Makefile.postamble. + +# Flags passed to compiler (in addition to -g, -O, etc) +OTHER_CFLAGS = +# Flags passed to ld (in addition to -ObjC, etc.) +OTHER_LDFLAGS = +# Flags passed to libtool when building libraries +OTHER_LIBTOOL_FLAGS = +# For ordering named sections on NEXTSTEP (see ld(1)) +SECTORDER_FLAGS = + +# If you do not want any headers exported before compilations begin, +# uncomment the following line. This can be a big time saver. +#SKIP_EXPORTING_HEADERS = YES + +# Stuff related to exporting headers from this project that isn't already +# handled by PB. +OTHER_PUBLIC_HEADERS = +OTHER_PROJECT_HEADERS = +OTHER_PRIVATE_HEADERS = + +# Set these two macros if you want a precomp to be built as part of +# installation. The cc -precomp will be run in the public header directory +# on the specified public header files with the specified additional flags. +PUBLIC_PRECOMPILED_HEADERS = +PUBLIC_PRECOMPILED_HEADERS_CFLAGS = + +# Set this for library projects if you want to publish header files. If your +# app or tool project exports headers Don't +# include $(DSTROOT); this is added for you automatically. +PUBLIC_HEADER_DIR = +PRIVATE_HEADER_DIR = + +# If, in a subproject, you want to append to the parent's PUBLIC_HEADER_DIR# +# (say, to add a subdirectory like "/sys"), you can use: +PUBLIC_HEADER_DIR_SUFFIX = +PRIVATE_HEADER_DIR_SUFFIX = + +# Set this for dynamic library projects on platforms where code which references +# a dynamic library must link against an import library (i.e., Windows NT) +# Don't include $(DSTROOT); this is added for you automatically. +IMPORT_LIBRARY_DIR = + +# Additional (non-localized) resources for this project, which can be generated +OTHER_RESOURCES = + +# Uncomment this to produce a static archive-style (.a) library +#LIBRARY_STYLE = STATIC + +# Set this to YES if you don't want a final libtool call for a library/framework. +BUILD_OFILES_LIST_ONLY = + +# Additional relocatables to be linked into this project +OTHER_OFILES = +# Additional libraries to link against +OTHER_LIBS = +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +## Configure how things get built here. Additional dependencies, source files, +## derived files, and build order should be specified here. + +# Other dependencies of this project +OTHER_PRODUCT_DEPENDS = +# Built *before* building subprojects/bundles +OTHER_INITIAL_TARGETS = +# Other source files maintained by .pre/postamble +OTHER_SOURCEFILES = +# Additional files to be removed by `make clean' +OTHER_GARBAGE = + +# Targets to build before installation +OTHER_INSTALL_DEPENDS = + +# More obscure flags you might want to set for pswrap, yacc, lex, etc. +PSWFLAGS = +YFLAGS = +LFLAGS = + +## Delete this line if you want fast and loose cleans that will not remove +## things like precomps and user-defined OTHER_GARBAGE in subprojects. +CLEAN_ALL_SUBPROJECTS = YES + +## Add more obscure source files here to cause them to be automatically +## processed by the appropriate tool. Note that these files should also be +## added to "Supporting Files" in ProjectBuilder. The desired .o files that +## result from these files should also be added to OTHER_OFILES above so they +## will be linked in. + +# .msg files that should have msgwrap run on them +MSGFILES = +# .defs files that should have mig run on them +DEFSFILES = +# .mig files (no .defs files) that should have mig run on them +MIGFILES = +# .x files that should have rpcgen run on them +RPCFILES = + +## Add additional Help directories here (add them to the project as "Other +## Resources" in Project Builder) so that they will be compressed into .store +## files and copied into the app wrapper. If the help directories themselves +## need to also be in the app wrapper, then a cp command will need to be added +## in an after_install target. +OTHER_HELP_DIRS = + +# After you have saved your project using the 4.0 PB, you will automatically +# start using the makefiles in /NextDeveloper/Makefiles/project. If you should +# need to revert back to the old 3.3 Makefile behavior, override MAKEFILEDIR to +# be /NextDeveloper/Makefiles/app. + +# Don't add more rules here unless you want the first one to be the default +# target for make! Put all your targets in Makefile.postamble. + diff --git a/PCLib/PB.project b/PCLib/PB.project new file mode 100755 index 0000000..5019866 --- /dev/null +++ b/PCLib/PB.project @@ -0,0 +1,69 @@ +{ + CURRENTLY_ACTIVE_VERSION = YES; + DEPLOY_WITH_VERSION_NAME = A; + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + CLASSES = ( + PCBundleLoader.m, + PCDataSource.m, + PCProjectManager.m, + PCServer.m, + PCProject.m, + PCFileManager.m, + PCBrowserController.m, + PCProjectBuilder.m + ); + FRAMEWORKS = (AppKit.framework, Foundation.framework); + H_FILES = ( + PCBundleLoader.h, + PCDataSource.h, + PCProjectManager.h, + PCServer.h, + PCProject.h, + PCFileManager.h, + PCBrowserController.h, + PreferenceController.h, + ProjectCenter.h, + ProjectDebugger.h, + ProjectEditor.h, + ProjectType.h, + Server.h, + ProjectBuilder.h, + FileCreator.h, + PCProjectBuilder.h + ); + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, m.template, h.template); + PUBLIC_HEADERS = ( + PCBundleLoader.h, + PCProjectManager.h, + PCServer.h, + ProjectCenter.h, + ProjectDebugger.h, + ProjectEditor.h, + Server.h, + ProjectType.h, + PreferenceController.h, + PCDataSource.h, + PCProject.h, + ProjectBuilder.h, + FileCreator.h, + PCFileManager.h, + PCBrowserController.h + ); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = {}; + MAKEFILEDIR = "$(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_INSTALLDIR = /usr/local/lib; + NEXTSTEP_PUBLICHEADERSDIR = "/LocalDeveloper/Headers/$(NAME)"; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/NextDeveloper/bin/make; + PDO_UNIX_INSTALLDIR = /usr/local/lib; + PDO_UNIX_PUBLICHEADERSDIR = "/LocalDeveloper/Headers/$(NAME)"; + PROJECTNAME = PCLib; + PROJECTTYPE = Library; + PROJECTVERSION = 2.6; + WINDOWS_BUILDTOOL = $NEXT_ROOT/NextDeveloper/Executables/make; + WINDOWS_INSTALLDIR = "$(HOMEDRIVE)/LocalDeveloper/Libraries"; + WINDOWS_PUBLICHEADERSDIR = "$(HOMEDRIVE)/LocalDeveloper/Headers/$(NAME)"; +} diff --git a/PCLib/PCBrowserController.h b/PCLib/PCBrowserController.h new file mode 100644 index 0000000..39a130e --- /dev/null +++ b/PCLib/PCBrowserController.h @@ -0,0 +1,58 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@class PCProject; + +@interface PCBrowserController : NSObject +{ + id browser; + PCProject *project; +} + +- (void)dealloc; + +- (void)click:(id)sender; +- (void)doubleClick:(id)sender; + +- (void)projectDictDidChange:(NSNotification *)aNotif; + +- (NSString *)nameOfSelectedFile; +- (NSString *)pathOfSelectedFile; + +- (void)setBrowser:(NSBrowser *)aBrowser; +- (void)setProject:(PCProject *)aProj; + +@end + +@interface PCBrowserController (ProjectBrowserDelegate) + +- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix; +- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(int)row column:(int)column; +- (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(int)column; + +@end diff --git a/PCLib/PCBrowserController.m b/PCLib/PCBrowserController.m new file mode 100644 index 0000000..6bbc578 --- /dev/null +++ b/PCLib/PCBrowserController.m @@ -0,0 +1,190 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCBrowserController.h" +#import "PCProject.h" + +@implementation PCBrowserController + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [super dealloc]; +} + +- (void)click:(id)sender +{ + NSTextView *pTextView; + + if ([[sender selectedCell] isLeaf]) { + NSString *ctitle = [[sender selectedCellInColumn:0] stringValue]; + NSString *text = [NSString stringWithFormat:@"Display File %@",[[sender selectedCell] stringValue] +]; + pTextView = [project textView]; + + if ([ctitle isEqualToString:@"Classes"]) { + [pTextView setString:text]; + } + + } +} + +- (void)doubleClick:(id)sender +{ +#warning No subproject support here yet! + /* + if ([sender selectedColumn] == 0) { + // Ask the project about the valid file types + //NSArray *types = [project typesForKeyPath:[sender pathToColumn:0]]; + NSOpenPanel *openPanel; + int retval; + NSArray *types; + + openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + + if ((retval = [openPanel runModalForDirectory:[[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenDirectory"] file:nil types:types])) { + NSString *key = [project projectKeyForKeyPath:[sender path]]; + + [project addFile:[[openPanel filenames] objectAtIndex:0] forKey:key]; + + [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + } + } + else { + } + */ +} + +- (void)projectDictDidChange:(NSNotification *)aNotif +{ + [browser loadColumnZero]; +} + +- (NSString *)nameOfSelectedFile +{ + NSString *name = nil; + + // Doesn't work with subprojects! + if ([browser selectedColumn] != 0) { + name = [[[browser path] componentsSeparatedByString:@"/"] lastObject]; + } + + return name; +} + +- (NSString *)pathOfSelectedFile +{ + NSString *path = nil; + + // Doesn't work with subprojects! + if ([browser selectedColumn] != 0) { + path = [browser path]; + } + + return path; +} + +- (void)setBrowser:(NSBrowser *)aBrowser +{ + [browser autorelease]; + browser = [aBrowser retain]; + + [browser setTitled:NO]; + + [browser setTarget:self]; + [browser setAction:@selector(click:)]; + [browser setDoubleAction:@selector(doubleClick:)]; + + [browser setMaxVisibleColumns:3]; + [browser setAllowsMultipleSelection:NO]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(projectDictDidChange:) name:@"ProjectDictDidChangeNotification" object:project]; +} + +- (void)setProject:(PCProject *)aProj +{ + [project autorelease]; + project = [aProj retain]; +} + +@end + +@implementation PCBrowserController (ProjectBrowserDelegate) + +- (void)browser:(NSBrowser *)sender createRowsForColumn:(int)column inMatrix:(NSMatrix *)matrix +{ + NSString *pathToCol = [sender pathToColumn:column]; + NSArray *files = [project contentAtKeyPath:pathToCol]; + int i; + int count = [files count]; + + if (count == 0) { + NSLog(@"<%@ %x>: create rows for column aborted - 0 files!",[self class],self); + return; + } + +#ifdef DEBUG + NSLog(@"<%@ %x>: create rows for column %d in %x",[self class],self,column,sender); +#endif DEBUG + + for (i = 0; i < count; ++i) { + NSMutableString *keyPath = [NSMutableString stringWithString:pathToCol]; + id cell; + + [matrix insertRow:i]; + + cell = [matrix cellAtRow:i column:0]; + [cell setStringValue:[files objectAtIndex:i]]; + + [keyPath appendString:@"/"]; + [keyPath appendString:[files objectAtIndex:i]]; + + [cell setLeaf:![project hasChildrenAtKeyPath:keyPath]]; + } +} + +- (void)browser:(NSBrowser *)sender willDisplayCell:(id)cell atRow:(int)row column:(int)column +{ +#ifdef DEBUG + NSLog(@"<%@ %x>: browser %x will display %@ %x at %d,%d",[self class],self,sender,[cell class],cell,row,column); +#endif DEBUG +} + +- (BOOL)browser:(NSBrowser *)sender selectCellWithString:(NSString *)title inColumn:(int)column +{ + return YES; +} + +@end + + + + + diff --git a/PCLib/PCBundleLoader.h b/PCLib/PCBundleLoader.h new file mode 100644 index 0000000..d56dfcc --- /dev/null +++ b/PCLib/PCBundleLoader.h @@ -0,0 +1,80 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Descriotion: + + PCBundleLoader loads all PC bundles from all the paths that are stored in the + defaults under the key BundlePaths. + + */ +#import + +#import "PreferenceController.h" +#import "ProjectEditor.h" +#import "ProjectDebugger.h" + +@interface PCBundleLoader : NSObject +{ + id delegate; // The PCAppController! + + NSMutableArray *loadedBundles; +} + +//---------------------------------------------------------------------------- +// Init and free methods +//---------------------------------------------------------------------------- + +- (id)init; +- (void)dealloc; + +- (id)delegate; +- (void)setDelegate:(id)aDelegate; + +- (void)loadBundles; +// Load all bundles found in the BundlePaths + +- (NSArray *)loadedBundles; + // Returns all loaded ProjectCenter bundles. + +//---------------------------------------------------------------------------- +// BundleLoader +//---------------------------------------------------------------------------- + +- (BOOL)registerProjectSubmenu:(NSMenu *)menu; +- (BOOL)registerFileSubmenu:(NSMenu *)menu; +- (BOOL)registerToolsSubmenu:(NSMenu *)menu; +- (BOOL)registerPrefController:(id)prefs; +- (BOOL)registerEditor:(id)anEditor; +- (BOOL)registerDebugger:(id)aDebugger; + +@end + +@interface NSObject (BundleLoaderDelegates) + +- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle; + +@end diff --git a/PCLib/PCBundleLoader.m b/PCLib/PCBundleLoader.m new file mode 100644 index 0000000..3907cf0 --- /dev/null +++ b/PCLib/PCBundleLoader.m @@ -0,0 +1,128 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCBundleLoader.h" +#import "ProjectCenter.h" + +@interface PCBundleLoader (PrivateLoader) + +- (void)loadAdditionalBundlesAt:(NSString *)path; + +@end + +@implementation PCBundleLoader (PrivateLoader) + +- (void)loadAdditionalBundlesAt:(NSString *)path +{ + NSBundle *bundle; + + NSAssert(path,@"No valid bundle path specified!"); + +#ifdef DEBUG + NSLog([NSString stringWithFormat:@"Loading bundle %@...",path]); +#endif DEBUG + + if ((bundle = [NSBundle bundleWithPath:path])) { + [loadedBundles addObject:bundle]; + +#ifdef DEBUG + NSLog([NSString stringWithFormat:@"Bundle %@ successfully loaded!",path]); +#endif DEBUG + + if (delegate && [delegate respondsToSelector:@selector(bundleLoader: didLoadBundle:)]) { + [delegate bundleLoader:self didLoadBundle:bundle]; + } + } + else { + NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); + } +} + +@end + +@implementation PCBundleLoader + +//---------------------------------------------------------------------------- +// Init and free methods +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) { + loadedBundles = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)dealloc +{ + [loadedBundles release]; + + [super dealloc]; +} + +- (id)delegate +{ + return delegate; +} + +- (void)setDelegate:(id)aDelegate +{ + delegate = aDelegate; +} + +- (void)loadBundles +{ + NSEnumerator *enumerator; + NSString *bundleName; + NSArray *dir; + NSString *path = [[NSUserDefaults standardUserDefaults] objectForKey:BundlePaths]; + + if (!path || path == @"" || ![[NSFileManager defaultManager] fileExistsAtPath:path]) { + [NSException raise:@"PCBundleLoaderPathException" format:@"No valid bundle path specified!"]; + return; + } + else { + NSLog([NSString stringWithFormat:@"Loading bundles at %@",path]); + } + + dir = [[NSFileManager defaultManager] directoryContentsAtPath:path]; + enumerator = [dir objectEnumerator]; + while (bundleName = [enumerator nextObject]) { + if ([[bundleName pathExtension] isEqualToString:@"bundle"]) { + NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,bundleName]; + + [self loadAdditionalBundlesAt:fullPath]; + } + } +} + +- (NSArray *)loadedBundles +{ + return loadedBundles; +} + +@end diff --git a/PCLib/PCDataSource.h b/PCLib/PCDataSource.h new file mode 100644 index 0000000..7f9d0e1 --- /dev/null +++ b/PCLib/PCDataSource.h @@ -0,0 +1,58 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +/* + Description: + + PCDataSource is used as a data source for a NSTableView. + +*/ + +@interface PCDataSource : NSObject +{ + NSMutableArray *data; +} + +- (id)init; +- (void)dealloc; + +- (void)insertObject:(id)object; + +- (void)removeObject:(id)object; +- (void)removeObjectAtIndex:(unsigned int)index; +- (void)removeAllObjects; + +- (NSArray *)allObjects; + +- (int)numberOfRowsInTableView:(NSTableView *)aTableView; + +- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; + +- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; + +@end diff --git a/PCLib/PCDataSource.m b/PCLib/PCDataSource.m new file mode 100644 index 0000000..37c9fa1 --- /dev/null +++ b/PCLib/PCDataSource.m @@ -0,0 +1,107 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCDataSource.h" + +@implementation PCDataSource + +- (id)init +{ + if (self = [super init]) { + data = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)dealloc +{ + [data release]; + [super dealloc]; +} + +//=========================================================================================== +//==== Data handling +//=========================================================================================== + +- (void)insertObject:(id)object +{ + if([data indexOfObject:object] == NSNotFound) { + [data addObject:object]; + } +} + +- (void)removeObject:(id)object +{ + int index = [data indexOfObject:object]; + + if(index != NSNotFound) { + [data removeObjectAtIndex:index]; + } +} + +- (void)removeObjectAtIndex:(unsigned int)index +{ + if(index < [data count]) { + [data removeObjectAtIndex:index]; + } +} + +- (void)removeAllObjects +{ + [data removeAllObjects]; +} + +- (NSArray *)allObjects +{ + return data; +} + +- (int)numberOfRowsInTableView:(NSTableView *)aTableView +{ + return [data count]; +} + +- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex +{ + id record; + + NSParameterAssert(rowIndex >= 0 && rowIndex < [data count]); + + record = [data objectAtIndex:rowIndex]; + return [record objectForKey:[aTableColumn identifier]]; +} + +- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex +{ + id record; + + NSParameterAssert(rowIndex >= 0 && rowIndex < [data count]); + + record = [data objectAtIndex:rowIndex]; + [record setObject:anObject forKey:[aTableColumn identifier]]; +} + +@end diff --git a/PCLib/PCFileManager.h b/PCLib/PCFileManager.h new file mode 100644 index 0000000..08f61b0 --- /dev/null +++ b/PCLib/PCFileManager.h @@ -0,0 +1,90 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@interface PCFileManager : NSObject +{ + id newFileWindow; + id fileTypePopup; + id newFileName; + + id delegate; + + id fileTypeAccessaryView; + id addFileTypePopup; + + NSMutableDictionary *creators; + + BOOL _needsAdditionalReleasing; +} + +//=========================================================================================== +// ==== Init and free +//=========================================================================================== + +- (id)init; +- (void)dealloc; + +- (void)awakeFromNib; + +// =========================================================================== +// ==== Delegate +// =========================================================================== + +- (id)delegate; +- (void)setDelegate:(id)aDelegate; + +// =========================================================================== +// ==== File stuff +// =========================================================================== + +- (void)fileTypePopupChanged:(id)sender; +- (void)showAddFileWindow; + +- (void)showNewFileWindow; +- (void)buttonsPressed:(id)sender; + +- (void)createFile; + +- (void)registerCreatorsWithObjectsAndKeys:(NSDictionary *)dict; + +@end + +@interface NSObject (FileManagerDelegates) + +- (NSString *)fileManager:(id)sender willCreateFile:(NSString *)aFile withKey:(NSString *)key; + // Returns the correct, full path - or nil! + +- (void)fileManager:(id)sender didCreateFile:(NSString *)aFile withKey:(NSString *)key; + +- (id)fileManagerWillAddFiles:(id)sender; + // Is invoked to get the currently active project! + +- (BOOL)fileManager:(id)sender shouldAddFile:(NSString *)file forKey:(NSString *)key; +- (void)fileManager:(id)sender didAddFile:(NSString *)file forKey:(NSString *)key; + +@end diff --git a/PCLib/PCFileManager.m b/PCLib/PCFileManager.m new file mode 100644 index 0000000..7a9df44 --- /dev/null +++ b/PCLib/PCFileManager.m @@ -0,0 +1,369 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCFileManager.h" +#import "ProjectCenter.h" + +#if defined(GNUSTEP) +#import +#endif + +@interface PCFileManager (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCFileManager (CreateUI) + +- (void)_initUI +{ + NSView *_c_view; + unsigned int style = NSTitledWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSResizableWindowMask; + NSBox *box; + NSRect _w_frame; + NSMatrix* matrix; + id button; + NSButtonCell* buttonCell = [[[NSButtonCell alloc] init] autorelease]; + id textField; + + /* + * the file creation window + * + */ + + _w_frame = NSMakeRect(100,100,264,160); + newFileWindow = [[NSWindow alloc] initWithContentRect:_w_frame + styleMask:style + backing:NSBackingStoreBuffered + defer:NO]; + [newFileWindow setMinSize:NSMakeSize(264,160)]; + [newFileWindow setTitle:@"New File..."]; + + box = [[[NSBox alloc] init] autorelease]; + [box setFrame:NSMakeRect(16,96,224,56)]; + fileTypePopup = [[[NSPopUpButton alloc] initWithFrame:NSMakeRect(32,2,160,20) + pullsDown:NO] autorelease]; + [fileTypePopup addItemWithTitle:@"No type available!"]; + [fileTypePopup setAutoresizingMask: (NSViewWidthSizable)]; + [box setTitle:@"Type"]; + [box setTitlePosition:NSAtTop]; + [box setBorderType:NSGrooveBorder]; + [box addSubview:fileTypePopup]; + [box setAutoresizingMask: (NSViewWidthSizable | NSViewMinYMargin)]; + + _c_view = [newFileWindow contentView]; + [_c_view addSubview:box]; + + /* + * Button matrix + */ + + _w_frame = NSMakeRect(136,8,116,24); + matrix = [[[NSMatrix alloc] initWithFrame: _w_frame + mode: NSHighlightModeMatrix + prototype: buttonCell + numberOfRows: 1 + numberOfColumns: 2] autorelease]; + [matrix setSelectionByRect:YES]; + [matrix setAutoresizingMask: (NSViewMinXMargin | NSViewMaxYMargin)]; + [matrix setTarget:self]; + [matrix setAction:@selector(buttonsPressed:)]; + [matrix setIntercellSpacing: NSMakeSize(2,2)]; + [_c_view addSubview:matrix]; + + button = [matrix cellAtRow:0 column:0]; + [button setTag:0]; + [button setStringValue:@"Cancel"]; + [button setBordered:YES]; + [button setButtonType:NSMomentaryPushButton]; + + button = [matrix cellAtRow:0 column:1]; + [button setTag:1]; + [button setStringValue:@"OK"]; + [button setBordered:YES]; + [button setButtonType:NSMomentaryPushButton]; + + /* + * The name of the new file... + */ + + // Status message + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(16,56,48,21)]; + [textField setAlignment: NSLeftTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Name:"]; + [textField setAutoresizingMask: (NSViewMaxXMargin | + NSViewWidthSizable | + NSViewMinYMargin)]; + [_c_view addSubview:[textField autorelease]]; + + // Target + newFileName = [[NSTextField alloc] initWithFrame:NSMakeRect(64,56,176,21)]; + [newFileName setAlignment: NSLeftTextAlignment]; + [newFileName setBordered: YES]; + [newFileName setBezeled: YES]; + [newFileName setEditable: YES]; + [newFileName setDrawsBackground: YES]; + [newFileName setStringValue:@""]; + [newFileName setAutoresizingMask: (NSViewWidthSizable | NSViewMinYMargin)]; + [_c_view addSubview:[newFileName autorelease]]; + + /* + * the accessory view needed for adding files + * + */ + + fileTypeAccessaryView = [[NSBox alloc] init]; + addFileTypePopup = [[[NSPopUpButton alloc] initWithFrame:NSMakeRect(20,30,160,20) pullsDown:NO] autorelease]; + [addFileTypePopup addItemWithTitle:@"No type available!"]; + + [fileTypeAccessaryView setTitle:@"Add to category"]; + [fileTypeAccessaryView setTitlePosition:NSAtTop]; + [fileTypeAccessaryView setBorderType:NSGrooveBorder]; + [fileTypeAccessaryView addSubview:addFileTypePopup]; + [fileTypeAccessaryView sizeToFit]; + [fileTypeAccessaryView setAutoresizingMask: NSViewWidthSizable]; + + [fileTypePopup setTarget:self]; + [fileTypePopup setAction:@selector(fileTypePopupChanged:)]; + + _needsAdditionalReleasing = YES; +} + +@end + +@implementation PCFileManager + +//=========================================================================================== +// ==== Init and free +//=========================================================================================== + +- (id)init +{ + if ((self = [super init])) { + creators = [[NSMutableDictionary alloc] init]; + +#if defined(GNUSTEP) + [self _initUI]; +#else + if(![NSBundle loadNibNamed:@"FileCreation.nib" owner:self]) { + [[NSException exceptionWithName:NIB_NOT_FOUND_EXCEPTION reason:@"Could not load FileCreation.gmodel" userInfo:nil] raise]; + return nil; + } +#endif + } + return self; +} + +- (void)dealloc +{ + [creators release]; + + if (_needsAdditionalReleasing) { + [fileTypeAccessaryView release]; + [newFileWindow release]; + } + + [super dealloc]; +} + +- (void)awakeFromNib +{ + [fileTypePopup removeAllItems]; +} + +// =========================================================================== +// ==== Delegate +// =========================================================================== + +- (id)delegate +{ + return delegate; +} + +- (void)setDelegate:(id)aDelegate +{ + delegate = aDelegate; +} + +// =========================================================================== +// ==== File stuff +// =========================================================================== + +- (void)fileTypePopupChanged:(id)sender +{ +} + +- (void)showAddFileWindow +{ + NSOpenPanel *openPanel; + int retval; + NSMutableArray *validTypes = nil; + NSDictionary *categories = nil; + PCProject *project = nil; + + if (delegate && [delegate respondsToSelector:@selector(fileManagerWillAddFiles:)]) { + if (!(project = [delegate fileManagerWillAddFiles:self])) { + NSLog(@"No project to add files available..."); + } + } + + // Ask the active project for the valid file types first! + categories = [project rootCategories]; + validTypes = [NSMutableArray arrayWithArray:[categories allKeys]]; + [validTypes removeObject:@"Subprojects"]; + + [addFileTypePopup removeAllItems]; + [addFileTypePopup addItemsWithTitles:validTypes]; + + openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:YES]; + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + + [openPanel setTitle:@"Add File(s)..."]; + [openPanel setAccessoryView:fileTypeAccessaryView]; + + retval = [openPanel runModalForDirectory:[[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenDirectory"] file:nil types:nil]; + + if (retval == NSOKButton) { + NSString *key = [categories objectForKey:[addFileTypePopup titleOfSelectedItem]]; + NSEnumerator *enumerator; + NSString *file; + + [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + + enumerator = [[openPanel filenames] objectEnumerator]; + while (file = [enumerator nextObject]) { + if ([delegate fileManager:self shouldAddFile:file forKey:key]) { + NSString *fileName = [file lastPathComponent]; + NSString *pth = [[project projectPath] stringByAppendingPathComponent:fileName]; + + if (![key isEqualToString:PCLibraries]) { + if ([[NSFileManager defaultManager] copyPath:file toPath:pth handler:nil]) { + [delegate fileManager:self didAddFile:pth forKey:key]; + } + } + else { + [delegate fileManager:self didAddFile:pth forKey:key]; + } + } + } + } +} + +- (void)showNewFileWindow +{ + [newFileWindow center]; + [newFileWindow makeKeyAndOrderFront:self]; +} + +- (void)buttonsPressed:(id)sender +{ + switch ([[sender selectedCell] tag]) { + case 0: + break; + case 1: + [self createFile]; + break; + } + [newFileWindow orderOut:self]; + [newFileName setStringValue:@""]; +} + +- (void)createFile +{ + NSString *path = nil; + NSString *fileName = [newFileName stringValue]; + NSString *fileType = [fileTypePopup titleOfSelectedItem]; + NSString *key = [[creators objectForKey:fileType] objectForKey:@"ProjectKey"]; + + if (delegate) { + path = [delegate fileManager:self willCreateFile:fileName withKey:key]; + } + + NSLog(@"<%@ %x>: creating file at %@",[self class],self,path); + + // Create file + if (path) { + NSDictionary *newFiles; + id creator = [[creators objectForKey:fileType] objectForKey:@"Creator"]; + PCProject *p = [delegate activeProject]; + + if (!creator) { + NSRunAlertPanel(@"Attention!",@"Could not create %@. The appropriate creator is missing!",@"OK",nil,nil,fileName); + return; + } + + // Do it finally... + newFiles = [creator createFileOfType:fileType path:path project:p]; + if (delegate && [delegate respondsToSelector:@selector(fileManager:didCreateFile:withKey:)]) { + NSEnumerator *enumerator; + NSString *aFile; + + enumerator = [[newFiles allKeys] objectEnumerator]; // Key: name of the file + while (aFile = [enumerator nextObject]) { + NSString *theType = [newFiles objectForKey:aFile]; + NSString *theKey = [[creators objectForKey:theType] objectForKey:@"ProjectKey"]; + + [delegate fileManager:self didCreateFile:aFile withKey:theKey]; + } + } + } +} + +- (void)registerCreatorsWithObjectsAndKeys:(NSDictionary *)dict +{ + NSEnumerator *enumerator = [dict keyEnumerator]; + id type; + + NSLog(@"<%@ %x>: Registering creators...",[self class],self); + + while (type = [enumerator nextObject]) { + id creator = [[dict objectForKey:type] objectForKey:@"Creator"]; + + if (![creator conformsToProtocol:@protocol(FileCreator)]) { + [NSException raise:@"FileManagerGenericException" format:@"The target does not conform to the FileCreator protocol!"]; + return; + } + + if ([creators objectForKey:type]) { + [NSException raise:@"FileManagerGenericException" format:@"There is alreay a creator registered for this type!"]; + return; + } + + // Register the creator! + [creators setObject:[dict objectForKey:type] forKey:type]; + [fileTypePopup addItemWithTitle:type]; + } +} + +@end diff --git a/PCLib/PCProject.h b/PCLib/PCProject.h new file mode 100644 index 0000000..b13eb6c --- /dev/null +++ b/PCLib/PCProject.h @@ -0,0 +1,230 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +#import "ProjectBuilder.h" + +#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; + +typedef enum { + defaultTarget = 0, + debug, + profile, + install +} btarget; + +//=========================================================================================== +// ==== Project keys +//=========================================================================================== + +static NSString * const PCClasses = @"CLASS_FILES"; +static NSString * const PCHeaders = @"HEADER_FILES"; +static NSString * const PCOtherSources = @"OTHER_SOURCES"; +static NSString * const PCOtherResources = @"OTHER_RESOURCES"; +static NSString * const PCSupportingFiles = @"SUPPORTING_FILES"; +static NSString * const PCDocuFiles = @"DOCU_FILES"; +static NSString * const PCSubprojects = @"SUBPROJECTS"; +static NSString * const PCGModels = @"INTERFACES"; +static NSString * const PCImages = @"IMAGES"; +static NSString * const PCLibraries = @"LIBRARIES"; +static NSString * const PCCompilerOptions = @"COMPILEROPTIONS"; +static NSString * const PCProjectName = @"PROJECT_NAME"; +static NSString * const PCProjType = @"PROJECT_TYPE"; +static NSString * const PCPrincipalClass = @"PRINCIPAL_CLASS"; +static NSString * const PCAppIcon = @"APPLICATIONICON"; +static NSString * const PCToolIcon = @"TOOLICON"; +static NSString * const PCProjectBuilderClass = @"PROJECT_BUILDER"; +static NSString * const PCMainGModelFile = @"MAININTERFACE"; +static NSString * const PCPackageName = @"PACKAGE_NAME"; +static NSString * const PCLibraryVar = @"LIBRARY_VAR"; + +@interface PCProject : NSObject +{ + id projectWindow; + id delegate; + id projectBuilder; + id browserController; + + id textView; + + id projectAttributeInspectorView; + id projectProjectInspectorView; + id projectFileInspectorView; + + id buildTargetPanel; + id buildTargetPopup; + + id buildStatusField; + id targetField; + + NSString *projectName; + NSString *projectPath; + NSMutableDictionary *projectDict; + + NSDictionary *rootCategories; // Needs to be initialised by subclasses! + + @private + BOOL _needsReleasing; + btarget _buildTarget; +} + +//=========================================================================================== +// ==== Init and free +//=========================================================================================== + +- (id)init; +- (id)initWithProjectDictionary:(NSDictionary *)dict path:(NSString *)path; + +- (void)dealloc; + +//=========================================================================================== +// ==== Accessor methods +//=========================================================================================== + +- (id)browserController; + +- (void)setProjectName:(NSString *)aName; +- (NSString *)projectName; +- (NSWindow *)projectWindow; + +- (Class)principalClass; + +//=========================================================================================== +// ==== Delegate and manager +//=========================================================================================== + +- (id)delegate; +- (void)setDelegate:(id)aDelegate; + +- (void)setProjectBuilder:(id)aBuilder; +- (id)projectBuilder; + +//=========================================================================================== +// ==== To be overriden! +//=========================================================================================== + +- (BOOL)writeMakefile; + // Writes the PC.project file to disc. Subclasses need to call this before doing sth else! + +- (BOOL)isValidDictionary:(NSDictionary *)aDict; + +- (NSArray *)sourceFileKeys; +- (NSArray *)resourceFileKeys; +- (NSArray *)otherKeys; +- (NSArray *)buildTargets; + +- (NSString *)projectDescription; + // Returns a string describing the project type + +- (id)textView; + +//=========================================================================================== +// ==== Miscellaneous +//=========================================================================================== + +- (BOOL)doesAcceptFile:(NSString *)file forKey:(NSString *)key; + // Returns YES if type is a valid key and file is not contained in the project already + +- (void)addFile:(NSString *)file forKey:(NSString *)key; +- (void)removeFile:(NSString *)file forKey:(NSString *)key; +- (BOOL)removeSelectedFilePermanently:(BOOL)yn; + +- (BOOL)assignProjectDict:(NSDictionary *)aDict; +- (NSDictionary *)projectDict; + +- (void)setProjectPath:(NSString *)aPath; +- (NSString *)projectPath; + +- (NSDictionary *)rootCategories; + +- (BOOL)save; +- (BOOL)saveAt:(NSString *)projPath; + +- (BOOL)saveFileNamed:(NSString *)file; +- (BOOL)saveAllFiles; +- (BOOL)saveAllFilesIfNeeded; + // Saves all the files that need to be saved. + +- (NSArray *)subprojects; +- (void)addSubproject:(PCProject *)aSubproject; +- (PCProject *)superProject; +- (PCProject *)rootProject; +- (void)newSubprojectNamed:(NSString *)aName; +- (void)removeSubproject:(PCProject *)aSubproject; + +- (BOOL)isSubProject; + +@end + +@interface PCProject (ProjectBuilding) + +- (void)showInspector:(id)sender; +- (id)updatedAttributeView; +- (id)updatedProjectView; +- (id)updatedFilesView; + +- (void)showBuildTargetPanel:(id)sender; +- (void)setTarget:(id)sender; +- (void)setHost:(id)sender; +- (void)setArguments:(id)sender; + +- (void)build:(id)sender; +- (void)clean:(id)sender; + +@end + +@interface PCProject (ProjectKeyPaths) + +- (NSArray *)contentAtKeyPath:(NSString *)keyPath; +- (BOOL)hasChildrenAtKeyPath:(NSString *)keyPath; +- (NSString *)projectKeyForKeyPath:(NSString *)kp; + +@end + +@interface PCProject (ProjectWindowDelegate) + +- (void)windowDidBecomeKey:(NSNotification *)aNotification; +- (void)windowDidBecomeMain:(NSNotification *)aNotification; +- (void)windowWillClose:(NSNotification *)aNotification; + +@end diff --git a/PCLib/PCProject.m b/PCLib/PCProject.m new file mode 100644 index 0000000..15d5e9e --- /dev/null +++ b/PCLib/PCProject.m @@ -0,0 +1,800 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCProject.h" +#import "ProjectCenter.h" +#import "PCProjectBuilder.h" + +#if defined(GNUSTEP) +#import +#endif + +@interface PCProject (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCProject (CreateUI) + +- (void)_initUI +{ + NSView *_c_view; + unsigned int style = NSTitledWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSResizableWindowMask; + NSBrowser *browser; + NSSplitView *split; + NSScrollView * scrollView; + NSRect _w_frame; + NSMatrix* matrix; + NSButtonCell* buttonCell = [[[NSButtonCell alloc] init] autorelease]; + id textField; + id button; + + browserController = [[PCBrowserController alloc] init]; + + /* + * Project Window + * + */ + + _w_frame = NSMakeRect(100,100,512,320); + projectWindow = [[NSWindow alloc] initWithContentRect:_w_frame + styleMask:style + backing:NSBackingStoreBuffered + defer:NO]; + [projectWindow setDelegate:self]; + [projectWindow setMinSize:NSMakeSize(512,320)]; + + browser = [[[NSBrowser alloc] initWithFrame:NSMakeRect(30,30,280,400)] autorelease]; + [browser setDelegate:browserController]; + [browser setMaxVisibleColumns:3]; + [browser setAllowsMultipleSelection:NO]; + + [browserController setBrowser:browser]; + [browserController setProject:self]; + + textView = [[NSTextView alloc] initWithFrame:NSMakeRect(0,0,472,88)]; + [textView setMaxSize:NSMakeSize(1e7, 1e7)]; + [textView setVerticallyResizable:YES]; + [textView setHorizontallyResizable:YES]; + [textView setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; + [textView setBackgroundColor:[NSColor whiteColor]]; + [[textView textContainer] setWidthTracksTextView:YES]; + + scrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect (0,0,496,92)]; + [scrollView setDocumentView:textView]; + [textView setMinSize:NSMakeSize(0.0,[scrollView contentSize].height)]; + [[textView textContainer] setContainerSize:NSMakeSize([scrollView contentSize].width,1e7)]; + [scrollView setHasHorizontalScroller: YES]; + [scrollView setHasVerticalScroller: YES]; + [scrollView setBorderType: NSBezelBorder]; + [scrollView setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; + [scrollView autorelease]; + + split = [[[NSSplitView alloc] initWithFrame:NSMakeRect(8,0,496,264)] autorelease]; + [split setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; + [split addSubview: browser]; + [split addSubview: scrollView]; + + _c_view = [projectWindow contentView]; + [_c_view addSubview:split]; + + // Left button matrix + _w_frame = NSMakeRect(8,268,144,48); + matrix = [[[NSMatrix alloc] initWithFrame: _w_frame + mode: NSHighlightModeMatrix + prototype: buttonCell + numberOfRows: 1 + numberOfColumns: 3] autorelease]; + [matrix setSelectionByRect:YES]; + [matrix setAutoresizingMask: (NSViewMaxXMargin | NSViewMinYMargin)]; + [_c_view addSubview:matrix]; + + button = [matrix cellAtRow:0 column:0]; + [button setImagePosition:NSImageOnly]; + [button setImage:[[[NSImage alloc] initWithContentsOfFile:@"ProjectCentre_build.tiff"] autorelease]]; + [button setButtonType:NSMomentaryPushButton]; + [button setTarget:self]; + [button setAction:@selector(build:)]; + + button = [matrix cellAtRow:0 column:1]; + [button setImagePosition:NSImageOnly]; + [button setImage:[[[NSImage alloc] initWithContentsOfFile:@"ProjectCentre_clean.tiff"] autorelease]]; + [button setButtonType:NSMomentaryPushButton]; + [button setTarget:self]; + [button setAction:@selector(clean:)]; + + button = [matrix cellAtRow:0 column:2]; + [button setImagePosition:NSImageOnly]; + [button setImage:[[[NSImage alloc] initWithContentsOfFile:@"ProjectCentre_prefs.tiff"] autorelease]]; + [button setTarget:self]; + [button setAction:@selector(showBuildTarget:)]; + [button setButtonType:NSMomentaryPushButton]; + [button setTarget:self]; + [button setAction:@selector(showBuildTargetPanel:)]; + + // Right button matrix + _w_frame = NSMakeRect(304,268,192,48); + matrix = [[[NSMatrix alloc] initWithFrame: _w_frame + mode: NSHighlightModeMatrix + prototype: buttonCell + numberOfRows: 1 + numberOfColumns: 4] autorelease]; + [matrix setSelectionByRect:YES]; + [matrix setAutoresizingMask: (NSViewMinXMargin | NSViewMinYMargin)]; + [_c_view addSubview:matrix]; + + button = [matrix cellAtRow:0 column:0]; + [button setImagePosition:NSImageOnly]; + [button setImage:[[[NSImage alloc] initWithContentsOfFile:@"ProjectCentre_run.tiff"] autorelease]]; + [button setButtonType:NSMomentaryPushButton]; + + button = [matrix cellAtRow:0 column:1]; + [button setImagePosition:NSImageOnly]; + [button setImage:[[[NSImage alloc] initWithContentsOfFile:@"ProjectCentre_uml.tiff"] autorelease]]; + [button setButtonType:NSMomentaryPushButton]; + + button = [matrix cellAtRow:0 column:2]; + [button setImagePosition:NSImageOnly]; + [button setImage:[[[NSImage alloc] initWithContentsOfFile:@"ProjectCentre_documentation.tiff"] autorelease]]; + [button setButtonType:NSMomentaryPushButton]; + + button = [matrix cellAtRow:0 column:3]; + [button setImagePosition:NSImageOnly]; + [button setImage:[[[NSImage alloc] initWithContentsOfFile:@"ProjectCentre_find.tiff"] autorelease]]; + [button setButtonType:NSMomentaryPushButton]; + + // Status + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(152,296,48,15)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Status:"]; + [textField setAutoresizingMask: (NSViewMaxXMargin | + NSViewMinYMargin)]; + [_c_view addSubview:[textField autorelease]]; + + // Status message + buildStatusField = [[NSTextField alloc] initWithFrame:NSMakeRect(204,296,104,15)]; + [buildStatusField setAlignment: NSLeftTextAlignment]; + [buildStatusField setBordered: NO]; + [buildStatusField setEditable: NO]; + [buildStatusField setBezeled: NO]; + [buildStatusField setDrawsBackground: NO]; + [buildStatusField setStringValue:@"waiting..."]; + [buildStatusField setAutoresizingMask: (NSViewMaxXMargin | + NSViewWidthSizable | + NSViewMinYMargin)]; + [_c_view addSubview:[buildStatusField autorelease]]; + + // Target + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(152,272,48,15)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setBezeled: NO]; + [textField setEditable: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Target:"]; + [textField setAutoresizingMask: (NSViewMaxXMargin | + NSViewMinYMargin)]; + [_c_view addSubview:[textField autorelease]]; + + // Target message + targetField = [[NSTextField alloc] initWithFrame:NSMakeRect(204,272,104,15)]; + [targetField setAlignment: NSLeftTextAlignment]; + [targetField setBordered: NO]; + [targetField setEditable: NO]; + [targetField setBezeled: NO]; + [targetField setDrawsBackground: NO]; + [targetField setStringValue:@"Default..."]; + [targetField setAutoresizingMask: (NSViewMaxXMargin | + NSViewWidthSizable | + NSViewMinYMargin)]; + [_c_view addSubview:[targetField autorelease]]; + + /* + * Build Panel + * + */ + + _w_frame = NSMakeRect(100,100,272,104); + buildTargetPanel = [[NSWindow alloc] initWithContentRect:_w_frame styleMask:style backing:NSBackingStoreBuffered defer:NO]; + + [buildTargetPanel setReleasedWhenClosed:NO]; + [buildTargetPanel setTitle:@"Build Options"]; + _c_view = [buildTargetPanel contentView]; + + buildTargetPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(72,24,184,20)]; + [buildTargetPopup addItemWithTitle:@"Default"]; + [buildTargetPopup addItemWithTitle:@"Debug"]; + [buildTargetPopup addItemWithTitle:@"Profile"]; + [buildTargetPopup addItemWithTitle:@"Install"]; + [buildTargetPopup autorelease]; + + [buildTargetPopup setTarget:self]; + [buildTargetPopup setAction:@selector(setTarget:)]; + [_c_view addSubview:buildTargetPopup]; + + // Target (popup) + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(16,24,56,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Target:"]; + [_c_view addSubview:[textField autorelease]]; + + // Host + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(16,48,56,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Host:"]; + [_c_view addSubview:[textField autorelease]]; + + // Host message + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(72,48,184,21)]; + [textField setAlignment: NSLeftTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: YES]; + [textField setBezeled: YES]; + [textField setDrawsBackground: YES]; + [textField setStringValue:@"localhost"]; + [_c_view addSubview:[textField autorelease]]; + + // Args + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(12,68,60,21)]; + [textField setAlignment: NSRightTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: NO]; + [textField setBezeled: NO]; + [textField setDrawsBackground: NO]; + [textField setStringValue:@"Arguments:"]; + [_c_view addSubview:[textField autorelease]]; + + // Args message + textField = [[NSTextField alloc] initWithFrame:NSMakeRect(72,68,184,21)]; + [textField setAlignment: NSLeftTextAlignment]; + [textField setBordered: NO]; + [textField setEditable: YES]; + [textField setBezeled: YES]; + [textField setDrawsBackground: YES]; + [textField setStringValue:@""]; + [_c_view addSubview:[textField autorelease]]; + + // Redisplay! + [browser loadColumnZero]; + + _needsReleasing = YES; +} + +@end + +@implementation PCProject + +//=========================================================================================== +// ==== Init and free +//=========================================================================================== + +- (id)init +{ + if ((self = [super init])) { + _buildTarget = defaultTarget; + + _needsReleasing = NO; + +#if defined(GNUSTEP) + [self _initUI]; +#else + if(![NSBundle loadNibNamed:@"Project.nib" owner:self]) { + [[NSException exceptionWithName:NIB_NOT_FOUND_EXCEPTION reason:@"Could not load Project.gmodel" userInfo:nil] raise]; + return nil; + } +#endif + } + return self; +} + +- (id)initWithProjectDictionary:(NSDictionary *)dict path:(NSString *)path; +{ + NSAssert(dict,@"No valid project dictionary!"); + + if ((self = [self init])) { + if ([[path lastPathComponent] isEqualToString:@"PC.project"]) { + projectPath = [[path stringByDeletingLastPathComponent] copy]; + } + else { + projectPath = [path copy]; + } + + if(![self assignProjectDict:dict]) { + NSLog(@"<%@ %x>: could not load the project...",[self class],self); + [self autorelease]; + return nil; + } + } + return self; +} + +- (void)dealloc +{ + [projectName release]; + [projectPath release]; + [projectDict release]; + + if (_needsReleasing) { + [browserController release]; + [projectWindow release]; + [buildTargetPanel release]; + } + + [super dealloc]; +} + +//=========================================================================================== +// ==== Accessor methods +//=========================================================================================== + +- (id)browserController +{ + return browserController; +} + +- (void)setProjectName:(NSString *)aName +{ + [projectName autorelease]; + projectName = [aName copy]; +} + +- (NSString *)projectName +{ + return projectName; +} + +- (NSWindow *)projectWindow +{ + if (!projectWindow) NSLog(@"No window??????"); + + return projectWindow; +} + +- (Class)principalClass +{ + return [self class]; +} + +//=========================================================================================== +// ==== Delegate and manager +//=========================================================================================== + +- (id)delegate +{ + return delegate; +} + +- (void)setDelegate:(id)aDelegate +{ + delegate = aDelegate; +} + +- (void)setProjectBuilder:(id)aBuilder +{ + [projectBuilder autorelease]; + projectBuilder = [aBuilder retain]; +} + +- (id)projectBuilder +{ + return projectBuilder; +} + +//=========================================================================================== +// ==== To be overriden +//=========================================================================================== + +- (BOOL)writeMakefile +{ + return [projectDict writeToFile:[projectPath stringByAppendingPathComponent:@"PC.project"] atomically:YES]; +} + +- (BOOL)isValidDictionary:(NSDictionary *)aDict +{ + return NO; +} + +- (NSArray *)sourceFileKeys +{ + return nil; +} + +- (NSArray *)resourceFileKeys +{ + return nil; +} + +- (NSArray *)otherKeys +{ + return nil; +} + +- (NSArray *)buildTargets +{ + return nil; +} + +- (NSString *)projectDescription +{ + return @"Abstract PCProject class!"; +} + +- (id)textView +{ + return textView; +} + +//=========================================================================================== +// ==== Miscellaneous +//=========================================================================================== + +- (BOOL)doesAcceptFile:(NSString *)file forKey:(NSString *)type +{ + if ([[projectDict allKeys] containsObject:type]) { + NSArray *files = [projectDict objectForKey:type]; + + if (![files containsObject:file]) { + return YES; + } + } + + return NO; +} + +- (void)addFile:(NSString *)file forKey:(NSString *)type +{ + NSMutableArray *files = [NSMutableArray arrayWithArray:[projectDict objectForKey:type]]; + NSMutableString *newFile = [NSMutableString stringWithString:[file lastPathComponent]]; + + if ([type isEqualToString:PCLibraries]) { + [newFile deleteCharactersInRange:NSMakeRange(0,3)]; + newFile = [newFile stringByDeletingPathExtension]; + } + + if ([files containsObject:newFile]) { + NSRunAlertPanel(@"Attention!",@"The file %@ is already contained in this project!",@"OK",nil,nil,newFile); + return; + } + + NSLog(@"<%@ %x>: adding file %@ for key %@",[self class],self,newFile,type); + + // Add the new file + [files addObject:newFile]; + [projectDict setObject:files forKey:type]; + + // Synchronise the makefile! + [self writeMakefile]; +} + +- (void)removeFile:(NSString *)file forKey:(NSString *)key +{ + NSMutableArray *array; + + if (!file || !key) { + return; + } + + array = [NSMutableArray arrayWithArray:[projectDict objectForKey:key]]; + [array removeObject:file]; + [projectDict setObject:array forKey:key]; + [self writeMakefile]; +} + +- (BOOL)removeSelectedFilePermanently:(BOOL)yn +{ + NSString *file = [browserController nameOfSelectedFile]; + NSMutableArray *array; + NSString *key; + + if (!file) { + return NO; + } + + key = [self projectKeyForKeyPath:[browserController pathOfSelectedFile]]; + [self removeFile:file forKey:key]; + + // Remove the file permanently?! + if (yn) { + NSString *pth = [projectPath stringByAppendingPathComponent:file]; + + [[NSFileManager defaultManager] removeFileAtPath:pth handler:nil]; + } + + return YES; +} + +- (BOOL)assignProjectDict:(NSDictionary *)aDict +{ + NSAssert(aDict,@"No valid project dictionary!"); + + if (![self isValidDictionary:aDict]) { + return NO; + } + + [projectDict autorelease]; + projectDict = [[NSMutableDictionary alloc] initWithDictionary:aDict]; + + [self setProjectName:[projectDict objectForKey:PCProjectName]]; + + [projectWindow setTitle:[NSString stringWithFormat:@"%@ - %@",projectName,projectPath]]; + + // Update the GNUmakefile! + [self writeMakefile]; + + [[NSNotificationCenter defaultCenter] postNotificationName:@"ProjectDictDidChangeNotification" object:self]; + + return YES; +} + +- (NSDictionary *)projectDict +{ + return (NSDictionary *)projectDict; +} + +- (void)setProjectPath:(NSString *)aPath +{ + [projectPath autorelease]; + projectPath = [aPath copy]; +} + +- (NSString *)projectPath +{ + return projectPath; +} + +- (NSDictionary *)rootCategories +{ + return rootCategories; +} + +- (BOOL)save +{ +} + +- (BOOL)saveAt:(NSString *)projPath +{ +} + +- (BOOL)saveFileNamed:(NSString *)file +{ +} + +- (BOOL)saveAllFiles +{ +} + +- (BOOL)saveAllFilesIfNeeded +{ +} + +- (NSArray *)subprojects +{ + return [projectDict objectForKey:PCSubprojects]; +} + +- (void)addSubproject:(PCProject *)aSubproject +{ +} + +- (PCProject *)superProject +{ + return nil; +} + +- (PCProject *)rootProject +{ + return self; +} + +- (void)newSubprojectNamed:(NSString *)aName +{ +} + +- (void)removeSubproject:(PCProject *)aSubproject +{ +} + +- (BOOL)isSubProject +{ +} + +@end + +@implementation PCProject (ProjectBuilding) + +- (void)showInspector:(id)sender +{ + [projectBuilder showInspectorForProject:self]; +} + +- (id)updatedAttributeView +{ + return projectAttributeInspectorView; +} + +- (id)updatedProjectView +{ + return projectProjectInspectorView; +} + +- (id)updatedFilesView +{ + return projectFileInspectorView; +} + +- (void)showBuildTargetPanel:(id)sender +{ + [buildTargetPanel center]; + [buildTargetPanel makeKeyAndOrderFront:self]; +} + +- (void)setTarget:(id)sender +{ + _buildTarget = [buildTargetPopup indexOfSelectedItem]; +} + +- (void)setHost:(id)sender +{ + NSLog(@"Setting host..."); +} + +- (void)setArguments:(id)sender +{ + NSLog(@"Setting args..."); +} + +- (void)build:(id)sender +{ + BOOL ret = YES; + NSString *target = [buildTargetPopup titleOfSelectedItem]; + NSMutableDictionary *optionDict = [NSMutableDictionary dictionary]; + + [buildStatusField setStringValue:@"Building..."]; + + // Check the panel for this option! + if ([target isEqualToString:@"Debug"]) { + [optionDict setObject:TARGET_MAKE_DEBUG forKey:BUILD_KEY]; + } + if ([target isEqualToString:@"Profile"]) { + [optionDict setObject:TARGET_MAKE_PROFILE forKey:BUILD_KEY]; + } + if ([target isEqualToString:@"Install"]) { + [optionDict setObject:TARGET_MAKE_INSTALL forKey:BUILD_KEY]; + } + else { + [optionDict setObject:TARGET_MAKE forKey:BUILD_KEY]; + } + + [[PCProjectBuilder sharedBuilder] buildProject:self options:optionDict]; + + if (ret) { + [buildStatusField setStringValue:@"Build completed!"]; + } + else { + [buildStatusField setStringValue:@"Build failed!"]; + } +} + +- (void)clean:(id)sender +{ + BOOL ret = YES; + NSMutableDictionary *optionDict = [NSMutableDictionary dictionary]; + + [buildStatusField setStringValue:@"Cleaning..."]; + + // Check the panel for this option! + [optionDict setObject:TARGET_MAKE_CLEAN forKey:BUILD_KEY]; + [[PCProjectBuilder sharedBuilder] buildProject:self options:optionDict]; + + if (ret) { + [buildStatusField setStringValue:@"Cleaning completed!"]; + } + else { + [buildStatusField setStringValue:@"Cleaning failed!"]; + } +} + +@end + +@implementation PCProject (ProjectKeyPaths) + +- (NSArray *)contentAtKeyPath:(NSString *)keyPath +{ + NSString *key; + + NSLog(@"<%@ %x>: content at path %@",[self class],self,keyPath); + + if ([keyPath isEqualToString:@""] || [keyPath isEqualToString:@"/"]) { + return [rootCategories allKeys]; + } + + key = [[keyPath componentsSeparatedByString:@"/"] lastObject]; + return [projectDict objectForKey:[rootCategories objectForKey:key]]; +} + +- (BOOL)hasChildrenAtKeyPath:(NSString *)keyPath +{ + NSString *key; + + if (!keyPath || [keyPath isEqualToString:@""]) { + return NO; + } + + key = [[keyPath componentsSeparatedByString:@"/"] lastObject]; + if ([[rootCategories allKeys] containsObject:key] || [[projectDict objectForKey:PCSubprojects] containsObject:key]) { + return YES; + } + + return NO; +} + +- (NSString *)projectKeyForKeyPath:(NSString *)kp +{ + NSString *type = [[kp componentsSeparatedByString:@"/"] objectAtIndex:1]; + + return [rootCategories objectForKey:type]; +} + +@end + +@implementation PCProject (ProjectWindowDelegate) + +- (void)windowDidBecomeKey:(NSNotification *)aNotification +{ + [projectBuilder setActiveProject:self]; +} + +- (void)windowDidBecomeMain:(NSNotification *)aNotification +{ + [projectBuilder setActiveProject:self]; +} + +- (void)windowWillClose:(NSNotification *)aNotification +{ + if ([[self projectWindow] isDocumentEdited]) { + if (NSRunAlertPanel(@"Project changed!",@"The project %@ has unsaved files! Should they be saved before closing it?",@"Yes",@"No",nil,[self projectName])) { + [self save]; + } + } + // The PCProjectController is our delegate! + [projectBuilder closeProject:self]; +} + +@end diff --git a/PCLib/PCProjectBuilder.h b/PCLib/PCProjectBuilder.h new file mode 100644 index 0000000..3ad3c7c --- /dev/null +++ b/PCLib/PCProjectBuilder.h @@ -0,0 +1,60 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@class PCProject; + +#define BUILD_KEY @"BuildKey" +#define BUILD_OPTIONS_KEY @"BuildOptionsKey" + +#define TARGET_MAKE @"Make" +#define TARGET_MAKE_DEBUG @"MakeDebug" +#define TARGET_MAKE_PROFILE @"MakeProfile" +#define TARGET_MAKE_INSTALL @"MakeInstall" +#define TARGET_MAKE_CLEAN @"MakeClean" + +@class NSWindow; +@class NSTextView; + +@interface PCProjectBuilder : NSObject +{ + NSWindow *buildWindow; + + NSTextView *logOutput; + + NSMutableDictionary *buildTasks; + NSString *makePath; +} + ++ (id)sharedBuilder; + +- (id)init; +- (void)dealloc; + +- (BOOL)buildProject:(PCProject *)aProject options:(NSDictionary *)optionDict; + +@end diff --git a/PCLib/PCProjectBuilder.m b/PCLib/PCProjectBuilder.m new file mode 100644 index 0000000..3daed46 --- /dev/null +++ b/PCLib/PCProjectBuilder.m @@ -0,0 +1,228 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCProjectBuilder.h" +#import "PCProject.h" + +#import + +@interface PCProjectBuilder (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCProjectBuilder (CreateUI) + +- (void)_initUI +{ + NSView *_c_view; + unsigned int style = NSTitledWindowMask | NSClosableWindowMask | + NSMiniaturizableWindowMask | NSResizableWindowMask; + NSSplitView *split; + NSScrollView *scrollView1; + + NSScrollView *scrollView2; + NSTextView *textView2; + + NSRect _w_frame; + + /* + * Build Window + * + */ + + _w_frame = NSMakeRect(100,100,512,320); + buildWindow = [[NSWindow alloc] initWithContentRect:_w_frame + styleMask:style + backing:NSBackingStoreBuffered + defer:NO]; + [buildWindow setDelegate:self]; + [buildWindow setReleasedWhenClosed:NO]; + [buildWindow setMinSize:NSMakeSize(512,320)]; + + logOutput = [[NSTextView alloc] initWithFrame:NSMakeRect(0,0,472,88)]; + [logOutput setMaxSize:NSMakeSize(1e7, 1e7)]; + [logOutput setVerticallyResizable:YES]; + [logOutput setHorizontallyResizable:YES]; + [logOutput setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; + [logOutput setBackgroundColor:[NSColor whiteColor]]; + [[logOutput textContainer] setWidthTracksTextView:YES]; + + scrollView1 = [[NSScrollView alloc] initWithFrame:NSMakeRect (0,0,496,92)]; + [scrollView1 setDocumentView:logOutput]; + [logOutput setMinSize:NSMakeSize(0.0,[scrollView1 contentSize].height)]; + [[logOutput textContainer] setContainerSize:NSMakeSize([scrollView1 contentSize].width,1e7)]; + [scrollView1 setHasHorizontalScroller: YES]; + [scrollView1 setHasVerticalScroller: YES]; + [scrollView1 setBorderType: NSBezelBorder]; + [scrollView1 setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [scrollView1 autorelease]; + + /* + * + */ + + textView2 = [[NSTextView alloc] initWithFrame:NSMakeRect(0,0,472,88)]; + [textView2 setMaxSize:NSMakeSize(1e7, 1e7)]; + [textView2 setVerticallyResizable:YES]; + [textView2 setHorizontallyResizable:YES]; + [textView2 setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; + [textView2 setBackgroundColor:[NSColor whiteColor]]; + [[textView2 textContainer] setWidthTracksTextView:YES]; + + scrollView2 = [[NSScrollView alloc] initWithFrame:NSMakeRect (0,0,496,92)]; + [scrollView2 setDocumentView:textView2]; + [textView2 setMinSize:NSMakeSize(0.0,[scrollView2 contentSize].height)]; + [[textView2 textContainer] setContainerSize:NSMakeSize([scrollView2 contentSize].width,1e7)]; + [scrollView2 setHasHorizontalScroller: YES]; + [scrollView2 setHasVerticalScroller: YES]; + [scrollView2 setBorderType: NSBezelBorder]; + [scrollView2 setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; + [scrollView2 autorelease]; + + split = [[[NSSplitView alloc] initWithFrame:NSMakeRect(8,0,496,264)] autorelease]; + [split setAutoresizingMask: (NSViewWidthSizable | NSViewHeightSizable)]; + [split addSubview: scrollView1]; + [split addSubview: scrollView2]; + + _c_view = [buildWindow contentView]; + [_c_view addSubview:split]; +} + +@end + +@implementation PCProjectBuilder + +static PCProjectBuilder *_builder; + ++ (id)sharedBuilder +{ + if (!_builder) { + _builder = [[PCProjectBuilder alloc] init]; + } + return _builder; +} + +- (id)init +{ + if ((self = [super init])) { + [self _initUI]; + makePath = [[NSString stringWithString:@"/usr/bin/make"] retain]; + buildTasks = [[NSMutableDictionary dictionary] retain]; + } + return self; +} + +- (void)dealloc +{ + [buildWindow release]; + [makePath release]; + [buildTasks release]; + + [super dealloc]; +} + +- (BOOL)buildProject:(PCProject *)aProject options:(NSDictionary *)optionDict +{ + BOOL ret = NO; + NSString *tg = nil; + NSTask *makeTask; + NSMutableArray *args; + NSString *output = nil; + NSPipe *logPipe; + NSFileHandle *readHandle; + NSData *inData = nil; + + logPipe = [NSPipe pipe]; + readHandle = [logPipe fileHandleForReading]; + + NSAssert(aProject,@"No project provided!"); + + makeTask = [[NSTask alloc] init]; + + if ((tg = [optionDict objectForKey:BUILD_KEY])) { + if ([tg isEqualToString:TARGET_MAKE_DEBUG]) { + args = [NSMutableArray array]; + [args addObject:@"debug=yes"]; + [makeTask setArguments:args]; + } + else if ([tg isEqualToString:TARGET_MAKE_PROFILE]) { + args = [NSMutableArray array]; + [args addObject:@"profile=YES"]; + [args addObject:@"static=YES"]; + [makeTask setArguments:args]; + } + else if ([tg isEqualToString:TARGET_MAKE_INSTALL]) { + args = [NSMutableArray array]; + [args addObject:@"install"]; + [makeTask setArguments:args]; + } + else if ([tg isEqualToString:TARGET_MAKE_CLEAN]) { + args = [NSMutableArray array]; + [args addObject:@"clean"]; + [makeTask setArguments:args]; + } + + [makeTask setCurrentDirectoryPath:[aProject projectPath]]; + [makeTask setLaunchPath:makePath]; + + [makeTask setStandardOutput:logPipe]; + [makeTask setStandardError:logPipe]; + + if (![buildWindow isVisible]) { + [buildWindow center]; + [buildWindow makeKeyAndOrderFront:self]; + } + + [makeTask launch]; + + /* + * This is just a quick hack for now... + */ + + while ((inData = [readHandle availableData]) && [inData length]) { + output = [[NSString alloc] initWithData:inData encoding:NSASCIIStringEncoding]; + [logOutput setString:[NSString stringWithFormat:@"%@%@\n", [logOutput string], output]]; + [logOutput scrollRangeToVisible:NSMakeRange([[logOutput textStorage] length], 0)]; + [output release]; + } + + [makeTask waitUntilExit]; + + ret = [makeTask terminationStatus]; + +#ifdef DEBUG + NSLog(@"Task terminated %@...",(ret)?@"successfully":@"not successfully"); +#endif DEBUG + + [makeTask autorelease]; + } + + return ret; +} + +@end diff --git a/PCLib/PCProjectManager.h b/PCLib/PCProjectManager.h new file mode 100644 index 0000000..3e1aa23 --- /dev/null +++ b/PCLib/PCProjectManager.h @@ -0,0 +1,169 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +#import "PCProject.h" +#import "ProjectBuilder.h" + +@interface PCProjectManager : NSObject +{ + id delegate; // The PCAppController + id fileManager; + + id inspector; + id inspectorView; + id inspectorPopup; + + NSMutableDictionary *loadedProjects; + PCProject *activeProject; + + NSString *rootBuildPath; + + @private + BOOL _needsReleasing; +} + +// =========================================================================== +// ==== Class files +// =========================================================================== + ++ (void)initialize; + +// =========================================================================== +// ==== Intialization & deallocation +// =========================================================================== + +- (id)init; +- (void)dealloc; + +// =========================================================================== +// ==== Delegate +// =========================================================================== + +- (id)delegate; +- (void)setDelegate:(id)aDelegate; + +// =========================================================================== +// ==== Project management +// =========================================================================== + +- (NSMutableDictionary *)loadedProjects; + // Returns all currently loaded projects. They are stored with their absolut paths as the keys. + +- (PCProject *)activeProject; + // Returns the currently active project + +- (void)setActiveProject:(PCProject *)aProject; +// Sets the new currently active project + +- (void)saveAllProjects; + // Saves all projects if needed. + +- (NSString *)rootBuildPath; + // Gets set while initialising! + +// =========================================================================== +// ==== Project actions +// =========================================================================== + +- (PCProject *)loadProjectAt:(NSString *)aPath; + // Returns the loaded project if the builder class is known, nil else. + +- (BOOL)openProjectAt:(NSString *)aPath; + // Invokes loadProjectAt to load the project properly. + +- (BOOL)createProjectOfType:(NSString *)projectType path:(NSString *)aPath; + // projectType is exactly the name of the class to be invoked to create the project! + +- (BOOL)saveProject; + // Saves the current project + +- (BOOL)saveProjectAs:(NSString *)projName; + +- (void)inspectorPopupDidChange:(id)sender; + +- (void)showInspectorForProject:(PCProject *)aProject; + // Opens the inspector for aProject + +- (void)showLoadedProjects; + // Opens a panel containing all opened projects + +- (void)saveFiles; + // Saves all the edited files from the currently active project + +- (void)revertToSaved; + // Reverts the currently active project + +- (BOOL)newSubproject; +- (BOOL)addSubprojectAt:(NSString *)path; +- (void)removeSubproject; + +- (void)closeProject:(PCProject *)aProject; +- (void)closeProject; + // Closes the currently active project + +// =========================================================================== +// ==== File actions +// =========================================================================== + +- (BOOL)openFile:(NSString *)path; +- (BOOL)addFile:(NSString *)path; +- (BOOL)newFile:(NSString *)path; +- (BOOL)saveFile; +- (BOOL)saveFileAs:(NSString *)path; +- (BOOL)revertFile; +- (BOOL)renameFileTo:(NSString *)path; +- (BOOL)removeFilePermanently:(BOOL)yn; + +@end + +@interface PCProjectManager (FileManagerDelegates) + +- (NSString *)fileManager:(id)sender willCreateFile:(NSString *)aFile withKey:(NSString *)key; + // Returns the full path if the type is valid, nil else. + +- (void)fileManager:(id)sender didCreateFile:(NSString *)aFile withKey:(NSString *)key; + // Adds the file to the project and updates the makefile! + +- (id)fileManagerWillAddFiles:(id)sender; + // Returns the active project + +- (BOOL)fileManager:(id)sender shouldAddFile:(NSString *)file forKey:(NSString *)key; + +- (void)fileManager:(id)sender didAddFile:(NSString *)file forKey:(NSString *)key; + // Adds the file to the project and update the makefile! + +@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 diff --git a/PCLib/PCProjectManager.m b/PCLib/PCProjectManager.m new file mode 100644 index 0000000..6e3278a --- /dev/null +++ b/PCLib/PCProjectManager.m @@ -0,0 +1,462 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCProjectManager.h" +#import "ProjectCenter.h" + +#if defined(GNUSTEP) +#import +#endif + +@interface PCProjectManager (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCProjectManager (CreateUI) + +- (void)_initUI +{ + NSView *_c_view; + unsigned int style = NSTitledWindowMask | NSClosableWindowMask | + NSResizableWindowMask; + NSRect _w_frame; + NSBox *line; + + /* + * Inspector Window + * + */ + + _w_frame = NSMakeRect(200,300,280,384); + inspector = [[NSWindow alloc] initWithContentRect:_w_frame + styleMask:style + backing:NSBackingStoreBuffered + defer:NO]; + [inspector setMinSize:NSMakeSize(280,384)]; + [inspector setTitle:@"Inspector"]; + _c_view = [inspector contentView]; + + inspectorPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(80,352,128,20)]; + [inspectorPopup addItemWithTitle:@"None"]; + [inspectorPopup setTarget:self]; + [inspectorPopup setAction:@selector(inspectorPopupDidChange:)]; + [_c_view addSubview:inspectorPopup]; + + line = [[[NSBox alloc] init] autorelease]; + [line setTitlePosition:NSNoTitle]; + [line setFrameFromContentFrame:NSMakeRect(0,336,280,2)]; + [_c_view addSubview:line]; + + inspectorView = [[NSBox alloc] init]; + [inspectorView setTitlePosition:NSNoTitle]; + [inspectorView setFrameFromContentFrame:NSMakeRect(2,2,276,330)]; + [inspectorView setBorderType:NSNoBorder]; + [_c_view addSubview:inspectorView]; + + _needsReleasing = YES; +} + +@end + +@implementation PCProjectManager + +// =========================================================================== +// ==== Class methods +// =========================================================================== + ++ (void)initialize +{ +} + +// =========================================================================== +// ==== Intialization & deallocation +// =========================================================================== + +- (id)init +{ + if ((self = [super init])) { + loadedProjects = [[NSMutableDictionary alloc] init]; + + rootBuildPath = [[[NSUserDefaults standardUserDefaults] stringForKey:RootBuildDirectory] copy]; + if (!rootBuildPath || rootBuildPath == @"") { + rootBuildPath = [NSTemporaryDirectory() copy]; + } + _needsReleasing = NO; + } + return self; +} + +- (void)dealloc +{ + [rootBuildPath release]; + [loadedProjects release]; + + if (_needsReleasing) { + [inspector release]; + [inspectorView release]; + [inspectorPopup release]; + } + + [super dealloc]; +} + +// =========================================================================== +// ==== Delegate +// =========================================================================== + +- (id)delegate +{ + return delegate; +} + +- (void)setDelegate:(id)aDelegate +{ + delegate = aDelegate; +} + +// =========================================================================== +// ==== Project management +// =========================================================================== + +- (NSMutableDictionary *)loadedProjects +{ + return loadedProjects; +} + +- (PCProject *)activeProject +{ + return activeProject; +} + +- (void)setActiveProject:(PCProject *)aProject +{ + if (aProject != activeProject) { + activeProject = aProject; + + //~ Is this needed? + if (activeProject) { + [[activeProject projectWindow] makeKeyAndOrderFront:self]; + } + + if ([inspector isVisible]) { + [self inspectorPopupDidChange:inspectorPopup]; + } + } +} + +- (void)saveAllProjects +{ +} + +- (NSString *)rootBuildPath +{ + return rootBuildPath; +} + +// =========================================================================== +// ==== Project actions +// =========================================================================== + +- (PCProject *)loadProjectAt:(NSString *)aPath +{ + if (delegate && [delegate respondsToSelector:@selector(projectTypes)]) { + NSDictionary *builders = [delegate projectTypes]; + NSEnumerator *enumerator = [builders keyEnumerator]; + NSString *builderKey; + + while (builderKey = [enumerator nextObject]) { + id concretBuilder; + PCProject *project; + + NSLog([NSString stringWithFormat:@"Builders %@ for key %@",[builders description],builderKey]); + + concretBuilder = [NSClassFromString([builders objectForKey:builderKey]) sharedCreator]; + + if ((project = [concretBuilder openProjectAt:aPath])) { + return project; + } + } + } + else { + NSLog(@"No project manager delegate available!"); + } + + return nil; +} + +- (BOOL)openProjectAt:(NSString *)aPath +{ + BOOL isDir = NO; + + if ([loadedProjects objectForKey:aPath]) { + NSLog([NSString stringWithFormat:@"Project %@ is already loaded!",aPath]); + return NO; + } + + if ([[NSFileManager defaultManager] fileExistsAtPath:aPath isDirectory:&isDir] && !isDir) { + PCProject *project = [self loadProjectAt:aPath]; + + if (!project) { + NSLog(@"Couldn't instantiate the project..."); + return NO; + } + + [project setProjectBuilder:self]; + [loadedProjects setObject:project forKey:aPath]; + [self setActiveProject:project]; + [project setDelegate:self]; + + return YES; + } + return NO; +} + +- (BOOL)createProjectOfType:(NSString *)projectType path:(NSString *)aPath +{ + Class creatorClass = NSClassFromString(projectType); + PCProject * project; + + if (![creatorClass conformsToProtocol:@protocol(ProjectType)]) { + [NSException raise:NOT_A_PROJECT_TYPE_EXCEPTION format:@"%@ does not conform to ProjectType!",projectType]; + return NO; + } + + if (!(project = [[creatorClass sharedCreator] createProjectAt:aPath])) { + return NO; + } + + [project setProjectBuilder:self]; + [loadedProjects setObject:project forKey:aPath]; + [self setActiveProject:project]; + [project setDelegate:self]; + + return YES; +} + +- (BOOL)saveProject +{ + // Save all files that need to be saved + + // Save PC.project and the makefile! +} + +- (BOOL)saveProjectAs:(NSString *)projName +{ +} + +- (void)inspectorPopupDidChange:(id)sender +{ + NSView *view = nil; + + if (![self activeProject]) { + return; + } + + switch([sender indexOfSelectedItem]) { + case 0: + view = [[[self activeProject] updatedAttributeView] retain]; + break; + case 1: + view = [[[self activeProject] updatedProjectView] retain]; + break; + case 2: + view = [[[self activeProject] updatedFilesView] retain]; + break; + } + [(NSBox *)inspectorView setContentView:view]; + [inspectorView display]; +} + +- (void)showInspectorForProject:(PCProject *)aProject +{ + if (!inspectorPopup) { +#if defined(GNUSTEP) + [self _initUI]; +#else + if(![NSBundle loadNibNamed:@"Inspector.nib" owner:self]) { + [[NSException exceptionWithName:NIB_NOT_FOUND_EXCEPTION reason:@"Could not load Inspector.gmodel" userInfo:nil] raise]; + return nil; + } +#endif + + [inspectorPopup removeAllItems]; + [inspectorPopup addItemWithTitle:@"Build Attributes"]; + [inspectorPopup addItemWithTitle:@"Project Attributes"]; + [inspectorPopup addItemWithTitle:@"File Attributes"]; + } + + [self inspectorPopupDidChange:inspectorPopup]; + [inspector makeKeyAndOrderFront:self]; +} + +- (void)showLoadedProjects +{ +} + +- (void)saveFiles +{ +} + +- (void)revertToSaved +{ +} + +- (BOOL)newSubproject +{ +} + +- (BOOL)addSubprojectAt:(NSString *)path +{ +} + +- (void)removeSubproject +{ +} + +- (void)closeProject:(PCProject *)aProject +{ + PCProject *currentProject; + NSString *key = [[aProject projectPath] stringByAppendingPathComponent:@"PC.project"]; + + currentProject = [[loadedProjects objectForKey:key] retain]; + + // Remove it from the loaded projects! + [loadedProjects removeObjectForKey:key]; + [self setActiveProject:[[loadedProjects allValues] lastObject]]; + + [currentProject autorelease]; + + //~ Should I activate another project here?! +} + +- (void)closeProject +{ + [[[self activeProject] projectWindow] performClose:self]; +} + +// =========================================================================== +// ==== File actions +// =========================================================================== + +- (BOOL)openFile:(NSString *)path +{ + id editor = [[[delegate prefController] preferencesDict] objectForKey:Editor]; + + if (!editor) { + } + + [editor openFile:path]; +} + +- (BOOL)addFile:(NSString *)path +{ +} + +- (BOOL)newFile:(NSString *)path +{ +} + +- (BOOL)saveFile +{ +} + +- (BOOL)saveFileAs:(NSString *)path +{ +} + +- (BOOL)revertFile +{ +} + +- (BOOL)renameFileTo:(NSString *)path +{ +} + +- (BOOL)removeFilePermanently:(BOOL)yn +{ + if (!activeProject) { + return NO; + } + + return [activeProject removeSelectedFilePermanently:yn]; +} + +@end + +@implementation PCProjectManager (FileManagerDelegates) + +- (NSString *)fileManager:(id)sender willCreateFile:(NSString *)aFile withKey:(NSString *)key +{ + NSString *path = nil; + + NSLog(@"<%@ %x>: will create file %@ for key %@",[self class],self,aFile,key); + + if ([activeProject doesAcceptFile:aFile forKey:key] ) { + path = [[activeProject projectPath] stringByAppendingPathComponent:aFile]; + } + + return path; +} + +- (void)fileManager:(id)sender didCreateFile:(NSString *)aFile withKey:(NSString *)key +{ + NSLog(@"<%@ %x>: did create file %@ for key %@",[self class],self,aFile,key); + [activeProject addFile:aFile forKey:key]; +} + +- (id)fileManagerWillAddFiles:(id)sender +{ + return activeProject; +} + +- (BOOL)fileManager:(id)sender shouldAddFile:(NSString *)file forKey:(NSString *)key +{ + NSMutableString *fn = [NSMutableString stringWithString:[file lastPathComponent]]; + + NSLog(@"<%@ %x>: should add file %@ for key %@",[self class],self,file,key); + + if ([key isEqualToString:PCLibraries]) { + [fn deleteCharactersInRange:NSMakeRange(1,3)]; + fn = [fn stringByDeletingPathExtension]; + } + + if ([[[activeProject projectDict] objectForKey:key] containsObject:fn]) { + NSRunAlertPanel(@"Attention!",@"The file %@ is already part of project %@!",@"OK",nil,nil,fn,[activeProject projectName]); + return NO; + } + return YES; +} + +- (void)fileManager:(id)sender didAddFile:(NSString *)file forKey:(NSString *)key +{ + NSLog(@"<%@ %x>: did add file %@ for key %@",[self class],self,file,key); + [activeProject addFile:file forKey:key]; +} + + +@end diff --git a/PCLib/PCServer.h b/PCLib/PCServer.h new file mode 100644 index 0000000..e7e3864 --- /dev/null +++ b/PCLib/PCServer.h @@ -0,0 +1,101 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +#import "Server.h" +#import "PCProject.h" + +extern NSString *PCProjectWillOpenNotification; +extern NSString *PCProjectDidOpenNotification; +extern NSString *PCProjectWillCloseNotification; +extern NSString *PCProjectDidCloseNotification; +extern NSString *PCProjectDidChangeNotification; +extern NSString *PCProjectWillSaveNotification; +extern NSString *PCProjectDidSaveNotification; +extern NSString *PCProjectSaveDidFailNotification; +extern NSString *PCProjectDidUpdateNotification; + +extern NSString *PCFileAddedToProjectNotification; +extern NSString *PCFileRemovedFromProjectNotification; +extern NSString *PCFileWillOpenNotification; +extern NSString *PCFileDidOpenNotification; +extern NSString *PCFileWillCloseNotification; +extern NSString *PCFileDidCloseNotification; + +extern NSString *PCFileDidChangeNotification; +extern NSString *PCFileWillSaveNotification; +extern NSString *PCFileDidSaveNotification; +extern NSString *PCFileSaveDidFailNotification; +extern NSString *PCFileWillRevertNotification; +extern NSString *PCFileDidRevertNotification; +extern NSString *PCFileDeletedNotification; +extern NSString *PCFileRenamedNotification; + +extern NSString *PCProjectBuildWillBeginNotification; +extern NSString *PCProjectBuildDidBeginNotification; +extern NSString *PCProjectBuildDidSucceedNotification; +extern NSString *PCProjectBuildDidFailNotification; +extern NSString *PCProjectBuildDidStopNotification; + +@interface PCServer : NSObject +{ + NSMutableArray *clients; +} + +- (id)init; +- (void)dealloc; + +//---------------------------------------------------------------------------- +// Server +//---------------------------------------------------------------------------- + +- (BOOL)registerProjectSubmenu:(NSMenu *)menu; +- (BOOL)registerFileSubmenu:(NSMenu *)menu; +- (BOOL)registerToolsSubmenu:(NSMenu *)menu; +- (BOOL)registerPrefController:(id)prefs; +- (BOOL)registerEditor:(id)anEditor; +- (BOOL)registerDebugger:(id)aDebugger; + +- (PCProject *)activeProject; +- (NSString*)pathToActiveProject; + +- (id)activeFile; +- (NSString*)pathToActiveFile; + +- (NSArray*)selectedFiles; +- (NSArray*)touchedFiles; +// Both methods return full paths! + +- (BOOL)querTouchedFiles; + // Prompts user to save all files and projects with dirtied buffers. + +- (BOOL)addFileAt:(NSString*)filePath toProject:(PCProject *)projectPath; +- (BOOL)removeFileFromProject:(NSString *)filePath; + +- (void)connectionDidDie:(NSNotification *)notif; + +@end diff --git a/PCLib/PCServer.m b/PCLib/PCServer.m new file mode 100644 index 0000000..33eb332 --- /dev/null +++ b/PCLib/PCServer.m @@ -0,0 +1,123 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCServer.h" +#import "ProjectCenter.h" + +@implementation PCServer + +- (id)init +{ + if ((self = [super init])) { + clients = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)dealloc +{ + [clients release]; + [super dealloc]; +} + +- (BOOL)registerProjectSubmenu:(NSMenu *)menu +{ +} + +- (BOOL)registerFileSubmenu:(NSMenu *)menu +{ +} + +- (BOOL)registerToolsSubmenu:(NSMenu *)menu +{ +} + +- (BOOL)registerPrefController:(id)prefs +{ +} + +- (BOOL)registerEditor:(id)anEditor +{ +} + +- (BOOL)registerDebugger:(id)aDebugger +{ +} + +- (PCProject *)activeProject +{ +} + +- (NSString*)pathToActiveProject +{ +} + +- (id)activeFile +{ +} + +- (NSString*)pathToActiveFile +{ +} + +- (NSArray*)selectedFiles +{ +} + +- (NSArray*)touchedFiles +{ +} + +- (BOOL)querTouchedFiles +{ +} + +- (BOOL)addFileAt:(NSString*)filePath toProject:(PCProject *)projectPath +{ +} + +- (BOOL)removeFileFromProject:(NSString *)filePath +{ +} + +- (void)connectionDidDie:(NSNotification *)notif +{ + id clientCon = [notif object]; + + if ([clientCon isKindOfClass:[NSConnection class]]) { + int i; + + for (i=0;i<[clients count];i++) { + id client = [clients objectAtIndex:i]; + + if ([client isProxy] && [client connectionForProxy] == clientCon) { + [clients removeObjectAtIndex:i]; + } + } + } +} + +@end diff --git a/PCLib/PreferenceController.h b/PCLib/PreferenceController.h new file mode 100644 index 0000000..ca67502 --- /dev/null +++ b/PCLib/PreferenceController.h @@ -0,0 +1,47 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + A PreferenceController is used to create a part of PC's preferences. In this + way a 3rd party developer can extend the prefs easily. + + With this approach this procedure can be implemented as a bundle and + therefore PC remains open for future extensions! +*/ + +#import + +@protocol PreferenceController + +- (NSString *)contentViewName; +- (NSView *)contentView; +- (void)revert; +- (void)save; +- (id)controller; + +@end diff --git a/PCLib/ProjectBuilder.h b/PCLib/ProjectBuilder.h new file mode 100644 index 0000000..539b462 --- /dev/null +++ b/PCLib/ProjectBuilder.h @@ -0,0 +1,37 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@class PCProject; + +@protocol ProjectBuilder + +- (void)setActiveProject:(PCProject *)aProject; +- (void)closeProject:(PCProject *)aProject; +- (void)showInspectorForProject:(PCProject *)aProject; + +@end diff --git a/PCLib/ProjectCenter.h b/PCLib/ProjectCenter.h new file mode 100644 index 0000000..37d09d1 --- /dev/null +++ b/PCLib/ProjectCenter.h @@ -0,0 +1,71 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#define PC_EXTERN extern +#define PRIVATE_EXTERN __private_extern__ + +#define BUNDLE_PATH @"/LocalDeveloper/ProjectCenter/Bundles" + +#define Editor @"Editor" +#define Debugger @"Debugger" +#define Compiler @"Compiler" +#define PromtOnClean @"PromtOnClean" +#define PromtOnQuit @"PromtOnQuit" +#define AutoSave @"UAutoSaveRL" +#define RemoveBackup @"RemoveBackup" +#define AutoSavePeriod @"AutoSavePeriod" +#define RootBuildDirectory @"RootBuildDirectory" +#define DeleteCacheWhenQuitting @"DeleteBuildCacheWhenQuitting" +#define BundlePaths @"BundlePaths" +#define SuccessSound @"SuccessSound" +#define FailureSound @"FailureSound" + +#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" + +#import "PCBundleLoader.h" +#import "PCDataSource.h" +#import "PCProjectManager.h" +#import "PCServer.h" +#import "PCProject.h" +#import "PCFileManager.h" +#import "PCBrowserController.h" +#import "ProjectDebugger.h" +#import "ProjectEditor.h" +#import "ProjectType.h" +#import "Server.h" +#import "PreferenceController.h" +#import "ProjectBuilder.h" +#import "FileCreator.h" +#import "PCProjectBuilder.h" diff --git a/PCLib/ProjectDebugger.h b/PCLib/ProjectDebugger.h new file mode 100644 index 0000000..b42791d --- /dev/null +++ b/PCLib/ProjectDebugger.h @@ -0,0 +1,41 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + A ProjectDebugger is used to create a debugger (frontend) that will work + together with PC. Every such debugger must conform to this protocol! + + With this approach this procedure can be implemented as a bundle and + therefore PC remains open for future extensions! +*/ + +#import + +@protocol ProjectDebugger + +@end diff --git a/PCLib/ProjectEditor.h b/PCLib/ProjectEditor.h new file mode 100644 index 0000000..39edae8 --- /dev/null +++ b/PCLib/ProjectEditor.h @@ -0,0 +1,56 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + A ProjectEditor is used to create an editor that will work together with PC. + Every such editor must conform to this protocol! + + With this approach this procedure can be implemented as a bundle and + therefore PC remains open for future extensions! +*/ + +#import + +@protocol ProjectEditor + +- (void)openFile:(NSString *)path; +- (void)saveFile:(NSString *)path; +- (void)closeFile:(NSString *)path; +- (void)revertFile:(NSString *)path; + +@end + +@interface NSObject (EditorDelegates) + +- (void)editor:(id)editor didOpenFile:(NSString *)path; +- (void)editor:(id)editor didModifyFile:(NSString *)path; +- (void)editor:(id)editor didSaveFile:(NSString *)path; +- (void)editor:(id)editor didCloseFile:(NSString *)path; +- (void)editorWillTerminate:(id)editor; + +@end diff --git a/PCLib/ProjectType.h b/PCLib/ProjectType.h new file mode 100644 index 0000000..7c78aca --- /dev/null +++ b/PCLib/ProjectType.h @@ -0,0 +1,53 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + 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 + ++ (id)sharedCreator; + +- (Class)projectClass; +// Returns the real project class + +- (NSString *)projectTypeName; +- (NSDictionary *)typeTable; +// Type Attributes live in the ProjType.table in the wrapper + +- (PCProject *)createProjectAt:(NSString *)path; +- (PCProject *)openProjectAt:(NSString *)path; + +@end diff --git a/PCLib/Server.h b/PCLib/Server.h new file mode 100644 index 0000000..463d61c --- /dev/null +++ b/PCLib/Server.h @@ -0,0 +1,59 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +#import "PCProject.h" +#import "PreferenceController.h" +#import "ProjectEditor.h" +#import "ProjectDebugger.h" + +@protocol Server + +- (BOOL)registerProjectSubmenu:(NSMenu *)menu; +- (BOOL)registerFileSubmenu:(NSMenu *)menu; +- (BOOL)registerToolsSubmenu:(NSMenu *)menu; +- (BOOL)registerPrefController:(id)prefs; +- (BOOL)registerEditor:(id)anEditor; +- (BOOL)registerDebugger:(id)aDebugger; + +- (PCProject *)activeProject; +- (NSString*)pathToActiveProject; + +- (id)activeFile; +- (NSString*)pathToActiveFile; + +- (NSArray*)selectedFiles; +- (NSArray*)touchedFiles; +// Returns array of paths of files that are "unsaved" or nil if none. + +- (BOOL)querTouchedFiles; + // Prompts user to save all files and projects with dirtied buffers. + +- (BOOL)addFileAt:(NSString*)filePath toProject:(PCProject *)projectPath; +- (BOOL)removeFileFromProject:(PCProject *)filePath; + +@end diff --git a/PCLib/h.template b/PCLib/h.template new file mode 100644 index 0000000..99dff7d --- /dev/null +++ b/PCLib/h.template @@ -0,0 +1,34 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@interface $FILENAMESANSEXTENSION$ : NSObject +{ + +} + +@end diff --git a/PCLib/m.template b/PCLib/m.template new file mode 100644 index 0000000..4405217 --- /dev/null +++ b/PCLib/m.template @@ -0,0 +1,31 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "$FILENAMESANSEXTENSION$.h" + +@implementation $FILENAMESANSEXTENSION$ + +@end diff --git a/PCLibProj/GNUmakefile b/PCLibProj/GNUmakefile new file mode 100644 index 0000000..4bab216 --- /dev/null +++ b/PCLibProj/GNUmakefile @@ -0,0 +1,54 @@ +# GNUmakefile +# +# Copyright (C) 2000 Philippe C.D. Robert +# +# Author: Philippe C.D. Robert +# Date: 2000 +# +# This file is part of ProjectCenter +# +# 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 02139, USA. + +include $(GNUSTEP_MAKEFILES)/common.make + +BUNDLE_NAME = PCLibProj +BUNDLE_EXTENSION=.bundle +BUNDLE_INSTALL_DIR=$(GNUSTEP_LOCAL_ROOT)/Library/ProjectCenter/ + +PCLibProj_OBJC_FILES = \ + PCLibProj.m \ + PCLibMakefileFactory.m \ + PCLibProject.m + +PCLibProj_HEADERS= \ + PCLibMakefileFactory.h \ + PCLibProj.h \ + PCLibProject.h + +PCLibProj_PRINCIPAL_CLASS = PCLibProj + +PCLibProj_RESOURCE_FILES = \ + PC.proj \ + Version \ + LibProject.gmodel + +-include GNUmakefile.preamble + +-include GNUmakefile.local + +include $(GNUSTEP_MAKEFILES)/bundle.make + +-include GNUmakefile.postamble + diff --git a/PCLibProj/GNUmakefile.postamble b/PCLibProj/GNUmakefile.postamble new file mode 100644 index 0000000..a205b9c --- /dev/null +++ b/PCLibProj/GNUmakefile.postamble @@ -0,0 +1,26 @@ +# +# Makefile.postamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# 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. diff --git a/PCLibProj/GNUmakefile.preamble b/PCLibProj/GNUmakefile.preamble new file mode 100644 index 0000000..ce01357 --- /dev/null +++ b/PCLibProj/GNUmakefile.preamble @@ -0,0 +1,71 @@ +# +# Makefile.preamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# If you are interested in a warranty or support for this source code, +# contact Scott Christley at scottc@net-community.com +# +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. +# If not, write to the Free Software Foundation, +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# +# Makefile.preamble +# +# Project specific makefile variables, and additional +# +# Do not put any Makefile rules in this file, instead they should +# be put into Makefile.postamble. +# + +# +# Flags dealing with compiling and linking +# + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += +#ADDITIONAL_CFLAGS += + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += + +# Additional LDFLAGS to pass to the linker +ADDITIONAL_LDFLAGS += + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS += + +# +# Local configuration +# diff --git a/PCLibProj/Info.table b/PCLibProj/Info.table new file mode 100644 index 0000000..e0861e8 --- /dev/null +++ b/PCLibProj/Info.table @@ -0,0 +1,29 @@ +{ + AdditionalAttributes = { + PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; + }; + Allowable_SubprojectTypes = (Subproject, Bundle, Tool, Framework, Library, Palette); + AttributesInspector = ApplicationInspector; + DefaultExtension = ""; + Default_Localizable_Keys = (INTERFACES); + GeneratedFiles = (Makefile, iconHeader); + INSTALLFLAGS = "-c -s -m 755"; + InfoName = ""; + Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); + MAKEFILE = app.make; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); + PBProjectTypeSubClass = "PBApplicationProjectType"; + ProvidesIcons = Yes; + Public_Keys = (H_FILES); + Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); + SOURCEMODE = 444; + Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); + Subproj_Keys = (SUBPROJECTS); + Targets = (app, debug, profile, install); + ExecutableResults = ( + "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" + ); +} diff --git a/PCLibProj/LibProject.gmodel b/PCLibProj/LibProject.gmodel new file mode 100644 index 0000000..5dd296b --- /dev/null +++ b/PCLibProj/LibProject.gmodel @@ -0,0 +1,133 @@ +{ + "Object 1" = {elements = ("Object 2"); isa = NSMutableArray; }; + "Object 2" = {className = PCAppProject; isa = IMCustomObject; realObject = "Object 3"; }; + "Object 3" = { + delegate = nil; + isa = NSApplication; + keyWindow = nil; + mainMenu = nil; + mainWindow = nil; + windows = "Object 4"; + }; + "Object 4" = { + elements = ("Object 5", "Object 9", "Object 11"); + isa = NSMutableArray; + }; + "Object 5" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 256; height = 128}"; + contentView = "Object 6"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 6" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 256; height = 128}"; + frame = "{x = 0; y = 0; width = 256; height = 128}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 5"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 7" = {elements = (); isa = NSMutableArray; }; + "Object 8" = { + alpha = 1.000000; + blue = 0.666667; + brightness = 0.666667; + colorSpaceName = NSCalibratedRGBColorSpace; + green = 0.666667; + hue = 0.000000; + isa = NSColor; + red = 0.666667; + saturation = 0.000000; + }; + "Object 9" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 193; height = 208}"; + contentView = "Object 10"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 10" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 193; height = 208}"; + frame = "{x = 0; y = 0; width = 193; height = 208}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 9"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 11" = { + backgroundColor = "Object 8"; + backingType = 2; + contentFrame = "{x = 221; y = 299; width = 512; height = 320}"; + contentView = "Object 12"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = YES; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 514; height = 352}"; + representedFilename = ""; + styleMask = 14; + title = Window; + }; + "Object 12" = { + autoresizesSubviews = NO; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 512; height = 320}"; + frame = "{x = 1; y = 9; width = 512; height = 320}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 11"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + RootObject = {Connections = "Object 7"; Objects = "Object 1"; isa = GMModel; }; + TopLevelObjects = (RootObject); + Version = 1; +} diff --git a/PCLibProj/Makefile b/PCLibProj/Makefile new file mode 100755 index 0000000..226962b --- /dev/null +++ b/PCLibProj/Makefile @@ -0,0 +1,49 @@ +# +# Generated by the NeXT Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = PCLibProj + +PROJECTVERSION = 2.6 +PROJECT_TYPE = Loadable Bundle +LANGUAGE = English + +GLOBAL_RESOURCES = LibProject.nib GNUmakefile.postamble\ + GNUmakefile.preamble Info.table LibProject.gmodel\ + PC.proj + +CLASSES = PCLibMakefileFactory.m PCLibProj.m PCLibProject.m + +HFILES = PCLibMakefileFactory.h PCLibProj.h PCLibProject.h + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble m.template\ + h.template + +MAKEFILEDIR = $(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = bundle.make +NEXTSTEP_INSTALLDIR = /LocalLibrary/ProjectCenter/ +WINDOWS_INSTALLDIR = /MyBundles +LIBS = +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) +BUNDLE_EXTENSION = bundle + + +FRAMEWORKS = -framework Foundation + + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/PCLibProj/Makefile.postamble b/PCLibProj/Makefile.postamble new file mode 100755 index 0000000..36381d4 --- /dev/null +++ b/PCLibProj/Makefile.postamble @@ -0,0 +1,122 @@ +############################################################################### +# NeXT Makefile.postamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project, sub-project, bundle, or +# palette. Each node in the project's tree of sub-projects and bundles +# should have it's own Makefile.preamble and Makefile.postamble. Additional +# rules (e.g., after_install) that are defined by the developer should be +# defined in this file. +# +############################################################################### +# +# Here are the variables exported by the common "app" makefiles that can be +# used in any customizations you make to the template below: +# +# PRODUCT_ROOT - Name of the directory to which resources are copied. +# OFILE_DIR - Directory into which .o object files are generated. +# (Note that this name is calculated based on the target +# architectures specified in Project Builder). +# DERIVED_SRC_DIR - Directory used for all other derived files +# ALL_CFLAGS - All the flags passed to the cc(1) driver for compilations +# +# NAME - name of application, bundle, subproject, palette, etc. +# LANGUAGE - langage in which the project is written (default "English") +# LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES - non-localized resources of project +# PROJECTVERSION - version of ProjectBuilder project (NS3.X = 1.1, NS4.0 = 2.0) +# ICONSECTIONS - Specifies icon sections when linking executable +# +# CLASSES - Class implementation files in project. +# HFILES - Header files in project. +# MFILES - Other Objective-C source files in project. +# CFILES - Other C source files in project. +# PSWFILES - .psw files in the project +# PSWMFILES - .pswm files in the project +# SUBPROJECTS - Subprojects of this project +# BUNDLES - Bundle subprojects of this project +# OTHERSRCS - Other miscellaneous sources of this project +# OTHERLINKED - Source files not matching a standard source extention +# +# LIBS - Libraries to link with when making app target +# DEBUG_LIBS - Libraries to link with when making debug target +# PROF_LIBS - Libraries to link with when making profile target +# OTHERLINKEDOFILES - Other relocatable files to (always) link in. +# +# APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles +# MAKEFILEDIR - Directory in which to find $(MAKEFILE) +# MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make) +# INSTALLDIR - Directory app will be installed into by 'install' target +# +############################################################################### + + +# Change defaults assumed by the standard makefiles here. Edit the +# following default values as appropriate. (Note that if no Makefile.postamble +# exists, these values will have defaults set in common.make). + +# Versioning of frameworks, libraries, bundles, and palettes: +#CURRENTLY_ACTIVE_VERSION = YES + # Set to "NO" to produce a compatibility binary +#DEPLOY_WITH_VERSION_NAME = A + # This should be incremented as your API changes. +#COMPATIBILITY_PROJECT_VERSION = 1 + # This should be incremented as your API grows. +#CURRENT_PROJECT_VERSION = 1 + # Defaults to using the "vers_string" hack. + +# Some compiler flags can be easily overridden here, but onlytake effect at +# the top-level: +#OPTIMIZATION_CFLAG = -O +#DEBUG_SYMBOLS_CFLAG = -g +#WARNING_CFLAGS = -Wmost +#DEBUG_BUILD_CFLAGS = -DDEBUG +#PROFILE_BUILD_CFLAGS = -pg -DPROFILE + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +# Flags passed to yacc +#YFLAGS = -d + +# Library and Framework projects only: +# 1. If you want something other than the default .dylib name, override it here +#DYLIB_INSTALL_NAME = lib$(NAME).dylib + +# 2. If you want to change the -install_name flag from the absolute path to the development area, change it here. One good choice is the installation directory. Another one might be none at all. +#DYLIB_INSTALL_DIR = $(INSTALLDIR) + +# Ownership and permissions of files installed by 'install' target +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + +# Options to strip for various project types. Note: -S strips debugging symbols +# (executables can be stripped down further with -x or, if they load no bundles, with no +# options at all). +#APP_STRIP_OPTS = -S +#TOOL_STRIP_OPTS = -S +#LIBRARY_STRIP_OPTS = -S + # for .a archives +#DYNAMIC_STRIP_OPTS = -S + # for bundles and shared libraries + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. "Official" +# user-defined rules are: +# * before_install +# * after_install +# * after_installhdrs +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# +# Note: on MS Windows, executables, have an extension, so rules and dependencies +# for generated tools should use $(EXECUTABLE_EXT) on the end. diff --git a/PCLibProj/Makefile.preamble b/PCLibProj/Makefile.preamble new file mode 100755 index 0000000..5c0a25a --- /dev/null +++ b/PCLibProj/Makefile.preamble @@ -0,0 +1,130 @@ +############################################################################### +# NeXT Makefile.preamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project. Each node in a project +# tree of sub-projects, tools, etc. should have its own Makefile.preamble and +# Makefile.postamble. +# +############################################################################### +## Configure the flags passed to $(CC) here. These flags will also be +## inherited by all nested sub-projects and bundles. Put your -I, -D, -U, and +## -L flags in ProjectBuilder's Build Options inspector if at all possible. +## To change the default flags that get passed to ${CC} +## (e.g. change -O to -O2), see Makefile.postamble. + +# Flags passed to compiler (in addition to -g, -O, etc) +OTHER_CFLAGS = +# Flags passed to ld (in addition to -ObjC, etc.) +OTHER_LDFLAGS = +# Flags passed to libtool when building libraries +OTHER_LIBTOOL_FLAGS = +# For ordering named sections on NEXTSTEP (see ld(1)) +SECTORDER_FLAGS = + +# If you do not want any headers exported before compilations begin, +# uncomment the following line. This can be a big time saver. +#SKIP_EXPORTING_HEADERS = YES + +# Stuff related to exporting headers from this project that isn't already +# handled by PB. +OTHER_PUBLIC_HEADERS = +OTHER_PROJECT_HEADERS = +OTHER_PRIVATE_HEADERS = + +# Set these two macros if you want a precomp to be built as part of +# installation. The cc -precomp will be run in the public header directory +# on the specified public header files with the specified additional flags. +PUBLIC_PRECOMPILED_HEADERS = +PUBLIC_PRECOMPILED_HEADERS_CFLAGS = + +# Set this for library projects if you want to publish header files. If your +# app or tool project exports headers Don't +# include $(DSTROOT); this is added for you automatically. +PUBLIC_HEADER_DIR = +PRIVATE_HEADER_DIR = + +# If, in a subproject, you want to append to the parent's PUBLIC_HEADER_DIR# +# (say, to add a subdirectory like "/sys"), you can use: +PUBLIC_HEADER_DIR_SUFFIX = +PRIVATE_HEADER_DIR_SUFFIX = + +# Set this for dynamic library projects on platforms where code which references +# a dynamic library must link against an import library (i.e., Windows NT) +# Don't include $(DSTROOT); this is added for you automatically. +IMPORT_LIBRARY_DIR = + +# Additional (non-localized) resources for this project, which can be generated +OTHER_RESOURCES = + +# Uncomment this to produce a static archive-style (.a) library +#LIBRARY_STYLE = STATIC + +# Set this to YES if you don't want a final libtool call for a library/framework. +BUILD_OFILES_LIST_ONLY = + +# Additional relocatables to be linked into this project +OTHER_OFILES = +# Additional libraries to link against +OTHER_LIBS = +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +## Configure how things get built here. Additional dependencies, source files, +## derived files, and build order should be specified here. + +# Other dependencies of this project +OTHER_PRODUCT_DEPENDS = +# Built *before* building subprojects/bundles +OTHER_INITIAL_TARGETS = +# Other source files maintained by .pre/postamble +OTHER_SOURCEFILES = +# Additional files to be removed by `make clean' +OTHER_GARBAGE = + +# Targets to build before installation +OTHER_INSTALL_DEPENDS = + +# More obscure flags you might want to set for pswrap, yacc, lex, etc. +PSWFLAGS = +YFLAGS = +LFLAGS = + +## Delete this line if you want fast and loose cleans that will not remove +## things like precomps and user-defined OTHER_GARBAGE in subprojects. +CLEAN_ALL_SUBPROJECTS = YES + +## Add more obscure source files here to cause them to be automatically +## processed by the appropriate tool. Note that these files should also be +## added to "Supporting Files" in ProjectBuilder. The desired .o files that +## result from these files should also be added to OTHER_OFILES above so they +## will be linked in. + +# .msg files that should have msgwrap run on them +MSGFILES = +# .defs files that should have mig run on them +DEFSFILES = +# .mig files (no .defs files) that should have mig run on them +MIGFILES = +# .x files that should have rpcgen run on them +RPCFILES = + +## Add additional Help directories here (add them to the project as "Other +## Resources" in Project Builder) so that they will be compressed into .store +## files and copied into the app wrapper. If the help directories themselves +## need to also be in the app wrapper, then a cp command will need to be added +## in an after_install target. +OTHER_HELP_DIRS = + +# After you have saved your project using the 4.0 PB, you will automatically +# start using the makefiles in /NextDeveloper/Makefiles/project. If you should +# need to revert back to the old 3.3 Makefile behavior, override MAKEFILEDIR to +# be /NextDeveloper/Makefiles/app. + +# Don't add more rules here unless you want the first one to be the default +# target for make! Put all your targets in Makefile.postamble. + diff --git a/PCLibProj/PB.project b/PCLibProj/PB.project new file mode 100755 index 0000000..51d23bb --- /dev/null +++ b/PCLibProj/PB.project @@ -0,0 +1,30 @@ +{ + APPCLASS = PCLibProj; + BUNDLE_EXTENSION = bundle; + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + CLASSES = (PCLibMakefileFactory.m, PCLibProj.m, PCLibProject.m); + FRAMEWORKS = (Foundation.framework); + H_FILES = (PCLibMakefileFactory.h, PCLibProj.h, PCLibProject.h); + INTERFACES = (LibProject.nib); + OTHER_RESOURCES = ( + GNUmakefile.postamble, + GNUmakefile.preamble, + Info.table, + LibProject.gmodel, + PC.proj + ); + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, m.template, h.template); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = {}; + MAKEFILEDIR = "$(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_INSTALLDIR = /LocalLibrary/ProjectCenter/; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/NextDeveloper/bin/make; + PROJECTNAME = PCLibProj; + PROJECTTYPE = "Loadable Bundle"; + PROJECTVERSION = 2.6; + WINDOWS_BUILDTOOL = $NEXT_ROOT/NextDeveloper/Executables/make; + WINDOWS_INSTALLDIR = /MyBundles; +} diff --git a/PCLibProj/PC.proj b/PCLibProj/PC.proj new file mode 100644 index 0000000..ed3d01c --- /dev/null +++ b/PCLibProj/PC.proj @@ -0,0 +1,28 @@ +{ + APPKIT = "GNUSTEP-GUI"; + BUILDTOOL = "gnumake"; + CLASS_FILES = (); + COMPILEROPTIONS = ""; + CREATION_DATE = ""; + DOCU_FILES = (); + FOUNDATION = "GNUSTEP-BASE"; + FRAMEWORKS = (); + HEADER_FILES = (); + LANGUAGE = "English"; + LAST_EDITING = ""; + LIBRARIES = ("gnustep-base"); + MAKEFILEDIR = "/usr/GNUstep/Makefiles"; + INSTALLDIR = "$(HOME)/Apps"; + OTHER_FILES = (); + OTHER_RESOURCES = ("Version"); + OTHER_SOURCES = (); + PROJECT_CREATOR = ""; + PROJECT_DESCRIPTION = "No description avaliable!"; + PROJECT_MAINTAINER = ""; + PROJECT_NAME = ""; + PROJECT_TYPE = "Library"; + PROJECT_BUILDER = "PCLibProj"; + PROJECT_VERSION = 1.0; + SUBPROJECTS = (); + SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); +} diff --git a/PCLibProj/PCLibMakefileFactory.h b/PCLibProj/PCLibMakefileFactory.h new file mode 100644 index 0000000..f5386a0 --- /dev/null +++ b/PCLibProj/PCLibMakefileFactory.h @@ -0,0 +1,38 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import +#import + +@interface PCLibMakefileFactory : NSObject +{ +} + ++ (PCLibMakefileFactory *)sharedFactory; + +- (NSData *)makefileForProject:(PCProject *)aProject; + +@end diff --git a/PCLibProj/PCLibMakefileFactory.m b/PCLibProj/PCLibMakefileFactory.m new file mode 100644 index 0000000..95a90ac --- /dev/null +++ b/PCLibProj/PCLibMakefileFactory.m @@ -0,0 +1,148 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCLibMakefileFactory.h" + +@implementation PCLibMakefileFactory + +static PCLibMakefileFactory *_factory = nil; + ++ (PCLibMakefileFactory *)sharedFactory +{ + if (!_factory) { + _factory = [[[self class] alloc] init]; + } + return _factory; +} + +- (NSData *)makefileForProject:(PCProject *)aProject; +{ + NSMutableString *string = [NSMutableString string]; + NSString *prName = [aProject projectName]; + NSDictionary *prDict = [aProject projectDict]; + NSString *tmp; + NSEnumerator *enumerator; + NSString *libName; + + // Header information + [string appendString:@"#\n"]; + [string appendString:@"# GNUmakefile - Generated by the ProjectCenter\n"]; + [string appendString:@"# Written by Philippe C.D. Robert \n"]; + [string appendString:@"#\n"]; + [string appendString:@"# NOTE: Do NOT change this file -- ProjectCenter maintains it!\n"]; + [string appendString:@"#\n"]; + [string appendString:@"# Put all of your customisations in GNUmakefile.preamble and\n"]; + [string appendString:@"# GNUmakefile.postamble\n"]; + [string appendString:@"#\n\n"]; + + // The 'real' thing + [string appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"]; + [string appendString:@"include English.lproj/Version\n"]; + + [string appendString:@"#\n\n"]; + [string appendString:@"# Subprojects\n"]; + [string appendString:@"#\n\n"]; + + if ([[aProject subprojects] count]) { + enumerator = [[prDict objectForKey:PCSubprojects] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + } + + [string appendString:@"#\n"]; + [string appendString:@"# Library\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"PACKAGE_NAME=%@\n",prName]]; + [string appendString:[NSString stringWithFormat:@"LIBRARY_VAR=%@\n",[prName uppercaseString]]]; + libName = [NSString stringWithFormat:@"lib%@",prName]; + [string appendString:[NSString stringWithFormat:@"LIBRARY_NAME=%@\n",libName]]; + + // Install path + [string appendString:[NSString stringWithFormat:@"%@_INSTALL_PREFIX=$(GNUSTEP_SYSTEM_ROOT)\n",[prName uppercaseString]]]; + + [string appendString:@"#\n\n"]; + [string appendString:@"# Additional libraries\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_ADDITIONAL_TOOL_LIBS += ",prName]]; + + if ([[prDict objectForKey:PCLibraries] count]) { + enumerator = [[prDict objectForKey:PCLibraries] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + if (![tmp isEqualToString:@"gnustep-base"]) { + [string appendString:[NSString stringWithFormat:@"-l%@ ",tmp]]; + } + } + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Header files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_HEADERS= ",libName]]; + + enumerator = [[prDict objectForKey:PCHeaders] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Class files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_OBJC_FILES= ",libName]]; + + enumerator = [[prDict objectForKey:PCClasses] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# C files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_C_FILES= ",libName]]; + + enumerator = [[prDict objectForKey:PCOtherSources] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_HEADER_FILES_INSTALL_DIR=/%@\n",libName,prName]]; + + [string appendString:@"-include GNUmakefile.preamble\n"]; + [string appendString:@"-include GNUmakefile.local\n"]; + [string appendString:@"include $(GNUSTEP_MAKEFILES)/library.make\n"]; + [string appendString:@"-include GNUmakefile.postamble\n"]; + + return [string dataUsingEncoding:[NSString defaultCStringEncoding]]; +} + +@end diff --git a/PCLibProj/PCLibProj.h b/PCLibProj/PCLibProj.h new file mode 100644 index 0000000..7b45ac5 --- /dev/null +++ b/PCLibProj/PCLibProj.h @@ -0,0 +1,48 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import +#import + +@interface PCLibProj : NSObject +{ +} + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator; + +- (Class)projectClass; + +- (NSString *)projectTypeName; +- (NSDictionary *)typeTable; + +- (PCProject *)createProjectAt:(NSString *)path; +- (PCProject *)openProjectAt:(NSString *)path; + +@end diff --git a/PCLibProj/PCLibProj.m b/PCLibProj/PCLibProj.m new file mode 100644 index 0000000..009d01a --- /dev/null +++ b/PCLibProj/PCLibProj.m @@ -0,0 +1,134 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + PCLibProj creates new project of the type Application! + +*/ + +#import "PCLibProj.h" +#import "PCLibProject.h" + +@implementation PCLibProj + +static NSString *_projTypeName = @"Library"; +static PCLibProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) { + _creator = [[[self class] alloc] init]; + } + return _creator; +} + +- (Class)projectClass +{ + return [PCLibProject class]; +} + +- (NSString *)projectTypeName +{ + return _projTypeName; +} + +- (NSDictionary *)typeTable +{ + NSString *_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" ofType:@"table"]; + + return [NSDictionary dictionaryWithContentsOfFile:_path]; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCLibProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath:path attributes:nil]) { + NSString *_file; + NSString *_resourcePath; + NSMutableDictionary *dict; + + project = [[[PCLibProject alloc] init] autorelease]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"PC" ofType:@"proj"]; + dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + [dict setObject:[path lastPathComponent] forKey:PCProjectName]; + [dict setObject:[project principalClass] forKey:PCProjType]; + + // Save the project to disc + [dict writeToFile:[path stringByAppendingPathComponent:@"PC.project"] atomically:YES]; + + // Copy the project files to the provided path + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"postamble"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"preamble"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"main" ofType:@"m"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"main.m"] handler:nil]; + + // Resources + _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath attributes:nil]; + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] attributes:nil]; + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"Version" ofType:@""]; + [fm copyPath:_file toPath:[_resourcePath stringByAppendingPathComponent:@"Version"] handler:nil]; + + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + + // Set the new dictionary - this causes the GNUmakefile to be written to disc + if(![project assignProjectDict:dict]) { + NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); + return nil; + } + } + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + + if ([[dict objectForKey:PCProjectBuilderClass] isEqualToString:@"PCLibProj"]) { + return [[[PCLibProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; + } + return nil; +} + +@end diff --git a/PCLibProj/PCLibProject.h b/PCLibProj/PCLibProject.h new file mode 100644 index 0000000..1633041 --- /dev/null +++ b/PCLibProj/PCLibProject.h @@ -0,0 +1,65 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + This is the project type 'Application' for GNUstep. You never should create it yourself but + use PCLibProj for doing this. Otherwise needed files don't get copied to the right place. + + */ + +#import +#import + +@interface PCLibProject : PCProject +{ + @private + BOOL _needsAdditionalReleasing; +} + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init; +- (void)dealloc; + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (BOOL)writeMakefile; + +- (BOOL)isValidDictionary:(NSDictionary *)aDict; + +- (NSArray *)sourceFileKeys; +- (NSArray *)resourceFileKeys; +- (NSArray *)otherKeys; +- (NSArray *)buildTargets; +- (NSString *)projectDescription; + +@end diff --git a/PCLibProj/PCLibProject.m b/PCLibProj/PCLibProject.m new file mode 100644 index 0000000..ef2a37c --- /dev/null +++ b/PCLibProj/PCLibProject.m @@ -0,0 +1,172 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCLibProject.h" +#import "PCLibMakefileFactory.h" + +#import + +#if defined(GNUSTEP) +#import +#endif + +@interface PCLibProject (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCLibProject (CreateUI) + +- (void)_initUI +{ + // Always call super!!! + [super _initUI]; + + projectAttributeInspectorView = [[NSBox alloc] init]; + [projectAttributeInspectorView setTitlePosition:NSAtTop]; + [projectAttributeInspectorView setBorderType:NSGrooveBorder]; + // [projectAttributeInspectorView addSubview:projectTypePopup]; + [projectAttributeInspectorView sizeToFit]; + [projectAttributeInspectorView setAutoresizingMask:NSViewWidthSizable]; + + projectProjectInspectorView = [[NSBox alloc] init]; + [projectProjectInspectorView setTitlePosition:NSAtTop]; + [projectProjectInspectorView setBorderType:NSGrooveBorder]; + // [projectProjectInspectorView addSubview:projectTypePopup]; + [projectProjectInspectorView sizeToFit]; + [projectProjectInspectorView setAutoresizingMask:NSViewWidthSizable]; + + projectFileInspectorView = [[NSBox alloc] init]; + [projectFileInspectorView setTitlePosition:NSAtTop]; + [projectFileInspectorView setBorderType:NSGrooveBorder]; + // [projectFileInspectorView addSubview:projectTypePopup]; + [projectFileInspectorView sizeToFit]; + [projectFileInspectorView setAutoresizingMask:NSViewWidthSizable]; + + _needsAdditionalReleasing = YES; +} + +@end + +@implementation PCLibProject + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) { + rootCategories = [[NSDictionary dictionaryWithObjectsAndKeys:PCClasses,@"Classes",PCHeaders,@"Headers",PCOtherSources,@"Other Sources",PCOtherResources,@"Other Resources", PCSubprojects, @"Subprojects", PCLibraries, @"Libraries",PCDocuFiles,@"Documentation",nil] retain]; + + _needsAdditionalReleasing = NO; + +#if defined(GNUSTEP) + [self _initUI]; +#else + if(![NSBundle loadNibNamed:@"LibProject.nib" owner:self]) { + [[NSException exceptionWithName:NIB_NOT_FOUND_EXCEPTION reason:@"Could not load LibProject.gmodel" userInfo:nil] raise]; + return nil; + } +#endif + } + return self; +} + +- (void)dealloc +{ + [rootCategories release]; + + if (_needsAdditionalReleasing) { + [projectAttributeInspectorView release]; + [projectProjectInspectorView release]; + [projectFileInspectorView release]; + } + + [super dealloc]; +} + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (BOOL)writeMakefile +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *makefile = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + NSData *content; + + if (![super writeMakefile]) { + NSLog(@"Couldn't update PC.project..."); + } + + if (![fm movePath:makefile toPath:[projectPath stringByAppendingPathComponent:@"GNUmakefile~"] handler:nil]) { + NSLog(@"Couldn't write a backup GNUmakefile..."); + } + + if (!(content = [[PCLibMakefileFactory sharedFactory] makefileForProject:self])) { + NSLog([NSString stringWithFormat:@"Couldn't build the GNUmakefile %@!",makefile]); + return NO; + } + if (![content writeToFile:makefile atomically:YES]) { + NSLog([NSString stringWithFormat:@"Couldn't write the GNUmakefile %@!",makefile]); + return NO; + } + return YES; +} + +- (BOOL)isValidDictionary:(NSDictionary *)aDict +{ +#warning No project check implemented, yet! + return YES; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray array]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; +} + +- (NSArray *)buildTargets +{ +} + +- (NSString *)projectDescription +{ + return @"Project that handles GNUstep/ObjC based libraries."; +} + +@end diff --git a/PCLibProj/Version b/PCLibProj/Version new file mode 100644 index 0000000..c8601c2 --- /dev/null +++ b/PCLibProj/Version @@ -0,0 +1,12 @@ +# 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.8.0 + +# 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} diff --git a/PCLibProj/h.template b/PCLibProj/h.template new file mode 100644 index 0000000..7b523c7 --- /dev/null +++ b/PCLibProj/h.template @@ -0,0 +1,11 @@ +$$ +/* $FILENAME$ created by $USERNAME$ on $DATE$ */ + +#import + +@interface $FILENAMESANSEXTENSION$ : NSObject +{ + +} + +@end diff --git a/PCLibProj/m.template b/PCLibProj/m.template new file mode 100644 index 0000000..1216fe5 --- /dev/null +++ b/PCLibProj/m.template @@ -0,0 +1,18 @@ +$$ Lines starting with $$ are not inserted into newly created files +$$ The following substitutions are made: +$$ +$$ $FILENAME$ e.g. foo.m +$$ $FILENAMESANSEXTENSION$ e.g. foo +$$ $DIRECTORY$ e.g. /tmp/MyNewApp +$$ $PROJECTNAME$ e.g. MyNewApp +$$ $SUBPROJECTNAME$ e.g. TheGoodPart.subproj +$$ $USERNAME$ e.g. mwagner +$$ $DATE$ e.g. Jan-1-1994 +$$ +/* $FILENAME$ created by $USERNAME$ on $DATE$ */ + +#import "$FILENAMESANSEXTENSION$.h" + +@implementation $FILENAMESANSEXTENSION$ + +@end diff --git a/PCToolProj/GNUmakefile b/PCToolProj/GNUmakefile new file mode 100644 index 0000000..58a3f91 --- /dev/null +++ b/PCToolProj/GNUmakefile @@ -0,0 +1,52 @@ +# GNUmakefile +# +# Copyright (C) 2000 Philippe C.D. Robert +# +# Author: Philippe C.D. Robert +# Date: 2000 +# +# This file is part of ProjectCenter +# +# 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 02139, USA. + +include $(GNUSTEP_MAKEFILES)/common.make + +BUNDLE_NAME = PCToolProj +BUNDLE_EXTENSION =.bundle +BUNDLE_INSTALL_DIR =$(GNUSTEP_LOCAL_ROOT)/Library/ProjectCenter/ + +PCToolProj_OBJC_FILES = \ + PCToolProj.m \ + PCToolMakefileFactory.m \ + PCToolProject.m + +PCToolProj_HEADERS= \ + PCToolMakefileFactory.h \ + PCToolProj.h \ + PCToolProject.h + +PCToolProj_PRINCIPAL_CLASS = PCToolProj + +PCToolProj_RESOURCE_FILES = \ + main.m \ + PC.proj \ + Info-project.plist + +-include GNUmakefile.preamble + +include $(GNUSTEP_MAKEFILES)/bundle.make + +-include GNUmakefile.postamble + diff --git a/PCToolProj/GNUmakefile.postamble b/PCToolProj/GNUmakefile.postamble new file mode 100644 index 0000000..c85b08f --- /dev/null +++ b/PCToolProj/GNUmakefile.postamble @@ -0,0 +1,30 @@ +# +# Makefile.postamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# 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. + + + + diff --git a/PCToolProj/GNUmakefile.preamble b/PCToolProj/GNUmakefile.preamble new file mode 100644 index 0000000..f61a96d --- /dev/null +++ b/PCToolProj/GNUmakefile.preamble @@ -0,0 +1,74 @@ +# +# Makefile.preamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# If you are interested in a warranty or support for this source code, +# contact Scott Christley at scottc@net-community.com +# +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. +# If not, write to the Free Software Foundation, +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# +# Makefile.preamble +# +# Project specific makefile variables, and additional +# +# Do not put any Makefile rules in this file, instead they should +# be put into Makefile.postamble. +# + +# +# Flags dealing with compiling and linking +# + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += +#ADDITIONAL_CFLAGS += + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += + +# Additional LDFLAGS to pass to the linker +ADDITIONAL_LDFLAGS += -lPC + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS += + +# +# Local configuration +# + + + diff --git a/PCToolProj/Info-project.plist b/PCToolProj/Info-project.plist new file mode 100644 index 0000000..aaa95fe --- /dev/null +++ b/PCToolProj/Info-project.plist @@ -0,0 +1,12 @@ +{ + NOTE = "Automatically generated, do not edit!"; + ToolName = ""; + ToolDescription = ""; + ToolIcon = ""; + ToolRelease = ""; + FullVersionID = ""; + Authors = (); + URL = ""; + Copyright = ""; + CopyrightDescription = ""; +} diff --git a/PCToolProj/Info.table b/PCToolProj/Info.table new file mode 100644 index 0000000..d516b0c --- /dev/null +++ b/PCToolProj/Info.table @@ -0,0 +1,29 @@ +{ + AdditionalAttributes = { + PrincipalClass = {ATTR_CLASS_NAME = "NSString";}; + }; + Allowable_SubprojectTypes = (Subproject, Bundle, Tool); + AttributesInspector = ToolInspector; + DefaultExtension = ""; + Default_Localizable_Keys = (INTERFACES); + GeneratedFiles = (Makefile, iconHeader); + INSTALLFLAGS = "-c -s -m 755"; + InfoName = ""; + Localizable_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES, HELP_RESOURCES); + MAKEFILE = tool.make; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + Other_Keys = (HELP_RESOURCES, OTHER_SOURCES, FRAMEWORKS, OTHER_LIBS); + PBProjectTypeSubClass = "PBApplicationProjectType"; + ProvidesIcons = Yes; + Public_Keys = (H_FILES); + Resource_Keys = (INTERFACES, IMAGES, OTHER_RESOURCES); + SOURCEMODE = 444; + Source_Keys = (CLASSES, H_FILES, OTHER_LINKED); + Subproj_Keys = (SUBPROJECTS); + Targets = (app, debug, profile, install); + ExecutableResults = ( + "$PROJECTNAME$.app/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.debug/$PROJECTNAME$$EXECUTABLE_EXT$", + "$PROJECTNAME$.profile/$PROJECTNAME$$EXECUTABLE_EXT$" + ); +} diff --git a/PCToolProj/PC.proj b/PCToolProj/PC.proj new file mode 100644 index 0000000..19cc7d6 --- /dev/null +++ b/PCToolProj/PC.proj @@ -0,0 +1,30 @@ +{ + TOOLICON = ""; + BUILDTOOL = "gnumake"; + CLASS_FILES = ("main.m"); + COMPILEROPTIONS = ""; + CREATION_DATE = ""; + DOCU_FILES = (); + FOUNDATION = "GNUSTEP-BASE"; + FRAMEWORKS = (); + HEADER_FILES = (); + IMAGES = (); + LANGUAGE = "English"; + LAST_EDITING = ""; + LIBRARIES = ("gnustep-base"); + MAKEFILEDIR = "/usr/GNUstep/Makefiles"; + INSTALLDIR = "$(HOME)/Tools"; + OTHER_FILES = (); + OTHER_RESOURCES = (); + OTHER_SOURCES = (); + PRINCIPAL_CLASS = "main.m"; + PROJECT_CREATOR = ""; + PROJECT_DESCRIPTION = "No description avaliable!"; + PROJECT_MAINTAINER = ""; + PROJECT_NAME = ""; + PROJECT_TYPE = "Tool"; + PROJECT_BUILDER = "PCToolProj"; + PROJECT_VERSION = 1.0; + SUBPROJECTS = (); + SUPPORTING_FILES = ("GNUmakefile.preamble", "GNUmakefile", "GNUmakefile.postamble"); +} diff --git a/PCToolProj/PCToolMakefileFactory.h b/PCToolProj/PCToolMakefileFactory.h new file mode 100644 index 0000000..b9c12ca --- /dev/null +++ b/PCToolProj/PCToolMakefileFactory.h @@ -0,0 +1,38 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import +#import + +@interface PCToolMakefileFactory : NSObject +{ +} + ++ (PCToolMakefileFactory *)sharedFactory; + +- (NSData *)makefileForProject:(PCProject *)aProject; + +@end diff --git a/PCToolProj/PCToolMakefileFactory.m b/PCToolProj/PCToolMakefileFactory.m new file mode 100644 index 0000000..55b6eaf --- /dev/null +++ b/PCToolProj/PCToolMakefileFactory.m @@ -0,0 +1,157 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCToolMakefileFactory.h" + +@implementation PCToolMakefileFactory + +static PCToolMakefileFactory *_factory = nil; + ++ (PCToolMakefileFactory *)sharedFactory +{ + if (!_factory) { + _factory = [[[self class] alloc] init]; + } + return _factory; +} + +- (NSData *)makefileForProject:(PCProject *)aProject; +{ + NSMutableString *string = [NSMutableString string]; + NSString *prName = [aProject projectName]; + NSDictionary *prDict = [aProject projectDict]; + NSString *tmp; + NSEnumerator *enumerator; + int i; + + // Header information + [string appendString:@"#\n"]; + [string appendString:@"# GNUmakefile - Generated by the ProjectCenter\n"]; + [string appendString:@"# Written by Philippe C.D. Robert \n"]; + [string appendString:@"#\n"]; + [string appendString:@"# NOTE: Do NOT change this file -- ProjectCenter maintains it!\n"]; + [string appendString:@"#\n"]; + [string appendString:@"# Put all of your customisations in GNUmakefile.preamble and\n"]; + [string appendString:@"# GNUmakefile.postamble\n"]; + [string appendString:@"#\n\n"]; + + // The 'real' thing + [string appendString:@"include $(GNUSTEP_MAKEFILES)/common.make\n"]; + + [string appendString:@"#\n\n"]; + [string appendString:@"# Subprojects\n"]; + [string appendString:@"#\n\n"]; + + if ([[aProject subprojects] count]) { + enumerator = [[prDict objectForKey:PCSubprojects] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + } + + [string appendString:@"#\n"]; + [string appendString:@"# Tool\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"TOOL_NAME=%@\n",prName]]; + // [string appendString:[NSString stringWithFormat:@"%@_PRINCIPAL_CLASS=%@\n",prName,[prDict objectForKey:PCPrincipalClass]]]; + [string appendString:[NSString stringWithFormat:@"%@_TOOL_ICON=%@\n",prName, [prDict objectForKey:PCToolIcon]]]; + + [string appendString:@"#\n\n"]; + [string appendString:@"# Additional libraries\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_ADDITIONAL_TOOL_LIBS += ",prName]]; + + if ([[prDict objectForKey:PCLibraries] count]) { + enumerator = [[prDict objectForKey:PCLibraries] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + if (![tmp isEqualToString:@"gnustep-base"]) { + [string appendString:[NSString stringWithFormat:@"-l%@ ",tmp]]; + } + } + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Resource files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_RESOURCE_FILES= ",prName]]; + + for (i=0;i<[[aProject resourceFileKeys] count];i++) { + NSString *k = [[aProject resourceFileKeys] objectAtIndex:i]; + + enumerator = [[prDict objectForKey:k] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Header files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_HEADERS= ",prName]]; + + enumerator = [[prDict objectForKey:PCHeaders] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# Class files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_OBJC_FILES= ",prName]]; + + enumerator = [[prDict objectForKey:PCClasses] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n#\n\n"]; + [string appendString:@"# C files\n"]; + [string appendString:@"#\n\n"]; + + [string appendString:[NSString stringWithFormat:@"%@_C_FILES= ",prName]]; + + enumerator = [[prDict objectForKey:PCOtherSources] objectEnumerator]; + while (tmp = [enumerator nextObject]) { + [string appendString:[NSString stringWithFormat:@"\\\n%@ ",tmp]]; + } + + [string appendString:@"\n\n"]; + + [string appendString:@"-include GNUmakefile.preamble\n"]; + [string appendString:@"-include GNUmakefile.local\n"]; + [string appendString:@"include $(GNUSTEP_MAKEFILES)/aggregate.make\n"]; + [string appendString:@"include $(GNUSTEP_MAKEFILES)/tool.make\n"]; + [string appendString:@"-include GNUmakefile.postamble\n"]; + + return [string dataUsingEncoding:[NSString defaultCStringEncoding]]; +} + +@end diff --git a/PCToolProj/PCToolProj.h b/PCToolProj/PCToolProj.h new file mode 100644 index 0000000..9c718d9 --- /dev/null +++ b/PCToolProj/PCToolProj.h @@ -0,0 +1,48 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import +#import + +@interface PCToolProj : NSObject +{ +} + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator; + +- (Class)projectClass; + +- (NSString *)projectTypeName; +- (NSDictionary *)typeTable; + +- (PCProject *)createProjectAt:(NSString *)path; +- (PCProject *)openProjectAt:(NSString *)path; + +@end diff --git a/PCToolProj/PCToolProj.m b/PCToolProj/PCToolProj.m new file mode 100644 index 0000000..72409bf --- /dev/null +++ b/PCToolProj/PCToolProj.m @@ -0,0 +1,137 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + PCToolProj creates new project of the type Application! + +*/ + +#import "PCToolProj.h" +#import "PCToolProject.h" + +@implementation PCToolProj + +static NSString *_projTypeName = @"Tool"; +static PCToolProj *_creator = nil; + +//---------------------------------------------------------------------------- +// ProjectType +//---------------------------------------------------------------------------- + ++ (id)sharedCreator +{ + if (!_creator) { + _creator = [[[self class] alloc] init]; + } + return _creator; +} + +- (Class)projectClass +{ + return [PCToolProject class]; +} + +- (NSString *)projectTypeName +{ + return _projTypeName; +} + +- (NSDictionary *)typeTable +{ + NSString *_path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Info" ofType:@"table"]; + + return [NSDictionary dictionaryWithContentsOfFile:_path]; +} + +- (PCProject *)createProjectAt:(NSString *)path +{ + PCToolProject *project = nil; + NSFileManager *fm = [NSFileManager defaultManager]; + + NSAssert(path,@"No valid project path provided!"); + + if ([fm createDirectoryAtPath:path attributes:nil]) { + NSString *_file; + NSString *_resourcePath; + NSMutableDictionary *dict; + + project = [[[PCToolProject alloc] init] autorelease]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"PC" ofType:@"proj"]; + dict = [NSMutableDictionary dictionaryWithContentsOfFile:_file]; + + // Customise the project + [dict setObject:[path lastPathComponent] forKey:PCProjectName]; + [dict setObject:[project principalClass] forKey:PCProjType]; + + // Save the project to disc + [dict writeToFile:[path stringByAppendingPathComponent:@"PC.project"] atomically:YES]; + + // Copy the project files to the provided path + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"postamble"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.postamble"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"GNUmakefile" ofType:@"preamble"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"GNUmakefile.preamble"] handler:nil]; + + _file = [[NSBundle bundleForClass:[self class]] pathForResource:@"main" ofType:@"m"]; + [fm copyPath:_file toPath:[path stringByAppendingPathComponent:@"main.m"] handler:nil]; + + // Resources + _resourcePath = [path stringByAppendingPathComponent:@"English.lproj"]; + [fm createDirectoryAtPath:_resourcePath attributes:nil]; + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Images"] attributes:nil]; + [fm createDirectoryAtPath:[path stringByAppendingPathComponent:@"Documentation"] attributes:nil]; + + // The path cannot be in the PC.project file! + [project setProjectPath:path]; + + // Set the new dictionary - this causes the GNUmakefile to be written + if(![project assignProjectDict:dict]) { + NSRunAlertPanel(@"Attention!",@"Could not load %@!",@"OK",nil,nil,path); + return nil; + } + } + return project; +} + +- (PCProject *)openProjectAt:(NSString *)path +{ + NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; + id obj; + + NSLog(@"<%@ %x>: opening project at %@",[self class],self,path); + + obj = [dict objectForKey:PCProjectBuilderClass]; + if ([obj isEqualToString:@"PCToolProj"]) { + return [[[PCToolProject alloc] initWithProjectDictionary:dict path:[path stringByDeletingLastPathComponent]] autorelease]; + } + return nil; +} + +@end diff --git a/PCToolProj/PCToolProject.h b/PCToolProj/PCToolProject.h new file mode 100644 index 0000000..9f304ac --- /dev/null +++ b/PCToolProj/PCToolProject.h @@ -0,0 +1,67 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +/* + Description: + + This is the project type '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. + + */ + +#import +#import + +@interface PCToolProject : PCProject +{ + @private + BOOL _needsAdditionalReleasing; +} + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init; +- (void)dealloc; + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (BOOL)writeMakefile; + +- (BOOL)isValidDictionary:(NSDictionary *)aDict; + +- (NSArray *)sourceFileKeys; +- (NSArray *)resourceFileKeys; +- (NSArray *)otherKeys; +- (NSArray *)buildTargets; +- (NSString *)projectDescription; + +@end + diff --git a/PCToolProj/PCToolProject.m b/PCToolProj/PCToolProject.m new file mode 100644 index 0000000..d14cda5 --- /dev/null +++ b/PCToolProj/PCToolProject.m @@ -0,0 +1,179 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCToolProject.h" +#import "PCToolMakefileFactory.h" + +#import + +#if defined(GNUSTEP) +#import +#endif + +@interface PCToolProject (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCToolProject (CreateUI) + +- (void)_initUI +{ + // Always call super!!! + [super _initUI]; + + projectAttributeInspectorView = [[NSBox alloc] init]; + [projectAttributeInspectorView setTitlePosition:NSAtTop]; + [projectAttributeInspectorView setBorderType:NSGrooveBorder]; + // [projectAttributeInspectorView addSubview:projectTypePopup]; + [projectAttributeInspectorView sizeToFit]; + [projectAttributeInspectorView setAutoresizingMask:NSViewWidthSizable]; + + projectProjectInspectorView = [[NSBox alloc] init]; + [projectProjectInspectorView setTitlePosition:NSAtTop]; + [projectProjectInspectorView setBorderType:NSGrooveBorder]; + // [projectProjectInspectorView addSubview:projectTypePopup]; + [projectProjectInspectorView sizeToFit]; + [projectProjectInspectorView setAutoresizingMask:NSViewWidthSizable]; + + projectFileInspectorView = [[NSBox alloc] init]; + [projectFileInspectorView setTitlePosition:NSAtTop]; + [projectFileInspectorView setBorderType:NSGrooveBorder]; + // [projectFileInspectorView addSubview:projectTypePopup]; + [projectFileInspectorView sizeToFit]; + [projectFileInspectorView setAutoresizingMask:NSViewWidthSizable]; + + _needsAdditionalReleasing = YES; +} + +@end + +@implementation PCToolProject + +//---------------------------------------------------------------------------- +// Init and free +//---------------------------------------------------------------------------- + +- (id)init +{ + if ((self = [super init])) { + rootCategories = [[NSDictionary dictionaryWithObjectsAndKeys: + PCImages,@"Images", + PCOtherResources,@"Other Resources", + PCSubprojects,@"Subprojects", + PCLibraries,@"Libraries", + PCDocuFiles,@"Documentation", + PCOtherSources,@"Other Sources", + PCHeaders,@"Headers", + PCClasses,@"Classes", + nil] retain]; + +#if defined(GNUSTEP) + [self _initUI]; +#else + if(![NSBundle loadNibNamed:@"ToolProject.nib" owner:self]) { + [[NSException exceptionWithName:NIB_NOT_FOUND_EXCEPTION reason:@"Could not load ToolProject.gmodel" userInfo:nil] raise]; + return nil; + } +#endif + } + return self; +} + +- (void)dealloc +{ + [rootCategories release]; + + if (_needsAdditionalReleasing) { + [projectAttributeInspectorView release]; + [projectProjectInspectorView release]; + [projectFileInspectorView release]; + } + + [super dealloc]; +} + +//---------------------------------------------------------------------------- +// Project +//---------------------------------------------------------------------------- + +- (BOOL)writeMakefile +{ + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *makefile = [projectPath stringByAppendingPathComponent:@"GNUmakefile"]; + NSData *content; + + if (![super writeMakefile]) { + NSLog(@"<%@ %x>: Couldn't update PC.project...",[self class],self); + } + + if (![fm movePath:makefile toPath:[projectPath stringByAppendingPathComponent:@"GNUmakefile~"] handler:nil]) { + NSLog(@"Couldn't write a backup GNUmakefile..."); + } + + if (!(content = [[PCToolMakefileFactory sharedFactory] makefileForProject:self])) { + NSLog([NSString stringWithFormat:@"Couldn't build the GNUmakefile %@!",makefile]); + return NO; + } + if (![content writeToFile:makefile atomically:YES]) { + NSLog([NSString stringWithFormat:@"Couldn't write the GNUmakefile %@!",makefile]); + return NO; + } + return YES; +} + +- (BOOL)isValidDictionary:(NSDictionary *)aDict +{ +#warning No project check implemented, yet! + return YES; +} + +- (NSArray *)sourceFileKeys +{ + return [NSArray arrayWithObjects:PCClasses,PCOtherSources,nil]; +} + +- (NSArray *)resourceFileKeys +{ + return [NSArray arrayWithObjects:PCOtherResources,PCImages,nil]; +} + +- (NSArray *)otherKeys +{ + return [NSArray arrayWithObjects:PCDocuFiles,PCSupportingFiles,nil]; +} + +- (NSArray *)buildTargets +{ +} + +- (NSString *)projectDescription +{ + return @"Project that handles GNUstep/ObjC based tools."; +} + +@end diff --git a/PCToolProj/h.template b/PCToolProj/h.template new file mode 100644 index 0000000..7b523c7 --- /dev/null +++ b/PCToolProj/h.template @@ -0,0 +1,11 @@ +$$ +/* $FILENAME$ created by $USERNAME$ on $DATE$ */ + +#import + +@interface $FILENAMESANSEXTENSION$ : NSObject +{ + +} + +@end diff --git a/PCToolProj/m.template b/PCToolProj/m.template new file mode 100644 index 0000000..1216fe5 --- /dev/null +++ b/PCToolProj/m.template @@ -0,0 +1,18 @@ +$$ Lines starting with $$ are not inserted into newly created files +$$ The following substitutions are made: +$$ +$$ $FILENAME$ e.g. foo.m +$$ $FILENAMESANSEXTENSION$ e.g. foo +$$ $DIRECTORY$ e.g. /tmp/MyNewApp +$$ $PROJECTNAME$ e.g. MyNewApp +$$ $SUBPROJECTNAME$ e.g. TheGoodPart.subproj +$$ $USERNAME$ e.g. mwagner +$$ $DATE$ e.g. Jan-1-1994 +$$ +/* $FILENAME$ created by $USERNAME$ on $DATE$ */ + +#import "$FILENAMESANSEXTENSION$.h" + +@implementation $FILENAMESANSEXTENSION$ + +@end diff --git a/PCToolProj/main.m b/PCToolProj/main.m new file mode 100644 index 0000000..17e0a17 --- /dev/null +++ b/PCToolProj/main.m @@ -0,0 +1,13 @@ +#import + +int main(int argc, const char *argv[]) { + id pool = [[NSAutoreleasePool alloc] init]; + + // Your code here... + + // The end... + [pool release]; + + exit(0); + return 0; +} diff --git a/ProjectCenter/English.lproj/ProjectCenter.gmodel b/ProjectCenter/English.lproj/ProjectCenter.gmodel new file mode 100755 index 0000000..17573e3 --- /dev/null +++ b/ProjectCenter/English.lproj/ProjectCenter.gmodel @@ -0,0 +1,1734 @@ +{ + "Object 1" = { + elements = ( + "Object 2", + "Object 114", + "Object 115", + "Object 116", + "Object 117", + "Object 118", + "Object 119", + "Object 120", + "Object 121", + "Object 122" + ); + isa = NSMutableArray; + }; + "Object 2" = {className = NSApplication; isa = IMCustomObject; realObject = "Object 3"; }; + "Object 3" = { + delegate = nil; + isa = NSApplication; + keyWindow = nil; + mainMenu = "Object 11"; + mainWindow = nil; + windows = "Object 4"; + }; + "Object 4" = {elements = ("Object 5", "Object 9"); isa = NSMutableArray; }; + "Object 5" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 256; height = 128}"; + contentView = "Object 6"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 6" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 256; height = 128}"; + frame = "{x = 0; y = 0; width = 256; height = 128}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 5"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 7" = {elements = (); isa = NSMutableArray; }; + "Object 8" = { + alpha = 1.000000; + blue = 0.666667; + brightness = 0.666667; + colorSpaceName = NSCalibratedRGBColorSpace; + green = 0.666667; + hue = 0.000000; + isa = NSColor; + red = 0.666667; + saturation = 0.000000; + }; + "Object 9" = { + backgroundColor = "Object 8"; + backingType = 0; + contentFrame = "{x = 0; y = 0; width = 193; height = 208}"; + contentView = "Object 10"; + frameAutosaveName = nil; + hidesOnDeactivate = NO; + initialFirstResponder = nil; + isAutodisplay = NO; + isReleasedWhenClosed = NO; + isVisible = NO; + isa = NSWindow; + level = 0; + maxSize = "{width = 3.40282e+38; height = 3.40282e+38}"; + minSize = "{width = 0; height = 0}"; + representedFilename = ""; + styleMask = 0; + title = ""; + }; + "Object 10" = { + autoresizesSubviews = YES; + autoresizingMask = 0; + bounds = "{x = 0; y = 0; width = 193; height = 208}"; + frame = "{x = 0; y = 0; width = 193; height = 208}"; + interfaceStyle = 0; + isa = NSView; + nextKeyView = nil; + nextResponder = "Object 9"; + postsBoundsChangedNotifications = YES; + postsFrameChangedNotifications = YES; + previousKeyView = nil; + subviews = "Object 7"; + superview = nil; + }; + "Object 11" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 12"; + title = ProjectCenter; + }; + "Object 12" = { + elements = ( + "Object 13", + "Object 20", + "Object 36", + "Object 46", + "Object 53", + "Object 98", + "Object 104", + "Object 110", + "Object 112", + "Object 113" + ); + isa = NSMutableArray; + }; + "Object 13" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 15"; + title = Info; + }; + "Object 14" = {isa = NSImage; name = NSMenuArrow; size = "{width = 7; height = 9}"; }; + "Object 15" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 16"; + title = Info; + }; + "Object 16" = { + elements = ("Object 17", "Object 18", "Object 19"); + isa = NSMutableArray; + }; + "Object 17" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Info Panel..."; + }; + "Object 18" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Preferences...; + }; + "Object 19" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = "?"; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Help...; + }; + "Object 20" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 21"; + title = Project; + }; + "Object 21" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 22"; + title = Project; + }; + "Object 22" = { + elements = ( + "Object 23", + "Object 24", + "Object 25", + "Object 26", + "Object 27", + "Object 28", + "Object 29", + "Object 30" + ); + isa = NSMutableArray; + }; + "Object 23" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = o; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Open...; + }; + "Object 24" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = n; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = New; + }; + "Object 25" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = s; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Save; + }; + "Object 26" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = S; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Save As..."; + }; + "Object 27" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Save All"; + }; + "Object 28" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Revert to Saved"; + }; + "Object 29" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Close; + }; + "Object 30" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 31"; + title = Subproject; + }; + "Object 31" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 32"; + title = Subproject; + }; + "Object 32" = { + elements = ("Object 33", "Object 34", "Object 35"); + isa = NSMutableArray; + }; + "Object 33" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Add; + }; + "Object 34" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = New; + }; + "Object 35" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Remove; + }; + "Object 36" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 37"; + title = File; + }; + "Object 37" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 38"; + title = File; + }; + "Object 38" = { + elements = ( + "Object 39", + "Object 40", + "Object 41", + "Object 42", + "Object 43", + "Object 44", + "Object 45" + ); + isa = NSMutableArray; + }; + "Object 39" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = O; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Open; + }; + "Object 40" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = A; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Add File"; + }; + "Object 41" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = N; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "New in Project"; + }; + "Object 42" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Remove File"; + }; + "Object 43" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Save; + }; + "Object 44" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Save As..."; + }; + "Object 45" = { + action = nil; + image = nil; + isEnabled = NO; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Revert to Saved"; + }; + "Object 46" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 47"; + title = Edit; + }; + "Object 47" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 48"; + title = Edit; + }; + "Object 48" = { + elements = ("Object 49", "Object 50", "Object 51", "Object 52"); + isa = NSMutableArray; + }; + "Object 49" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = x; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Cut; + }; + "Object 50" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = c; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Copy; + }; + "Object 51" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = v; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Paste; + }; + "Object 52" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = a; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Select All"; + }; + "Object 53" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 54"; + title = Format; + }; + "Object 54" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 55"; + title = Format; + }; + "Object 55" = { + elements = ("Object 56", "Object 87", "Object 97"); + isa = NSMutableArray; + }; + "Object 56" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 57"; + title = Font; + }; + "Object 57" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 58"; + title = Font; + }; + "Object 58" = { + elements = ( + "Object 59", + "Object 60", + "Object 61", + "Object 62", + "Object 63", + "Object 70", + "Object 76", + "Object 84", + "Object 85", + "Object 86" + ); + isa = NSMutableArray; + }; + "Object 59" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = t; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Font Panel..."; + }; + "Object 60" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = b; + representedObject = nil; + state = 0; + tag = 2; + target = nil; + title = Bold; + }; + "Object 61" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = i; + representedObject = nil; + state = 0; + tag = 1; + target = nil; + title = Italic; + }; + "Object 62" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Underline; + }; + "Object 63" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 64"; + title = Kern; + }; + "Object 64" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 65"; + title = Kern; + }; + "Object 65" = { + elements = ("Object 66", "Object 67", "Object 68", "Object 69"); + isa = NSMutableArray; + }; + "Object 66" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Use Default"; + }; + "Object 67" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Use None"; + }; + "Object 68" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Tighten; + }; + "Object 69" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Loosen; + }; + "Object 70" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 71"; + title = Ligature; + }; + "Object 71" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 72"; + title = Ligature; + }; + "Object 72" = { + elements = ("Object 73", "Object 74", "Object 75"); + isa = NSMutableArray; + }; + "Object 73" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Use Default"; + }; + "Object 74" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Use None"; + }; + "Object 75" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Use All"; + }; + "Object 76" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 77"; + title = Baseline; + }; + "Object 77" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 78"; + title = Baseline; + }; + "Object 78" = { + elements = ("Object 79", "Object 80", "Object 81", "Object 82", "Object 83"); + isa = NSMutableArray; + }; + "Object 79" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Use Default"; + }; + "Object 80" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Superscript; + }; + "Object 81" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Subscript; + }; + "Object 82" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Raise; + }; + "Object 83" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Lower; + }; + "Object 84" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Colors...; + }; + "Object 85" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = 3; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Copy Font"; + }; + "Object 86" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = 4; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Paste Font"; + }; + "Object 87" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 88"; + title = Text; + }; + "Object 88" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 89"; + title = Text; + }; + "Object 89" = { + elements = ( + "Object 90", + "Object 91", + "Object 92", + "Object 93", + "Object 94", + "Object 95", + "Object 96" + ); + isa = NSMutableArray; + }; + "Object 90" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Align Left"; + }; + "Object 91" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Center; + }; + "Object 92" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Justify; + }; + "Object 93" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Align Right"; + }; + "Object 94" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Show Ruler"; + }; + "Object 95" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = 1; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Copy Ruler"; + }; + "Object 96" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = 2; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Paste Ruler"; + }; + "Object 97" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = P; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Page Layout..."; + }; + "Object 98" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 99"; + title = Tools; + }; + "Object 99" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 100"; + title = Tools; + }; + "Object 100" = { + elements=("Object 101", "Object 102", "Object 103"); + isa = NSMutableArray; + }; + "Object 101" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Inspector...; + }; + "Object 102" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Loaded Projects..."; + }; + "Object 103" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = f; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Find Panel"; + }; + "Object 104" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 105"; + title = Windows; + }; + "Object 105" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 106"; + title = Windows; + }; + "Object 106" = { + elements = ("Object 107", "Object 108", "Object 109"); + isa = NSMutableArray; + }; + "Object 107" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Arrange in Front"; + }; + "Object 108" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = m; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Miniaturize Window"; + }; + "Object 109" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = w; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = "Close Window"; + }; + "Object 110" = { + action = "submenuAction:"; + image = "Object 14"; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = ""; + representedObject = nil; + state = 0; + tag = 0; + target = "Object 111"; + title = Services; + }; + "Object 111" = { + autoenablesItems = YES; + isa = NSMenu; + itemArray = "Object 7"; + title = Services; + }; + "Object 112" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = h; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Hide; + }; + "Object 113" = { + action = nil; + image = nil; + isEnabled = YES; + isa = NSMenuItem; + keyEquivalent = q; + representedObject = nil; + state = 0; + tag = 0; + target = nil; + title = Quit; + }; + "Object 114" = {className = PCInfoController; isa = IMCustomObject; }; + "Object 115" = {className = PCFindController; isa = IMCustomObject; }; + "Object 116" = {className = NSFontManager; isa = IMCustomObject; }; + "Object 117" = {className = PCLogController; isa = IMCustomObject; }; + "Object 118" = {className = PCPrefController; isa = IMCustomObject; }; + "Object 119" = {className = PCProjectManager; isa = IMCustomObject; }; + "Object 120" = {className = PCAppController; isa = IMCustomObject; }; + "Object 121" = {className = PCMenuController; isa = IMCustomObject; }; + "Object 122" = {className = PCFileManager; isa = IMCustomObject; }; + "Object 123" = { + elements = ( + "Object 124", + "Object 126", + "Object 128", + "Object 130", + "Object 132", + "Object 134", + "Object 136", + "Object 138", + "Object 140", + "Object 142", + "Object 144", + "Object 146", + "Object 148", + "Object 150", + "Object 152", + "Object 154", + "Object 156", + "Object 158", + "Object 160", + "Object 162", + "Object 164", + "Object 166", + "Object 168", + "Object 170", + "Object 172", + "Object 173", + "Object 175", + "Object 177", + "Object 179", + "Object 181", + "Object 183", + "Object 185", + "Object 187", + "Object 189", + "Object 191", + "Object 193", + "Object 195", + "Object 197", + "Object 199", + "Object 201", + "Object 203", + "Object 205", + "Object 207", + "Object 209", + "Object 210", + "Object 212", + "Object 214", + "Object 215", + "Object 216", + "Object 218", + "Object 219", + "Object 221", + "Object 223", + "Object 225", + "Object 227", + "Object 229", + "Object 231", + "Object 233", + "Object 235", + "Object 236", + "Object 238", + "Object 240", + "Object 242", + "Object 244", + "Object 246", + "Object 248", + "Object 249", + "Object 251" + ); + isa = NSMutableArray; + }; + "Object 124" = { + destination = nil; + isa = IMControlConnector; + label = "Object 125"; + source = "Object 49"; + }; + "Object 125" = {isa = NSString; string = "cut:"; }; + "Object 126" = { + destination = nil; + isa = IMControlConnector; + label = "Object 127"; + source = "Object 50"; + }; + "Object 127" = {isa = NSString; string = "copy:"; }; + "Object 128" = { + destination = nil; + isa = IMControlConnector; + label = "Object 129"; + source = "Object 51"; + }; + "Object 129" = {isa = NSString; string = "paste:"; }; + "Object 130" = { + destination = nil; + isa = IMControlConnector; + label = "Object 131"; + source = "Object 52"; + }; + "Object 131" = {isa = NSString; string = "selectAll:"; }; + "Object 132" = { + destination = "Object 2"; + isa = IMControlConnector; + label = "Object 133"; + source = "Object 113"; + }; + "Object 133" = {isa = NSString; string = "terminate:"; }; + "Object 134" = { + destination = "Object 2"; + isa = IMControlConnector; + label = "Object 135"; + source = "Object 112"; + }; + "Object 135" = {isa = NSString; string = "hide:"; }; + "Object 136" = { + destination = nil; + isa = IMControlConnector; + label = "Object 137"; + source = "Object 108"; + }; + "Object 137" = {isa = NSString; string = "performMiniaturize:"; }; + "Object 138" = { + destination = nil; + isa = IMControlConnector; + label = "Object 139"; + source = "Object 109"; + }; + "Object 139" = {isa = NSString; string = "performClose:"; }; + "Object 140" = { + destination = nil; + isa = IMControlConnector; + label = "Object 141"; + source = "Object 107"; + }; + "Object 141" = {isa = NSString; string = "arrangeInFront:"; }; + "Object 142" = { + destination = "Object 120"; + isa = IMOutletConnector; + label = "Object 143"; + source = "Object 2"; + }; + "Object 143" = {isa = NSString; string = delegate; }; + "Object 144" = { + destination = nil; + isa = IMControlConnector; + label = "Object 145"; + source = "Object 84"; + }; + "Object 145" = {isa = NSString; string = "orderFrontColorPanel:"; }; + "Object 146" = { + destination = nil; + isa = IMControlConnector; + label = "Object 147"; + source = "Object 79"; + }; + "Object 147" = {isa = NSString; string = "unscript:"; }; + "Object 148" = { + destination = nil; + isa = IMControlConnector; + label = "Object 149"; + source = "Object 80"; + }; + "Object 149" = {isa = NSString; string = "superscript:"; }; + "Object 150" = { + destination = nil; + isa = IMControlConnector; + label = "Object 151"; + source = "Object 81"; + }; + "Object 151" = {isa = NSString; string = "subscript:"; }; + "Object 152" = { + destination = nil; + isa = IMControlConnector; + label = "Object 153"; + source = "Object 82"; + }; + "Object 153" = {isa = NSString; string = "raiseBaseline:"; }; + "Object 154" = { + destination = nil; + isa = IMControlConnector; + label = "Object 155"; + source = "Object 83"; + }; + "Object 155" = {isa = NSString; string = "lowerBaseline:"; }; + "Object 156" = { + destination = nil; + isa = IMControlConnector; + label = "Object 157"; + source = "Object 75"; + }; + "Object 157" = {isa = NSString; string = "useAllLigatures:"; }; + "Object 158" = { + destination = nil; + isa = IMControlConnector; + label = "Object 159"; + source = "Object 74"; + }; + "Object 159" = {isa = NSString; string = "turnOffLigatures:"; }; + "Object 160" = { + destination = nil; + isa = IMControlConnector; + label = "Object 161"; + source = "Object 73"; + }; + "Object 161" = {isa = NSString; string = "useStandardLigatures:"; }; + "Object 162" = { + destination = nil; + isa = IMControlConnector; + label = "Object 163"; + source = "Object 66"; + }; + "Object 163" = {isa = NSString; string = "useStandardKerning:"; }; + "Object 164" = { + destination = nil; + isa = IMControlConnector; + label = "Object 165"; + source = "Object 67"; + }; + "Object 165" = {isa = NSString; string = "turnOffKerning:"; }; + "Object 166" = { + destination = nil; + isa = IMControlConnector; + label = "Object 167"; + source = "Object 68"; + }; + "Object 167" = {isa = NSString; string = "tightenKerning:"; }; + "Object 168" = { + destination = nil; + isa = IMControlConnector; + label = "Object 169"; + source = "Object 69"; + }; + "Object 169" = {isa = NSString; string = "loosenKerning:"; }; + "Object 170" = { + destination = "Object 116"; + isa = IMControlConnector; + label = "Object 171"; + source = "Object 61"; + }; + "Object 171" = {isa = NSString; string = "addFontTrait:"; }; + "Object 172" = { + destination = "Object 116"; + isa = IMControlConnector; + label = "Object 171"; + source = "Object 60"; + }; + "Object 173" = { + destination = nil; + isa = IMControlConnector; + label = "Object 174"; + source = "Object 62"; + }; + "Object 174" = {isa = NSString; string = "underline:"; }; + "Object 175" = { + destination = nil; + isa = IMControlConnector; + label = "Object 176"; + source = "Object 86"; + }; + "Object 176" = {isa = NSString; string = "pasteFont:"; }; + "Object 177" = { + destination = nil; + isa = IMControlConnector; + label = "Object 178"; + source = "Object 85"; + }; + "Object 178" = {isa = NSString; string = "copyFont:"; }; + "Object 179" = { + destination = "Object 116"; + isa = IMControlConnector; + label = "Object 180"; + source = "Object 59"; + }; + "Object 180" = {isa = NSString; string = "orderFrontFontPanel:"; }; + "Object 181" = { + destination = nil; + isa = IMControlConnector; + label = "Object 182"; + source = "Object 97"; + }; + "Object 182" = {isa = NSString; string = "runPageLayout:"; }; + "Object 183" = { + destination = nil; + isa = IMControlConnector; + label = "Object 184"; + source = "Object 94"; + }; + "Object 184" = {isa = NSString; string = "toggleRuler:"; }; + "Object 185" = { + destination = nil; + isa = IMControlConnector; + label = "Object 186"; + source = "Object 96"; + }; + "Object 186" = {isa = NSString; string = "pasteRuler:"; }; + "Object 187" = { + destination = nil; + isa = IMControlConnector; + label = "Object 188"; + source = "Object 95"; + }; + "Object 188" = {isa = NSString; string = "copyRuler:"; }; + "Object 189" = { + destination = nil; + isa = IMControlConnector; + label = "Object 190"; + source = "Object 93"; + }; + "Object 190" = {isa = NSString; string = "alignRight:"; }; + "Object 191" = { + destination = nil; + isa = IMControlConnector; + label = "Object 192"; + source = "Object 91"; + }; + "Object 192" = {isa = NSString; string = "alignCenter:"; }; + "Object 193" = { + destination = nil; + isa = IMControlConnector; + label = "Object 194"; + source = "Object 90"; + }; + "Object 194" = {isa = NSString; string = "alignLeft:"; }; + "Object 195" = { + destination = nil; + isa = IMControlConnector; + label = "Object 196"; + source = "Object 92"; + }; + "Object 196" = {isa = NSString; string = "alignJustified:"; }; + "Object 197" = { + destination = "Object 118"; + isa = IMOutletConnector; + label = "Object 198"; + source = "Object 120"; + }; + "Object 198" = {isa = NSString; string = prefController; }; + "Object 199" = { + destination = "Object 115"; + isa = IMOutletConnector; + label = "Object 200"; + source = "Object 120"; + }; + "Object 200" = {isa = NSString; string = finder; }; + "Object 201" = { + destination = "Object 114"; + isa = IMOutletConnector; + label = "Object 202"; + source = "Object 120"; + }; + "Object 202" = {isa = NSString; string = infoController; }; + "Object 203" = { + destination = "Object 117"; + isa = IMOutletConnector; + label = "Object 204"; + source = "Object 120"; + }; + "Object 204" = {isa = NSString; string = logger; }; + "Object 205" = { + destination = "Object 114"; + isa = IMControlConnector; + label = "Object 206"; + source = "Object 17"; + }; + "Object 206" = {isa = NSString; string = "showInfoWindow:"; }; + "Object 207" = { + destination = "Object 118"; + isa = IMControlConnector; + label = "Object 208"; + source = "Object 18"; + }; + "Object 208" = {isa = NSString; string = "showPrefWindow:"; }; + "Object 209" = { + destination = "Object 120"; + isa = IMOutletConnector; + label = "Object 143"; + source = "Object 119"; + }; + "Object 210" = { + destination = "Object 119"; + isa = IMOutletConnector; + label = "Object 211"; + source = "Object 120"; + }; + "Object 211" = {isa = NSString; string = projectManager; }; + "Object 212" = { + destination = "Object 122"; + isa = IMOutletConnector; + label = "Object 213"; + source = "Object 119"; + }; + "Object 213" = {isa = NSString; string = fileManager; }; + "Object 214" = { + destination = "Object 119"; + isa = IMOutletConnector; + label = "Object 143"; + source = "Object 122"; + }; + "Object 215" = { + destination = "Object 122"; + isa = IMOutletConnector; + label = "Object 213"; + source = "Object 120"; + }; + "Object 216" = { + destination = "Object 121"; + isa = IMOutletConnector; + label = "Object 217"; + source = "Object 120"; + }; + "Object 217" = {isa = NSString; string = menuController; }; + "Object 218" = { + destination = "Object 119"; + isa = IMOutletConnector; + label = "Object 211"; + source = "Object 121"; + }; + "Object 219" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 220"; + source = "Object 23"; + }; + "Object 220" = {isa = NSString; string = "openProject:"; }; + "Object 221" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 222"; + source = "Object 24"; + }; + "Object 222" = {isa = NSString; string = "newProject:"; }; + "Object 223" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 224"; + source = "Object 25"; + }; + "Object 224" = {isa = NSString; string = "saveProject:"; }; + "Object 225" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 226"; + source = "Object 26"; + }; + "Object 226" = {isa = NSString; string = "saveProjectAs:"; }; + "Object 227" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 228"; + source = "Object 28"; + }; + "Object 228" = {isa = NSString; string = "revertToSaved:"; }; + "Object 229" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 230"; + source = "Object 29"; + }; + "Object 230" = {isa = NSString; string = "closeProject:"; }; + "Object 231" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 232"; + source = "Object 33"; + }; + "Object 232" = {isa = NSString; string = "addSubproject:"; }; + "Object 233" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 234"; + source = "Object 34"; + }; + "Object 234" = {isa = NSString; string = "newSubproject:"; }; + "Object 235" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 234"; + source = "Object 35"; + }; + "Object 236" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 237"; + source = "Object 39"; + }; + "Object 237" = {isa = NSString; string = "openFile:"; }; + "Object 238" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 239"; + source = "Object 40"; + }; + "Object 239" = {isa = NSString; string = "addFile:"; }; + "Object 240" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 241"; + source = "Object 42"; + }; + "Object 241" = {isa = NSString; string = "removeFile:"; }; + "Object 242" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 243"; + source = "Object 43"; + }; + "Object 243" = {isa = NSString; string = "saveFile:"; }; + "Object 244" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 245"; + source = "Object 44"; + }; + "Object 245" = {isa = NSString; string = "saveFileAs:"; }; + "Object 246" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 247"; + source = "Object 45"; + }; + "Object 247" = {isa = NSString; string = "revertFile:"; }; + "Object 248" = { + destination = "Object 122"; + isa = IMOutletConnector; + label = "Object 213"; + source = "Object 121"; + }; + "Object 249" = { + destination = "Object 121"; + isa = IMControlConnector; + label = "Object 250"; + source = "Object 41"; + }; + "Object 250" = {isa = NSString; string = "newFile:"; }; + "Object 251" = { + destination = "Object 120"; + isa = IMOutletConnector; + label = "Object 252"; + source = "Object 121"; + }; + "Object 252" = {isa = NSString; string = appController; }; + RootObject = {Connections = "Object 123"; Objects = "Object 1"; isa = GMModel; }; + TopLevelObjects = (RootObject); + Version = 1; +} + + + diff --git a/ProjectCenter/FileIcon_.c.tiff b/ProjectCenter/FileIcon_.c.tiff new file mode 100644 index 0000000000000000000000000000000000000000..296c425c1181eb812b58ac3de2532470cee1834e GIT binary patch literal 3504 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 F`Cqkx$=Uz_ literal 0 HcmV?d00001 diff --git a/ProjectCenter/FileIcon_.h.tiff b/ProjectCenter/FileIcon_.h.tiff new file mode 100644 index 0000000000000000000000000000000000000000..0f920b101f944771bc58001bb531450f844fb968 GIT binary patch literal 3502 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 OPi_FeGGnJXdH)50v<6iG literal 0 HcmV?d00001 diff --git a/ProjectCenter/GNUmakefile b/ProjectCenter/GNUmakefile new file mode 100644 index 0000000..36fe6b4 --- /dev/null +++ b/ProjectCenter/GNUmakefile @@ -0,0 +1,85 @@ +# +# GNUmakefile - Generated by the ProjectCenter +# Written by Philippe C.D. Robert +# +# NOTE: Do NOT change this file -- ProjectCenter maintains it! +# +# Put all of your customisations in GNUmakefile.preamble and +# GNUmakefile.postamble +# + +include $(GNUSTEP_MAKEFILES)/common.make +# +# Subprojects +# + +# +# Main application +# + +APP_NAME=ProjectCenter + +ProjectCenter_LDFLAGS = -lPC +ProjectCenter_MAIN_MODEL_FILE = ProjectCenter.gmodel +ProjectCenter_APPLICATION_ICON = ProjectCenter.tiff + +ProjectCenter_RESOURCE_FILES= \ + English.lproj/ProjectCenter.gmodel \ + ProjectCenter.tiff \ + ProjectCenter.app.tiff \ + ProjectCentre_add.tiff \ + ProjectCentre_build.tiff \ + ProjectCentre_clean.tiff \ + ProjectCentre_cvs.tiff \ + ProjectCentre_documentation.tiff \ + ProjectCentre_files.tiff \ + ProjectCentre_find.tiff \ + ProjectCentre_prefs.tiff \ + ProjectCentre_run.tiff \ + ProjectCentre_uml.tiff \ + FileIcon_.c.tiff \ + FileIcon_.h.tiff \ + FileIcon_.m.tiff \ + FileIcon_rtf.tiff \ + Info-project.plist + +# Header files +# + +ProjectCenter_HEADERS= \ + PCAppController.h \ + PCFindController.h \ + PCInfoController.h \ + PCLogController.h \ + PCMenuController.h \ + PCPrefController.h + +# +# Class files +# + +ProjectCenter_OBJC_FILES= \ + PCAppController.m \ + PCFindController.m \ + PCInfoController.m \ + PCLogController.m \ + PCMenuController.m \ + PCPrefController.m \ + ProjectCenter_main.m + +# +# C files +# + +ProjectCenter_C_FILES= + +-include GNUmakefile.preamble +-include GNUmakefile.local +include $(GNUSTEP_MAKEFILES)/application.make +-include GNUmakefile.postamble + + + + + + diff --git a/ProjectCenter/GNUmakefile.postamble b/ProjectCenter/GNUmakefile.postamble new file mode 100644 index 0000000..a205b9c --- /dev/null +++ b/ProjectCenter/GNUmakefile.postamble @@ -0,0 +1,26 @@ +# +# Makefile.postamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# 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. diff --git a/ProjectCenter/GNUmakefile.preamble b/ProjectCenter/GNUmakefile.preamble new file mode 100644 index 0000000..4126b8a --- /dev/null +++ b/ProjectCenter/GNUmakefile.preamble @@ -0,0 +1,73 @@ +# +# Makefile.preamble +# +# Copyright (C) 1997 Free Software Foundation, Inc. +# +# Original Author: Scott Christley +# +# This file is part of the GNUstep ProjectCenter. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# If you are interested in a warranty or support for this source code, +# contact Scott Christley at scottc@net-community.com +# +# You should have received a copy of the GNU Library General Public +# License along with this library; see the file COPYING.LIB. +# If not, write to the Free Software Foundation, +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# +# Makefile.preamble +# +# Project specific makefile variables, and additional +# +# Do not put any Makefile rules in this file, instead they should +# be put into Makefile.postamble. +# + +# +# Flags dealing with compiling and linking +# + +# Additional flags to pass to the preprocessor +ADDITIONAL_CPPFLAGS += + +# Additional flags to pass to the Objective-C compiler +ADDITIONAL_OBJCFLAGS += + +# Additional flags to pass to the C compiler +ADDITIONAL_CFLAGS += +#ADDITIONAL_CFLAGS += + +# Additional include directories the compiler should search +ADDITIONAL_INCLUDE_DIRS += + +# Additional LDFLAGS to pass to the linker +ADDITIONAL_LDFLAGS += -lPC + +# Additional library directories the linker should search +ADDITIONAL_LIB_DIRS += + +ADDITIONAL_TOOL_LIBS += + +# +# Flags dealing with installing and uninstalling +# + +# Additional directories to be created during installation +ADDITIONAL_INSTALL_DIRS += + +# +# Local configuration +# + + diff --git a/ProjectCenter/Info-project.plist b/ProjectCenter/Info-project.plist new file mode 100755 index 0000000..752e4b5 --- /dev/null +++ b/ProjectCenter/Info-project.plist @@ -0,0 +1,12 @@ +{ + NOTE = "Automatically generated, do not edit!"; + ApplicationName = "ProjectCenter"; + ApplicationDescription = "GNUstep IDE"; + ApplicationIcon = "ProjectCenter.tiff"; + ApplicationRelease = "ProjectCenter 0.1"; + FullVersionID = "0.1 pre pre pre pre epsilon"; + Authors = ("Philippe C.D. Robert "); + URL = "http://www.projectcenter.ch"; + Copyright = "Copyright (C) 2000 Philippe C.D. Robert"; + CopyrightDescription = "Released under the GNU General Public License 2.0"; +} diff --git a/ProjectCenter/Makefile b/ProjectCenter/Makefile new file mode 100755 index 0000000..a3d8274 --- /dev/null +++ b/ProjectCenter/Makefile @@ -0,0 +1,67 @@ +# +# Generated by the NeXT Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = ProjectCenter + +PROJECTVERSION = 2.6 +PROJECT_TYPE = Application +LANGUAGE = English + +NEXTSTEP_APPICON = ProjectCenter.app.tiff +ICONSECTIONS = -sectcreate __ICON app ProjectCenter.app.tiff + +LOCAL_RESOURCES = FileCreation.nib Info.nib Inspector.nib\ + NEXTSTEP_ProjectCenter.nib Preferences.nib Project.nib\ + TypePopup.nib + +GLOBAL_RESOURCES = FileIcon_.c.tiff FileIcon_.h.tiff FileIcon_.m.tiff\ + FileIcon_rtf.tiff ProjectCenter.app.tiff\ + ProjectCenter.tiff ProjectCentre_add.tiff\ + ProjectCentre_build.tiff ProjectCentre_clean.tiff\ + ProjectCentre_cvs.tiff\ + ProjectCentre_documentation.tiff\ + ProjectCentre_files.tiff ProjectCentre_find.tiff\ + ProjectCentre_prefs.tiff ProjectCentre_run.tiff\ + ProjectCentre_uml.tiff + +CLASSES = PCAppController.m PCPrefController.m PCInfoController.m\ + PCFindController.m PCLogController.m PCMenuController.m + +HFILES = PCAppController.h PCPrefController.h PCInfoController.h\ + PCFindController.h PCLogController.h PCMenuController.h + +MFILES = ProjectCenter_main.m + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble m.template\ + h.template + + +MAKEFILEDIR = $(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = app.make +NEXTSTEP_INSTALLDIR = $(HOME)/Apps +WINDOWS_INSTALLDIR = /MyApps +LIBS = -lPCLib +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) + + +HEADER_PATHS = -I/LocalDeveloper/Headers/PCLib +FRAMEWORKS = -framework AppKit -framework Foundation + + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/ProjectCenter/Makefile.postamble b/ProjectCenter/Makefile.postamble new file mode 100755 index 0000000..36381d4 --- /dev/null +++ b/ProjectCenter/Makefile.postamble @@ -0,0 +1,122 @@ +############################################################################### +# NeXT Makefile.postamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project, sub-project, bundle, or +# palette. Each node in the project's tree of sub-projects and bundles +# should have it's own Makefile.preamble and Makefile.postamble. Additional +# rules (e.g., after_install) that are defined by the developer should be +# defined in this file. +# +############################################################################### +# +# Here are the variables exported by the common "app" makefiles that can be +# used in any customizations you make to the template below: +# +# PRODUCT_ROOT - Name of the directory to which resources are copied. +# OFILE_DIR - Directory into which .o object files are generated. +# (Note that this name is calculated based on the target +# architectures specified in Project Builder). +# DERIVED_SRC_DIR - Directory used for all other derived files +# ALL_CFLAGS - All the flags passed to the cc(1) driver for compilations +# +# NAME - name of application, bundle, subproject, palette, etc. +# LANGUAGE - langage in which the project is written (default "English") +# LOCAL_RESOURCES - localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES - non-localized resources of project +# PROJECTVERSION - version of ProjectBuilder project (NS3.X = 1.1, NS4.0 = 2.0) +# ICONSECTIONS - Specifies icon sections when linking executable +# +# CLASSES - Class implementation files in project. +# HFILES - Header files in project. +# MFILES - Other Objective-C source files in project. +# CFILES - Other C source files in project. +# PSWFILES - .psw files in the project +# PSWMFILES - .pswm files in the project +# SUBPROJECTS - Subprojects of this project +# BUNDLES - Bundle subprojects of this project +# OTHERSRCS - Other miscellaneous sources of this project +# OTHERLINKED - Source files not matching a standard source extention +# +# LIBS - Libraries to link with when making app target +# DEBUG_LIBS - Libraries to link with when making debug target +# PROF_LIBS - Libraries to link with when making profile target +# OTHERLINKEDOFILES - Other relocatable files to (always) link in. +# +# APP_MAKEFILE_DIR - Directory in which to find generic set of Makefiles +# MAKEFILEDIR - Directory in which to find $(MAKEFILE) +# MAKEFILE - Top level mechanism Makefile (e.g., app.make, bundle.make) +# INSTALLDIR - Directory app will be installed into by 'install' target +# +############################################################################### + + +# Change defaults assumed by the standard makefiles here. Edit the +# following default values as appropriate. (Note that if no Makefile.postamble +# exists, these values will have defaults set in common.make). + +# Versioning of frameworks, libraries, bundles, and palettes: +#CURRENTLY_ACTIVE_VERSION = YES + # Set to "NO" to produce a compatibility binary +#DEPLOY_WITH_VERSION_NAME = A + # This should be incremented as your API changes. +#COMPATIBILITY_PROJECT_VERSION = 1 + # This should be incremented as your API grows. +#CURRENT_PROJECT_VERSION = 1 + # Defaults to using the "vers_string" hack. + +# Some compiler flags can be easily overridden here, but onlytake effect at +# the top-level: +#OPTIMIZATION_CFLAG = -O +#DEBUG_SYMBOLS_CFLAG = -g +#WARNING_CFLAGS = -Wmost +#DEBUG_BUILD_CFLAGS = -DDEBUG +#PROFILE_BUILD_CFLAGS = -pg -DPROFILE + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +# Flags passed to yacc +#YFLAGS = -d + +# Library and Framework projects only: +# 1. If you want something other than the default .dylib name, override it here +#DYLIB_INSTALL_NAME = lib$(NAME).dylib + +# 2. If you want to change the -install_name flag from the absolute path to the development area, change it here. One good choice is the installation directory. Another one might be none at all. +#DYLIB_INSTALL_DIR = $(INSTALLDIR) + +# Ownership and permissions of files installed by 'install' target +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + +# Options to strip for various project types. Note: -S strips debugging symbols +# (executables can be stripped down further with -x or, if they load no bundles, with no +# options at all). +#APP_STRIP_OPTS = -S +#TOOL_STRIP_OPTS = -S +#LIBRARY_STRIP_OPTS = -S + # for .a archives +#DYNAMIC_STRIP_OPTS = -S + # for bundles and shared libraries + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. "Official" +# user-defined rules are: +# * before_install +# * after_install +# * after_installhdrs +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# +# Note: on MS Windows, executables, have an extension, so rules and dependencies +# for generated tools should use $(EXECUTABLE_EXT) on the end. diff --git a/ProjectCenter/Makefile.preamble b/ProjectCenter/Makefile.preamble new file mode 100755 index 0000000..5c0a25a --- /dev/null +++ b/ProjectCenter/Makefile.preamble @@ -0,0 +1,130 @@ +############################################################################### +# NeXT Makefile.preamble +# Copyright 1996, NeXT Software, Inc. +# +# This Makefile is used for configuring the standard app makefiles associated +# with ProjectBuilder. +# +# Use this template to set attributes for a project. Each node in a project +# tree of sub-projects, tools, etc. should have its own Makefile.preamble and +# Makefile.postamble. +# +############################################################################### +## Configure the flags passed to $(CC) here. These flags will also be +## inherited by all nested sub-projects and bundles. Put your -I, -D, -U, and +## -L flags in ProjectBuilder's Build Options inspector if at all possible. +## To change the default flags that get passed to ${CC} +## (e.g. change -O to -O2), see Makefile.postamble. + +# Flags passed to compiler (in addition to -g, -O, etc) +OTHER_CFLAGS = +# Flags passed to ld (in addition to -ObjC, etc.) +OTHER_LDFLAGS = +# Flags passed to libtool when building libraries +OTHER_LIBTOOL_FLAGS = +# For ordering named sections on NEXTSTEP (see ld(1)) +SECTORDER_FLAGS = + +# If you do not want any headers exported before compilations begin, +# uncomment the following line. This can be a big time saver. +#SKIP_EXPORTING_HEADERS = YES + +# Stuff related to exporting headers from this project that isn't already +# handled by PB. +OTHER_PUBLIC_HEADERS = +OTHER_PROJECT_HEADERS = +OTHER_PRIVATE_HEADERS = + +# Set these two macros if you want a precomp to be built as part of +# installation. The cc -precomp will be run in the public header directory +# on the specified public header files with the specified additional flags. +PUBLIC_PRECOMPILED_HEADERS = +PUBLIC_PRECOMPILED_HEADERS_CFLAGS = + +# Set this for library projects if you want to publish header files. If your +# app or tool project exports headers Don't +# include $(DSTROOT); this is added for you automatically. +PUBLIC_HEADER_DIR = +PRIVATE_HEADER_DIR = + +# If, in a subproject, you want to append to the parent's PUBLIC_HEADER_DIR# +# (say, to add a subdirectory like "/sys"), you can use: +PUBLIC_HEADER_DIR_SUFFIX = +PRIVATE_HEADER_DIR_SUFFIX = + +# Set this for dynamic library projects on platforms where code which references +# a dynamic library must link against an import library (i.e., Windows NT) +# Don't include $(DSTROOT); this is added for you automatically. +IMPORT_LIBRARY_DIR = + +# Additional (non-localized) resources for this project, which can be generated +OTHER_RESOURCES = + +# Uncomment this to produce a static archive-style (.a) library +#LIBRARY_STYLE = STATIC + +# Set this to YES if you don't want a final libtool call for a library/framework. +BUILD_OFILES_LIST_ONLY = + +# Additional relocatables to be linked into this project +OTHER_OFILES = +# Additional libraries to link against +OTHER_LIBS = +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +## Configure how things get built here. Additional dependencies, source files, +## derived files, and build order should be specified here. + +# Other dependencies of this project +OTHER_PRODUCT_DEPENDS = +# Built *before* building subprojects/bundles +OTHER_INITIAL_TARGETS = +# Other source files maintained by .pre/postamble +OTHER_SOURCEFILES = +# Additional files to be removed by `make clean' +OTHER_GARBAGE = + +# Targets to build before installation +OTHER_INSTALL_DEPENDS = + +# More obscure flags you might want to set for pswrap, yacc, lex, etc. +PSWFLAGS = +YFLAGS = +LFLAGS = + +## Delete this line if you want fast and loose cleans that will not remove +## things like precomps and user-defined OTHER_GARBAGE in subprojects. +CLEAN_ALL_SUBPROJECTS = YES + +## Add more obscure source files here to cause them to be automatically +## processed by the appropriate tool. Note that these files should also be +## added to "Supporting Files" in ProjectBuilder. The desired .o files that +## result from these files should also be added to OTHER_OFILES above so they +## will be linked in. + +# .msg files that should have msgwrap run on them +MSGFILES = +# .defs files that should have mig run on them +DEFSFILES = +# .mig files (no .defs files) that should have mig run on them +MIGFILES = +# .x files that should have rpcgen run on them +RPCFILES = + +## Add additional Help directories here (add them to the project as "Other +## Resources" in Project Builder) so that they will be compressed into .store +## files and copied into the app wrapper. If the help directories themselves +## need to also be in the app wrapper, then a cp command will need to be added +## in an after_install target. +OTHER_HELP_DIRS = + +# After you have saved your project using the 4.0 PB, you will automatically +# start using the makefiles in /NextDeveloper/Makefiles/project. If you should +# need to revert back to the old 3.3 Makefile behavior, override MAKEFILEDIR to +# be /NextDeveloper/Makefiles/app. + +# Don't add more rules here unless you want the first one to be the default +# target for make! Put all your targets in Makefile.postamble. + diff --git a/ProjectCenter/PB.project b/ProjectCenter/PB.project new file mode 100755 index 0000000..53c28b4 --- /dev/null +++ b/ProjectCenter/PB.project @@ -0,0 +1,77 @@ +{ + APPCLASS = NSApplication; + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + CLASSES = ( + PCAppController.m, + PCPrefController.m, + PCInfoController.m, + PCFindController.m, + PCLogController.m, + PCMenuController.m + ); + FRAMEWORKS = (AppKit.framework, Foundation.framework); + HEADERSEARCH = (/LocalDeveloper/Headers/PCLib); + H_FILES = ( + PCAppController.h, + PCPrefController.h, + PCInfoController.h, + PCFindController.h, + PCLogController.h, + PCMenuController.h + ); + IMAGES = ( + FileIcon_.c.tiff, + FileIcon_.h.tiff, + FileIcon_.m.tiff, + FileIcon_rtf.tiff, + ProjectCenter.app.tiff, + ProjectCenter.tiff, + ProjectCentre_add.tiff, + ProjectCentre_build.tiff, + ProjectCentre_clean.tiff, + ProjectCentre_cvs.tiff, + ProjectCentre_documentation.tiff, + ProjectCentre_files.tiff, + ProjectCentre_find.tiff, + ProjectCentre_prefs.tiff, + ProjectCentre_run.tiff, + ProjectCentre_uml.tiff + ); + INTERFACES = ( + FileCreation.nib, + Info.nib, + Inspector.nib, + NEXTSTEP_ProjectCenter.nib, + Preferences.nib, + Project.nib, + TypePopup.nib + ); + OTHER_LIBS = (PCLib); + OTHER_LINKED = (ProjectCenter_main.m); + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, m.template, h.template); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = { + FileCreation.nib = FileCreation.nib; + Info.nib = Info.nib; + Inspector.nib = Inspector.nib; + NEXTSTEP_ProjectCenter.nib = NEXTSTEP_ProjectCenter.nib; + Preferences.nib = Preferences.nib; + Project.nib = Project.nib; + TypePopup.nib = TypePopup.nib; + }; + MAKEFILEDIR = "$(NEXT_ROOT)/NextDeveloper/Makefiles/pb_makefiles"; + NEXTSTEP_APPICON = ProjectCenter.app.tiff; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_DOCUMENTEXTENSIONS = (); + NEXTSTEP_INSTALLDIR = "$(HOME)/Apps"; + NEXTSTEP_MAINNIB = NEXTSTEP_ProjectCenter.nib; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/NextDeveloper/bin/make; + PROJECTNAME = ProjectCenter; + PROJECTTYPE = Application; + PROJECTVERSION = 2.6; + WINDOWS_BUILDTOOL = $NEXT_ROOT/NextDeveloper/Executables/make; + WINDOWS_INSTALLDIR = /MyApps; + WINDOWS_MAINNIB = WINDOWS_ProjectCenter.nib; +} diff --git a/ProjectCenter/PC.project b/ProjectCenter/PC.project new file mode 100644 index 0000000..5080dcc --- /dev/null +++ b/ProjectCenter/PC.project @@ -0,0 +1,71 @@ +{ + APPCLASS = NSApplication; + APPKIT = "GNUSTEP-GUI"; + APPLICATIONICON = ""; + BUILDTOOL = gnumake; + "CLASS_FILES" = ( + "PCAppController.m", + "PCFindController.m", + "PCInfoController.m", + "PCLogController.m", + "PCMenuController.m", + "ProjectCenter_main.m" + ); + COMPILEROPTIONS = ""; + "CREATION_DATE" = ""; + "DOCU_FILES" = ( + ); + FOUNDATION = "GNUSTEP-BASE"; + FRAMEWORKS = ( + ); + "HEADER_FILES" = ( + "PCAppController.h", + "PCFindController.h", + "PCInfoController.h", + "PCLogController.h", + "PCMenuController.h", + "PCPrefController.h" + ); + IMAGES = ( + "build.tiff" + ); + INSTALLDIR = "$(HOME)/Apps"; + INTERFACES = ( + "main.gmodel", + "FileCreation.gmodel", + "Info.gmodel", + "Preferences.gmodel", + "Project.gmodel", + "ProjectCenter.gmodel", + "PCPrefController.m" + ); + LANGUAGE = English; + "LAST_EDITING" = ""; + LIBRARIES = ( + "gnustep-base", + "gnustep-gui" + ); + MAININTERFACE = "main.gmodel"; + MAKEFILEDIR = "/usr/GNUstep/Makefiles"; + "OTHER_FILES" = ( + ); + "OTHER_RESOURCES" = ( + ); + "OTHER_SOURCES" = ( + ); + "PRINCIPAL_CLASS" = "ProjectCenter_main.m"; + "PROJECT_BUILDER" = PCAppProj; + "PROJECT_CREATOR" = ""; + "PROJECT_DESCRIPTION" = "No description avaliable!"; + "PROJECT_MAINTAINER" = ""; + "PROJECT_NAME" = PC; + "PROJECT_TYPE" = PCAppProject; + "PROJECT_VERSION" = "1.0"; + SUBPROJECTS = ( + ); + "SUPPORTING_FILES" = ( + "GNUmakefile.preamble", + GNUmakefile, + "GNUmakefile.postamble" + ); +} \ No newline at end of file diff --git a/ProjectCenter/PCAppController.h b/ProjectCenter/PCAppController.h new file mode 100644 index 0000000..4ec7dfa --- /dev/null +++ b/ProjectCenter/PCAppController.h @@ -0,0 +1,111 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +#import "PCPrefController.h" +#import "PCFindController.h" +#import "PCInfoController.h" +#import "PCLogController.h" + +@class PCBundleLoader; +@class PCServer; +@class PCProjectManager; +@class PCFileManager; +@class PCMenuController; + +@interface PCAppController : NSObject +{ + IBOutlet PCPrefController *prefController; + IBOutlet PCFindController *finder; + IBOutlet PCInfoController *infoController; + IBOutlet PCLogController *logger; + IBOutlet PCProjectManager *projectManager; + IBOutlet PCFileManager *fileManager; + IBOutlet PCMenuController *menuController; + + PCBundleLoader *bundleLoader; + PCServer *doServer; + NSConnection *doConnection; + + id delegate; + + NSMutableDictionary *projectTypes; +} + +//============================================================================ +//==== Intialization & deallocation +//============================================================================ + ++ (void)initialize; + +- (id)init; +- (void)dealloc; + +//============================================================================ +//==== Delegate +//============================================================================ + +- (id)delegate; +- (void)setDelegate:(id)aDelegate; + +//============================================================================ +//==== Bundle Management +//============================================================================ + +- (PCBundleLoader *)bundleLoader; +- (PCProjectManager *)projectManager; +- (PCPrefController *)prefController; +- (PCServer *)doServer; +- (PCFindController *)finder; +- (PCLogController *)logger; + +- (NSDictionary *)projectTypes; + +//============================================================================ +//==== Misc... +//============================================================================ + +- (void)applicationDidFinishLaunching:(NSNotification *)notification; +- (BOOL)applicationShouldTerminate:(id)sender; +- (void)applicationWillTerminate:(NSNotification *)notification; + +//============================================================================ +//==== Delegate stuff +//============================================================================ + +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename; + +- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle; + +@end + +@interface PCAppController (ProjectRegistration) + +- (BOOL)registerProjectCreator:(NSString *)className forKey:(NSString *)aKey; +// Returns YES upon successfully registering a new projecttype. + +@end \ No newline at end of file diff --git a/ProjectCenter/PCAppController.m b/ProjectCenter/PCAppController.m new file mode 100644 index 0000000..8ca8f02 --- /dev/null +++ b/ProjectCenter/PCAppController.m @@ -0,0 +1,269 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCAppController.h" +#import "PCMenuController.h" + +#import + +@implementation PCAppController + +//============================================================================ +//==== Intialization & deallocation +//============================================================================ + ++ (void)initialize +{ + NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; + +#if defined(GNUSTEP) + NSString *_bundlePath = @"/usr/GNUstep/Local/Library/ProjectCenter"; +#else + NSString *_bundlePath = @"/LocalLibrary/ProjectCenter"; +#endif + + [defaults setObject:_bundlePath forKey:BundlePaths]; + + [defaults setObject:@"/usr/bin/emacs" forKey:Editor]; + [defaults setObject:@"/usr/bin/gdb" forKey:Debugger]; + [defaults setObject:@"/usr/bin/gcc" forKey:Compiler]; + + [defaults setObject:[NSString stringWithFormat:@"%@/ProjectCenterBuildDir",NSTemporaryDirectory()] forKey:RootBuildDirectory]; + + /* + [defaults setBool:YES forKey:PromtOnClean]; + [defaults setBool:YES forKey:PromtOnQuit]; + [defaults setBool:YES forKey:AutoSave]; + [defaults setBool:NO forKey:RemoveBackup]; + [defaults setInteger:60 forKey:AutoSavePeriod]; + [defaults setBool:NO forKey:DeleteCacheWhenQuitting]; + */ + + [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +- (id)init +{ + if ((self = [super init])) { + // The bundle loader + bundleLoader = [[PCBundleLoader alloc] init]; + [bundleLoader setDelegate:self]; + + // They are registered by the bundleLoader + projectTypes = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)dealloc +{ + if (doConnection) { + [doConnection invalidate]; + [doConnection release]; + } + + [projectManager release]; + [bundleLoader release]; + [doServer release]; + [projectTypes release]; + + [super dealloc]; +} + +//============================================================================ +//==== Delegate +//============================================================================ + +- (id)delegate +{ + return delegate; +} + +- (void)setDelegate:(id)aDelegate +{ + delegate = aDelegate; +} + +//============================================================================ +//==== Bundle Management +//============================================================================ + +- (PCBundleLoader *)bundleLoader +{ + return bundleLoader; +} + +- (PCProjectManager *)projectManager +{ + return projectManager; +} + +- (PCPrefController *)prefController +{ + return prefController; +} + +- (PCServer *)doServer +{ + return doServer; +} + +- (PCFindController *)finder +{ + return finder; +} + +- (PCLogController *)logger +{ + return logger; +} + +- (NSDictionary *)projectTypes +{ + return projectTypes; +} + +//============================================================================ +//==== Misc... +//============================================================================ + +- (void)applicationDidFinishLaunching:(NSNotification *)notification +{ + [logger logMessage:@"Loading additional subsystems..." tag:INFORMATION]; + + [bundleLoader loadBundles]; + + // The DO server + doServer = [[PCServer alloc] init]; + +#if defined(GNUSTEP) + NS_DURING + doConnection = [NSConnection newRegisteringAtName:@"ProjectCenter" withRootObject:doServer]; + [logger logMessage:@"Successful initialisation of the DO connection 'ProjectCenter'." tag:INFORMATION]; + NS_HANDLER + [logger logMessage:@"Could not initialise the DO connection 'ProjectCenter'!" tag:WARNING]; + NSRunAlertPanel(@"Warning!",@"Could not register the DO connection 'ProjectCenter'",@"OK",nil,nil,nil); + NS_ENDHANDLER +#else + doConnection = [NSConnection defaultConnection]; + [doConnection setRootObject:doServer]; + if (![doConnection registerName:@"ProjectCenter"]) { + [logger logMessage:@"Could not initialise the DO connection 'ProjectCenter'!" tag:WARNING]; + } + else { + [logger logMessage:@"Successful initialisation of the DO connection 'ProjectCenter'." tag:INFORMATION]; + } +#endif + [[NSNotificationCenter defaultCenter] addObserver:doServer selector:@selector(connectionDidDie:) name:NSConnectionDidDieNotification object:doConnection]; + [doConnection setDelegate:doServer]; + + [[NSNotificationCenter defaultCenter] postNotificationName:PCAppDidInitNotification object:nil]; +} + +- (BOOL)applicationShouldTerminate:(id)sender +{ +// This should be queried per project! +/* + if ([projectManager hasEditedDocuments]) { + if (NSRunAlertPanel(@"Unsaved projects!", @"Do you want to save them?", @"Yes", @"No", nil)) { + [projectManager saveAllProjects]; + } + } +*/ + [[NSNotificationCenter defaultCenter] postNotificationName:PCAppWillTerminateNotification object:nil]; + + return YES; +} + +- (void)applicationWillTerminate:(NSNotification *)notification +{ + // [[PCLogController sharedController] logMessageWithTag:INFORMATION object:self format:@"ProjectCenter is going down..."]; + + if ([[[NSUserDefaults standardUserDefaults] stringForKey:DeleteCacheWhenQuitting] isEqualToString:@"YES"]) { + [[NSFileManager defaultManager] removeFileAtPath:[projectManager rootBuildPath] handler:nil]; + } + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +//============================================================================ +//==== Delegate stuff +//============================================================================ + +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename +{ + BOOL success = NO; + + if (([[filename lastPathComponent] isEqualToString:@"PC.proj"])) { + [projectManager openProjectAt:filename]; + success = YES; + } + + return success; +} + +- (void)bundleLoader:(id)sender didLoadBundle:(NSBundle *)aBundle +{ + Class principalClass; + + NSAssert(aBundle,@"No valid bundle!"); + + principalClass = [aBundle principalClass]; + if ([principalClass conformsToProtocol:@protocol(ProjectType)]) { + NSString *name = [[principalClass sharedCreator] projectTypeName]; + + [logger logMessage:[NSString stringWithFormat:@"Project type %@ successfully loaded!",name] tag:INFORMATION]; + + if ([self registerProjectCreator:NSStringFromClass(principalClass) forKey:name]) { + [menuController addProjectTypeNamed:name]; + + [logger logMessage:[NSString stringWithFormat:@"Project type %@ successfully registered!",name] tag:INFORMATION]; + } + } + else if ([principalClass conformsToProtocol:@protocol(FileCreator)]) { + [fileManager registerCreatorsWithObjectsAndKeys:[[principalClass sharedCreator] creatorDictionary]]; + + // In objc.h there is already th like (char *)name... + // [logger logMessage:[NSString stringWithFormat:@"FileCreator %@ successfully loaded!",(NSString *)[[principalClass sharedCreator] name]] tag:INFORMATION]; +} +} + +@end + +@implementation PCAppController (ProjectRegistration) + +- (BOOL)registerProjectCreator:(NSString *)className forKey:(NSString *)aKey +{ + if ([projectTypes objectForKey:aKey]) { + return NO; + } + + [projectTypes setObject:className forKey:aKey]; + + return YES; +} + +@end diff --git a/ProjectCenter/PCFindController.h b/ProjectCenter/PCFindController.h new file mode 100644 index 0000000..2c734f7 --- /dev/null +++ b/ProjectCenter/PCFindController.h @@ -0,0 +1,34 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@interface PCFindController : NSObject +{ + +} + +@end diff --git a/ProjectCenter/PCFindController.m b/ProjectCenter/PCFindController.m new file mode 100644 index 0000000..00fc095 --- /dev/null +++ b/ProjectCenter/PCFindController.m @@ -0,0 +1,31 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCFindController.h" + +@implementation PCFindController + +@end diff --git a/ProjectCenter/PCInfoController.h b/ProjectCenter/PCInfoController.h new file mode 100644 index 0000000..3fc7c0e --- /dev/null +++ b/ProjectCenter/PCInfoController.h @@ -0,0 +1,40 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@interface PCInfoController : NSObject +{ + id infoWindow; + NSDictionary *infoDict; +} + +- (id)init; +- (void)dealloc; + +- (void)showInfoWindow:(id)sender; + +@end diff --git a/ProjectCenter/PCInfoController.m b/ProjectCenter/PCInfoController.m new file mode 100644 index 0000000..3fdce26 --- /dev/null +++ b/ProjectCenter/PCInfoController.m @@ -0,0 +1,73 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCInfoController.h" +#import + +#if defined(GNUSTEP) +#import +#endif + +@implementation PCInfoController + +- (id)init +{ + if ((self = [super init])) { + NSString *file; + + file = [[NSBundle mainBundle] pathForResource:@"Info-project" ofType:@"plist"]; + infoDict = [NSDictionary dictionaryWithContentsOfFile:file]; + [infoDict retain]; + } + return self; +} + +- (void)dealloc +{ + [infoDict release]; + + if (infoWindow) { + [infoWindow release]; + } + + [super dealloc]; +} + +- (void)showInfoWindow:(id)sender +{ +#if defined(GNUSTEP) + if (!infoWindow) { + infoWindow = [[GSInfoPanel alloc] initWithDictionary:infoDict]; + } + + [infoWindow center]; + [infoWindow makeKeyAndOrderFront:self]; +#else + NSRunAlertPanel(@"Info",@"OPENSTEP has no support for GSInfoPanel",@"OK".nil.nil.nil); +#endif +} + +@end diff --git a/ProjectCenter/PCLogController.h b/ProjectCenter/PCLogController.h new file mode 100644 index 0000000..b79fa16 --- /dev/null +++ b/ProjectCenter/PCLogController.h @@ -0,0 +1,39 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +#define INFORMATION 0 +#define WARNING 1 + +@interface PCLogController : NSObject +{ + +} + +- (void)logMessage:(NSString *)message tag:(int)tag; + +@end diff --git a/ProjectCenter/PCLogController.m b/ProjectCenter/PCLogController.m new file mode 100644 index 0000000..63d5321 --- /dev/null +++ b/ProjectCenter/PCLogController.m @@ -0,0 +1,49 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCLogController.h" + +@implementation PCLogController + +- (void)logMessage:(NSString *)message tag:(int)tag; +{ + NSString *_log; + + switch (tag) { + case 0: + _log = [NSString stringWithFormat:@"Information from <%@: %x - %x>: %@",[self class],self,[NSThread currentThread],message]; + break; + case 1: + _log = [NSString stringWithFormat:@"Warning from <%@: %x - %x>: %@",[self class],self,[NSThread currentThread],message]; + break; + default: + break; + } + + NSLog(message); +} + +@end diff --git a/ProjectCenter/PCMenuController.h b/ProjectCenter/PCMenuController.h new file mode 100644 index 0000000..53b6439 --- /dev/null +++ b/ProjectCenter/PCMenuController.h @@ -0,0 +1,81 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@class PCProjectManager; +@class PCFileManager; +@class PCAppController; + +@interface PCMenuController : NSObject +{ + IBOutlet PCProjectManager *projectManager; + IBOutlet PCFileManager *fileManager; + IBOutlet PCAppController *appController; + + NSBox *projectTypeAccessaryView; + id projectTypePopup; +} + +- (id)init; +- (void)dealloc; + +//============================================================================ +//==== Menu stuff +//============================================================================ + +- (void)addProjectTypeNamed:(NSString *)name; + +- (void)openProject:(id)sender; +- (void)newProject:(id)sender; +- (void)saveProject:(id)sender; +- (void)saveProjectAs:(id)sender; +- (void)showLoadedProjects:(id)sender; +- (void)saveFiles:(id)sender; +- (void)revertToSaved:(id)sender; + +- (void)newSubproject:(id)sender; +- (void)addSubproject:(id)sender; +- (void)removeSubproject:(id)sender; + +- (void)closeProject:(id)sender; + +- (void)newFile:(id)sender; +- (void)addFile:(id)sender; +- (void)openFile:(id)sender; +- (void)saveFile:(id)sender; +- (void)saveFileAs:(id)sender; +- (void)revertFile:(id)sender; +- (void)renameFile:(id)sender; +- (void)removeFile:(id)sender; + +//============================================================================ +//==== Delegate stuff +//============================================================================ + +- (BOOL)validateMenuItem:(id )menuItem; + +@end diff --git a/ProjectCenter/PCMenuController.m b/ProjectCenter/PCMenuController.m new file mode 100644 index 0000000..bda1b5a --- /dev/null +++ b/ProjectCenter/PCMenuController.m @@ -0,0 +1,277 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCMenuController.h" + +#import +#import "PCAppController.h" + +#if defined(GNUSTEP) +#import +#endif + +@implementation PCMenuController + +- (id)init +{ + if ((self = [super init])) { + // The accessory view + projectTypeAccessaryView = [[NSBox alloc] init]; + projectTypePopup = [[[NSPopUpButton alloc] initWithFrame:NSMakeRect(20,30,160,20) pullsDown:NO] autorelease]; + [projectTypePopup addItemWithTitle:@"No type available!"]; + + [projectTypeAccessaryView setTitle:@"Project Types"]; + [projectTypeAccessaryView setTitlePosition:NSAtTop]; + [projectTypeAccessaryView setBorderType:NSGrooveBorder]; + [projectTypeAccessaryView addSubview:projectTypePopup]; + [projectTypeAccessaryView sizeToFit]; + [projectTypeAccessaryView setAutoresizingMask: NSViewWidthSizable]; + } + return self; +} + +- (void)dealloc +{ + [projectTypeAccessaryView release]; + [super dealloc]; +} + +- (void)addProjectTypeNamed:(NSString *)name +{ + static BOOL _firstItem = YES; + + if (_firstItem) { + _firstItem = NO; + [projectTypePopup removeItemWithTitle:@"No type available!"]; + } + + [projectTypePopup addItemWithTitle:name]; +} + +//============================================================================ +//==== Menu stuff +//============================================================================ + +- (void)openProject:(id)sender +{ + NSString *projectPath; + NSOpenPanel *openPanel; + int retval; + + openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + + retval = [openPanel runModalForDirectory:[[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenDirectory"] file:nil types:[NSArray arrayWithObjects:@"project",nil]]; + + if (retval == NSOKButton) { + BOOL isDir; + + [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + projectPath = [[openPanel filenames] objectAtIndex:0]; + + if ([[NSFileManager defaultManager] fileExistsAtPath:projectPath isDirectory:&isDir] && !isDir) { + if (![projectManager openProjectAt:projectPath]) { + NSRunAlertPanel(@"Attention!",@"Couldn't open %@!",@"OK",nil,nil,[projectPath stringByDeletingLastPathComponent]); + } + } + } +} + +- (void)newProject:(id)sender +{ + NSSavePanel *sp; + int runResult; + + sp = [NSSavePanel savePanel]; + + [sp setTitle:@"Create new project..."]; + [sp setAccessoryView:projectTypeAccessaryView]; + + runResult = [sp runModalForDirectory:NSHomeDirectory() file:@""]; + if (runResult == NSOKButton) { + NSString *projectType = [projectTypePopup titleOfSelectedItem]; + NSString *className = [[appController projectTypes] objectForKey:projectType]; + + if (![projectManager createProjectOfType:className path:[sp filename]]) { + NSRunAlertPanel(@"Attention!",@"Failed to create %@!",@"OK",nil,nil,[sp filename]); + } + } +} + +- (void)saveProject:(id)sender +{ + [projectManager saveProject]; +} + +- (void)saveProjectAs:(id)sender +{ + NSString *proj; + +// Show save panel + + [projectManager saveProjectAs:proj]; +} + +- (void)showLoadedProjects:(id)sender +{ + [projectManager showLoadedProjects]; +} + +- (void)saveFiles:(id)sender +{ + [projectManager saveFiles]; +} + +- (void)revertToSaved:(id)sender +{ + [projectManager revertToSaved]; +} + +- (void)newSubproject:(id)sender +{ + [projectManager newSubproject]; +} + +- (void)addSubproject:(id)sender +{ + NSString *proj; + +// Show open panel + + [projectManager addSubprojectAt:proj]; +} + +- (void)removeSubproject:(id)sender +{ + [projectManager removeSubproject]; +} + +- (void)closeProject:(id)sender +{ + [projectManager closeProject]; +} + +- (void)newFile:(id)sender +{ + [fileManager showNewFileWindow]; +} + +- (void)openFile:(id)sender +{ + NSString *filePath; + NSOpenPanel *openPanel; + int retval; + + openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + + retval = [openPanel runModalForDirectory:[[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenDirectory"] file:nil types:nil]; + + if (retval == NSOKButton) { + BOOL isDir; + + [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + filePath = [[openPanel filenames] objectAtIndex:0]; + + if ([[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDir] && !isDir) { + if (![projectManager openFile:filePath]) { + NSRunAlertPanel(@"Attention!",@"Couldn't open %@!",@"OK",nil,nil,filePath); + } + } + } +} + +- (void)addFile:(id)sender +{ + [fileManager showAddFileWindow]; +} + +- (void)saveFile:(id)sender +{ + [projectManager saveFile]; +} + +- (void)saveFileAs:(id)sender +{ + NSString *proj; + +// Show open panel + + [projectManager saveFileAs:proj]; +} + +- (void)revertFile:(id)sender +{ + [projectManager revertFile]; +} + +- (void)renameFile:(id)sender +{ + NSString *proj; + +// Show open panel + + [projectManager renameFileTo:proj]; +} + +- (void)removeFile:(id)sender +{ + NSString *file = nil; + PCProject *proj = [projectManager activeProject]; + + if ((file = [[proj browserController] nameOfSelectedFile])) { + int ret; + + ret = NSRunAlertPanel(@"Remove File!",@"Really remove %@ in project %@?",@"Cancel",@"...from Project only",@"...from Project and Disk",file,[proj projectName]); + + if (ret == NSAlertAlternateReturn || ret == NSAlertOtherReturn) { + BOOL flag = (ret == NSAlertOtherReturn) ? YES : NO; + + [projectManager removeFilePermanently:flag]; + } + } +} + +//============================================================================ +//==== Delegate stuff +//============================================================================ + +- (BOOL)validateMenuItem:(id )menuItem +{ + if (![[projectManager loadedProjects] count]) { + if ([menuItem title] == @"New in Project") return NO; + if ([menuItem title] == @"Add File") return NO; + if ([menuItem title] == @"Remove File") return NO; + } + + return YES; +} + +@end diff --git a/ProjectCenter/PCPrefController.h b/ProjectCenter/PCPrefController.h new file mode 100644 index 0000000..834f8ab --- /dev/null +++ b/ProjectCenter/PCPrefController.h @@ -0,0 +1,79 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +@interface PCPrefController : NSObject +{ + id prefWindow; + id prefPopup; + + id prefEmptyView; + id prefBuildingView; + id prefMiscView; + id prefSavingView; + + id successField; + id failureField; + + id autoSaveField;; + + id editorField; + id debuggerField; + id compilerField; + id bundlePathField; + + NSMutableDictionary *preferencesDict; + + @private + BOOL _needsReleasing; +} + +- (id)init; +- (void)dealloc; + +- (void)showPrefWindow:(id)sender; +- (void)popupChanged:(id)sender; + +- (void)setSuccessSound:(id)sender; +- (void)setFailureSound:(id)sender; +- (void)setPromptOnClean:(id)sender; + +- (void)setSaveAutomatically:(id)sender; +- (void)setRemoveBackup:(id)sender; +- (void)setSavePeriod:(id)sender; + +- (void)setEditor:(id)sender; +- (void)setCompiler:(id)sender; +- (void)setDebugger:(id)sender; +- (void)setBundlePath:(id)sender; +- (void)promptWhenQuitting:(id)sender; + +- (NSDictionary *)preferencesDict; + +- (NSString *)selectFileWithTypes:(NSArray *)types; + +@end diff --git a/ProjectCenter/PCPrefController.m b/ProjectCenter/PCPrefController.m new file mode 100644 index 0000000..4c9edee --- /dev/null +++ b/ProjectCenter/PCPrefController.m @@ -0,0 +1,391 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import "PCPrefController.h" +#import + +#if defined(GNUSTEP) +#import +#endif + +@interface PCPrefController (CreateUI) + +- (void)_initUI; + +@end + +@implementation PCPrefController (CreateUI) + +- (void)_initUI +{ + NSView *_c_view; + unsigned int style = NSTitledWindowMask | NSClosableWindowMask | + NSResizableWindowMask; + NSRect _w_frame; + NSBox *line; + NSBox *v; + NSButton *b; + + /* + * Pref Window + * + */ + + _w_frame = NSMakeRect(200,300,268,365); + prefWindow = [[NSWindow alloc] initWithContentRect:_w_frame + styleMask:style + backing:NSBackingStoreBuffered + defer:NO]; + [prefWindow setMinSize:NSMakeSize(268,365)]; + [prefWindow setTitle:@"Preferences"]; + [prefWindow setDelegate:self]; + _c_view = [prefWindow contentView]; + + prefPopup = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(72,328,120,20)]; + [prefPopup addItemWithTitle:@"None"]; + [prefPopup setTarget:self]; + [prefPopup setAction:@selector(popupChanged:)]; + [_c_view addSubview:prefPopup]; + + line = [[[NSBox alloc] init] autorelease]; + [line setTitlePosition:NSNoTitle]; + [line setFrameFromContentFrame:NSMakeRect(0,312,272,2)]; + [_c_view addSubview:line]; + + prefEmptyView = [[NSBox alloc] init]; + [prefEmptyView setTitlePosition:NSNoTitle]; + [prefEmptyView setFrameFromContentFrame:NSMakeRect(-1,1,270,310)]; + [prefEmptyView setBorderType:NSNoBorder]; + [_c_view addSubview:prefEmptyView]; + + /* + * Building view + * + */ + + prefBuildingView = [[NSBox alloc] init]; + [prefBuildingView setTitlePosition:NSNoTitle]; + [prefBuildingView setFrameFromContentFrame:NSMakeRect(1,1,260,308)]; + [prefBuildingView setBorderType:NSNoBorder]; + + v = [[[NSBox alloc] init] autorelease]; + [v setTitle:@"Sound"]; + [v setFrameFromContentFrame:NSMakeRect(16,208,228,72)]; + [prefBuildingView addSubview:v]; + + b = [[[NSButton alloc] initWithFrame:NSMakeRect(72,176,108,15)] autorelease]; + [b setTitle:@"Prompt on clean"]; + [b setButtonType:NSSwitchButton]; + [b setBordered:NO]; + [b setTarget:self]; + [b setAction:@selector(setPromptOnClean:)]; + [b setContinuous:NO]; + [prefBuildingView addSubview:b]; + + /* + * Misc view + * + */ + + prefMiscView = [[NSBox alloc] init]; + [prefMiscView setTitlePosition:NSNoTitle]; + [prefMiscView setFrameFromContentFrame:NSMakeRect(1,1,260,308)]; + [prefMiscView setBorderType:NSNoBorder]; + + v = [[[NSBox alloc] init] autorelease]; + [v setTitle:@"External"]; + [v setFrameFromContentFrame:NSMakeRect(16,184,228,96)]; + [prefMiscView addSubview:v]; + + v = [[[NSBox alloc] init] autorelease]; + [v setTitle:@"Bundles"]; + [v setFrameFromContentFrame:NSMakeRect(16,120,228,48)]; + [prefMiscView addSubview:v]; + + b = [[[NSButton alloc] initWithFrame:NSMakeRect(32,80,144,15)] autorelease]; + [b setTitle:@"Prompt when quitting"]; + [b setButtonType:NSSwitchButton]; + [b setBordered:NO]; + [b setTarget:self]; + // [b setAction:@selector(setPromptOnClean:)]; + [b setContinuous:NO]; + [prefMiscView addSubview:b]; + + /* + * Saving view + * + */ + + prefSavingView = [[NSBox alloc] init]; + [prefSavingView setTitlePosition:NSNoTitle]; + [prefSavingView setFrameFromContentFrame:NSMakeRect(1,1,260,308)]; + [prefSavingView setBorderType:NSNoBorder]; + + v = [[[NSBox alloc] init] autorelease]; + [v setTitle:@"Saving"]; + [v setFrameFromContentFrame:NSMakeRect(16,208,228,72)]; + [prefSavingView addSubview:v]; + + b = [[[NSButton alloc] initWithFrame:NSMakeRect(13,32,124,15)] autorelease]; + [b setTitle:@"Save Automatically"]; + [b setButtonType:NSSwitchButton]; + [b setBordered:NO]; + [b setTarget:self]; + [b setAction:@selector(setSaveAutomatically:)]; + [b setContinuous:NO]; + [v addSubview:b]; + + b = [[[NSButton alloc] initWithFrame:NSMakeRect(13,13,124,15)] autorelease]; + [b setTitle:@"Remoe Backup"]; + [b setButtonType:NSSwitchButton]; + [b setBordered:NO]; + [b setTarget:self]; + [b setAction:@selector(setRemoveBackup:)]; + [b setContinuous:NO]; + [v addSubview:b]; + + v = [[[NSBox alloc] init] autorelease]; + [v setTitle:@"Auto-Save"]; + [v setFrameFromContentFrame:NSMakeRect(16,104,228,80)]; + [prefSavingView addSubview:v]; + + _needsReleasing = YES; +} + +@end + +@implementation PCPrefController + +- (id)init +{ + if ((self = [super init])) { + NSDictionary *prefs; + + // The prefs from the defaults + prefs = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; + preferencesDict = [[NSMutableDictionary alloc] initWithDictionary:prefs]; + } + return self; +} + +- (void)dealloc +{ + [preferencesDict release]; + + if (_needsReleasing) { + [prefWindow release]; + [prefPopup release]; + + [prefEmptyView release]; + [prefBuildingView release]; + [prefMiscView release]; + [prefSavingView release]; + } + + [super dealloc]; +} + +- (void)showPrefWindow:(id)sender +{ + if (!prefWindow) { + id view; + NSString *val; + +#if defined(GNUSTEP) + [self _initUI]; +#else + if(![NSBundle loadNibNamed:@"Preferences.nib" owner:self]) { + [[NSException exceptionWithName:NIB_NOT_FOUND_EXCEPTION reason:@"Could not load Preferences.gmodel" userInfo:nil] raise]; + return; + } +#endif + + // Fill in the defaults + [compilerField setStringValue:(val=[preferencesDict objectForKey:Compiler]) ? val : @""]; + [debuggerField setStringValue:(val=[preferencesDict objectForKey:Debugger]) ? val : @""]; + [editorField setStringValue:(val=[preferencesDict objectForKey:Editor]) ? val : @""]; + [bundlePathField setStringValue:(val=[preferencesDict objectForKey:BundlePaths]) ? val : @""]; + + // The popup and selected view + [prefPopup removeAllItems]; + [prefPopup addItemWithTitle:@"Building"]; + [prefPopup addItemWithTitle:@"Saving"]; + [prefPopup addItemWithTitle:@"Miscellaneous"]; + + [prefPopup selectItemWithTitle:@"Building"]; + + view = [prefBuildingView retain]; + [(NSBox *)prefEmptyView setContentView:view]; + [prefEmptyView display]; + } + + [prefWindow center]; + [prefWindow makeKeyAndOrderFront:self]; +} + +- (void)popupChanged:(id)sender +{ + NSView *view = nil; + + switch([sender indexOfSelectedItem]) { + case 0: + view = [prefBuildingView retain]; + break; + case 1: + view = [prefSavingView retain]; + break; + case 2: + view = [prefMiscView retain]; + break; + } + [(NSBox *)prefEmptyView setContentView:view]; + [prefEmptyView display]; +} + +- (void)setSuccessSound:(id)sender +{ + NSString *path = [self selectFileWithTypes:[NSArray arrayWithObjects:@"snd",@"au",nil]]; + + if (path) { + [successField setStringValue:path]; + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:SuccessSound]; + [preferencesDict setObject:path forKey:SuccessSound]; + } +} + +- (void)setFailureSound:(id)sender +{ + NSString *path = [self selectFileWithTypes:[NSArray arrayWithObjects:@"snd",@"au",nil]]; + + if (path) { + [failureField setStringValue:path]; + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:FailureSound]; + [preferencesDict setObject:path forKey:FailureSound]; + } +} + +- (void)setPromptOnClean:(id)sender +{ +} + +- (void)setSaveAutomatically:(id)sender +{ +} + +- (void)setRemoveBackup:(id)sender +{ +} + +- (void)setSavePeriod:(id)sender +{ +} + +- (void)setEditor:(id)sender +{ + NSString *path = [self selectFileWithTypes:[NSArray arrayWithObjects:@"app",nil]]; + + if (path) { + [editorField setStringValue:path]; + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:Editor]; + [preferencesDict setObject:path forKey:Editor]; + } +} + +- (void)setCompiler:(id)sender +{ + NSString *path = [self selectFileWithTypes:nil]; + + if (path) { + [compilerField setStringValue:path]; + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:Compiler]; + [preferencesDict setObject:path forKey:Compiler]; + } +} + +- (void)setDebugger:(id)sender +{ + NSString *path = [self selectFileWithTypes:nil]; + + if (path) { + [debuggerField setStringValue:path]; + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:Debugger]; + [preferencesDict setObject:path forKey:Debugger]; + } +} + +- (void)setBundlePath:(id)sender +{ + NSString *path = [self selectFileWithTypes:[NSArray arrayWithObjects:@"bundle",nil]]; + + if (path) { + [bundlePathField setStringValue:path]; + + [[NSUserDefaults standardUserDefaults] setObject:path forKey:BundlePaths]; + [preferencesDict setObject:path forKey:BundlePaths]; + } +} + +- (void)promptWhenQuitting:(id)sender +{ +} + +- (NSDictionary *)preferencesDict +{ + return preferencesDict; +} + +- (NSString *)selectFileWithTypes:(NSArray *)types +{ + NSString *file = nil; + NSOpenPanel *openPanel; + int retval; + + openPanel = [NSOpenPanel openPanel]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setCanChooseDirectories:YES]; + [openPanel setCanChooseFiles:YES]; + + retval = [openPanel runModalForDirectory:[[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenDirectory"] file:nil types:types]; + + if (retval == NSOKButton) { + [[NSUserDefaults standardUserDefaults] setObject:[openPanel directory] forKey:@"LastOpenDirectory"]; + file = [[openPanel filenames] objectAtIndex:0]; + + } + return file; +} + +@end + + + + + diff --git a/ProjectCenter/ProjectCenter.app.tiff b/ProjectCenter/ProjectCenter.app.tiff new file mode 100644 index 0000000000000000000000000000000000000000..cdec5d78dbe9dbab3699b460f231c7f23a9b8c95 GIT binary patch literal 9410 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 literal 0 HcmV?d00001 diff --git a/ProjectCenter/ProjectCenter.tiff b/ProjectCenter/ProjectCenter.tiff new file mode 100644 index 0000000000000000000000000000000000000000..cdec5d78dbe9dbab3699b460f231c7f23a9b8c95 GIT binary patch literal 9410 zcmeHNdsvP6+RmQ6XV1pOpjNdGt<^~-N-C*HMKXqjL`X?O4&@LPEr}>eqM}UcKuQNH zh18NmCu!tN820RI&z?Pd&-MMa_r9)gf6x8>e(!3f%rt77Z-3t(U#`dduD5rs>wfOv z{XFmUyH|7PYFTP&nS7%4|35!s!1!bN_TKTM8~%@6up4RP>Z>QFuPynU* z4%GsKxypZ69;>8Fld~gS ziWY{yNpT4`>AvEac`mT-CF36 zGw#wG_pj*Xq;~2W+X{~TsYx@#e;bdw@ppD}f7j?5Rq)#$gZM!%VHpT2fr+*`Ecg-IKpGyI(Ur%XG2x##$=G3{UN%e^7zzFff0 zxv!BG3H(<`PvflYB=(HmffW+J56DcqZ}|h$%$v#g=xg)4 zcxBobKi3ZDo@<|T&+E2bQOC4@1x@lAru*t1-E;1*7?$*KUnwmF$6qYTMv8nN;>@BT zA1eEo>-oy(MXJ9AJ^SZBRy`*ke-C_4fAsC3m#kO59`_Y}ZF(0k8U8MTf3AIAw`%+y zOf#1ai*Z4khkbg{NYIbLL4)1MlpI2ZET3tms7LqwyozDJD9uNS6%=l>8czcn(PiICuLS&e1pJ!5!?nYE z%3je<1bBtg(p}pST7HzazA2@(C8-G6v70u|-bOnmn{irp4Ao5Y)vRtWN()db$-y!4 z0YpkSV5iLnyk6FZ5~l*hm~O>j>$$?_)ZZRCUHY$QE?4NO%Vm1xTtnCG&r|Z)y>D}H zXl49!{H%73n+5K#GhK&&zLP?$(rDwO0t&uL}az2>3eGc<1BZoH}%wwc&|z6AHu`2%Q~Ho1dN`|B3|SnEMOgGqG4v zbBLn6VsTWSfW4APED_Jg^@Zor;$DaIW~Xt=AQfNgr$Q;&j)~e6lmlIZZ)V(KxK-@A z)Icw%UZWRN>)Bk;PH*fx1jv*2_LUmx1& zy^XjoFRW21k&k ze;Dfxg5fcGn(BRP@S63>E{3~n>QzDakD2bf+-}ipmrlH5{gUgQ2Va9{#w~bcdJD(q zpQKGs3O@+{g4`$sAJ~JFiWGr+j-7L#t)GIE`pJmVkAR=P&wK0OrF)Zr`-w{}9y(v5 z`%YE#l-0p2ySv1D6PW88 z&~Kgo6wdyx%}EQVNWVRlEAGoZ*MEv$JXVR8!N+};GCFF#5K~?3`_x0Y$vP#+e9!43 zbxf(C_9^Am!E)hq@k`4e^UmktwPOOodgL#HpXU|jA5R5}jBec=7HT(LFA>K?2hdbf zhSuf^G^)-C(e<>U&w3Qt9#`GvxE;%=&9Ri4CzsH@X;9+Dc7LKXh%NR>$)UcQM^^D54to>~iVyq%Wz)Hk+E9E9r?{Gd(j^&&H2??M-sTM-l$KXwcX-_3IR| z7(6tu`O!@oM2$|>;F>?KcaULEK&sw8q%iz@b#`FJXxBcRYqZ0UEiTm@GpcP*qH_KW|P^98zKlYw%Z<5X&$MkUs%)ZkD;4{UGJ6G1a?vEMUR3D3%<5#hAF zI`J3F;mD>_XmP0%ct6^$o5P~LNEYpZQfE6{KXdLEKj*r{`Y6s#ID)g|52JAWA-X!b zh#pS5O&Z?$zC^vJRiRXt1OM;{T2^`RgYawCAtW&z?Jw%_A3xmdiIVvz1?-1JO2q1H z!?cl3{o=poSWJcElaX(ggws|BkuxrVYU~T>zCC-UF)u{pC-8k0-=AEOm%z_sCElIc zX73G!$2z}3$FVe4qjB329ksD1ltJ5Yh;g4Jip6f7t#BFX*f0Jolh0DF)d8Fuw;x%S z@i<`-M`f&rJM6F10~56u(%VnCCNIMVgAgoX^P@(;{5WytYz!SU0@@OtLB%JZe1hS_ zhxLgOzt(2hl}Oaxjh$mQ!D)m;zxYdSGwGz|Udpi8gX0#llxDt*PFW?=ZM#d_9&EDN zPD(P1q=Tm0D8Xb4#T##?LhEDHW>bd_<9f9h!hAID19JYk7nSUhLJRX^`e;bQ??BhV zDZ-D+W)@MoWxmiWxn{WLIram(yAU~g114)v>Q_5F56j^uu9;T*XunAW#hZjvobe`# zRfN%L)<8I!K3WU&(KKFEKAX3K1GoN&|H0%CJ97_pPP>ULS&G0t*9_M@ z$DW`YgH@xJ!a>{iXYunK;>Jd*b{nmyU5a%Sr3j@R@(_wQ-9i`b3aH7dR`7Au9wzs4 zxQAIOc!0S^$FO#JB+X9Q@RRGnpHn|I^H?wQq}?8|)HbC~@K%!9bBc4X;hkfT*Vzdd zZAZ+~cI#LB96SH98DZs`G&YJN8Sd?d!L&sdL|Y7lC}Z3~s-I9n%|^9?52f)iuL~Y# zIcf}xkY#oRvF=Kmu|I_PEU)2TbL_39nF*o%xl84q=WyTk7S5TS5@rPcoZ_0-@V;L+ z8j)i*VA7}782{UWeP0l58m{7)!(}UJlXL}zNtaQKQ5Y3lWz!9_Dnaua|5)u|mg0)6 z1eLNv6d7k>zuSKJu3k&iqF0c6TrhbZRz!D&vcSZdAQIOpX6q$$Y3{lT#?NK7~||6m0j7p#{D{G{Ju+Eu6QKc6lkO*s~B1 z*>^KbL_YBP)E(xOe5I%*{xKeZb$_nI71n1{`AuMzuEh}f4x3>MRF z<8V4_lSQ=_CCvM-5d7C`%=_lt*D(LMit*2Vv~p=K&Ku^S)Z#QM#^s~Nz69IM!*H9; zWj7{YLalWP$}RHXKVl)=hfan2Fc(CRi4f{GN$8jAnpLuS!THn4Sn$~w@2y)6Zq3n8 z?4w-Ga0eSKq9B8X6sYe*p^~MPWFAZB$LG)$qY}ZtyefO^eRJ+BnBU2LK<;A}NwRQ8 zd;=S}OFrj9Tjowv-zCB<3cdk4XPWgg}Q=D(IR|Cr-1 zX86yFPohwqDfkG1Vn0-lEoA$uWMOa8d$x}m9f7FPn+5G?YIpspAfe|>8D_5>4CZ(5 zRpXvV{(5tTSf)3R!sWq~Zk0quW3y3dScqz=+JCK(UbINpi{ygi&0>d!E~SWBkp#xgK4nGIl3OoRT4jj zeHJYg!jl&0da~MBKsyziDA_oUGMN|3_mtd+E@Y8sa2(tR%wYZ#$N#0`sIaf)b*tf? z>z((Rm81PIbL4c)88K5eSZo8m-)N|ztDnBND!^a?!#=Y+Jei)nX}vU%qKv{RUJ;FC zSsYG?4_hW^45i;e6dbm#%?Zyt>jR+XC7;{F=M1YPTT!v5npjsVh9{l^9 z5cW)7%xgh^9;=Bt!dk3gd4%w`3cX;z&g5Z@_$gFT_Z?rHW7RKX*RR&l}WzpAON| z`iQ+_h?WieZ%D86UkT^GW`8AAGUTJ~>+I$sA9tVsik*L^#eUD;tEKhH5S{Mp?8*?4 z=DLa25Cg5>sP8eU93t*HzdA(H>od)JeddC<*V+5nCwKoF`p-RDT4P6Qbszs5Cr5VA literal 0 HcmV?d00001 diff --git a/ProjectCenter/ProjectCenter_main.m b/ProjectCenter/ProjectCenter_main.m new file mode 100644 index 0000000..e6d6e80 --- /dev/null +++ b/ProjectCenter/ProjectCenter_main.m @@ -0,0 +1,31 @@ +/* + GNUstep ProjectCenter - http://www.projectcenter.ch + + Copyright (C) 2000 Philippe C.D. Robert + + Author: Philippe C.D. Robert + + This file is part of ProjectCenter. + + This application is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This application is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + + $Id$ +*/ + +#import + +int main(int argc, const char *argv[]) { + return NSApplicationMain(argc, argv); +} diff --git a/ProjectCenter/ProjectCentre_add.tiff b/ProjectCenter/ProjectCentre_add.tiff new file mode 100644 index 0000000000000000000000000000000000000000..92b48e0bb980f7112a2b0796e4a1111eedf47f53 GIT binary patch literal 6594 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 literal 0 HcmV?d00001 diff --git a/ProjectCenter/ProjectCentre_build.tiff b/ProjectCenter/ProjectCentre_build.tiff new file mode 100644 index 0000000000000000000000000000000000000000..5ab5b20689fe575f84bd5a9085ff734fa92be4f6 GIT binary patch literal 6594 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 literal 0 HcmV?d00001 diff --git a/ProjectCenter/ProjectCentre_clean.tiff b/ProjectCenter/ProjectCentre_clean.tiff new file mode 100644 index 0000000000000000000000000000000000000000..d5f59cfbf9a2c1ad9ac19ecfbd3a325922caf2a1 GIT binary patch literal 6594 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 SMHUg404fGqhE-G$Bp{1`f`EW1N+c>GXiyLZ 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 J8J<_ie*!N8LhJwl literal 0 HcmV?d00001 diff --git a/ProjectCenter/ProjectCentre_files.tiff b/ProjectCenter/ProjectCentre_files.tiff new file mode 100644 index 0000000000000000000000000000000000000000..ca312b9d9570277824031c0c4365b87878de1d5e GIT binary patch literal 6594 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 literal 0 HcmV?d00001 diff --git a/ProjectCenter/ProjectCentre_find.tiff b/ProjectCenter/ProjectCentre_find.tiff new file mode 100644 index 0000000000000000000000000000000000000000..c6e7e1ca48cd4116c919de88ba1b9d8f9d2d7960 GIT binary patch literal 6594 zcmd6re@v8h9LMjD1J6U`5D-M=L^2U`sD)dGl7=B=kd~(6#9@}Y8q~=7V~UlnvU25y z)r?O4LjnqtEDfiJE}Ko6<;+}~=pP~G%q^O3)$V$|&pUU+6Fs<+w|n_~@B8a{KcDZf z=OHgI-C!AD2v*rNDDQwh*iJ%NKf~*#nd>Py3Qh1G9QR&-=Gp>BzyaCtf2fF?d;%w+ z2|kC00vkKqKsj3*ZEKjE4V0b~=?e#pf3|2n`mCWk+0G+?Pp7 zNeyMPW8(&4Z04Kx~!#+`WDP+VNRxwN$O^+k&o zy;N9OxUit0;ED0$$LHZ&b6_$og*s3i)rWkxKqys2XKwf&zK)EH{B+W!NsgMDnlGxV zs;XC_d1wl{7Y#*>wVAqM5CxCGCfEz#f}S%QLZJdWISlevPkgr3)zuw7efspd1~d~5 zLeYqrS>%hcHFdbLyvDUs6t-I2zq9xg(o)oOjCva)hVYin!UA@n%vi*EA< zM(Qb+gJBM|c(HTss`RYq;V0%>WmZ;JS#xvq(I3zX)C+Z?W5qTJ-i7YQ&`BScp(!&n zb8$sQ#im-sIw;h5lHVQ0(pYP}yc?a!-WaY@7!AQFj>dG8 z2caG^6f->Nyt+Ze?(T?)i1&GnKVStFZg+kwUE}k%}lWP<=<}dRVwN|Q{!+`F|JEtH9nnqY$v^h${o+(j_r%caKl!Z z0Jo}7l^c{#j^5!eLG}%$*E0IzXE`w&iN8$zU19tAks__HfQq)5?1iKIxJ^dS`+@F} z9I)c8Gc{)y!ftQ|s*b0JwKlwEad z{o7$aoCJBy0H69Z@3s)TVPr%=FVfqH;h(U9bc(N{uE{oY_OvvsWB%Aam;3cL?KGPV zrDS(y-uZW{y;z<$LM_yT)=M;To56ZGz;zDf3*z@Y-Y${fL<}FLo_xz&(acei&KDkt zzWho~Klj8Gi+gaixiQQb)PAI{0!i<9v!NKagFL>Bj}JMUtGKR$oyQbfyxLoK^zjp}p0YIcHq<708|=_4cEaaL0i9;2z#U1{&ry`F|Vcn92GH16eo zyiNKyZ<*?-921Fq1)Em6|AT!nmG zhp|1y{M$@kHYh&xU>zPmVEr~#=fY4o+o^KgAIo8|9jT`4mO-*&t&gU@{^D$oQfwk}q_tE!6 z6zJPWam^uLWo3+W4tas3y=NKg>p0)^?PJD_aoKD(`O|opK&awKS6!Cov*NgqJ^lRD zsZ(A24Z;`47V?X_+;iv}dg4fTd*kEdUGnG`M|tcC(tONkUL50H{R*EDF8&1JTQfZ+ zj`Fx3k0+Rqe`!9-qj$~7qt^eOmc9=hteIAy$C#KHpGOB}J;9^C+dozuHP*Sgxi0n~ zpU0ju);d2O@|c*I=vgy?LSt7ZMebUyZ#F_ET2~Z literal 0 HcmV?d00001 diff --git a/ProjectCenter/ProjectCentre_prefs.tiff b/ProjectCenter/ProjectCentre_prefs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..5a4ddcb171c9f18e9af617b1229d86116af000c7 GIT binary patch literal 6594 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 + +@interface $FILENAMESANSEXTENSION$ : NSObject +{ + +} + +@end diff --git a/ProjectCenter/m.template b/ProjectCenter/m.template new file mode 100644 index 0000000..1216fe5 --- /dev/null +++ b/ProjectCenter/m.template @@ -0,0 +1,18 @@ +$$ Lines starting with $$ are not inserted into newly created files +$$ The following substitutions are made: +$$ +$$ $FILENAME$ e.g. foo.m +$$ $FILENAMESANSEXTENSION$ e.g. foo +$$ $DIRECTORY$ e.g. /tmp/MyNewApp +$$ $PROJECTNAME$ e.g. MyNewApp +$$ $SUBPROJECTNAME$ e.g. TheGoodPart.subproj +$$ $USERNAME$ e.g. mwagner +$$ $DATE$ e.g. Jan-1-1994 +$$ +/* $FILENAME$ created by $USERNAME$ on $DATE$ */ + +#import "$FILENAMESANSEXTENSION$.h" + +@implementation $FILENAMESANSEXTENSION$ + +@end diff --git a/README b/README new file mode 100644 index 0000000..e60cc0e --- /dev/null +++ b/README @@ -0,0 +1,23 @@ +README +****** + + THIS IS A DEVELOPER 'PRE RELEASE RELEASE' ONLY! It is meant to give a + sneak peak for those who want to help, it is not meant as a usable + application right now! + + If you want to volunteer, please contact me! + +TODOs +***** + + Code editing/external editor support + Debugging + UI handling + Project Building + Code 'wizards' + UML case tool?! + Overall code improvements + ... and a lot more! + +Philippe C.D. Robert, 21.3.2000 + \ No newline at end of file diff --git a/Version b/Version new file mode 100644 index 0000000..d8df70a --- /dev/null +++ b/Version @@ -0,0 +1,12 @@ +# 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.8.0 + +# The version number of this release. +MAJOR_VERSION=0 +MINOR_VERSION=0 +SUBMINOR_VERSION=1 +PC_VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} +VERSION=${PC_VERSION}