pax_global_header00006660000000000000000000000064147537555250014534gustar00rootroot0000000000000052 comment=a8cd1792e08a50dd9900474373e6ca8daad4a4a9 apps-gorm-gorm-1_5_0/000077500000000000000000000000001475375552500145505ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/.github/000077500000000000000000000000001475375552500161105ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/.github/scripts/000077500000000000000000000000001475375552500175775ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/.github/scripts/dependencies.sh000077500000000000000000000052321475375552500225660ustar00rootroot00000000000000#! /usr/bin/env sh set -ex install_gnustep_make() { echo "::group::GNUstep Make" cd $DEPS_PATH git clone -q -b ${TOOLS_MAKE_BRANCH:-master} https://github.com/gnustep/tools-make.git cd tools-make MAKE_OPTS= if [ -n "$HOST" ]; then MAKE_OPTS="$MAKE_OPTS --host=$HOST" fi if [ -n "$RUNTIME_VERSION" ]; then MAKE_OPTS="$MAKE_OPTS --with-runtime-abi=$RUNTIME_VERSION" fi ./configure --prefix=$INSTALL_PATH --with-library-combo=$LIBRARY_COMBO $MAKE_OPTS || cat config.log make install echo Objective-C build flags: $INSTALL_PATH/bin/gnustep-config --objc-flags echo "::endgroup::" } install_libobjc2() { echo "::group::libobjc2" cd $DEPS_PATH git clone -q https://github.com/gnustep/libobjc2.git cd libobjc2 git submodule sync git submodule update --init mkdir build cd build cmake \ -DTESTS=off \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DGNUSTEP_INSTALL_TYPE=NONE \ -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PATH \ ../ make install echo "::endgroup::" } install_libdispatch() { echo "::group::libdispatch" cd $DEPS_PATH git clone -q https://github.com/swiftlang/swift-corelibs-libdispatch.git libdispatch mkdir libdispatch/build cd libdispatch/build # -Wno-error=void-pointer-to-int-cast to work around build error in queue.c due to -Werror cmake \ -DBUILD_TESTING=off \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_PATH \ -DCMAKE_C_FLAGS="-Wno-error=void-pointer-to-int-cast" \ -DINSTALL_PRIVATE_HEADERS=1 \ -DBlocksRuntime_INCLUDE_DIR=$INSTALL_PATH/include \ -DBlocksRuntime_LIBRARIES=$INSTALL_PATH/lib/libobjc.so \ ../ make install echo "::endgroup::" } install_gnustep_gui() { echo "::group::GNUstep GUI" cd $DEPS_PATH . $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh git clone -q -b ${LIBS_GUI_BRANCH:-master} https://github.com/gnustep/libs-gui.git cd libs-gui ./configure make make install echo "::endgroup::" } install_gnustep_base() { echo "::group::GNUstep Base" cd $DEPS_PATH . $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh git clone -q -b ${LIBS_BASE_BRANCH:-master} https://github.com/gnustep/libs-base.git cd libs-base ./configure make make install echo "::endgroup::" } mkdir -p $DEPS_PATH # Windows MSVC toolchain uses tools-windows-msvc scripts to install non-GNUstep dependencies if [ "$LIBRARY_COMBO" = "ng-gnu-gnu" -a "$IS_WINDOWS_MSVC" != "true" ]; then install_libobjc2 install_libdispatch fi install_gnustep_make install_gnustep_base install_gnustep_gui apps-gorm-gorm-1_5_0/.github/workflows/000077500000000000000000000000001475375552500201455ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/.github/workflows/main.yml000066400000000000000000000066151475375552500216240ustar00rootroot00000000000000name: CI on: push: pull_request: workflow_dispatch: inputs: tools_make_branch: description: "tools-make branch" default: "master" required: true libs_base_branch: description: "libs-base branch" default: "master" required: true libs_back_branch: description: "libs-back branch" default: "master" required: true env: APT_PACKAGES: >- pkg-config libgnutls28-dev libffi-dev libicu-dev libxml2-dev libxslt1-dev libssl-dev libavahi-client-dev zlib1g-dev gnutls-bin libcurl4-gnutls-dev libgmp-dev libcairo2-dev libjpeg-dev libtiff-dev libpng-dev libicns-dev # packages for GCC Objective-C runtime APT_PACKAGES_gcc: >- libobjc-10-dev libblocksruntime-dev gobjc # packages for libobjc2 / libdispatch APT_PACKAGES_clang: >- libpthread-workqueue-dev jobs: ########### Linux ########### linux: name: ${{ matrix.name }} runs-on: ubuntu-latest # don't run pull requests from local branches twice if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository strategy: fail-fast: false matrix: include: - name: Ubuntu x64 GCC library-combo: gnu-gnu-gnu CC: gcc CXX: g++ - name: Ubuntu x64 Clang gnustep-1.9 library-combo: ng-gnu-gnu runtime-version: gnustep-1.9 CC: clang CXX: clang++ - name: Ubuntu x64 Clang gnustep-2.0 library-combo: ng-gnu-gnu runtime-version: gnustep-2.0 CC: clang CXX: clang++ env: SRC_PATH: ${{ github.workspace }}/source DEPS_PATH: ${{ github.workspace }}/dependencies INSTALL_PATH: ${{ github.workspace }}/build CC: ${{ matrix.CC }} CXX: ${{ matrix.CXX }} LIBRARY_COMBO: ${{ matrix.library-combo }} RUNTIME_VERSION: ${{ matrix.runtime-version }} defaults: run: working-directory: ${{ env.SRC_PATH }} steps: - uses: actions/checkout@v3 with: path: ${{ env.SRC_PATH }} - name: Install packages run: | sudo apt-get -q -y update sudo apt-get -q -y install $APT_PACKAGES $APT_PACKAGES_${{ matrix.library-combo == 'ng-gnu-gnu' && 'clang' || 'gcc' }} # gnustep-2.0 runtime requires ld.gold or lld if [ "$RUNTIME_VERSION" = "gnustep-2.0" ]; then sudo update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 10 fi - name: Install dependencies env: TOOLS_MAKE_BRANCH: ${{github.event.inputs.tools_make_branch}} LIBS_BASE_BRANCH: ${{github.event.inputs.libs_base_branch}} LIBS_GUI_BRANCH: ${{github.event.inputs.libs_gui_branch}} run: ./.github/scripts/dependencies.sh - name: Build source for Gorm run: . $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh && make && make install - name: Run tests run: | . $INSTALL_PATH/share/GNUstep/Makefiles/GNUstep.sh make check - name: Upload logs uses: actions/upload-artifact@v4 if: always() with: name: Logs - ${{ matrix.name }} path: | ${{ env.SRC_PATH }}/config.log ${{ env.SRC_PATH }}/Tests/tests.log apps-gorm-gorm-1_5_0/.gitignore000066400000000000000000000001201475375552500165310ustar00rootroot00000000000000*.app *.debug *.profile *.palette *.plugin .gdbinit obj derived_src *.framework apps-gorm-gorm-1_5_0/Applications/000077500000000000000000000000001475375552500171765ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/GNUmakefile000066400000000000000000000007311475375552500212510ustar00rootroot00000000000000# # GNUmakefile - Generated by ProjectCenter # ifeq ($(GNUSTEP_MAKEFILES),) GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null) endif ifeq ($(GNUSTEP_MAKEFILES),) $(error You need to set GNUSTEP_MAKEFILES before compiling!) endif include $(GNUSTEP_MAKEFILES)/common.make # Generator bundles SUBPROJECTS = \ Gorm # # Makefiles # -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/000077500000000000000000000000001475375552500201025ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/ANNOUNCE000066400000000000000000000030571475375552500212400ustar00rootroot000000000000001 ANNOUNCE ********** This is version 1.3.1 of Gorm. 1.1 What is Gorm? ================= Gorm is an acronym for Graphic Object Relationship modeler (or perhaps GNUstep Object Relationship Modeler). Gorm is a clone of the Cocoa (OpenStep/NeXTSTEP) 'Interface Builder' application for GNUstep. 1.2 Noteworthy changes in version '1.3.1' ========================================= * Fix issue with cells appearing in top level editor * Make nibs read only since saving is unstable * Add XIB reading so that they can be loaded by Gorm * Add storyboard file to list of supported files so that an icon is displayed, does not support reading yet. * Fix testing model mode * Bug fixes in GormClassManager, GormDocument, etc. 1.3 How can I get support for this software? ============================================ You may wish to use the GNUstep discussion mailing list for general questions and discussion. Look at the GNUstep Web Pages for more information regarding GNUstep resources 1.4 Where can you get it? How can you compile it? ================================================= You can download sources and rpms (for some machines) from or from 1.5 Where do I send bug reports? ================================ Bug reports can be sent to . 1.6 Obtaining GNU Software ========================== Check out the GNUstep web site. (), and the GNU web site. () apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/000077500000000000000000000000001475375552500226205ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/Gorm.gorm/000077500000000000000000000000001475375552500244675ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/Gorm.gorm/data.classes000066400000000000000000000051071475375552500267620ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "addAttributeToClass:", "alignSelectedObjects:", "arrangeSelectedObjects:", "createClassFiles:", "createSubclass:", "endTesting:", "exportStrings:", "exportXLIFFDocument:", "groupSelectionInBox:", "groupSelectionInMatrix:", "groupSelectionInScrollView:", "groupSelectionInSplitView:", "groupSelectionInView:", "guideline:", "importXLIFFDocument:", "inspector:", "instantiateClass:", "loadClass:", "loadImage:", "loadPalette:", "loadSound:", "newAction:", "orderFrontFontPanel:", "palettes:", "preferencesPanel:", "remove:", "selectAllItems:", "setName:", "testinterface:", "translate:", "ungroup:" ); Super = NSObject; }; Gorm = { Actions = ( "editClass:", "createSubclass:", "testInterface:", "setName:", "selectAllItems:", "paste:", "palettes:", "loadSound:", "loadPalette:", "inspector:", "infoPanel:", "endTesting:", "delete:", "cut:", "copy:", "close:", "miniaturize:", "debug:", "loadImage:", "orderFrontFontPanel:", "ungroup:", "groupSelectionInScrollView:", "groupSelectionInBox:", "groupSelectionInSplitView:", "remove:", "addAttributeToClass:", "instantiateClass:", "createClassFiles:", "loadClass:", "preferencesPanel:", "guideline:", "print:", "groupSelectionInView:", "groupSelectionInMatrix:" ); Outlets = ( gormMenu, guideLineMenuItem ); Super = NSApplication; }; GormAppDelegate = { Actions = ( "copy:", "cut:", "delete:", "endTesting:", "groupSelectionInBox:", "groupSelectionInSplitView:", "inspector:", "loadImage:", "loadSound:", "ungroup:", "palettes:", "paste:", "preferencesPanel:", "selectAllItems:", "setName:", "testinterface:", "loadPalette:", "createClassFiles:", "createSubclass:", "groupSelectionInScrollView:", "groupSelectionInView:", "guideline:", "instantiateClass:", "loadClass:", "addAttributeToClass:", "remove:", "exportXLIFFDocument:", "importXLIFFDocument:", "exportStrings:", "translate:" ); Outlets = ( gormMenu, guideLineMenuItem ); Super = NSObject; }; GormDocumentController = { Actions = ( ); Outlets = ( ); Super = NSDocumentController; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/Gorm.gorm/data.info000066400000000000000000000002701475375552500262540ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/Gorm.gorm/objects.gorm000066400000000000000000001002501475375552500270040ustar00rootroot00000000000000GNUstep archive000f4240:00000011:00000432:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01 GSNibItem01NSString&%GormAppDelegate  &01NSMenu0&%GORM01NSMutableArray1 NSArray&  01 NSMenuItem0 &%Info0 &JJI0 1 NSImage0 &%GSMenuSelected0 0& % GSMenuMixed2 submenuAction:v24@0:8@16I0 0&0 0& % Info Panel... JJI I0 0&%Preferences... JJI I0 0&%Help...0&%?JJI I0 0&%Document JJI I00&0 0&%Open...0&%oJJI I0 0 & % Open Recent JJI I0!0"& % Open Recent0#&0$ 0%& % Clear List JJI I0& 0'&%New Application0(&%nJJI I0) 0*& % New Module JJI I0+*0,&0- 0.& % New Empty0/&%NJJI I00 01& % New Inspector JJI I02 03& % New Palette JJI I04 05&%Save06&%sJJI I07 08& % Save As...09&%SJJI I0: 0;& % Save To... JJI I0< 0=&%Save All JJI I0> 0?&%Revert to Saved0@&%uJJI I0A 0B&%Test Interface0C&%rJJI I0D 0E& % Translate JJI I0FE0G&0H 0I&%Import Strings JJI I0J 0K&%Export Strings JJI I0L 0M& % Import XLIFF JJI I0N 0O& % Export XLIFF JJI I0P 0Q& % Miniaturize0R&%mJJI I0S 0T&%Close JJI I0U 0V&%Debug JJI I0W 0X& % Load Sound... JJI I0Y 0Z& % Load Image... JJI I0[ 0\&%Edit JJI I0]\0^&0_ 0`&%Cut0a&%xJJI I0b 0c&%Copy0d&%cJJI I0e 0f&%Paste0g&%vJJI I0h 0i&%Delete0j&%JJI I0k 0l& % Select All0m&%aJJI I0n 0o& % Set Name... JJI I0p 0q&%Classes JJI I0rq0s&0t 0u&%Create Subclass...0v&%CJJI I0w 0x& % Load Class...0y&%LJJI I0z 0{&%Create Class Files0|&%BJJI I0} 0~& % Instantiate0&%IJJI I0 0&%Add Outlet/Action0&%AJJI I0 0&%Remove0&%XJJI I0 0&%Format JJI I00&%Format0&0 0&%Font JJI I00&  0 0& % Font Panel0&%tJJI0 0 I0 0&%Italic0&%iJJI0 0 I0 0&%Bold0&%bJJI0 0 I0 0&%Heavier JJI0 0 I0 0&%Lighter JJI0 0 I0 0&%Larger0&%+JJI0 0 I0 0&%Smaller0&%-JJI0 0 I0 0& % Underline JJI I0 0& % Superscript JJI I0 0& % Subscript JJI I0 0&%Unscript JJI I0 0& % Copy Font0&%3JJI I0 0& % Paste Font0&%4JJI I0 0&%Text JJI I00&0± 0ñ& % Align Left JJI I0ı 0ű&%Center JJI I0Ʊ 0DZ& % Align Right JJI I0ȱ 0ɱ& % Show Ruler JJI I0ʱ 0˱& % Copy Ruler0̱&%1JJI I0ͱ 0α& % Paste Ruler0ϱ&%2JJI I0б 0ѱ&%Bring to Front JJI I0ұ 0ӱ& % Send to Back JJI I0Ա 0ձ&%Group JJI I0ֱ0ױ&0ر 0ٱ& % In Splitview JJI I0ڱ 0۱&%In Box JJI I0ܱ 0ݱ& % In Scrollview JJI I0ޱ 0߱&%In View JJI I0 0&%Ungroup JJI I0 0& % Alignment JJI I00& % Alignment0&0 0&%Turn GuideLine Off JJI I0 0&%Center Vertically JJI I0 0&%Center Horizontally JJI I0 0& % Left Edges JJI I0 0& % Right Edges JJI I0 0& % Top Edges JJI I0 0& % Bottom Edges JJI I0 0&%Page Layout...0&%PJJI I0 0&%Tools JJI I00&0 0& % Colors... JJI I0 0& % Inspector... JJI IP P&%Palettes JJI IPP&%PalettesP&P P&%Open... JJI IP P& % Palettes... JJI IP P &%Windows JJI IP  P &P P&%Arrange In Front JJI IP P&%Miniaturize WindowP&%mJJI IP P& % Close WindowP&%wJJI IP P&%Print...P&%pJJI IP P&%Services JJI IPP&P P&%HideP&%hJJI IP P &%QuitP!&%qJJI IP"P#&%GormDocumentController  &P$P%& % NSFontManager  &P&&P'&P(1 NSMutableDictionary1 NSDictionary&P)& % MenuItem81UP*& % MenuItem(21)P+ P,& % Page LayoutP-&%PJJI IP.& % MenuItem183&P/& % MenuItem(87)P0& % GormNSMenu1P1& % MenuItem(49)P2&% NSOwnerP3& % NSApplicationP4& % GormNSMenu33P5& % MenuItem(31)P6& % MenuItem99tP7& % MenuItem266kP8& % MenuItem75AP9& % MenuItem177P:& % MenuItem242#"P;& % MenuItem51P< P=& % Font PanelP>&%tJJI IP?& % MenuItem153P@ PA&%Ungroup JJI IPB& % MenuItem(84)PC& % GormNSMenu27+PD& % MenuItem(46)PE& % MenuItem236PF& % MenuItem690PG& % MenuItem301:PH& % MenuItem147kPI& % MenuItem212@PJ& % MenuItem45nPK& % MenuItem123PL& % MenuItem21UPM& % MenuItem190P& % MenuItem(52)P& % GormNSMenu41]P& % MenuItem2P& % MenuItem207nP& % MenuItem298:P& % MenuItem16-P& % MenuItem118P& % MenuItem274Pı& % MenuItem(28)Pű& % MenuItem60PƱ& % MenuItem162PDZ& % MenuItem(10)Pȱ Pɱ&%Print...Pʱ&%pJJI IP˱& % MenuItem(76)P̱& % GormNSMenu4rPͱ& % GormNSMenu36Pα& % MenuItem(2):Pϱ& % GormNSMenu12Pб& % MenuItem269Pѱ& % MenuItem(38)Pұ& % MenuItem245-Pӱ& % MenuItem78JPԱ& % MenuItem156pPձ& % NSFontMenuPֱ& % MenuItem221Pױ& % MenuItem54HPر& % MenuItem132>Pٱ& % MenuItem(25)Pڱ& % MenuItem30tP۱& % MenuItem(73)Pܱ& % MenuItem239Pݱ& % MenuItem(35)Pޱ& % MenuItem215pP߱& % MenuItem48P& % MenuItem282VP& % MenuItem24[P& % MenuItem126-P& % MenuItem(22)SP& % MenuItem193DP& % MenuItem102}P& % MenuItem(88)P& % MenuItem(70)P& % GormNSMenu43rP&%AppDelegate(0)P& % MenuItem4P& % MenuItem209P& % MenuItem(32)P& % MenuItem182P& % MenuItem276wP& % MenuItem1872P& % MenuItem252AP& % MenuItem85_P& % MenuItem163P& % MenuItem61P& % MenuItem(85)P& % GormNSMenu5P& % GormNSMenu37P& % GormNSMenu13P& % MenuItem(47)P& % MenuItem2460P& % MenuItem79PP& % MenuItem157tP& % MenuItem55DP& % MenuItem133AP& % MenuItem31P& % MenuItem(82)P& % MenuItem(44)P& % NSWindowsMenu P& % MenuItem216wP& % MenuItem49P& % MenuItem25_P& % MenuItem1270P& % MenuItem283P& % MenuItem92P& % MenuItem194HP & % MenuItem103P & % MenuItem170P &%Menu(5)P & % MenuItem(59)P & % MenuItem(41)P& % GormNSMenu44P& % GormNSMenu20P& % MenuItem5P& % MenuItem19AP& % MenuItem277zP& % MenuItem1884P& % MenuItem253DP& % MenuItem86bP& % MenuItem164P& % MenuItem62P& % MenuItem(94)P P& % Close Palette JJI IP& % MenuItem140WP&%Menu(2)P& % GormNSMenu6 P& % MenuItem(56)P& % GormNSMenu38P & % GormNSMenu14P!& % MenuItem2472P"& % MenuItem223P#& % MenuItem56JP$& % MenuItem158wP%& % MenuItem290P&& % MenuItem32P'& % MenuItem134DP(& % MenuItem110P)& % MenuItem(91)LP*& % MenuItem(53)P+& % MenuItem217zP,& % MenuItem26bP-& % MenuItem1282P.& % MenuItem284P/& % MenuItem195JP0& % MenuItem104P1& % MenuItem260YP2& % MenuItem93P3& % MenuItem171P4& % MenuItem(68)P5& % MenuItem(50)P6& % GormNSMenu45P7& % GormNSMenu21P8& % MenuItem6P9& % MenuItem278}P:& % MenuItem1897P;& % MenuItem254HP<& % MenuItem87eP=& % MenuItem165P>& % MenuItem230P?& % MenuItem63P@& % MenuItem141YPA& % MenuItem(17)PB&%NSFont$PC& % GormNSMenu7PD& % MenuItem(65)PE& % GormNSMenu39+PF& % MenuItem(9)$PG& % GormNSMenu15+PH& % MenuItem2484PI& % MenuItem224PJ& % MenuItem57-PK& % MenuItem159zPL& % MenuItem200YPM& % MenuItem33 PN& % MenuItem135HPO& % MenuItem291PP& % MenuItem111PQ& % MenuItem(14)PR& % MenuItem(62)PS&%NSMenuPT& % MenuItem(6)PU& % MenuItem218}PV&%MenuItemPW& % MenuItem27ePX& % MenuItem1294PY& % MenuItem285PZ& % MenuItem196PP[& % MenuItem105P\& % MenuItem261[P]& % MenuItem94P^& % MenuItem172P_& % MenuItem(29)P`& % MenuItem702Pa& % MenuItem(11)+Pb& % MenuItem(77)Pc& % MenuItem(3)Pd& % GormNSMenu46Pe& % GormNSMenu22Pf& % MenuItem7Pg& % MenuItem279Ph& % MenuItem(39)Pi& % MenuItem255JPj& % MenuItem88hPk& % MenuItem231Pl& % MenuItem64Pm& % MenuItem166Pn& % MenuItem142[Po& % MenuItem(26)Pp& % MenuItem40wPq& % GormNSMenuPr& % GormNSMenu8}Ps& % MenuItem(74)Pt& % GormNSMenu16FPu& % MenuItem(0):Pv& % MenuItem(36)Pw& % MenuItem2497Px& % MenuItem225Py& % MenuItem580Pz& % MenuItem201[P{& % MenuItem34 P|& % MenuItem136JP}& % MenuItem292P~& % MenuItem(23)P& % MenuItem107P& % MenuItem112P& % MenuItem(89)NP& % MenuItem(71)P& % MenuItem(33)P& % MenuItem219P& % MenuItem286P& % MenuItem28kP& % MenuItem95@P& % MenuItem262_P& % MenuItem106P& % MenuItem197SP& % MenuItem173P& % MenuItem714P& % MenuItem(20)P& % MenuItem(86)P& % GormNSMenu47 P& % GormNSMenu23 P& % MenuItem(48)P& % MenuItem8&P& % MenuItem(30)P& % MenuItem256PP& % MenuItem89kP& % MenuItem232P& % MenuItem65P& % MenuItem167P& % MenuItem41zP& % MenuItem143_P& % GormNSMenu9FP& % MenuItem(83)P& % GormNSMenu17]P& % MenuItem(45)P& % MenuItem592P& % MenuItem226P& % MenuItem202_P& % MenuItem293P& % MenuItem137PP& % MenuItem35P& % MenuItem113P& % MenuItem11hP& % MenuItem180P&%Menu(6)P& % MenuItem(80)P& % MenuItem(42)P& % GormNSMenu30}P& % MenuItem29pP& % MenuItem287P& % MenuItem198UP& % MenuItem263bP& % MenuItem107P& % MenuItem727P& % MenuItem174P&%Menu(3)P& % GormNSMenu48P& % MenuItem(57)P& % GormNSMenu24P& % MenuItem94P& % MenuItem257SP& % MenuItem168P& % MenuItem66&P& % MenuItem233P& % MenuItem144bP& % MenuItem42}P& % MenuItem120P&%Menu(0)!P& % MenuItem(54)P& % MenuItem227P±& % MenuItem294Pñ& % MenuItem138SPı& % MenuItem203bPű& % MenuItem36PƱ& % MenuItem12P& % MenuItem80SP& % MenuItem182P& % MenuItem(12)SP& % MenuItem(78)P& % MenuItem(60)P& % MenuItem(4)P& % GormNSMenu32P& % MenuItem289P& % MenuItem265hP& % MenuItem98pP& % MenuItem109P& % MenuItem241P& % MenuItem74>P& % MenuItem176P& % MenuItem50@P& % MenuItem152P& % MenuItem(27)P& % MenuItem(75)P& % GormNSMenu26P& % MenuItem(1):P& % MenuItem259WP& % MenuItem(37)P& % MenuItem235P& % MenuItem68-P& % MenuItem300:P& % MenuItem44P& % MenuItem146hP& % MenuItem122P& % MenuItem20PP& % MenuItem(24)P & % MenuItem(72)P & % MenuItem229P & % MenuItem(34)P &%NSRecentDocumentsMenu!P & % MenuItem296P& % MenuItem205hP& % MenuItem116P& % MenuItem14SP&P1NSNibConnectorS2PSP SPSPŐPאPאPאPSPPPPPP P!P"P#P$GڐP%P&P'P(P)LP*zSP+zP,P-P.P/P0SP1P2P3[SP4[P5&P6MSP7MP8{P9P:P;SP<P=pP>P?P@PAPBPCPD1NSNibControlConnectorPE&% NSFirstPF&%performMiniaturize:PGEPH& % performClose:PI{EPJ&%arrangeInFront:PKEPL&%hide:PM EPN& % terminate:POEPP&%copy:PQEPR&%paste:PSPT&%submenuAction:PUGPVyGPWGPXEPY&%orderFrontStandardInfoPanel:PZ'P['P\&%submenuAction:P]'P^|P_NP`SPa&%submenuAction:PbSPc&%submenuAction:PdEPe&%testInterface:PfEPg& % miniaturize:PhEPi&%close:PjEPk&%debug:PlEPm& % loadSound:PnLEPo& % loadImage:PpzSPq&%submenuAction:PrEPs&%delete:PtEPu&%setName:PvB2PwSPx&%submenuAction:Py[SPz&%submenuAction:P{SP|SP}&%submenuAction:P~7ϐP7P7Pm7Pm7P&%submenuAction:PemPePePeP ePePeP&EP& % inspector:PSP&%submenuAction:PPEP1NSMutableString& % openDocument:PEP& % newDocument:PEPyEPEPEP& % saveDocument:PEP&%saveDocumentAs:PEP&%saveAllDocuments:PEP&%saveDocumentTo:PEP&%revertDocumentToSaved:P#2PEP&%arrangeSelectedObjects:PEPEP&%alignSelectedObjects:PEPEPEP EPEPTP TP PTP&%submenuAction:PEP&%clearRecentDocuments:PEP& % selectAll:Po7PoPPPPP5PPP P EP& % underline:PP±EPñ& % superscript:PıvPűvEPƱ& % subscript:PDZPȱEPɱ& % unscript:PʱP˱EP̱& % copyFont:PͱPαEPϱ& % pasteFont:Pбo7Pѱ&%submenuAction:Pұf7PӱfPԱ Pձ EPֱ& % alignLeft:PױPرEPٱ& % alignCenter:PڱPP۱PEPܱ& % alignRight:PݱPޱEP߱& % toggleRuler:PPEP& % copyRuler:PDPDEP& % pasteRuler:Pf7P&%submenuAction:P7PcPcPcP1cP5cPcP7P&%submenuAction:P 7PcSPePP PP&%submenuAction:P Pu PPEP&%orderFrontColorPanel:PcEP&%print:PEP& % showHelp:P2P1NSNibOutletConnector2P&%delegateP2SP&%menuPP&%guideLineMenuItemPuP & % palettes:P EP &%cut:P P &%preferencesPanel:PP& % loadPalette:PP& % guideline:PP&%groupSelectionInSplitView:PP&%groupSelectionInBox:P1P&%groupSelectionInScrollView:P5P&%groupSelectionInView:PP&%ungroup:PP&%createSubclass:PpP& % loadClass:P P!&%createClassFiles:P"P#&%instantiateClass:P$P%&%addAttributeToClass:P&P'&%remove:P(P)P*&%exportXLIFFDocument:P+)P,)P-&%importXLIFFDocument:P.NP/& % translate:P0|P1&%exportStrings:P2 &apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/Gorm.rtfd/000077500000000000000000000000001475375552500244625ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/Gorm.rtfd/TXT.rtf000066400000000000000000001352441475375552500256670ustar00rootroot00000000000000{\rtf1\ansi\ansicpg1252\cocoartf102{\fonttbl\f0\fnil DejaVu Sans;} \pard\ql\f0\fs48\b * Gorm: The GNUstep Graphical Object Relationship Modeler\fs24\b0 \par \par \par This file documents the features and implementation of the Gorm\par application.\par \par Copyright (C) 1999,2000,2009,2010 Free Software Foundation, Inc.\par \par Permission is granted to make and distribute verbatim copies of\par this manual provided the copyright notice and this permission notice\par are preserved on all copies.\par \par Permission is granted to process this file through @TeX\{\} and print the\par results, provided the printed document carries copying permission\par notice identical to this one except for the removal of this paragraph\par (this paragraph not being relevant to the printed manual).\par \par Permission is granted to copy and distribute modified versions of this\par manual under the conditions for verbatim copying, provided also that the\par section entitled \lquote \lquote GNU Library General Public License\rquote \rquote is included exactly as\par in the original, and provided that the entire resulting derived work is\par distributed under the terms of a permission notice identical to this one.\par \par Permission is granted to copy and distribute translations of this manual\par into another language, under the above conditions for modified versions,\par except that the section entitled \lquote \lquote GNU Library General Public License\rquote \rquote and\par this permission notice may be included in translations approved by the\par Free Software Foundation instead of in the original English.\par \par \par \fs48\b Guide to the\par Gorm application\par \par \fs24\b0 \par Gregory John Casamento \par Richard Frith-Macdonald \par \par Copyright @copyright\{\} 1999,2000 Free Software Foundation, Inc.\par \par \par Permission is granted to make and distribute verbatim copies of\par this manual provided the copyright notice and this permission notice\par are preserved on all copies.\par \par Permission is granted to copy and distribute modified versions of this\par manual under the conditions for verbatim copying, provided also that the\par section entitled \lquote \lquote GNU Library General Public License\rquote \rquote is included exactly as\par in the original, and provided that the entire resulting derived work is\par distributed under the terms of a permission notice identical to this one.\par \par Permission is granted to copy and distribute translations of this manual\par into another language, under the above conditions for modified versions,\par except that the section entitled \lquote \lquote GNU Library General Public License\rquote \rquote may be\par included in a translation approved by the author instead of in the original\par English.\par \par @strong\{Note: You will be performing a valuable service if you report any bugs you encounter.\}\par @strong\{The full gorm manual is available at http://wiki.gnustep.org/index.php/Gorm_Manual.\}\par titlepage\par \par @contents\par \par Top, Copying, , \par \par @menu\par * Copying::\tab GNU Public License says how you can copy\par and share Gorm.\par * Contributors:: People who have contributed to Gorm.\par * Installation:: How to build and install Gorm.\par * News::\tab The latest changes to Gorm.\par \par * Overview:: Gorm in brief.\par * Usage::\tab How Gorm is used.\par * Implementation:: Implementation notes.\par \par * Concept Index::\par menu\par \par Copying, Contributors, Top, Top\par @unnumbered Copying\par \par See the file \{COPYING\}.\par \par Contributors, Installation, Copying, Top\par @unnumbered Contributors to Gorm\par \par Gregory John Casamento Is the\par current maintaner of Gorm. Has implemented lots of new\par features and rewritten large portions of the existing code.\par \par Richard Frith-Macdonald wrote\par the original version of Gorm as part of the GNUstep project.\par \par Pierre-Yves Rivaille Is also a \par major contributor to the Gorm application.\par itemize\par \par Installation, News, Contributors, Top\par Installing Gorm\par \par @include install.texi\par \par News, Overview, Installation, Top\par News\par \par @include news.texi\par \par To Do\par \par ize @bullet\par \par Debug and stabilize existing code.\par \par itemize\par \par Overview, Usage, News, Top\par Overview\par \par Gorm is an application for creating the user interface (and possibly entire\par applications) for a GNUstep application. Initially a close clone of the old\par NeXTstep 3.3 Interface Builder application, I expect that Gorm will mutate\par beyond the capabilities of that app.\par \par GNUstep is an object-oriented programming framework and a collection of tools\par developed for or using the GNUstep libraries.\par \par You can find out more about GNUstep at\par @url\{http://www.gnustep.org\}@*\par \par The basic idea behind Gorm is simple - it provides a graphical user interface\par with which to connect together objects from the GNUstep libraries (as well as\par custom-written objects) and set their attributes in an easy to use manner.\par \par The collection of objects is then saved as a document which can either be\par re-loaded into Gorm for further editing, or can be loaded into a running\par GNUstep application in order to provide that application with a user\par interface or some subsystem.\par \par What You Must Know To Understand This Manual\par \par This manual assumes a working knowledge of Objective-C and C. These are \par necessary prerequisites to understanding some of the technical details and \par examples given here.\par \par Major features\par features\par \par ize @bullet\par Drag-and-drop creation of GUI elements from palettes.\par Run-time loading of additional palettes that may be written using an API\par very similar to that of Apple/NeXTs interface Builder palette API.\par Direct on-screen manipulation of GUI elements\par Manipulation and examination of objects via inspectors.\par Drag-and-drop creation of connections between objects.\par Interactive test mode for interfaces/object-networks under development.\par Saving data in a format loadable by GNUstep applications.\par itemize\par \par About this Manual\par \par This manual is ment to cover basic operation of the Gorm application. It is not\par meant to be a complete tutorial on GNUstep programming. \par \par Usage, Implementation, Overview, Top\par Usage\par \par Here is a description of the menu structure and what each menu does -\par \par ize @bullet\par Info @*\par The \{Info\} menu item produces a submenu ...\par ize @bullet\par Info Panel @*\par A panel giving very limited information about Gorm\par Preferences @*\par A panel allowing you to set preferences about how Gorm operates\par Help (not implemented) @*\par A panel providing general help on using Gorm\par itemize\par \par Document @*\par The \{Document\} menu item produces a submenu ...\par ize @bullet\par Open @*\par This produces an open panel that lets you open a Gorm document.\par You use this if you want to use Gorm to edit an exisiting document.\par New Application @*\par This creates a new application document within Gorm, you may then use the\par Palettes panel to drag new objects into the document.\par New Module @*\par Contains a submenu, which also contains:\par \par ize @bullet\par New Empty @* \par produces an empty document with only NSFirst and NSOwner.\par New Inspector @* \par produces a document with NSOwner, NSFirst and a window which is the correct size for an Inspector.\par New Palette @* \par produces a document which is like the one by \{New Inspector\}, but it\rquote s window is the right size for a Palette. \par itemize\par \par Save @*\par This saves the current document\par Save As @*\par This saves the current document to a new file and changes the document name\par to match the new name on disk.\par Save All @*\par This saves all documents currently being edited by Gorm.\par Revert To Saved @*\par This removes all changes made to the document sunce the last save, or since\par the document was opened.\par Test Interface @*\par This provides interactive testing of the active document. To end testing, you\par need to select the \{quit\} menu item.\par Translate @*\par Contains a submenu, which also contains:\par \par ize @bullet\par Load Strings @* \par Load a string file. This file contains the strings to translate. \par Export Strings @*\par Export a strings file. TODO\par itemize\par \par \par Miniaturize @*\par This miniaturises the active document (or whatever panel is currently key).\par Close @*\par This closes the currenly active document.\par Debug @*\par Prints some useful internal information.\par Load Sound @*\par Loads a sound into the .gorm file.\par Image @*\par Loads an image into the .gorm file.\par itemize\par \par Edit @*\par In addition to the usual Cut, Copy, Paste, Delete Select All, this menu also contains:\par \par Set Name @*\par This allows the user to set a name for a given object in the Objects view in the main document window.\par \par ize @bullet\par Group @*\par Which produces a submenu\par ize @bullet\par In Splitview @*\par Groups views into an NSSplitView. Gorm does this based on the relative positions of the views being grouped. It determines the orientation and the order of th views and then groups them either vertically or horizontally in the order they appear on the screen.\par In Box @*\par Simply groups all of the views into one NSBox.\par In ScrollView @*\par Simply groups all of the views into one NSScrollView.\par Ungroup @*\par Ungroups the contained views.\par itemize\par \par Disable Guideline @*\par This item toggles between Enable Guideline and Disable Guideline. This allows the user to turn on or off the guides which appear when placing views in a window or view in Gorm.\par \par Font Panel\par The Font Panel allow you to modify fonts of your views.\par \par itemize\par \par Classes @*\par Contains menus for working with classes.\par ize @bullet\par Create Subclass @*\par Creates a subclass of the currently selected class in the current document classes view.\par Load Class @*\par Loads a class from a .h file into the current document.\par Create Class Files @*\par Generates a .h and .m file from the currently selected class in the current document classes view.\par Instantiate @*\par Creates an instance of the selected class in the current document classes view.\par Add Outlet/Action @*\par Adds an outlet or an action depending on what is selected in the document classes view. If the outlet icon is selected, it will add an outlet, if it the action icon is selected it will add an action.\par Remove @*\par Removes the currently selected outlet, action or class.\par itemize\par \par Tools @*\par Contains the inspector and the palette menus\par ize @bullet\par Inspector @*\par Shows the inspector\par Palette @*\par Shows the palette\par Load Palette @*\par Opens a file panel and allows the user to load a palette into Gorm.\par itemize\par \par Layout @*\par Contains a menu for working with alignement and layout of you views\par ize @bullet\par Alignement\par Wich produces a submenu \par ize @bullet\par Center Vertically @*\par Center Vertically two or more views. TODO :explain what is the reference view\par Center Horizontally @*\par Center Horizontally two or more views. TODO :explain what is the reference view\par Left Edges @*\par TODO\par Right Edges @*\par TODO\par Top Edges @*\par TODO\par Bottom Edges @* \par TODO\par itemize\par \par Bring to Front @*\par Bring to front the selected view\par Send to Back @*\par Send to back the selected view\par \par itemize\par \par Windows @*\par Shows currently open windows.\par \par Services @*\par Shows currently available services.\par \par Hide @*\par Hides the application.\par \par Quit @*\par Quits the application.\par \par itemize\par \par Implementation, Concept Index, Usage, Top\par Implementation\par \par @menu\par * Preferences::\par menu\par \par Notes on implementation\par \par The IB documentation on how object selection is managed and how editors and\par inspectors are used is unclear ... so I\rquote ve gone my own way.\par \par 1. When a document is loaded, the document object creates an editor attached\par to each top-level object in the user interface (NSMenu and NSWindow objects).\par \par These editors must be aware of their edited objects being clicked upon, and\par clicking on one of these should cause the corresponding editor to become the\par active editor.\par \par The active editor is responsible for handling selection of the edited object\par (and any objects below it in the object hierarchy). Upon change of selection,\par the editor is responsible for sending an IBSelectionChangedNotification with\par the selection owner (normally the editor itsself) as the notification owner.\par \par The main application watches for these notifications in order to keep track\par of who has the selection.\par \par Connections\par \par The connection API is the same as that for IB, but with the extension that the\par document object must implement [-windowAndRect:forObject:] to return the\par window in which the object is being displayed, and the rectangle enclosing\par the object (in window base coordinates).\par \par This information is needed by Gorm so that it can mark the connection.\par \par The editors mananging the drag-and-drop operation for a connection must call\par \{[NSApp -displayConnectionBetween:and:]\} to tell Gorm to update its display. This method sets the values currently returned by \{[NSApp -connectSource]\} and \{[NSApp -connectDestination]\}.\par \par Preferences, , Implementation, Implementation\par Preferences\par preferences\par defaults\par \par The preferences panel contains a number of useful customizable options which can be used to modify the behavior of Gorm.\par \par Some of these defaults can be safely modified from the command line by the user.\par ize @bullet\par \par PreloadHeaders @*\par The user can define a set of headers to load when Gorm starts creation of a new .gorm file. \par This is useful when the user is building a framework or a set of interfaces for a large \par application.\par \par ShowInspectors @*\par Controls whether the inspector shows when Gorm is started.\par \par ShowPalettes @*\par Controls whether the palettes window shows when Gorm is started.\par \par BackupFile @*\par Determines if the old .gorm is moved to .gorm~ when the modified version is saved.\par AllowUserBundles @*\par If the user sets this to YES, they will still get a warning, but Gorm won\rquote t quit. \par itemize\par \par Basic Concepts\par \par This chapter will explain some of the basic things you need to understand before starting work on a new application.\par \par Getting Started\par \par First you need to understand a few basic concepts. Gorm\rquote s main window includes a few standard entries which must be explained before we can proceed.\par \par They are:\par \par NSOwner\par NSFirst\par NSFont\par \par ize @bullet\par \par NSOwner\par \par NSFirst\par \par NSFont\par \par itemize\par \par What is NSOwner?\par \par NSOwner is the class which \lquote \lquote owns\rquote \rquote the interface. This is, by default, NSApplication, but it can be any class you like. You can change it by selecting NSOwner in the document window and going to the \lquote \lquote Custom Class\rquote \rquote inspector in the inspectors window. From there, you should see all of the classes which the NSOwner can assume. We\rquote ll discuss more about this later when we go over how to create a new application\par \par What is NSFirst?\par \par NSFirst is your interface to the responder chain. NSFirst is representative of the current \lquote \lquote first responder\rquote \rquote in the application. When you want a message, such as a changeFont: message, to go to the current first responder from, say, a menu, you connect the menu item to the NSFirst object in the document window. By doing this, it means that whichever object has first responder status at that time in the application will become the reciever of the \lquote \lquote changeFont:\rquote \rquote message. \par \par Responders\par NSResponder\par \par A responder is any subclass of NSResponder. This includes NSWindow, NSView and all of the NSControl subclasses.\par \par The Responder Chain\par Responder Chain\par \par The responder chain is a sequence of objects which are called to determine where a message sent to the first responder will go. A message invoked on the first responder will be invoked on the first object in the responder chain which responds to that message.\par \par The object which this message will be called on is determined in the method [NSApplication targetForAction:]. The call sequence is as follows, it will only proceed to the next step in each case if the current step fails to respond to the message which was invoked:\par \par The firstResponder of the keyWindow, if one exists. \par Iterates through all responders by pulling each in the linked list of responders for the key window. \par It then tries the keyWindow.\par Then the keyWindow\rquote s delegate\par if the application is document based it tries the document controller object for the key window.\par then it tries the mainWindow\rquote s list of responders (as above)\par the mainWindow\rquote s delegate\par if the app is document based, it tries the document controller for the main window\par and finally, it tries the NSApplication delegate.\par \par itemize\par \par If all of the options in this list are exhausted, it then gives up and returns nil for the object which is to respond.\par \par What is NSFont?\par \par NSFont represents the NSFontManager object for the application. This object is a shared singleton. This means that, for any given app, there should be only one instance of the object. This object is generally added to the document window when another objec, such as a Font menu item, is added to the interface, which, in turn, requires that this object be added to the document.\par \par The awakeFromNib method\par \par This method is called on any custom object which is unarchived from a nib/gorm file. This method is called on all objects after the entire archive has been loaded into memory and all connections have been made. Given all of this, you should not make any assumptions at all about which objects have been called and which have not. You should not release any objects in this method.\par \par Creating an Application\par \par If you have ProjectCenter, you need to open it and create an \lquote \lquote Application\rquote \rquote project. Create it with the name \lquote \lquote FirstApp\rquote \rquote . From there you can open the MainMenu.gorm by clicking on interfaces and selecting MainMenu.gorm. If Gorm.app is properly installed, you Gorm should start up.\par \par If you don\rquote t have ProjectCenter, you can create the Gorm file by hand. First you need to start Gorm. You can either do this by doing \{gopen -a Gorm.app\} from a command line prompt, or you can invoke it from the Dock or from the workspace\rquote s file viewer.\par \par You then need to select the \{Document\} menu, and then \{New Application\}. This should produce a new document window, with a menu and an empty window. This should be the same as with the ProjectCenter gorm file since this is the basic starting point for an application.\par \par For the sections below... only do one or the other, not both. \par \par Creating A Class In Gorm\par Creating Classes\par \par There are two ways to do this next operation. I will take you through each step by step. First click on the classes icon in the toolbar on the top of the Gorm document window. You should see the view below change to an outline view containing a list of class names. Once this happens we\rquote re ready to create a class.\par Select the class you wish to subclass in the outline view. For our example we will use the simplest: NSObject. Select it by clicking on the class name once. Then go to the Classes menu in the main menu and select Create Subclass (you can also type Alt-Shift-c, which will do this as well. The new class will be created in the list with the name \lquote \lquote NewClass\rquote \rquote .\par \par Using The Outline View\par Classes Outline View\par \par From here double click on the subclass name to make it editable. Type the name of the class and hit enter. For our example, please use the class name MyController. When you hit enter an alert panel will appear and warn you about breaking connections, simply select OK and continue.\par \par This method of inputting the classes was inspired by IB in OPENSTEP 4.2/Mach which had functionality very similar to this. For users of that the transition to Gorm will be seamless.\par \par Adding Outlets In The Outline View\par \par Too add an outlet, select the round icon with the two horizontal lines in it (it sort of looks like a wall outlet. This should become depressed. Here you need to go to the Gorm Menu, under Classes select \lquote \lquote Add Outlet/Action\rquote \rquote . Each time you press this menu item another outlet will be added with a name similar to newOutlet, as you add more the number at the end will increase. For now add only one outlet.\par \par To rename the outlet simply double click it and change it\rquote s name like you did the class above to \lquote \lquote value\rquote \rquote for the sake of our example.\par \par Adding Actions In the Outline View\par \par The procedure to add on action is precisely the same as adding an outlet, except you must click on the button which looks like a target (a circle with a + inside). Add an action and name it \lquote \lquote buttonPressed:\rquote \rquote for the sake of our example.\par \par Using The Class Edit Inspector\par Class Edit Inspector\par \par This way is much more inline with the \lquote \lquote OPENSTEP/GNUstep\rquote \rquote philosophy. For each object there is an inspector, even for Class objects.\par \par Once you have created the class as described in the previous section \lquote \lquote Creating a Class In Gorm\rquote \rquote , you must skip to this section to use the inspector. In the Gorm main menu select Tools and then select \lquote \lquote Inspectors\rquote \rquote . This will make certain that the inspectors window is being displayed. Once the inspectors window is up move the pulldown on the top to \lquote \lquote Attributes\rquote \rquote and select the class you created which should, at this point, have the name \lquote \lquote NewClass\rquote \rquote . You\rquote ll notice that the \lquote \lquote Class\rquote \rquote field at the top which shows the name\rquote s background color has turned white, instead of grey. This indicates that this class name is editable. Erase \lquote \lquote NewClass\rquote \rquote from the text field and type \lquote \lquote MyController\rquote \rquote .\par \par Adding Outlets In The Inspector\par \par Adding outlets is very intuitive in the inspector. Simply select the \lquote \lquote Outlets\rquote \rquote tab in the tab view and click \lquote \lquote Add\rquote \rquote to add more outlets, and \lquote \lquote Remove\rquote \rquote to remove them. For the sake of our example, add one outlet and name it \lquote \lquote value\rquote \rquote .\par \par Adding Actions In the Inspector\par \par Very much like above only with the \lquote \lquote Actions\rquote \rquote tab, add an action called button pressed.\par \par Instantiating The Class\par Instantiating\par \par In the Classes outline view select the new class you\rquote ve created, now called MyController and then go to the Gorm menu and select Classes, and then Instantiate. The document window should shift from the classes view to the objects view. Amoung the set of objects should be a new object called MyController.\par \par Adding Controls from the Palette\par \par Go to the Gorm menu and select Tools, then Palettes. This will bring the palette window to the front. The second palette from the left is the \lquote \lquote ControlsPalette\rquote \rquote . Select that one and find the button object (it should have the word \lquote \lquote Button\rquote \rquote in it). Drag that to the window and drop it anywhere you like.\par \par Repeat this operation with the text field. It\rquote s the control with \lquote \lquote Text\rquote \rquote in it. We are now ready to start making connections between different objects in the document.\par \par Making Connections\par Connections\par \par The type of application we are creating is known as a \lquote \lquote NSApplication delegate\rquote \rquote this means that the MyController object will be set as the delegate of NSApplication.\par \par To make this connection click on NSOwner and hold down the Control button, keep it pressed as you drag from the NSOwner object to the MyController object. The inspectors window should change to the Connections inspector and should show two outlets \lquote \lquote delegate\rquote \rquote and \lquote \lquote menu\rquote \rquote . Select the \lquote \lquote delegate\rquote \rquote , at this point you should see a green S and a purple T on the NSOwner and MyController objects respectively, and press the \lquote \lquote Connect\rquote \rquote button in the inspector. In the \lquote \lquote Connections\rquote \rquote section of the inspector you should see an entry which looks similar to \lquote \lquote delegate (MyController)\rquote \rquote this indicates that the connection has been made.\par \par Now we need to make connections from the controller to the textfield and from the controller to the button. Select the MyController object and Control-Drag (as before) from the object to the text field, this will make an outlet connection. You should see the connections inspector again, this time select the \lquote \lquote value\rquote \rquote outlet and hit Connect. \par \par Next, control-drag from the button to the controller, this will make an action connection. The connections inspector should again appear. This time you need to select the \lquote \lquote target\rquote \rquote outlet, to get the list of actions. The list should have only one entry, which is \lquote \lquote buttonPressed:\rquote \rquote since this is the one we added earlier. Press Connect. You should see an entry like \lquote \lquote buttonPressed: (MyController\rquote \rquote in the Connections section of the inspector.\par \par It is also possible to make this connection to NSFirst, but to keep things simple, make it directly to the object. If you make the connection to buttonPressed: on NSFirst the functionality of the application will be unchanged, but the invocation will take the path described above in the section which describes \lquote \lquote The Responder Chain\rquote \rquote .\par \par Saving the gorm file\par Saving\par \par At this point you must save the .gorm file. Go to the Gorm menu and click Documents and then select \lquote \lquote Save\rquote \rquote . If the document was opened from a pre-existing .gorm, it will save to that same file name. If it is an UNTITLED .gorm file a file dialog will appear and you will need to select the directory where you want to store the .gorm file and type the name of the .gorm file. \par \par Generating .h and .m files from the class.\par \par This is different than saving, some people have gotten this confused with the idea of Gorm generating the code for the gui. Gorm does nothing of the sort (grin). \par \par Go to the Classes section in the Document window and select the MyController class yet again. Now go to the Gorm menu and select Classes and the select \lquote \lquote Create Class Files\rquote \rquote . This will bring up a file panel and it allow you to select the directory in which to put the files. It will first create the MyController.m file and then the MyController.h file. Simply select the directory in which your app will reside and hit okay for both. You can change the names, but the default ones, which are based on the class name, should be sufficient. When you look at the .m for this class, you should see the \{buttonPressed:\} method with the commecnt \{/* insert your code here */\} in it. Delete this comment and add \{[value setStringValue: @@\lquote \lquote Hello\rquote \rquote ];\}. The class should look like this after you\rquote re done:\par \par \par \par /* All Rights reserved */\par \par \par \par #include \par \par #include "MyController.h"\par \par @@implementation MyController\par \par \par - (void) buttonPressed: (id)sender\par \par @\{\par \par [value setStringValue: @@\rquote \rquote Hello\rquote \rquote ];\par \par @\}\par \par @\par \par \par \par You recall, we connected the textfield to the \lquote \lquote value\rquote \rquote variable. The call above causes the method setStringValue to be invoked on the textfield you added to the window. \par \par Also, note that the name of the method is \lquote \lquote buttonPressed:\rquote \rquote . This is the action which is bound to the button. When it is pressed the text in the textfield should change to \lquote \lquote Hello\rquote \rquote .\par \par You now need to build the application either by copying in a GNUmakefile and making the appropriate changes or by using ProjectCenter\rquote s build capability, depending on if you use it or not.\par \par This app is available as \lquote \lquote SimpleApp\rquote \rquote in the Examples directory under the Documentation directory distributed with Gorm. Hopefully this has helped to demonstrate, albeit on a small scale, the capabilities of Gorm. In later chapters we will cover more advanced application architectures and topics.\par \par Another Simple Application\par \par This chapter will describe an application, very much like the previous one, but using a slightly different structure. This application builds on the previous application and uses WinController as the NSOwner of the app instead of making it the delegate of NSApplication.\par \par Adding Menu Items\par \par Select the first palette in the palette window, this should be the MenusPalette. The palette will have a bunch of pre-made menu items on it that you can add. We want to keep this simple, so grab the one called \lquote \lquote Item\rquote \rquote and drag it over to the menu in main menu nib (the menu on the screen, not the one in the objects view). As you have this object over the menu, the copy/paste mouse cursor should appear (it looks something like one box over another box at a 45 degree angle). Where you drop the menu determines it\rquote s position in the menu. You can always drag it to a new position after you\rquote ve placed it by simply selecting and dragging up or down. Once you\rquote ve placed the menu item, double click on the title and change it to \lquote \lquote Open\rquote \rquote \par \par You can also change the name in the NSMenuItem attributes inspector. Now you must add openWindow: to MyController and make the connection from the \lquote \lquote Open\rquote \rquote menu item to NSFirst. In the connections inspector, find the \lquote \lquote openWindow:\rquote \rquote action. You could simply make the connection directly, but this is an exaple to show you that this connection will work as well. Whichever object has First Responder status will be tested to see if it responds to this method.\par \par The implementation for openWindow: in MyController should simply be:\par \par - (void) openWindow: (id) sender\par \par @\{\par \par winController = [[WinController alloc] init];\par \par @\}\par \par Also add the winController attribute and an include to allow WinController to be referenced in the MyController.m file.\par \par Making a Controller-based .gorm file\par \par Create a new .gorm file as described in the previous section using the \lquote \lquote New Module\rquote \rquote menu item. Under \lquote \lquote New Module\rquote \rquote select \lquote \lquote New Empty\rquote \rquote . This should produce a .gorm file with only NSOwner and NSFirst. From the WindowsPalette (which should be the second palette in the palette window) drag a window to the location where you want it to appear on the screen. In the window add a button called \lquote \lquote Close\rquote \rquote .\par \par Go through the same steps you went through previously to create MyController, except for adding the outlets/actions, but this time with the name WinController. Add an outlet called window and an action called \lquote \lquote closeWindow:\rquote \rquote . \par \par Setting the NSOwner\par Now, instead of instantiating the class go back to the objects view and select the NSOwner object. After that select the \lquote \lquote Custom Class\rquote \rquote inspector. Look for the entry for WinController and select it. You now must connect the \lquote \lquote window\rquote \rquote outlet to the Window you added previously.\par \par Connecting to a Window\par Switch back to the objects view, then Control-Drag not to the window on the screen, but to the window\rquote s representation in the objects view. In the connection inspector select the window outlet and click Ok.\par \par Save the .gorm as using the name Controller.gorm in the project directory. \par \par Generate the Controller.h and Controller.h files as described in the previous section.\par \par Add the init method to WinController\par \par Add an implementation of the action \lquote \lquote closeWindow:\rquote \rquote to WinController and also an init which loads the gorm/nib file and declares itself as the owner. Here\rquote s how:\par \par /* All Rights reserved */\par \par #include \par \par #include "WinController.h"\par \par @@implementation WinController\par \par - (id) init\par \par @\{\par \par if((self = [super init]) != nil)\par \par @\{\par \par if([NSBundle loadNibNamed: @@"Controller" owner: self] == NO)\par \par @\{\par \par NSLog(@@"Problem loading interface");\par \par return nil;\par \par @\}\par \par [window makeKeyAndOrderFront: self];\par \par @\}\par \par return self;\par \par @\}\par \par - (void) closeWindow: (id) sender\par @\{\par \par [window close];\par \par @\}\par \par - (void) dealloc\par @\{\par [super dealloc];\par RELEASE(window);\par @\}\par \par @ \par \par The Controller gorm will be loaded and the connections will be made to the current instance, i.e. window will point to the window object instantianted in the .gorm file and all actions declared in the .gorm file which are attached to the object NSOwner will be resolved on self.\par \par Running the App\par \par Type the command \{open Controller.app\} on the command line in the project directory. Once the application has started it should look very much like the first application. Select the \lquote \lquote Open\rquote \rquote button from the Menu and you should see the second window pop up, now choose close, this will call the method \lquote \lquote closeWindow:\rquote \rquote which should cause the window to disappear.\par \par \par Advanced Topics\par \par This section will cover some topics which won\rquote t be of general interest to most users. The details in this section pertain to the internal workings of Gorm.\par \par Gorm file format\par \par The current Gorm file format is basically just a set of objects, encoded one after another in a continuous stream with some markers indicating when a new class starts or which class is encoded. \par \par The Name Table\par \par Name Table\par Each object in the .gorm file has a name assigned to it by the application. This allows Gorm to refer to the objects by a name once they are loaded rather than an address. Each name is associated with it\rquote s object in a dictionary which preserves the overall structure of the GUI which has been created. \par \par The Custom Class Table\par \par This is only used when the user has associated a custom class with an existing instance in the gorm file. If the user has, for instance, added an NSWindow to the gorm, he/she can use the custom class inspector to select a subclass of NSWindow to change to. \par \par Connections Array\par \par This array is used to form the connections after the .gorm file is loaded. The method \{[... establishConnection]\} is never called on either NSNibControlConnector or NSNibOutletConnector objects while in Gorm. This prevents the connections from having any effect while they are being edited in Gorm itself. Once they are loaded, the establishConnection method is called and the connections are made.\par \par Custom Class Encoding\par Custom Class Encoding\par \par Custom objects are an interesting challenge in Gorm. By definition, custom classes are not known to Gorm, unless they are in a palette (covered elsewhere). For classes which are not in a palette instances of these classes in Gorm are encoding in one of three ways:\par \par * A Proxy - This is a standin object which takes the place of the custom object. This is usually used when the superclass of the object is a non-graphical object, such as a controller. The init message is called on this object when it\rquote s unarchived.\par * A Custom View - This is a standin view object similar to the one descrribed above, but it is a subclass of NSView. When this is used the initWithFrame: message is called on the view instance which is created (based on what view subclass the user selects)\par * A Template - Probably the most interesting of the three. This is a standin class which uses an existing instance created in Gorm to build a custom subclass from. For instance when a window subclass is created, call it MyWindow, a template class called GSWindowTemplate is used to hold the NSWindow created in Gorm as well as the name of the subclass to be created when the class is unarchived outside of Gorm as well as some additional information. When the classes are unarchived in the running app, the designated initializer for that class will be invoked, except in the case of NSControl subclasses. See the Apple documentation for more information.\par itemize\par \par All custom instances have awakeFromNib invoked on them when they are unarchived from the .gorm file. This allows the user to do whatever additional setup that needs to be done, such as setting attribute. Classes which are \lquote \lquote known\rquote \rquote are, of course, directly encoded into the .gorm file.\par \par Restrictions On Your Custom Subclasses\par \par The restrictions here are the same as those in Apple\rquote s InterfaceBuilder. In general, you cannot have additional information which is expected to be decoded in an initWithCoder: method from a custom class which uses one of the methods in the previous section. This is because, by definition, Gorm doesn\rquote t know anything about these classes and allowing you to use them in Gorm in this way is a convenience to make it simpler for the developer. Gorm therefore, must use one of the proxies to encode the class since it cannot encode the class directly.\par \par How can you get your classes into Gorm, you say? I\rquote m pleased that you asked me that question. The best way to make your class known to Gorm so that you don\rquote t need to worry about the above restriction is to add a palette which contains your class. In this way, because you\rquote re literally linking the class into Gorm, you\rquote re making the class and it\rquote s structure known to Gorm so that it can encode the class directly. With the new palette loaded you can load and save classes containing real instances, not proxies, of your class encoded directly in the .gorm file. How to create a palette is discussed at length in the following section.\par \par Palettes\par Palettes\par Inspectors\par Editors\par \par Graphical Objects In A Palette\par You are, by now, familiar with the built in palettes which are provided with Gorm. Palettes are a powerful feature which allows the developer to add his/her own objects to Gorm. It is possible for a developer to write custom inspectors, editors and palettes for use with Gorm. A good example of a custom palette is palettetest in the dev-apps/test in the GNUstep distribution. Assuming you don\rquote t have that, however, I will explain precisely what you need to do in order to create a simple palette. The entire process is very short and suprisingly simple. First open Gorm and selection Gorm->Document->New Module->New Palette. This will create a palette sized window. Once that\rquote s done go to the classes view in the main document window and find \lquote \lquote IBPalette\rquote \rquote in the class list. Create a subclass of that, the name can be whatever you want. For the purposes of our example we\rquote ll call it MyPalette. Drag a custom view to the window and choose the class you would like to add to the palette from one of your custom classes.\par \par Once you\rquote ve done this, generate the code for the classes (discussed in previous chapters). In the code, you\rquote ll add a method called \lquote \lquote -(void) finishInstantiate\rquote \rquote leave it empty for now. In the makefile for the palette make sure that the library or framework the view comes from is linked with the palette. Now build the palette.\par \par After the palette is built you\rquote re ready to load it into Gorm. Go to the preferences panel and go to \lquote \lquote Palettes\rquote \rquote . This should bring up a table view. Click on add. You should see a open dialog open. Select the palette bundle with this. If the palette is successfully loaded, you should see the name appear in the list. One thing to note here. Once a palette is loaded, it can\rquote t be unloaded until you close and restart Gorm. This is because by loading the palette bundle, the code in the bundle is being linked into Gorm. This can\rquote t be undone, once it\rquote s done.\par \par Now, you should see the palette in the set of palettes in the palette window. Simply scroll over to it and select it\rquote s icon. When you do this, you should see the view that you set up using the custom view displayed as an actual instance. Note that we used one of the techniques listed above, it is possible to use any of the three for any object you add to your palette. You can now drag the view from the palette to a new window. \par \par Non Graphical Objects In A Palette\par You may recall the creation of a method called \lquote \lquote -(void) finishInstantiate\rquote \rquote in the previous section. This section will make full use of that method. Re-open the palette you created before, but this time add an image view to the window. Then add to the image view, the icon you want to represent the non-graphical object. Here you\rquote ll need to add an ivar to the MyPalette class in both Gorm and in your source code called, imageView. Once you\rquote ve done this make the connection between the image view and it\rquote s ivar.\par \par Assuming that the class is called \lquote \lquote NonUIObject\rquote \rquote , in finish instantiate, you\rquote ll need to add the following line of code:\par \par id obj = [NonUIObject new];\par \par [self associateObject: obj\par \tab type: IBObjectPboardType\par \tab with: imageView];\par \par This code has the effect of associating the non-ui object with the ui object you just added to represent it. When you drag and drop the element which prepresents the object to something, it will copy the object, not the ui element, to the destination.\par \par Congratulations, you now know how Palettes work. \par \par Frequently Asked Questions\par FAQ\par \par Should I modify the data.classes of file in the .gorm package?\par \par My advice is never to do this, ever. Some have said that \lquote \lquote they\rquote re plain text and I should be able to change them\rquote \rquote . My response to this rather loosely pronounced and weak rationale is that if they are modified I cannot and will not guarantee that Gorm will be able to read them or will function correctly if it does.\par Why does my application crash when I add additional attributes for encoding in encodeWithCoder: or initWithCoder: in my custom class?\par \par If you\rquote ve selected the custom class by clicking on an existing object and then selecting a subclass in the Custom Class Inspector in Gorm\rquote s inspector panel, then when the .gorm file is saved, Gorm must use what is called a template to take the place of the class so that when the .gorm is unarchived in the running application, the template can become the custom subclass you specified. Gorm has no way of knowing about the additional attributes of your subclass, so when it\rquote s archived the template depends on the encodeWithCoder: of the existing class. Also, when AppKit loads the .gorm file, the initWithCoder: on the subclass is called to allow the user to do any actions, except for additional encoding, which need to be done at that time. This is particularly true when non-keyed coding is used, since, with keyed coding, it\rquote s possible to skip keys that are not present. The application may not crash if keyed coding is used, but Gorm would still not know about the additional attributes and would not be able to persist them anyway.\par \par Please see information in previous chapters regarding palettes, if you would like to be able to add your classes to Gorm so that they don\rquote t need to be replaced by templates, or proxy objects.\par \par Why does Gorm give me a warning when I have bundles specified in GSAppKitUserBundles?\par \par Some bundles may use poseAs: to affect change in the existing behavior of some GNUstep classes. The poseAs: method causes an issue which may cause Gorm to incorrectly encode the class name for the object which was replaced. This makes the resulting .gorm file unusable when another user who is not using the same bundle attempts to load it.\par \par How can I avoid loading GSAppKitUserBundles in Gorm?\par \par You need to write to Gorm\rquote s defaults like this:\par \par defaults write Gorm GSAppKitUserBundles \rquote ()\rquote \par \par Doing this overrides the settings in NSGlobalDomain for Gorm and forces Gorm not to load any user bundles at all. To eliminate this simply do:\par \par defaults delete Gorm GSAppKitUserBundles\par \par How can I change the font for a widget?\par \par This is a simple two step process. Select the window the widget is in and then select the widget itself, then bring up the font panel by hitting Command-t (or by choosing the menu item). By doing this you\rquote re making the window the main window and by selecting the widget, you\rquote re telling the editor for that object to accept changes. Then you can select the font in the panel and hit \lquote \lquote Set\rquote \rquote . For some objects, the font panel isn\rquote t effective because those objects can\rquote t have a font directly set.\par }apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/GormLanguageViewController.gorm/000077500000000000000000000000001475375552500310325ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/GormLanguageViewController.gorm/data.classes000066400000000000000000000006141475375552500333230ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "updateTargetLanguage:", "updateSourceLanguage:" ); Super = NSObject; }; GormLanguageViewController = { Actions = ( "updateTargetLanguage:", "updateSourceLanguage:" ); Outlets = ( targetLanguage, sourceLanguage ); Super = NSViewController; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/GormLanguageViewController.gorm/data.info000066400000000000000000000002701475375552500326170ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/English.lproj/GormLanguageViewController.gorm/objects.gorm000066400000000000000000000130751475375552500333570ustar00rootroot00000000000000GNUstep archive000f4240:00000021:00000078:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @ @pJI @ @01 NSView% ? @" @ @p  @ @pJ01 NSMutableArray1 NSArray&01 NSBox% @2 @N @| @c  @| @cJ 0 % @ @ @|@ @b  @|@ @bJ0 &0 % @, @& @z @_  @z @_J0 % @ @ @y @Y@  @y @Y@J 0 &0 1 NSPopUpButton1NSButton1 NSControl% @c` @9 @l @6  @l @6J 0 &I01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%JJJJJJJJ01NSMenu0 &01 NSMenuItem0&%Item 1JJI01NSImage0& %  common_NibbleI00&%Item 2JJII00&%Item 3JJIIJJJJJJJIJJJ > =JJIIIII0% @c` @M @l @6  @l @6J$0 &I0JJJJJJJJ00 &0!0"&%Item 1JJII0#0$&%Item 2JJII0%0&&%Item 3JJIIJJJJJJJIJJJ > =JJ!!IIIII0'1 NSTextField% @9 @8 @] @2  @] @2J0( &I0)1NSTextFieldCell0*&%Target Language0+% A@*JJJJJJJJ JJJJJJJI0,1NSColor0-&% NSNamedColorSpace0.&%System0/&%textBackgroundColor00-.01& % textColor02% @9 @O @] @2  @] @2J!03 &I0405&%Source Language+5JJJJJJJJ JJJJJJJI,006 & 0708&%Select Languages8JJJJJJJJJJJJJJJ @ @%%09 &0:0;&%BoxJJJJJJJJJJJJJJJ @ @%%0<-0=&% System0>&% windowBackgroundColor0?&%Window?0@&% Window ? ? @Ç @wI&  @ @0A &0B &0C1NSMutableDictionary1 NSDictionary&0D& % MenuItem(5)%0E&%PopUpButtonCell(0)0F& % TextField(0)'0G&%PopUpButton(0) 0H&%View(0)0I&%Box(1)0J& % MenuItem(2)0K&%TextFieldCell(0))0L&%PopUpButtonCell(1)0M& % TextField(1)20N&% NSOwner0O&%GormLanguageViewController0P&%PopUpButton(1)0Q& % MenuItem(3)!0R&%View(1) 0S&%TextFieldCell(1)40T& % Window(0)0U& % MenuItem(0)0V&%View(2)0W& % MenuItem(4)#0X&%Box(0) 0Y& % MenuItem(1)0Z &0[1NSNibConnectorTN0\HT0]IH0^VI0_XV0`RX0aGR0bUG0cYG0dJG0eEG0fPR0gQP0hWP0iDP0jLP0kFR0lKF0mMR0nSM0o1 NSNibOutletConnectorNP0p&%sourceLanguage0q NG0r&%targetLanguage0s1!NSNibControlConnectorPN0t&%updateSourceLanguage:0u!GNt0v NV0w&%view0x&apps-gorm-gorm-1_5_0/Applications/Gorm/GNUmakefile000066400000000000000000000120361475375552500221560ustar00rootroot00000000000000# GNUmakefile: main makefile for GNUstep Object Relationship Modeller # # Copyright (C) 1999,2002,2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2003 # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ifeq ($(GNUSTEP_MAKEFILES),) GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null) ifeq ($(GNUSTEP_MAKEFILES),) $(warning ) $(warning Unable to obtain GNUSTEP_MAKEFILES setting from gnustep-config!) $(warning Perhaps gnustep-make is not properly installed,) $(warning so gnustep-config is not in your PATH.) $(warning ) $(warning Your PATH is currently $(PATH)) $(warning ) endif endif ifeq ($(GNUSTEP_MAKEFILES),) $(error You need to set GNUSTEP_MAKEFILES before compiling!) endif PACKAGE_NAME = gorm export PACKAGE_NAME include $(GNUSTEP_MAKEFILES)/common.make CVS_MODULE_NAME = gorm SVN_MODULE_NAME = gorm SVN_BASE_URL = svn+ssh://svn.gna.org/svn/gnustep/apps include ../../Version # # Each palette is a subproject # SUBPROJECTS = \ Palettes # # MAIN APP # APP_NAME = Gorm Gorm_PRINCIPAL_CLASS=Gorm Gorm_APPLICATION_ICON=Gorm.tiff Gorm_RESOURCE_FILES = \ GormInfo.plist \ Resources/Defaults.plist \ Resources/language-codes.plist \ Palettes/0Menus/0Menus.palette \ Palettes/1Windows/1Windows.palette \ Palettes/2Controls/2Controls.palette \ Palettes/3Containers/3Containers.palette \ Palettes/4Data/4Data.palette \ Images/FileIcon_gmodel.tiff \ Images/GormEHCoil.tiff \ Images/GormEHLine.tiff \ Images/GormEVCoil.tiff \ Images/GormEVLine.tiff \ Images/GormFile.tiff \ Images/GormMenu.tiff \ Images/GormMHCoil.tiff \ Images/GormMHLine.tiff \ Images/GormMVCoil.tiff \ Images/GormMVLine.tiff \ Images/GormNib.tiff \ Images/GormPalette.tiff \ Images/Gorm.tiff \ Images/GormSourceTag.tiff \ Images/GormTargetTag.tiff \ Images/GormLinkImage.tiff \ Images/GormTesting.tiff \ Images/Sunday_seurat.tiff \ Images/number_formatter.tiff \ Images/date_formatter.tiff \ Images/iconAbove_nib.tiff \ Images/iconBelow_nib.tiff \ Images/iconBottomLeft_nib.tiff \ Images/iconBottom_nib.tiff \ Images/iconBottomRight_nib.tiff \ Images/iconCenterLeft_nib.tiff \ Images/iconCenter_nib.tiff \ Images/iconCenterRight_nib.tiff \ Images/iconLeft_nib.tiff \ Images/iconOnly_nib.tiff \ Images/iconRight_nib.tiff \ Images/iconTopLeft_nib.tiff \ Images/iconTop_nib.tiff \ Images/iconTopRight_nib.tiff \ Images/centeralign_nib.tiff \ Images/justifyalign_nib.tiff \ Images/leftalign_nib.tiff \ Images/naturalalign_nib.tiff \ Images/rightalign_nib.tiff \ Images/bezel_nib.tiff \ Images/button_nib.tiff \ Images/centeralign_nib.tiff \ Images/iconAbove_nib.tiff \ Images/iconBelow_nib.tiff \ Images/iconBottomLeft_nib.tiff \ Images/iconBottom_nib.tiff \ Images/iconBottomRight_nib.tiff \ Images/iconCenterLeft_nib.tiff \ Images/iconCenter_nib.tiff \ Images/iconCenterRight_nib.tiff \ Images/iconLeft_nib.tiff \ Images/iconOnly_nib.tiff \ Images/iconRight_nib.tiff \ Images/iconTopLeft_nib.tiff \ Images/iconTop_nib.tiff \ Images/iconTopRight_nib.tiff \ Images/justifyalign_nib.tiff \ Images/leftalign_nib.tiff \ Images/line_nib.tiff \ Images/naturalalign_nib.tiff \ Images/noBorder_nib.tiff \ Images/photoframe_nib.tiff \ Images/ridge_nib.tiff \ Images/rightalign_nib.tiff \ Images/shortbutton_nib.tiff \ Images/tabbot_nib.tiff \ Images/tabtop_nib.tiff \ Images/titleOnly_nib.tiff \ Images/LeftArr.tiff \ Images/RightArr.tiff \ Gorm_LOCALIZED_RESOURCE_FILES = \ Gorm.gorm \ GormLanguageViewController.gorm \ Gorm.rtfd Gorm_LANGUAGES = \ English Gorm_HEADERS = \ GormAppDelegate.h \ GormLanguageViewController.h Gorm_OBJC_FILES = \ GormAppDelegate.m \ GormLanguageViewController.m \ main.m -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/GNUmakefile.postamble000066400000000000000000000022561475375552500241460ustar00rootroot00000000000000# # GNUmakefile.postamble # # Copyright (C) 2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # # This file is part of GNUstep # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; see the file COPYING.LIB. # If not, write to the Free Software Foundation, # 51 Franklin Street, Fifth Floor, Boston, MA 02111 # USA. # # Define this variable if not defined for backwards-compatibility as # it is only available in gnustep-make >= 2.0.5 ifeq ($(LN_S_RECURSIVE),) LN_S_RECURSIVE = $(LN_S) endif before-all:: after-all:: after-clean:: after-distclean:: after-clean:: apps-gorm-gorm-1_5_0/Applications/Gorm/GNUmakefile.preamble000066400000000000000000000026031475375552500237430ustar00rootroot00000000000000# GNUmakefile: main makefile for GNUstep Object Relationship Modeller # # Copyright (C) 2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2003 # # This file is part of GNUstep. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 # USA. # # ADDITIONAL_OBJCFLAGS += -Wall -Werror ADDITIONAL_GUI_LIBS += \ -lGormCore \ -lGormObjCHeaderParser \ -lInterfaceBuilder \ ADDITIONAL_INCLUDE_DIRS += \ -I../../InterfaceBuilder \ -I../../GormObjCHeaderParser \ -I../../GormCore \ -I../.. \ -I. ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework \ apps-gorm-gorm-1_5_0/Applications/Gorm/Gorm.spec.in000066400000000000000000000007071475375552500222730ustar00rootroot00000000000000Summary: The GNUstep graphical interface builder Release: 1 Copyright: GPL Group: Development/Tools Source: ftp://ftp.gnustep.org/pub/gnustep/dev-apps/%{gs_name}-%{gs_version}.tar.gz Requires: gnustep-gui %description Gorm is an acronym for GNUstep/Graphical Object Relationship Modeler. It is a clone of the NeXTstep `Interface Builder' application for GNUstep. With Gorm, a developer can build an interface very quickly and easily with no code. apps-gorm-gorm-1_5_0/Applications/Gorm/GormAppDelegate.h000066400000000000000000000052431475375552500232570ustar00rootroot00000000000000/* GormAppDelegate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #ifndef GormAppDelegate_H_INCLUDE #define GormAppDelegate_H_INCLUDE #import #import #import #import @class NSDictionary; @class NSImage; @class NSMenu; @class NSMutableArray; @class NSSet; @class GormLanguageViewController; @interface GormAppDelegate : GormAbstractDelegate { @private GormLanguageViewController *_vc; } // preferences - (IBAction) preferencesPanel: (id) sender; // Cut/Paste operations - (IBAction) copy: (id)sender; - (IBAction) cut: (id)sender; - (IBAction) paste: (id)sender; - (IBAction) delete: (id)sender; - (IBAction) selectAllItems: (id)sender; // palettes/inspectors. - (IBAction) inspector: (id) sender; - (IBAction) palettes: (id) sender; - (IBAction) loadPalette: (id) sender; // sound & images - (IBAction) loadSound: (id) sender; - (IBAction) loadImage: (id) sender; // grouping/layout - (IBAction) groupSelectionInSplitView: (id)sender; - (IBAction) groupSelectionInBox: (id)sender; - (IBAction) groupSelectionInScrollView: (id)sender; - (IBAction) ungroup: (id)sender; // Classes actions - (IBAction) createSubclass: (id)sender; - (IBAction) loadClass: (id)sender; - (IBAction) createClassFiles: (id)sender; - (IBAction) instantiateClass: (id)sender; - (IBAction) addAttributeToClass: (id)sender; - (IBAction) remove: (id)sender; // Palettes Actions... - (IBAction) inspector: (id) sender; - (IBAction) palettes: (id) sender; - (IBAction) loadPalette: (id) sender; // Translation - (IBAction) importXLIFFDocument: (id)sender; - (IBAction) exportXLIFFDocument: (id)sender; - (IBAction) translate: (id)sender; - (IBAction) exportStrings: (id)sender; // Print - (IBAction) print: (id)sender; @end #endif // GormAppDelegate_H_INCLUDE apps-gorm-gorm-1_5_0/Applications/Gorm/GormAppDelegate.m000066400000000000000000000442621475375552500232700ustar00rootroot00000000000000/* GormAppDelegate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #import #import #import #import #import #import "GormAppDelegate.h" #import "GormLanguageViewController.h" @interface GormDocument (Private) - (NSMutableArray *) _collectAllObjects; @end @implementation GormAppDelegate // App delegate... - (BOOL)applicationShouldOpenUntitledFile: (NSApplication *)sender { if (NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", nil) == NSWindows95InterfaceStyle) { return YES; } return NO; } - (void) applicationOpenUntitledFile: (NSApplication *)sender { GormDocumentController *dc = [GormDocumentController sharedDocumentController]; // open a new document and build an application type document by default... [dc newDocument: sender]; } - (void) applicationDidFinishLaunching: (NSNotification *)n { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ( [defaults boolForKey: @"ShowInspectors"] ) { [[[self inspectorsManager] panel] makeKeyAndOrderFront: self]; } if ( [defaults boolForKey: @"ShowPalettes"] ) { [[[self palettesManager] panel] makeKeyAndOrderFront: self]; } } - (void) applicationWillTerminate: (NSNotification *)n { [[NSUserDefaults standardUserDefaults] setBool: [[[self inspectorsManager] panel] isVisible] forKey: @"ShowInspectors"]; [[NSUserDefaults standardUserDefaults] setBool: [[[self palettesManager] panel] isVisible] forKey: @"ShowPalettes"]; } - (BOOL) applicationShouldTerminateAfterLastWindowClosed: (NSApplication *)sender { if (NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", nil) == NSWindows95InterfaceStyle) { GormDocumentController *docController; docController = [GormDocumentController sharedDocumentController]; if ([[docController documents] count] > 0) { return NO; } else { return YES; } } return NO; } - (BOOL) validateMenuItem: (NSMenuItem*)item { GormDocument *active = (GormDocument*)[self activeDocument]; SEL action = [item action]; GormClassManager *cm = nil; NSArray *s = nil; // if we have an active document... if(active != nil) { cm = [active classManager]; s = [_selectionOwner selection]; } if(sel_isEqual(action, @selector(loadPalette:))) { return YES; } else if (sel_isEqual(action, @selector(close:)) || sel_isEqual(action, @selector(miniaturize:))) { if (active == nil) { return NO; } } else if (sel_isEqual(action, @selector(testInterface:))) { if (active == nil) { return NO; } } else if (sel_isEqual(action, @selector(copy:))) { if ([s count] == 0) { return NO; } else { id o = [s objectAtIndex: 0]; NSString *n = [active nameForObject: o]; if ([n isEqual: @"NSOwner"] || [n isEqual: @"NSFirst"]) { return NO; } } return [_selectionOwner respondsToSelector: @selector(copySelection)]; } else if (sel_isEqual(action, @selector(cut:))) { if ([s count] == 0) { return NO; } else { id o = [s objectAtIndex: 0]; NSString *n = [active nameForObject: o]; if ([n isEqual: @"NSOwner"] || [n isEqual: @"NSFirst"]) { return NO; } } return ([_selectionOwner respondsToSelector: @selector(copySelection)] && [_selectionOwner respondsToSelector: @selector(deleteSelection)]); } else if (sel_isEqual(action, @selector(delete:))) { if ([s count] == 0) { return NO; } else { id o = [s objectAtIndex: 0]; NSString *n = [active nameForObject: o]; if ([n isEqual: @"NSOwner"] || [n isEqual: @"NSFirst"]) { return NO; } } return [_selectionOwner respondsToSelector: @selector(deleteSelection)]; } else if (sel_isEqual(action, @selector(paste:))) { if ([s count] == 0) { return NO; } else { id o = [s objectAtIndex: 0]; NSString *n = [active nameForObject: o]; if ([n isEqual: @"NSOwner"] || [n isEqual: @"NSFirst"]) { return NO; } } return [_selectionOwner respondsToSelector: @selector(pasteInSelection)]; } else if (sel_isEqual(action, @selector(setName:))) { NSString *n; id o; if ([s count] == 0) { return NO; } if ([s count] > 1) { return NO; } o = [s objectAtIndex: 0]; n = [active nameForObject: o]; if ([n isEqual: @"NSOwner"] || [n isEqual: @"NSFirst"] || [n isEqual: @"NSFont"] || [n isEqual: @"NSMenu"]) { return NO; } else if(![active isTopLevelObject: o]) { return NO; } } else if(sel_isEqual(action, @selector(createSubclass:)) || sel_isEqual(action, @selector(loadClass:)) || sel_isEqual(action, @selector(createClassFiles:)) || sel_isEqual(action, @selector(instantiateClass:)) || sel_isEqual(action, @selector(addAttributeToClass:)) || sel_isEqual(action, @selector(remove:))) { if(active == nil) { return NO; } if(![active isEditingClasses]) { return NO; } if(sel_isEqual(action, @selector(createSubclass:))) { NSArray *s = [_selectionOwner selection]; id o = nil; NSString *name = nil; if([s count] == 0 || [s count] > 1) return NO; o = [s objectAtIndex: 0]; name = [o className]; if([active classIsSelected] == NO) { return NO; } if([name isEqual: @"FirstResponder"]) return NO; } if(sel_isEqual(action, @selector(createClassFiles:)) || sel_isEqual(action, @selector(remove:))) { id o = nil; NSString *name = nil; if ([s count] == 0) { return NO; } if ([s count] > 1) { return NO; } o = [s objectAtIndex: 0]; name = [o className]; if(![cm isCustomClass: name]) { return NO; } } if(sel_isEqual(action, @selector(instantiateClass:))) { id o = nil; NSString *name = nil; if ([s count] == 0) { return NO; } if ([s count] > 1) { return NO; } if([active classIsSelected] == NO) { return NO; } o = [s objectAtIndex: 0]; name = [o className]; if(name != nil) { id cm = [self classManager]; return [cm canInstantiateClassNamed: name]; } } } else if(sel_isEqual(action, @selector(loadSound:)) || sel_isEqual(action, @selector(loadImage:)) || sel_isEqual(action, @selector(debug:))) { if(active == nil) { return NO; } } return YES; } - (IBAction) stop: (id)sender { if(_isTesting == NO) { // [super stop: sender]; } else { [self endTesting: sender]; } } - (IBAction) miniaturize: (id)sender { NSWindow *window = [(GormDocument *)[self activeDocument] window]; [window miniaturize: self]; } /** Info Menu Actions */ - (IBAction) preferencesPanel: (id) sender { if(! _preferencesController) { _preferencesController = [[GormPrefController alloc] init]; } [[_preferencesController panel] makeKeyAndOrderFront:nil]; } /** Document Menu Actions */ - (IBAction) close: (id)sender { GormDocument *document = (GormDocument *)[self activeDocument]; if([document canCloseDocument]) { [document close]; } } - (IBAction) debug: (id) sender { [[self activeDocument] performSelector: @selector(printAllEditors)]; } - (IBAction) loadSound: (id) sender { [(GormDocument *)[self activeDocument] openSound: sender]; } - (IBAction) loadImage: (id) sender { [(GormDocument *)[self activeDocument] openImage: sender]; } /** Edit Menu Actions */ - (IBAction) copy: (id)sender { if ([[_selectionOwner selection] count] == 0 || [_selectionOwner respondsToSelector: @selector(copySelection)] == NO) return; if([self isConnecting]) { [self stopConnecting]; } [(id)_selectionOwner copySelection]; } - (IBAction) cut: (id)sender { if ([[_selectionOwner selection] count] == 0 || [_selectionOwner respondsToSelector: @selector(copySelection)] == NO || [_selectionOwner respondsToSelector: @selector(deleteSelection)] == NO) return; if([self isConnecting]) { [self stopConnecting]; } [(id)_selectionOwner copySelection]; [(id)_selectionOwner deleteSelection]; } - (IBAction) paste: (id)sender { if ([_selectionOwner respondsToSelector: @selector(pasteInSelection)] == NO) return; if([self isConnecting]) { [self stopConnecting]; } [(id)_selectionOwner pasteInSelection]; } - (IBAction) delete: (id)sender { if ([[_selectionOwner selection] count] == 0 || [_selectionOwner respondsToSelector: @selector(deleteSelection)] == NO) return; if([self isConnecting]) { [self stopConnecting]; } [(id)_selectionOwner deleteSelection]; } - (IBAction) selectAll: (id)sender { if ([[_selectionOwner selection] count] == 0 || [_selectionOwner respondsToSelector: @selector(deleteSelection)] == NO) return; if([self isConnecting]) { [self stopConnecting]; } [(id)_selectionOwner deleteSelection]; } - (IBAction) selectAllItems: (id)sender { return; } /** Grouping */ - (IBAction) groupSelectionInSplitView: (id)sender { if ([[_selectionOwner selection] count] < 2 || [_selectionOwner respondsToSelector: @selector(groupSelectionInSplitView)] == NO) return; [(GormGenericEditor *)_selectionOwner groupSelectionInSplitView]; } - (IBAction) groupSelectionInBox: (id)sender { if ([_selectionOwner respondsToSelector: @selector(groupSelectionInBox)] == NO) return; [(GormGenericEditor *)_selectionOwner groupSelectionInBox]; } - (IBAction) groupSelectionInView: (id)sender { if ([_selectionOwner respondsToSelector: @selector(groupSelectionInView)] == NO) return; [(GormGenericEditor *)_selectionOwner groupSelectionInView]; } - (IBAction) groupSelectionInScrollView: (id)sender { if ([_selectionOwner respondsToSelector: @selector(groupSelectionInScrollView)] == NO) return; [(GormGenericEditor *)_selectionOwner groupSelectionInScrollView]; } - (IBAction) groupSelectionInMatrix: (id)sender { if ([_selectionOwner respondsToSelector: @selector(groupSelectionInMatrix)] == NO) return; [(GormGenericEditor *)_selectionOwner groupSelectionInMatrix]; } - (IBAction) ungroup: (id)sender { // NSLog(@"ungroup: _selectionOwner %@", _selectionOwner); if ([_selectionOwner respondsToSelector: @selector(ungroup)] == NO) return; [(GormGenericEditor *)_selectionOwner ungroup]; } /** Classes actions */ - (IBAction) createSubclass: (id)sender { [(GormDocument *)[self activeDocument] createSubclass: sender]; } - (IBAction) loadClass: (id)sender { // Call the current document and create the class // descibed by the header [(GormDocument *)[self activeDocument] loadClass: sender]; } - (IBAction) createClassFiles: (id)sender { [(GormDocument *)[self activeDocument] createClassFiles: sender]; } - (IBAction) instantiateClass: (id)sender { [(GormDocument *)[self activeDocument] instantiateClass: sender]; } - (IBAction) addAttributeToClass: (id)sender { [(GormDocument *)[self activeDocument] addAttributeToClass: sender]; } - (IBAction) remove: (id)sender { [(GormDocument *)[self activeDocument] remove: sender]; } /** Palettes Actions... */ - (IBAction) inspector: (id) sender { [[[self inspectorsManager] panel] makeKeyAndOrderFront: self]; } - (IBAction) palettes: (id) sender { [[[self palettesManager] panel] makeKeyAndOrderFront: self]; } - (IBAction) loadPalette: (id) sender { [[self palettesManager] openPalette: sender]; } // Translation - (IBAction) importXLIFFDocument: (id)sender { NSArray *fileTypes = [NSArray arrayWithObjects: @"xliff", nil]; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; int result; [oPanel setAllowsMultipleSelection: NO]; [oPanel setCanChooseFiles: YES]; [oPanel setCanChooseDirectories: NO]; result = [oPanel runModalForDirectory: nil file: nil types: fileTypes]; if (result == NSOKButton) { GormDocument *doc = (GormDocument *)[self activeDocument]; NSMutableArray *allObjects = [doc _collectAllObjects]; NSString *filename = [oPanel filename]; NSEnumerator *en = nil; id obj = nil; BOOL result = NO; NS_DURING { GormXLIFFDocument *xd = [GormXLIFFDocument xliffWithGormDocument: doc]; result = [xd importXLIFFDocumentWithName: filename]; } NS_HANDLER { NSString *message = [localException reason]; NSRunAlertPanel(_(@"Problem loading XLIFF"), message, nil, nil, nil); } NS_ENDHANDLER; // If actual translation was done, then refresh the objects... if (result == YES) { [doc touch]; // mark the document as modified... // change to translated values. en = [allObjects objectEnumerator]; while((obj = [en nextObject]) != nil) { if([obj isKindOfClass: [NSView class]]) { [obj setNeedsDisplay: YES]; } // redisplay/flush, if the object is a window. if([obj isKindOfClass: [NSWindow class]]) { NSWindow *w = (NSWindow *)obj; [w setViewsNeedDisplay: YES]; [w disableFlushWindow]; [[w contentView] setNeedsDisplay: YES]; [[w contentView] displayIfNeeded]; [w enableFlushWindow]; [w flushWindowIfNeeded]; } } } } } - (IBAction) exportXLIFFDocument: (id)sender { NSSavePanel *savePanel = [NSSavePanel savePanel]; NSBundle *bundle = [NSBundle bundleForClass: [GormLanguageViewController class]]; NSModalResponse result = 0; GormDocument *doc = (GormDocument *)[self activeDocument]; if (doc != nil) { NSString *fn = [[doc fileURL] path]; fn = [[fn lastPathComponent] stringByDeletingPathExtension]; fn = [fn stringByAppendingPathExtension: @"xliff"]; _vc = [[GormLanguageViewController alloc] initWithNibName: @"GormLanguageViewController" bundle: bundle]; NSDebugLog(@"view = %@, _vc = %@", [_vc view], _vc); [savePanel setTitle: @"Export XLIFF"]; [savePanel setAccessoryView: [_vc view]]; [savePanel setDelegate: self]; // [savePanel setURL: [NSURL fileURLWithPath: fn]]; result = [savePanel runModalForDirectory: nil file: fn]; if (NSModalResponseOK == result) { NSString *filename = [[savePanel URL] path]; GormXLIFFDocument *xd = [GormXLIFFDocument xliffWithGormDocument: doc]; [xd exportXLIFFDocumentWithName: filename withSourceLanguage: [_vc sourceLanguageIdentifier] andTargetLanguage: [_vc targetLanguageIdentifier]]; } } } - (NSString *) panel: (id)sender userEnteredFilename: (NSString *)filename confirmed: (BOOL)flag { if (flag == YES) { NSDebugLog(@"Writing the document... %@", filename); } else { NSDebugLog(@"%@ not saved", filename); } return filename; } /** * This method is used to translate all of the strings in the file from one language * into another. This is helpful when attempting to translate an application for use * in different locales. */ - (IBAction) translate: (id)sender { NSArray *fileTypes = [NSArray arrayWithObjects: @"strings", nil]; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; int result; [oPanel setAllowsMultipleSelection: NO]; [oPanel setCanChooseFiles: YES]; [oPanel setCanChooseDirectories: NO]; result = [oPanel runModalForDirectory: nil file: nil types: fileTypes]; if (result == NSOKButton) { GormDocument *doc = (GormDocument *)[self activeDocument]; NSMutableArray *allObjects = [doc _collectAllObjects]; NSString *filename = [oPanel filename]; NSEnumerator *en = nil; id obj = nil; NS_DURING { [doc importStringsFromFile: filename]; } NS_HANDLER { NSString *message = [localException reason]; NSRunAlertPanel(_(@"Problem loading strings"), message, nil, nil, nil); } NS_ENDHANDLER; [doc touch]; // mark the document as modified... // change to translated values. en = [allObjects objectEnumerator]; while((obj = [en nextObject]) != nil) { if([obj isKindOfClass: [NSView class]]) { [obj setNeedsDisplay: YES]; } // redisplay/flush, if the object is a window. if([obj isKindOfClass: [NSWindow class]]) { NSWindow *w = (NSWindow *)obj; [w setViewsNeedDisplay: YES]; [w disableFlushWindow]; [[w contentView] setNeedsDisplay: YES]; [[w contentView] displayIfNeeded]; [w enableFlushWindow]; [w flushWindowIfNeeded]; } } } } /** * This method is used to export all strings in a document to a file for Language * translation. This allows the user to see all of the strings which can be translated * and allows the user to provide a translateion for each of them. */ - (IBAction) exportStrings: (id)sender { NSSavePanel *sp = [NSSavePanel savePanel]; int result; [sp setRequiredFileType: @"strings"]; [sp setTitle: _(@"Save strings file as...")]; result = [sp runModalForDirectory: NSHomeDirectory() file: nil]; if (result == NSOKButton) { NSString *filename = [sp filename]; GormDocument *doc = (GormDocument *)[self activeDocument]; [doc exportStringsToFile: filename]; } } // Print - (IBAction) print: (id) sender { [[NSApp keyWindow] print: sender]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/GormInfo.plist000066400000000000000000000037571475375552500227130ustar00rootroot00000000000000{ NSIcon = "Gorm.tiff"; NSMainNibFile = "Gorm.gorm"; NSPrincipalClass = "NSApplication"; NSRole = "Editor"; NSTypes = ( { NSName = "GSGormFileType"; NSHumanReadableName = "GNUstep Gorm"; NSRole = Editor; NSDocumentClass = GormDocument; NSUnixExtensions = ( "gorm" ); NSIcon = "GormFile.tiff"; }, { NSName = "GSStoryboardFileType"; NSHumanReadableName = "Cocoa Storyboard"; NSRole = Viewer; NSDocumentClass = GormDocument; NSUnixExtensions = ( "storyboard" ); NSIcon = "GormFile.tiff"; }, { NSName = "GSNibFileType"; NSHumanReadableName = "Cocoa Nib"; NSRole = Editor; NSDocumentClass = GormDocument; NSUnixExtensions = ( "nib" ); NSIcon = "GormNib.tiff"; }, { NSName = "GSGModelFileType"; NSHumanReadableName = "GNUstep GModel"; NSRole = Viewer; NSDocumentClass = GormDocument; NSUnixExtensions = ( "gmodel" ); NSIcon = "FileIcon_gmodel.tiff"; }, { NSName = "GSXibFileType"; NSHumanReadableName = "Cocoa Xib"; NSRole = Editor; NSDocumentClass = GormDocument; NSUnixExtensions = ( "xib" ); NSIcon = "GormNib.tiff"; }, { NSUnixExtensions = ( "palette" ); NSIcon = "GormPalette.tiff"; } ); ApplicationDescription = "[GNUstep | Graphical] Object Relationship Modeller"; ApplicationIcon = "Gorm.tiff"; ApplicationName = "Gorm"; ApplicationRelease = "Gorm 1.5.0 (Released)"; Authors = ("Gregory John Casamento ", "Adam Fedor ", "Richard Frith-Macdonald ", "Wolfgang Lux ", "Pierre-Yves Rivaille ", "Sergii Stoian "); Copyright = "Copyright (C) 1999-2023 FSF"; CopyrightDescription = "Released under the GNU General Public License 3.0"; NSBuildVersion = "1.5.0"; GSDesktopInstallationDomain=SYSTEM; } apps-gorm-gorm-1_5_0/Applications/Gorm/GormLanguageViewController.h000066400000000000000000000030071475375552500255220ustar00rootroot00000000000000/* GormLanguageViewController.h * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef GormLanguageViewController_H_INCLUDE #define GormLanguageViewController_H_INCLUDE #import @class NSDictionary, NSString; @interface GormLanguageViewController : NSViewController { IBOutlet id targetLanguage; IBOutlet id sourceLanguage; NSString *sourceLanguageIdentifier; NSString *targetLanguageIdentifier; NSDictionary *ldict; } - (IBAction) updateTargetLanguage: (id)sender; - (IBAction) updateSourceLanguage: (id)sender; - (NSString *) sourceLanguageIdentifier; - (NSString *) targetLanguageIdentifier; @end #endif // GormLanguageViewController_H_INCLUDE apps-gorm-gorm-1_5_0/Applications/Gorm/GormLanguageViewController.m000066400000000000000000000061721475375552500255350ustar00rootroot00000000000000/* GormLanguageViewController.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #import #import #import #import #import "GormLanguageViewController.h" @implementation GormLanguageViewController - (void) selectPreferredLanguage { NSString *language = [[NSLocale preferredLanguages] objectAtIndex: 0]; NSInteger i = [[ldict allKeys] indexOfObject: language]; NSDebugLog(@"language = %@", language); // Set the default translation to the current language [sourceLanguage selectItemAtIndex: i]; [targetLanguage selectItemAtIndex: i]; // Set them since the above doesn't invoke the method that sets them. [self updateTargetLanguage: self]; [self updateSourceLanguage: self]; } - (void) viewDidLoad { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForResource: @"language-codes" ofType: @"plist"]; [super viewDidLoad]; if (path != nil) { [targetLanguage removeAllItems]; [sourceLanguage removeAllItems]; NSDebugLog(@"path = %@", path); ldict = [[NSDictionary alloc] initWithContentsOfFile: path]; if (ldict != nil) { NSEnumerator *en = [ldict keyEnumerator]; id k = nil; while ((k = [en nextObject]) != nil) { NSString *v = [ldict objectForKey: k]; NSString *itemTitle = [NSString stringWithFormat: @"%@ (%@)", k, v]; [targetLanguage addItemWithTitle: itemTitle]; [sourceLanguage addItemWithTitle: itemTitle]; } // Select preferred language in pop up... [self selectPreferredLanguage]; } } else { NSLog(@"Unable to load language codes"); } } - (void) dealloc { RELEASE(ldict); [super dealloc]; } - (IBAction) updateTargetLanguage: (id)sender { NSInteger i = [targetLanguage indexOfSelectedItem]; targetLanguageIdentifier = [[ldict allKeys] objectAtIndex: i]; } - (IBAction) updateSourceLanguage: (id)sender { NSInteger i = [sourceLanguage indexOfSelectedItem]; sourceLanguageIdentifier = [[ldict allKeys] objectAtIndex: i]; } - (NSString *) sourceLanguageIdentifier { return sourceLanguageIdentifier; } - (NSString *) targetLanguageIdentifier { return targetLanguageIdentifier; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/INSTALL000066400000000000000000000011441475375552500211330ustar00rootroot000000000000001 Required software ------------------- You need to have the GNUstep core libraries installed in order to compile and use Gorm. The core packages are, at a minimum: * gnustep-make * gnustep-base * gnustep-gui * gnustep-back See for further information. 2 Build and Install ------------------- Steps to build: * make && make install Please note that GormLib must be installed for Gorm.app to run. 3 Trouble --------- Give us feedback! Tell us what you like; tell us what you think could be better. Send bug reports and patches to . apps-gorm-gorm-1_5_0/Applications/Gorm/Images/000077500000000000000000000000001475375552500213075ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Images/FileIcon_gmodel.tiff000066400000000000000000006230621475375552500252110ustar00rootroot00000000000000II*00  F2$X`(1 h2tJRS/home/heron/Development/gnustep/apps-gorm/Images/FileIcon_gmodel.tiffHHGIMP 2.10.82020:07:12 01:32:55 &2&S, (/LB`q/EQ~ -5RC`pau` " ,3QEcsfww3KX /;h2I\B`xPv 0) -5QGdtdyeU{ahX )` !/7THevl~qnkphir^&9H"/7SJhxi}|s|yknaTzef4Ma  *%4=_Lk{n텱}tutsqutjU}]lDc}>FMJfw`pxwvuutrq{ro|]U|rLp '  <"1>j0FYB`xNqSx_w_wwy{yvuutsrqrihffRytS} E#BGiRxX]bnwsxxrrqoqjhiltuZoY$.h!G_|~y}s}~spos|ls|ke~`cb)cx ,6px}}ollllllllllllrwuuiiT!LCl{}mlllllllllllllrt{{yr]b7Xi #X}}{lllllllllllllllruhgVUhS 9Dc|x}|xsqlkklllljkl_]jru`XXWVT`_/L]8Rgjvqolkkklkkk```]]sfZXWV\hcS?g{,AR]|qomlkkkkkkk````[o\XXeiaULy!4A5 ,7hYz{mlkkkkikk`````hhtik\SKtKkZy)3zBV}yzlkkjif\k```hhttkkQFmEgVxjt-DV Ryq~xxmlkkkkkk```hhttkk_wF^p^zmrk`U|8Rg Hinqvwvvmlkkkkk}ekhhttkk_w_w_w_wU}Kp=\r,BS+7` 99Ukpdvutt{bahctkk_w_w_w)>Mhbvttsrqq~reerykkk(3b^kmusqqpomljiggelzxiT2L\zK:U~whqqpommkjhhsvcKr$8B G Nse]tponmlkij~sa>^p&-x0 & FeRzHjbqomlktlX2JY U  $P V:0EQ}nl||kOv%7@ B3hyb@_q!'p) Mrzr\2IV W &8BqQu$4><%MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<NzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:J3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDfDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKp++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     $$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\IlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQw"3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'.ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\E]qE]qE]qE]qE]qE]q{{{{{ĝԝԝԝԝyyyyyy{{{{{|||||||||||}}}}}ΗΗΗΗΗrrrrrooooommmmmmlllllkkkkkkkkkkkծծծծՃjjjjjjĊĊĊĊĄ}}}}}qqqqq``````_____]]]]]rrrrrrcccccR|R|R|R|R|\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\sbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkC[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####oooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:ZnZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~Gd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^o5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIvNrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5MrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGl):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKnSzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-OvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkIhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     >\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@UFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`s                              apps-gorm-gorm-1_5_0/Applications/Gorm/Images/Gorm.tiff000066400000000000000000000224101475375552500230640ustar00rootroot00000000000000II*$ (/LBaq/EQ~ -5RC`paua "!!!,  ,3QEcsgww3KX /;h2I\B`yQw 0)槧777G -5QGdudyeU{ahX )` 4adg777I !/7THevm~qnkphir^&9H !%}~~򣣣 "/7SJhyi~|s|yknaTzef5Ma  4{GMKfx`qxwvuutrq{ro|]U|rLq '  <"1>j0FYBayNrTy_wwy{yvuutsrqrihffRytT} E#BGiRxX]bnw|rxrrqoqjhiltuZoY$.h!G_|~y}gd|spos|ls|ke~`cb)LP 2GScig|bc~m`gko_Z]h?dx ,6px|~zp["08 !%Lpf|b`wouujfkkeiT!LCl}{xm[ .6 (((*\s-BS+7` 9:Ukpdvutt{bahc@Zi 444222 2 *>Mhbvttsrqq~reerykX>^q$2< 3333334(3b^kmusqqpomljiggelzxiU3M\zK V! 333111:U~whqqpommkjhhsvcLs%8C G >!  Ote]tponmlkij~sb?_q&-x0 9! k FfRzIkbqomlktlX2KY U  6!w P V:0EQ}nl||lPw%7@ B 1hf3iycA`q!'p)  Nrzr]3JW W &8BqQv$5><%00$ $@$$%(R/home/heron/Gorm.tiffHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormEHCoil.tiff000066400000000000000000000100201475375552500241020ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPggPPPPPPggPPPggPPPPPPPPPPPPPPPPPPPPPPPPy""yy""yy""yPPPPPP   PPPPPPU}}UU}}UU}}UPPP8PPP8PPP8888PPPPPPPPP88PPP8888}}UPPPU}}UU}}U PPP  y""yPPPy""yy""y g""""gPPPPPPPPPPPPPPPPPPgggg2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEHCoil.tiffHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormEHLine.tiff000066400000000000000000000100201475375552500241030ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEHLine.tiffHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormEVCoil.tiff000066400000000000000000000100201475375552500241200ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPUPPPyyPPP}88}PPPg PPP gPPP""PPPPPP""PPP g}88}yyPPPg PPPUUPPP"PPPPPPPPPPPPPPPPPPPPPPPP"PPPg UUPPPyyPPP}88}PPP gPPPPPP""PPP"" g}88}yyPPPg UUPPP"PPP"UUPPPgyyPPP}88}PPP gPPPPPP""PPP""g g}88}yyPPPUUPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEVCoil.tiffHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormEVLine.tiff000066400000000000000000000100201475375552500241210ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEVLine.tiffHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormFile.tiff000066400000000000000000006230541475375552500236770ustar00rootroot00000000000000II*00  ?,$RZ(1 b2nJRS/home/heron/Development/gnustep/apps-gorm/Images/GormFile.tiffHHGIMP 2.10.82020:07:12 01:33:34  ,&S& (/LB`q/EQ~ -5RC`pau` " ,3QEcsfww3KX /;h2I\B`xPv 0) -5QGdtdyeU{ahX )` !/7THevl~qnkphir^&9H"/7SJhxi}|s|yknaTzef4Ma  *%4=_Lk{n텱}tutsqutjU}]lDc}>FMJfw`pxwvuutrq{ro|]U|rLp '  <"1>j0FYB`xNqSx_w_wwy{yvuutsrqrihffRytS} E#BGiRxX]bnwsxxrrqoqjhiltuZoY$.h!G_|~y}s}~spos|ls|ke~`cb)cx ,6px}}ollllllllllllrwuuiiT!LCl{}mlllllllllllllrt{{yr]b7Xi #X}}{lllllllllllllllruhgVUhS 9Dc|x}|xsqlkklllljkl_]jru`XXWVT`_/L]8Rgjvqolkkklkkk```]]sfZXWV\hcS?g{,AR]|qomlkkkkkkk````[o\XXeiaULy!4A5 ,7hYz{mlkkkkikk`````hhtik\SKtKkZy)3zBV}yzlkkjif\k```hhttkkQFmEgVxjt-DV Ryq~xxmlkkkkkk```hhttkk_wF^p^zmrk`U|8Rg Hinqvwvvmlkkkkk}ekhhttkk_w_w_w_wU}Kp=\r,BS+7` 99Ukpdvutt{bahctkk_w_w_w)>Mhbvttsrqq~reerykkk(3b^kmusqqpomljiggelzxiT2L\zK:U~whqqpommkjhhsvcKr$8B G Nse]tponmlkij~sa>^p&-x0 & FeRzHjbqomlktlX2JY U  $P V:0EQ}nl||kOv%7@ B3hyb@_q!'p) Mrzr\2IV W &8BqQu$4><%MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<NzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:J3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDfDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKp++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     $$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\IlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQw"3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'.ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\E]qE]qE]qE]qE]qE]q{{{{{ĝԝԝԝԝyyyyyy{{{{{|||||||||||}}}}}ΗΗΗΗΗrrrrrooooommmmmmlllllkkkkkkkkkkkծծծծՃjjjjjjĊĊĊĊĄ}}}}}qqqqq``````_____]]]]]rrrrrrcccccR|R|R|R|R|\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\sbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkC[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####oooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:ZnZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~Gd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^o5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIvNrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5MrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGl):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKnSzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-OvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkIhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     >\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@UFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`s                              apps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormLinkImage.tiff000066400000000000000000000006001475375552500246420ustar00rootroot00000000000000II* O Иd" bQ8=p?j1GجMdR fI'Id9T>aP%4P&ӉԾ}0Rf:$'iu86=y*CB_Fl1~I>> qqqBBB???777:9:QPQ777>>>ooo???wwwIII555---GFG%%%222GGG sss|||UUUlll>>>ihiMLMrsrnon"""### #$#FFF ^_^yyyeeeutuusujij{y{eee{y{eeeVWVmmmhhhvtv}|}eeeyxytqtbabjijonoxvxZXZgeg|z|a`aeee`a`^^^xxxeeeonohghzyzeee{y{tsteeeUVUklk|{|]^]xxxeee}|}tsteeezxz{z{eee~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~TUT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~jjjjjj~wuwxvx~}~eeecacigiqpqzxzZYZmlmwuwjhjUSUusuvuveee~~~abaTTTZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z XXX{y{dcdvuv~wuw}{}XXXrpr~|{|}tstXXX}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}FFF_^_XXXonosqs^]^kikhfh}wvwXXXUUUOOOXXXxwxxvx}|}XXXjijzyzutuvuvXXXbabZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZKKK010ded00$ G$6%@$L%T%(R/home/heron/Development/gnustep/dev-apps/Gorm/Images/GormMenuDrag.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormNib.tiff000066400000000000000000006230521475375552500235260ustar00rootroot00000000000000II*00  >*$PX(1 `2lJRS/home/heron/Development/gnustep/apps-gorm/Images/GormNib.tiffHHGIMP 2.10.82020:07:12 01:34:26 *&S$ (/LB`q/EQ~ -5RC`pau` " ,3QEcsfww3KX /;h2I\B`xPv 0) -5QGdtdyeU{ahX )` !/7THevl~qnkphir^&9H"/7SJhxi}|s|yknaTzef4Ma  *%4=_Lk{n텱}tutsqutjU}]lDc}>FMJfw`pxwvuutrq{ro|]U|rLp '  <"1>j0FYB`xNqSx_w_wwy{yvuutsrqrihffRytS} E#BGiRxX]bnwsxxrrqoqjhiltuZoY$.h!G_|~y}s}~spos|ls|ke~`cb)cx ,6px}}ollllllllllllrwuuiiT!LCl{}mlllllllllllllrt{{yr]b7Xi #X}}{lllllllllllllllruhgVUhS 9Dc|x}|xsqlkklllljkl_]jru`XXWVT`_/L]8Rgjvqolkkklkkk```]]sfZXWV\hcS?g{,AR]|qomlkkkkkkk````[o\XXeiaULy!4A5 ,7hYz{mlkkkkikk`````hhtik\SKtKkZy)3zBV}yzlkkjif\k```hhttkkQFmEgVxjt-DV Ryq~xxmlkkkkkk```hhttkk_wF^p^zmrk`U|8Rg Hinqvwvvmlkkkkk}ekhhttkk_w_w_w_wU}Kp=\r,BS+7` 99Ukpdvutt{bahctkk_w_w_w)>Mhbvttsrqq~reerykkk(3b^kmusqqpomljiggelzxiT2L\zK:U~whqqpommkjhhsvcKr$8B G Nse]tponmlkij~sa>^p&-x0 & FeRzHjbqomlktlX2JY U  $P V:0EQ}nl||kOv%7@ B3hyb@_q!'p) Mrzr\2IV W &8BqQu$4><%MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<NzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:J3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDfDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKp++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     $$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\IlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQw"3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'.ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\E]qE]qE]qE]qE]qE]q{{{{{ĝԝԝԝԝyyyyyy{{{{{|||||||||||}}}}}ΗΗΗΗΗrrrrrooooommmmmmlllllkkkkkkkkkkkծծծծՃjjjjjjĊĊĊĊĄ}}}}}qqqqq``````_____]]]]]rrrrrrcccccR|R|R|R|R|\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\sbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkC[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####oooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:ZnZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~Gd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^o5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIvNrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5MrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGl):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKnSzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-OvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkIhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     >\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@UFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`s                              apps-gorm-gorm-1_5_0/Applications/Gorm/Images/GormPalette.tiff000066400000000000000000000224701475375552500244110ustar00rootroot00000000000000II*$Lr]Lf_~-KZcRjluj-CK"-<MyaQjqxwU}NshRxU{Y%:J0)3DUdQmpyeU{ahX:Ul`??,DSUtdTnt~qnkphir^Df+=O3AIDUfhSqu~|s|yknaTzefLo **U,?N%3<T[_"3Ns*c_qv텱}tutsqutjU}]lQw $$H1AZ0HXVbkjowxwvuutrq{ro|]U|rS{ 4A'8^qHn{^;ZKJoJnImHk6jQ"B3(O=>|^=z]{^LP 2GScig|bc~m`gko_Z]hO~ Fdzpx|~zp["08 !%Lpf|b`wouujfkkeiV9]nL5ObCl}{xm[ .6 (((*V!/: 333111/ 87 ~hsvdW>_q 'G*?U 1ER>&4@ ޿ po FFcb %$scPy5P_x 0.EE 1CU9%5A !#(kT```lllJo!09U ??/BU6(9Fw *.4*FU wv \[\[ 87'''8U .CS1,=Lh(1%2]jVZhQer^S`Ln{g]oE}L`U}`g{X`zgaeDptO@J(BTDQ\LRfMX_@jeEchHVrnAVY.HM7ҵĿЫċrjlgz{tlyifks|esRo}ZcqPjTUp;^pVwiRUPTb?^n?tEyJr{P|\SZ1pJQ?t^~^DT/ZhQN\Chv]ZhQ^lS[l@UXRwZcwRlzs`uvVjoGCM+EWGHSCQdNIP1mhJglLi~zMuxMTYCԸ۵ҙkqprppknqrrvnvdt`pZh}V`zMkz]y˜ZUuRNcBbxI|QlvxSnZ{^deWhoG{XZsperGlsmKvtKX]e@PcM_hUDV@GK2cX[>nXR2xOT>}˯¾omnfǁp[jrrn{vЬ¤xc{WxfygtuO_pX|_kd}_uhhxQtO{Uq~So|QvLj`_1p|NvXZiLHTHN[JCQ7SbCw\dlyDeY{ShtBurIgwuN[a?PbJ]ePFUBEG/cWX9yYR6Y^H镠ʹ׵yqqnuǂitjglssz|h}qpdvfvbljfC_zGdyPz\rop^eCw~UrzSp~[WhDl{P{Qfb|^^mNXdX[hV]kQkz[t[Va^]bo{Kwh~{Zh`eGkzc~qHUDbdLjghFpYR5|SXB򦴝ͫzuykwwvt{ir|s}lukal^{g}_`Xv@b}TxknxUuobn|`lpMjpLhuWZmMoWmsCt~XpNk{W]jXSaHQ`A[jIbsI{N^^V_]j?d_5JJ0KG.PL1:<$S`Lt\hZddLeiiCOI)qIN8ٰ{|y{vvjxw}~}vxlpgXYuMZrPfrZut_ukPoiEfd>iqJr_hoNlsRgvWcyUy[KnWhbrMjxaP^DP_BXgJXgFoMa]GN">K-=J0UQ6glVddLWR>ED2CP?RVGQ[Phkkl@fa;[`J}mz~oȘɖ{xj‡ssrxzw®¡qt{h_iG|X~UaXwNqPR]=|ignOevTg~Re?ȿ||S{b}oZgVFSAKXFYfUVcRVeHp\cO@G54?78E;BA-sySTRFUaUJL?C/`QTC@E/GL5?HCT]JppL~VM&}TbAupؾ˼˵ҳʞxѾҵfmCol7Ż{tye~scwjn`bfWfl^BN:@O8;E:ltia]BgnvΩKTCtwXlkVƴ൯̨֠эΆّԌߏ̊k²wѡhє~V\ssQS}^u]iñjǚԐoycxq^خ͠“ǐ֜ʎҾ֜cW`ET\EFM;Y^JDL7CPK9CK4ɚŖm{rhrWwtĺtϾ­״Y|\ΪХכ͒ΫΔёƔyprnn˃ۀ}ëӝѿƭ›ߋqߌ̂qיȿre~qsK\ti؊W|nrct=H7AR@GVA@J2{q~cnPюq|͹|ӭսʠԜΎ°áͿlzlיӍpnS[{‘қеñՀu}NcPsՁ҇{p2׃pmgg`fw~lx|tITDDS@CR;M[A֮y{euwpwox\TʛɴȨy㳲drΒصͪijcmJacЇvĀֿ֙͝вϻrfӀ[pyRpYJz[UԀv܉ޛi}q=A3aeTT\E?L2GL.Z]B[`Lzwys|wo{mpqsfɪs]˱֧_i͒ƒ͟»ְͽ\jlْ~u~osڪ؛ϵƩwďy\Іڂoy]gFVwde~{\tEF8jjnWS_IRZE`hQXaLNX@t_pWgk{Vul\eF^aXw{Zحz֨wwÛokϓ{ݳؾƽŴq^Ăg{hn]{բÖн¬t|퓭y~ڇƻ`ajTMXs~lt\y9?%f~jT_Y\h\bm]OZLakbITDz~OkyyÄ|[uS{͠ϣ~xԑ՛ȐЏʆ}zуݓԢonRwsh{hU׉օڐkvНwoʾhοlq~gz֗ޟ֊jtn}dvq]ztbt~I|v\lXGzAjztU^MT[STVUabZcjXZfXXdXO[MM[DUaKfo^U^A^}SxNi{K]rIud[wtn{҉vݍՇzˍؚccApkW|uoi`[~ZzנXWCiiE}s~ԇ{ˁՋܚ}U^inNwz]h}pwgs}rnxsSwyz|dtaon[bPRXNjlipsjgo`UcT]i_amaS^MXcRQ\NKVFgqX[hL\iMTkAdyZ`tYXywpvsΆאӇɂLjvq[geP{xe|{ijiUru`x|nvӞ|_eIZgMn|Xbs=іsyIan9bn@n~QSd8csOWfIZkIH]4e|NczLr]oRyXcew]gzb}exa|g~å{hrmw\gqXnx]skRWCgi\^aZ\c\Ze_O^YWg]Zj_XfU[fUMUFV_NR`I^mPezQ_tMWaHhpY`vwtv|҅~ڊߏؕzxinl_kka_^Yyvo{{qhjgDH/ђ٬jk]ZeaUaSXgJpl{TcqM]jNjv`kzYk{WgvYxmgw\wekTaxJkVnWh~OpWxas\t]qZ{doYn]WjJobo`YmHcwRZnIg{Vr`u_m|[S]E]fSu{oeofcnfcsi\lbWg\VdSZeTFN?ludWeNapSi~U\qHjtYhpXg}kՄ~̀x}̍ĒmqXY_E\aKim_~ywk]]Qab\ouidoOpzWf]]QYf]VdSRbEl}[l~Vp]m}`l{diw]M[A4A-?L:hw`p_e|PjSmX_xN[tJkXjWhSeOlVZtDjXdX^zT^zTnbeVbQgTmZp]q]jY_oRO]Fp{kkvh`l``mcfvl[k`YgV[fUW_PXaPM[DapSwce|RfsUs}bd||qvz{΁zӄ̑ϜyYRY7MW4Wa?ejTz}rghVa_Hmk\_cU_iPny[mSVEXfUScI^oKuayanZfzWj}aK[A?M6:G69E7ztsdf}Qf}OWnB\uM`zSiYiWfRnYlUePt`_{R]yQa}Ta~R[xJ]zLeRmYhThUgWTgGFVdtW~mopdUlO2I/-<'CP@O:;I24A0evR`sFdwIrSrWs{~qd}Vsen]lq_b}Pydzb~hdiU^`SuxqhohgrlSb]brh[k`WeTT_NDL=U^MJXAapSs_v]_uG{cmlgfj}gVbT|o{tikl~DZ\fMªs}bsdAN4`nWp}kvmj}_M`DCV:8K/_oRJZ=^nQYiLZiHoy~|qt{szPhH~mp{[w}ctZ[KSUG=@5gnf\g_Zj`bpaZfX^j`OZR=I?O\HKY?VdJrfg}VTf@aoKqt8T;AVE}ipqiuv[wʱTaGkf|siw]vfta~kFS5q~dq}g[mSL`DEY=FZ>QdH`pUznv{{{wqvxc{xe{zfOP@EG9BHAN<S`F|ndtP[iF츿ŊxtfkUk|htar]ydOtxkrf{p_h|Ym`[nPcw[bvZ_sWskwn~}bgShkZusohuYva}gdpJyknSkoVyswf^fYeof^ieXdbZaZ[bZRZOX`UW_TT\QFO>LUB`jOkZhxTiwTοǠu~uqʵƹ}bpOYoKc{Y_wSVnJOgCoc_wSXpLmcndme`tXqiZmQpem{aznbpVs^nk~hnqrnx_KPMU=NVAfn_oypkvpXc_X_X`e^]cUbiYY_SPVLV]MgoZu~_eyTTd@XfC}wa~tssw}uy|zfwg[p]_vbdwcoziw}fpU{jo{gyfbuUlcSkGVnL`xXShIUjKYnO_tSWlKZoPXlPWkORfJTgKWgLn|bsgTbHbwN_tIq[r]iVPf?_uNg}WbsSNZBU\J`hQS\A]hHP_>^nJg|SgyOitROZ:]gLMW>IU?MXGS_QUaUQ\NS^N\hTXdNKWCGRAbnXlv[coKAW0]mISa>g̦Ο̙ѦxlXeQYgVUdQ`mYgyc]s\]u]f~fmjvqbo]nzdv~ferVhx[yl`mQhuYetWXmNd}]DY8QfGbvZN`FOaGTgKTgIXkKNcDOcGQeIMaEXkO`pUesYhv\]kQe|R[rFWnB[uH[tJ]vN`yQ^wPYoK\lQ^jToyabmOZeEm|[r`TiBs_u`ftSraq~`WdJJV@LXD[fU]iUWdPVdMDR9Q_HHV?^mPhvU]lCPf?gwSP^;OËȉi}JSfFRdJXhNTcBRaDO_DPdHSjM\uXa{`e}cau\dw[kz[k|Zc{YUmMfv[`nT^lSTfNI`DVfIXhNKZEETAN]JTcNK[AZjMK_CWkOThL`tXM`DXhMZhNVdJ_mSNb=bvQh|WdzTl^UjIdyX^sT]rSlbJaDHZ@SbATb?UdGhx[^qQh~WizVfvRQa=ZjFN^:jxUn|[iwV[lJgzZZmOM`DYlNk\cxO\nD_rDOe>Rb>Sa>Uԝ|dw?Ri?McNI[M]kZQ`CIVbrXThLI_9\pK]nJ[mGUe@YiBfuLy]ixM[pEb{QayUZqTVnJ[uH[vC]uC[sAJc;csO\jG}cq}WapGl|UarNViKJ]?cvXOc@`tQObB\lRYgNbpVWhFfxRcxQXnHA[6SmHNg@J[9N\BWcOLXDLX@eqMi}ci]P]L]nLarPLYEbm\Q]GQ_ESbEdsVl|afv\_oUjl_r|jwwu\qqWoAW3UnNUnQSgNK]CP`EFV9UfFO`>XjDOeAeyVVfLQ`I\mI`uLTmF]xMH^7Pf?YoILb>`vPYoHNe;bwNNc:L]9XhDdtP}z~g|jejSqyaZdKS]DisZVcIdqU[eMOUG`dV`bT_dM[dGVcEo}cSaJYeMY_EQP;LHbiJTX=Z[KZXL]`EjpL]hH_mIly[[eLXbIS]D`jQZdKYcJfpW]gN_bEgfHrqS`HQ GQ(R>R@FRNRVR(/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/Sunday_seurat.tiffCreated with The GIMPHH HHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/bezel_nib.tiff000066400000000000000000000043501475375552500241140ustar00rootroot00000000000000II*   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxEEE`xxxxxxxxxxxxxxxxxxv C~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/bezel_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/button_nib.tiff000066400000000000000000000043501475375552500243260ustar00rootroot00000000000000II*   {y{EEE`{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{v D~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/button_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/centeralign_nib.tiff000066400000000000000000000043561475375552500253140ustar00rootroot00000000000000II*haah   v J~@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/centeralign_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/date_formatter.tiff000066400000000000000000000133721475375552500251670ustar00rootroot00000000000000II*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsssususjususjussussusu{suu{suu{sussusususususuu{susususssubesuJLJsussususJLJJLJsusuJLJJLJJLJsusJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJuJLJJLJJLJJLJsJLJJLJJLJJLJuJLJJLJJLJJLJJLJJLJJLJJLJusJLJJLJJLJJLJsuJLJJLJJLJJLJsu{sJLJJLJJLJJLJusuJLJJLJJLJJLJsusJLJJLJJLJJLJusJLJJLJJLJJLJsu{JLJJLJJLJJLJus)()JLJJLJJLJJLJsu)()JLJJLJJLJJLJ)())()JLJJLJJLJJLJsuu{su)())())())())())())())())())())())())())())())())())())())())())())())())())())())())())())())())()JLJJLJJLJJLJjussuJLJJLJJLJJLJsususuJLJJLJJLJJLJsusususuJLJJLJJLJJLJsuu{susususJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJJLJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++ H@(/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/date_formatter.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconAbove_nib.tiff000066400000000000000000000043541475375552500247240ustar00rootroot00000000000000II*$$$0      HHH`    v G~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconabove_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconBelow_nib.tiff000066400000000000000000000043541475375552500247400ustar00rootroot00000000000000II*      HHH`  v G~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconbelow_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconBottomLeft_nib.tiff000066400000000000000000000043601475375552500257440ustar00rootroot00000000000000II* DDD`v L~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconBottomLeft_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconBottomRight_nib.tiff000066400000000000000000000043621475375552500261310ustar00rootroot00000000000000II* DDD`v M~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconBottomRight_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconBottom_nib.tiff000066400000000000000000000043541475375552500251340ustar00rootroot00000000000000II*  DDD`v H~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconBottom_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconCenterLeft_nib.tiff000066400000000000000000000043601475375552500257200ustar00rootroot00000000000000II* DDD`v L~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconCenterLeft_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconCenterRight_nib.tiff000066400000000000000000000043621475375552500261050ustar00rootroot00000000000000II* DDD`v M~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconCenterRight_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconCenter_nib.tiff000066400000000000000000000043541475375552500251100ustar00rootroot00000000000000II*  DDD`v H~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconCenter_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconLeft_nib.tiff000066400000000000000000000043521475375552500245600ustar00rootroot00000000000000II*      HHH`  v F~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconLeft_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconOnly_nib.tiff000066400000000000000000000043521475375552500246070ustar00rootroot00000000000000II*    GGG` v F~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconOnly_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconRight_nib.tiff000066400000000000000000000043541475375552500247450ustar00rootroot00000000000000II*       HHH` v G~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconRight_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconTopLeft_nib.tiff000066400000000000000000000043561475375552500252470ustar00rootroot00000000000000II*  DDD`v I~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconTopLeft_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconTopRight_nib.tiff000066400000000000000000000043021475375552500254210ustar00rootroot00000000000000II* DDD`v ~@(RImages/iconTopRight_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/iconTop_nib.tiff000066400000000000000000000043521475375552500244300ustar00rootroot00000000000000II*  DDD`v E~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconTop_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/justifyalign_nib.tiff000066400000000000000000000043601475375552500255240ustar00rootroot00000000000000II*   ahha   v K~@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/justifyalign_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/leftalign_nib.tiff000066400000000000000000000043541475375552500247640ustar00rootroot00000000000000II*   ahv H~@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/leftalign_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/line_nib.tiff000066400000000000000000000043461475375552500237470ustar00rootroot00000000000000II*   EEE`v B~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/line_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/naturalalign_nib.tiff000066400000000000000000000043601475375552500254750ustar00rootroot00000000000000II*    v K~@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/naturalalign_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/noBorder_nib.tiff000066400000000000000000000043521475375552500245670ustar00rootroot00000000000000II*   FFF`   v F~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/noBorder_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/number_formatter.tiff000066400000000000000000000133741475375552500255440ustar00rootroot00000000000000II*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxÇxxxxxxÇxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxҥxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxåxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxҥxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxҴxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxÇxxxxxxxxxxxxxxxxxxxxxÇxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx𥥥xxxxxxxxxxxxᇇxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxҴxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx𴴴xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx҇xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxҴᇇxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++ J@(/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/number_formatter.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/photoframe_nib.tiff000066400000000000000000000043541475375552500251630ustar00rootroot00000000000000II*   {y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{EEE`{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{v H~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/photoframe_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/ridge_nib.tiff000066400000000000000000000043501475375552500241050ustar00rootroot00000000000000II*   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxEEE`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxv C~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/ridge_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/rightalign_nib.tiff000066400000000000000000000043561475375552500251510ustar00rootroot00000000000000II*ha   v I~@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/rightalign_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/shortbutton_nib.tiff000066400000000000000000000043561475375552500254140ustar00rootroot00000000000000II*  DDD`"bab{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{{y{v J~@(R/home/heron/Development/gnustep/dev-apps/Gorm/Images/shortbutton_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/tabbot_nib.tiff000066400000000000000000000042641475375552500242720ustar00rootroot00000000000000II*  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxDDD`xxxxxxxxxxxxxxxxxxxxxxxxxxxv ~@(Rtabbot_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/tabtop_nib.tiff000066400000000000000000000042641475375552500243100ustar00rootroot00000000000000II* xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxDDD`xxxxxxxxxxxxxxxxxxv ~@(Rtabtop_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/Images/titleOnly_nib.tiff000066400000000000000000000043521475375552500250000ustar00rootroot00000000000000II*    HHH`   v F~@(R/misc/applications/gnustep/cvs/dev-apps/Gorm/Images/iconOnly_nib.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/Applications/Gorm/NEWS000066400000000000000000000641701475375552500206110ustar00rootroot000000000000001 Noteworthy changes in version '1.3.1' ======================================= * Fix issue with cells appearing in top level editor * Make nibs read only since saving is unstable * Add XIB reading so that they can be loaded by Gorm * Add storyboard file to list of supported files so that an icon is displayed, does not support reading yet. * Fix testing model mode * Bug fixes in GormClassManager, GormDocument, etc. 2 Noteworthy changes in version '1.2.28' ======================================== * Improved NSScrollView handling. * Added NSMatrix to Group menu to make it easier to create NSMatrix objects * Improved inspector for NSMatrix. Added ability to add rows/columns * Fixed NSMatrix selection problems when grouped in an NSScrollView * Fixes and other improvements to inspectors. Corrected issue where Gorm's menu stays present during testing mode. 3 Noteworthy changes in version '1.2.26' ======================================== * Refactoring of palettes by Sergii Stoian to correct usability issues in Gorm. * Refactoring of handling and rearrangment of controls in inspectors for usuability. * Stability fixes to make Gorm easier to use. * Autosizing of views corrected in many inspectors * Improvements in error handling. 4 Noteworthy changes in version '1.2.24' ======================================== * Fix for issue where Gorm was referencing private variables. This caused a crash when built with clang. 5 Noteworthy changes in version '1.2.23' ======================================== * Fix for issue where NSPanel was being saved as an NSWindow in some cases. 6 Noteworthy changes in version '1.2.22' ======================================== * Fix for bug#45040: Fix allows Gorm custom class functionality to work normally on OpenBSD/NetBSD/FreeBSD. * Fixes for Solaris * Memory leak fixes. * Objective-C parser improvements. 7 Noteworthy changes in version '1.2.20' ======================================== * Bug fixes #28643, #32827 * Corrected issues with updating document when there is a change. * Add cells as objects to the document so they can be properly edited. * Changes to prevent recursive frame change notifications. 8 Noteworthy changes in version '1.2.18' ======================================== * Code cleanup, removal of warnings when building with clang. * Removal of use of call to objc_poseAs(..) which was preventing building with newer runtimes. * Stability improvements. 9 Noteworthy changes in version '1.2.16' ======================================== * XIB reading. * Bug fixes for standalone views. * Stability changes. 10 Noteworthy changes in version '1.2.12' ========================================= Requires: gnustep-base-1.20.0, gnustep-gui-0.18.0. Reason: Parts of the runtime which Gorm used were refactored and it was necessary to make corresponding changes in Gorm to use it. * Correction for bugs #27295, 28643, 29085. * Added a DO server which allows modification of internal data structures using a simple interface. * Tooltips now show the object name and the object type for informational purposes. * Opens default document when using NSWindows95InterfaceStyle. 11 Noteworthy changes in version '1.2.10' ========================================= * Correction for bug #25401 * Correction for some nib loading issues. * Limited support for standalone views. * Fixes for various bugs. 12 Noteworthy changes in version '1.2.8' ======================================== Requires: gnustep-gui-0.16.0. It will not compile without this version of the library. Reason: Nib and Gorm loading were moved to a more sensible file structure. Additionally, Nib loading was refactored. * Correction for bug#25001. * Correction for bug#25111. * Fixes for nib encoding to use the proper template class instances. * Changes to use new headers. 13 Noteworthy changes in version '1.2.6' ======================================== * Corrections to allow Gorm to build and run properly on the Darwin operating system. * Corrected sizing of Controls Palette. * Added preliminary support for IBPlugin API. * Added preferences panel to add plugins dynamically. * Moved load/save logic for gorm, gmodel, and nib to plugins. This change should allow plugins for virtually any format to be read/written by Gorm. * Correction for bug#24146, bug#23889. 14 Noteworthy changes in version '1.2.4' ======================================== Requires: gnustep-gui-0.13.2. Reason: Due to changes in popupbutton controller logic. * Corrected bug#'s 19640, 21845, 19792, 15637, 17892, 18171. * Added error panel to show the detected inconsistencies in a file. * Added preference setting to turn on or off the gorm file repair logic. * Added capability to repair logic to fix window level issue. * Added ruler switch to scroll view inspector. 15 Noteworthy changes in version '1.2.2' ======================================== Requires: gnustep-gui-0.13.0. * Moved to GPLv3 * Added text field to NSTableColumn inspector to allow editing of table column title. * Corrected issue with selection. * Added button modifiers for special keys to button inspectors. * Corrected issue with loading of older gorm files. * Fix to allow Gorm's menus to be Mac-style, but not the one being edited. * Other miscellaneous bug corrections. 16 Noteworthy changes in version '1.2.1' ======================================== * Minor corrections to previous release. 17 Noteworthy changes in version '1.2.0' ======================================== * Corrections to some editors to not change selection if connection is in progress. * Force menu style to NSNextStepInterfaceStyle for editing purposes. * Correction for memory issue when closing document. * Minor bug fixes. 18 Noteworthy changes in version '1.1.0' ======================================== * Changed Gorm architecture to use NSDocument classes. * Abstracted model loading mechanism. This was done by implementing a set of "Loader" and "Builder" classes which handle filling in the data structures in Gorm and exporting them to external formats. * Implemented GormNibWrapperLoader and GormNibWrapperBuilder for reading and writing Cocoa NIB files. * Implemented GormGormWrapperLoader and GormGormWrapperBuilder for reading and writing GNUstep Gorm files * Implemented GormGModelWrapperLoader for reading GNUstep gmodel files. * Updated icon * A number of bugs have been addressed in this release. 19 Noteworthy changes in version '1.0.8' ======================================== This is a bugfix release. * Correction for bug#16587. * Correction for handling non-string identifiers in tableviews. 20 Noteworthy changes in version '1.0.6' ======================================== This is a bugfix release. * Entirely new icon set, for palettes, gorm, gmodel, nib and the application. * Replaced some of the images for the inspectors. * Corrected the following bugs since the last release: #16049, #16050, #15988, #16049, #15989, #15987, #15817, #15780, #15642, #15556. * Changed formatting in some of the inspectors so that they are easier to navigate. 21 Noteworthy changes in version '1.0.4' ======================================== This is a bugfix release. * Corrected some bug#15236 with window style mask settings. * Corrected bug#15236, which caused window fields in the inspector not to update when the field was being edited and a new window is selected. * Corrected bug #15178. * Corrected problem with standalone views 22 Noteworthy changes in version '1.0.2' ======================================== This is a bugfix release. * Fixed some bugs with table column selection. * Corrected a minor problem in the custom class inspector. 23 Noteworthy changes in version '1.0.0' ======================================== PLEASE NOTE: This version of Gorm requires base 1.11.1 and gui 0.10.1 to be installed (gnustep-startup-0.13.0). * All inspectors are now modeled in .gorm files. * Added autosizing to form attributes inspector. * Utilize and maintain parent/child data structure more pervasively * Reorganized code in palettes for cleaner implementation. * Removed code to check for user bundles, since bugs in Camaelon which prompted those changes were fixed long ago. * Added documentation to GormCore 24 Noteworthy changes in version '0.11.0' ========================================= * Improved implementation of canSubstituteForClass: the default implementation of this method tests the classes to see if initWithCoder: or encodeWithCoder: is implemented on a subclass to determine automatically if that class has the same encoding signature as the original class, if it does, it can be substituted. * Improved handling of classes which use cell classes in the custom class inspector. The inspector now autmatically replaces the cell class with the appropriate one when the user selects a given subclass. * Browser based class editor in document panel. This interface is more like the one on OSX. The user now has a choice in preferences to determine which view they would like to use. * Translation tools. The Document->Translate menu allows the user to export string and import strings in the strings format, so that someone can easily translate just the strings in the file and doesn't need to directly edit anything in Gorm. The strings file can then be loaded back into Gorm and all of the relevant strings are updated. * Alignment tools. In the new Layout menu there are options to align views, center views, bring views to front or push them to the back of the view layers. * Implementation of IBViewResourceDraggingDelegate. This allows updating of the pull down in the inspectors panel dynamically. It requires the developer of a palette to implement some code to enable this, as on OSX. * Lots of bugfixes and usability changes are also included in this release. 25 Noteworthy changes in version '0.9.10' ========================================= * Gorm now has a full implementation of canSubstituteForClass: which is used to determine if a class can be substituted in the custom class inspector. This allows classes added in palettes to say whether or not they can be used as a subsitute for a kit class. * Better separation of Gorm into libraries. As well as the ability to compile on windows with a simple: "make install" * Implementation of IBResourceManager class. This class is used by palettes to register drag types to be considered by the top level editors in the document window: object, sound, image, class. * Gorm now is able to switch views in the document window when you drag a file into it. If it's an image it will switch to the image view, if it's a sound, the sound view, an object the object view etc or if it's a class (a .h file) it will switch to the classes view. * Drag and drop parsing of header files (if you hadn't gathered from the previous item). * Better support for standalone views. while the user cannot instantiate from the classes view (there were too many problems with this approach). They can now drag any view from the palette into the objects view and have it work. * A myriad of bug fixes. 26 Noteworthy changes in version '0.9.2' ======================================== NOTE: This is mainly a bugfix release. * Some improvements to the procedure for removing connections. * Corrected various issues with header parsing. * Now closes windows which were opened during interface testing such as font panels, info panels, etc. * Minor corrections to background color for a number of inspectors. * Improvements to gmodel importation. * Better detection of when the user is utilizing a user bundle. Gorm will now warn the user with a panel. * Various improvements in documentation 27 Noteworthy changes in version '0.9.0' ======================================== * Images/Sounds can now be dragged into a matrix cell. * Fully implemented date and number formatter inspectors (these classes still need work in GUI). * Added warning panel if the user attempts to edit a .gorm file created with a newer version of Gorm * Modified data.classes format so that only those actions specifically added to FirstResponder are listed. * Greatly improved gmodel importation. (experimental) * It's now possible to add methods to classes which are not custom. This allows the user to add actions which may have been added to those classes by categories. * Completely new header parser implemented. * Improved cut/paste. It's now possible to use cut/paste from almost anywhere. The class editor now fully supports it. * Improved implementation of some of the InterfaceBuilder framework classes. * Object editor will now remove all instances of a class that has been deleted from the class editor. * The class inspector and the classes view will now apply stricter rules to names of actions and outlets to ensure that they are properly entered. * All inspectors work perfectly with customized colors. * Fixed a number of bugs. 28 Noteworthy changes in version '0.8.0' ======================================== PLEASE NOTE: It is important for this release that you upgrade to Gorm 0.8.0 when using Gorm with the new GNUstep libraries (base-1.10.0 and gui-0.9.4). This version of Gorm contains some features which are reliant on changes made in those versions of the libraries. It is stated in Gorm's documentation (the Gorm.texi file) that this is required, but I felt it important enough to also mention it here so that it is known beyond a reasonable doubt. * New gorm file version. * Full custom palette support * Palette preferences panel to allow the user to configure palettes to load * Experimental: Standalone views. This feature is to allow the use of a view without the need of a containing window. This allows developers to treat these views as they would any other top level object in the .gorm file. This is experimental functionality. * Improved NSTableColumn inspector. The new inspector allows the user to change the data cell used for a given column. This allows the user to select from a list of cell subclasses and set the appropriate custom or non-custom one they want to appear in that column of the table. * Improved layout of some of the inspectors. * Removed old class parser. The parser was somewhat buggy and was actually causing some issues. A new parser will be available in the next version of Gorm. For now users will need to use the class inspector or the outline view to enter classes into Gorm. * Experimental: "File" section. This is essentially a per-file preference which allows the user to control which version of GNUstep a given file will be compatible with. It also lists the potential compatibility issues with the selected version. * Improved controls palette. New items for some of the standard font replace the old "Title" widget which was a System-14 font. The new widgets use a selection of the standard System font to allow the user to easily build a gui using these and reducing the amount of time the user needs to spend fiddling with the font panel. 29 Noteworthy changes in version '0.7.7' ======================================== * Important bugfixes in editor classes. * Rearranged some of the editor classes to be in the palettes which contain the classes they are responsible for editing (GormButtonEditor & GormTabViewEditor). * Image and Sound editors will now display system default images or sounds if they are available. * Document window now uses an NSToolbar (experimental). * Improved the layout of some of the inspectors. * Corrected some minor issues in the inspectors * Added code to allow NSTableView and NSOutlineView to show some data during testing * Gorm will now show an alert panel when a model fails to load or test properly. 30 Noteworthy changes in version '0.7.6' ======================================== This release is mainly a bugfix release for 0.7.5. * Improved .gmodel support * Corrections to previous repair feature. * Important bugfixes for Menu editing. * Important bugfixes for class inspector. 31 Noteworthy changes in version '0.7.5' ======================================== * The 'reparent' feature in the class inspector. This allows the user to change the class hierarchy from within Gorm. * Some important bugfixes * a property 'GormRepairFileOnLoad' (untested) which should repaire old .gorm files... It is HIGHLY recommended that Gorm not be run with this on constantly and that you back up any files which you want to repair before opening them with this option turned on. * A shelf inspector in prefs that lets you expand the size of the names in the object view.. * Support for NSFontManager * A way to restore a complete NSMenu if it's deleted (a new palette entry for NSMenu, not just an item) 32 Noteworthy changes in version '0.6.0' ======================================== * Several major bugs corrected. * Clarified some of the inspectors * Menu items are now properly enabled/disabled when appropriate * More descriptive title displayed when a class is being edited. 33 Noteworthy changes in version '0.5.0' ======================================== * Enabled defer in NSWindow inspector. * Added code to the connection inspector to prevent erroneous connections. * Added support for upgrading of old .gorm files using the older template mechanism * Grouping with an NSSplitView now operates using the relative positions of the views in the window. * Custom Class inspector now shows all subclasses, not just direct custom subclasses. * Bug fixes, eliminated memory leak, code cleanup, etc. 34 Noteworthy changes in version '0.4.0' ======================================== * New Menu and Menu Item inspectors. * User can now specify the Services and Windows menus in the menu inspector. * User can specify a non-custom subclass as well as a custom one to replace the class when the .gorm is unarchived. This can be used to turn a NSTextField into NSSecureTextField and etc. * New set name panel. * New switch control on the font panel to allow the user to specify if a font is encoded with its default size or not. * Added NSStepper and NSStepperCell to the class list to allow creation of custom subclasses. * Windows and Services menus now function correctly. 35 Noteworthy changes in version '0.3.1' ======================================== * New custom class system. * Images now persist correctly when added to a button or view. * Fixed DND * Various bugfixes 36 Noteworthy changes in version '0.3.0' ======================================== * Preferences added. * User can now enable and disable guidlines for easier editing. * Refactored code into GormLib which is a clone of the InterfaceBuilder framework. This facilitates creating palettes and inspectors outside of Gorm. * Added class inspector for easier editing of classes. This gives the user the option to use either the outline view or the inspector to edit new classes. * Added inspectors for the following: NSScrollView, NSProgressIndicator, NSColorWell, GormImageInspector (for images added to .gorm files). * Improved look of NSTabView inspector. * Removed all warnings from the code. * various bug fixes. 37 Noteworthy changes in version '0.2.5'. ========================================= Many fixes and improvements to make the app work better. * Better parsing of headers * Interface code redone as gorm files. * Re-add multiple selection via mouse drag. 38 Noteworthy changes in version '0.2.0' snapshot. ================================================== Gobs of improvements, mostly due to the hard work of Gregory John Casamento and Pierre-Yves Rivaille. Thanks guys! * Custom class support/translations implemented. * Added NSScrollView, NSPopupButton, NSOutlineView, NSTableView editing. * Improved test mode support. * Improved drag n' drop support on many items. * Intelligent placement hints. * Read gmodel files. * More inspectors. * Sound and Image support. * gorm files were changed to directory wrappers for more flexibility. 39 Noteworthy changes in version '0.1.0' ======================================== * load/parses class files for entry into class list. * Pallete/inspectors for date and number formatters * Pallete/Inspectors for browsers and tableViews * NSStepper, NSForm, NSPopupButton pallete item and inspector * Most inspectors greatly improved and fleshed out. * Custom views added. * Ability to edit cells in a matrix. * Ability to change the font of some objects. 40 Noteworthy changes in version '0.0.3' ======================================== * Create stub .m and .h files from new classes * Works better with ProjectCenter. * Handle Ctrl-Drag and Alt-Drag of objects - automatic conversion to matrices and/or increase decrease rows and cols. * Edit NSForms titles in place. * Edit NSBoxes and add subviews. * Support for custom objects. 41 Noteworthy changes in version '0.0.2' ======================================== * Add popup and pulldown menu controls * Menu support * More inspectors * Some support for connections * Much more fleshed out - too numerous to mention. 42 Noteworthy changes in version '0.0.1' ======================================== * 8th December 1999 * Save/Load 'nib' documents (binary archived data) This works so far as it can be tested - but that's just archives containing windows or panels so far. * Load palettes Loading of palettes works. You can load palettes from the 'Tools' menu. Gorm automatically loads all the palettes from its Resources directory. * Basic framework So far, the app provides a basic framework that needs fleshing out. * It has a palettes manager object that allows you to select a palette and drag items from the palette into your document. * It has a special per-document editor object, which keeps track of a matrix of icons representing the top-level objects in the document. * It has an inspector manager class, which updates the inspector panel when the selected object is changed by an editor. * It has special inspectors for handling an empty selection or a multiple selection. * Palettes Four palettes (three of which are empty at present) are built and installed in the apps Resources directory. The Window palette is more fully fleshed out than the other palettes. It permits windows and panels to be created in Gorm. If provides the start of a window attributes inspector. * 18 December 1999 * You can drag views from a palette into a window or panel. * You can select views in a window by clicking on them, shift-clicking (for multiple selection), or click-drag on the window background to select views in a box. * You can delete/cut/copy/paste views betwen windows. * You can move views in a window by clicking on them and dragging. * You can resize views by clicking on their knobs and dragging. * You can control-drag to mark source and destination views for a connection. * Next task - inspectors. The connection inspector needs to be implemented to complete the process of establishing connections. The size inspector needs to be implemented to set autosizing parameters for a view. Once these are done, the object editor needs to be made to support connections so that we can connect between objects other than views, then we need to write a menu editor. * 22 December 1999 * Connections inspector is now working - but it needs some effort to tidy it up. * Class info (outlets and actions) is specified in 'ClassInformation.plist' and needs to be present so that the app knows what outlets/actions an object has (and therefore what connections can be made). * The view size inspector is working - allowing you to set the size of the subviews within a window. * The attributes inspector for 'FilesOwner' is working, so you can define the class of the files owner (it defaults to NSApplication). * There is a crude panel for setting the name of the selected object. * I've created a couple of new images and got rid of the two NeXT images that were lurking in there. * There is a Testing directory, with a GormTest application that lets you load a nib for testing - it assumes that the nib will set its FilesOwners delegate to point to a window, and makes that window the key window ... * 23 December 1999 Last work before christmas ... Various bits of tidying up plus - Added an evil hack of a generic attributes inspector ... This looks through all the methods of the selected object to find those taking a single argument and beginning with 'set'. It makes all these setting methods (whose argument is a simple scalar type or an object) available for you to invoke from the inspector panel. This makes it possible to set pretty much any attribute of any object, but you do need to have the GNUstep header files to hand, so you can tell what numeric values to enter to achieve a desired result. apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/000077500000000000000000000000001475375552500216635ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/000077500000000000000000000000001475375552500230325ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GNUmakefile000066400000000000000000000030411475375552500251020ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make PALETTE_NAME = 0Menus 0Menus_PALETTE_ICON = MenusPalette 0Menus_PRINCIPAL_CLASS = MenusPalette 0Menus_OBJC_FILES = \ GormMenuEditor.m \ GormNSMenu.m \ GormNSMenuView.m \ GormMenuItemAttributesInspector.m\ GormMenuAttributesInspector.m\ MenusPalette.m \ inspectors.m 0Menus_RESOURCE_FILES = MenusPalette.tiff \ GormMenuDrag.tiff \ GormMenuAttributesInspector.gorm \ GormMenuItemAttributesInspector.gorm \ palette.table 0Menus_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/palette.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GNUmakefile.preamble000066400000000000000000000013041475375552500266700ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../../.. ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework $(PALETTE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuAttributesInspector.gorm/000077500000000000000000000000001475375552500314645ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuAttributesInspector.gorm/data.classes000066400000000000000000000005311475375552500337530ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "setObject:" ); Super = NSObject; }; GormMenuAttributesInspector = { Actions = ( "setObject:" ); Outlets = ( titleText, menuType, autoenable ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuAttributesInspector.gorm/data.info000066400000000000000000000002701475375552500332510ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuAttributesInspector.gorm/objects.gorm000066400000000000000000000377021475375552500340140ustar00rootroot00000000000000GNUstep archive000f4240:00000021:0000009a:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @h @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @6 @T @l@ @m  @l@ @mJ-0 &0 %  @l@ @m  @l@ @mJ0 &0 % @ @a @j @V@  @j @V@J0 &0 % @ @ @h @O  @h @OJ0 &01 NSTextField1 NSControl% @C @@ @b @4  @b @4J 0 &%01NSTextFieldCell1 NSActionCell1NSCell0&01NSFont%&&&&&&JJ &&&&&&&I01NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% @ @@ @> @2  @> @2J0 &%00&%Title:&&&&&&JJ &&&&&&&I01NSButton% @W @ @W @0  @W @0J%0 &%0 1 NSButtonCell0!& % Autoenable0"1NSImage0#1NSMutableString&%GSSwitch&&&&&&JJ&&&&&&&I0$0%&%GSSwitchSelected&&& &&0&0'&%Menu Attributes&&&&&&JJ &&&&&&&I0(0)&% System0*&% windowBackgroundColor @ @%%0+ % @ @( @j @]  @j @]J0, &0- % @ @ @h @W@  @h @W@J0. &0/1NSMatrix% @A @ @_ @S  @_ @SJ00 &%01&&&&&&JJ&&&&&&&I% @_ @3 02)03&% controlBackgroundColor204& % NSButtonCell0506& % Windows Menu0708&%GSRadio&&&&&&JJ&&&&&&&I090:&%GSRadioSelected&&& &&%%0; &0<0=& % Windows Menu7&&&&&&JJ&&&&&&&I9&&& &&0>0?& % Services Menu7&&&&&&JJ&&&&&&&I9&&& &&0@0A&%Open Recent Menu7&&&&&&JJ&&&&&&&I9&&& &&0B0C& % Normal Menu7&&&&&&JJ&&&&&&&I9&&& &&<0D0E& % Menu Type&&&&&&JJ &&&&&&&I( @ @%%0F0G&% Title0H% A &&&&&&JJ&&&&&&& %%(0I&%Window0J&%NSMenu InspectorJ @* @Ç @|I0K 0L0M&% NSCalibratedWhiteColorSpace 0N &0O1NSBitmapImageRep1 NSImageRep0P&% NSDeviceRGBColorSpace @H @HII0I00Q1NSData&$$II*$[=T8J2R-!k[=U:K3xB-H'R-!k[=S7J2xB-H'/ ?[=S7I2xB-H'/ ?[=S7H0xB-H'/ ?[=R7I2xB-H'/ ?[=S7I0xB-H'/ ?[=R7I2xB-H'/ ?[=R7H0xB-H'/ ?[>X/!j:)H'/ ?D49  ?hft{y<;D ?hft}<;D ?<;D ?43:""""43:zzzzͱ""""EEEEEEEEEEEE43:555222t43:0?55hhhiiiyyyVVV777?43:~=0rdxxxUUU444?/17?43:5?0\Mzz{]]]QQQmmm_bn:9@5?0I>e]xxwvtsqpo}66<5?2A3QFA4H:|zzywutrqpbao++05?2@2@2A3B3C4E6}}|zxxwutrqpn}VT_=,, 5@2@3A3A3JdbqihvFEOQ-)Y)!W)`/$k3'q6*n4)l3'i2'f0&c/$`-$Y*!)5C4C4D4E6F7H7Ʀkkk)))LJRkjxihvhgu::B\/&[-$Y-$c/&l3'o4)l3'j2'g2&d0$a/$^-#X*!)5@2D4E6F7H7I8{{{[[[322QPZ^]jjhwhguQP[K33\-&W)_/$j3'm3'm4)j3'h2&d0&b/$_-#],#X*!)P'~>>ddd>>?87?4$$E)&_-#`0'_0&]/&^/&`/&`/&c0&j2'n3'k3'h2&d0$a/$^-#\,!Z,!X*!U)T))ttttttzzz;;;rqyjhwPPZ43:C@?w9,c2)b2)^,#_0&d2'g2'h2'k3)l3)l3)l3'l3'i2'f0&c/$_-#],#Z,!X*!W)T)S))rrr```FFF000mmm\[a<;CA)'^3,I::76v8,_-$b2'g2'l4)r7*s7*s7*w8,t7,q6*n4)k3'g2&d0$`-$],#[,!X*!W)U)S'S')YYY777XWcKJS|||SSS\2,KDD4I:I;A?>~>0b2)f2'p6*x:-y:-{;-x:-v9,s7*o4)l3'i2&f0&c/$_-#\,#Y*!W)T)S'R'S')TR^|z@?Gↄ\Zg<;CJJJm4)D4E6J;UIPEvI@q:/l4)m4)x:,};/{:-y:-w9,t7*q6*m4)j3'h2&c0&a/$]-#[,!X*!V)T)R'R'R')0/5?_^kCBJ43:?QQQ ^-#I:O>SBP?H7?2p6*s7*0|;/y:-p6*f0&d0&c/&`/$_-$]-#\,#T)!T)!T)!T)!T)!T)!T)!)))) ?h3'z;/T)!T)!T)!`/$`/$))))) ? 00$$R&   @ @p0R &0S &0T1NSMutableDictionary1 NSDictionary&0U& % ActionCell(0)10V&%View(0) 0W&%TextFieldCell(0)0X& % TextField10Y& % ButtonCell(2)>0Z&% NSOwner0[&%GormMenuAttributesInspector0\&%Box1+0]&%View(1) 0^&%TextFieldCell(1)0_& % TextField0`&%Matrix/0a& % ButtonCell(3)@0b& % ButtonCell(0) 0c&%View(2)-0d&%Button0e& % InspectorWin0f& % ButtonCell(4)B0g&%Box 0h&%Box(0)0i& % ButtonCell(1)<0j &0k1NSNibConnectore0l&% NSOwner0m_]0nX]0ogh0p\h0q1 NSNibOutletConnectorl_0r& % titleText0s _l0t&%delegate0u le0v&%window0wd]0x ld0y& % autoenable0z _d0{& % nextKeyView0| e_0}&%initialFirstResponder0~`c0 l`0&%menuType01!NSNibControlConnector`l0&%ok:0!dl0 d`0& % nextKeyView0 `_0h0Vh0]g0W_0!W0&% NSFirst0& % setObject:0^X0bd0c\0i`0Y`0a`0f`0U`0&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuAttributesInspector.h000066400000000000000000000027051475375552500306760ustar00rootroot00000000000000/* GormMenuAttributesInspector.m Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormMenuAttributesInspector_h_ #define INCLUDED_GormMenuAttributesInspector_h_ #include @class NSButton; @class NSMatrix; @class NSTextField; @interface GormMenuAttributesInspector : IBInspector { NSTextField *titleText; NSMatrix *menuType; NSButton *autoenable; } @end #endif /* INCLUDED_GormMenuAttributesInspector_h_ */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuAttributesInspector.m000066400000000000000000000101711475375552500306770ustar00rootroot00000000000000/* GormMenuAttributesInspector.m Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 Author: Gregory John Casamento Date: 2003 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormMenuAttributesInspector.h" #include "GormNSMenu.h" #define WINDOWSMENUTAG 0 #define SERVICESMENUTAG 1 #define RECENTDOCUMENTSMENUTAG 2 #define NORMALMENUTAG 3 @implementation GormMenuAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormMenuAttributesInspector" owner: self] == NO) { NSLog(@"Could not gorm GormMenuAttributesInspector"); return nil; } return self; } -(void) ok:(id) sender { if ( sender == titleText ) { [object setTitle:[titleText stringValue]]; } if ( sender == autoenable ) { BOOL flag; // look at the values passed back in the matrix. flag = ([autoenable state] == NSOnState) ? YES : NO; [object setAutoenablesItems: flag]; } else if ( sender == menuType ) { GormDocument *doc = (GormDocument *)[(id)[NSApp delegate] activeDocument]; int tag = [[menuType selectedCell] tag]; switch ( tag ) { case WINDOWSMENUTAG: [doc setWindowsMenu:object]; if ( [doc servicesMenu] == object ) [doc setServicesMenu: nil]; else if ( [doc recentDocumentsMenu] == object ) [doc setRecentDocumentsMenu: nil]; break; case SERVICESMENUTAG: [doc setServicesMenu: object]; if ( [doc windowsMenu] == object ) [doc setWindowsMenu: nil]; else if ( [doc recentDocumentsMenu] == object ) [doc setRecentDocumentsMenu: nil]; break; case NORMALMENUTAG: if ( [doc windowsMenu] == object ) [doc setWindowsMenu: nil]; if ( [doc servicesMenu] == object ) [doc setServicesMenu: nil]; break; case RECENTDOCUMENTSMENUTAG: [doc setRecentDocumentsMenu:object]; if ( [doc servicesMenu] == object ) [doc setServicesMenu: nil]; else if ( [doc windowsMenu] == object ) [doc setWindowsMenu: nil]; break; } } [super ok:sender]; } - (void) revert: (id)sender { GormDocument *doc; if ( object == nil ) return; doc = (GormDocument *)[(id)[NSApp delegate] activeDocument]; [titleText setStringValue: [object title]]; [autoenable setState: ([object realAutoenablesItems]?NSOnState:NSOffState)]; // set up the menu type matrix... if([doc windowsMenu] == object) { [menuType selectCellAtRow:WINDOWSMENUTAG column: 0]; } else if([doc servicesMenu] == object) { [menuType selectCellAtRow:SERVICESMENUTAG column: 0]; } else if([doc recentDocumentsMenu] == object) { [menuType selectCellAtRow:RECENTDOCUMENTSMENUTAG column: 0]; } else { [menuType selectCellAtRow:NORMALMENUTAG column: 0]; } } /* delegate method used for menu title */ - (void)controlTextDidChange:(NSNotification *)aNotification { GormDocument *doc = (GormDocument *)[(id)[NSApp delegate] activeDocument]; [object setTitle: [titleText stringValue]]; [doc touch]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuDrag.tiff000066400000000000000000000007141475375552500262350ustar00rootroot00000000000000MM* P8$ B`76 h@pJ)@8b GY^6UJeT.xDS9A2&q=iCUN屹|:c<4YJTT*5.%MU:VDlu]vh\nW;" P8$ B`76 ~@tD?шn3GRzK$ɥ2*S |+6L\cϨ4 D$tjLqKM(eBQԩUv_W` 00 (p ' 'apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuEditor.m000066400000000000000000000641601475375552500261170ustar00rootroot00000000000000/* GormMenuEditor.m * * Copyright (C) 2000 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 2000 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include /* * This method will allow us to check if the menu is * open, so that it can be conditionally closed. */ @interface NSMenu (GormMenuEditorAdditions) - (BOOL) isVisible; @end @implementation NSMenu (GormMenuEditorAdditions) - (BOOL) isVisible { return [[self window] isVisible]; } @end @interface GormMenuEditor : NSMenuView { id document; NSMenu *edited; id original; NSMenuView *rep; NSMutableArray *selection; id subeditor; BOOL isLinkSource; BOOL isClosed; NSPasteboard *dragPb; NSString *dragType; } - (BOOL) acceptsTypeFromArray: (NSArray*)types; - (BOOL) activate; - (id) initWithObject: (id)anObject inDocument: (id)aDocument; - (void) close; - (void) closeSubeditors; - (void) copySelection; - (void) deactivate; - (void) deleteSelection; - (id) document; - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f; - (NSDragOperation) draggingSourceOperationMaskForLocal: (BOOL)flag; - (id) editedObject; - (void) makeSelectionVisible: (BOOL)flag; - (id) openSubeditorForObject: (id)anObject; - (void) orderFront; - (void) pasteInSelection; - (void) resetObject: (id)anObject; - (void) selectObjects: (NSArray*)objects; - (void) validateEditing; - (BOOL) wantsSelection; - (NSWindow*) window; @end @interface GormMenuEditor (Private) - (NSEvent *) editTextField: view withEvent: (NSEvent *)theEvent; @end @implementation GormMenuEditor - (BOOL) acceptsFirstMouse: (NSEvent*)theEvent { return YES; } - (void) encodeWithCoder: (NSCoder*)aCoder { [NSException raise: NSInternalInconsistencyException format: @"Argh - encoding menu editor"]; } /* * Intercepting events in the view and handling them */ - (NSView*) hitTest: (NSPoint)loc { /* * We grab all events in the window. */ if ([super hitTest: loc] != nil) { return self; } return nil; } - (BOOL) resignFirstResponder { return NO; } - (void) rightMouseDown: (NSEvent*)theEvent { // Do nothing. We want to ignore when the right mouse button is pressed. } - (void) mouseDown: (NSEvent*)theEvent { NSPoint loc = [theEvent locationInWindow]; NSView *hit = [super hitTest: loc]; [[self window] makeMainWindow]; [[self window] makeFirstResponder: self]; if (hit == rep) { int pos = [rep indexOfItemAtPoint: loc]; if (pos >= 0) { NSMenuItem *item = (NSMenuItem *)[edited itemAtIndex: pos]; if ([theEvent clickCount] == 2) { id cell; NSTextField *tf; NSRect frame; [self makeSelectionVisible: NO]; [self selectObjects: [NSArray array]]; cell = [rep menuItemCellForItemAtIndex: pos]; tf = [[NSTextField alloc] initWithFrame: [self bounds]]; frame = (NSRect)[cell titleRectForBounds: [rep rectOfItemAtIndex: pos]]; NSDebugLog(@"cell %@ (%@)", cell, [cell stringValue]); frame.origin.y += 3; frame.size.height -= 5; frame.origin.x += 1; frame.size.width += 3; [tf setFrame: frame]; [tf setEditable: YES]; [tf setBezeled: NO]; [tf setBordered: NO]; [self addSubview: tf]; [tf setStringValue: [[cell menuItem] title]]; [self editTextField: tf withEvent: theEvent]; [[cell menuItem] setTitle: [tf stringValue]]; [tf removeFromSuperview]; RELEASE(tf); return; } [self makeSelectionVisible: NO]; if ([theEvent modifierFlags] & NSShiftKeyMask) { NSMutableArray *array; array = [NSMutableArray arrayWithArray: selection]; if ([array containsObject: item] == YES) { [array removeObject: item]; } else { [array addObject: item]; } [self selectObjects: array]; [self makeSelectionVisible: YES]; return; } [self selectObjects: [NSArray arrayWithObject: item]]; if ([theEvent modifierFlags] & NSControlKeyMask) { NSPoint dragPoint = [theEvent locationInWindow]; NSPasteboard *pb; NSString *name = [document nameForObject: item]; pb = [NSPasteboard pasteboardWithName: NSDragPboard]; [pb declareTypes: [NSArray arrayWithObject: GormLinkPboardType] owner: self]; [pb setString: name forType: GormLinkPboardType]; [[NSApp delegate] displayConnectionBetween: item and: nil]; [[NSApp delegate] startConnecting]; isLinkSource = YES; [self dragImage: [[NSApp delegate] linkImage] at: dragPoint offset: NSZeroSize event: theEvent pasteboard: pb source: self slideBack: YES]; isLinkSource = NO; } else { NSDate *future = [NSDate distantFuture]; unsigned eventMask; NSEvent *e; NSEventType eType; BOOL acceptsMouseMoved; NSRect frame = [rep innerRect]; float maxMouse = NSMaxY(frame); float minMouse = NSMinY(frame); NSPoint lastPoint = loc; NSPoint point = loc; NSRect lastRect = [rep rectOfItemAtIndex: pos]; id cell = [rep menuItemCellForItemAtIndex: pos]; int newPos; eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask | NSMouseMovedMask | NSPeriodicMask; [[self window] setAcceptsMouseMovedEvents: YES]; /* * Save window state info. */ acceptsMouseMoved = [[self window] acceptsMouseMovedEvents]; [rep lockFocus]; /* * Track mouse movements until left mouse up. * While we keep track of all mouse movements, * we only act on a movement when a periodic * event arives (every 20th of a second) * in order to avoid excessive amounts of drawing. */ [NSEvent startPeriodicEventsAfterDelay: 0.1 withPeriod: 0.05]; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; while (eType != NSLeftMouseUp) { if (eType != NSPeriodic) { point = [e locationInWindow]; } else if (NSEqualPoints(point, lastPoint) == NO) { /* * Limit mouse movement. */ point.x = NSMinX(frame); if (point.y < minMouse) point.y = minMouse; if (point.y > maxMouse) point.y = maxMouse; if (NSEqualPoints(point, lastPoint) == NO) { [[self window] disableFlushWindow]; /* * Redraw cells under area being changed. */ [rep drawRect: lastRect]; /* * Update location. */ lastRect.origin.y += point.y - lastPoint.y; lastPoint = point; /* * Draw highlighted item being moved. */ [cell highlight: YES withFrame: lastRect inView: rep]; [cell setHighlighted: NO]; /* * Flush any drawing performed for this event. */ [[self window] enableFlushWindow]; [[self window] flushWindow]; } } e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; } [NSEvent stopPeriodicEvents]; [rep drawRect: lastRect]; [rep unlockFocus]; newPos = [rep indexOfItemAtPoint: point]; if (newPos < pos) { NSMenuItem *item = (NSMenuItem *)[edited itemAtIndex: pos]; RETAIN(item); if (newPos < 0) newPos = 0; [edited removeItemAtIndex: pos]; [edited insertItem: item atIndex: newPos]; RELEASE(item); } else if (newPos > pos) { NSMenuItem *item = (NSMenuItem *)[edited itemAtIndex: pos]; RETAIN(item); [edited removeItemAtIndex: pos]; [edited insertItem: item atIndex: newPos]; RELEASE(item); } [edited sizeToFit]; [edited display]; /* * Restore state to what it was on entry. */ [[self window] setAcceptsMouseMovedEvents: acceptsMouseMoved]; } [self makeSelectionVisible: YES]; } } else { /* * The mouse down wasn't over the menu items, so we just let the menu * handle it - but make sure the menu is selected in the editor first. */ [[document parentEditorForEditor: self] selectObjects: [NSArray arrayWithObject: edited]]; [hit mouseDown: theEvent]; } } - (BOOL) acceptsTypeFromArray: (NSArray*)types { /* * A menu editor can accept menu items pasted in to it. */ return [types containsObject: IBMenuPboardType]; } - (BOOL) activate { if (original == nil) { NSWindow *w; NSEnumerator *enumerator; NSView *sub; NSMenuItem *item; // // Swap ourselves in as a replacement for the original window // content view. // w = [rep window]; original = RETAIN([w contentView]); [self setFrame: [original frame]]; enumerator = [[original subviews] objectEnumerator]; while ((sub = [enumerator nextObject]) != nil) { [self addSubview: sub]; } [w setContentView: self]; // // Line up submenu with parent menu. // item = [document parentOfObject: edited]; if (item != nil && [item isKindOfClass: [NSMenuItem class]]) { NSMenu *parent = [document parentOfObject: item]; NSRect frame = [[[parent menuRepresentation] window] frame]; NSPoint tl; tl = frame.origin; tl.x += frame.size.width; tl.y += frame.size.height; // if it's the main menu, display it when activated, otherwise don't. if([[document nameForObject: edited] isEqual: @"NSMenu"]) { [edited sizeToFit]; [[[edited menuRepresentation] window] setFrameTopLeftPoint: tl]; } } return NO; } return YES; } - (void) close { isClosed = YES; [[NSNotificationCenter defaultCenter] removeObserver: self]; if ([(id)[NSApp delegate] selectionOwner] == self) { [document resignSelectionForEditor: self]; } [self closeSubeditors]; [self deactivate]; // if it's visible, close it. if([edited isVisible]) { [edited close]; } [document editor: self didCloseForObject: edited]; } - (void) closeSubeditors { if (subeditor != nil) { [subeditor close]; DESTROY(subeditor); } } - (void) copySelection { if ([selection count] > 0) { [document copyObjects: selection type: IBMenuPboardType toPasteboard: [NSPasteboard generalPasteboard]]; } } - (void) deactivate { if (original != nil) { NSEnumerator *enumerator; NSView *sub; RETAIN(self); /* * Swap ourselves out and the original window content view in. */ [self makeSelectionVisible: NO]; [original setFrame: [self frame]]; [[rep window] setContentView: original]; enumerator = [[self subviews] objectEnumerator]; while ((sub = [enumerator nextObject]) != nil) { [original addSubview: sub]; } DESTROY(original); RELEASE(self); } } - (void) dealloc { if (isClosed == NO) { [self close]; } RELEASE(edited); RELEASE(selection); RELEASE(subeditor); [super dealloc]; } - (void) deleteSelection { if ([selection count] > 0) { NSArray *s = [NSArray arrayWithArray: selection]; NSEnumerator *e = [s objectEnumerator]; NSMenuItem *i; NSArray *d = nil; [self makeSelectionVisible: NO]; [self selectObjects: [NSArray array]]; // find all relavent objects. Remove them from the nameTable. d = findAllSubmenus( s ); [document detachObjects: d]; // remove the items from the menu... while ((i = [e nextObject]) != nil && [edited numberOfItems] > 0) { [edited removeItem: i]; } [edited sizeToFit]; [edited display]; } } /* * Dragging source protocol implementation */ - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f { /* * FIXME - handle this. * Notification that a drag failed/succeeded. */ } - (NSDragOperation) draggingSourceOperationMaskForLocal: (BOOL)flag { if (isLinkSource == YES) return NSDragOperationLink; else return NSDragOperationCopy; } - (NSDragOperation) draggingEntered: (id)sender { NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: IBMenuPboardType] == YES) { dragType = IBMenuPboardType; } else if ([types containsObject: GormLinkPboardType] == YES) { dragType = GormLinkPboardType; } else { dragType = nil; } return [self draggingUpdated: sender]; } - (NSDragOperation) draggingUpdated: (id)sender { if (dragType == IBMenuPboardType) { return NSDragOperationCopy; } else if (dragType == GormLinkPboardType) { NSPoint loc = [sender draggingLocation]; int pos = [rep indexOfItemAtPoint: loc]; id item = nil; if (pos >= 0) { item = [edited itemAtIndex: pos]; } if (item == [[NSApp delegate] connectSource]) { item = nil; } [[NSApp delegate] displayConnectionBetween: [[NSApp delegate] connectSource] and: item]; return NSDragOperationLink; } else { return 0; } } - (void) draggingExited: (id)sender { if (dragType == GormLinkPboardType) { [[NSApp delegate] displayConnectionBetween: [[NSApp delegate] connectSource] and: nil]; } } - (void) drawSelection { } - (id) document { return document; } - (id) editedObject { return edited; } // find all subitems for the given items... void _attachAllSubmenus(id menu, NSArray *items, id document) { NSEnumerator *e = [items objectEnumerator]; NSString *name = [document nameForObject: menu]; id i = nil; // if it's the main menu, display it... otherwise.. if([name isEqual: @"NSMenu"]) { [menu display]; } while((i = [e nextObject]) != nil) { [document attachObject: i toParent: menu]; if([i hasSubmenu]) { id submenu = [i submenu]; NSArray *submenuItems = [submenu itemArray]; [submenu setSupermenu: menu]; [document attachObject: submenu toParent: i]; _attachAllSubmenus(submenu, submenuItems, document); } } } void _attachAll(NSMenu *menu, id document) { NSArray *items = [menu itemArray]; _attachAllSubmenus(menu, items, document); } - (id) initWithObject: (id)anObject inDocument: (id)aDocument { self = [super init]; if(self != nil) { document = aDocument; ASSIGN(edited, anObject); selection = [[NSMutableArray alloc] init]; rep = [edited menuRepresentation]; /* * Permit views and connections to be dragged in to the window. */ [self registerForDraggedTypes: [NSArray arrayWithObjects: IBMenuPboardType, GormLinkPboardType, nil]]; /* * Make sure that all our menu items are attached in the document. */ _attachAll(edited, document); } return self; } - (void) makeSelectionVisible: (BOOL)flag { if (flag == NO) { if ([selection count] > 0) { NSEnumerator *enumerator = [selection objectEnumerator]; NSMenuItem *item; [[self window] disableFlushWindow]; [rep lockFocus]; while ((item = [enumerator nextObject]) != nil) { int pos = [edited indexOfItem: item]; id cell = [rep menuItemCellForItemAtIndex: pos]; NSRect rect = [rep rectOfItemAtIndex: pos]; [cell highlight: NO withFrame: rect inView: rep]; } [rep unlockFocus]; [[self window] enableFlushWindow]; [[self window] flushWindowIfNeeded]; } } else { if ([selection count] > 0) { NSEnumerator *enumerator = [selection objectEnumerator]; NSMenuItem *item; [[self window] disableFlushWindow]; [rep lockFocus]; while ((item = [enumerator nextObject]) != nil) { int pos = [edited indexOfItem: item]; id cell = [rep menuItemCellForItemAtIndex: pos]; NSRect rect = [rep rectOfItemAtIndex: pos]; [cell highlight: YES withFrame: rect inView: rep]; } [rep unlockFocus]; [[self window] enableFlushWindow]; [[self window] flushWindowIfNeeded]; } } } - (id) openSubeditorForObject: (id)anObject { return nil; } - (void) orderFront { [[edited window] orderFront: self]; } - (void) pasteInSelection { NSPasteboard *pb = [NSPasteboard generalPasteboard]; NSArray *items; NSEnumerator *enumerator; NSMenuItem *item; /* * Ask the document to get the copied items from the pasteboard and add * them to it's collection of known objects. */ items = [document pasteType: IBMenuPboardType fromPasteboard: pb parent: edited]; enumerator = [items objectEnumerator]; while ((item = [enumerator nextObject]) != nil) { if ([edited _ownedByPopUp]) { [item setOnStateImage: nil]; [item setMixedStateImage: nil]; } [edited addItem: item]; } [edited sizeToFit]; [edited display]; } - (BOOL) performDragOperation: (id)sender { NSRect f = [rep frame]; if (dragType == IBMenuPboardType) { NSPoint loc = [sender draggedImageLocation]; NSArray *items; NSEnumerator *enumerator; NSMenuItem *item; int pos; /* * Adjust location so that it lies within horizontal bounds, and so that * it appears about half an item higher than it is. That way, we treat * a drop in the lower half of an item as an insertion below it, and a * drop in the upper half as an insertion above it. */ if (loc.x < NSMinX(f)) loc.x = NSMinX(f); if (loc.x > NSMaxX(f)) loc.x = NSMaxX(f); loc.y += 10; pos = [rep indexOfItemAtPoint: loc] + 1; [self makeSelectionVisible: NO]; /* * Ask the document to get the dragged views from the pasteboard and add * them to it's collection of known objects. */ items = [document pasteType: IBMenuPboardType fromPasteboard: dragPb parent: edited]; // Test to see if the first item is a menu, if so reject the drag. If the // first item is a menu item, accept it. if([items count] > 0) { id itemZero = [items objectAtIndex: 0]; if([itemZero isKindOfClass: [NSMenu class]]) { return NO; } } // enumerate through the items and add them. enumerator = [items objectEnumerator]; while ((item = [enumerator nextObject]) != nil) { if ([edited _ownedByPopUp]) { NSDebugLog(@"owned by popup"); [item setOnStateImage: nil]; [item setMixedStateImage: nil]; // if the item has a submenu, reject the drag. if([item hasSubmenu]) { return NO; } } else NSDebugLog(@"not owned by popup"); [edited insertItem: item atIndex: pos++]; } [edited sizeToFit]; [edited display]; [self selectObjects: items]; [self makeSelectionVisible: YES]; } else if (dragType == GormLinkPboardType) { NSPoint loc = [sender draggingLocation]; int pos = [rep indexOfItemAtPoint: loc]; NSDebugLog(@"Link at index: %d (%@)", pos, NSStringFromPoint(loc)); if (pos >= 0) { id item = [edited itemAtIndex: pos]; [[NSApp delegate] displayConnectionBetween: [[NSApp delegate] connectSource] and: item]; [[NSApp delegate] startConnecting]; } } else { NSDebugLog(@"Drop with unrecognized type (%@)!", dragType); dragType = nil; return NO; } dragType = nil; return YES; } - (BOOL) prepareForDragOperation: (id)sender { /* * Tell the source that we will accept the drop if we can. */ if (dragType == IBMenuPboardType) { /* * We can accept menus dropped anywhere. */ return YES; } else if (dragType == GormLinkPboardType) { /* * We can accept a link dropped on any of our items. */ return YES; } return NO; } /* * Return the rectangle in which an objects link status will be displayed. */ - (NSRect) rectForObject: (id)anObject { int pos = [edited indexOfItem: anObject]; NSRect rect; if (pos >= 0) { rect = [rep rectOfItemAtIndex: pos]; rect = [rep convertRect: rect toView: nil]; } else { rect = [self frame]; } return rect; } - (void) resetObject: (id)anObject { [[self window] makeKeyAndOrderFront: self]; } - (void) selectObjects: (NSArray*)anArray { if ([anArray isEqual: selection] == NO) { NSUInteger count; NSMenuItem *item; [selection removeAllObjects]; NSDebugLog(@"selectObjects %@ %@", selection, anArray); [selection addObjectsFromArray: anArray]; count = [selection count]; /* * We can only select items in our menu - discard others. */ while (count-- > 0) { id o = [selection objectAtIndex: count]; if ([edited indexOfItem: o] == NSNotFound) { [selection removeObjectAtIndex: count]; } } item = [selection lastObject]; if ([selection count] != 1 || [item hasSubmenu] == NO) { [self closeSubeditors]; } else { NSMenu *menu; id editor; /* * A single item with a submenu is selected - * Make sure the submenu is registered in the document and * open an editor for it Close any existing subeditor. */ menu = [item submenu]; if ([document containsObject: menu] == NO) { [document attachObject: menu toParent: item]; } editor = [document editorForObject: menu create: YES]; if (subeditor != nil && subeditor != editor) { [self closeSubeditors]; } [menu display]; [[item submenu] display]; [editor orderFront]; [editor activate]; ASSIGN(subeditor, editor); } } /* * Now we must let the document (and hence the rest of the app) know * about our new selection. If there is nothing in it, make sure * that our edited window is selected instead. */ if ([selection count] > 0) { [document setSelectionFromEditor: self]; } /* else { id ed = nil; //GormObjectEditor *ed; ed = [GormObjectEditor editorForDocument: document]; [ed selectObjects: [NSArray arrayWithObject: edited]]; } */ } - (NSArray*) selection { return [NSArray arrayWithArray: selection]; } - (NSUInteger) selectionCount { return [selection count]; } - (void) validateEditing { } - (BOOL) wantsSelection { /* * We only want to be the selection owner if we are active (have been * swapped for the windows original content view) and if we have some * object selected. */ if (original == nil) return NO; if ([selection count] == 0) return NO; return YES; } - (NSWindow*) window { return [super window]; } @end static BOOL done_editing; @implementation GormMenuEditor (EditingAdditions) - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if ([name isEqual: NSControlTextDidEndEditingNotification] == YES) { done_editing = YES; [document setSelectionFromEditor: self]; // Correction for Bug#11410 // [self selectObjects: [NSArray arrayWithObject: edited]]; } } /* Edit a textfield. If it's not already editable, make it so, then edit it */ - (NSEvent *) editTextField: view withEvent: (NSEvent *)theEvent { unsigned eventMask; BOOL wasEditable; BOOL didDrawBackground; NSTextField *editField; NSRect frame; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSDate *future = [NSDate distantFuture]; NSEvent *e; editField = view; frame = [editField frame]; wasEditable = [editField isEditable]; [editField setEditable: YES]; didDrawBackground = [editField drawsBackground]; [editField setDrawsBackground: YES]; [nc addObserver: self selector: @selector(handleNotification:) name: NSControlTextDidEndEditingNotification object: nil]; /* Do some modal editing */ [editField selectText: self]; eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask | NSKeyDownMask | NSKeyUpMask | NSFlagsChangedMask; done_editing = NO; while (!done_editing) { NSEventType eType; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; switch (eType) { case NSLeftMouseDown: { NSPoint dp = [self convertPoint: [e locationInWindow] fromView: nil]; if (NSMouseInRect(dp, frame, NO) == NO) { done_editing = YES; break; } } [[editField currentEditor] mouseDown: e]; break; case NSLeftMouseUp: [[editField currentEditor] mouseUp: e]; break; case NSLeftMouseDragged: [[editField currentEditor] mouseDragged: e]; break; case NSKeyDown: [[editField currentEditor] keyDown: e]; break; case NSKeyUp: [[editField currentEditor] keyUp: e]; break; case NSFlagsChanged: [[editField currentEditor] flagsChanged: e]; break; default: NSLog(@"Internal Error: Unhandled event during editing: %@", e); break; } } [editField setEditable: wasEditable]; [editField setDrawsBackground: didDrawBackground]; [nc removeObserver: self name: NSControlTextDidEndEditingNotification object: nil]; [[editField currentEditor] resignFirstResponder]; [self setNeedsDisplay: YES]; [[self document] touch]; return e; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuInspectors.m000066400000000000000000000113711475375552500270160ustar00rootroot00000000000000/* GormMenuInspectors.m * * Copyright (C) 2000 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 2000 * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include @interface GormMenuAttributesInspector : IBInspector { NSTextField *titleText; NSMatrix *menuType; id autoenable; } - (void) updateMenuType: (id)sender; - (void) updateAutoenable: (id)sender; @end @implementation GormMenuAttributesInspector - (void)controlTextDidChange:(NSNotification *)aNotification { [object setTitle: [titleText stringValue]]; [super ok: self]; } - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormMenuAttributesInspector" owner: self] == NO) { NSLog(@"Could not gorm GormMenuAttributesInspector"); return nil; } return self; } - (void) setObject: (id)anObject { GormDocument *doc = (GormDocument *)[(id)[NSApp delegate] activeDocument]; ASSIGN(object, nil); // remove reference to old object... [super setObject: anObject]; [titleText setStringValue: [object title]]; [autoenable setState: ([object autoenablesItems]?NSOnState:NSOffState)]; // set up the menu type matrix... if([doc windowsMenu] == anObject) { [menuType selectCellAtRow: 0 column: 0]; } else if([doc servicesMenu] == anObject) { [menuType selectCellAtRow: 1 column: 0]; } else // normal menu without any special function { [menuType selectCellAtRow: 2 column: 0]; } } - (void) updateMenuType: (id)sender { BOOL flag; GormDocument *doc = (GormDocument *)[(id)[NSApp delegate] activeDocument]; // look at the values passed back in the matrix. flag = ([[menuType cellAtRow: 0 column: 0] state] == NSOnState) ? YES : NO; // windows menu... if(flag) { [doc setWindowsMenu: [self object]]; if([doc servicesMenu] == [self object]) { [doc setServicesMenu: nil]; } } flag = ([[menuType cellAtRow: 1 column: 0] state] == NSOnState) ? YES : NO; // services menu... if(flag) { [doc setServicesMenu: [self object]]; if([doc windowsMenu] == [self object]) { [doc setWindowsMenu: nil]; } } flag = ([[menuType cellAtRow: 2 column: 0] state] == NSOnState) ? YES : NO; // normal menu... if(flag) { if([doc windowsMenu] == [self object]) { [doc setWindowsMenu: nil]; } if([doc servicesMenu] == [self object]) { [doc setServicesMenu: nil]; } } [super ok: sender]; } - (void) updateAutoenable: (id)sender { BOOL flag; // look at the values passed back in the matrix. flag = ([autoenable state] == NSOnState) ? YES : NO; [object setAutoenablesItems: flag]; [super ok: sender]; } @end @interface GormMenuItemAttributesInspector : IBInspector { NSTextField *titleText; NSTextField *shortCut; NSTextField *tagText; } @end @implementation GormMenuItemAttributesInspector - (void)controlTextDidChange:(NSNotification *)aNotification { id o = [aNotification object]; id doc = [(id)[NSApp delegate] activeDocument]; if (o == titleText) { [object setTitle: [titleText stringValue]]; } if (o == shortCut) { NSString *s = [[shortCut stringValue] stringByTrimmingSpaces]; [object setKeyEquivalent: s]; } if (o == tagText) { [object setTag: [tagText intValue]]; } [doc touch]; [[object menu] display]; } - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormMenuItemAttributesInspector" owner: self] == NO) { NSLog(@"Could not gorm GormMenuItemAttributesInspector"); return nil; } return self; } - (void) setObject: (id)anObject { [super setObject: anObject]; [titleText setStringValue: [object title]]; [shortCut setStringValue: [object keyEquivalent]]; [tagText setIntValue: [object tag]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuItemAttributesInspector.gorm/000077500000000000000000000000001475375552500323035ustar00rootroot00000000000000data.classes000066400000000000000000000006111475375552500345120ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuItemAttributesInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; GormMenuItemAttributesInspector = { Actions = ( ); Outlets = ( tagText, shortCut, titleText, altBtn, ctrlBtn, shiftBtn, cmdBtn, keyPopup, keyType ); Super = IBInspector; }; }data.info000066400000000000000000000002701475375552500340110ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuItemAttributesInspector.gormGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000345151475375552500345530ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuItemAttributesInspector.gormGNUstep archive000f4240:00000023:00000179:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @P01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @W@ @q @k  @q @kJ-0 &0 % @ @ @p` @j  @p` @jJ0 &0 % @ @`@ @o @T  @o @TJ0 &0 % @ @ @m @L  @m @LJ0 &01 NSTextField1 NSControl% @6 @@ @< @2  @< @2J0 &%01NSTextFieldCell1 NSActionCell1NSCell0&%Title:01NSFont%&&&&&&JJ&&&&&&&I01NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% @K @? @d@ @5  @d@ @5J0 &%00&&&&&&&JJ&&&&&&&I0% @K @ @d@ @5  @d@ @5J0 &%0 0!&%0!&&&&&&JJ&&&&&&&I0"% @5 @  @< @2  @< @2J0# &%0$0%&%Tag:&&&&&&JJ&&&&&&&I0&0'&%Menu Item Attributes&&&&&&JJ&&&&&&&I0(0)&% System0*&% windowBackgroundColor @ @%%0+ % @[ @" @b` @]  @b` @]J0, &0- % @ @ @a @V  @a @VJ0. &0/1NSMatrix% @ @8 @P @I  @P @IJ00 &%01&&&&&&JJ&&&&&&&I% @P @9 ? ?02& % NSButtonCell031 NSButtonCell04&%Radio051NSImage061NSMutableString&%GSRadio&&&&&&JJ&&&&&&&I0708&%GSRadioSelected&&& &&%%09 &0:0;&%Special:5&&&&&&JJ&&&&&&&I7&&& &&0<0=&%Custom:5&&&&&&JJ&&&&&&&I7&&& &&:0>% @: @J @[ @6  @[ @6J0? &%0@&&&&&&JJ&&&&&&&I0A1 NSPopUpButton1NSButton% @; @9 @[ @6  @[ @6J0B &%0C1NSPopUpButtonCell1NSMenuItemCell&&&&&&JJ0D1NSMenu0E &  0F1 NSMenuItem0G&%JJI0H0I& %  common_NibbleI0J0K&%ReturnJJII0L0M&%DeleteJJII0N0O&%EscapeJJII0P0Q&%TabJJII0R0S&%Up ArrowJJII0T0U& % Down ArrowJJII0V0W& % Left ArrowJJII0X0Y& % Right ArrowJJII&&&&&&&I&&& > =&&FDF%%%%%0Z0[&%Key[&&&&&&JJ&&&&&&& @%%0\ % @ @" @X@ @]  @X@ @]J0] &0^ % @ @ @T @V  @T @VJ0_ &0`% @H @S @0  @S @0J0a &%0b0c& % Alternate0d0e&%GSSwitch0f&%Alt&&&&&&JJ&&&&&&&I0g0h&%GSSwitchSelected&&& &&0i% @< @S @0  @S @0J0j &%0k0l&%Controldl&&&&&&JJ&&&&&&&Ig&&& &&0m% @  @S @0  @S @0J0n &%0o0p&%Shiftdp&&&&&&JJ&&&&&&&Ig&&& &&0q% @Q @S @0  @S @0J0r &%0s0t&%Commandd0u&%Cmd&&&&&&JJ&&&&&&&Ig&&& &&0v0w&%Modifierw&&&&&&JJ&&&&&&& @ @%%0x0y&%Title0z% A &&&&&&JJ&&&&&&& @ @%%(0{&%Window0|&%NSMenuItem Inspector| @S@ @Ç @|I&   @ @0} &0~ &01NSMutableDictionary1 NSDictionary&F0& % MenuItem(31)P0&%PopUpButtonCell(0)C0& % Button(0)`0& % ButtonCell(2)b0& % MenuItem(10)00&%ReturnJJII0& % MenuItem(15)00& % Down ArrowJJII0& % MenuItem(21)00&%JJIHI0& % MenuItem(26)00&%Up ArrowJJII0&%TextFieldCell(0)0&%Box(0)+0& % ActionCell(0)10&%Box 0&%View(3) 0& % MenuItem(6)00& % Down ArrowJJII0& % MenuItem(1)00&%ReturnJJII0& % TextField5"0& % MenuItem(34)V0& % Button(3)q0& % MenuItem(24)00&%EscapeJJII0& % MenuItem(18)F0& % MenuItem(29)00& % Right ArrowJJII0& % ButtonCell(0):0& % ButtonCell(5)s0& % MenuItem(13)00&%TabJJII0&%TextFieldCell(3)$0&%PopUpButton(1)A0& % Matrix(0)/0& % TextField0&%View(1)^0& % MenuItem(4)00&%TabJJII0& % MenuItem(9)00&%JJIHI0& % Inspector0& % MenuItem(32)R0& % Button(1)i0& % ButtonCell(3)k0& % MenuItem(11)00&%DeleteJJII0& % MenuItem(22)00&%ReturnJJII0& % MenuItem(16)00& % Left ArrowJJII0±& % MenuItem(27)0ñ0ı& % Down ArrowJJII0ű&%TextFieldCell(1)0Ʊ&%Box(1)\0DZ& % MenuItem(2)0ȱ0ɱ&%DeleteJJII0ʱ& % MenuItem(7)0˱0̱& % Left ArrowJJII0ͱ& % TextField40α& % MenuItem(30)N0ϱ& % MenuItem(35)X0б& % ButtonCell(1)<0ѱ& % MenuItem(19)J0ұ& % MenuItem(25)0ӱ0Ա&%TabJJII0ձ& % MenuItem(14)0ֱ0ױ&%Up ArrowJJII0ر& % MenuItem(20)L0ٱ&%TextFieldCell(4)@0ڱ&%View(2) 0۱& % MenuItem(5)0ܱ0ݱ&%Up ArrowJJII0ޱ& % MenuItem(0)0߱0&%JJIHI0& % TextField10& % MenuItem(33)T0& % Button(2)m0&% NSOwner0&%GormMenuItemAttributesInspector0& % TextField(1)>0& % MenuItem(28)00& % Left ArrowJJII0& % MenuItem(12)00&%EscapeJJII0& % MenuItem(17)00& % Right ArrowJJII0& % MenuItem(23)00&%DeleteJJII0& % ButtonCell(4)o0&%TextFieldCell(2) 0&%Box(2)0&%View(0)-0& % MenuItem(3)00&%EscapeJJII0& % MenuItem(8)00& % Right ArrowJJII0 &cc01!NSNibConnector0&% NSOwnerP!P!ᰔP!ͰP!P!P1"NSNibOutletConnectorP&%delegateP"ͰP"P & % titleTextP "P &%tagTextP "P &%windowP"P&%initialFirstResponderP!ސP!P!ǐP!P!P!ېP!P!ʐP!P!P!P!P!ꐐP!P!ՐP!P !P!!퐐P"!P#!P$!P%!ưP&!ƐP'!P(!P)!㰮P*!P+"P,& % nextKeyViewP-",P."㰝,P/",P01#NSNibControlConnectorP1&%ok:P2"P3&%shortCutP4"P5&%delegateP6"P7&%altBtnP8"P9&%ctrlBtnP:"P;&%shiftBtnP<"P=&%cmdBtnP>#1P?#1P@#1PA#1PB!PC!PD#PE&%_popUpItemAction:PF!ѰPG#ѰPH&%_popUpItemAction:PI!ذPJ#ذPK&%_popUpItemAction:PL!PM!PN!PO!PP!PQ!ҐPR!PS!PT!琐PU!PV!PW!PX!аPY!PZ!ΰP[!P\!P]!ⰫP^!P_!ϰP`"Pa&%keyPopupPb#Pc&%ok:Pd!Pe!ڰPf!Pg!Ph!ŰPi!͐Pj!Pk!ٰPl!Pm!Pn!Po!Pp"Pq& % nextKeyViewPr"ͰqPs"Pt&%keyTypePu#Pv&%ok:Pw&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuItemAttributesInspector.h000066400000000000000000000032361475375552500315150ustar00rootroot00000000000000/* GormMenuItemAttributesInspector.h Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormMenuItemAttributesInspector_h_ #define INCLUDED_GormMenuItemAttributesInspector_h_ #include @class NSTextField, NSPopUpButton, NSMatrix; @interface GormMenuItemAttributesInspector : IBInspector { NSTextField *titleText; NSTextField *shortCut; NSTextField *tagText; NSPopUpButton *keyPopup; NSMatrix *keyType; id altBtn; id ctrlBtn; id shiftBtn; id cmdBtn; NSString *upString; NSString *dnString; NSString *ltString; NSString *rtString; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormMenuItemAttributesInspector.m000066400000000000000000000174741475375552500315330ustar00rootroot00000000000000/* GormMenuItemAttributesInspector.m Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormMenuItemAttributesInspector.h" const unichar up[]={NSUpArrowFunctionKey}; const unichar dn[]={NSDownArrowFunctionKey}; const unichar lt[]={NSLeftArrowFunctionKey}; const unichar rt[]={NSRightArrowFunctionKey}; #define VSTR(str) ({NSString *_str = (NSString *)str; ((NSString *)_str) ? (NSString *)_str : (NSString *)@"";}) @implementation GormMenuItemAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormMenuItemAttributesInspector" owner: self] == NO) { NSLog(@"Could not gorm GormMenuItemAttributesInspector"); return nil; } // initialize the strings. upString = RETAIN([NSString stringWithCharacters: up length: 1]); dnString = RETAIN([NSString stringWithCharacters: dn length: 1]); ltString = RETAIN([NSString stringWithCharacters: lt length: 1]); rtString = RETAIN([NSString stringWithCharacters: rt length: 1]); return self; } - (void) awakeFromNib { NSArray *cells = [keyType cells]; NSEnumerator *en = [cells objectEnumerator]; NSCell *cell = nil; while ((cell = [en nextObject]) != nil) { [cell setRefusesFirstResponder: YES]; } } - (void) dealloc { RELEASE(upString); RELEASE(dnString); RELEASE(ltString); RELEASE(rtString); [super dealloc]; } - (void) revert: (id)sender { unsigned int flags = [object keyEquivalentModifierMask]; NSString *key = VSTR([object keyEquivalent]); if ( object == nil ) return; [titleText setStringValue: VSTR([object title])]; [tagText setIntValue: [object tag]]; [shortCut setEnabled: NO]; if([key isEqualToString: @"\n"]) { [keyPopup selectItemAtIndex: 1]; } else if([key isEqualToString: @"\b"]) { [keyPopup selectItemAtIndex: 2]; } else if([key isEqualToString: @"\E"]) { [keyPopup selectItemAtIndex: 3]; } else if([key isEqualToString: @"\t"]) { [keyPopup selectItemAtIndex: 4]; } else if([key isEqualToString: upString]) { [keyPopup selectItemAtIndex: 5]; } else if([key isEqualToString: dnString]) { [keyPopup selectItemAtIndex: 6]; } else if([key isEqualToString: ltString]) { [keyPopup selectItemAtIndex: 7]; } else if([key isEqualToString: rtString]) { [keyPopup selectItemAtIndex: 8]; } else { [keyPopup selectItemAtIndex: 0]; [keyPopup setEnabled: NO]; [keyType selectCellWithTag: 0]; [shortCut setEnabled: YES]; [shortCut setStringValue: key]; } // key modifier mask... [altBtn setState: NSOffState]; [ctrlBtn setState: NSOffState]; [shiftBtn setState: NSOffState]; [cmdBtn setState: NSOffState]; if(flags & NSAlternateKeyMask) { [altBtn setState: NSOnState]; } if(flags & NSControlKeyMask) { [ctrlBtn setState: NSOnState]; } if(flags & NSShiftKeyMask) { [shiftBtn setState: NSOnState]; } if(flags & NSCommandKeyMask) { [cmdBtn setState: NSOnState]; } } - (void) _setFunctionKeyEquivalent { unsigned int tag = [[keyPopup selectedItem] tag]; switch(tag) { case 0: // none { [object setKeyEquivalent: nil]; } break; case 1: // return { [object setKeyEquivalent: @"\n"]; } break; case 2: // delete { [object setKeyEquivalent: @"\b"]; } break; case 3: // escape { [object setKeyEquivalent: @"\E"]; } break; case 4: // tab { [object setKeyEquivalent: @"\t"]; } break; case 5: // up { [object setKeyEquivalent: upString]; } break; case 6: // down { [object setKeyEquivalent: dnString]; } break; case 7: // left { [object setKeyEquivalent: ltString]; } break; case 8: // right { [object setKeyEquivalent: rtString]; } break; default: // should never happen.. { [object setKeyEquivalent: nil]; NSLog(@"This shouldn't happen."); } break; } } -(void) ok: (id)sender { if (sender == titleText) { [object setTitle: [titleText stringValue]]; } if (sender == shortCut) { NSString *keyEq = [shortCut stringValue]; if ([keyEq length] > 1) { keyEq = [NSString stringWithFormat:@"%c", [keyEq characterAtIndex: 0]]; [shortCut setStringValue: keyEq]; NSBeep(); } [object setKeyEquivalent:[keyEq stringByTrimmingSpaces]]; } if (sender == tagText) { [object setTag: [tagText intValue]]; } else if (sender == keyPopup) { [self _setFunctionKeyEquivalent]; } else if (sender == keyType) { switch ([[keyType selectedCell] tag]) { case 0: [keyPopup selectItemWithTag: 0]; [keyPopup setEnabled: NO]; [shortCut setEnabled: YES]; [object setKeyEquivalent:[[shortCut stringValue] stringByTrimmingSpaces]]; break; case 1: // [shortCut setStringValue: @""]; [shortCut setEnabled: NO]; [keyPopup setEnabled: YES]; [self _setFunctionKeyEquivalent]; break; } } else if (sender == altBtn) { if([altBtn state] == NSOnState) { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] | NSAlternateKeyMask]; } else { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] & ~NSAlternateKeyMask]; } [[object menu] itemChanged: object]; } else if (sender == ctrlBtn) { if([ctrlBtn state] == NSOnState) { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] | NSControlKeyMask]; } else { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] & ~NSControlKeyMask]; } [[object menu] itemChanged: object]; } else if (sender == shiftBtn) { if([shiftBtn state] == NSOnState) { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] | NSShiftKeyMask]; } else { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] & ~NSShiftKeyMask]; } [[object menu] itemChanged: object]; } else if (sender == cmdBtn) { if([cmdBtn state] == NSOnState) { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] | NSCommandKeyMask]; } else { [object setKeyEquivalentModifierMask: [object keyEquivalentModifierMask] & ~NSCommandKeyMask]; } [[object menu] itemChanged: object]; } [super ok:sender]; } - (void) controlTextDidChange: (NSNotification *)aNotification { [self ok: [aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormNSMenu.h000066400000000000000000000021251475375552500251750ustar00rootroot00000000000000/* GormNSMenu.h Copyright (C) 2002 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2002 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormNSMenu_h #define INCLUDED_GormNSMenu_h #include @interface GormNSMenu : NSMenu + (GormNSMenu *) menuWithMenu: (NSMenu *)menu; - (BOOL) realAutoenablesItems; @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormNSMenu.m000066400000000000000000000121211475375552500251770ustar00rootroot00000000000000/* GormNSMenu.m Copyright (C) 2002 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2002 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNSMenuView.h" #include "GormNSMenu.h" @interface GormNSMenuWindow : NSPanel @end @implementation GormNSMenuWindow - (BOOL)canBecomeMainWindow { return NO; } - (BOOL)canBecomeKeyWindow { return YES; } - (void)resignMainWindow { [super resignMainWindow]; if ([[self menu] _ownedByPopUp]) { [[NSRunLoop currentRunLoop] performSelector: @selector(close) target: [self menu] argument: nil order: 500000 modes: [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSModalPanelRunLoopMode, NSEventTrackingRunLoopMode, nil]]; } } - (void) sendEvent: (NSEvent*)theEvent { NSEventType type; type = [theEvent type]; if (type == NSLeftMouseDown) { [self makeMainWindow]; [self makeKeyWindow]; } [super sendEvent: theEvent]; } - (void) dealloc { [self setMenu: nil]; [super dealloc]; } @end @interface NSMenu (GormNSMenuPrivate) - (NSString*) _locationKey; @end @implementation GormNSMenu + (GormNSMenu *) menuWithMenu: (NSMenu *)menu { GormNSMenu *newMenu = [[GormNSMenu alloc] init]; NSEnumerator *en = [[menu itemArray] objectEnumerator]; NSMenuItem *item = nil; while((item = [en nextObject]) != nil) { [newMenu addItem: [item copy]]; } [newMenu setTitle: [menu title]]; return newMenu; } - (id) initWithTitle: (NSString *)aTitle { if((self = [super initWithTitle: aTitle]) != nil) { [self setMenuRepresentation: [[GormNSMenuView alloc] initWithFrame: NSZeroRect]]; } return self; } - (id) initWithCoder: (NSCoder *)coder { if((self = [super initWithCoder: coder]) != nil) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addObserver: self selector: @selector(handleNotification:) name: IBSelectionChangedNotification object: nil]; } return self; } - (void) handleNotification: (NSNotification *)notification { id object = [notification object]; if(object != nil) { // don't call, unless it does respond... if([(id)object respondsToSelector: @selector(editedObject)]) { id edited = [object editedObject]; if(self != edited && [self _ownedByPopUp]) { if([[self window] isVisible]) { [self close]; } } } else { // Close anyway if the editor doesn't respond. if([[self window] isVisible]) { [self close]; } } } } - (BOOL) performKeyEquivalent: (NSEvent*)theEvent { return NO; } - (NSPanel*) _createWindow { NSPanel *win = [[GormNSMenuWindow alloc] initWithContentRect: NSZeroRect styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: YES]; [win setLevel: NSSubmenuWindowLevel]; [win setExcludedFromWindowsMenu: YES]; return win; } - (NSString *)className { return @"NSMenu"; } #ifdef DEBUG // These methods are purely for debugging purposes... /* - (void) display { NSDebugLog(@"In GormNSMenu display..."); [super display]; } - (id) retain { NSLog(@"Being retained... %d: %@", [self retainCount], self); return [super retain]; } - (oneway void) release { NSLog(@"Being released... %d: %@", [self retainCount], self); [super release]; } */ #endif - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self name: IBSelectionChangedNotification object: nil]; [super dealloc]; } // Override -autoenablesItems to disable menu validation for design menus in // Gorm. This avoids disabling menu items by default in Gorm documents. - (BOOL) realAutoenablesItems { return [super autoenablesItems]; } - (BOOL) autoenablesItems { return NO; } - (NSString*) _locationKey { if ([self supermenu] == nil) { if ([NSApp mainMenu] == self) { return @"\033"; /* Root menu. */ } else { return nil; /* Unused menu. */ } } else if ([[self supermenu] supermenu] == nil) { return [NSString stringWithFormat: @"\033%@", [self title]]; } else { return [[[self supermenu] _locationKey] stringByAppendingFormat: @"\033%@", [self title]]; } } @end @implementation NSMenu (GormNSMenu) + (id) allocSubstitute { return [GormNSMenu alloc]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormNSMenuView.h000066400000000000000000000022731475375552500260340ustar00rootroot00000000000000/** GormNSMenuView Copyright (C) 1999 Free Software Foundation, Inc. Author: Fred Kiefer Date: Sep 2001 Author: David Lazaro Saz Date: Oct 1999 Author: Michael Hanni Date: 1999 This file is part of the GNUstep GUI Library. 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 3 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include @interface GormNSMenuView : NSMenuView @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/GormNSMenuView.m000066400000000000000000000036661475375552500260500ustar00rootroot00000000000000/** GormNSMenuView Copyright (C) 2007 Free Software Foundation, Inc. Author: Gregory Casamento Date: 2007 This file is part of the GNUstep GUI Library. 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 3 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include "GormNSMenuView.h" @implementation GormNSMenuView - (BOOL) _executeItemAtIndex: (int)indexOfActionToExecute removeSubmenu: (BOOL)subMenusNeedRemoving { if (indexOfActionToExecute == -1) { return YES; } if (indexOfActionToExecute >= 0 && [[self menu] attachedMenu] != nil && [[self menu] attachedMenu] == [[[[self menu] itemArray] objectAtIndex: indexOfActionToExecute] submenu]) { if (subMenusNeedRemoving) { [self detachSubmenu]; } return NO; } return YES; } - (NSPoint) locationForSubmenu: (NSMenu *)aSubmenu { NSRect frame = [_window frame]; NSRect submenuFrame; if (_needsSizing) [self sizeToFit]; if (aSubmenu) submenuFrame = [[[aSubmenu menuRepresentation] window] frame]; else submenuFrame = NSZeroRect; return NSMakePoint(NSMaxX(frame), NSMaxY(frame) - NSHeight(submenuFrame)); } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/MenusPalette.m000066400000000000000000000370331475375552500256240ustar00rootroot00000000000000/* main.m Copyright (C) 1999,2000 Free Software Foundation, Inc. Author: Richard frith-Macdonald Date: 1999 Author: Gregory John Casamento Date: 2003, 2004, 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNSMenu.h" @interface GormMenuMaker : NSObject { } @end @implementation GormMenuMaker - (void) encodeWithCoder: (NSCoder *)coder { } - (id) initWithCoder: (NSCoder *)coder { NSMenu *m = [[GormNSMenu alloc] init]; // build the menu.. [m setTitle: _(@"Main Menu")]; [m addItemWithTitle: _(@"Hide") action: @selector(hide:) keyEquivalent: @"h"]; [m addItemWithTitle: _(@"Quit") action: @selector(terminate:) keyEquivalent: @"q"]; RELEASE(self); return ((id)m); } @end @interface MenusPalette: IBPalette { } @end @implementation MenusPalette - (void) finishInstantiate { NSView *contents; NSMenuItem *i; NSMenu *m; NSMenu *s; NSButton *b; id menu; id v; NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"GormMenuDrag"]; NSImage *dragImage = [[NSImage alloc] initWithContentsOfFile: path]; NSFontManager *fm = nil; originalWindow = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, 272, 192) styleMask: NSBorderlessWindowMask backing: NSBackingStoreRetained defer: NO]; [originalWindow setTitle: @"Menus"]; contents = [originalWindow contentView]; /* * The Info menu */ m = [[GormNSMenu alloc] init]; [m addItemWithTitle: @"Info Panel..." action: @selector(orderFrontStandardInfoPanel:) keyEquivalent: @""]; [m addItemWithTitle: @"Preferences..." action: NULL keyEquivalent: @""]; [m addItemWithTitle: @"Help..." action: @selector(orderFrontHelpPanel:) keyEquivalent: @"?"]; [m setTitle: @"Info"]; i = [[NSMenuItem alloc] initWithTitle: @"Info" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 160, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Info"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The Font menu */ fm = [NSFontManager sharedFontManager]; m = [GormNSMenu menuWithMenu: [fm fontMenu: YES]]; // Other font menu items [m addItemWithTitle: @"Underline" action: @selector(underline:) keyEquivalent: @""]; [m addItemWithTitle: @"Superscript" action: @selector(superscript:) keyEquivalent: @""]; [m addItemWithTitle: @"Subscript" action: @selector(subscript:) keyEquivalent: @""]; [m addItemWithTitle: @"Unscript" action: @selector(unscript:) keyEquivalent: @""]; [m addItemWithTitle: @"Copy Font" action: @selector(copyFont:) keyEquivalent: @"3"]; [m addItemWithTitle: @"Paste Font" action: @selector(pasteFont:) keyEquivalent: @"4"]; i = [[NSMenuItem alloc] initWithTitle: @"Font" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 160, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Font"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The Document menu */ m = [[GormNSMenu alloc] init]; [m addItemWithTitle: @"Open..." action: @selector(openDocument:) keyEquivalent: @"o"]; i = (NSMenuItem *)[m addItemWithTitle: @"Open Recent" action: NULL keyEquivalent: @""]; s = [[GormNSMenu alloc] init]; [s addItemWithTitle: @"Clear List" action: @selector(clearRecentDocuments:) keyEquivalent: @""]; [s setTitle: @"Open Recent"]; [i setSubmenu: s]; [m addItemWithTitle: @"New" action: @selector(newDocument:) keyEquivalent: @"n"]; [m addItemWithTitle: @"Save..." action: @selector(saveDocument:) keyEquivalent: @"s"]; [m addItemWithTitle: @"Save As..." action: @selector(saveDocumentAs:) keyEquivalent: @"S"]; [m addItemWithTitle: @"Save To..." action: @selector(saveDocumentTo:) keyEquivalent: @""]; [m addItemWithTitle: @"Save All" action: @selector(saveAllDocuments:) keyEquivalent: @""]; [m addItemWithTitle: @"Revert To Saved" action: @selector(revertDocumentToSaved:) keyEquivalent: @""]; [m addItemWithTitle: @"Close" action: @selector(close:) keyEquivalent: @""]; [m setTitle: @"Document"]; i = [[NSMenuItem alloc] initWithTitle: @"Document" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 140, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Document"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The Text menu */ m = [[GormNSMenu alloc] init]; [m addItemWithTitle: @"Align Left" action: @selector(alignLeft:) keyEquivalent: @""]; [m addItemWithTitle: @"Center" action: @selector(alignCenter:) keyEquivalent: @""]; [m addItemWithTitle: @"Align Right" action: @selector(alignRight:) keyEquivalent: @""]; [m addItemWithTitle: @"Show Ruler" action: @selector(toggleRuler:) keyEquivalent: @""]; [m addItemWithTitle: @"Copy Ruler" action: @selector(copyRuler:) keyEquivalent: @"1"]; [m addItemWithTitle: @"Paste Ruler" action: @selector(pasteRuler:) keyEquivalent: @"2"]; [m setTitle: @"Text"]; i = [[NSMenuItem alloc] initWithTitle: @"Text" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 140, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Text"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The Edit menu */ m = [[GormNSMenu alloc] init]; [m addItemWithTitle: @"Undo" action: @selector(undo:) keyEquivalent: @"z"]; [m addItemWithTitle: @"Redo" action: @selector(redo:) keyEquivalent: @"Z"]; [m addItemWithTitle: @"Cut" action: @selector(cut:) keyEquivalent: @"x"]; [m addItemWithTitle: @"Copy" action: @selector(copy:) keyEquivalent: @"c"]; [m addItemWithTitle: @"Paste" action: @selector(paste:) keyEquivalent: @"v"]; [m addItemWithTitle: @"Select All" action: @selector(selectAll:) keyEquivalent: @"a"]; [m setTitle: @"Edit"]; i = [[NSMenuItem alloc] initWithTitle: @"Edit" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 120, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Edit"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The Find menu */ m = [[GormNSMenu alloc] init]; i = (NSMenuItem *)[m addItemWithTitle: @"Find Panel..." action: @selector(performFindPanelAction:) keyEquivalent: @"f"]; [i setTag: NSFindPanelActionShowFindPanel]; i = (NSMenuItem *)[m addItemWithTitle: @"Find Next" action: @selector(performFindPanelAction:) keyEquivalent: @"g"]; [i setTag: NSFindPanelActionNext]; i = (NSMenuItem *)[m addItemWithTitle: @"Find Previous" action: @selector(performFindPanelAction:) keyEquivalent: @"d"]; [i setTag: NSFindPanelActionPrevious]; i = (NSMenuItem *)[m addItemWithTitle: @"Enter Selection" action: @selector(performFindPanelAction:) keyEquivalent: @"e"]; [i setTag: NSFindPanelActionSetFindString]; [m addItemWithTitle: @"Jump To Selection" action: @selector(centerSelectionInVisibleArea:) keyEquivalent: @"j"]; [m setTitle: @"Find"]; i = [[NSMenuItem alloc] initWithTitle: @"Find" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 120, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Find"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The Format menu */ m = [[GormNSMenu alloc] init]; /* * Font submenu */ i = (NSMenuItem *)[m addItemWithTitle: @"Font" action: NULL keyEquivalent: @""]; s = [GormNSMenu menuWithMenu: [fm fontMenu: YES]]; // Other font menu items [s addItemWithTitle: @"Underline" action: @selector(underline:) keyEquivalent: @""]; [s addItemWithTitle: @"Superscript" action: @selector(superscript:) keyEquivalent: @""]; [s addItemWithTitle: @"Subscript" action: @selector(subscript:) keyEquivalent: @""]; [s addItemWithTitle: @"Unscript" action: @selector(unscript:) keyEquivalent: @""]; [s addItemWithTitle: @"Copy Font" action: @selector(copyFont:) keyEquivalent: @"3"]; [s addItemWithTitle: @"Paste Font" action: @selector(pasteFont:) keyEquivalent: @"4"]; [m setSubmenu: s forItem: i]; /* * Text submenu */ i = (NSMenuItem *)[m addItemWithTitle: @"Text" action: NULL keyEquivalent: @""]; s = [[GormNSMenu alloc] init]; [s addItemWithTitle: @"Align Left" action: @selector(alignLeft:) keyEquivalent: @""]; [s addItemWithTitle: @"Center" action: @selector(alignCenter:) keyEquivalent: @""]; [s addItemWithTitle: @"Align Right" action: @selector(alignRight:) keyEquivalent: @""]; [s addItemWithTitle: @"Show Ruler" action: @selector(toggleRuler:) keyEquivalent: @""]; [s addItemWithTitle: @"Copy Ruler" action: @selector(copyRuler:) keyEquivalent: @"1"]; [s addItemWithTitle: @"Paste Ruler" action: @selector(pasteRuler:) keyEquivalent: @"2"]; [s setTitle: @"Text"]; [m setSubmenu: s forItem: i]; [m addItemWithTitle: @"Page Layout..." action: @selector(runPageLayout:) keyEquivalent: @"P"]; [m setTitle: @"Format"]; i = [[NSMenuItem alloc] initWithTitle: @"Format" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 100, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Format"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The Colors item */ i = [[NSMenuItem alloc] initWithTitle: @"Colors..." action: @selector(orderFrontColorPanel:) keyEquivalent: @""]; b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 100, 100, 20)]; [b setAlignment: NSLeftTextAlignment]; [b setTitle: @" Colors..."]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); /* * The Windows menu */ m = [[GormNSMenu alloc] init]; [m addItemWithTitle: @"Arrange In Front" action: @selector(arrangeInFront:) keyEquivalent: @""]; [m addItemWithTitle: @"Miniaturize Window" action: @selector(performMiniaturize:) keyEquivalent: @"m"]; [m addItemWithTitle: @"Close Window" action: @selector(performClose:) keyEquivalent: @"w"]; [m setTitle: @"Windows"]; i = [[NSMenuItem alloc] initWithTitle: @"Windows" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 80, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Windows"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The general item */ i = [[NSMenuItem alloc] initWithTitle: @"Item" action: NULL keyEquivalent: @""]; b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 80, 100, 20)]; [b setAlignment: NSLeftTextAlignment]; [b setTitle: @" Item"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); /* * The Services menu */ m = [[GormNSMenu alloc] init]; [m setTitle: @"Services"]; i = [[NSMenuItem alloc] initWithTitle: @"Services" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(30, 60, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Services"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * The general submenu */ m = [[GormNSMenu alloc] init]; [m addItemWithTitle: @"Item" action: NULL keyEquivalent: @""]; [m setTitle: @"Submenu"]; i = [[NSMenuItem alloc] initWithTitle: @"Submenu" action: @selector(submenuAction:) keyEquivalent: @""]; [i setSubmenu: m]; b = [[NSButton alloc] initWithFrame: NSMakeRect(145, 60, 100, 20)]; [b setImage: [NSImage imageNamed: @"common_3DArrowRight"]]; [b setAlignment: NSLeftTextAlignment]; [b setImagePosition: NSImageRight]; [b setTitle: @" Submenu"]; [contents addSubview: b]; [self associateObject: i type: IBMenuPboardType with: b]; RELEASE(b); RELEASE(i); RELEASE(m); /* * A whole new menu... */ menu = [[GormMenuMaker alloc] init]; v = [[NSButton alloc] initWithFrame: NSMakeRect(115,0,48,48)]; [v setBordered: NO]; [v setImage: dragImage]; [v setImagePosition: NSImageOverlaps]; [v setTitle: nil]; [contents addSubview: v]; [self associateObject: menu type: IBMenuPboardType with: v]; RELEASE(v); RELEASE(menu); } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/MenusPalette.tiff000066400000000000000000000007141475375552500263140ustar00rootroot00000000000000MM* P8$ B`76 h@pJ)@8b GY^6UJeT.xDS9A2&q=iCUN屹|:c<4YJTT*5.%MU:VDlu]vh\nW;" P8$ B`76 ~@tD?шn3GRzK$ɥ2*S |+6L\cϨ4 D$tjLqKM(eBQԩUv_W` 00 (p ' 'apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/inspectors.m000066400000000000000000000034341475375552500254050ustar00rootroot00000000000000/* inspectors.m * * This file defines the mapping between objects and thier editors/inspectors. * * Copyright (C) 2000 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include @implementation NSMenu (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormMenuAttributesInspector"; } - (NSString*) editorClassName { return @"GormMenuEditor"; } /* * Method to return the image that should be used to display menus within * the matrix containing the objects in a document. */ - (NSImage*) imageForViewer { static NSImage *image = nil; if (image == nil) { NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForImageResource: @"GormMenu"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } @end @implementation NSMenuItem (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormMenuItemAttributesInspector"; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/0Menus/palette.table000066400000000000000000000002361475375552500255020ustar00rootroot00000000000000{ NibFile = ""; Class = "MenusPalette"; Icon = "MenusPalette"; SubstituteClasses = { GormNSMenu = NSMenu; GormNSMenuView = NSMenuView; }; } apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/000077500000000000000000000000001475375552500233765ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/Drawer.tiff000066400000000000000000000504761475375552500255100ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNNNPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNNNOOOPPPPPPPPPOOONNNPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP@P LP@P.Q6Q(R/home/heron/Development/gnustep/dev-apps/gorm/Palettes/1Windows/Drawer.tiffHHapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/DrawerSmall.tiff000066400000000000000000000167041475375552500264750ustar00rootroot00000000000000II* 3%%%GGGGGGGGG???0003fff 000 fffWWWWWW 000___wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww0003fffLLLLLL 0000003bbb 0000003++++++++++++///0003000//////000//////000//////000//////000//////000//////000//////000///////////////"""0003uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!!!000300000030000003000000300000030000003000000300000030000003000000300000030000003000000300000030000003000000300000030000003000000300000030000003000000300000030000003000000300000030000003000***5555555555555555555555555555555555555555555555553000`88888888888888888 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!30&Z Qb@(R/home/heron/Development/gnustep/dev-apps/gorm/Palettes/1Windows/DrawerSmall.tiffHHapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GNUmakefile000066400000000000000000000033641475375552500254560ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999-2005 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make PALETTE_NAME = 1Windows 1Windows_PALETTE_ICON = WindowsPalette 1Windows_OBJC_FILES = \ WindowsPalette.m \ GormDrawerAttributesInspector.m \ GormWindowAttributesInspector.m\ GormWindowSizeInspector.m \ inspectors.m 1Windows_HEADER_FILES = \ GormNSWindow.h \ GormWindowAttributesInspector.h\ GormWindowSizeInspector.h\ GormNSPanel.h \ WindowsPalette.h 1Windows_PRINCIPAL_CLASS = WindowsPalette 1Windows_RESOURCE_FILES = \ WindowsPalette.tiff \ WindowDrag.tiff \ Drawer.tiff \ DrawerSmall.tiff \ GormDrawerAttributesInspector.gorm \ GormNSWindowSizeInspector.gorm \ GormNSWindowInspector.gorm \ palette.table 1Windows_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/palette.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GNUmakefile.preamble000066400000000000000000000013041475375552500272340ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../../.. ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework $(PALETTE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormDrawerAttributesInspector.gorm/000077500000000000000000000000001475375552500323505ustar00rootroot00000000000000data.classes000066400000000000000000000002741475375552500345640ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormDrawerAttributesInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormDrawerAttributesInspector = { Actions = ( ); Outlets = ( preferredEdge ); Super = IBInspector; }; }data.info000066400000000000000000000002701475375552500340560ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormDrawerAttributesInspector.gormGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000060101475375552500346050ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormDrawerAttributesInspector.gormGNUstep archive000f4240:00000021:00000043:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @q @x@JI @8 @(01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01NSBox% @? @f @j@ @P@  @j@ @P@J-0 &0 % @ @ @h @C  @h @CJ0 &0 1 NSPopUpButton1NSButton1 NSControl% @? @$ @` @6  @` @6J-0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&JJ01NSMenu0 &01 NSMenuItem0&%LeftJJI01NSImage0& %  common_NibbleI00&%BottomJJII00&%RightJJII00&%TopJJII&&&&&&&I&&& &&%%%%%00&%Preferred Edge&&&&&&JJ&&&&&&& @ @%%01NSColor0&% NSNamedColorSpace0 &% System0!&% windowBackgroundColor0"&%Window0#&%Inspector Window# ? @" @Ç @|I&   @ @p0$ &0% &0&1NSMutableDictionary1 NSDictionary& 0'&%View(0)0(&%View(1) 0)&%PopUpButton(0) 0*& % MenuItem(2)0+& % MenuItem(3)0,& % MenuItem(0)0-& % MenuItem(1)0.&% NSOwner0/&%GormDrawerAttributesInspector00&%Box(0)01& % InspectorWin02 &  031NSNibConnector104&% NSOwner05'1060'07(008)(09,0:-0;*0<+0=1NSNibOutletConnector410>1 NSMutableString&%window0?1!NSNibControlConnector)40@ &%ok:0A4)0B& % preferredEdge0C&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormDrawerAttributesInspector.h000066400000000000000000000021371475375552500315610ustar00rootroot00000000000000/* GormDrawerAttributesInspector.m Copyright (C) 2006 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2006 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* All Rights reserved */ #include #include @interface GormDrawerAttributesInspector : IBInspector { id preferredEdge; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormDrawerAttributesInspector.m000066400000000000000000000032041475375552500315620ustar00rootroot00000000000000/* GormDrawerAttributesInspector.m Copyright (C) 2006 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2006 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* All rights reserved */ #include #include "GormDrawerAttributesInspector.h" @implementation GormDrawerAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormDrawerAttributesInspector" owner: self] == NO) { NSLog(@"Could not gorm GormDrawerAttributesInspector"); return nil; } return self; } - (void) ok: (id) sender { id drawer = [self object]; [drawer setPreferredEdge: [[sender selectedItem] tag]]; } - (void) revert: (id) sender { id drawer = [self object]; NSUInteger i = [preferredEdge indexOfItemWithTag: [drawer preferredEdge]]; if(i != NSNotFound) { [preferredEdge selectItemAtIndex: i]; } } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowInspector.gorm/000077500000000000000000000000001475375552500305655ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowInspector.gorm/data.classes000066400000000000000000000006531475375552500330610ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormWindowAttributesInspector = { Actions = ( ); Outlets = ( backingMatrix, titleForm, iconNameField, colorWell, releaseButton, hideButton, visibleButton, deferredButton, oneShotButton, dynamicDepthButton, miniaturizeButton, closeButton, resizeBarButton ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowInspector.gorm/data.info000066400000000000000000000002701475375552500323520ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowInspector.gorm/objects.gorm000066400000000000000000000313651475375552500331140ustar00rootroot00000000000000GNUstep archive000f4240:00000021:00000125:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@J@C6I @ @X01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 % @ @ @p @w`  @p @w`J0 &0 1NSForm1NSMatrix1 NSControl% @ @uP @o @6  @o @6J0 &%0 1 NSFormCell1 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @o @6 @01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I A00&%Title:&&&&&&JJ&&&&&&&2 ok:v24@0:8@160 % @e @5 @T @Q  @T @QJ0 &0 % @ @ @Q @F  @Q @FJ0 &0!1 NSColorWell% @ @ @J @B  @J @BJ0" &%0#0$%&&&&&&JJ&&&&&&&0%0&&% NSCalibratedWhiteColorSpace ?* ?0'0(& % Background$(&&&&&&JJ&&&&&&& @ @%%0) % @ @X@ @o @b  @o @bJ0* &0+ % @ @ @m @_@  @m @_@J0, &0-1NSButton% @H @Z @a @0  @a @0J0. &%0/1 NSButtonCell00&%Release when closed011NSImage021NSMutableString&%GSSwitch$&&&&&&JJ&&&&&&&I0304&%GSSwitchSelected&&& &&05% @H @U @a @0  @a @0J06 &%0708&%Hide on deactivate1$8&&&&&&JJ&&&&&&&I3&&& &&09% @H @P @a @0  @a @0J0: &%0;0<&%Visible at launch time1$&&&&&&JJ&&&&&&&I3&&& &&0=% @H @F @a @0  @a @0J0> &%0?0@&%Deferred1$&&&&&&JJ&&&&&&&I3&&& &&0A% @H @9 @a @0  @a @0J0B &%0C0D&%One shot1$&&&&&&JJ&&&&&&&I3&&& &&0E% @H @ @a @0  @a @0J0F &%0G0H&%Dynamic depth limit1$&&&&&&JJ&&&&&&&I3&&& &&0I0J&%Options$&&&&&&JJ&&&&&&& @ @%%0K % @a @o @\ @T  @\ @TJ0L &0M % @ @ @Y @L  @Y @LJ0N &0O% @ @C @U @0  @U @0J0P &%0Q0R& % Miniaturize1$&&&&&&JJ&&&&&&&I3&&& &&0S% @ @4 @U @0  @U @0J0T &%0U0V&%Close1$&&&&&&JJ&&&&&&&I3&&& &&0W% @ ? @U @0  @U @0J0X &%0Y0Z& % Resize bar1$&&&&&&JJ&&&&&&&I3&&& &&0[0\&%Controls$&&&&&&JJ&&&&&&& @ @%%0] % @ @o @`@ @T  @`@ @TJ0^ &0_ % @ @ @] @L  @] @LJ0` &0a% @  @Z@ @L  @Z@ @LJ0b &%0c&&&&&&JJ&&&&&&&I% @Z@ @2 ? ?0d ?* ?* ?* ?* ?0e& % NSButtonCell0f0g&%Radio0h0i&%GSRadio&&&&&&JJ&&&&&&&I0j0k&%GSRadioSelected&&& &&%%0l &0m0n& % NonRetainedh&&&&&&JJ&&&&&&&Ij&&& &&0o0p&%Retainedh&&&&&&JJ&&&&&&&Ij&&& &&0q0r&%Bufferedh&&&&&&JJ&&&&&&&Ij&&& &&m0s0t&%Backing$&&&&&&JJ&&&&&&& @ @%%0u % @ @5 @d@ @Q  @d@ @QJ0v % @ @ @b @F  @b @FJu0w &0x1 NSTextField% @ @& @b @5  @b @5J0y &%0z1NSTextFieldCell$&&&&&&JJ &&&&&&&I0{0|&%System0}&%textBackgroundColor0~|0& % textColor0 &v00&%Miniwindow Icon Name$&&&&&&JJ&&&&&&& @ @%%00&%Title0% A &&&&&&JJ&&&&&&& @ @%%00&% windowBackgroundColor0&%Window0&%Window Attributes Inspector ? @Z@ @Ç @|I&   @ @p0 &0 &01NSMutableDictionary1 NSDictionary&,0&% NSOwner0&%GormWindowAttributesInspector0&%Button5A0& % ActionCell(0)c0& % ButtonCell(6)Q0&%Button4=0& % Inspector0& % FormCell(1) 0&%Button390&%TextFieldCell(0)z0& % ButtonCell(1)70&%Button250&%View(3)M0& % ColorWell!0&%Button1-0& % ButtonCell(5)G0&%ButtonCell(11)q0& % FormCell(0)0& % ButtonCell(9)m0& % ButtonCell(0)/0&%Box5)0&%View(2)+0& % ButtonCell(4)C0&%Box(1)0&%Box40&%ButtonCell(10)o0& % ButtonCell(8)Y0&%Box2K0&%Cell(0)#0&%View(1)0&%Box1]0&%Form 0& % ButtonCell(3)?0&%Box(0)u0&%View(5)v0&%Button9W0& % ButtonCell(7)U0&%Button8S0& % TextField(0)x0&%View(0) 0&%Button7O0&%Matrixa0& % ButtonCell(2);0&%Button6E0&%View(4)_0 &QQ01NSNibConnector01 NSNibOutletConnector0&%initialFirstResponder00000±0ñ0ı0ű0Ʊ0DZ0ȱ0ɱ0ʱ0˱0̱ 0ͱ& % nextKeyView0α 0ϱ 0б 0ѱ 0ұ 0ӱ 0Ա 0ձ 0ֱ 0ױ 0ر&% NSOwner0ٱ& % titleForm0ڱ ذ0۱& % backingMatrix0ܱ ذ0ݱ&%miniaturizeButton0ޱ ذ0߱& % closeButton0 ذ0&%resizeBarButton0 ذ0& % colorWell0 ذ0&%deferredButton0 ذ0&%dynamicDepthButton0 ذ0& % hideButton0 ذ0& % visibleButton0 ذ0& % oneShotButton0 ذ0&%window0 0&%delegate01!NSNibControlConnector0&%ok:0!ذ0!ذ0!ذ0!ذ0!ذ0!ذ0!ذ0!ذ0!ذ0!ذ0 ذ0& % releaseButtonPPPPPPPPPP P P P P PPPPPPPPPPPPPP P& % nextKeyViewP ذP& % iconNameFieldP!P &%ok:P!&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowSizeInspector.gorm/000077500000000000000000000000001475375552500314205ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowSizeInspector.gorm/data.classes000066400000000000000000000004541475375552500337130ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormWindowSizeInspector = { Actions = ( ); Outlets = ( minForm, sizeForm, window, bottom, left, maxForm, right, top, originForm, autosaveName ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowSizeInspector.gorm/data.info000066400000000000000000000002701475375552500332050ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormNSWindowSizeInspector.gorm/objects.gorm000066400000000000000000000566541475375552500337570ustar00rootroot00000000000000GNUstep archive000f4240:00000023:00000132:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @x @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @ @n  @^ @R  @^ @RJ0 &0 % @ @ @] @I  @] @IJ0 &01NSForm1NSMatrix1 NSControl% @ @ @Z @F  @Z @FJ0 &%01 NSFormCell1 NSActionCell1NSCell0&01NSFont%&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @Z @5 @01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I B00&%Width:&&&&&&JJ&&&&&&&0&&&&&&JJ&&&&&&&I B0 0!&%Height:&&&&&&JJ&&&&&&&0"0#& % Minimum Size&&&&&&JJ&&&&&&& %%0$ % @ @s @o @R  @o @RJ0% &0& % @ @ @o @I  @o @IJ0' &0(% @` @ @Z @F  @Z @FJ0) &%0*&&&&&&JJ&&&&&&&I 0+0,&%Field:&&&&&&JJ&&&&&&&% @Z @5 @0-& % NSFormCell%%0. &0/&&&&&&JJ&&&&&&&I B0001&%Width:1&&&&&&JJ&&&&&&&02&&&&&&JJ&&&&&&&I B0304&%Height:4&&&&&&JJ&&&&&&&205% @@ @ @T @F  @T @FJ06 &%07&&&&&&JJ&&&&&&&I 0809&%Field:&&&&&&JJ&&&&&&&% @T @5 @0:& % NSFormCell%%0; &0<&&&&&&JJ&&&&&&&I A@0=0>&%X:>&&&&&&JJ&&&&&&&0?&&&&&&JJ&&&&&&&I A@0@0A&%Y:&&&&&&JJ&&&&&&&<0B0C&%FrameC&&&&&&JJ&&&&&&& %%0D % @a @n  @^ @R  @^ @RJ0E &0F % @ @ @] @I  @] @IJ0G &0H% @ @ @Z @F  @Z @FJ0I &%0J&&&&&&JJ&&&&&&&I 0K0L&%Field:&&&&&&JJ&&&&&&&% @Z @5 @0M& % NSFormCell%%0N &0O&&&&&&JJ&&&&&&&I B0P0Q&%Width:&&&&&&JJ&&&&&&&0R&&&&&&JJ&&&&&&&I B0S0T&%Height:&&&&&&JJ&&&&&&&R0U0V& % Maximum Size&&&&&&JJ&&&&&&& %%0W % @H @$ @e@ @e@  @e@ @e@J0X &0Y % @ @ @c @b  @c @bJ0Z &0[1NSButton% @K @F @H @I  @H @IJ0\ &%0]1 NSButtonCell0^1NSImage @H @H0_0`&% NSCalibratedWhiteColorSpace 0a &0b1NSBitmapImageRep1 NSImageRep0c&% NSDeviceRGBColorSpace @H @HII0I00d1NSData&$$II*$O?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????+++???+++O???UUUUUU888888++++++UUU+++O???UUU+++UUUUUUUUUUUUUUUqqqUUUqqqUUUUUUUUUUUU+++O???UUUUUUqqqUUU888UUUUUUqqqqqq++++++UUU+++O???UUUUUUUUUUUU888UUUUUUUUUUUU+++O???+++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 00$$R0e% A@&&&&&&JJ&&&&&&&I&&& &&0f% @Q  @4 @I  @4 @IJ%0g &%0h0i0j& % GormEVLinee&&&&&&JJ&&&&&&&I0k0l& % GormEVCoil&&& &&0m% @Q @W @4 @I  @4 @IJ 0n &%0oie&&&&&&JJ&&&&&&&Ik&&& &&0p% @Y @P @I @4  @I @4J)0q &%0r0s&%Button0t0u& % GormEHLinee&&&&&&JJ&&&&&&&I0v0w& % GormEHCoil&&& &&0x% @ @P @I @4  @I @4J,0y &%0zte&&&&&&JJ&&&&&&&Iv&&& &&0{1NSTextFieldCell0|& % Autopositione&&&&&&JJ &&&&&&&I0}0~&% windowBackgroundColor00&% NSCalibratedRGBColorSpace ? @ @%%0 % @ @g` @o` @H  @o` @HJ0 % @ @ @n @<  @n @<J0 &01 NSTextField% @ @ @m @5  @m @5J0 &%0&&&&&&JJ &&&&&&&I00&%System0&%textBackgroundColor00& % textColor0 &00& % Autosave Name&&&&&&JJ&&&&&&& %%00&%Title0% A &&&&&&JJ&&&&&&& %%}0&%Window0&%Window Size Inspector ? @T@ @Ç @|I&   @ @p0 &0 &01NSMutableDictionary1 NSDictionary&-0& % FormCell(12)R0&% NSOwner0&%GormWindowSizeInspector0&%Button4x0&%Button[0& % Inspector0& % FormCell(1)?0&%Button3p0&%TextFieldCell(0)0& % ButtonCell(1)h0&%Button2m0& % FormCell(5)0&%View(3)&0& % FormCell(11)O0&%Form3(0&%Button1f0& % FormCell(9)20&%BoxD0& % FormCell(0)<0&%Form10& % ButtonCell(0)]0&%View(2) 0& % FormCell(4)70& % FormCell(10)*0& % ButtonCell(4)z0&%Box(1)0& % FormCell(8)/0&%Box3W0&%Box2 0&%Box1$0& % FormCell(3)0&&&&&&JJ&&&&&&&I B00&%Height:&&&&&&JJ&&&&&&&0&%View(1) 0&%FormH0&%Box(0)0& % ButtonCell(3)r0& % FormCell(7)0& % FormCell(13)J0&%Form(0)50& % TextField(0)0&%View1Y0±&%View(0)0ñ& % FormCell(2)0ı&&&&&&JJ&&&&&&&I B0ű0Ʊ&%Width:&&&&&&JJ&&&&&&&0DZ& % TextField0ȱ% @S @` @T @,  @T @,J0ɱ &%0ʱ0˱&%Titlee&&&&&&JJ &&&&&&&I0̱ ? ? ? ? ?0ͱ ?0α&%ViewF0ϱ& % ButtonCell(2)o0б& % FormCell(6)0ѱ &DD01 NSNibConnector0ӱ ǰ01!NSNibOutletConnector0ձ&%window0ֱ 0ױ 0ر 0ٱ ΰ0ڱ 0۱ 0ܱ 0ݱ 0ޱ 0߱ 0 0!0&%top0!0&%bottom0!0&%left0!0&%right0 0!01"NSMutableString&%sizeForm0 ΐ0!0"&%maxForm0 0!0"&%minForm0!0"& % nextKeyView0!0"&%delegate0!01#NSNibControlConnector0"&%ok:0#0#0#0"&%ok:0#0"&%ok:0 P °P P P P P P ðP P P !P & % originFormP !P & % autosaveNameP !P& % nextKeyViewP!P!P!P#P&%ok:P P P P P аP P P P P P P P P! P" P# ϰP$ P% P&!P'&%initialFirstResponderP(&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormWindowAttributesInspector.h000066400000000000000000000036011475375552500316010ustar00rootroot00000000000000/* GormWindowAttributesInspector.h Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 Author: Gregory John Casamento Date: 2002,2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormWindowAttributesInspector_h #define INCLUDED_GormWindowAttributesInspector_h #include @class NSButton; @class NSColorWell; @class NSForm; @class NSMatrix; @interface GormWindowAttributesInspector : IBInspector { NSForm *titleForm; NSMatrix *backingMatrix; /* Controls: Masks */ NSButton *miniaturizeButton; NSButton *closeButton; NSButton *resizeBarButton; /* Options */ NSButton *releaseButton; NSButton *hideButton; NSButton *visibleButton; NSButton *deferredButton; NSButton *oneShotButton; NSButton *dynamicDepthButton; /*Background Color */ NSColorWell *colorWell; /* Miniaturized Window Icon */ NSForm *iconNameField; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormWindowAttributesInspector.m000066400000000000000000000135301475375552500316100ustar00rootroot00000000000000/* GormWindowAttributesInspector.m Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 Author: Gregory John Casamento Date: 2002,2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormWindowAttributesInspector.h" @implementation GormWindowAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSWindowInspector" owner: self] == NO) { NSLog(@"Could not gorm GormNSWindowInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id)sender { /* title */ if (sender == titleForm) { [object setTitle: [[sender cellAtIndex: 0] stringValue] ]; } /* title */ /* backing Type */ else if (sender == backingMatrix) { [object setBackingType: [[sender selectedCell] tag] ]; } /* Masks */ else if ( ( sender == miniaturizeButton ) || ( sender == closeButton ) || ( sender == resizeBarButton ) ) { unsigned int newStyleMask = [object _styleMask]; if ( [miniaturizeButton state] == NSOnState ) newStyleMask |= NSMiniaturizableWindowMask; else newStyleMask &= ~NSMiniaturizableWindowMask; if ( [closeButton state] == NSOnState ) newStyleMask |= NSClosableWindowMask; else newStyleMask &= ~NSClosableWindowMask; if ( [resizeBarButton state] == NSOnState ) newStyleMask |= NSResizableWindowMask; else newStyleMask &= ~NSResizableWindowMask; [object _setStyleMask: newStyleMask]; // The window proxy hides the current button config since // we need to be able to use them in Gorm. The state is shown // on the inspector window. Redisplay the window anyway. [object display]; } /* backgroundColor */ else if (sender == colorWell) { [object setBackgroundColor: [colorWell color]]; } /* release When Closed */ else if ( sender == releaseButton ) { [object _setReleasedWhenClosed:[releaseButton state]]; } /* hide On Desactivate */ else if ( sender == hideButton ) { [object setHidesOnDeactivate:[hideButton state]]; } /* visible at launch time */ else if ( sender == visibleButton ) { GormDocument *doc = (GormDocument*)[(id)[NSApp delegate] activeDocument]; [doc setObject: object isVisibleAtLaunch: [visibleButton state]]; } /* deferred */ else if ( sender == deferredButton ) { GormDocument *doc = (GormDocument*)[(id)[NSApp delegate] activeDocument]; [doc setObject: object isDeferred: [deferredButton state]]; } /* One shot */ else if ( sender == oneShotButton ) { [object setOneShot:[oneShotButton state]]; } /* Dynamic depth */ else if ( sender == dynamicDepthButton ) { [object setDynamicDepthLimit: [dynamicDepthButton state]]; } /* icon name */ else if (sender == iconNameField) { NSString *string = [sender stringValue]; NSImage *image; /* the clearButton is disabled if the form is empty, enabled otherwise */ // This allows the user to set the icon, if they wish, for the mini window. // if it's clear it will default to the application icon. if ([string length] > 0) { image = [NSImage imageNamed: string]; [object setMiniwindowImage: image]; } else { // use the default, if the string is empty. [object setMiniwindowImage: nil]; } } [super ok: sender]; } /* Sync from object ( NSWindow ) changes to the inspector */ - (void) revert:(id) sender { GormDocument *doc; if ( object == nil ) return; doc = (GormDocument*)[(id)[NSApp delegate] activeDocument]; /* Title */ [[titleForm cellAtIndex: 0] setStringValue: [object title] ]; /* Backing */ [backingMatrix selectCellWithTag: [object backingType] ]; /* Controls / Masks */ [miniaturizeButton setState: ([object _styleMask] & NSMiniaturizableWindowMask)]; [closeButton setState:([object _styleMask] & NSClosableWindowMask)]; [resizeBarButton setState:([object _styleMask] & NSResizableWindowMask)]; /* Options */ [releaseButton setState:[object _isReleasedWhenClosed]]; [hideButton setState:[object hidesOnDeactivate]]; [visibleButton setState:[doc objectIsVisibleAtLaunch: object]]; [deferredButton setState:[doc objectIsDeferred: object]]; [oneShotButton setState:[object isOneShot]]; [dynamicDepthButton setState:[object hasDynamicDepthLimit]]; /* Icon Name */ [iconNameField setStringValue: [[object miniwindowImage] name]]; /* background color*/ [colorWell setColorWithoutAction: [object backgroundColor]]; [super revert:sender]; } /* delegate method for changing the Window title */ - (void)controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormWindowSizeInspector.h000066400000000000000000000030741475375552500303710ustar00rootroot00000000000000/* GormWindowSizeInspector.h Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 Author: Gregory John Casamento Date: 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormWindowSizeInspector_h #define INCLUDED_GormWindowSizeInspector_h #include @class NSButton; @class NSForm; @interface GormWindowSizeInspector : IBInspector { NSForm *originForm; NSForm *sizeForm; NSForm *autosaveName; NSForm *minForm; NSForm *maxForm; /* AutoPosition */ NSButton *top; NSButton *bottom; NSButton *left; NSButton *right; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/GormWindowSizeInspector.m000066400000000000000000000132521475375552500303750ustar00rootroot00000000000000/* GormWindowSizeInspector.m Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 Author: Gregory John Casamento Date: 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormWindowSizeInspector.h" /* IBObjectAdditions category for NSPanel */ @implementation NSPanel (IBObjectAdditionsSize) - (NSString*) sizeInspectorClassName { return @"GormWindowSizeInspector"; } @end /* IBObjectAdditions category for NSWindow */ @implementation NSWindow (IBObjectAdditionsSize) - (NSString*) sizeInspectorClassName { return @"GormWindowSizeInspector"; } @end @implementation GormWindowSizeInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSWindowSizeInspector" owner: self] == NO) { NSLog(@"Could not gorm GormNSWindowSizeInspector"); return nil; } [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(windowChangeNotification:) name: NSWindowDidMoveNotification object: object]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(windowChangeNotification:) name: NSWindowDidResizeNotification object: object]; return self; } - (void) setObject: (id)obj { [super setObject: obj]; // set up tags... [top setTag: GSWindowMaxYMargin]; [bottom setTag: GSWindowMinYMargin]; [left setTag: GSWindowMinXMargin]; [right setTag: GSWindowMaxXMargin]; // reset information in forms... } /* Commit changes that the user makes in the Window Size Inspector */ - (void) ok: (id)sender { /* Size */ if (sender == sizeForm || sender == originForm) { NSRect rect; rect = NSMakeRect([[originForm cellAtIndex: 0] floatValue], [[originForm cellAtIndex: 1] floatValue], [[sizeForm cellAtIndex: 0] floatValue], [[sizeForm cellAtIndex: 1] floatValue]); [object setFrame: rect display: YES]; } /* Autosave Name */ else if (sender == autosaveName) { // TODO: is not saved yet (not encoded by object?) [object setFrameAutosaveName: [sender stringValue] ]; } /* Min Size */ else if (sender == minForm) { NSSize size; size = NSMakeSize([[minForm cellAtIndex: 0] floatValue], [[minForm cellAtIndex: 1] floatValue]); [object setMinSize: size]; } /* Max Size */ else if (sender == maxForm) { NSSize size; size = NSMakeSize([[maxForm cellAtIndex: 0] floatValue], [[maxForm cellAtIndex: 1] floatValue]); [object setMaxSize: size]; } /* AutoPosition */ else if ( sender == top || sender == bottom || sender == left || sender == right ) { unsigned mask = [sender tag]; if ([sender state] == NSOnState) { mask = [object autoPositionMask] | mask; } else { mask = [object autoPositionMask] & ~mask; } [object setAutoPositionMask: mask]; } [super ok: sender]; } /* Sync from object ( NSWindow ) changes to the inspector */ - (void) revert: (id)sender { NSRect frame; NSSize size; unsigned int mask; if ( object == nil ) return; // Abort editing of the fields, so that the new values can be // populated. [originForm abortEditing]; [sizeForm abortEditing]; [minForm abortEditing]; [maxForm abortEditing]; mask = [object autoPositionMask]; frame = [object frame]; [[originForm cellAtIndex: 0] setFloatValue: NSMinX(frame)]; [[originForm cellAtIndex: 1] setFloatValue: NSMinY(frame)]; [[sizeForm cellAtIndex: 0] setFloatValue: NSWidth(frame)]; [[sizeForm cellAtIndex: 1] setFloatValue: NSHeight(frame)]; // Autosave name [autosaveName setStringValue: [object frameAutosaveName] ]; size = [object minSize]; [[minForm cellAtIndex: 0] setFloatValue: size.width]; [[minForm cellAtIndex: 1] setFloatValue: size.height]; size = [object maxSize]; [[maxForm cellAtIndex: 0] setFloatValue: size.width]; [[maxForm cellAtIndex: 1] setFloatValue: size.height]; if (mask & GSWindowMaxYMargin) [top setState: NSOnState]; else [top setState: NSOffState]; if (mask & GSWindowMinYMargin) [bottom setState: NSOnState]; else [bottom setState: NSOffState]; if (mask & GSWindowMaxXMargin) [right setState: NSOnState]; else [right setState: NSOffState]; if (mask & GSWindowMinXMargin) [left setState: NSOnState]; else [left setState: NSOffState]; [super revert:object]; } - (void) windowChangeNotification: (NSNotification*)aNotification { [self revert: nil]; } /* Delegate for textFields / Forms */ - (void)controlTextDidChange:(NSNotification *)aNotification { [self ok: [aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/WindowDrag.tiff000066400000000000000000000503021475375552500263150ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP P@PPPP(R ' 'apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/WindowsPalette.h000066400000000000000000000017541475375552500265270ustar00rootroot00000000000000/* WindowsPalette.h Copyright (C) 1999-2006 Free Software Foundation, Inc. Author: Gregory Casamento Date: 2006 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include @interface WindowsPalette: IBPalette @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/WindowsPalette.m000066400000000000000000000113261475375552500265300ustar00rootroot00000000000000/* main.m Copyright (C) 1999-2005 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormWindowSizeInspector.h" #include "WindowsPalette.h" @interface GormWindowMaker : NSObject { } @end @implementation GormWindowMaker - (void) encodeWithCoder: (NSCoder*)aCoder { } - (id) initWithCoder: (NSCoder*)aCoder { id w; unsigned style = ( NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask); NSRect screenRect = [[NSScreen mainScreen] frame]; float x = (screenRect.size.width - 500)/2; float y = (screenRect.size.height - 300)/2; NSRect windowRect = NSMakeRect(x,y,500,300); w = [[GormNSWindow alloc] initWithContentRect: windowRect styleMask: style backing: NSBackingStoreRetained defer: NO]; [w setFrame: windowRect display: YES]; [w setTitle: @"Window"]; [w orderFront: self]; RELEASE(self); return w; } @end @interface GormPanelMaker : NSObject { } @end @implementation GormPanelMaker - (void) encodeWithCoder: (NSCoder*)aCoder { } - (id) initWithCoder: (NSCoder*)aCoder { id w; unsigned style = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask; NSRect screenRect = [[NSScreen mainScreen] frame]; float x = (screenRect.size.width - 500)/2, y = (screenRect.size.height - 300)/2; NSRect windowRect = NSMakeRect(x,y,500,300); w = [[GormNSPanel alloc] initWithContentRect: windowRect styleMask: style backing: NSBackingStoreRetained defer: NO]; [w setFrame: windowRect display: YES]; [w setTitle: @"Panel"]; [w orderFront: self]; RELEASE(self); return w; } @end @implementation WindowsPalette - (void) finishInstantiate { NSView *contents; id w; id v; NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"WindowDrag"]; NSImage *dragImage = [[NSImage alloc] initWithContentsOfFile: path]; NSString *drawerPath = [bundle pathForImageResource: @"Drawer"]; NSImage *drawerImage = [[NSImage alloc] initWithContentsOfFile: drawerPath]; NSFont *systemFont = [NSFont boldSystemFontOfSize: [NSFont systemFontSize]]; RELEASE(originalWindow); originalWindow = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, 272, 192) styleMask: NSBorderlessWindowMask backing: NSBackingStoreRetained defer: NO]; [originalWindow setTitle: @"Windows"]; contents = [originalWindow contentView]; w = [[GormWindowMaker alloc] init]; v = [[NSButton alloc] initWithFrame: NSMakeRect(35, 100, 80, 64)]; [v setFont: systemFont]; [v setBordered: NO]; [v setImage: dragImage]; [v setImagePosition: NSImageOverlaps]; [v setTitle: @"Window"]; [contents addSubview: v]; [self associateObject: w type: IBWindowPboardType with: v]; RELEASE(v); RELEASE(w); w = [[GormPanelMaker alloc] init]; v = [[NSButton alloc] initWithFrame: NSMakeRect(155, 100, 80, 64)]; [v setFont: systemFont]; [v setBordered: NO]; [v setImage: dragImage]; [v setImagePosition: NSImageOverlaps]; [v setTitle: @"Panel"]; [contents addSubview: v]; [self associateObject: w type: IBWindowPboardType with: v]; RELEASE(v); RELEASE(w); w = [[NSDrawer alloc] init]; v = [[NSButton alloc] initWithFrame: NSMakeRect(95, 30, 80, 64)]; [v setFont: systemFont]; [v setBordered: NO]; [v setImage: drawerImage]; [v setImagePosition: NSImageOverlaps]; [v setTitle: @"Drawer"]; [contents addSubview: v]; [self associateObject: w type: IBObjectPboardType with: v]; RELEASE(v); RELEASE(w); RELEASE(dragImage); RELEASE(drawerImage); } @end @implementation NSWindow (GormPrivate) + (id) allocSubstitute { return [GormNSWindow alloc]; } @end @implementation NSPanel (GormPrivate) + (id) allocSubstitute { return [GormNSPanel alloc]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/WindowsPalette.tiff000066400000000000000000000006441475375552500272250ustar00rootroot00000000000000MM* P8$ BaP8)UC D !F pV7G#8*eR2fSg3&yx}C]"uEҩ35NeU)n^U6 咻b٪+. P8$ BaPa? P؄>$E_xV9?&ƤLz[ˣ9_frܲ{2ͧ* ^N_<:ER:k1 "5T$.gB` 00 yapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/inspectors.m000066400000000000000000000045461475375552500257560ustar00rootroot00000000000000/* inspectors.m * * This file defines the mapping between objects and thier editors/inspectors. * * Copyright (C) 2000 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "WindowsPalette.h" /* IBObjectAdditions category for NSPanel */ @implementation NSPanel (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormWindowAttributesInspector"; } @end /* IBObjectAdditions category for NSWindow */ @implementation NSWindow (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormWindowAttributesInspector"; } - (NSString*) editorClassName { return @"GormWindowEditor"; } /* * Method to return the image that should be used to display windows within * the matrix containing the objects in a document. */ - (NSImage*) imageForViewer { static NSImage *image = nil; if (image == nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"GormWindow"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } @end @implementation NSDrawer (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormDrawerAttributesInspector"; } - (NSImage*) imageForViewer { static NSImage *image = nil; if (image == nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"DrawerSmall"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/1Windows/palette.table000066400000000000000000000003221475375552500260420ustar00rootroot00000000000000{ NOTE = "Automatically generated, do not edit!"; NibFile = ""; Class = "WindowsPalette"; Icon = "WindowsPalette"; SubstituteClasses = { GormNSWindow = NSWindow; GormNSPanel = NSPanel; }; } apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/000077500000000000000000000000001475375552500235505ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/ControlsPalette.gorm/000077500000000000000000000000001475375552500276355ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/ControlsPalette.gorm/data.classes000066400000000000000000000004131475375552500321230ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; ControlsPalette = { Actions = ( ); Outlets = ( "_prototypePopUp" ); Super = IBPalette; }; GormNSPopUpButton = { Actions = ( ); Outlets = ( ); Super = NSPopUpButton; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/ControlsPalette.gorm/data.info000066400000000000000000000002701475375552500314220ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/ControlsPalette.gorm/objects.gorm000066400000000000000000000272371475375552500321670ustar00rootroot00000000000000GNUstep archive000f4240:00000029:000000be:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @p @h`JI @ @01 NSView% ? @" @p @h`  @p @h`J01 NSMutableArray1 NSArray&01 NSTextField1 NSControl% @f @d @T@ @5  @T@ @5J0 &I0 1NSTextFieldCell1 NSActionCell1NSCell0 &%Text0 1NSFont%JJJJJJJJ JJJJJJJI0 1NSColor0 &% NSNamedColorSpace0&%System0&%textBackgroundColor0 0& % textColor01NSButton% @ @c @L @8  @L @8J0 &I01 NSButtonCell0&%Button JJJJJJJJJJJJJJJI0&JJJ JJ0% @ @S @P @0  @P @0J0 &I00&%Switch01NSImage01NSMutableString&%GSSwitch JJJJJJJJJJJJJJJI00&%GSSwitchSelectedJJJ JJ01 NSColorWell% @g @K @J @>  @J @>J0 &I0! JJJJJJJJJJJJJJJ0"0#&% NSCalibratedWhiteColorSpace ?0$1NSSlider% @o @" @0 @P@  @0 @P@J0% &I0&1 NSSliderCell0'&%0 0(1NSNumber1NSValued JJJJJJJJJJJJJJJI ? I0) JJJJJJJJ JJJJJJJI 0* 0+&% System0,&% controlTextColor0-0.0/&%common_SliderVert JJJJJJJJJJJJJJJII00% @d @$ @T @0  @T @0J01 &I0203&%0 (JJJJJJJJJJJJJJJI ? I04 JJJJJJJJ JJJJJJJI *050607&%common_SliderHoriz JJJJJJJJJJJJJJJII081NSProgressIndicator% @e @@ @Q@ @2  @Q@ @2J09 & ?UUUUUU @I @Y0:1 GSCustomView1 GSNibItem0;&%GormCustomView @U @$ @N @D&0<1 NSStepper% @d @M @2 @:  @2 @:J0= &I0>1! NSStepperCell0?&%00@i%JJJJJJJJJJJJJJJI @M ?II0A % @T@ @] @R@ @2  @R@ @2J0B &I0C0D&%Text0E% A@DJJJJJJJJ JJJJJJJI 0F % @T @W @R@ @2  @R@ @2J0G &I0H0I& % Bold Text0J% A@IJJJJJJJJ JJJJJJJI 0K % @T @R @R@ @2  @R@ @2J0L &I0M0N& % Fixed Text0O% A@NJJJJJJJJ JJJJJJJI 0P1"NSForm1#NSMatrix% @f @Z @T@ @F  @T@ @FJ0Q &I0R1$ NSFormCell JJJJJJJJJJJJJJJI 0S0T&%Field: JJJJJJJJJJJJJJJ% @T@ @5 @0U +0V&% controlBackgroundColorU0W& % NSFormCell%%0X &0Y$ JJJJJJJJJJJJJJJI B0Z0[&%Field: JJJJJJJJJJJJJJJ0\$ JJJJJJJJJJJJJJJI B0]0^&%Field: JJJJJJJJJJJJJJJ\0_#% @ @Z @L @B  @L @BJ0` &I0a JJJJJJJJJJJJJJJI% @L @2 ? ?0b& % NSButtonCell0c0d&%Radio0e0f&%GSRadioJJJJJJJJJJJJJJJI0g0h&%GSRadioSelectedJJJ JJ%%0i &0j0k&%RadioeJJJJJJJJJJJJJJJIgJJJ JJ0l0m&%RadioeJJJJJJJJJJJJJJJIgJJJ JJj0n1%NSBox% @ @P@ @I @  @I @J0o % @ @ @B   @B Jn0p &0q &o0r JJJJJJJJJJJJJJJ @ @%%0s%% @Q @" @ @I  @ @IJ0t % @ @ @B  @BJs0u &0v &t0w JJJJJJJJJJJJJJJ @ @%%0x%% @ @$ @I @I  @I @IJ0y % @ @ @B @8  @B @8Jx0z &0{ &y0|0}&%Box JJJJJJJJJJJJJJJ @ @%%0~ +0&% windowBackgroundColor0&%Window0&%Controls @ @i` @Ç @{I00&% NSApplicationIcon&   @ @0 &0 &01&NSMutableDictionary1' NSDictionary&0&%GormCustomView:0&%Slider100&%Button10& % ColorWell0&%Slider$0&%View(0)y0&%Box(1)s0& % Matrix(0)_0&% NSOwner0&%ControlsPalette0& % TextField3F0& % PaletteWin0&%View(1)o0&%Box(2)x0& % TextField0&%FormP0&%Stepper<0& % TextField5K0& % ButtonCell(0)j0&%View(2)t0&%Button0& % TextField2A0&%Box(0)n0&%ProgressIndicator80& % ButtonCell(1)l0 &01(NSNibConnector0(0(0(0(0(0(0(0(0(01)NSNibOutletConnector0&%originalWindow0(0(0(0(0(0(0(0(0(0(0(0(0(0&&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/ControlsPalette.m000066400000000000000000000114651475375552500270570ustar00rootroot00000000000000/** ControlsPalette.m Copyright (C) 2024 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2024, 2004 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormNSPopUpButton.h" @interface ControlsPalette: IBPalette { IBOutlet NSPopUpButton *_prototypePopUp; } @end @implementation ControlsPalette - (id) init { if((self = [super init]) != nil) { // Make ourselves a delegate, so that when the sound/image is dragged in, // this code is called... [NSView registerViewResourceDraggingDelegate: self]; // subscribe to the notification... [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(willInspectObject:) name: IBWillInspectObjectNotification object: nil]; } return self; } - (void) dealloc { [NSView unregisterViewResourceDraggingDelegate: self]; [super dealloc]; } - (void) finishInstantiate { NSView *contentView = [originalWindow contentView]; NSArray *allItems = nil; NSEnumerator *en = nil; id item = nil; _prototypePopUp = [[GormNSPopUpButton alloc] initWithFrame: NSMakeRect(71.0, 157.0, 102.0, 24.0)]; [_prototypePopUp addItemWithTitle: @"Item #0"]; [_prototypePopUp addItemWithTitle: @"Item #1"]; [_prototypePopUp addItemWithTitle: @"Item #2"]; [_prototypePopUp setAutoenablesItems: YES]; allItems = [[_prototypePopUp menu] itemArray]; en = [allItems objectEnumerator]; while ((item = [en nextObject]) != nil) { [item setTarget: nil]; [item setAction: NULL]; // @selector(_popUpItemAction:)]; [item setEnabled: YES]; } [contentView addSubview: _prototypePopUp]; AUTORELEASE(_prototypePopUp); } - (void) willInspectObject: (NSNotification *)notification { id o = [notification object]; // [o respondsToSelector: @selector(prototype)] && [o prototype]) if ([o isKindOfClass: [NSMatrix class]]) { id prototype = [o prototype]; NSString *ident = NSStringFromClass([prototype class]); [[IBInspectorManager sharedInspectorManager] addInspectorModeWithIdentifier: ident forObject: o localizedLabel: _(@"Prototype") inspectorClassName: [prototype inspectorClassName] ordering: -1.0]; } } /** * Ask if the view accepts the object. */ - (BOOL) acceptsViewResourceFromPasteboard: (NSPasteboard *)pb forObject: (id)obj atPoint: (NSPoint)p { NSArray *types = [pb types]; return (([obj respondsToSelector: @selector(setSound:)] || [obj respondsToSelector: @selector(setImage:)]) && ([types containsObject: GormImagePboardType] || [types containsObject: GormSoundPboardType])); } /** * Perform the action of depositing the object. */ - (void) depositViewResourceFromPasteboard: (NSPasteboard *)pb onObject: (id)obj atPoint: (NSPoint)p { NSArray *types = [pb types]; if ([types containsObject: GormImagePboardType] == YES) { NSString *name = [pb stringForType: GormImagePboardType]; if([(id)obj respondsToSelector: @selector(setImage:)]) { NSImage *image = [NSImage imageNamed: name]; [(id)obj setImage: AUTORELEASE([image copy])]; } } else if ([types containsObject: GormSoundPboardType] == YES) { NSString *name; name = [pb stringForType: GormSoundPboardType]; if([(id)obj respondsToSelector: @selector(setSound:)]) { NSSound *sound = [NSSound soundNamed: name]; [(id)obj setSound: AUTORELEASE([sound copy])]; } } } /** * Should we draw the connection frame when the resource is * dragged in? */ - (BOOL) shouldDrawConnectionFrame { return NO; } /** * Types of resources accepted by this view. */ - (NSArray *)viewResourcePasteboardTypes { return [NSArray arrayWithObjects: GormImagePboardType, GormSoundPboardType, nil]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/ControlsPalette.tiff000066400000000000000000000007161475375552500275500ustar00rootroot00000000000000II* P8 _e8UDUI1$!N+ơшR-$id~nJJdi6fhiV|U( J(^̢3JZ0 ?*'t aOdl ݑ+ ?AaV]cYw9Z,//{oZ:?! P8 ~<& CFF"Hr3Ģr(6A&AhDXJ"yI4cy};簸##8(RN ' 'apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GNUmakefile000066400000000000000000000043501475375552500256240ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make PALETTE_NAME = 2Controls 2Controls_PALETTE_ICON = ControlsPalette 2Controls_OBJC_FILES = \ GormButtonAttributesInspector.m \ GormBoxAttributesInspector.m \ GormCellAttributesInspector.m \ GormCellSizeInspector.m \ GormColorWellAttributesInspector.m \ GormFormAttributesInspector.m \ GormPopUpButtonAttributesInspector.m \ GormSliderAttributesInspector.m \ GormStepperAttributesInspector.m \ GormProgressIndicatorAttributesInspector.m \ GormTextFieldAttributesInspector.m \ GormMatrixAttributesInspector.m \ ControlsPalette.m \ GormPopUpButtonEditor.m \ GormNSPopUpButton.m \ GormButtonEditor.m \ inspectors.m 2Controls_PRINCIPAL_CLASS = ControlsPalette 2Controls_RESOURCE_FILES = ControlsPalette.tiff \ GormNSBoxInspector.gorm \ GormNSButtonInspector.gorm \ GormNSCellInspector.gorm \ GormCellSizeInspector.gorm \ GormNSFormInspector.gorm \ GormNSMatrixInspector.gorm \ GormNSPopUpButtonInspector.gorm \ GormNSSliderInspector.gorm \ GormNSStepperInspector.gorm \ GormNSTextFieldInspector.gorm \ GormNSColorWellInspector.gorm \ GormNSProgressIndicatorInspector.gorm \ ControlsPalette.gorm \ palette.table 2Controls_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/palette.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GNUmakefile.preamble000066400000000000000000000013041475375552500274060ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../../.. ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework $(PALETTE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormBoxAttributesInspector.h000066400000000000000000000033061475375552500312360ustar00rootroot00000000000000/* GormBoxAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003, 2004, 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormBoxAttributesInspector_h #define INCLUDED_GormBoxAttributesInspector_h #include @class NSButton; @class NSColorWell; @class NSForm; @class NSMatrix; @class NSSlider; @interface GormBoxAttributesInspector:IBInspector { NSMatrix *positionMatrix; NSMatrix *borderMatrix; NSForm *titleForm; NSSlider *horizontalSlider; NSSlider *verticalSlider; NSColorWell *colorWell; NSButton *backgroundSwitch; } @end #endif /* INCLUDED_GormBoxAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormBoxAttributesInspector.m000066400000000000000000000106631475375552500312470ustar00rootroot00000000000000/* GormBoxAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003, 2004, 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormBoxAttributesInspector.h" /* This macro makes sure that the string contains a value, even if @"" */ #define VSTR(str) ({id _str = (id)str; (_str) ? (id)_str : (id)(@"");}) /* IBObjectAdditions category */ @implementation NSBox (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormBoxAttributesInspector"; } @end @implementation GormBoxAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSBoxInspector" owner: self] == NO) { NSLog(@"Could not load GormBoxInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { /* Position */ if (sender == positionMatrix) { [object setTitlePosition: [[sender selectedCell] tag]]; } /* border type */ else if (sender == borderMatrix) { [object setBorderType: [[sender selectedCell] tag]]; } /* title */ else if (sender == titleForm) { [object setTitle: [[sender cellAtIndex: 0] stringValue]]; } /* content view margins */ else if (sender == horizontalSlider) { [object setContentViewMargins: NSMakeSize((float)[sender intValue], (float)[verticalSlider intValue])]; } else if (sender == verticalSlider) { [object setContentViewMargins: NSMakeSize((float)[horizontalSlider intValue], (float)[sender intValue])]; } /* title cell : background color, only useful for older NSBox instances */ else if(sender == colorWell) { NSTextFieldCell *titleCell = (NSTextFieldCell *)[object titleCell]; if([titleCell isKindOfClass: [NSTextFieldCell class]]) { [titleCell setBackgroundColor: [colorWell color]]; [object display]; } } /* only useful for older NSBox instances */ else if(sender == backgroundSwitch) { NSTextFieldCell *titleCell = (NSTextFieldCell *)[object titleCell]; if([titleCell isKindOfClass: [NSTextFieldCell class]]) { BOOL state = ([backgroundSwitch state] == NSOnState)?YES:NO; [titleCell setDrawsBackground: state]; } } [super ok:sender]; } /* Sync from object ( NSBox ) changes to the inspector */ - (void) revert: (id) sender { NSTextFieldCell *titleCell; if ( object == nil ) return; /* Position */ [positionMatrix selectCellWithTag: [object titlePosition]]; /* Border Type */ [borderMatrix selectCellWithTag: [object borderType]]; /* title */ [[titleForm cellAtIndex: 0] setStringValue: VSTR([object title])]; /* content view margins */ [horizontalSlider setIntValue: (int)[object contentViewMargins].width]; [verticalSlider setIntValue: (int)[object contentViewMargins].height]; /* title cell: background color */ titleCell = (NSTextFieldCell *)[object titleCell]; if([titleCell isKindOfClass: [NSTextFieldCell class]]) { [colorWell setColorWithoutAction: [titleCell backgroundColor]]; [backgroundSwitch setState: ([titleCell drawsBackground]? NSOnState:NSOffState)]; } [super revert:sender]; } /* delegate method for titleForm */ - (void)controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormButtonAttributesInspector.h000066400000000000000000000033471475375552500317660ustar00rootroot00000000000000/* GormButtonAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormButtonAttributesInspector_h #define INCLUDED_GormButtonAttributesInspector_h #include @class NSForm; @class NSMatrix; @class NSPopUpButton; @class NSButton; @interface GormButtonAttributesInspector: IBInspector { NSMatrix *alignMatrix; NSMatrix *iconMatrix; NSForm *keyForm; NSMatrix *optionMatrix; NSForm *tagForm; NSForm *titleForm; NSPopUpButton *typeButton; NSPopUpButton *bezelButton; NSPopUpButton *keyEquiv; NSButton *altMod; NSButton *shiftMod; NSButton *ctrlMod; NSButton *cmdMod; } @end #endif /* INCLUDED_GormButtonAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormButtonAttributesInspector.m000066400000000000000000000267701475375552500320000ustar00rootroot00000000000000/* inspectors - Various inspectors for control elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003, 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormButtonAttributesInspector.h" /* This macro makes sure that the string contains a value, even if @"" */ #define VSTR(str) ({NSString *_str = (NSString *)str; ((NSString *)_str) ? (NSString *)_str : (NSString *)@"";}) const unichar up[]={NSUpArrowFunctionKey}; const unichar dn[]={NSDownArrowFunctionKey}; const unichar lt[]={NSLeftArrowFunctionKey}; const unichar rt[]={NSRightArrowFunctionKey}; NSString *upString = nil; NSString *dnString = nil; NSString *ltString = nil; NSString *rtString = nil; // trivial cell subclass. @interface GormButtonCellAttributesInspector : GormButtonAttributesInspector @end @implementation GormButtonCellAttributesInspector @end @implementation GormButtonAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSButtonInspector" owner: self] == NO) { NSLog(@"Could not load GormButtonInspector"); return nil; } // initialize the strings. upString = RETAIN([NSString stringWithCharacters: up length: 1]); dnString = RETAIN([NSString stringWithCharacters: dn length: 1]); ltString = RETAIN([NSString stringWithCharacters: lt length: 1]); rtString = RETAIN([NSString stringWithCharacters: rt length: 1]); return self; } - (void) dealloc { RELEASE(upString); RELEASE(dnString); RELEASE(ltString); RELEASE(rtString); [super dealloc]; } /* The button type isn't stored in the button, so reverse-engineer it */ - (NSButtonType) buttonTypeForObject: (id)button { NSButtonCell *cell; NSButtonType type; int highlight, stateby; /* We could be passed the button or the cell */ cell = ([button isKindOfClass: [NSButton class]]) ? [button cell] : button; highlight = [cell highlightsBy]; stateby = [cell showsStateBy]; NSDebugLog(@"highlight = %d, stateby = %d", (int)[cell highlightsBy],(int)[cell showsStateBy]); type = NSMomentaryPushInButton; if (highlight == NSChangeBackgroundCellMask) { if (stateby == NSNoCellMask) type = NSMomentaryLightButton; else type = NSOnOffButton; } else if (highlight == (NSPushInCellMask | NSChangeGrayCellMask)) { if (stateby == NSNoCellMask) type = NSMomentaryPushInButton; else type = NSPushOnPushOffButton; } else if (highlight == (NSPushInCellMask | NSContentsCellMask)) { type = NSToggleButton; } else if (highlight == NSContentsCellMask) { if (stateby == NSNoCellMask) type = NSMomentaryChangeButton; else type = NSToggleButton; /* Really switch or radio. What should it be? */ } else { NSDebugLog(@"Ack! no button type"); } return type; } - (void) ok: (id) sender { id obj = object; if ([object respondsToSelector: @selector(prototype)]) { obj = [object prototype]; } if (sender == alignMatrix) { [(NSButton *)obj setAlignment: (NSTextAlignment)[[sender selectedCell] tag]]; } else if (sender == iconMatrix) { [(NSButton *)obj setImagePosition: (NSCellImagePosition)[[sender selectedCell] tag]]; } else if (sender == keyForm) { // if the user does his own thing, select the default... [keyEquiv selectItemAtIndex: 0]; [obj setKeyEquivalent: [[sender cellAtIndex: 0] stringValue]]; } else if (sender == keyEquiv) { unsigned int tag = [[keyEquiv selectedItem] tag]; switch(tag) { case 0: // none { [obj setKeyEquivalent: nil]; } break; case 1: // return { [obj setKeyEquivalent: @"\r"]; [[keyForm cellAtIndex: 0] setStringValue: @"\\r"]; } break; case 2: // delete { [obj setKeyEquivalent: @"\b"]; [[keyForm cellAtIndex: 0] setStringValue: @"\\b"]; } break; case 3: // escape { [obj setKeyEquivalent: @"\E"]; [[keyForm cellAtIndex: 0] setStringValue: @"\\E"]; } break; case 4: // tab { [obj setKeyEquivalent: @"\t"]; [[keyForm cellAtIndex: 0] setStringValue: @"\\t"]; } break; case 5: // up { [obj setKeyEquivalent: upString]; } break; case 6: // down { [obj setKeyEquivalent: dnString]; } break; case 7: // left { [obj setKeyEquivalent: ltString]; } break; case 8: // right { [obj setKeyEquivalent: rtString]; } break; default: // should never happen.. { [obj setKeyEquivalent: nil]; NSLog(@"This shouldn't happen."); } break; } } else if (sender == optionMatrix) { BOOL flag; flag = ([[sender cellAtRow: 0 column: 0] state] == NSOnState) ? YES : NO; [obj setBordered: flag]; flag = ([[sender cellAtRow: 1 column: 0] state] == NSOnState) ? YES : NO; [obj setContinuous: flag]; flag = ([[sender cellAtRow: 2 column: 0] state] == NSOnState) ? YES : NO; [obj setEnabled: flag]; [obj setState: [[sender cellAtRow: 3 column: 0] state]]; flag = ([[sender cellAtRow: 4 column: 0] state] == NSOnState) ? YES : NO; [obj setTransparent: flag]; } else if (sender == tagForm) { [(NSButton *)obj setTag: [[sender cellAtIndex: 0] intValue]]; } else if (sender == titleForm) { NSString *string; NSImage *image; [obj setTitle: [[sender cellAtIndex: 0] stringValue]]; [obj setAlternateTitle: [[sender cellAtIndex: 1] stringValue]]; string = [[sender cellAtIndex: 2] stringValue]; if ([string length] > 0) { image = [NSImage imageNamed: string]; [obj setImage: image]; } string = [[sender cellAtIndex: 3] stringValue]; if ([string length] > 0) { image = [NSImage imageNamed: string]; [obj setAlternateImage: image]; } } else if (sender == typeButton) { [obj setButtonType: [[sender selectedItem] tag]]; } else if (sender == bezelButton) { [obj setBezelStyle: [[sender selectedItem] tag]]; } else if (sender == altMod) { if ([altMod state] == NSOnState) { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] | NSAlternateKeyMask]; } else { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] & ~NSAlternateKeyMask]; } } else if (sender == ctrlMod) { if ([ctrlMod state] == NSOnState) { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] | NSControlKeyMask]; } else { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] & ~NSControlKeyMask]; } } else if (sender == shiftMod) { if ([shiftMod state] == NSOnState) { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] | NSShiftKeyMask]; } else { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] & ~NSShiftKeyMask]; } } else if (sender == cmdMod) { if ([cmdMod state] == NSOnState) { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] | NSCommandKeyMask]; } else { [obj setKeyEquivalentModifierMask: [obj keyEquivalentModifierMask] & ~NSCommandKeyMask]; } } if ([object respondsToSelector: @selector(prototype)]) { [object setPrototype: obj]; } [super ok: sender]; } -(void) revert: (id)sender { NSImage *image; id obj = object; if ([object respondsToSelector: @selector(prototype)]) { obj = [object prototype]; } if(sender != nil) { NSString *key = VSTR([obj keyEquivalent]); unsigned int flags = [obj keyEquivalentModifierMask]; [alignMatrix selectCellWithTag: [obj alignment]]; [iconMatrix selectCellWithTag: [obj imagePosition]]; [[keyForm cellAtIndex: 0] setStringValue: key]; if ([key isEqualToString: @"\r"]) { [keyEquiv selectItemAtIndex: 1]; } else if ([key isEqualToString: @"\b"]) { [keyEquiv selectItemAtIndex: 2]; } else if ([key isEqualToString: @"\E"]) { [keyEquiv selectItemAtIndex: 3]; } else if ([key isEqualToString: @"\t"]) { [keyEquiv selectItemAtIndex: 4]; } else if ([key isEqualToString: upString]) { [keyEquiv selectItemAtIndex: 5]; } else if ([key isEqualToString: dnString]) { [keyEquiv selectItemAtIndex: 6]; } else if ([key isEqualToString: ltString]) { [keyEquiv selectItemAtIndex: 7]; } else if ([key isEqualToString: rtString]) { [keyEquiv selectItemAtIndex: 8]; } else { [keyEquiv selectItemAtIndex: 0]; } [optionMatrix deselectAllCells]; if ([obj isBordered]) [optionMatrix selectCellAtRow: 0 column: 0]; if ([obj isContinuous]) [optionMatrix selectCellAtRow: 1 column: 0]; if ([obj isEnabled]) [optionMatrix selectCellAtRow: 2 column: 0]; if ([obj state] == NSOnState) [optionMatrix selectCellAtRow: 3 column: 0]; if ([obj isTransparent]) [optionMatrix selectCellAtRow: 4 column: 0]; [[tagForm cellAtIndex: 0] setIntValue: [(NSButton *)obj tag]]; [[titleForm cellAtIndex: 0] setStringValue: VSTR([obj title])]; [[titleForm cellAtIndex: 1] setStringValue: VSTR([obj alternateTitle])]; image = [obj image]; if (image != nil) { [[titleForm cellAtIndex: 2] setStringValue: VSTR([image name])]; } else { [[titleForm cellAtIndex: 2] setStringValue: @""]; } image = [obj alternateImage]; if (image != nil) { [[titleForm cellAtIndex: 3] setStringValue: VSTR([image name])]; } else { [[titleForm cellAtIndex: 3] setStringValue: @""]; } // key modifier mask... [altMod setState: NSOffState]; [ctrlMod setState: NSOffState]; [shiftMod setState: NSOffState]; [cmdMod setState: NSOffState]; if(flags & NSAlternateKeyMask) { [altMod setState: NSOnState]; } if(flags & NSControlKeyMask) { [ctrlMod setState: NSOnState]; } if(flags & NSShiftKeyMask) { [shiftMod setState: NSOnState]; } if(flags & NSCommandKeyMask) { [cmdMod setState: NSOnState]; } [typeButton selectItemWithTag: [self buttonTypeForObject: obj]]; [bezelButton selectItemAtIndex: [bezelButton indexOfItemWithTag: [obj bezelStyle]]]; } } - (void)controlTextDidChange:(NSNotification *)aNotification { [self ok: [aNotification object]]; } - (void) selectKeyEquivalent: (id)sender { NSLog(@"Select key equivalent: %d",(int)[[sender selectedItem] tag]); } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormButtonEditor.h000066400000000000000000000021521475375552500271700ustar00rootroot00000000000000/* GormButtonEditor.h - Editor for buttons. * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: Aug 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormButtonEditor_h #define INCLUDED_GormButtonEditor_h #include @class NSTextView; @interface GormButtonEditor : GormControlEditor { NSTextView *tempTextView; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormButtonEditor.m000066400000000000000000000331401475375552500271760ustar00rootroot00000000000000/* GormButtonEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormButtonEditor.h" #define _EO ((NSButton *)_editedObject) @interface NSButtonCell (GormObjectAdditions) - (NSRect) gormTitleRectForFrame: (NSRect) cellFrame inView: (NSView *)controlView; @end @implementation NSButtonCell (GormObjectAdditions) - (NSRect) gormTitleRectForFrame: (NSRect) cellFrame inView: (NSView *)controlView { unsigned mask; NSImage *imageToDisplay; NSRect imageRect; NSString *titleToDisplay; NSRect titleRect = {{0,0},{0,0}}; NSSize imageSize = {0, 0}; NSSize titleSize = {0, 0}; NSColor *backgroundColor = nil; BOOL flippedView = [controlView isFlipped]; NSCellImagePosition ipos = _cell.image_position; cellFrame = [self drawingRectForBounds: cellFrame]; if (_cell.is_highlighted) { mask = _highlightsByMask; if (_cell.state) mask &= ~_showAltStateMask; } else if (_cell.state) mask = _showAltStateMask; else mask = NSNoCellMask; /* Pushed in buttons contents are displaced to the bottom right 1px. */ if (_cell.is_bordered && (mask & NSPushInCellMask)) { cellFrame = NSOffsetRect(cellFrame, 1., flippedView ? 1. : -1.); } /* Determine the background color. */ if (mask & (NSChangeGrayCellMask | NSChangeBackgroundCellMask)) { backgroundColor = [NSColor selectedControlColor]; } if (backgroundColor == nil) backgroundColor = [NSColor controlBackgroundColor]; /* * Determine the image and the title that will be * displayed. If the NSContentsCellMask is set the * image and title are swapped only if state is 1 or * if highlighting is set (when a button is pushed it's * content is changed to the face of reversed state). */ if (mask & NSContentsCellMask) { imageToDisplay = _altImage; if (!imageToDisplay) imageToDisplay = _cell_image; titleToDisplay = _altContents; if (titleToDisplay == nil || [titleToDisplay isEqual: @""]) titleToDisplay = _contents; } else { imageToDisplay = _cell_image; titleToDisplay = _contents; } if (imageToDisplay) { imageSize = [imageToDisplay size]; } titleSize = [self _sizeText: titleToDisplay]; if (flippedView == YES) { if (ipos == NSImageAbove) { ipos = NSImageBelow; } else if (ipos == NSImageBelow) { ipos = NSImageAbove; } } switch (ipos) { case NSNoImage: imageToDisplay = nil; titleRect = cellFrame; { int heightDiff = titleRect.size.height - titleSize.height; titleRect.origin.y += heightDiff - heightDiff / 2; titleRect.size.height -= heightDiff; } break; case NSImageOnly: titleToDisplay = nil; imageRect = cellFrame; break; case NSImageLeft: imageRect.origin = cellFrame.origin; imageRect.size.width = imageSize.width; imageRect.size.height = cellFrame.size.height; if (_cell.is_bordered || _cell.is_bezeled) { imageRect.origin.x += 3; imageRect.size.height -= 2; imageRect.origin.y += 1; } titleRect = imageRect; titleRect.origin.x += imageSize.width + GSCellTextImageXDist; titleRect.size.width = cellFrame.size.width - imageSize.width - GSCellTextImageXDist; if (_cell.is_bordered || _cell.is_bezeled) { titleRect.size.width -= 3; } { int heightDiff = titleRect.size.height - titleSize.height; titleRect.origin.y += heightDiff - heightDiff / 2; titleRect.size.height -= heightDiff; } break; case NSImageRight: imageRect.origin.x = NSMaxX(cellFrame) - imageSize.width; imageRect.origin.y = cellFrame.origin.y; imageRect.size.width = imageSize.width; imageRect.size.height = cellFrame.size.height; if (_cell.is_bordered || _cell.is_bezeled) { imageRect.origin.x -= 3; imageRect.size.height -= 2; imageRect.origin.y += 1; } titleRect.origin = cellFrame.origin; titleRect.size.width = cellFrame.size.width - imageSize.width - GSCellTextImageXDist; titleRect.size.height = cellFrame.size.height; if (_cell.is_bordered || _cell.is_bezeled) { titleRect.origin.x += 3; titleRect.size.width -= 3; } { int heightDiff = titleRect.size.height - titleSize.height; titleRect.origin.y += heightDiff - heightDiff / 2; titleRect.size.height -= heightDiff; } break; case NSImageAbove: /* * In this case, imageRect is all the space we can allocate * above the text. * The drawing code below will then center the image in imageRect. */ titleRect.origin.x = cellFrame.origin.x; titleRect.origin.y = cellFrame.origin.y; titleRect.size.width = cellFrame.size.width; titleRect.size.height = titleSize.height; imageRect.origin.x = cellFrame.origin.x; imageRect.origin.y = cellFrame.origin.y; imageRect.origin.y += titleRect.size.height + GSCellTextImageYDist; imageRect.size.width = cellFrame.size.width; imageRect.size.height = cellFrame.size.height; imageRect.size.height -= titleSize.height + GSCellTextImageYDist; if (_cell.is_bordered || _cell.is_bezeled) { imageRect.size.width -= 6; imageRect.origin.x += 3; titleRect.size.width -= 6; titleRect.origin.x += 3; imageRect.size.height -= 1; titleRect.size.height -= 1; } break; case NSImageBelow: /* * In this case, imageRect is all the space we can allocate * below the text. * The drawing code below will then center the image in imageRect. */ titleRect.origin.x = cellFrame.origin.x; titleRect.origin.y = cellFrame.origin.y + cellFrame.size.height; titleRect.origin.y -= titleSize.height; titleRect.size.width = cellFrame.size.width; titleRect.size.height = titleSize.height; imageRect.origin.x = cellFrame.origin.x; imageRect.origin.y = cellFrame.origin.y; imageRect.size.width = cellFrame.size.width; imageRect.size.height = cellFrame.size.height; imageRect.size.height -= titleSize.height + GSCellTextImageYDist; if (_cell.is_bordered || _cell.is_bezeled) { imageRect.size.width -= 6; imageRect.origin.x += 3; titleRect.size.width -= 6; titleRect.origin.x += 3; imageRect.size.height -= 1; imageRect.origin.y += 1; } break; case NSImageOverlaps: titleRect = cellFrame; imageRect = cellFrame; { int heightDiff = titleRect.size.height - titleSize.height; titleRect.origin.y += heightDiff - heightDiff / 2; titleRect.size.height -= heightDiff; } break; } return titleRect; } @end static BOOL done_editing; static NSRect oldFrame; @implementation GormButtonEditor - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if ([name isEqual: NSControlTextDidEndEditingNotification] == YES) { done_editing = YES; } else if([name isEqual: IBWillSaveDocumentNotification] == YES) { done_editing = YES; [[NSNotificationCenter defaultCenter] removeObserver: self name: IBWillSaveDocumentNotification object: nil]; [tempTextView resignFirstResponder]; [tempTextView removeFromSuperview]; [tempTextView setDelegate: nil]; tempTextView = nil; } } - (void) textDidChange: (NSNotification *)aNotification { [_EO setTitle: [[aNotification object] string]]; [_EO setNeedsDisplay: NO]; [[(id)[NSApp delegate] inspectorsManager] updateSelection]; } - (void) textDidEndEditing: (NSNotification *)aNotification { [[aNotification object] setDelegate: nil]; [_EO setTitle: [[aNotification object] string]]; [[aNotification object] removeFromSuperview]; { NSSize suggestedSize; NSRect newFrame = [_EO frame]; suggestedSize = [[_EO cell] cellSize]; if (suggestedSize.width > newFrame.size.width) { newFrame.origin.x = newFrame.origin.x - (int)((suggestedSize.width - newFrame.size.width) / 2); newFrame.size.width = suggestedSize.width; [_EO setFrame: newFrame]; [[self window] disableFlushWindow]; [[self window] display]; [[self window] enableFlushWindow]; [[self window] flushWindow]; } } } /* Edit a textfield. If it's not already editable, make it so, then edit it */ - (NSEvent *) editTextField: view withEvent: (NSEvent *)theEvent { unsigned eventMask; BOOL wasEditable; BOOL didDrawBackground; NSTextField *editField; NSRect frame; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSDate *future = [NSDate distantFuture]; NSEvent *e; editField = view; frame = [editField frame]; wasEditable = [editField isEditable]; [editField setEditable: YES]; didDrawBackground = [editField drawsBackground]; [editField setDrawsBackground: YES]; [nc addObserver: self selector: @selector(handleNotification:) name: NSControlTextDidEndEditingNotification object: nil]; /* Do some modal editing */ [editField selectText: self]; eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask | NSKeyDownMask | NSKeyUpMask | NSFlagsChangedMask; done_editing = NO; while (!done_editing) { NSEventType eType; e = [[NSApp delegate] nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; switch (eType) { case NSLeftMouseDown: { NSPoint dp = [self convertPoint: [e locationInWindow] fromView: nil]; if (NSMouseInRect(dp, frame, NO) == NO) { done_editing = YES; break; } } [[editField currentEditor] mouseDown: e]; break; case NSLeftMouseUp: [[editField currentEditor] mouseUp: e]; break; case NSLeftMouseDragged: [[editField currentEditor] mouseDragged: e]; break; case NSKeyDown: [[editField currentEditor] keyDown: e]; break; case NSKeyUp: [[editField currentEditor] keyUp: e]; break; case NSFlagsChanged: [[editField currentEditor] flagsChanged: e]; break; default: NSLog(@"Internal Error: Unhandled event during editing: %@", e); break; } } [editField setEditable: wasEditable]; [editField setDrawsBackground: didDrawBackground]; [nc removeObserver: self name: NSControlTextDidEndEditingNotification object: nil]; [[editField currentEditor] resignFirstResponder]; [self setNeedsDisplay: YES]; tempTextView = nil; return e; } - (NSTextView *) startEditingInFrame: (NSRect) frame { NSTextView *textView = [[NSTextView alloc] initWithFrame: frame]; NSTextContainer *textContainer = [textView textContainer]; tempTextView = textView; [textContainer setContainerSize: NSMakeSize(3000, NSHeight([textView frame]))]; [textContainer setWidthTracksTextView: NO]; [textContainer setHeightTracksTextView: NO]; [textView setHorizontallyResizable: NO]; [textView setVerticallyResizable: NO]; [textView setMinSize: frame.size]; [textView setMaxSize: frame.size]; [textView setAutoresizingMask: NSViewMinXMargin | NSViewMaxXMargin]; [textView setSelectable: YES]; [textView setEditable: YES]; [textView setRichText: NO]; [textView setImportsGraphics: NO]; [textView setFieldEditor: YES]; [textView setHorizontallyResizable: YES]; [textView setDelegate: self]; [textView setPostsFrameChangedNotifications:YES]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(textViewFrameChanged:) name: NSViewFrameDidChangeNotification object: textView]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNotification:) name: IBWillSaveDocumentNotification object: nil]; oldFrame = frame; return textView; } - (void) textViewFrameChanged: (NSNotification *)aNot { static BOOL inside = NO; NSRect newFrame; if (inside) return; inside = YES; [[[self window] contentView] setNeedsDisplayInRect: oldFrame]; newFrame = [[aNot object] frame]; if ([[aNot object] alignment] == NSCenterTextAlignment) { NSRect frame = [[_EO cell] gormTitleRectForFrame: [_EO frame] inView: _EO]; int difference = newFrame.size.width - frame.size.width; newFrame.origin.x = frame.origin.x - (int) (difference / 2); [[aNot object] setFrame: newFrame]; oldFrame = newFrame; } [[self superview] setNeedsDisplayInRect: oldFrame]; inside = NO; } - (void) mouseDown: (NSEvent*)theEvent { // double-clicked -> let's edit if (([theEvent clickCount] == 2) && [parent isOpened]) { NSRect frame = [[_EO cell] gormTitleRectForFrame: [_EO frame] inView: _EO]; NSTextView *tv = [self startEditingInFrame: frame]; [[self superview] addSubview: tv]; [tv setText: [_EO title]]; [tv setAlignment: [_EO alignment]]; [tv setFont: [_EO font]]; [[self window] display]; [[self window] makeFirstResponder: tv]; [tv mouseDown: theEvent]; } else { [super mouseDown: theEvent]; } } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellAttributesInspector.h000066400000000000000000000030031475375552500313570ustar00rootroot00000000000000/* GormCellAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormCellAttributesInspector_h #define INCLUDED_GormCellAttributesInspector_h #include @class NSButton; @class NSForm; @interface GormCellAttributesInspector: IBInspector { NSButton *disabledSwitch; NSForm *tagForm; } @end #endif /* INCLUDED_GormCellAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellAttributesInspector.m000066400000000000000000000047051475375552500313760ustar00rootroot00000000000000/* GormCellAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormCellAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSCell (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormCellAttributesInspector"; } @end @implementation GormCellAttributesInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSCellInspector" owner: self] == NO) { NSLog(@"Could not gorm GormCellInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok:(id) sender { if (sender == disabledSwitch) { [object setEnabled: [disabledSwitch state]]; } else if (sender == tagForm) { [object setTag: [[sender cellAtIndex: 0] intValue]]; } [super ok: sender]; } /* Sync from object ( NSCell ) changes to the inspector */ - (void) revert:(id) sender { if ( object == nil) return; [disabledSwitch setState: [object isEnabled]]; [[tagForm cellAtRow: 0 column: 0] setIntValue: [object tag]]; [super revert:sender]; } /* delegate method for tagForm */ - (void)controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellSizeInspector.gorm/000077500000000000000000000000001475375552500307415ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellSizeInspector.gorm/data.classes000066400000000000000000000005751475375552500332400ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "revert:", "setObject:", "touch:" ); Super = NSObject; }; GormCellSizeInspector = { Actions = ( ); Outlets = ( width, height ); Super = IBInspector; }; IBInspector = { Actions = ( "setObject:" ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellSizeInspector.gorm/data.info000066400000000000000000000002701475375552500325260ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellSizeInspector.gorm/objects.gorm000066400000000000000000000074561475375552500332740ustar00rootroot00000000000000GNUstep archive000f4240:0000001a:00000051:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @q @x@JI @ @`01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01NSBox% @K @h  @d @R  @d @RJ-0 &0 % @ @ @b` @I  @b` @IJ0 &0 1 NSTextField1 NSControl% @P @= @T@ @5  @T@ @5J0 &I0 1NSTextFieldCell1 NSActionCell1NSCell0&01NSFont%JJJJJJJJ JJJJJJJI01NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% @= @N @2  @N @2J0 &I00&%Width:0% A@JJJJJJJJ JJJJJJJI0% @P  @T@ @5  @T@ @5J0 &I0JJJJJJJJ JJJJJJJI0%  @N @2  @N @2J0 &I0 0!&%Height:!JJJJJJJJ JJJJJJJI0"0#& % Cell Size0$% A #JJJJJJJJJJJJJJJ @ @%%0%0&&% System0'&% windowBackgroundColor0(&%Window0)&%Inspector Window) ? @9 @Ç @|I&   @ @H0* &0+ &0,1NSMutableDictionary1 NSDictionary& 0-& % TextField(2)0.&%TextFieldCell(3) 0/&%View(1) 00& % TextField(0) 01&%Box(0)02&%TextFieldCell(1)03& % TextField(3)04&% NSOwner05&%GormCellSizeInspector06& % InspectorWin07& % TextField(1)08&%TextFieldCell(2)09&%View(0)0:&%TextFieldCell(0) 0; &0<1NSNibConnector640=960>010?:00@710A270B-10C8-0D310E.30F190G/10H1NSNibControlConnector040I&%ok:0J-4I0K1NSNibOutletConnector460L&%window0M4-0N&%height0O400P&%width0Q&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellSizeInspector.h000066400000000000000000000022631475375552500301520ustar00rootroot00000000000000/* GormViewSizeInspector.m * * Copyright (C) 2021 Free Software Foundation, Inc. * * Author: Gregory John Casamento @interface GormCellSizeInspector : IBInspector { NSTextField *width; NSTextField *height; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormCellSizeInspector.m000066400000000000000000000060331475375552500301560ustar00rootroot00000000000000/* GormCellSizeInspector.m * * Copyright (C) 2021 Free Software Foundation, Inc. * * Author: Gregory Casamento * Date: 2021 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormCellSizeInspector.h" @implementation NSCell (IBObjectAdditions_Matrix) - (NSString *) sizeInspectorClassName { return @"GormCellSizeInspector"; } @end @implementation GormCellSizeInspector + (void) initialize { if (self == [GormCellSizeInspector class]) { } } - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE(window); [super dealloc]; } - (id) init { self = [super init]; if (self != nil) { if ([NSBundle loadNibNamed: @"GormCellSizeInspector" owner: self] == NO) { NSLog(@"Could not open gorm GormViewSizeInspector"); NSLog(@"self %@", self); return nil; } [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(controlTextDidEndEditing:) name: NSControlTextDidEndEditingNotification object: nil]; } return self; } - (void) ok: (id)sender { id document = [(id)[NSApp delegate] activeDocument]; id parent = [document parentOfObject: object]; if ([parent respondsToSelector: @selector(cellSize)]) { NSSize size; CGFloat w = [width doubleValue]; CGFloat h = [height doubleValue]; size.width = w; size.height = h; [parent setCellSize: size]; [parent sizeToCells]; [parent setNeedsDisplay: YES]; // Update the document as edited... [document touch]; } } - (void) revert: (id)sender { NSLog(@"sender = %@",sender); } - (void) controlTextDidEndEditing: (NSNotification*)aNotification { id obj = [aNotification object]; [super ok: obj]; } - (void) setObject: (id)anObject { if (anObject != nil && anObject != object) { id document = [(id)[NSApp delegate] activeDocument]; id parent = [document parentOfObject: anObject]; ASSIGN(object, anObject); if ([parent respondsToSelector: @selector(cellSize)]) { NSSize size = [parent cellSize]; [width setDoubleValue: size.width]; [height setDoubleValue: size.height]; } } } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormColorWellAttributesInspector.h000066400000000000000000000031701475375552500324070ustar00rootroot00000000000000/* GormColorWellAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormColorWellAttributesInspector_h #define INCLUDED_GormColorWellAttributesInspector_h #include @class NSButton; @class NSColorWell; @class NSTextField; @interface GormColorWellAttributesInspector:IBInspector { NSColorWell *initialColorWell; NSButton *disabledSwitch; NSButton *borderedSwitch; NSTextField *tagField; } @end #endif /* INCLUDED_GormColorWellAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormColorWellAttributesInspector.m000066400000000000000000000057511475375552500324230ustar00rootroot00000000000000/* GormColorWellAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormColorWellAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSColorWell (IBObjectAdditions) - (NSString *) inspectorClassName { return @"GormColorWellAttributesInspector"; } @end @implementation GormColorWellAttributesInspector -(id) init { if ( ( self = [super init] ) == nil ) { return nil; } if ([NSBundle loadNibNamed: @"GormNSColorWellInspector" owner: self] == NO) { NSLog(@"Could not open gorm GormNSColorWellInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { if ( sender == initialColorWell ) { [object setColor: [initialColorWell color]]; } else if ( sender == disabledSwitch ) { [object setEnabled: ([disabledSwitch state] == NSOnState)?NO:YES]; // it's being enabled to show it's disabled! } else if ( sender == borderedSwitch ) { [object setBordered: [borderedSwitch state]]; } else if ( sender == tagField ) { [object setTag: [tagField intValue]]; } [super ok:sender]; } /* Sync from object ( NSColorWell ) changes to the inspector */ - (void) revert:(id) sender { if ( object == nil ) return; [disabledSwitch setState: ([object isEnabled])?NSOffState:NSOnState]; // On = NO and Off = YES, since we're tracking the Disabled state. [borderedSwitch setState: [object isBordered]]; [initialColorWell setColorWithoutAction: [object color]]; [tagField setIntValue: [object tag]]; [super revert:sender]; } /* delegate method for tag Field */ - (void)controlTextDidChange:(NSNotification *)aNotification { [self ok: [aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormFormAttributesInspector.h000066400000000000000000000035001475375552500314050ustar00rootroot00000000000000/* GormFormAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormFormAttributesInspector_h #define INCLUDED_GormFormAttributesInspector_h #include @class NSButton; @class NSColorWell; @class NSForm; @class NSMatrix; @class NSStepper; @interface GormFormAttributesInspector: IBInspector { NSButton *cellPositionSwitch; NSButton *editableSwitch; NSButton *selectableSwitch; NSButton *scrollableSwitch; NSButton *autosizeSwitch; id backgroundColorWell; id drawsBackgroundSwitch; id tagForm; id textMatrix; id titleMatrix; NSForm *dimensionsForm; NSStepper *numberStepper; } @end #endif /* INCLUDED_GormFormAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormFormAttributesInspector.m000066400000000000000000000210151475375552500314130ustar00rootroot00000000000000/* GormFormAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory John Casamento Date: 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormFormAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSForm (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormFormAttributesInspector"; } @end @implementation GormFormAttributesInspector NSUInteger numberStepperValue; - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSFormInspector" owner: self] == NO) { NSLog(@"Could not gorm GormFormInspector"); return nil; } /* It shouldn't break functionality of field number changing if someone will decide in the future to change the value of the stepper in the gorm file. So we stores those value from the gorm file in the auxillary variable to use it later in -[ok:]. (It allows us to avoid the value being hardcoded). */ numberStepperValue = [numberStepper intValue]; return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok:(id) sender { NSInteger rows; NSInteger cols; int i; [object getNumberOfRows: &rows columns: &cols]; /* background color */ if (sender == backgroundColorWell) { [object setBackgroundColor: [sender color]]; } else if (sender == drawsBackgroundSwitch) { [object setDrawsBackground: ([sender state] == NSOnState)]; } /* options */ else if (sender == cellPositionSwitch) { BOOL flag; flag = ([cellPositionSwitch state] == NSOnState) ? YES : NO; if (flag == YES) { for (i = 0; i < rows; i++) { [[object cellAtIndex: i] setTag: i]; } } } else if ( sender == editableSwitch ) { BOOL flag = ([editableSwitch state] == NSOnState) ? YES : NO; for (i = 0; i < rows; i++) { [[object cellAtIndex: i] setEditable: flag]; } } else if ( sender == selectableSwitch ) { BOOL flag = ([selectableSwitch state] == NSOnState) ? YES : NO; for (i = 0; i < rows; i++) { [[object cellAtIndex: i] setSelectable: flag]; } } else if ( sender == scrollableSwitch ) { BOOL flag = ([scrollableSwitch state] == NSOnState) ? YES : NO; for (i = 0; i < rows; i++) { [[object cellAtIndex: i] setScrollable: flag]; } } /* text alignment */ else if (sender == textMatrix) { [object setTextAlignment: (NSTextAlignment)[[sender selectedCell] tag]]; } /* title alignment */ else if (sender == titleMatrix) { [object setTitleAlignment: (NSTextAlignment)[[sender selectedCell] tag]]; } /* tag */ else if (sender == tagForm) { [object setTag: [[sender cellAtIndex: 0] intValue]]; } /* autosize */ else if (sender == autosizeSwitch) { BOOL flag = ([autosizeSwitch state] == NSOnState) ? YES : NO; [object setAutosizesCells: flag]; } /* number of fields */ else if(sender == dimensionsForm) { int fields = [[sender cellAtIndex: 0] intValue]; if(fields) // make changes only if the user actions do something meaningful { NSRect rect = [object frame]; NSSize cell = [object cellSize]; NSSize inter = [object intercellSpacing]; while(((rows = [object numberOfRows]) != fields)) { if(rows > fields) { [object removeEntryAtIndex: rows - 1]; // remove last field } else { [object addEntry: [NSString stringWithFormat: @"Field (%ld)", (long)rows]]; } } cell.height = (rect.size.height + inter.height) / fields - inter.height; [object setCellSize: cell]; } [object setNeedsDisplay: YES]; [[object superview] setNeedsDisplay: YES]; } else if(sender == numberStepper) { int delta = [sender intValue] - numberStepperValue; NSRect rect = [object frame]; NSSize cell = [object cellSize]; NSSize inter = [object intercellSpacing]; while(delta > 0) { [object addEntry: [NSString stringWithFormat: @"Field (%ld)", (long)rows]]; delta--; rows++; } while((delta < 0) && (rows > 1)) { [object removeEntryAtIndex: rows - 1]; rows--; delta++; } cell.height = (rect.size.height + inter.height) / rows - inter.height; [object setCellSize: cell]; [[dimensionsForm cellAtIndex: 0] setIntValue: rows]; [sender setIntValue: numberStepperValue]; [dimensionsForm setNeedsDisplay: YES]; [object setNeedsDisplay: YES]; } [super ok:sender]; } /* Sync from object ( NSForm ) changes to the inspector */ - (void) revert: (id) sender { if ( object == nil ) { return; } /* background color */ [backgroundColorWell setColorWithoutAction: [object backgroundColor]]; [drawsBackgroundSwitch setState: ([object drawsBackground]) ? NSOnState : NSOffState]; /* alignments */ [textMatrix selectCellWithTag: [[object cellAtIndex: 0] alignment]]; [titleMatrix selectCellWithTag: [[object cellAtIndex: 0] titleAlignment]]; /* options */ [editableSwitch setState:[[object cellAtIndex: 0] isEditable]]; [selectableSwitch setState:[[object cellAtIndex: 0] isSelectable]]; [scrollableSwitch setState:[[object cellAtIndex: 0] isScrollable]]; [autosizeSwitch setState: [object autosizesCells]]; // Cells tags = position is not directly stored in the Form so guess it. { NSInteger rows; NSInteger cols; int i; BOOL flag; [object getNumberOfRows: &rows columns: &cols]; i = 0; do { flag = ([[object cellAtIndex: i] tag] == i); } while (flag && (++i < rows)); if (flag) { [cellPositionSwitch setState:NSOnState]; } } /* number of fields */ [[dimensionsForm cellAtIndex: 0] setIntValue: [object numberOfRows]]; /* tag */ [[tagForm cellAtRow: 0 column: 0] setIntValue: [object tag]]; [super revert:sender]; } /* delegate method for tagForm */ -(void) controlTextDidChange:(NSNotification*) aNotification { [self ok:[aNotification object]]; } /* The button type isn't stored in the button, so reverse-engineer it */ - (NSButtonType) buttonTypeForObject: button { NSButtonCell *cell; NSButtonType type; int highlight, stateby; /* We could be passed the button or the cell */ cell = ([button isKindOfClass: [NSButton class]]) ? [button cell] : button; highlight = [cell highlightsBy]; stateby = [cell showsStateBy]; NSDebugLog(@"highlight = %d, stateby = %d", (int)[cell highlightsBy],(int)[cell showsStateBy]); type = NSMomentaryPushButton; if (highlight == NSChangeBackgroundCellMask) { if (stateby == NSNoCellMask) type = NSMomentaryLight; else type = NSOnOffButton; } else if (highlight == (NSPushInCellMask | NSChangeGrayCellMask)) { if (stateby == NSNoCellMask) type = NSMomentaryPushButton; else type = NSPushOnPushOffButton; } else if (highlight == (NSPushInCellMask | NSContentsCellMask)) { type = NSToggleButton; } else if (highlight == NSContentsCellMask) { if (stateby == NSNoCellMask) type = NSMomentaryChangeButton; else type = NSToggleButton; /* Really switch or radio. What should it be? */ } else { NSDebugLog(@"Ack! no button type"); } return type; } /* We may need to reset some parameters based on the previous type */ - (void) setButtonType: (NSButtonType)type forObject: (id)button { [object setButtonType: type]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormMatrixAttributesInspector.h000066400000000000000000000034371475375552500317570ustar00rootroot00000000000000/* GormMatrixdAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormMatrixAttributesInspector_h #define INCLUDED_GormMatrixAttributesInspector_h #include @class NSButton; @class NSColorWell; @class NSForm; @class NSMatrix; @class NSStepper; @interface GormMatrixAttributesInspector:IBInspector { NSButton *autosizeSwitch; NSButton *autotagSwitch; NSColorWell *backgroundColorWell; NSButton *drawsBackgroundSwitch; NSMatrix *modeMatrix; NSButton *propagateSwitch; NSMatrix *prototypeMatrix; NSButton *selRectSwitch; NSForm *tagForm; NSForm *rowsForm; NSForm *colsForm; NSStepper *rowsStepper; NSStepper *colsStepper; } @end #endif /* INCLUDED_GormMatrixAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormMatrixAttributesInspector.m000066400000000000000000000244741475375552500317700ustar00rootroot00000000000000/* GormMatrixdAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormMatrixAttributesInspector.h" #include #include @implementation NSMatrix (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormMatrixAttributesInspector"; } @end @implementation GormMatrixAttributesInspector NSUInteger rowsStepperValue; NSUInteger colsStepperValue; - (void) _displayObject: (id)obj resize: (BOOL)resize { id document = [(id)[NSApp delegate] documentForObject: obj]; id editor = [document editorForObject: obj create: NO]; NSRect eoFrame = [editor frame]; if (resize == NO) { NSRect rect = [obj frame]; NSSize cell = [obj cellSize]; NSSize inter = [obj intercellSpacing]; cell.width = (rect.size.width + inter.width) / colsStepperValue - inter.width; cell.height = (rect.size.height + inter.height) / rowsStepperValue - inter.height; [object setCellSize: cell]; } else { [obj sizeToCells]; } [obj setNeedsDisplay: YES]; [[editor superview] setNeedsDisplayInRect: GormExtBoundsForRect(eoFrame)]; } - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSMatrixInspector" owner: self] == NO) { NSLog(@"Could not gorm GormMatrixInspector"); return nil; } /* It shouldn't break functionality of rows/columns number changing if someone will decide in the future to change the values of the corresponding steppers in the gorm file. So we stores those values from the gorm file in the auxillary variables to use its later in -[ok:]. (It allows us to avoid the values being hardcoded). */ rowsStepperValue = [rowsStepper intValue]; colsStepperValue = [colsStepper intValue]; return self; } - (void) _refreshCellsComparingWithOldCells: (NSArray *)oldCells { id document = [(id)[NSApp delegate] activeDocument]; NSArray *newCells = [[self object] cells]; NSUInteger newCount = [newCells count]; NSUInteger oldCount = [oldCells count]; NSMutableArray *cellsAdded = [NSMutableArray arrayWithCapacity: newCount]; NSMutableArray *cellsRemoved = [NSMutableArray arrayWithCapacity: newCount]; NSEnumerator *en = nil; NSCell *c = nil; if (newCount > oldCount) { en = [newCells objectEnumerator]; while ((c = [en nextObject]) != nil) { if ([oldCells containsObject: c] == NO) { [cellsAdded addObject: c]; // object is new } } [document attachObjects: cellsAdded toParent: [self object]]; } else if (oldCount > newCount) { en = [oldCells objectEnumerator]; while ((c = [en nextObject]) != nil) { if ([newCells containsObject: c] == NO) { [cellsRemoved addObject: c]; // object is new } } [document detachObjects: cellsRemoved closeEditors: NO]; } else { NSLog(@"No change"); } } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { if (sender == autosizeSwitch) { [object setAutosizesCells: ([sender state] == NSOnState)]; } else if (sender == autotagSwitch) { NSInteger rows; NSInteger cols; int i; [object getNumberOfRows: &rows columns: &cols]; if ((rows == 1) && (cols > 1)) { for (i = 0; i < cols; i++) { [[object cellAtRow:0 column:i] setTag: i]; } } else if ((rows > 1) && (cols ==1)) { for (i = 0; i < rows; i++) { [[object cellAtRow:i column:0] setTag: i]; } } } else if (sender == backgroundColorWell) { [object setBackgroundColor: [sender color]]; } else if (sender == drawsBackgroundSwitch) { [object setDrawsBackground: ([sender state] == NSOnState)]; } else if (sender == modeMatrix) { [(NSMatrix *)object setMode: [[sender selectedCell] tag]]; } else if (sender == propagateSwitch) { NSButtonCell *cell; NSInteger tag; NSString *title; int c; if ([object prototype] == nil) { NSLog(@"prototype is nil, using first cell in matrix"); if ([object cells] > 0) { NSCell *acell = [[object cells] objectAtIndex: 0]; [object setPrototype: acell]; NSLog(@"prototype set %@", acell); } } if ([object prototype] != nil) { for (c = 0; c < [object numberOfColumns]; c++) { int r; for (r = 0; r < [object numberOfRows]; r++) { cell = [object cellAtRow: r column: c]; tag = [cell tag]; title = [cell title]; cell = [[object prototype] copy]; [cell setTag: tag]; [cell setTitle: title]; [object putCell:cell atRow:r column:c]; [cell release]; } } } [object deselectAllCells]; [object selectCellAtRow: 0 column: 0]; } else if (sender == selRectSwitch) { [object setSelectionByRect: ([sender state] == NSOnState)]; } else if (sender == tagForm) { [object setTag: [[sender cellAtIndex: 0] intValue]]; } else if (sender == rowsForm || sender == colsForm) { int rows = [[rowsForm cellAtIndex: 0] intValue]; int cols = [[colsForm cellAtIndex: 0] intValue]; int num = 0; NSArray *oldCells = [NSArray arrayWithArray: [[self object] cells]]; while((num = [object numberOfRows]) != rows) { if(num > rows) { [object removeRow: num - 1]; // remove last row } else { [object addRow]; } } while((num = [object numberOfColumns]) != cols) { if(num > cols) { [object removeColumn: num - 1]; // remove last column } else { [object addColumn]; } } [self _displayObject: object resize: YES]; [self _refreshCellsComparingWithOldCells: oldCells]; } else if(sender == rowsStepper) { int delta = [sender intValue] - rowsStepperValue; int num = [object numberOfRows]; NSArray *oldCells = [NSArray arrayWithArray: [[self object] cells]]; while(delta > 0) { [object addRow]; delta--; num++; } while((delta < 0) && (num > 1)) { [object removeRow: num - 1]; num--; delta++; } [[rowsForm cellAtIndex: 0] setIntValue: num]; [sender setIntValue: num]; rowsStepperValue = num; [self _displayObject: object resize: YES]; [self _refreshCellsComparingWithOldCells: oldCells]; } else if(sender == colsStepper) { int delta = [sender intValue] - colsStepperValue; int num = [object numberOfColumns]; NSArray *oldCells = [NSArray arrayWithArray: [[self object] cells]]; while(delta > 0) { [object addColumn]; delta--; num++; } while((delta < 0) && (num > 1)) { [object removeColumn: num - 1]; num--; delta++; } [[colsForm cellAtIndex: 0] setIntValue: num]; [sender setIntValue: num]; colsStepperValue = num; [self _displayObject: object resize: YES]; [self _refreshCellsComparingWithOldCells: oldCells]; } /* * prototypeMatrix * If prototype cell is set show it else show a matrix cell */ if ([object prototype] == nil) { [prototypeMatrix putCell: [object cellAtRow:0 column:0] atRow:0 column:0]; } else { [prototypeMatrix putCell: [object prototype] atRow:0 column:0]; } [super ok:sender]; } /* Sync from object ( NSMatrix ) changes to the inspector */ - (void) revert:(id)sender { if (object == nil) return; [autosizeSwitch setState: ([object autosizesCells]) ? NSOnState : NSOffState]; { NSInteger rows; NSInteger cols; [object getNumberOfRows: &rows columns: &cols]; if ((rows == 1 && cols > 1) || (cols == 1 && rows > 1)) [autotagSwitch setEnabled: YES]; else [autotagSwitch setEnabled: NO]; } [backgroundColorWell setColorWithoutAction: [object backgroundColor]]; [drawsBackgroundSwitch setState: ([object drawsBackground]) ? NSOnState : NSOffState]; [modeMatrix selectCellWithTag: [(NSMatrix *)object mode]]; if ([object prototype] == nil) [prototypeMatrix putCell: [object cellAtRow:0 column:0] atRow:0 column:0]; else [prototypeMatrix putCell: [object prototype] atRow:0 column:0]; [selRectSwitch setState: ([object isSelectionByRect]) ? NSOnState : NSOffState]; [[tagForm cellAtIndex: 0] setIntValue: [object tag]]; rowsStepperValue = [object numberOfRows]; [[rowsForm cellAtIndex: 0] setIntValue: rowsStepperValue]; [rowsStepper setIntValue: rowsStepperValue]; colsStepperValue = [object numberOfColumns]; [[colsForm cellAtIndex: 0] setIntValue: colsStepperValue]; [colsStepper setIntValue: colsStepperValue]; [super revert:sender]; } /* delegate method for tag Form */ - (void) controlTextDidEndEditing: (NSNotification*)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSBoxInspector.gorm/000077500000000000000000000000001475375552500302205ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSBoxInspector.gorm/data.classes000066400000000000000000000004601475375552500325100ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormBoxAttributesInspector = { Actions = ( ); Outlets = ( borderMatrix, horizontalSlider, positionMatrix, titleForm, verticalSlider, colorWell, backgroundSwitch ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSBoxInspector.gorm/data.info000066400000000000000000000002701475375552500320050ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSBoxInspector.gorm/objects.gorm000066400000000000000000000460121475375552500325420ustar00rootroot00000000000000GNUstep archive000f4240:00000025:00000167:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @w  @p @wJ-0 &0 %  @p @w  @p @wJ0 &0 % @R@ @n @] @Q  @] @QJ 0 &0 % @ @ @Y @L  @Y @LJ0 &01NSTextFieldCell1 NSActionCell1NSCell0&%Box01NSFont% A@&&&&&&JJ &&&&&&&I01NSColor0&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0 ? @ @%%01NSForm1NSMatrix1 NSControl% @ @v0 @o @5  @o @5J 0% @W @k @R @]  @R @]J 0 &%00&&&&&&&JJ&&&&&&&I% @R @0 ? ?00&% NSNamedColorSpace0&% System0&% controlBackgroundColor0 ?* ?* ?* ?* ?0& % NSButtonCell0 1 NSButtonCell0!&%Button&&&&&&JJ&&&&&&&I&&& &&%%0" &0#0$& % Above Top&&&&&&JJ&&&&&&&I&&& &&0%0&&%Top&&&&&&JJ&&&&&&&I&&& &&0'0(& % Below Top&&&&&&JJ&&&&&&&I&&& &&0)0*&%No Title&&&&&&JJ&&&&&&&I&&& &&0+0,& % Above Bottom&&&&&&JJ&&&&&&&I&&& &&0-0.&%Bottom&&&&&&JJ&&&&&&&I&&& &&0/00& % Below Bottom&&&&&&JJ&&&&&&&I&&& &&2 ok:v24@0:8@16%01 &%021 NSFormCell&&&&&&JJ&&&&&&&I 0304&%Field:&&&&&&JJ&&&&&&&% @o @5 @05 ?* ?* ?* ?* ?06& % NSFormCell%%07 &08&&&&&&JJ&&&&&&&I A090:&%Title&&&&&&JJ&&&&&&&80; % @R@ @b @] @L  @] @LJ 0< &0= % @ @ @Y @>  @Y @>J0> &0?% @ @ @Y @:  @Y @:J0@ &%0A&&&&&&JJ&&&&&&&I% @9 @: 0B ?* ?* ?* ?* ?B0C& % NSButtonCell0D0E&%Button&&&&&&JJ&&&&&&&I&&& &&%%0F &0GE0H1NSImage0I& % noBorder_nib&&&&&&JJ&&&&&&&I&&& &&0J0K0L&%line_nib&&&&&&JJ&&&&&&&I&&& &&0M0N0O& % bezel_nib&&&&&&JJ&&&&&&&I&&& &&0P0Q0R& % ridge_nib&&&&&&JJ&&&&&&&I&&& &&P0S0T&%Border0U%&&&&&&JJ&&&&&&& @ @%%0V % @ @V @_ @L  @_ @LJ 0W &0X % @ @ @\ @>  @\ @>J0Y &0Z1 NSTextField% @ @2 @Y @*  @Y @*J0[ &%0\0]&%0 1 2 3 4 5 6 7 8 90^% A ]&&&&&&JJ &&&&&&&I0_0`&% NSCalibratedWhiteColorSpace > ?0a % ? ? @[ @2  @[ @2J0b &0c % @ @ @Z @,  @Z @,J0d &0e1NSSlider%  @[@ @0  @[@ @0J0f &%0g1 NSSliderCell0h&%00i1NSNumber1NSValued &&&&&&JJ&&&&&&&I A %0j&&&&&&JJ &&&&&&&I0k ? ? ? ? ?0l ?0m0n0o&%common_SliderHoriz&&&&&&JJ&&&&&&&I %0p0q&%Title^&&&&&&JJ&&&&&&& %%0r0s&%Horizontal OffsetU&&&&&&JJ&&&&&&& @ @%%0t % @a @V @_ @L  @_ @LJ 0u &0v % @ @ @\ @>  @\ @>J0w &0x % ? ? @[ @2  @[ @2J0y &0z % @ @ @Z @,  @Z @,J0{ &0|%  @[@ @0  @[@ @0J0} &%0~0&%0i&&&&&&JJ&&&&&&&I A %0&&&&&&JJ &&&&&&&I0 ? ? ? ? ?0 ?0n&&&&&&JJ&&&&&&&I %0q^&&&&&&JJ&&&&&&& %%0% @ @2 @Y @*  @Y @*J0 &%00&%0 1 2 3 4 5 6 7 8 9^&&&&&&JJ &&&&&&&I0` > ?00&%Vertical OffsetU&&&&&&JJ&&&&&&& @ @%%0 % @O @ @a` @T  @a` @TJ 0 &0 % @ @ @_@ @L  @_@ @LJ0 &01 NSColorWell% @B @8 @J @>  @J @>J0 &%0U&&&&&&JJ&&&&&&&0` ?* ?01NSButton% @ @ @^ @0  @^ @0J%0 &%00&%Draws Background001 NSMutableString&%GSSwitchU&&&&&&JJ&&&&&&&I00 &%GSSwitchSelected&&& &&00& % Title CellU&&&&&&JJ&&&&&&& @ @%%00&^&&&&&&JJ&&&&&&& %%00&% windowBackgroundColor0&%Window0&%NSBox Inspector ? @m  @Ç @|I&   @ @p0 &0 &01!NSMutableDictionary1" NSDictionary&30& % SliderCell(1)~0& % FormCell(0)80& % ButtonCell(2)M0& % ButtonCell(7)0(&&&&&&JJ&&&&&&&I&&& &&0&%TextFieldCell(0)0&%Box(0)a0& % ActionCell(0)A0&%Box 0&%Form10&%View(3) 0&%Matrix2?0&%Slider1e0&%Box2t0& % InspectorWin0&%ButtonCell(10)0.&&&&&&JJ&&&&&&&I&&& &&0& % ButtonCell(0)G0& % ButtonCell(5)0$&&&&&&JJ&&&&&&&I&&& &&0& % TextFieldZ0&%View(1)z0&%View(6)v0&%Slider3|0&%Box4;0& % TextField(0)0& % FormCell(1)20±& % ButtonCell(3)P0ñ& % ButtonCell(8)0ı*&&&&&&JJ&&&&&&&I&&& &&0ű&%TextFieldCell(1)\0Ʊ& % ActionCell(1)0DZ&%Box(1)x0ȱ& % ColorWell0ɱ&%View(4)=0ʱ&%Matrix10˱% @'  @P @T  @P @TJ0̱ &%0ͱ&&&&&&JJ&&&&&&&I% @P @3@ ? ?0α ?* ?* ?* ?* ?0ϱ& % NSButtonCell0б0ѱ&%Radio0ұ0ӱ &%GSRadio&&&&&&JJ&&&&&&&I0Ա0ձ &%GSRadioSelected&&& &&%%0ֱ &0ױ0ر&%NoneҰ&&&&&&JJ&&&&&&&I&&& &&0ٱ0ڱ&%LineҰ&&&&&&JJ&&&&&&&I&&& &&0۱0ܱ&%BezelҰ&&&&&&JJ&&&&&&&I&&& &&0ݱ0ޱ&%GrooveҰ&&&&&&JJ&&&&&&&I&&& &&0߱&%Box1V0& % SliderCell(0)g0&%ButtonCell(11)00&&&&&&JJ&&&&&&&I&&& &&0& % ButtonCell(1)J0& % ButtonCell(6)0&&&&&&&JJ&&&&&&&I&&& &&0&%Button0&%View(2) 0&%View(7)0&%Matrix0&%Slider20% @S @3 @T @0  @T @0J0 &%0&&&&&&JJ&&&&&&&I ? %0&&&&&&JJ &&&&&&&I0 ? ? ? ? ?0 ?0n&&&&&&JJ&&&&&&&I%0&%Box30&% NSOwner0&%GormBoxAttributesInspector0& % ButtonCell(4)0& % ButtonCell(9)0,&&&&&&JJ&&&&&&&I&&& &&0&%Box(2)0&%View(5)X0&%View(0)c0&%Slider0% @S @3 @T @0  @T @0J0 &%0&&&&&&JJ&&&&&&&I ? %0&&&&&&JJ &&&&&&&IP ? ? ? ? ?P ?Pn&&&&&&JJ&&&&&&&I%P&%Cell(0)P &JJP1#NSNibConnectorP&% NSOwnerP#P#ʰP 1$NSNibOutletConnectorP &%windowP #P $P &%positionMatrixP#P#P#갵P1%NSNibControlConnectorP&%ok:P%P$P&%initialFirstResponderP$P& % nextKeyViewP#P#ɐP$P & % borderMatrixP#߰P#P#P$P &%horizontalSliderP!#P"#P#$P$ &%verticalSliderP%%P& &%ok:P'%&P(%&P)#P*#ȰP+#P,$P- & % colorWellP.$P/&%backgroundSwitchP0%P1 &%ok:P2%1P3$鰲P4 & % nextKeyViewP5$4P6$4P7$4P8$Ȱ4P9$氰4P:$P; &%delegateP<$P= & % titleFormP>#P?#P@#ళPA#ǰPB#ǐPC#PD#PE#PF#PG#PH#PI#PJ#PK#ɰPL#PM#㰲PN#PO#°PP#PQ#ߐPR#ŰPS#PT#PU#ȐPV#PW#PX#PY#PZ#ðP[#P\#P]#P^#ưP_!&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSButtonInspector.gorm/000077500000000000000000000000001475375552500307435ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSButtonInspector.gorm/data.classes000066400000000000000000000005511475375552500332340ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormButtonInspector = { Actions = ( ); Outlets = ( alignMatrix, iconMatrix, keyForm, optionMatrix, tagForm, titleForm, typeButton, keyEquiv, altMod, ctrlMod, shiftMod, cmdMod, bezelButton ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSButtonInspector.gorm/data.info000066400000000000000000000002701475375552500325300ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSButtonInspector.gorm/objects.gorm000066400000000000000000000617121475375552500332710ustar00rootroot00000000000000GNUstep archive000f4240:00000024:00000242:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @801 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @1 @p @v  @p @vJ-0 &0 %  @p @v  @p @vJ0 &  0 1NSForm1NSMatrix1 NSControl% ? @pP @pP @W@  @pP @W@J 0 &%0 1 NSFormCell1 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @pP @5 @01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I B400&%Title:&&&&&&JJ&&&&&&&0&&&&&&JJ&&&&&&&I B400& % Alt Title:&&&&&&JJ&&&&&&&0 &&&&&&JJ&&&&&&&I B40!0"&%Icon:&&&&&&JJ&&&&&&&0#&&&&&&JJ&&&&&&&I B40$0%& % Alt Icon:&&&&&&JJ&&&&&&&2 ok:v24@0:8@16#0&% @6 @m @L @5  @L @5J 0' &%0(&&&&&&JJ&&&&&&&I 0)0*&%Field:&&&&&&JJ&&&&&&&% @L @5 @0+ ?* ?* ?* ?* ?0,& % NSFormCell%%0- &0.&&&&&&JJ&&&&&&&I A0/00&%Tag:0&&&&&&JJ&&&&&&&.01% @U@ @m @P @5  @P @5J 02 &%03&&&&&&JJ&&&&&&&I 0405&%Field:&&&&&&JJ&&&&&&&% @P @5 @06 ?* ?* ?* ?* ?07& % NSFormCell%%08 &09&&&&&&JJ&&&&&&&I A0:0;&%Key:&&&&&&JJ&&&&&&&90< % ? @g@ @d @H  @d @HJ 0= &0> % @ @ @c @6  @c @6J0? &0@1 NSPopUpButton1NSButton%  @c @6  @c @6J0A &%0B1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0C%&&&&&&JJ0D1NSMenu0E &0F1 NSMenuItem0G&%Momentary PushJJI0H1NSImage0I& %  common_NibbleI0J0K&%Momentary ChangeJJII0L0M&%Momentary LightJJII0N0O&%PushOn/PushOffJJII0P0Q&%On/OffJJII0R0S&%ToggleJJII&&&&&&&I&&& > =&&FDF%%%%%0T1NSTextFieldCell0U&%Type&&&&&&JJ&&&&&&&I0V0W&% windowBackgroundColor0X ? @ @%%0Y % ? @* @d @_@  @d @_@J 0Z &0[ % @ @ @b @X  @b @XJ0\ &0]% @> @ @U @V@  @U @V@J0^ &%0_&&&&&&JJ&&&&&&&I% @U @1 ? ?0` ?* ?* ?* ?* ?0a& % NSButtonCell0b0c&%Switch0d0e1NSMutableString&%GSSwitch&&&&&&JJ&&&&&&&I0f0g&%GSSwitchSelected&&& &&%%0h &0i0j&%Borderedd&&&&&&JJ&&&&&&&If&&& &&0k0l& % Continuousd&&&&&&JJ&&&&&&&If&&& &&0m0n&%Enabledd&&&&&&JJ&&&&&&&If&&& &&0o0p&%Selectedd&&&&&&JJ&&&&&&&If&&& &&0q0r& % Transparentd&&&&&&JJ&&&&&&&If&&& &&m0s0t&%Options&&&&&&JJ&&&&&&&IV0u ? @ @%%0v % @e @U @V@ @I  @V@ @IJ 0w &0x % @ @ @R @9  @R @9J0y &0z%  @R @9  @R @9J0{ &%0|&&&&&&JJ&&&&&&&I% @9 @9 0} ?* ?* ?* ?* ?}0~& % NSButtonCell00&%L&&&&&&JJ&&&&&&&I&&& &&%%0 &000& % leftalign_nib&&&&&&JJ&&&&&&&I&&& &&000&%centeralign_nib&&&&&&JJ&&&&&&&I&&& &&000&%rightalign_nib&&&&&&JJ&&&&&&&I&&& &&00& % Alignment&&&&&&JJ&&&&&&&IV0 ? @ @%%0% @c @m @Z@ @6  @Z@ @6J 0 &%00&%Button&&&&&&JJ00 &  00& % CharacterJJIHI00&%ReturnJJII00&%DeleteJJII00&%EscapeJJII00&%TabJJII00&%Up ArrowJJII00& % Down ArrowJJII00& % Left ArrowJJII00& % Right ArrowJJII&&&&&&&I&&& &&%%%%%0 % @e @a@ @V@ @X  @V@ @XJ 0 &0 % @ @ @R @Q  @R @QJ0 &0% @A @R@ @1  @R@ @1J0 &%00& % AlternatedC0&%Alt&&&&&&JJ&&&&&&&If&&& &&0% @1 @R@ @1  @R@ @1J0 &%00&%ControldC&&&&&&JJ&&&&&&&If&&& &&0%  @R@ @1  @R@ @1J0 &%00&%ShiftdC0&%Shift&&&&&&JJ&&&&&&&If&&& &&0% @I @R@ @1  @R@ @1J0 &%00&%CommanddC0&%Cmd&&&&&&JJ&&&&&&&If&&& &&00&%ModifierC&&&&&&JJ&&&&&&& @ @%%0 % ? @a@ @d @H  @d @HJ 0 &0 % @ @ @c @6  @c @6J0± &0ñ%  @c @6  @c @6J0ı &%0űC&&&&&&JJ0Ʊ0DZ &0ȱ0ɱ&%DefaultJJIHI0ʱ0˱&%RoundedJJII0̱0ͱ&%Regular SquareJJII0α0ϱ& % Thick SquareJJII0б0ѱ&%Thicker SquareJJII0ұ0ӱ& % DisclosureJJII0Ա0ձ&%Shadowless SquareJJII0ֱ0ױ&%CircularJJII0ر0ٱ&%TexturedJJII0ڱ0۱& % Help ButtonJJII 0ܱ0ݱ& % Small SquareJJII 0ޱ0߱&%Textured RoundJJII 00& % Round RectJJII 00&%RecessedJJII 00&%Disclosure RoundJJII00&%NeXTJJII00& % Push ButtonJJII00& % Small IconJJII00& % Medium IconJJII00& % Large IconJJII&&&&&&&I&&& > =&&Ȱư%%%%%00&%BezelC&&&&&&JJ&&&&&&& @ @%%0 % @e @* @V@ @R  @V@ @RJ 0 &0 % @ @ @U@ @J  @U@ @JJ0 &0% @ @ @R @I  @R @IJ0 &%0&&&&&&JJ&&&&&&&I% @9 @9 }}0& % NSButtonCell00&%B&&&&&&JJ&&&&&&&I&&& &&%%0 &000& % iconAbove_nib&&&&&&JJ&&&&&&&I&&& &&PPP& % iconBelow_nib&&&&&&JJ&&&&&&&I&&& &&PPP& % iconOnly_nib&&&&&&JJ&&&&&&&I&&& &&PPP& % iconLeft_nib&&&&&&JJ&&&&&&&I&&& &&P P P & % iconRight_nib&&&&&&JJ&&&&&&&I&&& &&P P P& % titleOnly_nib&&&&&&JJ&&&&&&&I&&& &&PP& % Icon PositionP% A@&&&&&&JJ&&&&&&& %%PP% A &&&&&&JJ&&&&&&& %%VP&%WindowP&%NSButton Attributes Inspector ? @`  @Ç @|I&   @ @P &P &P1 NSMutableDictionary1! NSDictionary&gP& % ButtonCell(2)P&%Box1YP& % MenuItem(10)P& % MenuItem3P& % FormCell(7)9P& % MenuItem(27)PP &%On/OffJJIIP!&%ButtonCell(15)P"&%View(5)[P#& % ActionCell(0)P$&%MenuItemP%& % FormCell(2) P&& % MenuItem(19)P'& % MenuItem(6)P(& % MenuItem(22)P)&%ButtonCell(10)qP*& % MenuItem(31)RP+&%View(0)P,& % ButtonCell(6)iP-&%PopUpButton(0)P.&%Form1&P/& % MenuItem(14)P0& % MenuItem(1)P1&%PopUpButtonCell(0)BP2& % Button(0)P3&%Matrix]P4& % ButtonCell(1)P5& % InspectorP6& % FormCell(6)(P7&%Box(3)P8&%ButtonCell(14)P9& % MenuItem(26)P:P;&%Momentary ChangeJJIIP<& % MenuItem(35)FP=&%View(4)>P>& % MenuItem1P?&%Matrix2P@& % MenuItem(5)PA& % FormCell(1)PB& % MenuItem(18)PC& % MenuItem(21)PD& % MenuItem(30)NPE&%Form PF& % ButtonCell(5) PG& % MenuItem(0)PH& % MenuItem(13)PI&%Box2vPJ& % MenuItem4PK& % ButtonCell(0)PL&%BoxP"cP"P"JP#bP&%keyEquivP#EXP& % nextKeyViewP#3P#3?P#?.P#XbP#.EP#EP&%delegateP#5EP&%initialFirstResponderP#XP&%keyFormP#.P&%tagFormP#.P&%delegateP±#XPñ"GPı"0Pű"PƱ"pPDZ$bPȱ&%ok:Pɱ"2+Pʱ"+P˱"r+P̱"\+Pͱ"~7Pα"+~Pϱ#2Pб&%altModPѱ#Pұ&%ctrlModPӱ#rPԱ&%shiftModPձ$2Pֱ&%ok:Pױ$Pر$rPٱ$\Pڱ#\P۱&%cmdModPܱ"f7Pݱ"fPޱ"-P߱"YP"@P"'P"P"dP"NP"P"tP"^P"HP"/P"P"oP"WP"BP"&P"[P"CP#-P& % bezelButtonP"(P$-P&%ok:P"K?P"4?P"?P"s?P"]?P"F?P"#?P"M7P"mMP"7P"V7P"ZEP"AEP"%EP"EP"eEP"O.P"6.P"XP "uXP "=LP ""P ",3P "3P"l3P"U3P")3P"z3P"{IP"P"jP"SP"aP"bP"82P"!P"vrP"`\P"q-P"P"gP"PP "9P!"P""wP#"n=P$"_P%$_1P&&%_popUpItemAction:P'"DP($D1P)&%_popUpItemAction:P*"*P+$*1P,&%_popUpItemAction:P-"1nP."P/#nP0& % typeButtonP1$nP2&%ok:P3"kP4"0?&%Switch%&&&&&&JJ&&&&&&&I'&&& &&0@&%Form 0A&% NSOwner0B&%GormCellInspector0C&%View(0) 0D&%Button2!0E& % FormCell(0)0F& % Inspector0G&%Button0H% @$ @N @L @0  @L @0J0I &%0J0K&%Switch%&&&&&&JJ&&&&&&&I'&&& &&0L &0M1NSNibConnectorFA0NGF0O;F0P@90Q1NSNibOutletConnectorA@0R&%tagForm0SAF0T&%window0U790VD60W1NSNibControlConnectorDA0X&%ok:0YAD0Z&%disabledSwitch0[D@0\& % nextKeyView0]@D\0^@A0_&%delegate0`FD0a&%initialFirstResponder0b90cC90dE@0e8@0f670g:D0h&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSColorWellInspector.gorm/000077500000000000000000000000001475375552500313725ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSColorWellInspector.gorm/data.classes000066400000000000000000000005171475375552500336650ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; GormColorWellInspector = { Actions = ( ); Outlets = ( borderedSwitch, disabledSwitch, initialColorWell, tagField ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSColorWellInspector.gorm/data.info000066400000000000000000000002701475375552500331570ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSColorWellInspector.gorm/objects.gorm000066400000000000000000000357621475375552500337260ustar00rootroot00000000000000GNUstep archive000f4240:00000021:0000008d:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @( @H01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @O @k @a@ @S  @a@ @SJ0 &0 % @ @ @_ @J  @_ @JJ0 &01 NSColorWell1 NSControl% @A @( @J @>  @J @>J0 &%01NSCell0&01NSFont%&&&&&&JJ&&&&&&&01NSColor0&% NSCalibratedWhiteColorSpace ?2 initialColorSelected:v12@0:4@801NSTextFieldCell1 NSActionCell0& % Initial Color&&&&&&JJ &&&&&&&I00&% NSNamedColorSpace0&% System0&% windowBackgroundColor00&%System0& % textColor @ @%%0 % @O @a @a@ @S  @a@ @SJ0 &0! % @ @ @_ @J  @_ @JJ0" &0#1NSButton% @0 @; @T@ @1  @T@ @1J0$ &%0%1 NSButtonCell0&&%Disabled0'1NSImage0(1NSMutableString&%GSSwitch&&&&&&JJ&&&&&&&I0)0*&%GSSwitchSelected&&& &&0+% @0 @ @T@ @1  @T@ @1J0, &%0-0.&%Bordered'&&&&&&JJ&&&&&&&I)&&& &&0/00&%Options&&&&&&JJ &&&&&&&I @ @%%011 NSTextField% @` @\ @D @5  @D @5J02 &%03&&&&&&JJ &&&&&&&I0405&%textBackgroundColor06% @T@ @]@ @E @2  @E @2J07 &%0809&%Tag:0:% A@&&&&&&JJ &&&&&&&I40;0<&% Title0=% A &&&&&&JJ&&&&&&& %%0>&%Window0?&%ColorWell Attributes Inspector?  @Ç @|I0@ 0A 0B &0C1NSBitmapImageRep1 NSImageRep0D&% NSDeviceRGBColorSpace @H @HII0I00E1NSData&$$II*$[=T8J2R-!k[=U:K3xB-H'R-!k[=S7J2xB-H'/ ?[=S7I2xB-H'/ ?[=S7H0xB-H'/ ?[=R7I2xB-H'/ ?[=S7I0xB-H'/ ?[=R7I2xB-H'/ ?[=R7H0xB-H'/ ?[>X/!j:)H'/ ?D49  ?hft{y<;D ?hft}<;D ?<;D ?43:""""43:zzzzͱ""""EEEEEEEEEEEE43:555222t43:0?55hhhiiiyyyVVV777?43:~=0rdxxxUUU444?/17?43:5?0\Mzz{]]]QQQmmm_bn:9@5?0I>e]xxwvtsqpo}66<5?2A3QFA4H:|zzywutrqpbao++05?2@2@2A3B3C4E6}}|zxxwutrqpn}VT_=,, 5@2@3A3A3JdbqihvFEOQ-)Y)!W)`/$k3'q6*n4)l3'i2'f0&c/$`-$Y*!)5C4C4D4E6F7H7Ʀkkk)))LJRkjxihvhgu::B\/&[-$Y-$c/&l3'o4)l3'j2'g2&d0$a/$^-#X*!)5@2D4E6F7H7I8{{{[[[322QPZ^]jjhwhguQP[K33\-&W)_/$j3'm3'm4)j3'h2&d0&b/$_-#],#X*!)P'~>>ddd>>?87?4$$E)&_-#`0'_0&]/&^/&`/&`/&c0&j2'n3'k3'h2&d0$a/$^-#\,!Z,!X*!U)T))ttttttzzz;;;rqyjhwPPZ43:C@?w9,c2)b2)^,#_0&d2'g2'h2'k3)l3)l3)l3'l3'i2'f0&c/$_-#],#Z,!X*!W)T)S))rrr```FFF000mmm\[a<;CA)'^3,I::76v8,_-$b2'g2'l4)r7*s7*s7*w8,t7,q6*n4)k3'g2&d0$`-$],#[,!X*!W)U)S'S')YYY777XWcKJS|||SSS\2,KDD4I:I;A?>~>0b2)f2'p6*x:-y:-{;-x:-v9,s7*o4)l3'i2&f0&c/$_-#\,#Y*!W)T)S'R'S')TR^|z@?Gↄ\Zg<;CJJJm4)D4E6J;UIPEvI@q:/l4)m4)x:,};/{:-y:-w9,t7*q6*m4)j3'h2&c0&a/$]-#[,!X*!V)T)R'R'R')0/5?_^kCBJ43:?QQQ ^-#I:O>SBP?H7?2p6*s7*0|;/y:-p6*f0&d0&c/&`/$_-$]-#\,#T)!T)!T)!T)!T)!T)!T)!)))) ?h3'z;/T)!T)!T)!`/$`/$))))) ? 00$$R&   @ @0F &0G &0H1NSMutableDictionary1 NSDictionary&0I&%Box 0J&%View(1) 0K& % TextField160L&%Box10M& % TextField10N&%Box(0)0O& % ColorWell0P&%TextFieldCell(1)80Q& % ButtonCell(0)%0R&%Button1#0S&%View(2)!0T&% NSOwner0U&%GormColorWellInspector0V& % ButtonCell(1)-0W&%View(0) 0X&%Cell(0)0Y& % Inspector0Z&%TextFieldCell(0)30[&%Button2+0\ &!!0]1NSNibConnectorY0^&% NSOwner0_IN0`LN0aOJ0bRS0c[S0dMN0eKN0f1 NSNibOutletConnector^Y0g&%window0h OR0i& % nextKeyView0j R[i0k [Mi0l MOi0m YO0n&%initialFirstResponder0o M^0p&%delegate0q ^O0r&%initialColorWell0s ^R0t&%disabledSwitch0u ^[0v&%borderedSwitch0w ^M0x&%tagField0y1!NSNibControlConnectorO^0z&%ok:0{!R^z0|![^z0}N0~WN0JI0XO0SL0QR0!Q0&% NSFirst0&%disabledSelected:0V[0!V0&%borderedSelected:0ZM0PK0&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSFormInspector.gorm/000077500000000000000000000000001475375552500303735ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSFormInspector.gorm/data.classes000066400000000000000000000006351475375552500326670ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormFormInspector = { Actions = ( ); Outlets = ( backgroundColorWell, drawsBackgroundSwitch, tagForm, textMatrix, titleMatrix, cellPositionSwitch, editableSwitch, scrollableSwitch, selectableSwitch, autosizeSwitch, dimensionsForm, numberStepper ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSFormInspector.gorm/data.info000066400000000000000000000002701475375552500321600ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSFormInspector.gorm/objects.gorm000066400000000000000000000342761475375552500327260ustar00rootroot00000000000000GNUstep archive000f4240:00000024:00000133:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q0 @x@JI @ @01 NSView% ? @" @q0 @x@  @q0 @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 1NSForm1NSMatrix1 NSControl% @T @( @Z @5  @Z @5J 0 &%0 1 NSFormCell1 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @Z @5 @01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSFormCell%%0 &00&%0&&&&&&JJ&&&&&&&I B800&%Tag:&&&&&&JJ&&&&&&&2 ok:v24@0:8@160 % @< @b @Y @M  @Y @MJ0 &0 % @ @ @V @@  @V @@J0! &0"% @ @ @S@ @9  @S@ @9J0# &%0$&&&&&&JJ&&&&&&&I% @9 @9 ? ?0% ?* ?* ?* ?* ?%0&& % NSButtonCell0'1 NSButtonCell0(&%|<-&&&&&&JJ&&&&&&&I&&& &&%%0) &0*0+1NSImage0,& % leftalign_nib&&&&&&JJ&&&&&&&I&&& &&0-0.0/&%centeralign_nib&&&&&&JJ&&&&&&&I&&& &&000102&%rightalign_nib&&&&&&JJ&&&&&&&I&&& &&*031NSTextFieldCell04&%Title&&&&&&JJ &&&&&&&I0506&% windowBackgroundColor07 ? @ @%%08 % @< @j @j @_  @j @_J09 &0: % @ @ @h` @Y  @h` @YJ0; &0<1NSButton% @> @S @` @1  @` @1J0= &%0>0?&%Cell tags = Positions0@0A1NSMutableString&%GSSwitch0B%?&&&&&&JJ&&&&&&&I0C0D&%GSSwitchSelected&&& &&0E% @> @N @` @1  @` @1J0F &%0G0H&%Editable@B&&&&&&JJ&&&&&&&IC&&& &&0I% @> @D @` @1  @` @1J0J &%0K0L& % Selectable@B&&&&&&JJ&&&&&&&IC&&& &&0M% @> @6 @` @1  @` @1J0N &%0O0P& % Scrollable@B&&&&&&JJ&&&&&&&IC&&& &&0Q% @> @ @` @1  @` @1J0R &%0S0T&%Autosize@B&&&&&&JJ&&&&&&&IC&&& &&0U0V&%Options&&&&&&JJ &&&&&&&I50W ? @ @%%0X % @< @L @j @V@  @j @V@J0Y &0Z % @ @ @h` @O  @h` @OJ0[ &0\% @@ @ @_ @0  @_ @0J0] &%0^0_&%Draws Background@&&&&&&JJ&&&&&&&IC&&& &&0`1 NSColorWell% @Q @< @J @>  @J @>J0a &%0b&&&&&&JJ&&&&&&&0c0d&% NSCalibratedWhiteColorSpace ?* ?0e0f&%Background Color&&&&&&JJ &&&&&&&I50g ? @ @%%0h % @` @b @Y @M  @Y @MJ0i &0j % @ @ @V @@  @V @@J0k &0l% @ @ @S@ @9  @S@ @9J0m &%0n&&&&&&JJ&&&&&&&I% @9 @9 ? ?0o ?* ?* ?* ?* ?o0p& % NSButtonCell0q0r&%Button&&&&&&JJ&&&&&&&I&&& &&%%0s &0t+&&&&&&JJ&&&&&&&I&&& &&0u.&&&&&&JJ&&&&&&&I&&& &&0v1&&&&&&JJ&&&&&&&I&&& &&t0w0x&%Text&&&&&&JJ &&&&&&&I50y ? @ @%%0z% @; @u @g @5  @g @5J0{ &%0|B&&&&&&JJ&&&&&&&I 0}0~&%Field:B&&&&&&JJ&&&&&&&% @g @5 @0& % NSFormCell%%0 &00&%2B&&&&&&JJ&&&&&&&I B00&%Number of Fields:B&&&&&&JJ&&&&&&&01 NSStepper% @k @u @2 @:  @2 @:J0 &%01 NSStepperCell0&%3001NSNumber1NSValued @>&&&&&&JJ&&&&&&&I @M ?%%00&%Title0% A &&&&&&JJ&&&&&&& %%50&%Window0&%Form Attributes Inspector ? @D @Ç @|I&   @ @p0 &0 &01 NSMutableDictionary1! NSDictionary&.0&% NSOwner0&%GormFormInspector0&%Button5M0& % ActionCell(0)$0& % ButtonCell(6)O0&%Button4I0&%Button\0& % Inspector0& % FormCell(1)0B&&&&&&JJ&&&&&&&I BD00&%ColsB&&&&&&JJ&&&&&&&0&%Button3E0& % ButtonCell(1)-0&%Button2<0&%View(3)Z0& % ColorWell`0&%Button10% @$ @V @L @8  @L @8J0 &%00&%Button&&&&&&JJ&&&&&&&I&&& &&0& % ButtonCell(5)K0& % Stepper(0)0&%Box0&%ButtonCell(11)v0& % FormCell(0)0& % ButtonCell(9)t0& % ButtonCell(0)*0&%View(2):0& % FormCell(4) 0& % ButtonCell(4)G0&%Box3X0&%Matrix2l0&%ButtonCell(10)u0& % ButtonCell(8)^0&%Box280&%View(1) 0& % FormCell(3)0&%Box1h0&%Cell(0)b0&%Form 0& % ButtonCell(3)>0&%Box(0)0& % ActionCell(1)n0&%Form(0)z0& % ButtonCell(7)S0&%StepperCell(0)0±& % FormCell(2)|0ñ&%View(0) 0ı&%Matrix"0ű& % ButtonCell(2)00Ʊ&%Button6Q0DZ&%View(4)j0ȱ &KK01"NSNibConnector0ʱ&% NSOwner0˱"0̱"0ͱ"0α"0ϱ"0б"0ѱ"0ұ"İ0ӱ"01#NSNibOutletConnectorʰ0ձ&%backgroundColorWell0ֱ#ʰ0ױ&%drawsBackgroundSwitch0ر#ʰ0ٱ& % titleMatrix0ڱ#ʰ0۱&%window0ܱ"ǐ0ݱ#ʰ0ޱ& % textMatrix01$NSNibControlConnector0&%ok:0$ʰ0$İʰ0$ʰ0#ʰ0&%tagForm0#İ0& % nextKeyView0#0#0#0#0&%delegate0"0"0"0"0"ư0$ư0&%ok:0#ʰ0&%autosizeSwitch0$0&%ok:0$ʰ0$ʰ0$ʰ0#ʰ0&%cellPositionSwitch0#ʰ0&%editableSwitch0#ʰP&%selectableSwitchP#ʰP&%scrollableSwitchP"P"P"P"P$P&%ok:P #P &%delegateP #ʰP & % numberStepperP #ʰP&%dimensionsFormP"°P"P"P"ðP"P"P"P"ĐP"ĐP"ŰĐP"ĐP"P"P"P"P"P"ƐP "P!"P"$P#&% NSFirstP$&%ok:P%"P&"ǰP'"P("P)"P*"P+ &apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSMatrixInspector.gorm/000077500000000000000000000000001475375552500307345ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSMatrixInspector.gorm/data.classes000066400000000000000000000006501475375552500332250ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormMatrixAttributesInspector = { Actions = ( ); Outlets = ( autosizeSwitch, autotagSwitch, backgroundColorWell, drawsBackgroundSwitch, modeMatrix, propagateSwitch, prototypeMatrix, selRectSwitch, tagForm, rowsForm, colsStepper, rowsStepper, colsForm ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSMatrixInspector.gorm/data.info000066400000000000000000000002701475375552500325210ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSMatrixInspector.gorm/objects.gorm000066400000000000000000000410461475375552500332600ustar00rootroot00000000000000GNUstep archive000f4240:00000024:0000016c:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @~JI @h @01 NSView% ? @" @q @~  @q @~J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @~P  @p @~PJ-0 &0 %  @p @~P  @p @~PJ0 &0 % @J @m @d@ @P  @d@ @PJ0 &0 % @ @ @c @E  @c @EJ0 &01NSMatrix1 NSControl% @ @ @b @C  @b @CJ0 &%01 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I% @R @3 ? 01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSButtonCell01 NSButtonCell0&%Radio01NSImage01NSMutableString&%GSRadio&&&&&&JJ&&&&&&&I00 &%GSRadioSelected&&& &&%%0! &0"0#&%Radio&&&&&&JJ&&&&&&&I&&& &&0$0%& % Highlight&&&&&&JJ&&&&&&&I&&& &&0&0'&%List&&&&&&JJ&&&&&&&I&&& &&0(0)&%Track&&&&&&JJ&&&&&&&I&&& &&2 ok:v24@0:8@16"0*1NSTextFieldCell0+&%Mode&&&&&&JJ &&&&&&&I0,0-&% windowBackgroundColor0. ? %%0/1NSForm% @J @, @d@ @5  @d@ @5J00 &%011 NSFormCell&&&&&&JJ&&&&&&&I 0203&%Field:&&&&&&JJ&&&&&&&% @d@ @5 @04 ?* ?* ?* ?* ?05& % NSFormCell%%06 &0708&%08&&&&&&JJ&&&&&&&I A090:&%Tag::&&&&&&JJ&&&&&&&70; % @J @s@ @d@ @S  @d@ @SJ0< &0= % @ @ @c @L  @c @LJ0> &0?1 NSColorWell% @J @8 @J @>  @J @>J0@ &%0A&&&&&&JJ&&&&&&&0B0C&% NSCalibratedWhiteColorSpace ?0D1NSButton% @. @ @_@ @1  @_@ @1J0E &%0F0G&%Draws Background0H0I&%GSSwitch&&&&&&JJ&&&&&&&I0J0K&%GSSwitchSelected&&& &&0L0M&%Background Color&&&&&&JJ &&&&&&&I,0N ? %%0O % @J @D @d@ @\@  @d@ @\@J0P &0Q % @ @ @c @W  @c @WJ0R &0S% @2 @R@ @[ @1  @[ @1J0T &%0U0V&%AutosizeH&&&&&&JJ&&&&&&&IJ&&& &&0W% @2 @J @[ @1  @[ @1J0X &%0Y0Z&%Selection by rectH&&&&&&JJ&&&&&&&IJ&&& &&0[% @( @; @` @4  @` @4J0\ &%0]0^&%Match Prototype&&&&&&JJ&&&&&&&I&&& &&0_% @( @ @` @4  @` @4J0` &%0a0b&%Tags = Positions&&&&&&JJ&&&&&&&I&&& &&0c0d&%Options&&&&&&JJ &&&&&&&I,0e ? %%0f % @J @c @d@ @S  @d@ @SJ0g &0h % @ @ @c @K  @c @KJ0i &0j % @ @ @b` @G  @b` @GJ0k &0l % @ @ @` @@  @` @@J0m &0n% @C @ @M @8  @M @8J0o &%0p&&&&&&JJ&&&&&&&I% @M @8 ? ?,0q ?* ?* ?* ?* ?0r& % NSButtonCell0s0t&%Button&&&&&&JJ&&&&&&&I&&& &&%%0u &0vt&&&&&&JJ&&&&&&&I&&& &&v0w0x&%Box&&&&&&JJ &&&&&&&I,0y ? @ @%%0z0{& % Prototype&&&&&&JJ &&&&&&&I,0| ? %%0} % @J @xp @d@ @W@  @d@ @W@J0~ &0 % @ @ @c @R  @c @RJ0 &0% @B @F @U @5  @U @5J0 &%00%&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @U @5 @0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I B00&%Rows:&&&&&&JJ&&&&&&&0% @2 @, @Z @5  @Z @5J0 &%0&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @Z @5 @0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I BL00&%Columns:&&&&&&JJ&&&&&&&01 NSStepper% @_@ @E @2 @:  @2 @:J0 &%01 NSStepperCell0&%101NSNumber1NSValued ?&&&&&&JJ&&&&&&&I @M ? ?%%0% @_@ @& @2 @:  @2 @:J0 &%00&%1&&&&&&JJ&&&&&&&I @M ? ?%%00& % Dimensions&&&&&&JJ&&&&&&& %%00&%Title0% A &&&&&&JJ&&&&&&& %%,0&%Window0&%Matrix Attributes Inspector ? @\@ @Ç @|I&   @ @p0 &0 &01 NSMutableDictionary1! NSDictionary&50& % ColorWell1?0& % FormCell(0)0& % FormCell(5)0& % ButtonCell(2)&0&%Form(0)0& % ButtonCell(7)]0&%Box(0)}0& % ActionCell(0)0&%Box 0&%StepperCell(1)0&%View(3)=0&%Button1D0&%Form/0&%Box2O0& % Stepper(1)0& % FormCell(3)10& % ButtonCell(0)"0& % ButtonCell(5)U0&%View(1) 0&%View(6)l0&%Button3[0&%Box4j0& % Inspector0& % FormCell(6)0&&&&&&JJ&&&&&&&I B0±0ñ&%Cols:&&&&&&JJ&&&&&&&0ı& % FormCell(1)0ű&&&&&&JJ&&&&&&&I B0Ʊ0DZ&%Cols:&&&&&&JJ&&&&&&&0ȱ& % ButtonCell(3)(0ɱ&%Form(1)0ʱ& % ButtonCell(8)a0˱& % ActionCell(1)p0̱&%Box(1)0ͱ&%View(4)Q0α&%Button5_0ϱ&%Matrix1n0б&%Box1;0ѱ& % FormCell(4)0ұ& % ButtonCell(1)$0ӱ& % ButtonCell(6)Y0Ա&%ButtonS0ձ&%StepperCell(0)0ֱ&%View(2) 0ױ&%Button2W0ر&%Matrix0ٱ&%Box3f0ڱ& % Stepper(0)0۱&% NSOwner0ܱ&%GormMatrixInspector0ݱ& % FormCell(2)70ޱ& % FormCell(7)0߱& % ButtonCell(9)v0& % ButtonCell(4)F0&%View(5)h0&%View(0)0&%Button40% @$ @V @L @8  @L @8J0 &%00&%Button&&&&&&JJ&&&&&&&I&&& &&0&%Cell(0)A0 &^^01"NSNibConnector0&% NSOwner0"̐0"ذ֐0"̐01#NSNibOutletConnector밵0&%tagForm0#0& % modeMatrix0#밿0&%window0"а̐0"0"0"̐0"԰͐0"װ͐0"͐0"㰿0"ΰ͐0"ٰ̐0"P"ϰP#방P&%backgroundColorWellP#밴P&%drawsBackgroundSwitchP#P&%prototypeMatrixP#P&%autosizeSwitchP #P & % selRectSwitchP #밽P &%propagateSwitchP #P& % autotagSwitchP1$NSNibControlConnectorP&%ok:P$P$ذP$԰P$װP$ΰP#P& % nextKeyViewP#P#ذP#ϰP#԰P#װP#P#ΰP#P &%initialFirstResponderP!#P"&%delegateP#"P$"P%"İP&"̐P'"ⰯP(#P)&%delegateP*"̐P+"̐P,"ְP-"ؐP."ҰؐP/"ؐP0"ȰؐP1"ؐP2"ݰP3"P4"АP5"谩P6"ఴP7$P8&% NSFirstP9&%ok:P:"ͰP;"ԐP<$89P="ӰאP>$89P?"P@$89PA"ʰΐPB$89PC"ِPD"PE"߰ϐPF"˰ϐPG"ѰPH$PI&%ok:PJ"ɰPK"ɐPL"ɐPM"ްɐPN"ڰPO"հڐPP"PQ"PR#PS& % rowsStepperPT#밷PU& % colsStepperPV#ɰPW&%delegatePX#밭PY&%rowsFormPZ#P[&%colsFormP\$ڰP]&%ok:P^$]P_$P`&%ok:Pa$ɰ`Pb &apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSPopUpButton.h000066400000000000000000000004761475375552500272550ustar00rootroot00000000000000#include #ifndef INCLUDED_GormNSPopUpButton_h #define INCLUDED_GormNSPopUpButton_h @interface GormNSPopUpButton : NSPopUpButton @end @interface GormNSPopUpButtonCell : NSPopUpButtonCell { } @end @interface NSPopUpButtonCell (DirtyHack) - (id) _gormInitTextCell: (NSString *) string; @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSPopUpButton.m000066400000000000000000000073601475375552500272610ustar00rootroot00000000000000/** main.m Copyright (C) 2024 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2024 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormNSPopUpButton.h" Class _gormnspopupbuttonCellClass = 0; @implementation GormNSPopUpButton /* * Class methods */ + (void) initialize { if (self == [GormNSPopUpButton class]) { // Initial version [self setVersion: 1]; [self setCellClass: [GormNSPopUpButtonCell class]]; } } + (Class) cellClass { return _gormnspopupbuttonCellClass; } + (void) setCellClass: (Class)classId { _gormnspopupbuttonCellClass = classId; } - (NSString*) editorClassName { return @"GormPopUpButtonEditor"; } - (NSString *) className { return @"NSPopUpButton"; } @end @implementation NSPopUpButtonCell (DirtyHack) - (id) _gormInitTextCell: (NSString *) string { return [super initTextCell: string]; } @end @implementation GormNSPopUpButtonCell /* Overriden helper method */ - (void) _initMenu { NSMenu *menu = [[NSMenu allocSubstitute] initWithTitle: @""]; [self setMenu: menu]; RELEASE(menu); } - (NSString *) className { return @"NSPopUpButtonCell"; } /** * Override this here, since themes may override it. * Always want to show the menu view since it's editable. */ /* - (void) attachPopUpWithFrame: (NSRect)cellFrame inView: (NSView *)controlView { NSRectEdge preferredEdge = _pbcFlags.preferredEdge; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSWindow *cvWin = [controlView window]; NSMenuView *mr = [[self menu] menuRepresentation]; int selectedItem; [nc postNotificationName: NSPopUpButtonCellWillPopUpNotification object: self]; [nc postNotificationName: NSPopUpButtonWillPopUpNotification object: controlView]; // Convert to Screen Coordinates cellFrame = [controlView convertRect: cellFrame toView: nil]; cellFrame.origin = [cvWin convertBaseToScreen: cellFrame.origin]; if (_pbcFlags.pullsDown) selectedItem = -1; else { selectedItem = [self indexOfSelectedItem]; if (selectedItem == -1) // Test selectedItem = 0; } if (selectedItem > 0) { [mr setHighlightedItemIndex: selectedItem]; } if ([controlView isFlipped]) { if (preferredEdge == NSMinYEdge) { preferredEdge = NSMaxYEdge; } else if (preferredEdge == NSMaxYEdge) { preferredEdge = NSMinYEdge; } } // Ask the MenuView to attach the menu to this rect [mr setWindowFrameForAttachingToRect: cellFrame onScreen: [cvWin screen] preferredEdge: preferredEdge popUpSelectedItem: selectedItem]; // Set to be above the main window [cvWin addChildWindow: [mr window] ordered: NSWindowAbove]; // Last, display the window [[mr window] orderFrontRegardless]; [nc addObserver: self selector: @selector(_handleNotification:) name: NSMenuDidSendActionNotification object: _menu]; } */ @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSPopUpButtonInspector.gorm/000077500000000000000000000000001475375552500317275ustar00rootroot00000000000000data.classes000066400000000000000000000004631475375552500341430ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSPopUpButtonInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormPopUpButtonInspector = { Actions = ( ); Outlets = ( autoenableSwitch, tagForm, typeMatrix, defaultItemForm, enableSwitch, pullDownArrowPopUp, pullDownTitleForm ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSPopUpButtonInspector.gorm/data.info000066400000000000000000000002701475375552500335140ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000316601475375552500341750ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSPopUpButtonInspector.gormGNUstep archive000f4240:00000027:000000fe:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @E @q @f @R  @f @RJ 0 &0 % @ @ @e @H  @e @HJ0 &0 1NSMatrix1 NSControl% @A @ @S @D  @S @DJ0 &I0 1 NSActionCell1NSCell0&01NSFont% A@JJJJJJJJJJJJJJJI% @S @4 ? ?01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSButtonCell01 NSButtonCell0&%Radio01NSImage01NSMutableString&%GSRadioJJJJJJJJJJJJJJJI00&%GSRadioSelectedJJJ JJ%%0 &00&%PopUpJJJJJJJJJJJJJJJIJJJ JJ0 0!&%PullDownJJJJJJJJJJJJJJJIJJJ JJ2 ok:v24@0:8@160"1 NSImageView% @[ @7 @9 @6  @9 @6J0# &I0$1 NSImageCell0%0&& %  common_Nibble0'% A@JJJJJJJJJJJJJJJIII @& @ 0(% @[ @ @9 @4  @9 @4J0) &I0*0+0,&% common_3DArrowDown0-%JJJJJJJJJJJJJJJIII @ @0.1NSTextFieldCell0/&%TypeJJJJJJJJ JJJJJJJI0001&% windowBackgroundColor02 ? @ @%%03 % @E @j @f @Q  @f @QJ 04 &05 % @ @ @e @F  @e @FJ06 &071NSButton% @$ @ @` @1  @` @1J08 &I090:&%Enabled0;0<&%GSSwitch-JJJJJJJJJJJJJJJI0=0>&%GSSwitchSelectedJJJ JJ0?% @0 @: @^ @0  @^ @0J0@ &I0A0B& % Autoenable;-JJJJJJJJJJJJJJJI=JJJ JJ0C0D&%OptionJJJJJJJJ JJJJJJJI00E ? @ @%%0F1NSForm% @W @M @S @5  @S @5J 0G &I0H1 NSFormCellJJJJJJJJJJJJJJJI 0I0J&%Field:JJJJJJJJJJJJJJJ% @S @5 @0K ?* ?* ?* ?* ?0L& % NSFormCell%%0M &0NJJJJJJJJJJJJJJJI A0O0P&%Tag :JJJJJJJJJJJJJJJN0Q% @J @U@ @] @5  @] @5J 0R &I0S-JJJJJJJJJJJJJJJI 0T0U&%Field:-JJJJJJJJJJJJJJJ% @] @5 @0V& % NSFormCell%%0W &0X-JJJJJJJJJJJJJJJI B0Y0Z& % Default Item:-JJJJJJJJJJJJJJJX0[ % @E @[ @f @W  @f @WJ 0\ % @ @ @e @P  @e @PJ[0] &0^% @0 @A @b` @5  @b` @5J0_ &I0`-JJJJJJJJJJJJJJJI 0a0b&%Field:-JJJJJJJJJJJJJJJ% @b` @5 @0c& % NSFormCell%%0d &0e-JJJJJJJJJJJJJJJI A0f0g&%Title:-gJJJJJJJJJJJJJJJe0h1 NSTextField% @$ @E @2  @E @2J0i &I0j0k&%Arrow:'kJJJJJJJJ JJJJJJJI0l0m&%System0n&%textBackgroundColor0om0p& % textColor0q1 NSPopUpButton% @G @  @]@ @6  @]@ @6J0r &I0s1NSPopUpButtonCell1 NSMenuItemCell-JJJJJJJJ0t1!NSMenu0u &0v1" NSMenuItem0w&%RightJJII0x"0y&%DownJJI%IJJJJJJJIJJJ > =JJxtxIIIII0z &\0{0|&%PullDown Options-|JJJJJJJJJJJJJJJ @ @%%00}&%Window0~& % PopUpButton Attributes Inspector~ ? @H @Ç @{I&   @ @0 &0 &01#NSMutableDictionary1$ NSDictionary&%0&% NSOwner0&%GormPopUpButtonInspector0&%PopUpButtonCell(0)s0& % ActionCell(0) 0& % ImageCell(1)*0& % Inspector0& % MenuItem(1)x0& % ImageView"0& % FormCell(1)0-JJJJJJJJJJJJJJJI A00&%Field:-JJJJJJJJJJJJJJJ0&%TextFieldCell(0)j0& % ButtonCell(1) 0& % FormCell(5)S0&%View(3)50&%Button170& % ImageCell(0)$0&%Box0&%Form1Q0& % FormCell(0)e0& % MenuItem(0)v0& % ButtonCell(0)0&%View(2) 0& % FormCell(4)X0& % ButtonCell(4)0& % Button(0)?0& % FormCell(3)H0&%Box130&%PopUpButton(0)q0&%FormF0&%Box(0)[0& % ButtonCell(3)90&%Form(0)^0& % TextField(0)h0& % ImageView1(0&%View(0)\0& % FormCell(2)N0&%Matrix 0& % ButtonCell(2)A0& % FormCell(6)`0 &9901%NSNibConnector0%0%0%0%01&NSNibOutletConnector0& % typeMatrix0&0&%tagForm0&0&%window01'NSNibControlConnector0&%ok:0'0&%ok:0%0%0%0'0&%ok:0&0&%defaultItemForm0±%0ñ'0ı&%ok:0ű&0Ʊ& % enableSwitch0DZ&0ȱ& % nextKeyView0ɱ&0ʱ&0˱&0̱&%initialFirstResponder0ͱ&0α&%delegate0ϱ&0б%0ѱ%0ұ%0ӱ%0Ա%0ձ%0ֱ%0ױ%0ر%0ٱ&0ڱ&%pullDownTitleForm0۱&0ܱ&%pullDownArrowPopUp0ݱ'0ޱ&%ok:0߱'0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0%0'0&%ok:0&0& % nextKeyView0%0#&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSProgressIndicatorInspector.gorm/000077500000000000000000000000001475375552500331315ustar00rootroot00000000000000data.classes000066400000000000000000000007111475375552500353410ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSProgressIndicatorInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "indeterminateSelected:", "revert:", "orderFrontFontPanel:" ); Super = NSObject; }; GormProgressIndicatorInspector = { Actions = ( ); Outlets = ( vertical, maxValue, minValue, indeterminate ); Super = IBInspector; }; NSBox = { Actions = ( "revert:", "ok:" ); Super = NSView; }; }data.info000066400000000000000000000002701475375552500346370ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSProgressIndicatorInspector.gormGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000145261475375552500354010ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSProgressIndicatorInspector.gormGNUstep archive000f4240:0000001d:00000087:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @h @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @< @k @j@ @W  @j@ @WJ0 &0 % @ @ @h @Q@  @h @Q@J0 &01NSButton1 NSControl% @@ @B @\ @1  @\ @1J0 &I01 NSButtonCell1 NSActionCell1NSCell0& % Indeterminate01NSImage01NSMutableString&%GSSwitch01NSFont%JJJJJJJJJJJJJJJI0&00&%GSSwitchSelectedJJJ JJ0% @H @0 @X @1  @X @1J0 &I00&%VerticalJJJJJJJJJJJJJJJIJJJ JJ01NSTextFieldCell0&%OptionsJJJJJJJJ JJJJJJJI01NSColor0 &% NSNamedColorSpace0!&% System0"&% windowBackgroundColor0# 0$&%System0%& % textColor @ @%%0& % @< @X @j@ @\@  @j@ @\@J0' &0( % @ @ @h @U  @h @UJ0) &0*1 NSTextField% @Z @G @R @5  @R @5J0+ &I0,JJJJJJJJ JJJJJJJI0- $0.&%textBackgroundColor#0/% @ @G @X @4  @X @4J00 &I0102&%Minimum Value:03% A@JJJJJJJJ JJJJJJJI-#04% @Z @0 @R @5  @R @5J05 &I06JJJJJJJJ JJJJJJJI-#07% @ @1 @X @4  @X @4J08 &I090:&%Maximum Value:3JJJJJJJJ JJJJJJJI-#0;0<&%RangeJJJJJJJJ JJJJJJJI# @ @%%0=0>&%Title0?% A JJJJJJJJJJJJJJJ %%0@&%Window0A&%ProgressIndicator AttributesA @< @Ç @|I0B0C&% NSApplicationIcon&   @ @0D &0E &0F1NSMutableDictionary1 NSDictionary&0G& % Button(0)0H&%TextFieldCell(3)90I& % Inspector0J&%View(0) 0K&%TextFieldCell(0),0L& % TextField1/0M&% NSOwner0N&%GormProgressIndicatorInspector0O& % TextField370P&%Box1&0Q&%View(1) 0R&%TextFieldCell(1)10S& % TextField*0T& % ButtonCell(0)0U&%View(2)(0V&%Button0W& % TextField240X&%TextFieldCell(2)60Y&%Box 0Z&%Box(0)0[& % ButtonCell(1)0\ &0]1NSNibConnectorYZ0^PZ0_SU0`LU0aOU0bVQ0c1NSNibOutletConnector0d&% NSOwnerS0e&%minValue0fdW0g&%maxValue0hdV0i& % indeterminate0jdI0k&%window0lSW0m& % nextKeyView0nWVm0oIV0p&%initialFirstResponder0qWd0r&%delegate0s1NSNibControlConnectorVd0t&%ok:0uSd0v&%delegate0wZ0xJZ0yQY0zTV0{UP0|KS0}RL0~WU0XW0HO0GQ00Gd0&%ok:0dG0&%vertical0&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSSliderInspector.gorm/000077500000000000000000000000001475375552500307125ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSSliderInspector.gorm/data.classes000066400000000000000000000004571475375552500332100ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormSliderInspector = { Actions = ( ); Outlets = ( altIncrementForm, knobThicknessForm, tagForm, valuesForm, continuousSwitch, enabledSwitch, stopOnTicksSwitch ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSSliderInspector.gorm/data.info000066400000000000000000000002701475375552500324770ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSSliderInspector.gorm/objects.gorm000066400000000000000000000237651475375552500332460ustar00rootroot00000000000000GNUstep archive000f4240:0000001f:000000d7:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@J I @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @@ @j@ @h @b  @h @bJ0 &0 % @ @ @h@ @`  @h@ @`J0 &01NSForm1NSMatrix1 NSControl% @, @> @e @W@  @e @W@J0 &%01 NSFormCell1 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @e @5 @01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I B00 &%Minimum:&&&&&&JJ&&&&&&&0!&&&&&&JJ&&&&&&&I B0"0#&%Current:&&&&&&JJ&&&&&&&0$&&&&&&JJ&&&&&&&I B0%0&&%Maximum:&&&&&&JJ&&&&&&&0'0(%&&&&&&JJ&&&&&&&I B0)0*&%Number of Ticks:(*&&&&&&JJ&&&&&&&2 ok:v24@0:8@16'0+1NSButton% @$ @$ @\ @1  @\ @1J0, &%0-1 NSButtonCell0.&%Stop on ticks only0/1NSImage001NSMutableString&%GSSwitch(.&&&&&&JJ&&&&&&&I0102&%GSSwitchSelected&&& &&031NSTextFieldCell04&%Values&&&&&&JJ &&&&&&&I0506&% windowBackgroundColor07 ? %%08% @N @V @c @4  @c @4J09 &%0:&&&&&&JJ&&&&&&&I 0;0<&%Field:&&&&&&JJ&&&&&&&% @c @4 @0= ?* ?* ?* ?* ?0>& % NSFormCell%%0? &0@&&&&&&JJ&&&&&&&I B0A0B&%Alt Increment:&&&&&&JJ&&&&&&&@0C % @@ @` @h @S@  @h @S@J0D &0E % @ @ @g @I  @g @IJ0F &0G% @F @; @U @1  @U @1J0H &%0I0J& % Continuous/(J&&&&&&JJ&&&&&&&I1&&& &&0K% @F @ @U @1  @U @1J 0L &%0M0N&%Enabled/(&&&&&&JJ&&&&&&&I1&&& &&0O0P&%Options&&&&&&JJ &&&&&&&I50Q ? @ @%%0R% @F @O @e @4  @e @4J0S &%0T&&&&&&JJ&&&&&&&I 0U0V&%Field:&&&&&&JJ&&&&&&&% @e @4 @0W ?* ?* ?* ?* ?0X& % NSFormCell%%0Y &0Z&&&&&&JJ&&&&&&&I B0[0\&%Knob Thickness:&&&&&&JJ&&&&&&&Z0]% @[ @C @Z@ @4  @Z@ @4J0^ &%0_&&&&&&JJ&&&&&&&I 0`0a&%Field:&&&&&&JJ&&&&&&&% @Z@ @4 @0b ?* ?* ?* ?* ?0c& % NSFormCell%%0d &0e&&&&&&JJ&&&&&&&I A0f0g&%Tag:&&&&&&JJ&&&&&&&e0h0i&% Title0j% A &&&&&&JJ&&&&&&& %%50k&%Window0l&%Slider Attributes Inspectorl ?  @Ç @xI&   @ @0m &0n &0o1NSMutableDictionary1 NSDictionary&0p&% NSOwner0q&%GormSliderInspector0r&%ButtonG0s& % Inspector0t& % FormCell(1)!0u& % ButtonCell(1)I0v& % FormCell(5)@0w&%Form3]0x&%Button1K0y& % FormCell(9)e0z&%Form2R0{&%Box 0|&%Form10}& % FormCell(0)0~& % ButtonCell(0)-0&%View(2)E0& % FormCell(4)0& % FormCell(10)_0& % FormCell(8)T0& % Button(0)+0& % FormCell(3)'0&%View(1) 0&%Box1C0&%Form80&%Box(0)0& % FormCell(7)Z0& % FormCell(2)$0&%View(0) 0& % ButtonCell(2)M0& % FormCell(6):0 &2201NSNibConnectorsp0{00|01NSNibOutletConnectorp0&%altIncrementForm00z0w0ps0&%window0pz0&%knobThicknessForm0pw0&%tagForm0z0& % nextKeyView0zw0w|0s|0&%initialFirstResponder0p0&%delegate0zp0wp0|p0p|0& % valuesForm0r0x0pr0&%continuousSwitch0px0& % enabledSwitch01NSNibControlConnectorrp0&%ok:0xp0|r0& % nextKeyView0rx0x00p0&%ok:0p0&%stopOnTicksSwitch000{0}|0t|0±|0ñ|0ı|0ű~0Ʊv0DZ0ȱ0ɱur0ʱx0˱z0̱z0ͱyw0αw0ϱ&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSStepperInspector.gorm/000077500000000000000000000000001475375552500311125ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSStepperInspector.gorm/data.classes000066400000000000000000000005321475375552500334020ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormStepperAttributesInspector = { Actions = ( "ok:", "revert:" ); Outlets = ( autorepeatButton, incrementValueField, maximumValueField, minimumValueField, valueField, valueWrapsButton, window ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSStepperInspector.gorm/data.info000066400000000000000000000002701475375552500326770ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSStepperInspector.gorm/objects.gorm000066400000000000000000000177671475375552500334530ustar00rootroot00000000000000GNUstep archive000f4240:0000001f:000000bd:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @H01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @F @f @f @a  @f @aJ0 &0 % @ @ @f @]  @f @]J0 &01 NSTextField1 NSControl% @Z @V @L @5  @L @5J0 &%01NSTextFieldCell1 NSActionCell1NSCell0&%001NSFont% A@01NSNumber1NSValued &&&&&&JJ &&&&&&&I01NSColor0&% NSCalibratedRGBColorSpace ? ? ? ? ?0 ?0% @Z @P@ @L @5  @L @5J0 &%00&%0&&&&&&JJ &&&&&&&I0 ? ? ? ? ?0 ?0% @Z @C @L @5  @L @5J0 &%0 0!&%590"d @M&&&&&&JJ &&&&&&&I0# ? ? ? ? ?0$ ?0%% @ @V @X @2  @X @2J0& &%0'0(&%Value:&&&&&&JJ &&&&&&&I0) ? ? ? ? ?0* ?0+% @ @P@ @X @2  @X @2J0, &%0-0.&%Minimum Value:&&&&&&JJ &&&&&&&I0/ ? ? ? ? ?00 ?01% @ @C @X @2  @X @2J02 &%0304&%Maximum Value:&&&&&&JJ &&&&&&&I05 ? ? ? ? ?06 ?07% @Z @* @L @5  @L @5J08 &%090:&%10;d ?&&&&&&JJ &&&&&&&I0< ? ? ? ? ?0= ?0>% @ @* @X @2  @X @2J0? &%0@0A& % Increment:A&&&&&&JJ &&&&&&&I0B ? ? ? ? ?0C ?0D0E&%Values0F% A@E&&&&&&JJ&&&&&&& %%0G % @F @W @f @U@  @f @U@J0H &0I % @ @ @f @P  @f @PJ0J &0K1NSButton% @. @C @] @1  @] @1J0L &%0M1 NSButtonCell0N& % Autorepeat0O1NSImage0P1NSMutableString&%GSSwitch&&&&&&JJ&&&&&&&I0Q&0R0S&%GSSwitchSelected&&& &&0T% @. @2 @] @1  @] @1J0U &%0V0W& % Value wrapsO&&&&&&JJ&&&&&&&IQR&&& &&0X0Y&%OptionsFY&&&&&&JJ&&&&&&& %%0Z0[&% Title0\% A &&&&&&JJ&&&&&&& %%0]0^&% NSNamedColorSpace0_&% System0`&% windowBackgroundColor0a&%Window0b&%Steppers Attributes Inspectorb ? ? @Ç @|I&   @ @0c &0d &0e1NSMutableDictionary1 NSDictionary&0f& % TextField670g&%Button1T0h&%TextFieldCell(3)'0i& % Inspector0j&%View(0) 0k&%Box(1)G0l&%TextFieldCell(7)@0m& % TextField10n&%TextFieldCell(0)0o&% NSOwner0p&%GormStepperAttributesInspector0q&%TextFieldCell(4)-0r& % TextField3%0s&%View(1)I0t&%Box(2)0u&%TextFieldCell(1)0v& % TextField0w& % TextField510x&%TextFieldCell(5)30y& % TextField7>0z& % ButtonCell(0)M0{&%View(2) 0|&%TextFieldCell(2) 0}&%ButtonK0~& % TextField20&%Box(0) 0&%TextFieldCell(6)90& % TextField4+0& % ButtonCell(1)V0 &..01NSNibConnector}s0gs0vj0mj0~j0rj0j0wj01NSNibOutletConnectoro}0&%autorepeatButton0ov0& % valueField0o~0&%maximumValueField0fj0yj01NSNibControlConnector}o0&%ok:0go0oi0&%window0og0&%valueWrapsButton0om0&%minimumValueField0of0&%incrementValueField0}g0& % nextKeyView0gv0vm0m~0~f0f}0vo0&%delegate0mo0~o0fo0z}0g0nv0um0|~0hr0q0xw0f0ly0t0j0kt0sk0t0{t0iv0&%initialFirstResponder0&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSTextFieldInspector.gorm/000077500000000000000000000000001475375552500313605ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSTextFieldInspector.gorm/data.classes000066400000000000000000000005771475375552500336610ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormTextFieldInspector = { Actions = ( ); Outlets = ( alignMatrix, backgroundColor, borderMatrix, drawsBackground, tagForm, textColor, editableSwitch, scrollableSwitch, selectableSwitch, sendActionMatrix, singleLineMode ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSTextFieldInspector.gorm/data.info000066400000000000000000000002701475375552500331450ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormNSTextFieldInspector.gorm/objects.gorm000066400000000000000000000414361475375552500337070ustar00rootroot00000000000000GNUstep archive000f4240:00000020:00000171:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@J I @0 @H01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @( @_ @n @[  @n @[J0 &0 % @ @ @m @U  @m @UJ0 &01NSButton1 NSControl% @K @P @] @1  @] @1J0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Editable01NSImage01NSMutableString&%GSSwitch01NSFont%&&&&&&JJ&&&&&&&I0&00&%GSSwitchSelected&&& &&0% @K @F @] @1  @] @1J0 &%00& % Selectable&&&&&&JJ&&&&&&&I&&& &&0% @K @8 @] @1  @] @1J0 &%00 & % Scrollable&&&&&&JJ&&&&&&&I&&& &&0!% @K @ @] @1  @] @1J0" &%0#0$&%Single Line Mode&&&&&&JJ&&&&&&&I&&& &&0%1NSTextFieldCell0&&%Options0'% A@&&&&&&JJ &&&&&&&I0(1NSColor0)&% NSNamedColorSpace0*&% System0+&% windowBackgroundColor0,0-&% NSCalibratedRGBColorSpace ? @ @%%0. % @[ @m @b` @M  @b` @MJ0/ &00 % @ @ @a @B  @a @BJ01 &021NSMatrix% @ @" @_@ @9  @_@ @9J03 &%04'&&&&&&JJ&&&&&&&I% @9 @9 05- ?* ?* ?* ?* ?506& % NSButtonCell0708&%L'&&&&&&JJ&&&&&&&I&&& &&%%09 &0:0;0<& % leftalign_nib'&&&&&&JJ&&&&&&&I&&& &&0=0>0?&%centeralign_nib'&&&&&&JJ&&&&&&&I&&& &&0@0A0B&%rightalign_nib'&&&&&&JJ&&&&&&&I&&& &&0C0D0E&%justifyalign_nib'&&&&&&JJ&&&&&&&I&&& &&0F0G&%N0H0I&%naturalalign_nib'&&&&&&JJ&&&&&&&I&&& &&2 ok:v24@0:8@16C0J0K& % Alignment'&&&&&&JJ &&&&&&&I(0L- ? %%0M1NSForm% @X @$ @P @5  @P @5J0N &%0O1 NSFormCell'&&&&&&JJ&&&&&&&I 0P0Q&%Field:'&&&&&&JJ&&&&&&&% @P @5 @0R)*0S&% controlBackgroundColor0T- ?* ?* ?* ?* ?0U& % NSFormCell%%0V &0W'&&&&&&JJ&&&&&&&I A0X0Y&%Tag:'&&&&&&JJ&&&&&&&W0Z % @[ @r @b` @T  @b` @TJ0[ &0\ % @ @ @a @N  @a @NJ0] &0^1 NSColorWell% @E @: @J @?  @J @?J0_ &%0`'&&&&&&JJ&&&&&&&0a- ? ? ? ? ?0b% @ @ @` @0  @` @0J0c &%0d0e&%Draws Background'&&&&&&JJ&&&&&&&I&&& &&0f0g&%Background color'&&&&&&JJ &&&&&&&I(0h- ? %%0i % @( @r @W @T  @W @TJ0j &0k % @ @ @T @L  @T @LJ0l &0m% @* @, @J @?  @J @?J0n &%0o'&&&&&&JJ&&&&&&&0p0q&% NSCalibratedWhiteColorSpace ?0r0s& % Text Color'&&&&&&JJ &&&&&&&I(0t- ? @ @%%0u % @( @m @W @L  @W @LJ0v &0w % @ @ @V @B  @V @BJ0x &0y% @ @  @R @9  @R @9J0z &%0{'&&&&&&JJ&&&&&&&I% @9 @9 0|- ?* ?* ?* ?* ?|0}& % NSButtonCell0~0&%Button'&&&&&&JJ&&&&&&&I&&& &&%%0 &000& % noBorder_nib'&&&&&&JJ&&&&&&&I&&& &&000&%line_nib'&&&&&&JJ&&&&&&&I&&& &&000& % bezel_nib'&&&&&&JJ&&&&&&&I&&& &&00&%Border'&&&&&&JJ &&&&&&&I(0- ? %%0 % @( @K @n @Q  @n @QJ0 &0 % @ @ @m @E  @m @EJ0 &0% @R @ @U @B  @U @BJ0 &%0&&&&&&JJ&&&&&&&I% @U @2 ? ?0& % NSButtonCell00&%Radio00&%GSRadio&&&&&&JJ&&&&&&&I00&%GSRadioSelected&&& &&%%0 &00& % Enter Only&&&&&&JJ&&&&&&&I&&& &&00& % End Editing&&&&&&JJ&&&&&&&I&&& &&00&%Send Action On&&&&&&JJ&&&&&&& @ @%%00&% Title0% A &&&&&&JJ&&&&&&& %%(0&%Window0&%TextField Attributes Inspector ?  @Ç @xI&   @ @0 &0 &01NSMutableDictionary1 NSDictionary&60& % Button(0)!0& % FormCell(0)W0& % ButtonCell(2)#0& % ButtonCell(7)=0&%ButtonCell(12)0&%Box(0)0& % ActionCell(0)40&%Box 0&%View(3)00&%Button10% @$ @V @L @8  @L @8J0 &%00&%Button'&&&&&&JJ&&&&&&&I&&& &&0&%FormM0&%Matrix2y0&%Box2Z0& % ColorWell30% @S @E @J @>  @J @>J0 &%0'&&&&&&JJ&&&&&&&0q ?0&%ButtonCell(10)F0& % ButtonCell(0)0±& % ButtonCell(5)0ñ& % Matrix(0)0ı&%View(1) 0ű&%View(6)w0Ʊ&%Button30DZ&%Cell(1)o0ȱ&%Box4u0ɱ& % Inspector0ʱ& % ColorWell5m0˱& % FormCell(1)O0̱&%ButtonCell(13)0ͱ& % ButtonCell(3)0α& % ButtonCell(8)@0ϱ& % ActionCell(1){0б&%Box(1)0ѱ& % ColorWell^0ұ&%View(4)\0ӱ&%Button50Ա&%Matrix120ձ&%Box1.0ֱ& % ColorWell20ױ% @S @E @J @>  @J @>J0ر &%0ٱ'&&&&&&JJ&&&&&&&0ڱq ?0۱&%ButtonCell(11)d0ܱ& % ButtonCell(1)0ݱ& % ButtonCell(6):0ޱ&%Button0߱% @$ @V @L @8  @L @8J0 &%00&%Button'&&&&&&JJ&&&&&&&I&&& &&0&%View(2) 0&%Button2b0&%Box3i0&% NSOwner0&%GormTextFieldInspector0& % ColorWell40% @S @E @J @>  @J @>J0 &%0'&&&&&&JJ&&&&&&&0q ?0& % ButtonCell(9)C0& % ButtonCell(4)0&%ButtonCell(14)0& % ActionCell(2)0&%View(0)0&%View(5)k0&%Button40&%Cell(0)`0 &YY01NSNibConnector0&% NSOwner01NSNibOutletConnector0&%window0А0հА0ްɐ0ɐ0԰0P& % alignMatrixPАPP&%tagFormPАPѰҐPҐPАPְɐP ɐP ɐP ʰP ȰАP ŐPP&%backgroundColorPP& % textColorPP&%drawsBackgroundPP& % borderMatrixP1 NSNibControlConnectorѰP&%ok:P P ʰP ԰P P P&%ok:PѰP& % nextKeyViewP P!ʰP"԰P#P$ɰP%&%initialFirstResponderP&P'&%delegateP(ưP)P*ӰP+P,&%editableSwitchP-P.&%scrollableSwitchP/ ưP0&%ok:P1 0P2 Ӱ0P3P4& % nextKeyViewP5ư4P64P7P8&%selectableSwitchP9АP:񰯐P;ðP<ÐP=ܰÐP>P?&%sendActionMatrixP@ ðPA&%ok:PBðPC& % nextKeyViewPDPEPF PG&%ok:PHPI&%singleLineModePJӰPK& % nextKeyViewPLАPMİАPN㰱POͰƐPPPQ°ӐPRՐPSݰԐPTԐPUΰԐPVԐPWԐPXԐPYPZ˰P[ҰP\ѐP]۰P^ P_&% NSFirstP`&% ok:PaPbǰʐPcŰȐPdPḛPfﰹPgϰPhÐPi&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormPopUpButtonAttributesInspector.h000066400000000000000000000032211475375552500327410ustar00rootroot00000000000000/* GormPopUpButtonAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormPopUpButtonAttributesInspector_h #define INCLUDED_GormPopUpButtonAttributesInspector_h #include @class NSButton; @class NSForm; @class NSMatrix; @class NSPopUpButton; @interface GormPopUpButtonAttributesInspector:IBInspector { NSMatrix *typeMatrix; NSButton *autoenableSwitch; NSButton *enableSwitch; NSForm *tagForm; NSForm *defaultItemForm; NSForm *pullDownTitleForm; NSPopUpButton *pullDownArrowPopUp; } @end #endif /* INCLUDED_GormPopUpButtonAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormPopUpButtonAttributesInspector.m000066400000000000000000000101711475375552500327500ustar00rootroot00000000000000/* GormPopUpButtonAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormPopUpButtonAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSPopUpButton (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormPopUpButtonAttributesInspector"; } @end @implementation GormPopUpButtonAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSPopUpButtonInspector" owner: self] == NO) { NSLog(@"Could not gorm GormPopUpButtonInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { if (sender == typeMatrix) { BOOL pullsDown = [[sender selectedCell] tag] == YES ? YES : NO; NSArray *itemArray = [[object itemArray] copy]; NSEnumerator *en = [itemArray objectEnumerator]; id o = nil; [object removeAllItems]; [object setPullsDown: pullsDown]; while ((o = [en nextObject]) != nil) { id mi = nil; [object addItemWithTitle: [o title]]; mi = [object lastItem]; [mi setAction: NULL]; // @selector(_popUpItemAction:)]; [mi setTarget: nil]; } } else if (sender == autoenableSwitch) { [object setAutoenablesItems: ([sender state] == NSOnState)]; } else if (sender == enableSwitch) { [object setEnabled: ([sender state] == NSOnState)]; } else if (sender == tagForm) { [object setTag: [[sender cellAtIndex: 0] intValue]]; } else if (sender == defaultItemForm) { int index = [[sender cellAtIndex: 0] intValue]; int num = [object numberOfItems]; // if the user enters more than the number, select the last item. index = (index < num && index >= 0) ? index : num; [object selectItemAtIndex: index]; } else if (sender == pullDownTitleForm) { [object setTitle: [[sender cellAtIndex: 0] stringValue]]; } else if (sender == pullDownArrowPopUp) { [object setPreferredEdge: [[sender selectedItem] tag]]; } [super ok: sender]; } /* Sync from object ( NSPopUpButton ) changes to the inspector */ - (void) revert: (id)sender { BOOL pullsDown; if ( object == nil) return; pullsDown = [object pullsDown]; [typeMatrix selectCellWithTag: pullsDown]; [autoenableSwitch setState: ([object autoenablesItems] ? NSOnState : NSOffState)]; [enableSwitch setState: [object isEnabled]]; [[tagForm cellAtRow: 0 column: 0] setIntValue: [object tag]]; [[defaultItemForm cellAtRow: 0 column: 0] setIntValue: [object indexOfSelectedItem]]; [pullDownTitleForm setEnabled: pullsDown]; [[pullDownTitleForm cellAtIndex: 0] setStringValue: pullsDown ? [object title] : @""]; [pullDownArrowPopUp setEnabled: pullsDown]; [pullDownArrowPopUp selectItemWithTag: [object preferredEdge]]; [super revert:sender]; } /* delegate method for tagForm and defaultItemForm */ -(void) controlTextDidChange:(NSNotification*) aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormPopUpButtonEditor.m000066400000000000000000000011641475375552500301630ustar00rootroot00000000000000#include #include #include "GormNSPopUpButton.h" #define _EO ((NSPopUpButton *)_editedObject) @interface GormPopUpButtonEditor : GormControlEditor { } @end @implementation GormPopUpButtonEditor - (void) mouseDown: (NSEvent *)theEvent { // double-clicked -> let's edit if (([theEvent clickCount] == 2) && [parent isOpened]) { [[_EO cell] attachPopUpWithFrame: [_EO bounds] inView: _editedObject]; NSDebugLog(@"attach down"); [[document openEditorForObject: [[_EO cell] menu]] activate]; } else { [super mouseDown: theEvent]; } } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormProgressIndicatorAttributesInspector.h000066400000000000000000000030571475375552500341520ustar00rootroot00000000000000/* GormProgressIndicatorAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormProgressIndicatorAttributesInspector_h #define INCLUDED_GormProgressIndicatorAttributesInspector_h #include @class NSButton; @class NSTextField; @interface GormProgressIndicatorAttributesInspector: IBInspector { NSButton *indeterminate; NSButton *vertical; NSTextField *minValue; NSTextField *maxValue; } @end #endif /* INCLUDED_GormProgressIndicatorAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormProgressIndicatorAttributesInspector.m000066400000000000000000000060771475375552500341640ustar00rootroot00000000000000/* GormProgressIndicatorAttributesInspector.m Copyright (C) 2001-2020 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormProgressIndicatorAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSProgressIndicator (IBObjectAdditions) - (NSString *) inspectorClassName { return @"GormProgressIndicatorAttributesInspector"; } @end @implementation GormProgressIndicatorAttributesInspector -(id) init { if ( ( self = [super init] ) == nil) return nil; if ( [NSBundle loadNibNamed: @"GormNSProgressIndicatorInspector" owner: self] == NO ) { NSLog(@"Could not open gorm GormNSProgressIndicatorInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ -(void) ok: (id) sender { if ( sender == indeterminate ) { [object setIndeterminate: ([indeterminate state] == NSOnState)]; } else if (sender == vertical ) { [object setVertical: ([vertical state] == NSOnState)]; } else if ( sender == minValue ) { [object setMinValue: [minValue doubleValue]]; } else if ( sender == maxValue ) { [object setMaxValue: [maxValue doubleValue]]; } [super ok: sender]; } /* Sync from object (ProgressIndicator ) changes to the inspector */ - (void) revert:(id) sender { if ( object == nil ) return; if ( ![object isKindOfClass:[NSProgressIndicator class]] ) NSLog ( @"GormNSProgressIndicatorInspector: Unexpected class of object; %@", [object class]); [indeterminate setState: [(NSProgressIndicator *)object isIndeterminate]?NSOnState:NSOffState]; [vertical setState: [(NSProgressIndicator *)object isVertical] ? NSOnState:NSOffState]; [minValue setIntValue: [(NSProgressIndicator *)object minValue]]; [maxValue setIntValue: [(NSProgressIndicator *)object maxValue]]; [super revert:sender]; } /* delegate method for titleForm */ - (void)controlTextDidChange:(NSNotification *)aNotification { [self ok: [aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormSliderAttributesInspector.h000066400000000000000000000031121475375552500317230ustar00rootroot00000000000000/* GormSliderAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormSliderAttributesInspector_h #define INCLUDED_GormSliderAttributesInspector_h #include @class NSButton; @class NSForm; @interface GormSliderAttributesInspector: IBInspector { NSForm *valuesForm; NSForm *altIncrementForm; NSButton *continuousSwitch; NSButton *enabledSwitch; NSButton *stopOnTicksSwitch; NSForm *knobThicknessForm; NSForm *tagForm; } @end #endif /* INCLUDED_GormSliderAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormSliderAttributesInspector.m000066400000000000000000000076661475375552500317520ustar00rootroot00000000000000/* GormSliderAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormSliderAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSSlider (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormSliderAttributesInspector"; } @end @implementation GormSliderAttributesInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSSliderInspector" owner: self] == NO) { NSLog(@"Could not gorm GormSliderInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok:(id) sender { if (sender == valuesForm) { [object setMinValue: [[sender cellAtIndex: 0] doubleValue]]; [object setMaxValue: [[sender cellAtIndex: 2] doubleValue]]; [object setDoubleValue: [[sender cellAtIndex: 1] doubleValue]]; [object setNumberOfTickMarks: [[sender cellAtIndex: 3] intValue]]; } else if ( sender == stopOnTicksSwitch ) { [object setAllowsTickMarkValuesOnly: (([stopOnTicksSwitch state] == NSOnState) ? YES:NO)]; } else if ( sender == continuousSwitch ) { [object setContinuous: (([continuousSwitch state] == NSOnState) ? YES : NO)]; } else if ( sender == enabledSwitch ) { [object setEnabled: (([enabledSwitch state] == NSOnState) ? YES : NO)]; } else if (sender == altIncrementForm) { [[object cell] setAltIncrementValue: [[sender cellAtIndex: 0] doubleValue]]; } else if (sender == knobThicknessForm) { [[object cell] setKnobThickness: [[sender cellAtIndex: 0] floatValue]]; } else if (sender == tagForm) { [[object cell] setTag: [[sender cellAtIndex: 0] intValue]]; } } /* Sync from object ( NSSlider ) changes to the inspector */ - (void) revert:(id) sender { if ( object == nil) return; [[valuesForm cellAtIndex: 0] setDoubleValue: [object minValue]]; [[valuesForm cellAtIndex: 1] setDoubleValue: [object doubleValue]]; [[valuesForm cellAtIndex: 2] setDoubleValue: [object maxValue]]; [[valuesForm cellAtIndex: 3] setIntValue: [object numberOfTickMarks]]; [continuousSwitch setState: ([object isContinuous] ? NSOnState : NSOffState)]; [enabledSwitch setState: ([object isEnabled] ? NSOnState : NSOffState)]; [stopOnTicksSwitch setState: ([object allowsTickMarkValuesOnly] ? NSOnState : NSOffState)]; [[altIncrementForm cellAtIndex: 0] setDoubleValue: [[object cell] altIncrementValue]]; [[knobThicknessForm cellAtIndex: 0] setFloatValue: [[object cell] knobThickness]]; [[tagForm cellAtIndex: 0] setIntValue: [[object cell] tag]]; [super revert:sender]; } /* delegate methods for all Forms */ -(void) controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormStepperAttributesInspector.h000066400000000000000000000030511475375552500321250ustar00rootroot00000000000000/* GormStepperAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormStepperAttributesInspector_h #define INCLUDED_GormStepperAttributesInspector_h #include @class NSButton; @class NSTextField; @interface GormStepperAttributesInspector : IBInspector { NSTextField *valueField; NSTextField *minimumValueField; NSTextField *maximumValueField; NSTextField *incrementValueField; NSButton *autorepeatButton; NSButton *valueWrapsButton; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormStepperAttributesInspector.m000066400000000000000000000064651475375552500321460ustar00rootroot00000000000000/* GormStepperAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormStepperAttributesInspector.h" // Some simple inspectors. @interface GormStepperCellAttributesInspector : GormStepperAttributesInspector @end @implementation GormStepperCellAttributesInspector @end @implementation GormStepperAttributesInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSStepperInspector" owner: self] == NO) { NSLog(@"Could not gorm GormStepperAttributesInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { if (sender == valueField) { [object setDoubleValue:[sender doubleValue]]; } else if (sender == minimumValueField) { [object setMinValue:[sender doubleValue]]; } else if (sender == maximumValueField) { [object setMaxValue:[sender doubleValue]]; } else if (sender == incrementValueField) { [object setIncrement:[sender doubleValue]]; } else if (sender == autorepeatButton) { switch ([(NSButton *)sender state]) { case 0: [object setAutorepeat: NO]; break; case 1: [object setAutorepeat: YES]; break; } } else if (sender == valueWrapsButton) { switch ([(NSButton *)sender state]) { case 0: [object setValueWraps: NO]; break; case 1: [object setValueWraps: YES]; break; } } [super ok:(id) sender]; } /* Sync from object ( NSStepper ) changes to the inspector */ - (void) revert:(id) sender { if (object == nil) return; [valueField setDoubleValue: [object doubleValue]]; [minimumValueField setDoubleValue: [object minValue]]; [maximumValueField setDoubleValue: [object maxValue]]; [incrementValueField setDoubleValue: [object increment]]; if ([object autorepeat]) [autorepeatButton setState: 1]; else [autorepeatButton setState: 0]; if ([object valueWraps]) [valueWrapsButton setState: 1]; else [valueWrapsButton setState: 0]; [super revert:sender]; } /* delegate methods for NSForms */ -(void) controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormTextFieldAttributesInspector.h000066400000000000000000000033021475375552500323720ustar00rootroot00000000000000/* GormTextFieldAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormTextFieldAttributesInspector_h #define INCLUDED_GormTextFieldAttributesInspector_h #include @class NSButton; @class NSColorWell; @class NSForm; @class NSMatrix; @interface GormTextFieldAttributesInspector: IBInspector { NSMatrix *alignMatrix; NSColorWell *backgroundColor; NSButton *drawsBackground; NSColorWell *textColor; NSMatrix *borderMatrix; NSButton *editableSwitch; NSButton *selectableSwitch; NSButton *scrollableSwitch; NSButton *singleLineMode; NSForm *tagForm; NSMatrix *sendActionMatrix; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/GormTextFieldAttributesInspector.m000066400000000000000000000114141475375552500324020ustar00rootroot00000000000000/* GormTextFieldAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormTextFieldAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSTextField (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormTextFieldAttributesInspector"; } @end @implementation GormTextFieldAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSTextFieldInspector" owner: self] == NO) { NSLog(@"Could not gorm GormTextFieldInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { if (sender == alignMatrix) { [object setAlignment: (NSTextAlignment)[[sender selectedCell] tag]]; } else if (sender == backgroundColor) { [object setBackgroundColor: [sender color]]; } else if (sender == drawsBackground) { [object setDrawsBackground: [drawsBackground state]]; } else if (sender == textColor) { [object setTextColor: [sender color]]; } else if ( sender == editableSwitch ) { [object setEditable: [editableSwitch state]]; } else if ( sender == selectableSwitch ) { [object setSelectable: [selectableSwitch state]]; } else if ( sender == scrollableSwitch ) { [[object cell] setScrollable: [scrollableSwitch state]]; } else if (sender == borderMatrix) { BOOL bordered=NO, bezeled=NO; if ([[sender cellAtRow: 0 column: 0] state] == NSOnState) { bordered = bezeled = NO; } else if ([[sender cellAtRow: 0 column: 1] state] == NSOnState) { bordered = YES; bezeled = NO; } else if ([[sender cellAtRow: 0 column: 2] state] == NSOnState) { bordered = NO; bezeled = YES; } [object setBordered: bordered]; [object setBezeled: bezeled]; } else if (sender == tagForm) { [object setTag: [[sender cellAtIndex: 0] intValue]]; } else if (sender == sendActionMatrix) { BOOL sendActionOnEndEditing = ([[sender cellAtRow: 1 column: 0] state] == NSOnState); [[object cell] setSendsActionOnEndEditing: sendActionOnEndEditing]; } else if (sender == singleLineMode) { [[object cell] setUsesSingleLineMode: [singleLineMode state]]; } [super ok:sender]; } /* Sync from object ( NSTextField ) changes to the inspector */ - (void) revert:(id) sender { if (object == nil) return; [alignMatrix selectCellWithTag: [object alignment]]; [backgroundColor setColorWithoutAction: [object backgroundColor]]; [textColor setColorWithoutAction: [object textColor]]; [drawsBackground setState: ([object drawsBackground]) ? NSOnState : NSOffState]; [editableSwitch setState:[object isEditable]]; [selectableSwitch setState:[object isSelectable]]; [scrollableSwitch setState:[[object cell] isScrollable]]; [singleLineMode setState:[[object cell] usesSingleLineMode]]; if ([object isBordered] == YES) { [borderMatrix selectCellAtRow: 0 column: 1]; } else { if ([object isBezeled] == YES) [borderMatrix selectCellAtRow: 0 column: 2]; else [borderMatrix selectCellAtRow: 0 column: 0]; } [[tagForm cellAtIndex: 0] setIntValue: [object tag]]; if([[object cell] sendsActionOnEndEditing]) { [sendActionMatrix selectCellAtRow: 1 column: 0]; } else { [sendActionMatrix selectCellAtRow: 0 column: 0]; } [super revert:sender]; } /* delegate method for tagForm */ -(void) controlTextDidChange:(NSNotification *)aNotification { [self ok: [aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/inspectors.m000066400000000000000000000033431475375552500261220ustar00rootroot00000000000000/* inspectors - Various inspectors for control elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormButtonAttributesInspector.h" #include "GormStepperAttributesInspector.h" @implementation NSButton (IBObjectAdditions) - (NSString*) editorClassName { return @"GormButtonEditor"; } - (NSString*) inspectorClassName { return @"GormButtonAttributesInspector"; } @end @implementation NSButtonCell (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormButtonCellAttributesInspector"; } @end @implementation NSStepper (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormStepperAttributesInspector"; } @end @implementation NSStepperCell (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormStepperCellAttributesInspector"; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/2Controls/palette.table000066400000000000000000000003711475375552500262200ustar00rootroot00000000000000{ NibFile = "ControlsPalette"; Class = "ControlsPalette"; Icon = "ControlsPalette"; ExportClasses = (); ExportImages = (); SubstituteClasses = { GormNSPopUpButton = NSPopUpButton; GormNSPopUpButtonCell = NSPopUpButtonCell; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/000077500000000000000000000000001475375552500240535ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/ContainersPalette.m000066400000000000000000000122451475375552500276610ustar00rootroot00000000000000/* main.m Copyright (C) 1999 Free Software Foundation, Inc. Author: Richard frith-Macdonald (richard@brainstorm.co.uk> Date: 1999 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNSBrowser.h" #include "GormNSTableView.h" #include "GormNSOutlineView.h" #include /* --------------------------------------------------------------- * Containers Palette Display */ @interface ContainersPalette: IBPalette { } @end @implementation ContainersPalette - (void) finishInstantiate { NSView *contents; NSTableView *tv; NSOutlineView *ov; NSTableColumn *tc; NSSize contentSize; id v; originalWindow = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, 272, 192) styleMask: NSBorderlessWindowMask backing: NSBackingStoreRetained defer: NO]; [originalWindow setTitle: @"Containers"]; contents = [originalWindow contentView]; /*******************/ /* First Column... */ /*******************/ // NSBrowser // 124 is the minimum width. Below that the browser doesn't display !! v = [[GormNSBrowser alloc] initWithFrame: NSMakeRect(10, 98, 124, 78)]; [v setHasHorizontalScroller: YES]; [v setTitled: YES]; [v loadColumnZero]; [contents addSubview: v]; RELEASE(v); // NSTabView v = [[NSTabView alloc] initWithFrame: NSMakeRect(10, 10, 124, 78)]; [contents addSubview: v]; { NSView *vv; NSTabViewItem *tvi; tvi = [[NSTabViewItem alloc] initWithIdentifier: @"item 1"]; [tvi setLabel: @"Item 1"]; vv = [[NSView alloc] init]; [vv setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; [tvi setView: vv]; [v addTabViewItem: tvi]; RELEASE(tvi); tvi = [[NSTabViewItem alloc] initWithIdentifier: @"item 2"]; [tvi setLabel: @"Item 2"]; vv = [[NSView alloc] init]; [vv setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; [tvi setView: vv]; [v addTabViewItem: tvi]; RELEASE(tvi); } RELEASE(v); /********************/ /* Second Column... */ /********************/ // NSTableView v = [[NSScrollView alloc] initWithFrame: NSMakeRect(136, 10, 124, 78)]; [contents addSubview: v]; [v setHasVerticalScroller: YES]; [v setHasHorizontalScroller: NO]; contentSize = [v contentSize]; [v setBorderType: NSBezelBorder]; tv = [[GormNSTableView alloc] initWithFrame: NSZeroRect]; tc = [[NSTableColumn alloc] initWithIdentifier: @"column1"]; [[tc headerCell] setStringValue: @" "]; [tc setWidth: floor(contentSize.width/2)]; [tc setMinWidth: 20]; [tc setResizable: YES]; [tc setEditable: YES]; [tv addTableColumn: tc]; RELEASE(tc); tc = [[NSTableColumn alloc] initWithIdentifier: @"column2"]; [[tc headerCell] setStringValue: @" "]; [tc setWidth: ceil(contentSize.width/2)]; [tc setMinWidth: 20]; [tc setResizable: YES]; [tc setEditable: YES]; [tv addTableColumn: tc]; RELEASE(tc); [v setDocumentView: tv]; [contents addSubview: v]; RELEASE(tv); RELEASE(v); // NSOutlineView v = [[NSScrollView alloc] initWithFrame: NSMakeRect(136, 98, 124, 78)]; [contents addSubview: v]; [v setHasVerticalScroller: YES]; [v setHasHorizontalScroller: NO]; contentSize = [v contentSize]; [v setBorderType: NSBezelBorder]; ov = [[GormNSOutlineView alloc] initWithFrame: NSZeroRect]; tc = [[NSTableColumn alloc] initWithIdentifier: @"classes"]; [[tc headerCell] setStringValue: @" "]; [tc setWidth: floor(contentSize.width/2)]; [tc setMinWidth: 20]; [tc setResizable: YES]; [tc setEditable: YES]; [ov addTableColumn: tc]; [ov setOutlineTableColumn: tc]; RELEASE(tc); tc = [[NSTableColumn alloc] initWithIdentifier: @"outlets"]; [[tc headerCell] setStringValue: @" "]; [tc setWidth: ceil(contentSize.width/2)]; [tc setMinWidth: 20]; [tc setResizable: YES]; [tc setEditable: YES]; [ov addTableColumn: tc]; RELEASE(tc); tc = [[NSTableColumn alloc] initWithIdentifier: @"actions"]; [[tc headerCell] setStringValue: @" "]; [tc setWidth: ceil(contentSize.width/2)]; [tc setMinWidth: 20]; [tc setResizable: YES]; [tc setEditable: YES]; [ov addTableColumn: tc]; RELEASE(tc); [ov setDrawsGrid: NO]; [ov setIndentationPerLevel: 10.]; [ov setIndentationMarkerFollowsCell: YES]; [ov expandItem: @"NSObject" expandChildren: YES]; [v setDocumentView: ov]; RELEASE(ov); RELEASE(v); } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/ContainersPalette.tiff000066400000000000000000000016121475375552500303510ustar00rootroot00000000000000II*`P8PB@B{~DҨ*"XpLF#z;gj(TI䆇 R,IB4jծרxPa5U )UWĞ\<& D`jf/*W-fsY$`&ME]Clv[77e<n^vmep|]w͗^_?Om>$?$ @/GNPso@В% >d0TkDʐ#9p`1|4ǑeO.I%ɒl')ʒ ##tD8z( ' 'apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GNUmakefile000066400000000000000000000035501475375552500261300ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make PALETTE_NAME = 3Containers 3Containers_PALETTE_ICON = ContainersPalette 3Containers_PRINCIPAL_CLASS = ContainersPalette 3Containers_OBJC_FILES = \ ContainersPalette.m \ inspectors.m \ GormNSBrowser.m \ GormNSTableView.m \ GormTableViewEditor.m \ GormTabViewEditor.m \ GormNSOutlineView.m \ GormBrowserAttributesInspector.m \ GormTabViewAttributesInspector.m \ GormTableColumnAttributesInspector.m \ GormTableColumnSizeInspector.m \ GormTableViewAttributesInspector.m \ GormTableViewSizeInspector.m 3Containers_RESOURCE_FILES = \ ContainersPalette.tiff \ GormNSBrowserInspector.gorm \ GormNSTableViewInspector.gorm \ GormNSTableColumnInspector.gorm \ GormNSTableColumnSizeInspector.gorm \ GormTabViewInspector.gorm \ palette.table 3Containers_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/palette.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GNUmakefile.preamble000066400000000000000000000013041475375552500277110ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../../.. ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework $(PALETTE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormBrowserAttributesInspector.h000066400000000000000000000033551475375552500324400ustar00rootroot00000000000000/* GormBrowserAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormBrowserAttributesInspector_h #define INCLUDED_GormBrowserAttributesInspector_h #include @class NSButton; @class NSForm; @class NSTextField; @interface GormBrowserAttributesInspector : IBInspector { /* options */ NSButton *branchSelectionSwitch; NSButton *displayTitlesSwitch; NSButton *emptySelectionSwitch; NSButton *multipleSelectionSwitch; NSButton *horizontalScrollerSwitch; NSButton *separateColumnsSwitch; NSForm *tagForm; NSTextField *minColumnWidthField; NSTextField *maxVisibleColumnsField; } @end #endif /* INCLUDED_GormBrowserAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormBrowserAttributesInspector.m000066400000000000000000000077661475375552500324570ustar00rootroot00000000000000/* GormBrowserAttributesInspector.m Copyright (C) 2001-2015 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Gregory John Casamento Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormBrowserAttributesInspector.h" @implementation GormBrowserAttributesInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSBrowserInspector" owner: self] == NO) { NSLog(@"Could not gorm GormBrowserInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id)sender { /* options */ if ( sender == multipleSelectionSwitch ) { [object setAllowsMultipleSelection: [multipleSelectionSwitch state]]; } else if ( sender == emptySelectionSwitch ) { [object setAllowsEmptySelection: [emptySelectionSwitch state]]; } else if ( sender == branchSelectionSwitch ) { [object setAllowsBranchSelection: [branchSelectionSwitch state]]; } else if ( sender == separateColumnsSwitch ) { [object setSeparatesColumns: [separateColumnsSwitch state]]; } else if ( sender == horizontalScrollerSwitch ) { [object setHasHorizontalScroller: [horizontalScrollerSwitch state]]; } else if ( sender == displayTitlesSwitch ) { [object setTitled: [displayTitlesSwitch state]]; } else if ( sender == minColumnWidthField ) /* minimum column width */ { // TODO: Use stepper.. [object setMinColumnWidth: [minColumnWidthField intValue]]; [minColumnWidthField setStringValue: [NSString stringWithFormat:@"%.2f", [object minColumnWidth]]]; } else if ( sender == maxVisibleColumnsField ) { [object setMaxVisibleColumns: [maxVisibleColumnsField intValue]]; } else if(sender == tagForm) /* tag */ { [object setTag:[[tagForm cellAtIndex:0] intValue]]; } [super ok:sender]; } /* Sync from object ( NSBrowser ) changes to the inspector */ - (void) revert: (id) sender { if (object == nil) return; [multipleSelectionSwitch setState: [object allowsMultipleSelection]]; [emptySelectionSwitch setState: [object allowsEmptySelection]]; [branchSelectionSwitch setState:[object allowsBranchSelection]]; [separateColumnsSwitch setState:[object separatesColumns]]; [displayTitlesSwitch setState:[object isTitled]]; [horizontalScrollerSwitch setState:[object hasHorizontalScroller]]; [[tagForm cellAtIndex:0] setIntValue: [object tag]]; [minColumnWidthField setStringValue: [NSString stringWithFormat:@"%.2f", [object minColumnWidth]]]; [maxVisibleColumnsField setStringValue: [NSString stringWithFormat:@"%ld", (long int)[object maxVisibleColumns]]]; [super revert:sender]; } /* delegate method for tagForm and minColumnWidthField */ -(void) controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSBrowser.h000066400000000000000000000020561475375552500267400ustar00rootroot00000000000000/* GormNSBrowser.h Copyright (C) 2001 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormNSBrowser_h #define INCLUDED_GormNSBrowser_h #include @interface GormNSBrowser : NSBrowser { id _gormDelegate; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSBrowser.m000066400000000000000000000056161475375552500267520ustar00rootroot00000000000000/* GormNSBrowser.m Copyright (C) 2001 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormNSBrowser.h" /* --------------------------------------------------------------- * NSBrowser Delegate */ @interface NSBrowserDelegate: NSObject { } - (NSInteger) browser: (NSBrowser *)sender numberOfRowsInColumn: (NSInteger)column; - (NSString *) browser: (NSBrowser *)sender titleOfColumn: (NSInteger)column; - (void) browser: (NSBrowser *)sender willDisplayCell: (id)cell atRow: (NSInteger)row column: (NSInteger)column; @end @implementation NSBrowserDelegate - (NSInteger) browser: (NSBrowser *)sender numberOfRowsInColumn: (NSInteger)column { return 0; } - (NSString *) browser: (NSBrowser *)sender titleOfColumn: (NSInteger)column { return (column==0) ? @"Browser" : @""; } - (void) browser: (NSBrowser *)sender willDisplayCell: (id)cell atRow: (NSInteger)row column: (NSInteger)column { // NSDebugLog(@"%@: browser %@ will display %@ %@ at %d,%d",self,sender,[cell class],cell,row,column); // This code should never be called because there is no row // in our browser. But just in case... [cell setLeaf:YES]; [cell setStringValue: @""]; } @end static id _sharedDelegate = nil; @implementation GormNSBrowser + (id) sharedDelegate { if (_sharedDelegate == nil) { _sharedDelegate = [[NSBrowserDelegate alloc] init]; } return _sharedDelegate; } - (id) initWithFrame: (NSRect) aRect { self = [super initWithFrame: aRect]; [super setDelegate: [GormNSBrowser sharedDelegate]]; _gormDelegate = nil; return self; } - (void)setDelegate: (id)anObject { _gormDelegate = anObject; } - (id)delegate { return _gormDelegate; } - (void)encodeWithCoder: (NSCoder*) aCoder { _browserDelegate = _gormDelegate; [super encodeWithCoder: aCoder]; _browserDelegate = _sharedDelegate; } - (id) initWithCoder: (NSCoder*) aCoder { [super setDelegate: [GormNSBrowser sharedDelegate]]; self = [super initWithCoder: aCoder]; return self; } - (NSString *) className { return @"NSBrowser"; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSBrowserInspector.gorm/000077500000000000000000000000001475375552500314165ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSBrowserInspector.gorm/data.classes000066400000000000000000000006301475375552500337050ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormBrowserAttributesInspector = { Actions = ( ); Outlets = ( minColumnWidthField, tagForm, branchSelectionSwitch, displayTitlesSwitch, emptySelectionSwitch, multipleSelectionSwitch, horizontalScrollerSwitch, separateColumnsSwitch, maxVisibleColumnsField ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSBrowserInspector.gorm/data.info000066400000000000000000000002701475375552500332030ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSBrowserInspector.gorm/objects.gorm000066400000000000000000000221771475375552500337460ustar00rootroot00000000000000GNUstep archive000f4240:00000020:000000d7:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 % @ @ @p @w`  @p @w`J0 &0 % @ @e @o @d  @o @dJ0 &0 % @ @ @m @`  @m @`J0 &01NSButton1 NSControl% @1 @[ @f` @1  @f` @1J0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Allow multiple selection01NSImage01NSMutableString&%GSSwitch01NSFont%&&&&&&JJ&&&&&&&I0&00&%GSSwitchSelected&&& &&0% @1 @V @f` @1  @f` @1J0 &%00&%Allow empty selection&&&&&&JJ&&&&&&&I&&& &&0% @1 @Q @f` @1  @f` @1J0 &%00 &%Allow branch selection&&&&&&JJ&&&&&&&I&&& &&0!% @1 @H @f` @1  @f` @1J0" &%0#0$&%Separates columns&&&&&&JJ&&&&&&&I&&& &&0%% @1 @< @f` @1  @f` @1J0& &%0'0(&%Display titles&&&&&&JJ&&&&&&&I&&& &&0)% @1 @  @f` @1  @f` @1J0* &%0+0,&%Allows horizontal scroller&&&&&&JJ&&&&&&&I&&& &&0-1NSTextFieldCell0.&%Options0/% A@&&&&&&JJ &&&&&&&I001NSColor01&% NSNamedColorSpace02&% System03&% windowBackgroundColor0405&% NSCalibratedRGBColorSpace ? @ @%%061NSForm1NSMatrix% @T @H @U@ @5  @U@ @5J07 &%081 NSFormCell/&&&&&&JJ&&&&&&&I 090:&%Field:/&&&&&&JJ&&&&&&&% @U@ @5 @0;120<&% controlBackgroundColor0=5 ?* ?* ?* ?* ?0>& % NSFormCell%%0? &0@0A&%0/A&&&&&&JJ&&&&&&&I A0B0C&%Tag:/C&&&&&&JJ&&&&&&&@0D % @ @R @o @W@  @o @W@J0E &0F % @ @ @o @R  @o @RJ0G &0H1 NSTextField% @e @. @L @5  @L @5J0I &%0J&&&&&&JJ &&&&&&&I0K10L&%System0M&%textBackgroundColor0N1L0O& % textColor0P% @ @1 @d @1  @d @1J0Q &%0R0S&%Maximum Visible Columns:0T% A@&&&&&&JJ &&&&&&&IKN0U% @ @E @d @1  @d @1J0V &%0W0X&%Minimum Column Width:T&&&&&&JJ &&&&&&&IKN0Y% @e @D @L @5  @L @5J0Z &%0[&&&&&&JJ &&&&&&&IKN0\0]& % Attributes]&&&&&&JJ&&&&&&& %%0^0_&%Title0`% A &&&&&&JJ&&&&&&& @ @%%00a&%Window0b&%Browser Attributes Inspectorb ? @L @Ç @|I&   @ @p0c &0d &0e1NSMutableDictionary1 NSDictionary&0f&% NSOwner0g&%GormBrowserAttributesInspector0h&%Button5)0i&%Button4%0j&%Button0k& % Inspector0l& % FormCell(1)80m&%Button3!0n&%TextFieldCell(0)J0o& % ButtonCell(1)0p&%Button20q&%Button10r& % ButtonCell(5)+0s&%Box 0t&%Form160u& % FormCell(0)@0v& % ButtonCell(0)0w& % TextField3P0x&%View(2)F0y&%TextFieldCell(3)[0z& % TextField2H0{& % ButtonCell(4)'0|& % TextField1U0}&%TextFieldCell(2)W0~&%View(1) 0&%Box1D0&%Box(0)0& % ButtonCell(3)#0&%TextFieldCell(1)R0& % TextFieldY0&%View(0) 0& % ButtonCell(2)0 &<<01NSNibConnectork0&% NSOwner0s01NSNibOutletConnectork0&%window0t0t0&%delegate0|x0t0&%tagForm0j~0q~0p~0m~0i~0h~0j0&%multipleSelectionSwitch0q0&%emptySelectionSwitch0p0&%branchSelectionSwitch0m0&%separateColumnsSwitch0i0&%displayTitlesSwitch0h0&%horizontalScrollerSwitch01 NSNibControlConnectorj0&%ok:0 q0 p0 m0 i0 h0jq0& % nextKeyView0qp0pm0mi0ih0zx0wx00x00&%minColumnWidthField0 0&%ok:0 z0z0&%maxVisibleColumnsField0 t0&%ok:000~s0vj0±oq0ñp0ım0ű{i0Ʊrh0DZut0ȱlt0ɱx0ʱnz0˱w0̱}|0ͱy0αz0ϱ& % nextKeyView0бzt0ѱtj0ұh0ӱkj0Ա&%initialFirstResponder0ձ&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSOutlineView.h000066400000000000000000000034171475375552500275710ustar00rootroot00000000000000/* GormNSOutlineView.h Copyright (C) 2002 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2002 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormNSOutlineView_h #define INCLUDED_GormNSOutlineView_h #include #include @interface GormNSOutlineView : NSOutlineView { id _gormDataSource; id _gormDelegate; BOOL _gormAllowsColumnReordering; BOOL _gormAllowsColumnResizing; BOOL _gormAllowsColumnSelection; BOOL _gormAllowsMultipleSelection; BOOL _gormAllowsEmptySelection; } - (void) setGormDelegate: (id)anObject; - (void) setGormAllowsColumnReordering: (BOOL)flag; - (BOOL) gormAllowsColumnReordering; - (void) setGormAllowsColumnResizing: (BOOL)flag; - (BOOL) gormAllowsColumnResizing; - (void) setGormAllowsMultipleSelection: (BOOL)flag; - (BOOL) gormAllowsMultipleSelection; - (void) setGormAllowsEmptySelection: (BOOL)flag; - (BOOL) gormAllowsEmptySelection; - (void) setGormAllowsColumnSelection: (BOOL)flag; - (BOOL) gormAllowsColumnSelection; @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSOutlineView.m000066400000000000000000000147751475375552500276070ustar00rootroot00000000000000/* GormNSOutlineView.m Copyright (C) 2002 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2002 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormNSOutlineView.h" /* --------------------------------------------------------------- * NSTableView dataSource */ @interface NSOutlineViewDataSource: NSObject { } - (id)outlineView: (NSOutlineView *)outlineView child: (NSInteger)index ofItem: (id)item; - (BOOL)outlineView: (NSOutlineView *)outlineView isItemExpandable: (id)item; - (NSInteger) outlineView: (NSOutlineView *)outlineView numberOfChildrenOfItem: (id)item; - (id) outlineView: (NSOutlineView *)outlineView objectValueForTableColumn: (NSTableColumn *)tableColumn byItem: (id)item; @end @implementation NSOutlineViewDataSource // required methods for data source - (id)outlineView: (NSOutlineView *)outlineView child: (NSInteger)index ofItem: (id)item { if([item isEqual: @"NSObject"]) { switch(index) { case 0: return @"NSApplication"; break; case 1: return @"NSTableColumn"; break; case 2: return @"NSStatusBar"; break; case 3: return @"NSResponder"; break; default: break; } } if([item isEqual: @"NSResponder"]) { switch(index) { case 0: return @"NSWindow"; break; case 1: return @"NSView"; break; default: break; } } else if(item == nil) { if(index == 0) return @"NSObject"; } return nil; } - (BOOL)outlineView: (NSOutlineView *)outlineView isItemExpandable: (id)item { if([item isEqual: @"NSObject"]) return YES; if([item isEqual: @"NSResponder"]) return YES; return NO; } - (NSInteger) outlineView: (NSOutlineView *)outlineView numberOfChildrenOfItem: (id)item { if(item == nil) return 1; else if([item isEqual: @"NSObject"]) return 4; else if([item isEqual: @"NSResponder"]) return 2; return 0; } - (id) outlineView: (NSOutlineView *)outlineView objectValueForTableColumn: (NSTableColumn *)tableColumn byItem: (id)item { NSString *value = nil; if([item isEqual: @"NSObject"]) { if([[tableColumn identifier] isEqual: @"classes"]) { value = @"NSObject"; } else if([[tableColumn identifier] isEqual: @"outlets"]) { value = @"0"; } else if([[tableColumn identifier] isEqual: @"actions"]) { value = @"0"; } } else { if([[tableColumn identifier] isEqual: @"classes"]) { value = @"NSApplication"; } else if([[tableColumn identifier] isEqual: @"outlets"]) { value = @"2"; } else if([[tableColumn identifier] isEqual: @"actions"]) { value = @"3"; } } return value; } @end static id _sharedDataSource = nil; @implementation NSOutlineView (GormPrivate) + (id) allocSubstitute { return [GormNSOutlineView alloc]; } @end @implementation GormNSOutlineView + (id) sharedDataSource { if (_sharedDataSource == nil) { _sharedDataSource = [[NSOutlineViewDataSource alloc] init]; } return _sharedDataSource; } - (id) initWithFrame: (NSRect) aRect { self = [super initWithFrame: aRect]; [super setDataSource: [GormNSOutlineView sharedDataSource]]; _gormDataSource = nil; return self; } - (void)setDataSource: (id)anObject { _gormDataSource = anObject; } - (id)dataSource { return _gormDataSource; } - (void)setDelegate: (id)anObject { _gormDelegate = anObject; } - (id)delegate { return _gormDelegate; } - (void)setGormDelegate: (id)anObject { [super setDelegate: anObject]; } - (void)encodeWithCoder: (NSCoder*) aCoder { id oldDelegate; int oldNumberOfRows; // set real values... _allowsColumnReordering = _gormAllowsColumnReordering; _allowsColumnResizing = _gormAllowsColumnResizing; _allowsColumnSelection = _gormAllowsColumnSelection; _allowsMultipleSelection = _gormAllowsMultipleSelection; _allowsEmptySelection = _gormAllowsEmptySelection; _dataSource = _gormDataSource; oldDelegate = _delegate; _delegate = _gormDelegate; oldNumberOfRows = _numberOfRows; _numberOfRows = 0; [super encodeWithCoder: aCoder]; // set fake values back... _numberOfRows = oldNumberOfRows; _allowsColumnReordering = YES; _allowsColumnResizing = YES; _allowsColumnSelection = YES; _allowsMultipleSelection = NO; _allowsEmptySelection = YES; _delegate = oldDelegate; _dataSource = _sharedDataSource; } - (id) initWithCoder: (NSCoder*) aCoder { self = [super initWithCoder: aCoder]; [super setDataSource: [GormNSOutlineView sharedDataSource]]; _gormAllowsColumnReordering = _allowsColumnReordering; _gormAllowsColumnResizing = _allowsColumnResizing; _gormAllowsColumnSelection = _allowsColumnSelection; _gormAllowsMultipleSelection = _allowsMultipleSelection; _gormAllowsEmptySelection = _allowsEmptySelection; _gormDelegate = _delegate; _delegate = nil; return self; } - (void) setGormAllowsColumnReordering: (BOOL)flag { _gormAllowsColumnReordering = flag; } - (BOOL) gormAllowsColumnReordering { return _gormAllowsColumnReordering; } - (void) setGormAllowsColumnResizing: (BOOL)flag { _gormAllowsColumnResizing = flag; } - (BOOL) gormAllowsColumnResizing { return _gormAllowsColumnResizing; } - (void) setGormAllowsMultipleSelection: (BOOL)flag { _gormAllowsMultipleSelection = flag; } - (BOOL) gormAllowsMultipleSelection { return _gormAllowsMultipleSelection; } - (void) setGormAllowsEmptySelection: (BOOL)flag { _gormAllowsEmptySelection = flag; } - (BOOL) gormAllowsEmptySelection { return _gormAllowsEmptySelection; } - (void) setGormAllowsColumnSelection: (BOOL)flag { _gormAllowsColumnSelection = flag; } - (BOOL) gormAllowsColumnSelection { return _gormAllowsColumnSelection; } - (NSString *) className { return @"NSOutlineView"; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnInspector.gorm/000077500000000000000000000000001475375552500322005ustar00rootroot00000000000000data.classes000066400000000000000000000006401475375552500344110ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormTableViewAttributesInspector = { Actions = ( ); Outlets = ( contentsAlignmentMatrix, editableSwitch, identifierTextField, resizableSwitch, titleAlignmentMatrix, cellTable, defaultButton, setButton, columnTitle, sortOrder, sortKey, sortSelector ); Super = IBInspector; }; }data.info000066400000000000000000000002701475375552500337060ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnInspector.gormGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000466671475375552500344630ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnInspector.gormGNUstep archive000f4240:0000002b:000001ad:00000002:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @@ @801 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @C @t @W@ @I  @W@ @IJ0 &0 % @ @ @V@ @>  @V@ @>J0 &01NSMatrix1 NSControl% @ @ @R @9  @R @9J0 &%01 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I% @9 @9 01NSColor0&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSButtonCell01 NSButtonCell0&%Button&&&&&&JJ&&&&&&&I&&& &&%%0 &001NSImage0& % leftalign_nib&&&&&&JJ&&&&&&&I&&& &&000&%centeralign_nib&&&&&&JJ&&&&&&&I&&& &&0 0!0"&%rightalign_nib&&&&&&JJ&&&&&&&I&&& &&2 ok:v24@0:8@160#1NSTextFieldCell0$&%Title&&&&&&JJ&&&&&&&I0%0&&% NSNamedColorSpace0'&% System0(&% windowBackgroundColor0) ? %%0* % @a @t @W@ @I  @W@ @IJ0+ &0, % @ @ @V@ @>  @V@ @>J0- &0.% @ @ @R @9  @R @9J0/ &%00&&&&&&JJ&&&&&&&I% @9 @9 01 ?* ?* ?* ?* ?102& % NSButtonCell03&&&&&&JJ&&&&&&&I&&& &&%%04 &05&&&&&&JJ&&&&&&&I&&& &&06&&&&&&JJ&&&&&&&I&&& &&07&&&&&&JJ&&&&&&&I&&& &&60809&%Contents&&&&&&JJ&&&&&&&I%0: ? %%0; % @C @q @h@ @G  @h@ @GJ0< &0= % @ @ @f @5  @f @5J0> &0?1NSButton% @ @ @R @0  @R @0J0@ &%0A0B& % Resizable0C0D1NSMutableString&%GSSwitch&&&&&&JJ&&&&&&&I0E0F&%GSSwitchSelected&&& &&0G% @W @ @R @0  @R @0J0H &%0I0J&%EditableC&&&&&&JJ&&&&&&&IE&&& &&0K0L&%Options&&&&&&JJ&&&&&&&I%0M ? @ @%%0N % @C @Y @h@ @Y  @h@ @YJ0O &0P % @ @ @g @T@  @g @T@J0Q &0R1 NSPopUpButton% @N @ @^ @6  @^ @6J0S &%0T1NSPopUpButtonCell1NSMenuItemCell0U%&&&&&&JJ0V1NSMenu0W &0X1 NSMenuItem0Y& % AscendingJJI0Z0[& %  common_NibbleI0\0]& % DescendingJJII&&&&&&&I&&& > =&&XVX%%%%%0^1 NSTextField% @ @" @J @2  @J @2J0_ &%0`0a&%Order:0b% A@a&&&&&&JJ &&&&&&&I0c&0d&%System0e&%textBackgroundColor0f&d0g& % textColor0h% @N @M @^ @5  @^ @5J0i &%0jU&&&&&&JJ &&&&&&&Icf0k% @N @A @^ @5  @^ @5J0l &%0mU&&&&&&JJ &&&&&&&Icf0n% @ @B @J @2  @J @2J0o &%0p0q& % Selector:bq&&&&&&JJ &&&&&&&Icf0r% @ @N @J @2  @J @2J0s &%0t0u&%Key:bu&&&&&&JJ &&&&&&&Icf0v0w&%Sortingw&&&&&&JJ&&&&&&&I%0x ? %%0y1 NSScrollView% @C @? @h@ @P  @h@ @PJ0z &0{1 NSClipView% @5 @8 @e` @D  @e` @DJ0|1! NSTableView%  @e` @d   @e` @d J||0} &%0~U&&&&&&JJ&&&&&&&0 &01" NSTableColumn0&%column1 C+ A GP01#NSTableHeaderCell0& % Data Cell0% &&&&&&JJ&&&&&&&I0&'0&% controlHighlightColor0&'0&% controlTextColor00&%quatreU&&&&&&JJ&&&&&&&Icf0&'0& %  gridColor0&'0&% controlBackgroundColor01$NSTableHeaderView%  @e` @6  @e` @6J0 &01%GSTableCornerView% @ @ @3 @6  @3 @6J0 &%% A @ @0 &0 &|01& NSScroller% @ @7 @2 @D  @2 @DJ0 &%0U&&&&&&JJ&&&&&&&Jy2 _doScroll:v24@0:8@160 % @5 @ @e` @6  @e` @6J0 &0&'0& %  controlColor{I A A A A 0% @Y @ @P @6  @P @6J0 &%00&%SetU&&&&&&JJ&&&&&&&I&&& &&0% @e @ @P @6  @P @6J0 &%00&%DefaultU&&&&&&JJ&&&&&&&I&&& &&0 % @C @i @h@ @T  @h@ @TJ0 &0 % @ @ @g @M  @g @MJ0 &0% @N @A @^ @5  @^ @5J0 &%0&&&&&&JJ&&&&&&&I0 ? ? ? ? ?0 ?0% @N @" @^ @5  @^ @5J0 &%0&&&&&&JJ&&&&&&&I0 ? ? ? ? ?0 ?0% @ @B @J @2  @J @2J0 &%00&%Title:b&&&&&&JJ &&&&&&&Icf0% @ @$ @J @2  @J @2J0 &%00& % Identifier:b&&&&&&JJ &&&&&&&Icf00& % Attributes&&&&&&JJ&&&&&&&I%0 ? %%00% A &&&&&&JJ&&&&&&& %%%0&%Window0& % TableColumn Attributes Inspector @ @Ç @|I&   @ @p0 &0± &01'NSMutableDictionary1( NSDictionary&?0ı&%PopUpButtonCell(0)T0ű& % TextField(4)^0Ʊ& % ButtonCell(2) 0DZ& % ButtonCell(7)I0ȱ&%TextFieldCell(5)0ɱ&%TextFieldCell(0)`0ʱ&%Box(0)0˱& % ActionCell(0)0̱&%Box 0ͱ&%View(3),0α&%Button60ϱ&%Button10б% @$ @V @L @8  @L @8J0ѱ &%0ұ0ӱ&%Button&&&&&&JJ&&&&&&&I&&& &&0Ա&%GormNSTableView|0ձ& % MenuItem(1)\0ֱ&%Box2;0ױ& % TextField(2)0ر& % TextField(7)n0ٱ& % ScrollViewy0ڱ& % ButtonCell(0)0۱& % ButtonCell(5)70ܱ&%TextFieldCell(3)p0ݱ&%TextFieldCell(8)0ޱ&%View(1) 0߱&%Button3?0& % TableColumn0& % Inspector0& % TextField(0)0& % TextField(5)h0& % ButtonCell(3)50& % ButtonCell(8)0&%TextFieldCell(1)j0&%TextFieldCell(6)0& % TableColumn10"0&%column2 B A GP0#0&% &&&&&&JJ&&&&&&&I0&'0&% controlShadowColor0&'0&% windowFrameTextColor00&%fourU&&&&&&JJ&&&&&&&Icf0& % ActionCell(1)00&%Box(1)0&%View(4)=0&%Button5G0&%Matrix1.0&%Box1*0& % TextField(3)0& % TextField(8)r0& % ButtonCell(1)0& % ButtonCell(6)A0&%TextFieldCell(4)t0&%Button0% @$ @V @L @8  @L @8JP &%PP&%Button&&&&&&JJ&&&&&&&I&&& &&P&%View(2) P&%Button7P&%Button2P% @$ @V @L @8  @L @8JP &%PP &%Button&&&&&&JJ&&&&&&&I&&& &&P &%MatrixP & % MenuItem(0)XP &%Box3NP &% NSOwnerP& % GormTableViewAttributesInspectorP& % TextField(1)P& % TextField(6)kP& % ButtonCell(9)P& % ButtonCell(4)6P&%TextFieldCell(7)P&%TextFieldCell(2)mP&%PopUpButton(0)RP&%View(5)PP&%View(0)P&%Button4P% @$ @N @L @0  @L @0JP &%PP&%SwitchC&&&&&&JJ&&&&&&&IE&&& &&P&%Cell(0)~P &llP1)NSNibConnector P )̰P!)P") P#)P$)ϰP%)P&)͐P'1*NSNibOutletConnector P(&%windowP)*  P*&%titleAlignmentMatrixP+* P,&%contentsAlignmentMatrixP-1+NSNibControlConnector  P.&%ok:P/+ .P0)ְP1)߰P2)P3)P4* P5&%resizableSwitchP6* P7&%editableSwitchP8+ .P9+ .P:) P;)ٰP<)԰ِP=)ԐP>)萐P?)ΰP@)PA* PB& % cellTablePC* PD& % setButtonPE* PF& % defaultButtonPG* PH&%delegatePI* PJ& % dataSourcePK+ PL&%ok:PM+ LPN+ LPO*߰PP& % nextKeyViewPQ* PR&%initialFirstResponderPS)ʰPT)ʐPU)PV+PW&% NSFirstPX&%ok:PY* PZ& % columnTitleP[* P\&%delegateP]*P^& % nextKeyViewP_)P`+WPa&%ok:Pb)Pc)Pd* Pe&%identifierTextFieldPf)Pg) Ph)Pi)Pj* Pk& % sortOrderPl)Pm)Pn)Po)Pp* Pq&%sortKeyPr* Ps& % sortSelectorPt*Pu& % nextKeyViewPv*uPw* uPx*uPy*uPz*uP{*uP|*԰uP}*uP~* uP+WP&%ok:P+WP* P&%delegateP* P+ P&%ok:P* P&%delegateP)P)ްP)̐P) P) P) P) P)ͰP)P)P)۰P)P)֐P)ߐP+WP&%ok:P)ǰP+WP) P)P)ɰŐP)P)P)ܰؐP)P)ԐP)ΐP)P)ȰP)P)אP)ݰP'&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnSizeInspector.gorm/000077500000000000000000000000001475375552500330335ustar00rootroot00000000000000data.classes000066400000000000000000000002671475375552500352510ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnSizeInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormTableColumnSizeInspector = { Actions = ( ); Outlets = ( widthForm ); Super = IBInspector; }; }data.info000066400000000000000000000002701475375552500345410ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnSizeInspector.gormGNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000071401475375552500352750ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableColumnSizeInspector.gormGNUstep archive000f4240:0000001b:00000040:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @s@ @P01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @E @b@ @g` @]  @g` @]J-0 &0 % @ @ @e @W  @e @WJ0 &0 1NSForm1NSMatrix1 NSControl% @ @& @c` @Q@  @c` @Q@J0 &%0 1 NSFormCell1 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @c` @5 @01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I B\00&%Minimum:&&&&&&JJ&&&&&&&0&&&&&&JJ&&&&&&&I B\00&%Current:&&&&&&JJ&&&&&&&0 &&&&&&JJ&&&&&&&I B\0!0"&%Maximum:&&&&&&JJ&&&&&&&2 ok:v24@0:8@160#1NSTextFieldCell0$& % Column Width&&&&&&JJ &&&&&&&I0%0&&% windowBackgroundColor0' ? @ @%%%0(&%Window0)&%TableColumne Size Inspector)  @Ç @|I&   @ @0* &0+ &0,1NSMutableDictionary1 NSDictionary&0-&%Box0.&% NSOwner0/&%GormTableColumnSizeInspector00& % Inspector01&%Form 02 &031NSNibConnector0.04-00510061NSNibOutletConnector.007&%window08.109& % widthForm0:010;1NSMutableString&%initialFirstResponder0<1.0=&%delegate0>&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableView.h000066400000000000000000000033771475375552500272060ustar00rootroot00000000000000/* GormNSTableView.h Copyright (C) 2001 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormNSTableView_h #define INCLUDED_GormNSTableView_h #include #include @interface GormNSTableView : NSTableView { id _gormDataSource; id _gormDelegate; BOOL _gormAllowsColumnReordering; BOOL _gormAllowsColumnResizing; BOOL _gormAllowsColumnSelection; BOOL _gormAllowsMultipleSelection; BOOL _gormAllowsEmptySelection; } - (void) setGormDelegate: (id)anObject; - (void) setGormAllowsColumnReordering: (BOOL)flag; - (BOOL) gormAllowsColumnReordering; - (void) setGormAllowsColumnResizing: (BOOL)flag; - (BOOL) gormAllowsColumnResizing; - (void) setGormAllowsMultipleSelection: (BOOL)flag; - (BOOL) gormAllowsMultipleSelection; - (void) setGormAllowsEmptySelection: (BOOL)flag; - (BOOL) gormAllowsEmptySelection; - (void) setGormAllowsColumnSelection: (BOOL)flag; - (BOOL) gormAllowsColumnSelection; @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableView.m000066400000000000000000000121461475375552500272050ustar00rootroot00000000000000/* GormNSTableView.m Copyright (C) 2001 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNSTableView.h" /* --------------------------------------------------------------- * NSTableView dataSource */ @interface NSTableViewDataSource: NSObject - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv; - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex; @end static NSString* value1[] = {@"zero", @"un", @"deux", @"trois", @"quatre", @"cinq", @"six", @"sept", @"huit", @"neuf"}; static NSString* value2[] = {@"zero", @"one", @"two", @"three", @"four", @"five", @"six", @"seven", @"eight", @"nine"}; @implementation NSTableViewDataSource - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { return 10; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if ([[aTableColumn identifier] isEqual: @"column1"]) { return value1[rowIndex]; } return value2[rowIndex]; } - (void) encodeWithCoder: (NSCoder *)coder { return; } - (id) initWithCoder: (NSCoder *)coder { return self; } @end static id _sharedDataSource = nil; @implementation NSTableView (GormPrivate) + (id) allocSubstitute { return [GormNSTableView alloc]; } @end @implementation GormNSTableView + (id) sharedDataSource { if (_sharedDataSource == nil) { _sharedDataSource = [[NSTableViewDataSource alloc] init]; } return _sharedDataSource; } - (id) initWithFrame: (NSRect) aRect { self = [super initWithFrame: aRect]; [super setDataSource: [GormNSTableView sharedDataSource]]; _gormDataSource = nil; // ASSIGN(_savedColor, [NSColor controlBackgroundColor]); return self; } - (void)setDataSource: (id)anObject { _gormDataSource = anObject; } - (id)dataSource { return _gormDataSource; } - (void)setDelegate: (id)anObject { _gormDelegate = anObject; } - (id)delegate { return _gormDelegate; } - (void)setGormDelegate: (id)anObject { [super setDelegate: anObject]; } - (void)encodeWithCoder: (NSCoder*) aCoder { id oldDelegate; // set actual values... _allowsColumnReordering = _gormAllowsColumnReordering; _allowsColumnResizing = _gormAllowsColumnResizing; _allowsColumnSelection = _gormAllowsColumnSelection; _allowsMultipleSelection = _gormAllowsMultipleSelection; _allowsEmptySelection = _gormAllowsEmptySelection; _dataSource = _gormDataSource; oldDelegate = _delegate; _delegate = _gormDelegate; _numberOfRows = 0; [super encodeWithCoder: aCoder]; // reset fake values... _numberOfRows = 10; _allowsColumnReordering = YES; _allowsColumnResizing = YES; _allowsColumnSelection = YES; _allowsMultipleSelection = NO; _allowsEmptySelection = YES; _delegate = oldDelegate; _dataSource = _sharedDataSource; } - (id) initWithCoder: (NSCoder*) aCoder { self = [super initWithCoder: aCoder]; [super setDataSource: [GormNSTableView sharedDataSource]]; _gormAllowsColumnReordering = _allowsColumnReordering; _gormAllowsColumnResizing = _allowsColumnResizing; _gormAllowsColumnSelection = _allowsColumnSelection; _gormAllowsMultipleSelection = _allowsMultipleSelection; _gormAllowsEmptySelection = _allowsEmptySelection; _gormDelegate = _delegate; _delegate = nil; return self; } - (void) setGormAllowsColumnReordering: (BOOL)flag { _gormAllowsColumnReordering = flag; } - (BOOL) gormAllowsColumnReordering { return _gormAllowsColumnReordering; } - (void) setGormAllowsColumnResizing: (BOOL)flag { _gormAllowsColumnResizing = flag; } - (BOOL) gormAllowsColumnResizing { return _gormAllowsColumnResizing; } - (void) setGormAllowsMultipleSelection: (BOOL)flag { _gormAllowsMultipleSelection = flag; } - (BOOL) gormAllowsMultipleSelection { return _gormAllowsMultipleSelection; } - (void) setGormAllowsEmptySelection: (BOOL)flag { _gormAllowsEmptySelection = flag; } - (BOOL) gormAllowsEmptySelection { return _gormAllowsEmptySelection; } - (void) setGormAllowsColumnSelection: (BOOL)flag { _gormAllowsColumnSelection = flag; } - (BOOL) gormAllowsColumnSelection { return _gormAllowsColumnSelection; } - (NSString *) className { return @"NSTableView"; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableViewInspector.gorm/000077500000000000000000000000001475375552500316555ustar00rootroot00000000000000data.classes000066400000000000000000000007211475375552500340660ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableViewInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormTableViewInspector = { Actions = ( ); Outlets = ( borderMatrix, horizontalScrollerSwitch, optionMatrix, rowsHeightForm, verticalScrollerSwitch, backgroundColor, tagForm, multipleSelectionSwitch, emptySelectionSwith, columnSelectionSwitch, drawgridSwitch, resizingSwitch, reorderingSwitch ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableViewInspector.gorm/data.info000066400000000000000000000002701475375552500334420ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000371631475375552500341270ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormNSTableViewInspector.gormGNUstep archive000f4240:00000020:00000158:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @2 @G @m @V@  @m @V@J0 &0 % @ @ @k@ @O  @k@ @OJ0 &01NSButton1 NSControl% @? @E @c` @1  @c` @1J0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Allows multiple selection01NSImage01NSMutableString&%GSSwitch01NSFont%&&&&&&JJ&&&&&&&I0&00&%GSSwitchSelected&&& &&0% @? @7 @c` @1  @c` @1J0 &%00&%Allows empty selection&&&&&&JJ&&&&&&&I&&& &&0% @? @ @c` @1  @c` @1J0 &%00 &%Allows column selection&&&&&&JJ&&&&&&&I&&& &&0!1NSTextFieldCell0"& % Selection0#% A@&&&&&&JJ &&&&&&&I0$1NSColor0%&% NSNamedColorSpace0&&% System0'&% windowBackgroundColor0(0)&% NSCalibratedRGBColorSpace ? @ @%%0* % @c @a @W @V  @W @VJ0+ &0, % @ @ @V @P  @V @PJ0- &0.% @ @A @S @1  @S @1J0/ &%0001&%Vertical#&&&&&&JJ&&&&&&&I&&& &&02% @ @, @S @1  @S @1J03 &%0405& % Horizontal#&&&&&&JJ&&&&&&&I&&& &&0607& % Scrollers#&&&&&&JJ &&&&&&&I$08) ? @%%09 % @2 @s  @m @S@  @m @S@J0: &0; % @ @ @l @L  @l @LJ0< &0=1NSForm1NSMatrix% @E @" @a` @F  @a` @FJ0> &%0?1 NSFormCell#&&&&&&JJ&&&&&&&I 0@0A&%Field:#&&&&&&JJ&&&&&&&% @a` @5 @0B%&0C&% controlBackgroundColor0D) ?* ?* ?* ?* ?0E& % NSFormCell%%0F &0G0H&%17#H&&&&&&JJ&&&&&&&I B0I0J& % Row Height:#J&&&&&&JJ&&&&&&&0K0L&%2L&&&&&&JJ&&&&&&&I B0M0N&%Columns NumberN&&&&&&JJ&&&&&&&2 ok:v24@0:8@16G0O0P& % Dimensions#&&&&&&JJ &&&&&&&I$0Q) ? %%0R % @2 @a @` @V  @` @VJ0S &0T % @ @E @^ @P  @^ @PJ0U &0V% ?Ԕ @GW@. @] @1  @] @1J0W &%0X0Y& % Draws grid&&&&&&JJ&&&&&&&I&&& &&0Z% ?Ԕ @:\ @] @1  @] @1J0[ &%0\0]&%Allows resizing&&&&&&JJ&&&&&&&I&&& &&0^% ?Ԕ @p @] @1  @] @1J0_ &%0`0a&%Allows reordering&&&&&&JJ&&&&&&&I&&& &&0b0c&%Options#&&&&&&JJ &&&&&&&I$0d) ? @ @ %%0e % @2 @m @` @P@  @` @P@J0f &0g % @ @ @^@ @C  @^@ @CJ0h &0i% @$ @ @Y @;  @Y @;J-0j &%0k#&&&&&&JJ&&&&&&&I% @9 @; 0l) ?* ?* ?* ?* ?l0m& % NSButtonCell0n0o&%Button#&&&&&&JJ&&&&&&&I&&& &&%%0p &0q0r0s& % noBorder_nib#&&&&&&JJ&&&&&&&I&&& &&0t0u0v&%line_nib#&&&&&&JJ&&&&&&&I&&& &&0w0x0y& % bezel_nib#&&&&&&JJ&&&&&&&I&&& &&0z0{0|& % ridge_nib#&&&&&&JJ&&&&&&&I&&& &&q0}0~&%Border#&&&&&&JJ &&&&&&&I$0) ? @ @%%0% @X@ @$ @R @7  @R @7J0 &%0#&&&&&&JJ&&&&&&&I 00&%Field:#&&&&&&JJ&&&&&&&% @R @7 @B0) ?* ?* ?* ?* ?0& % NSFormCell%%0 &00&%0#&&&&&&JJ&&&&&&&I A00&%Tag:#&&&&&&JJ&&&&&&&0 % @c @m @W @P@  @W @P@J0 &0 % @ @ @S @C  @S @CJ0 &01 NSColorWell% @& @ @J @?  @J @?J-0 &%0&&&&&&JJ&&&&&&&0) ? ? ? ? ?00& % Background &&&&&&JJ&&&&&&& @ @%%00&%Title0% A &&&&&&JJ&&&&&&& %%$0&%Window0&%TableView Attributes Inspector ? @L @Ç @|I&   @ @0 &0 &01NSMutableDictionary1 NSDictionary&00&%Box50& % FormCell(0)G0& % ButtonCell(2)0& % ButtonCell(7)`0&%Box(0)0& % ActionCell(0)k0&%Box 0&%Form10% @e @T@ @U @B  @U @BJ0 &%0#&&&&&&JJ&&&&&&&I 00&%Field:#&&&&&&JJ&&&&&&&% @U @1 @0) ?* ?* ?* ?* ?0& % NSFormCell%%0 &0#&&&&&&JJ&&&&&&&I B00&%Field 1#&&&&&&JJ&&&&&&&0#&&&&&&JJ&&&&&&&I B00&%Field 2#&&&&&&JJ&&&&&&&0&%View(3);0&%Button6Z0&%Button120&%Form=0&%Matrix2i0&%Box290& % FormCell(3)0&%ButtonCell(10)w0& % ButtonCell(0)0& % ButtonCell(5)X0&%View(1) 0&%View(6)0&%Button30&%Box4e0±& % Inspector0ñ& % FormCell(1)K0ı& % ButtonCell(3)00ű& % ButtonCell(8)q0Ʊ& % ColorWell0DZ&%View(4)T0ȱ&%Button5V0ɱ&%Box1*0ʱ& % FormCell(4)0˱&%ButtonCell(11)z0̱& % ButtonCell(1)0ͱ& % ButtonCell(6)\0α&%Button.0ϱ&%View(2),0б&%Form20ѱ&%Button7^0ұ&%Button20ӱ&%Box3R0Ա&% NSOwner0ձ&%GormTableViewInspector0ֱ& % FormCell(2)?0ױ& % ButtonCell(4)40ر& % ButtonCell(9)t0ٱ&%View(0) 0ڱ&%View(5)g0۱&%Button40ܱ&%Cell(0)0ݱ &WW01NSNibConnector0߱&% NSOwner01NSNibOutletConnector߰0&%window00ɰ0ΰϐ0ϐ000Ӱ0߰0&%verticalScrollerSwitch0߰0&%horizontalScrollerSwitch0߰0&%rowsHeightForm01 NSNibControlConnectorΰ0&%ok:0 ߰00ڐ0߰0& % borderMatrix0 0&%ok:00а0߰0&%tagField00ư0 ư0&%ok:P߰P&%backgroundColorPP&%delegatePаP&%delegatePҰPP۰P ߰P &%multipleSelectionSwitchP ߰P &%emptySelectionSwithP ߰P&%columnSelectionSwitchP ҰP&%ok:P P ۰PҰP& % nextKeyViewPPȰǐPǐPѰǐP߰P&%drawgridSwitchP߰P&%resizingSwitchP߰P&%reorderingSwitchP ȰP &%ok:P!  P" Ѱ P#߰P$&%tagFormP%P&& % nextKeyViewP'&P(ư&P)Ȱ&P*&P+Ѱ&P,ΰ&P-&P.۰&P/P0ٰP1P2ҐP3̰P4ېP5ϰɐP6İΐP7 P8&% NSFirstP9&%ok:P:װP; 89P<P=P>ðP?ְP@ǰӐPAȐPBͰPCѐPDڰPEŰPFذPGPH˰PIPJАPKʰАPLPMܰƐPN°PO&%initialFirstResponderPP&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewAttributesInspector.h000066400000000000000000000033261475375552500323540ustar00rootroot00000000000000/* GormTabViewAttributesInspector.h Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Author: Gregory John Casamento Date: Aug 2001. 2003, 2004 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormTabViewAttributesInspector_h #define INCLUDED_GormTabViewAttributesInspector_h #include @class NSButton; @class NSForm; @class NSMatrix; @class NSStepper; @class NSTextField; @interface GormTabViewAttributesInspector : IBInspector { NSMatrix *typeMatrix; int numberOfDisplayItem; NSButton *allowtruncate; NSTextField *numberOfItemsField; NSStepper *itemStepper; NSTextField *itemLabel; NSForm *itemIdentifier; NSButton *itemPrevious; NSButton *itemNext; } @end #endif /* INCLUDED_GormTabViewAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewAttributesInspector.m000066400000000000000000000141011475375552500323520ustar00rootroot00000000000000/* GormTabViewAttributesInspector.m Copyright (C) 2001-2015 Free Software Foundation, Inc. Author: Laurent Julliard Author: Gregory John Casamento Date: Aug 2001. 2003, 2004 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormTabViewAttributesInspector.h" #define ORDERED_PREVIOUS 0 #define ORDERED_NEXT 1 @implementation GormTabViewAttributesInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormTabViewInspector" owner: self] == NO) { NSLog(@"Could not gorm GormTabViewInspector"); return nil; } return self; } - (void) ok: (id)sender { if (sender == typeMatrix) { unsigned int type = 0; switch([[sender selectedCell] tag]) { case 0: type = NSTopTabsBezelBorder; break; case 5: type = NSLeftTabsBezelBorder; break; case 1: type = NSBottomTabsBezelBorder; break; case 6: type = NSRightTabsBezelBorder; break; case 2: type = NSNoTabsBezelBorder; break; case 3: type = NSNoTabsLineBorder; break; case 4: type = NSNoTabsNoBorder; break; default: break; } [object setTabViewType: type]; } else if (sender == allowtruncate) { BOOL flag; flag = ([allowtruncate state] == NSOnState) ? YES : NO; [object setAllowsTruncatedLabels:flag]; } else if (sender == itemStepper ) { int number = [itemStepper intValue]; [itemLabel setStringValue:[[object tabViewItemAtIndex:number] label]]; [itemIdentifier setStringValue:[[object tabViewItemAtIndex:number] identifier]]; [object selectTabViewItemAtIndex:number]; } else if (sender == numberOfItemsField) { int newNumber = [[numberOfItemsField stringValue] intValue]; if (newNumber <= 0) { [numberOfItemsField setStringValue:[NSString stringWithFormat:@"%ld",(long int)[object numberOfTabViewItems]]]; return; } if ( newNumber > [object numberOfTabViewItems] ) { int i; NSTabViewItem *newTabItem; id document = [(id)[NSApp delegate] documentForObject: object]; for (i=([object numberOfTabViewItems]+1);i<=newNumber;i++) { NSString *ident = [NSString stringWithFormat: @"item %i",i]; newTabItem = [(NSTabViewItem *)[NSTabViewItem alloc] initWithIdentifier: (id)ident]; [newTabItem setLabel: [NSString stringWithFormat: @"Item %i",i]]; [newTabItem setView:[[NSView alloc] init]]; [object addTabViewItem:newTabItem]; [document attachObject: newTabItem toParent: object]; } } else { int i; for (i=([object numberOfTabViewItems]-1);i>=newNumber;i--) { id item = [object tabViewItemAtIndex:i]; id document = [(id)[NSApp delegate] documentForObject: item]; [object selectFirstTabViewItem: self]; [object removeTabViewItem: item]; if(document != nil) { [document detachObject: item]; } } } [itemStepper setMaxValue: (newNumber - 1)]; } else if ( sender == itemLabel ) { if ([[itemLabel stringValue] isEqualToString:@""] == NO) { [[object selectedTabViewItem] setLabel:[itemLabel stringValue]]; } } else if ( sender == itemIdentifier ) { if ([[itemIdentifier stringValue] isEqualToString:@""] == NO) { [[object selectedTabViewItem] setIdentifier:[itemIdentifier stringValue]]; } } else if ( sender == itemPrevious ) { NSTabViewItem *tbItem = [object selectedTabViewItem]; int selectedItem = [object indexOfTabViewItem:tbItem]; /* We Should disabled UI ? with delegate tabView:didSelectTabViewItem: */ if ( selectedItem <= 0 ) { return; } [tbItem retain]; [object removeTabViewItem:tbItem]; [object insertTabViewItem:tbItem atIndex:(selectedItem - 1)]; [object selectTabViewItemAtIndex:(selectedItem - 1)]; [tbItem release]; } else if (sender == itemNext ) { NSTabViewItem *tbItem = [object selectedTabViewItem]; int selectedItem = [object indexOfTabViewItem:tbItem]; /* We Should disabled UI ? with delegate tabView:didSelectTabViewItem: */ if ( selectedItem >= ([object numberOfTabViewItems] -1) ) { return; } [tbItem retain]; [object removeTabViewItem:tbItem]; [object insertTabViewItem:tbItem atIndex:(selectedItem + 1)]; [object selectTabViewItemAtIndex:(selectedItem + 1)]; [tbItem release]; } [object setNeedsDisplay: YES]; [super ok: sender]; } - (void) revert :(id) sender { unsigned int numberOfTabViewItems; if ( object == nil ) return; numberOfTabViewItems=[object numberOfTabViewItems]; [numberOfItemsField setStringValue:[NSString stringWithFormat:@"%i",numberOfTabViewItems]]; [itemStepper setMaxValue:(numberOfTabViewItems -1)]; [itemLabel setStringValue:[[object selectedTabViewItem] label]]; [itemIdentifier setStringValue:[[object selectedTabViewItem] identifier]]; } -(void) controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewEditor.h000066400000000000000000000022061475375552500275610ustar00rootroot00000000000000/* GormTabViewEditor.h - Editor for tabviews. * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: Aug 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormTabViewEditor_h #define INCLUDED_GormTabViewEditor_h #include @interface GormTabViewEditor : GormViewWithSubviewsEditor { int selectedSubview; GormInternalViewEditor *currentView; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewEditor.m000066400000000000000000000105621475375552500275720ustar00rootroot00000000000000/* GormTabViewEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormTabViewEditor.h" // #define _EO ((NSTabView *)_editedObject) @implementation GormTabViewEditor - (NSTabView *) _eo { return (NSTabView *)_editedObject; } - (void) setOpened: (BOOL) flag { [super setOpened: flag]; if (flag == YES && currentView) { [document setSelectionFromEditor: currentView]; } } - (NSArray *) selection { return [NSArray arrayWithObject: [self _eo]]; } // // ignore this warning since this works... the editor that may be returned in some cases // passes on unrecognized selectors to its editedObject, so this will not cause an // issue. // #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wobjc-method-access" - (BOOL) activate { if ([super activate]) { currentView = nil; [[self _eo] setDelegate: self]; [self tabView: [self _eo] didSelectTabViewItem: [[self _eo] selectedTabViewItem]]; return YES; } return NO; } #pragma GCC diagnostic pop - (void) deactivate { if (activated == YES) { [self deactivateSubeditors]; [[self _eo] setDelegate: nil]; [super deactivate]; } } - (void) mouseDown: (NSEvent *) theEvent { BOOL onKnob = NO; { if ([parent respondsToSelector: @selector(selection)] && [[parent selection] containsObject: [self _eo]]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) onKnob = YES; } if (onKnob == YES) { if (parent) return [parent mouseDown: theEvent]; else return [self noResponderFor: @selector(mouseDown:)]; } } if (opened == NO) { [super mouseDown: theEvent]; return; } if ([[[self _eo] hitTest: [theEvent locationInWindow]] isDescendantOf: currentView]) { NSDebugLog(@"md %@ descendant of", self); if ([currentView isOpened] == NO) [currentView setOpened: YES]; [currentView mouseDown: theEvent]; } else { NSDebugLog(@"md %@ not descendant of", self); if ([currentView isOpened] == YES) [currentView setOpened: NO]; [[self _eo] mouseDown: theEvent]; } } @end @implementation GormTabViewEditor (TabViewDelegate) - (void) tabView: (NSTabView *)tabView didSelectTabViewItem: (NSTabViewItem *)tabViewItem { if ([tabViewItem view]) { if ([[tabViewItem view] isKindOfClass: [GormViewEditor class]] == NO) { currentView = (GormInternalViewEditor *)[document editorForObject: [tabViewItem view] inEditor: self create: YES]; NSDebugLog(@"dSTVI %@ %@ %@", self, currentView, [tabViewItem view]); NSDebugLog(@"dsTVI %@ %@", self, [document parentEditorForEditor: currentView]); } else { NSDebugLog(@"dsTVI %@ already there", self); } } } - (BOOL) tabView: (NSTabView *)tabView shouldSelectTabViewItem: (NSTabViewItem *)tabViewItem { id view = [[tabView selectedTabViewItem] view]; NSDebugLog(@"shouldSelectTabViewItem called"); if ([view isKindOfClass: [GormInternalViewEditor class]]) { NSDebugLog(@"closing tabviewitem"); [view deactivate]; currentView = nil; openedSubeditor = nil; } return YES; } - (void)tabViewDidChangeNumberOfTabViewItems:(NSTabView *)tabView { // [tabView selectFirstTabViewItem: self]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewInspector.gorm/000077500000000000000000000000001475375552500310735ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewInspector.gorm/data.classes000066400000000000000000000004661475375552500333710ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormTabViewInspector = { Actions = ( ); Outlets = ( typeMatrix, numberOfItemsField, allowtruncate, itemLabel, itemStepper, itemIdentifier, itemPrevious, itemNext ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewInspector.gorm/data.info000066400000000000000000000002701475375552500326600ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTabViewInspector.gorm/objects.gorm000066400000000000000000000444211475375552500334170ustar00rootroot00000000000000GNUstep archive000f4240:00000025:000000dc:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? ? @q @x@JI @q @01 NSView% ? ? @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSMatrix1 NSControl% @9 @tp @k @@  @k @@J 0 &%0 1 NSActionCell1NSCell0 &0 1NSFont% A@&&&&&&JJ&&&&&&I% @B @@ 0 1NSColor0 &% NSNamedColorSpace0&% System0&% controlBackgroundColor 0& % NSButtonCell01 NSButtonCell0&%0 &&&&&&JJ&&&&&&I0&0&&&& &&%%0 &00&01NSImage0& % tabtop_nib &&&&&&JJ&&&&&&I0&&&& &&00&00& % tabbot_nib &&&&&&JJ&&&&&&I0&&&& &&0 0!&0"0#& % button_nib &&&&&&JJ&&&&&&I0$&&&& &&0%0&&0'0(&%line_nib &&&&&&JJ&&&&&&I0)&&&& &&0*0+&0,0-& % noBorder_nib &&&&&&JJ&&&&&&I0.&&&& &&0/00&0102&%shortbutton_nib &&&&&&JJ&&&&&&I03&&&& &&2 ok:v24@0:8@16041 NSTextField% @0 @p @\@ @4  @\@ @4J,05 &%061NSTextFieldCell07&%Number of items: &&&&&&JJ &&&&&&I08 09&%System0:&%textBackgroundColor0; 90<& % textColor0=% @a @p @L @4  @L @4J)0> &%0?0@&%2 &&&&&&JJ &&&&&&I8;0A1NSButton% @9 @rp @c` @0  @c` @0J 0B &%0C0D&%Allow truncate labels0E0F1NSMutableString&%GSSwitch &&&&&&JJ&&&&&&I0G&0H&0I0J&%GSSwitchSelected&&& &&0K1NSBox% @$ @V@ @o @a  @o @aJ20L &0M % @ @ @m @]  @m @]J0N &0O% @V @V @V@ @4  @V@ @4J0P &%0Q0R& &&&&&&JJ &&&&&&I8;0S% @: @V @J @4  @J @4J0T &%0U0V&%Label: &&&&&&JJ &&&&&&I8;0W% @7 @P@ @O @4  @O @4J0X &%0Y0Z& % Identifier: &&&&&&JJ &&&&&&I8;0[% @V @P@ @V@ @4  @V@ @4J0\ &%0]0^& &&&&&&JJ &&&&&&I8;0_1 NSStepper% @g @R @0 @7  @0 @7J0` &%0a1 NSStepperCell0b&%00c1NSNumber1NSValuei%&&&&&&JJ&&&&&&I @M ?%%0d% @A @6 @I @2  @I @2J0e &%0f0g&%Ordered:0h% A@g&&&&&&JJ &&&&&&I8;0i% @V @6 @@ @8  @@ @8J0j &%0k0l&%Button0m0n&% common_ArrowLeft0o%&&&&&&JJ&&&&&&I0p&0q&&&& &&0r% @` @6 @@ @8  @@ @8J0s &%0t0u&%Button0v0w&% common_ArrowRightou&&&&&&JJ&&&&&&I0x&0y&&&& &&0z0{& % Current Item {&&&&&&JJ &&&&&&I0| 0}&% windowBackgroundColor; @ @%%|0~&%Window0&%TabView Attributes Inspector ? @7 @È @ÈI0 00&% NSCalibratedWhiteColorSpace 0 &01NSBitmapImageRep1 NSImageRep0&% NSDeviceRGBColorSpace @H @HII0I001 NSData&$$II*$[=T8J2R-!k[=U:K3xB-H'R-!k[=S7J2xB-H'/ ?[=S7I2xB-H'/ ?[=S7H0xB-H'/ ?[=R7I2xB-H'/ ?[=S7I0xB-H'/ ?[=R7I2xB-H'/ ?[=R7H0xB-H'/ ?[>X/!j:)H'/ ?D49  ?hft{y<;D ?hft}<;D ?<;D ?43:""""43:zzzzͱ""""EEEEEEEEEEEE43:555222t43:0?55hhhiiiyyyVVV777?43:~=0rdxxxUUU444?/17?43:5?0\Mzz{]]]QQQmmm_bn:9@5?0I>e]xxwvtsqpo}66<5?2A3QFA4H:|zzywutrqpbao++05?2@2@2A3B3C4E6}}|zxxwutrqpn}VT_=,, 5@2@3A3A3JdbqihvFEOQ-)Y)!W)`/$k3'q6*n4)l3'i2'f0&c/$`-$Y*!)5C4C4D4E6F7H7Ʀkkk)))LJRkjxihvhgu::B\/&[-$Y-$c/&l3'o4)l3'j2'g2&d0$a/$^-#X*!)5@2D4E6F7H7I8{{{[[[322QPZ^]jjhwhguQP[K33\-&W)_/$j3'm3'm4)j3'h2&d0&b/$_-#],#X*!)P'~>>ddd>>?87?4$$E)&_-#`0'_0&]/&^/&`/&`/&c0&j2'n3'k3'h2&d0$a/$^-#\,!Z,!X*!U)T))ttttttzzz;;;rqyjhwPPZ43:C@?w9,c2)b2)^,#_0&d2'g2'h2'k3)l3)l3)l3'l3'i2'f0&c/$_-#],#Z,!X*!W)T)S))rrr```FFF000mmm\[a<;CA)'^3,I::76v8,_-$b2'g2'l4)r7*s7*s7*w8,t7,q6*n4)k3'g2&d0$`-$],#[,!X*!W)U)S'S')YYY777XWcKJS|||SSS\2,KDD4I:I;A?>~>0b2)f2'p6*x:-y:-{;-x:-v9,s7*o4)l3'i2&f0&c/$_-#\,#Y*!W)T)S'R'S')TR^|z@?Gↄ\Zg<;CJJJm4)D4E6J;UIPEvI@q:/l4)m4)x:,};/{:-y:-w9,t7*q6*m4)j3'h2&c0&a/$]-#[,!X*!V)T)R'R'R')0/5?_^kCBJ43:?QQQ ^-#I:O>SBP?H7?2p6*s7*0|;/y:-p6*f0&d0&c/&`/$_-$]-#\,#T)!T)!T)!T)!T)!T)!T)!)))) ?h3'z;/T)!T)!T)!`/$`/$))))) ? 00$$R&   @ @0 &0 &01!NSMutableDictionary1" NSDictionary&0&%BoxK0& % TextField1=0& % TextField40& % TextField(0)d0& % TextField3S0& % TextField5[0&%Stepper_0&% NSOwner0&%GormTabViewInspector0& % Button(0)i0& % TextField2O0& % TextField4W0&%Matrix0&%ButtonA0& % Button(1)r0& % Inspector0 &))01#NSNibConnector0&% NSOwner0#0#0#01$NSNibOutletConnector0& % typeMatrix01%NSNibControlConnector0&%ok:0%0$0&%window0$0&%numberOfItemsField0#0$0& % allowtruncate0%0&%ok:0#0#0#0#0#0#0$0& % itemLabel0$0&%itemIdentifier0$0& % itemStepper0%0&%ok:0%0&%ok:0%0$0& % nextKeyView0$0±$0ñ$0ı&%initialFirstResponder0ű$0Ʊ& % nextKeyView0DZ$0ȱ$0ɱ&%delegate0ʱ$0˱$0̱#0ͱ#0α#0ϱ$0б&%itemNext0ѱ$0ұ& % itemPrevious0ӱ%0Ա&%ok:0ձ%0ֱ$0ױ& % nextKeyView0ر!&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableColumnAttributesInspector.h000066400000000000000000000035471475375552500332250ustar00rootroot00000000000000/* GormTableColumnAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormTableColumnAttributesInspector_h #define INCLUDED_GormTableColumnAttributesInspector_h #include @class NSButton; @class NSMatrix; @class NSTextField; @class NSTableView; @class NSForm; @class NSPopUpButton; @interface GormTableColumnAttributesInspector : IBInspector { NSMatrix *titleAlignmentMatrix; NSMatrix *contentsAlignmentMatrix; NSTextField *identifierTextField; NSButton *resizableSwitch; NSButton *editableSwitch; NSButton *setButton; NSButton *defaultButton; NSTableView *cellTable; NSTextField *columnTitle; /* sorting */ NSTextField *sortKey; NSTextField *sortSelector; NSPopUpButton *sortOrder; } @end #endif /* INCLUDED_GormTableColumnAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableColumnAttributesInspector.m000066400000000000000000000230751475375552500332300ustar00rootroot00000000000000/* GormTableColumnAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 Author: Gregory Casamento Added custom class handling for table column. Date: 2004 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #import #import #import "GormTableColumnAttributesInspector.h" /* IBObjectAdditions category */ @implementation GormTableColumnAttributesInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSTableColumnInspector" owner: self] == NO) { NSLog(@"Could not gorm GormTableColumnInspector"); return nil; } return self; } - (void) awakeFromNib { [cellTable setDoubleAction: @selector(ok:)]; } - (NSString *)_getCellClassName { id cell = [[self object] dataCell]; NSString *customClassName = [[(id)[NSApp delegate] classManager] customClassForObject: cell]; NSString *result = nil; if(customClassName == nil) { result = NSStringFromClass([cell class]); } else { result = customClassName; } return result; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { /* title Alignment */ if (sender == titleAlignmentMatrix) { if ([[sender cellAtRow: 0 column: 0] state] == NSOnState) { [[object headerCell] setAlignment: NSLeftTextAlignment]; } else if ([[sender cellAtRow: 0 column: 1] state] == NSOnState) { [[object headerCell] setAlignment: NSCenterTextAlignment]; } else if ([[sender cellAtRow: 0 column: 2] state] == NSOnState) { [[object headerCell] setAlignment: NSRightTextAlignment]; } // [[object headerCell] setAlignment: [[titleAlignmentMatrix selectedRow] tag]]; if ([[object tableView] headerView] != nil) { [[[object tableView] headerView] setNeedsDisplay: YES]; } } /* contents Alignment */ else if (sender == contentsAlignmentMatrix) { if ([[sender cellAtRow: 0 column: 0] state] == NSOnState) { [[object dataCell] setAlignment: NSLeftTextAlignment]; } else if ([[sender cellAtRow: 0 column: 1] state] == NSOnState) { [[object dataCell] setAlignment: NSCenterTextAlignment]; } else if ([[sender cellAtRow: 0 column: 2] state] == NSOnState) { [[object dataCell] setAlignment: NSRightTextAlignment]; } [[object tableView] setNeedsDisplay: YES]; } /* Identifier */ else if (sender == identifierTextField) { [object setIdentifier: [identifierTextField stringValue]]; } /* Options */ else if (sender == editableSwitch) { [object setEditable: ([editableSwitch state] == NSOnState)]; } else if (sender == resizableSwitch) { [object setResizable: ([resizableSwitch state] == NSOnState)]; } /* set Button */ else if (sender == setButton || sender == cellTable) { id classManager = [(id)[NSApp delegate] classManager]; id doc = [(id)[NSApp delegate] activeDocument]; id cell = nil; int i = [cellTable selectedRow]; NSArray *list = [classManager allSubclassesOf: @"NSCell"]; NSString *className = [list objectAtIndex: i]; BOOL isCustom = [classManager isCustomClass: className]; Class cls = nil; if(isCustom) { NSString *superClass = [classManager nonCustomSuperClassOf: className]; cls = NSClassFromString(superClass); NSLog(@"Setting custom cell.."); } else { cls = NSClassFromString(className); } // initialize cell = [[cls alloc] init]; [cell setEditable: [object isEditable]]; [object setDataCell: cell]; [[object tableView] setNeedsDisplay: YES]; // add it to the document, since it needs a custom class... if(isCustom) { NSString *name = nil; // An object needs to be a "named object" to have a custom class // assigned to it. Add it to the document and get the name. [doc attachObject: cell toParent: object]; if((name = [doc nameForObject: cell]) != nil) { [classManager setCustomClass: className forName: name]; } } RELEASE(cell); } /* default button */ else if (sender == defaultButton) { [object setDataCell: [[NSTextFieldCell alloc] init]]; [[object tableView] setNeedsDisplay: YES]; [self setObject: [self object]]; // reset... } else if (sender == columnTitle) { [[object headerCell] setStringValue: [columnTitle stringValue]]; [[[object tableView] headerView] setNeedsDisplay: YES]; } // sort descriptor... else if( sender == sortKey || sender == sortSelector || sender == sortOrder ) { NSString *selectorString = [sortSelector stringValue]; NSString *key = [sortKey stringValue]; SEL selector = (([selectorString isEqual: @""]) ? NULL:NSSelectorFromString(selectorString)); BOOL isAscending = ([sortOrder indexOfSelectedItem] == 0); NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:isAscending selector:selector]; [object setSortDescriptorPrototype: sortDescriptor]; [sortDescriptor release]; } [super ok:sender]; } /* Sync from object ( NSTableColumn ) changes to the inspector */ - (void) revert:(id) sender { NSArray *list; NSString *cellClassName; NSUInteger index; if ( object == nil ) return; list = [[(id)[NSApp delegate] classManager] allSubclassesOf: @"NSCell"]; cellClassName = [self _getCellClassName]; index = [list indexOfObject: cellClassName]; if(index != NSNotFound) { [cellTable selectRow: index byExtendingSelection: NO]; [cellTable scrollRowToVisible: index]; } /* title Alignment */ switch ([[object headerCell] alignment]) { case NSLeftTextAlignment: [titleAlignmentMatrix selectCellAtRow: 0 column: 0]; break; case NSCenterTextAlignment: [titleAlignmentMatrix selectCellAtRow: 0 column: 1]; break; case NSRightTextAlignment: [titleAlignmentMatrix selectCellAtRow: 0 column: 2]; break; default: NSLog(@"Unhandled alignment value..."); break; } /* contents Alignment */ switch ([[object dataCell] alignment]) { case NSLeftTextAlignment: [contentsAlignmentMatrix selectCellAtRow: 0 column: 0]; break; case NSCenterTextAlignment: [contentsAlignmentMatrix selectCellAtRow: 0 column: 1]; break; case NSRightTextAlignment: [contentsAlignmentMatrix selectCellAtRow: 0 column: 2]; break; default: NSLog(@"Unhandled alignment value..."); break; } [identifierTextField setStringValue: [(NSTableColumn *)object identifier]]; [columnTitle setStringValue: [[(NSTableColumn *)object headerCell] stringValue]]; /* options */ if ([object isResizable]) [resizableSwitch setState: NSOnState]; else [resizableSwitch setState: NSOffState]; if ([object isEditable]) [editableSwitch setState: NSOnState]; else [editableSwitch setState: NSOffState]; /* sort */ NSSortDescriptor *sortDescriptor = [(NSTableColumn *)object sortDescriptorPrototype]; if(sortDescriptor != nil) { SEL sel = [sortDescriptor selector]; NSString *selectorString = ((sel == NULL) ? @"" : NSStringFromSelector(sel)); [sortKey setStringValue: [sortDescriptor key]]; [sortSelector setStringValue: selectorString]; [sortOrder selectItemAtIndex: ([sortDescriptor ascending]?0:1)]; } else { [sortKey setStringValue: @""]; [sortSelector setStringValue: @""]; [sortOrder selectItemAtIndex: 0]; } [super revert:sender]; } // Data Source // replace by an NSBrowser ? - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { NSArray *list = [[(id)[NSApp delegate] classManager] allSubclassesOf: @"NSCell"]; return [list count]; } - (id) tableView: (NSTableView *)tv objectValueForTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { NSArray *list = [[(id)[NSApp delegate] classManager] allSubclassesOf: @"NSCell"]; id value = nil; if([list count] > 0) { value = [list objectAtIndex: rowIndex]; } return value; } // delegate - (BOOL) tableView: (NSTableView *)tableView shouldEditTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { return NO; } - (BOOL) tableView: (NSTableView *)tv shouldSelectRow: (NSInteger)rowIndex { return YES; } /* delegate method for identifier */ -(void) controlTextDidChange:(NSNotification *)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableColumnSizeInspector.h000066400000000000000000000026251475375552500320050ustar00rootroot00000000000000/* GormTableColumnSizeInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormTableColumnnSizeInspector_h #define INCLUDED_GormTableColumnnSizeInspector_h #include @class NSForm; @interface GormTableColumnSizeInspector : IBInspector { NSForm *widthForm; } @end #endif /* INCLUDED_GormTableColumnnSizeInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableColumnSizeInspector.m000066400000000000000000000051371475375552500320130ustar00rootroot00000000000000/* GormTableColumnSizeInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Adam Fedor Laurent Julliard Date: Aug 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormTableColumnSizeInspector.h" #define MINIMUMINDEX 0 #define CURRENTINDEX 1 #define MAXIMUMINDEX 2 @implementation GormTableColumnSizeInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSTableColumnSizeInspector" owner: self] == NO) { NSLog(@"Could not gorm GormTableColumnSizeInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id)sender { [object setMinWidth: [[widthForm cellAtRow:MINIMUMINDEX column: 0] floatValue]]; [object setWidth: [[widthForm cellAtRow:CURRENTINDEX column: 0] floatValue]]; [object setMaxWidth: [[widthForm cellAtRow:MAXIMUMINDEX column: 0] floatValue]]; [super ok:sender]; } /* Sync from object ( NSTableColumn size ) changes to the inspector */ - (void) revert: (id) sender { if (object == nil) return; [[widthForm cellAtRow:MINIMUMINDEX column: 0] setFloatValue: [object minWidth]]; [[widthForm cellAtRow:CURRENTINDEX column: 0] setFloatValue: [object width]]; [[widthForm cellAtRow:MAXIMUMINDEX column: 0] setFloatValue: [object maxWidth]]; [super revert:sender]; } - (void) controlTextDidEndEditing: (NSNotification*)aNotification { [self ok:[aNotification object]]; } /* delegate method for the form */ -(void) controlTextDidChange:(NSNotification *)aNotification { } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableViewAttributesInspector.h000066400000000000000000000036741475375552500327030ustar00rootroot00000000000000/* GormTableViewAttributesInspector.h Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Author: Gregory John Casamento Date: Aug 2001. 2003, 2004 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormTableViewAttributesInspector_h #define INCLUDED_GormTableViewAttributesInspector_h #include @class NSButton; @class NSColorWell; @class NSForm; @class NSMatrix; @class NSPopUpButton; @interface GormTableViewAttributesInspector: IBInspector { /* selection */ NSButton *multipleSelectionSwitch; NSButton *emptySelectionSwith; NSButton *columnSelectionSwitch; /* scrollers */ NSButton *verticalScrollerSwitch; NSButton *horizontalScrollerSwitch; /* border and rows */ NSMatrix *borderMatrix; NSForm *rowsHeightForm; /* options */ NSButton *drawgridSwitch; NSButton *resizingSwitch; NSButton *reorderingSwitch; /* tag */ NSForm *tagForm; NSColorWell *backgroundColor; } @end #endif /* INCLUDED_GormTableViewAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableViewAttributesInspector.m000066400000000000000000000155101475375552500327000ustar00rootroot00000000000000/* GormTableViewAttributesInspector.m Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Author: Gregory John Casamento Date: Aug 2001. 2003, 2004 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #import #import #import #import "GormTableViewAttributesInspector.h" #import "GormNSTableView.h" @implementation GormTableViewAttributesInspector - (id) init { if ([super init] == nil) { return nil; } if ([NSBundle loadNibNamed: @"GormNSTableViewInspector" owner: self] == NO) { NSLog(@"Could not gorm GormTableViewInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id)sender { BOOL flag; BOOL isScrollView; id scrollView; scrollView = [object enclosingScrollView]; isScrollView = [scrollView isKindOfClass: [NSScrollView class]]; /* Selection */ if ( sender == multipleSelectionSwitch ) { [object setGormAllowsMultipleSelection:[multipleSelectionSwitch state]]; } else if ( sender == emptySelectionSwith ) { [object setGormAllowsEmptySelection: [emptySelectionSwith state]]; } else if ( sender == columnSelectionSwitch ) { [object setGormAllowsColumnSelection: [columnSelectionSwitch state]]; } /* scrollers */ else if ( (sender == verticalScrollerSwitch) && isScrollView) { flag = ([sender state] == NSOnState) ? YES : NO; [scrollView setHasVerticalScroller: flag]; } else if ( (sender == horizontalScrollerSwitch) && isScrollView) { flag = ([sender state] == NSOnState) ? YES : NO; [scrollView setHasHorizontalScroller: flag]; } /* border */ else if ( (sender == borderMatrix) && isScrollView) { [scrollView setBorderType: [[sender selectedCell] tag]]; } /* dimension */ else if (sender == rowsHeightForm) { int numCols = [(NSTableView*)object numberOfColumns]; int newNumCols = [[sender cellAtIndex: 1] intValue]; float rowHeight = [[sender cellAtIndex: 0] floatValue]; // make sure the minimum height doesn't go below 1. if(rowHeight < 1.0) { rowHeight = 1.0; [[sender cellAtIndex: 0] setFloatValue: 1.0]; } // add/delete columns based on number in #columns field... [object setRowHeight: rowHeight]; if(newNumCols > 0) { if(numCols < newNumCols) { int colsToAdd = newNumCols - numCols; int i = 0; // Add columns from the last to the target number... for(i = 0; i < colsToAdd; i++) { NSString *identifier = [NSString stringWithFormat: @"column%d",(numCols + i + 1)]; NSTableColumn *tc = AUTORELEASE([(NSTableColumn *)[NSTableColumn alloc] initWithIdentifier: (id)identifier]); [tc setWidth: 50]; [tc setMinWidth: 20]; [tc setResizable: YES]; [tc setEditable: YES]; [object addTableColumn: tc]; } } else if(numCols > newNumCols) { int colsToDelete = numCols - newNumCols; int i = 0; NSArray *columns = [object tableColumns]; // remove columns... for(i = 0; i < colsToDelete; i++) { NSTableColumn *tc = [columns objectAtIndex: (i + newNumCols)]; [object removeTableColumn: tc]; } } } // recompute column sizes.. [object sizeToFit]; [object tile]; } /* Options */ else if ( sender == drawgridSwitch ) { [object setDrawsGrid:[drawgridSwitch state]]; } else if ( sender == resizingSwitch ) { [object setGormAllowsColumnResizing: [resizingSwitch state]]; } else if ( sender == reorderingSwitch ) { [object setGormAllowsColumnReordering:[reorderingSwitch state]]; } /* tag */ else if( sender == tagForm ) { [object setTag:[[tagForm cellAtIndex:0] intValue]]; } /* background color */ else if( sender == backgroundColor ) { [object setBackgroundColor: [backgroundColor color]]; } // #warning always needed ? [scrollView setNeedsDisplay: YES]; [super ok:sender]; } /* Sync from object ( NSTableView and its scollView ) changes to the inspector */ - (void) revert: (id) sender { BOOL isScrollView; id scrollView; if ( object == nil ) return; scrollView = [object enclosingScrollView]; isScrollView = [ scrollView isKindOfClass: [NSScrollView class]]; /* selection */ [multipleSelectionSwitch setState: [object gormAllowsMultipleSelection]]; [emptySelectionSwith setState:[object gormAllowsEmptySelection]]; [columnSelectionSwitch setState:[object gormAllowsColumnSelection]]; if (isScrollView) { /* scrollers */ [verticalScrollerSwitch setEnabled: YES]; [verticalScrollerSwitch setState: ([scrollView hasVerticalScroller]) ? NSOnState : NSOffState]; [horizontalScrollerSwitch setEnabled: YES]; [horizontalScrollerSwitch setState: ([scrollView hasHorizontalScroller]) ? NSOnState : NSOffState]; /* border */ [borderMatrix setEnabled: YES]; [borderMatrix selectCellWithTag: [scrollView borderType]]; } else { [verticalScrollerSwitch setEnabled: NO]; [horizontalScrollerSwitch setEnabled: NO]; [borderMatrix setEnabled: NO]; } /* dimension */ [[rowsHeightForm cellAtIndex: 0] setIntValue: [object rowHeight] ]; [[rowsHeightForm cellAtIndex: 1] setIntValue: [(NSTableView*)object numberOfColumns]]; /* options */ [drawgridSwitch setState:[object drawsGrid]]; [resizingSwitch setState:[object gormAllowsColumnResizing]]; [reorderingSwitch setState:[object gormAllowsColumnReordering]]; /* tag */ [[tagForm cellAtIndex:0] setIntValue:[object tag]]; /* background color */ [backgroundColor setColorWithoutAction: [object backgroundColor]]; [super revert:sender]; } /* delegate for tag and Forms */ - (void) controlTextDidEndEditing: (NSNotification*)aNotification { [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableViewEditor.h000066400000000000000000000022111475375552500300760ustar00rootroot00000000000000/* GormTableViewEditor.h - Editor for tableviews. * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: Aug 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormTableViewEditor_h #define INCLUDED_GormTableViewEditor_h #include @class GormNSTableView; @interface GormTableViewEditor : GormViewWithSubviewsEditor { GormNSTableView *tableView; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableViewEditor.m000066400000000000000000000303751475375552500301170ustar00rootroot00000000000000/* GormTableViewEditor.m - Editor for matrices. * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormTableViewEditor.h" #include "GormNSTableView.h" NSString *IBTableColumnPboardType = @"IBTableColumnPboardType"; static NSCell *_editedCell; static NSCell *_currentHeaderCell; static NSText *_textObject; @interface GormTableViewEditor (Private) - (void) editHeader: (NSTableHeaderView*) th withEvent: (NSEvent *) theEvent; @end @implementation GormTableViewEditor - (void) setFrame: (NSRect)frame { if(tableView != nil) { [tableView deselectAll: self]; } [super setFrame: frame]; } /** * Decide whether an editor can accept data from the pasteboard. */ - (BOOL) acceptsTypeFromArray: (NSArray*)types { return NO; } /** * Activate an editor - inserts it into the view hierarchy or whatever is * needed for the editor to be able to provide its functionality. * This method should be called by the document when an editor is created * or opened. It should be safe to call repeatedly. */ - (BOOL) activate { if ([super activate]) { if ([_editedObject isKindOfClass: [NSScrollView class]]) tableView = [(NSScrollView *)_editedObject documentView]; else tableView = (GormNSTableView *)_editedObject; RETAIN(tableView); // FIXME: Temporary fix. [tableView setAllowsColumnResizing: YES]; [tableView setAllowsColumnSelection: YES]; [tableView setAllowsMultipleSelection: NO]; [tableView setAllowsEmptySelection: YES]; [tableView setAllowsColumnReordering: YES]; [tableView setGormDelegate: self]; return YES; } return NO; } - (void) scrollToPoint: (NSPoint)point { if ([_super_view respondsToSelector:@selector(scrollToPoint:)]) { [(NSClipView *)_super_view scrollToPoint: point]; } } - (NSRect) documentVisibleRect { NSRect visRect = _bounds; if ([_super_view respondsToSelector:@selector(documentVisibleRect)]) { visRect = [(NSClipView *)_super_view documentVisibleRect]; } return visRect; } /** * Deactivate an editor - removes it from the view hierarchy so that objects * can be archived without including the editor. * This method should be called automatically by the 'close' method. * It should be safe to call repeatedly. */ - (void) deactivate { if (activated == YES) { // [tableView unselect]; if ([tableView selectedColumn] != -1) { [tableView deselectColumn: [tableView selectedColumn]]; } [tableView setAllowsColumnResizing: [tableView gormAllowsColumnResizing]]; [tableView setAllowsColumnSelection: [tableView gormAllowsColumnSelection]]; [tableView setAllowsMultipleSelection: [tableView gormAllowsMultipleSelection]]; [tableView setAllowsEmptySelection: [tableView gormAllowsEmptySelection]]; [tableView setAllowsColumnReordering: [tableView gormAllowsColumnReordering]]; [tableView setGormDelegate: nil]; [tableView setNeedsDisplay: YES]; [super deactivate]; } } /* * This method deletes all the objects in the current selection in the editor. */ - (void) deleteSelection { NSDebugLog(@"deleteSelection"); if ([selection count] == 0) { NSDebugLog(@"no column to delete"); } else if([[selection objectAtIndex: 0] isKindOfClass: [NSTableColumn class]]) { [tableView removeTableColumn: [selection objectAtIndex: 0]]; [tableView deselectAll: self]; [self selectObjects: [NSArray array]]; } } /* * This method places the current selection from the editor on the pasteboard. */ - (void) copySelection { NSDebugLog(@"copySelection"); if ([[[self selection] objectAtIndex: 0] isKindOfClass: [NSTableColumn class]]) { [document copyObjects: [self selection] type: IBTableColumnPboardType toPasteboard: [NSPasteboard generalPasteboard]]; } else { NSDebugLog(@"no paste"); } } /* * This method is used to add the contents of the pasteboard to the current * selection of objects within the editor. */ - (void) pasteInSelection { NSArray *objects; NSDebugLog(@"pasteInSelection"); objects = [document pasteType: IBTableColumnPboardType fromPasteboard: [NSPasteboard generalPasteboard] parent: _editedObject]; if (objects == nil) return; if ([objects count] == 0) return; if ([objects count] > 1) { NSDebugLog(@"warning strange behaviour : GormTableViewEditor pasteInSelection"); } else if ([[objects objectAtIndex: 0] isKindOfClass: [NSTableColumn class]] == NO) { NSDebugLog(@"invalid data in IBTableColumnPboardType"); return; } [tableView addTableColumn: [objects objectAtIndex: 0]]; } - (void) mouseDown:(NSEvent*)theEvent { BOOL onKnob = NO; id hitView; { if ([parent respondsToSelector: @selector(selection)] && [[parent selection] containsObject: _editedObject]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) onKnob = YES; } if (onKnob == YES) { if (parent) return [parent mouseDown: theEvent]; else return [self noResponderFor: @selector(mouseDown:)]; } } if (opened == NO) { NSDebugLog(@"not opened"); [super mouseDown: theEvent]; return; } hitView = [[tableView enclosingScrollView] hitTest: [[[tableView enclosingScrollView] superview] convertPoint: [theEvent locationInWindow] fromView: nil]]; if (hitView == [tableView headerView]) { if ([theEvent clickCount] == 2) { [self editHeader: hitView withEvent: theEvent]; } else { [hitView mouseDown: theEvent]; } } else if ([hitView isKindOfClass: [NSScroller class]]) { [hitView mouseDown: theEvent]; } else if (hitView == tableView) { if ([theEvent modifierFlags] & NSControlKeyMask) { [super mouseDown: theEvent]; } else if ([tableView selectedColumn] != -1) { [tableView deselectColumn: [tableView selectedColumn]]; } } else if (hitView == self && [theEvent modifierFlags] & NSControlKeyMask) { /* * see if we're making a connection from the selected column. * not useful in vanilla gorm as they have no outlets or actions, * but palettes might find it useful. */ int selectedColumn = [tableView selectedColumn]; if (selectedColumn != -1) { NSPoint pt = [theEvent locationInWindow]; NSRect r = [tableView rectOfColumn: selectedColumn]; pt = [tableView convertPoint:pt fromView:nil]; if (NSMouseInRect(pt, r, [tableView isFlipped])) { /* mouse was inside the selected column */ NSPasteboard *pb; NSPoint dragPoint = [theEvent locationInWindow]; NSTableColumn *col = [[tableView tableColumns] objectAtIndex: selectedColumn]; NSString *name = [document nameForObject: col]; pb = [NSPasteboard pasteboardWithName: NSDragPboard]; [pb declareTypes: [NSArray arrayWithObject: GormLinkPboardType] owner: self]; [pb setString: name forType: GormLinkPboardType]; [[NSApp delegate] displayConnectionBetween: col and: nil]; [[NSApp delegate] startConnecting]; [self dragImage: [[NSApp delegate] linkImage] at: dragPoint offset: NSZeroSize event: theEvent pasteboard: pb source: self slideBack: YES]; } } } } - (void) tableViewSelectionDidChange: (id) tv { if ([tableView selectedColumn] != -1) { [self selectObjects: [NSArray arrayWithObject: [[tableView tableColumns] objectAtIndex: [tableView selectedColumn]]]]; } else { [self selectObjects: [NSArray arrayWithObject: tableView]]; } } - (void) outlineViewSelectionDidChange: (id) tv { if ([tableView selectedColumn] != -1) { [self selectObjects: [NSArray arrayWithObject: [[tableView tableColumns] objectAtIndex: [tableView selectedColumn]]]]; } else { [self selectObjects: [NSArray arrayWithObject: tableView]]; } } - (void) editHeader: (NSTableHeaderView*) th withEvent: (NSEvent *) theEvent { NSText *t; NSTableColumn *tc; NSRect drawingRect; NSUInteger columnIndex = [th columnAtPoint: [th convertPoint:[theEvent locationInWindow] fromView: nil]]; if (columnIndex == NSNotFound) return; _textObject = nil; [[th tableView] scrollColumnToVisible: columnIndex]; t = [[th window] fieldEditor: YES forObject: self]; if ([t superview] != nil) { if ([t resignFirstResponder] == NO) { return; } } // Prepare the cell tc = [[tableView tableColumns] objectAtIndex: columnIndex]; // NB: need to be released when no longer used _editedCell = [[tc headerCell] copy]; _currentHeaderCell = [tc headerCell]; [_editedCell setStringValue: [[tc headerCell] stringValue]]; [_editedCell setEditable: YES]; _textObject = [_editedCell setUpFieldEditorAttributes: t]; drawingRect = [th headerRectOfColumn: columnIndex]; [_editedCell editWithFrame: drawingRect inView: th editor: _textObject delegate: self event: theEvent]; return; } - (void) textDidEndEditing: (NSNotification *)aNotification { [_editedCell endEditing: _textObject]; [_currentHeaderCell setStringValue: [[_textObject text] copy]]; RELEASE(_editedCell); } - (NSDragOperation) draggingEntered: (id)sender { return [self draggingUpdated: sender]; } - (NSDragOperation) draggingUpdated: (id)sender { NSPasteboard *dragPb; NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { id destination = nil; /* NSView *hitView = [[tableView enclosingScrollView] hitTest: [[[tableView enclosingScrollView] superview] convertPoint: [sender draggingLocation] fromView: nil]]; if (hitView == [tableView headerView]) { NSPoint p = [hitView convertPoint: [sender draggingLocation] fromView: nil]; int columnNumber = [(NSTableHeaderView*) hitView columnAtPoint: p]; if (columnNumber != -1) destination = [[tableView tableColumns] objectAtIndex: columnNumber]; } if (hitView == tableView) destination = tableView; */ if (destination == nil) { int col = 0; destination = _editedObject; if((col = [_editedObject selectedColumn]) != -1) { destination = [[_editedObject tableColumns] objectAtIndex: col]; } } [[NSApp delegate] displayConnectionBetween: [[NSApp delegate] connectSource] and: destination]; return NSDragOperationLink; } else { return NSDragOperationNone; } } - (BOOL) performDragOperation: (id)sender { return ([self draggingUpdated: sender] == NSDragOperationLink); } - (NSWindow *)windowAndRect: (NSRect *)prect forObject: (id) object { if (object == tableView) { *prect = [tableView convertRect: [tableView visibleRect] toView :nil]; return _window; } else { return [super windowAndRect: prect forObject: object]; } } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableViewSizeInspector.h000066400000000000000000000022221475375552500314530ustar00rootroot00000000000000/* GormTableViewSizeInspector -- size inspector for table and table subclasses. Copyright (C) 2001 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormTableViewSizeInspector_h #define INCLUDED_GormTableViewSizeInspector_h #include @interface GormTableViewSizeInspector : GormViewSizeInspector @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/GormTableViewSizeInspector.m000066400000000000000000000023061475375552500314630ustar00rootroot00000000000000/* GormTableViewSizeInspector -- size inspector for table and table subclasses. Copyright (C) 2001 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormTableViewSizeInspector.h" @implementation GormTableViewSizeInspector - (void) setObject: (id)anObject { id scrollView; scrollView = [anObject enclosingScrollView]; [super setObject: scrollView]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/inspectors.m000066400000000000000000000037471475375552500264350ustar00rootroot00000000000000/* inspectors - Various inspectors for control elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Author: Gregory John Casamento Date: Aug 2001. 2003, 2004 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include /** * IBObjectAdditions categories. */ @implementation NSBrowser (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormBrowserAttributesInspector"; } @end @implementation NSTabView (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormTabViewAttributesInspector"; } - (NSString*) editorClassName { return @"GormTabViewEditor"; } @end @implementation NSTableColumn (IBObjectAdditions) - (NSString *) inspectorClassName { return @"GormTableColumnAttributesInspector"; } - (NSString*) sizeInspectorClassName { return @"GormTableColumnSizeInspector"; } @end @implementation NSTableView (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormTableViewAttributesInspector"; } - (NSString*) sizeInspectorClassName { return @"GormTableViewSizeInspector"; } - (NSString*) editorClassName { return @"GormTableViewEditor"; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/3Containers/palette.table000066400000000000000000000004111475375552500265160ustar00rootroot00000000000000{ NOTE = "Automatically generated, do not edit!"; NibFile = ""; Class = "ContainersPalette"; Icon = "ContainersPalette"; SubstituteClasses = { GormNSBrowser = NSBrowser; GormNSTableView = NSTableView; GormNSOutlineView = NSOutlineView; }; } apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/000077500000000000000000000000001475375552500226205ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/DataPalette.m000066400000000000000000000265411475375552500251760ustar00rootroot00000000000000/* main.m Copyright (C) 1999 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include /* ----------------------------------------------------------- * Some additions to the NSNumberFormatter Class specific to Gorm * -----------------------------------------------------------*/ NSArray *predefinedNumberFormats; int defaultNumberFormatIndex = 0; @implementation NSNumberFormatter (GormAdditions) + (int) formatCount { return [predefinedNumberFormats count]; } + (NSString *) formatAtIndex: (int)i { return [[predefinedNumberFormats objectAtIndex:i] objectAtIndex:0]; } + (NSString *) positiveFormatAtIndex: (int)i { NSString *fmt =[[predefinedNumberFormats objectAtIndex:i] objectAtIndex:0]; return [ [fmt componentsSeparatedByString:@";"] objectAtIndex:0]; } + (NSString *) zeroFormatAtIndex: (int)i { NSString *fmt =[[predefinedNumberFormats objectAtIndex:i] objectAtIndex:0]; return [ [fmt componentsSeparatedByString:@";"] objectAtIndex:1]; } + (NSString *) negativeFormatAtIndex: (int)i { NSString *fmt =[[predefinedNumberFormats objectAtIndex:i] objectAtIndex:0]; return [ [fmt componentsSeparatedByString:@";"] objectAtIndex:2]; } + (NSDecimalNumber *) positiveValueAtIndex: (int)i { return [NSDecimalNumber decimalNumberWithString: [[predefinedNumberFormats objectAtIndex:i] objectAtIndex:1] ]; } + (NSDecimalNumber *) negativeValueAtIndex: (int)i { return [NSDecimalNumber decimalNumberWithString: [[predefinedNumberFormats objectAtIndex:i] objectAtIndex:2] ]; } + (NSInteger) indexOfFormat: (NSString *) format { int i; NSString *fmt; int count = [predefinedNumberFormats count]; for (i=0;i @end @implementation DataPalette + (void) initialize { predefinedNumberFormats = [[NSArray alloc] initWithObjects: [NSArray arrayWithObjects: @"$#,##0.00;0.00;-$#,##0.00",@"9999.99",@"-9999.99",nil], [NSArray arrayWithObjects: @"$#,##0.00;0.00;[Red]($#,##0.00)",@"9999.99",@"-9999.99",nil], [NSArray arrayWithObjects: @"0.00;0.00;-0.00",@"9999.99",@"-9999.99",nil], [NSArray arrayWithObjects: @"0;0;-0",@"100",@"-100",nil], [NSArray arrayWithObjects: @"00000;00000;-00000",@"100",@"-100",nil], [NSArray arrayWithObjects: @"0%;0%;-0%",@"100",@"-100",nil], [NSArray arrayWithObjects: @"0.00%;0.00%;-0.00%",@"99.99",@"-99.99",nil], nil]; predefinedDateFormats = [[NSArray alloc] initWithObjects: @"%c",@"%A, %B %e, %Y", @"%B %e, %Y", @"%e %B %Y", @"%m/%d/%y", @"%b %d, %Y", @"%B %H", @"%d %b %Y", @"%H:%M:%S", @"%I:%M",nil]; } - (id) init { if((self = [super init]) != nil) { // Make ourselves a delegate, so that when the formatter is dragged in, // this code is called... [NSView registerViewResourceDraggingDelegate: self]; // subscribe to the notification... [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(willInspectObject:) name: IBWillInspectObjectNotification object: nil]; } return self; } - (void) dealloc { [NSView unregisterViewResourceDraggingDelegate: self]; [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc]; } - (void) finishInstantiate { NSView *contents; NSTextView *tv; id v; NSNumberFormatter *nf; NSDateFormatter *df; NSRect rect; originalWindow = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, 272, 192) styleMask: NSBorderlessWindowMask backing: NSBackingStoreRetained defer: NO]; [originalWindow setTitle: @"Data Views"]; contents = [originalWindow contentView]; /*******************/ /* First Column... */ /*******************/ // NSScrollView v = [[NSScrollView alloc] initWithFrame: NSMakeRect(20, 22, 113, 150)]; [v setHasVerticalScroller: YES]; [v setHasHorizontalScroller: NO]; [[(NSScrollView *)v contentView] setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [[(NSScrollView *)v contentView] setAutoresizesSubviews:YES]; [v setBorderType: NSBezelBorder]; rect = [[(NSScrollView *)v contentView] frame]; tv = [[NSTextView alloc] initWithFrame: rect]; [tv setMinSize: NSMakeSize(108.0, 143.0)]; [tv setMaxSize: NSMakeSize(1.0E7,1.0E7)]; [tv setVerticallyResizable: YES]; [tv setHorizontallyResizable: NO]; [tv setAutoresizingMask: NSViewHeightSizable | NSViewWidthSizable]; [tv setSelectable: YES]; [tv setEditable: YES]; [tv setRichText: YES]; [tv setImportsGraphics: YES]; // [[tv textContainer] setContainerSize:NSMakeSize(rect.size.width,1e7)]; // [[tv textContainer] setWidthTracksTextView:YES]; [v setDocumentView:tv]; [contents addSubview: v]; RELEASE(v); RELEASE(tv); /********************/ /* Second Column... */ /********************/ // NSImageView v = [[NSImageView alloc] initWithFrame: NSMakeRect(153, 98, 96, 72)]; [v setImageFrameStyle: NSImageFramePhoto]; //FramePhoto not implemented [v setImageScaling: NSScaleProportionally]; [v setImageAlignment: NSImageAlignCenter]; [v setImage: [NSImage imageNamed: @"Sunday_seurat.tiff"]]; [contents addSubview: v]; RELEASE(v); /* Number and Date formatters. Note that they have a specific drag type. * All other palette objects are views and use the default IBViewPboardType * drag type */ v = [[NSImageView alloc] initWithFrame: NSMakeRect(153, 48, 43, 43)]; [v setImageFrameStyle: NSImageFramePhoto]; [v setImageScaling: NSScaleProportionally]; [v setImageAlignment: NSImageAlignCenter]; [v setImage: [NSImage imageNamed: @"number_formatter.tiff"]]; [contents addSubview: v]; nf = [[NSNumberFormatter alloc] init]; [nf setFormat: [NSNumberFormatter defaultFormat]]; [self associateObject: nf type: IBFormatterPboardType with: v]; RELEASE(v); v = [[NSImageView alloc] initWithFrame: NSMakeRect(206, 48, 43, 43)]; [v setImageFrameStyle: NSImageFramePhoto]; [v setImageScaling: NSScaleProportionally]; [v setImageAlignment: NSImageAlignCenter]; [v setImage: [NSImage imageNamed: @"date_formatter.tiff"]]; [contents addSubview: v]; df = [[NSDateFormatter alloc] initWithDateFormat: [NSDateFormatter defaultFormat] allowNaturalLanguage: NO]; [self associateObject: df type: IBFormatterPboardType with: v]; RELEASE(v); // NSComboBox v = [[NSComboBox alloc] initWithFrame: NSMakeRect(153, 22, 96, 21)]; [contents addSubview: v]; RELEASE(v); } - (void) willInspectObject: (NSNotification *)notification { id o = [notification object]; if([o respondsToSelector: @selector(cell)]) { id cell = [o cell]; if([cell respondsToSelector: @selector(formatter)]) { id formatter = [o formatter]; if([formatter isKindOfClass: [NSFormatter class]]) { NSString *ident = NSStringFromClass([formatter class]); [[IBInspectorManager sharedInspectorManager] addInspectorModeWithIdentifier: ident forObject: o localizedLabel: _(@"Formatter") inspectorClassName: [formatter inspectorClassName] ordering: -1.0]; } } } } // view resource dragging delegate... /** * Ask if the view accepts the object. */ - (BOOL) acceptsViewResourceFromPasteboard: (NSPasteboard *)pb forObject: (id)obj atPoint: (NSPoint)p { return ([obj respondsToSelector: @selector(setFormatter:)] && [[pb types] containsObject: IBFormatterPboardType]); } /** * Perform the action of depositing the object. */ - (void) depositViewResourceFromPasteboard: (NSPasteboard *)pb onObject: (id)obj atPoint: (NSPoint)p { NSData *data = [pb dataForType: IBFormatterPboardType]; id array = [NSUnarchiver unarchiveObjectWithData: data]; if(array != nil) { if([array count] > 0) { id formatter = [array objectAtIndex: 0]; // Add the formatter if the object accepts one... if([obj respondsToSelector: @selector(setFormatter:)]) { // Touch the document... [[(id)[NSApp delegate] activeDocument] touch]; [obj setFormatter: formatter]; RETAIN(formatter); if ([formatter isMemberOfClass: [NSNumberFormatter class]]) { id fieldValue = [NSNumber numberWithFloat: 1.123456789]; [obj setStringValue: [fieldValue stringValue]]; [obj setObjectValue: fieldValue]; } else if ([formatter isMemberOfClass: [NSDateFormatter class]]) { id fieldValue = [NSDate date]; [obj setStringValue: [fieldValue description]]; [obj setObjectValue: fieldValue]; } } } } } /** * Should we draw the connection frame when the resource is * dragged in? */ - (BOOL) shouldDrawConnectionFrame { return NO; } /** * Types of resources accepted by this view. */ - (NSArray *)viewResourcePasteboardTypes { return [NSArray arrayWithObject: IBFormatterPboardType]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/DataPalette.tiff000066400000000000000000000007021475375552500256610ustar00rootroot00000000000000II* P8$ JaT wߑ8TzG"@p/߀{9,flIDo3ő,ϦGf(}4E\ C_pqDeT?QdeiU*Va P8 Aన(?p>'E"xr7Ǥ2K$"R\M)%ٌe7Nf0 P (D##8(RO ' 'apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GNUmakefile000066400000000000000000000033531475375552500246760ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Laurent Julliard # Date: Nov 2001 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make PALETTE_NAME = 4Data 4Data_PALETTE_ICON = DataPalette 4Data_PRINCIPAL_CLASS = DataPalette 4Data_OBJC_FILES = \ DataPalette.m \ GormDateFormatterAttributesInspector.m \ GormImageViewAttributesInspector.m \ GormNSComboBoxAttributesInspector.m \ GormNumberFormatterAttributesInspector.m \ GormTextViewAttributesInspector.m \ GormTextViewEditor.m \ GormTextViewSizeInspector.m \ inspectors.m 4Data_RESOURCE_FILES = DataPalette.tiff \ GormNSImageViewInspector.gorm \ GormNSTextViewInspector.gorm \ GormNSComboBoxInspector.gorm \ GormNSDateFormatterInspector.gorm \ GormNSNumberFormatterInspector.gorm \ palette.table 4Data_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/palette.make #-include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GNUmakefile.preamble000066400000000000000000000013041475375552500264560ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../../.. ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../../../GormCore/GormCore.framework $(PALETTE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormDateFormatterAttributesInspector.h000066400000000000000000000025161475375552500323210ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormDateFormatterAttributesInspector_h #define INCLUDED_GormDateFormatterAttributesInspector_h #include @interface GormDateFormatterAttributesInspector : IBInspector { NSTableView *formatTable; id formatField; id languageSwitch; id detachButton; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormDateFormatterAttributesInspector.m000066400000000000000000000115251475375552500323260ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include "GormDateFormatterAttributesInspector.h" /* this macro makes sure that the string contains a value, even if @"" */ #define VSTR(str) ({id _str = (id)str; (_str) ? (id)_str : (id)(@"");}) extern NSArray *predefinedDateFormats; @implementation GormDateFormatterAttributesInspector - (id) init { if ([super init] != nil) { if ([NSBundle loadNibNamed: @"GormNSDateFormatterInspector" owner: self] == NO) { NSLog(@"Could not gorm GormDateFormatterInspector"); return nil; } } return self; } - (void) ok: (id)sender { BOOL allowslanguage = NO; NSString *dateFmt = nil; NSDateFormatter *fmtr; // Set the document as modifed... [[(id)[NSApp delegate] activeDocument] touch]; if (sender == detachButton) { [[object cell] setFormatter: nil]; [[(id)[NSApp delegate] activeDocument] setSelectionFromEditor: nil]; } else { NSCell *cell = [object cell]; if (sender == formatTable) { int row; if ((row = [sender selectedRow]) != -1) { dateFmt = [NSDateFormatter formatAtIndex: row]; } [formatField setStringValue: VSTR(dateFmt) ]; } else if (sender == formatField) { NSInteger idx; dateFmt = [sender stringValue]; // If the string typed is a predefined one then highligh it in // table dateFormat table view above if ( (idx = [NSDateFormatter indexOfFormat: dateFmt]) == NSNotFound) { [formatTable deselectAll:self]; } else { [formatTable selectRow:idx byExtendingSelection:NO]; } } else if (sender == languageSwitch) { dateFmt = [formatField stringValue]; allowslanguage = ([sender state] == NSOnState); } // Update the Formatter and refresh the Cell value fmtr = [[NSDateFormatter alloc] initWithDateFormat:dateFmt allowNaturalLanguage:allowslanguage]; [cell setFormatter:fmtr]; RELEASE(fmtr); [cell setObjectValue: [cell objectValue]]; } [super ok: sender]; } - (void) revert: (id)sender { NSInteger idx; NSDateFormatter *fmtr = [[object cell] formatter]; // If the string typed is a predefined one then highligh it in // table dateFormat table view above if ( (idx = [NSDateFormatter indexOfFormat: [fmtr dateFormat]]) == NSNotFound) { [formatTable deselectAll:self]; } else { [formatTable selectRow:idx byExtendingSelection:NO]; } [formatField setStringValue: VSTR([fmtr dateFormat]) ]; [languageSwitch setState: [fmtr allowsNaturalLanguage]]; [super revert: sender]; } /* NSDateFormatter inspector: table view delegate and data source */ - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [NSDateFormatter formatCount]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { NSString *fmt = [NSDateFormatter formatAtIndex:rowIndex]; if ( [[aTableColumn identifier] isEqualToString: @"format"] ) { return fmt; } else if ( [[aTableColumn identifier] isEqualToString: @"date"] ) { return [[NSDateFormatter defaultFormatValue] descriptionWithCalendarFormat:fmt ]; } else { // Huuh?? Only 2 columns NSLog(@"Date table view only doesn't known column identifier: %@", [aTableColumn identifier]); } return nil; } - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { [self ok: formatTable]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormImageViewAttributesInspector.h000066400000000000000000000030241475375552500314300ustar00rootroot00000000000000/* GormImageViewAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormImageViewAttributesInspector_h #define INCLUDED_GormImageViewAttributesInspector_h #include @class NSButton; @class NSMatrix; @class NSTextField; @interface GormImageViewAttributesInspector : IBInspector { NSTextField *iconField; NSMatrix *borderMatrix; NSMatrix *alignmentMatrix; NSMatrix *scalingMatrix; NSButton *editableSwitch; } @end #endif /* INCLUDED_GormImageViewAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormImageViewAttributesInspector.m000066400000000000000000000070011475375552500314340ustar00rootroot00000000000000/* GormImageViewAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include #include "GormImageViewAttributesInspector.h" /* This macro makes sure that the string contains a value, even if @"" */ #define VSTR(str) ({id _str = (id)str; (_str) ? (id)_str : (id)(@"");}) @implementation GormImageViewAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSImageViewInspector" owner: self] == NO) { NSLog(@"Could not gorm GormImageViewInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id)sender { /* icon name */ if (sender == iconField) { NSString *name = [sender stringValue]; NSImage *image; if (name == nil || [name isEqual: @""]) { [object setImage: nil]; return; } image = [NSImage imageNamed: name]; if (image == nil) { image = [[NSImage alloc] init]; // [[NSImage alloc] initByReferencingFile: name]; if (image) { [image setName: name]; [image setArchiveByName: YES]; } else { // NSBeep(); } } // else { [object setImage: image ]; } } /* border */ else if (sender == borderMatrix) { [object setImageFrameStyle: [[sender selectedCell] tag]]; } /* alignment */ else if (sender == alignmentMatrix) { [object setImageAlignment: [[sender selectedCell] tag]]; } /* scaling */ else if (sender == scalingMatrix) { [object setImageScaling: [[sender selectedCell] tag]]; } /* editable */ else if (sender == editableSwitch) { [object setEditable: ([sender state] == NSOnState)]; } [super ok:sender]; } /* Sync from object ( ImageView ) changes to the inspector */ -(void) revert:(id) sender { if ( object == nil) return; if ( [ [[object image] name] isEqualToString: @"Sunday_seurat.tiff"] ) [object setImage: nil]; [iconField setStringValue: VSTR([[object image] name])]; [borderMatrix selectCellWithTag: [object imageFrameStyle]]; [alignmentMatrix selectCellWithTag: [object imageAlignment]]; [scalingMatrix selectCellWithTag: [object imageScaling]]; [editableSwitch setState: [object isEditable]]; [super revert:sender]; } /* delegate method for changing the ImageView Name */ - (void)controlTextDidChange:(NSNotification *)aNotification { // [self ok:[aNotification object]]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSComboBoxAttributesInspector.h000066400000000000000000000034431475375552500315310ustar00rootroot00000000000000/* GormNSComboBoxAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormNSComboBoxAttributesInspector_h #define INCLUDED_GormNSComboBoxAttributesInspector_h #include @class NSMutableArray; @class NSMatrix; @class NSButton; @class NSColorWell; @class NSForm; @class NSTableView; @class NSTextField; @interface GormNSComboBoxAttributesInspector: IBInspector { NSMatrix *alignmentMatrix; NSColorWell *backgroundColorWell; NSForm *itemField; NSButton *editable; NSButton *selectable; NSButton *usesDataSource; NSColorWell *textColorWell; NSForm *visibleItemsForm; NSTableView *itemTableView; NSTextField *itemTxt; NSButton *addButton; NSButton *removeButton; @private NSMutableArray *itemsArray; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSComboBoxAttributesInspector.m000066400000000000000000000112711475375552500315340ustar00rootroot00000000000000/* GormComboBoxAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include #include #include "GormNSComboBoxAttributesInspector.h" /* IBObjectAdditions category */ @implementation NSComboBox (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormNSComboBoxAttributesInspector"; } @end @implementation GormNSComboBoxAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSComboBoxInspector" owner: self] == NO) { NSLog(@"Could not gorm GormNSComboBoxInspector"); return nil; } return self; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok:(id) sender { if (sender == backgroundColorWell) { [object setBackgroundColor: [sender color]]; } else if (sender == textColorWell) { [object setTextColor: [sender color]]; } else if (sender == alignmentMatrix) { [object setAlignment: (NSTextAlignment)[[sender selectedCell] tag]]; } if (sender == editable) { BOOL flag = ([sender state] == NSOnState) ? YES :NO; [[object cell] setEditable: flag]; } if (sender == selectable) { BOOL flag = ([sender state] == NSOnState) ? YES :NO; [[object cell] setSelectable: flag]; } if (sender == usesDataSource) { BOOL flag = ([sender state] == NSOnState) ? YES :NO; [[object cell] setUsesDataSource: flag]; } else if (sender == visibleItemsForm) { [object setNumberOfVisibleItems: [[sender cellAtIndex: 0] intValue]]; } else if (sender == itemField ) { // #warning To be done } else if (sender == addButton) { if ( ! [[itemTxt stringValue] isEqualToString:@""] ) { [object addItemWithObjectValue:[itemTxt stringValue]]; [itemTableView reloadData]; } } else if (sender == removeButton) { int selected = [itemTableView selectedRow]; if ( selected != -1 ) { [itemTxt setStringValue:@""]; [object removeItemAtIndex:selected]; [itemTableView reloadData]; } } // some changes might affect other settings... [self revert: sender]; // call the superclass. [super ok: sender]; } /* Sync from object ( NSComboBox ) changes to the inspector */ -(void) revert:(id) sender { if ( object == nil ) return; [backgroundColorWell setColorWithoutAction: [object backgroundColor]]; [textColorWell setColorWithoutAction: [object textColor]]; [alignmentMatrix selectCellWithTag: [object alignment]]; // clear buttons. [editable setState: NSOffState]; [selectable setState: NSOffState]; [usesDataSource setState: NSOffState]; // set buttons. if ([[object cell] isEditable]) [editable setState: NSOnState]; if ([[object cell] isSelectable]) [selectable setState: NSOnState]; if ([[object cell] usesDataSource]) [usesDataSource setState: NSOnState]; [itemTableView reloadData]; [itemTxt setStringValue:@""]; [super revert:sender]; } /* TableView dataSource methods */ - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { if (aTableView == itemTableView ) return [[object objectValues] count]; return 0; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if (aTableView == itemTableView ) return [object itemObjectValueAtIndex:rowIndex]; return nil; } /* TableView delegate methods */ - (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex { if ( aTableView == itemTableView ) { [itemTxt setStringValue:[object itemObjectValueAtIndex:rowIndex]]; return YES; } return NO; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSComboBoxInspector.gorm/000077500000000000000000000000001475375552500302505ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSComboBoxInspector.gorm/data.classes000066400000000000000000000006441475375552500325440ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormNSComboBoxAttributesInspector = { Actions = ( ); Outlets = ( alignmentMatrix, backgroundColorWell, itemField, optionMatrix, textColorWell, visibleItemsForm, itemTxt, addButton, removeButton, itemTableView, editable, selectable, usesDataSource ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSComboBoxInspector.gorm/data.info000066400000000000000000000002701475375552500320350ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSComboBoxInspector.gorm/objects.gorm000066400000000000000000000441321475375552500325730ustar00rootroot00000000000000GNUstep archive000f4240:00000028:00000186:00000002:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @yJI @8 @P01 NSView% ? @" @q @y  @q @yJ01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @G @s @e@ @T@  @e@ @T@J0 &0 % @ @ @c @K  @c @KJ0 &01 NSColorWell1 NSControl% @* @2 @J @>  @J @>J0 &%01NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&01NSColor0&% NSCalibratedRGBColorSpace ? ? ? ? ?2 ok:v24@0:8@160% @V @2 @J @>  @J @>J0 &%0&&&&&&JJ&&&&&&&00&% NSCalibratedWhiteColorSpace ?01 NSTextField%  @T @,  @T @,J0 &%01NSTextFieldCell1 NSActionCell0& % Background&&&&&&JJ &&&&&&&I0 ? ? ? ? ?0  ?0!% @R  @T @,  @T @,J0" &%0#0$&%Text&&&&&&JJ &&&&&&&I0% ? ? ? ? ?0& ?0'0(&%Colors&&&&&&JJ &&&&&&&I0)0*&% NSNamedColorSpace0+&% System0,&% windowBackgroundColor0- ? @ @%%0. % @G @pp @e@ @J  @e@ @JJ0/ &00 % @ @ @c @;  @c @;J01 &021NSMatrix% @( @ @` @9  @` @9J03 &%04&&&&&&JJ&&&&&&&I% @9 @9 ? ?05 ?* ?* ?* ?* ?506& % NSButtonCell071 NSButtonCell08&%Button&&&&&&JJ&&&&&&&I&&& &&%%09 &0:0;1NSImage0<& % leftalign_nib&&&&&&JJ&&&&&&&I&&& &&0=0>0?&%centeralign_nib&&&&&&JJ&&&&&&&I&&& &&0@0A0B&%rightalign_nib&&&&&&JJ&&&&&&&I&&& &&0C0D0E&%justifyalign_nib&&&&&&JJ&&&&&&&I&&& &&0F0G0H&%naturalalign_nib&&&&&&JJ&&&&&&&I&&& &&:0I0J& % Alignment&&&&&&JJ &&&&&&&I)0K ? @ @%%0L % @A @b @h` @[  @h` @[J0M &0N % @ @ @f @U  @f @UJ0O &0P% @ @ @` @2  @` @2J0Q &%0R0S&%Number of Visible ItemsS&&&&&&JJ &&&&&&&I0T*0U&%System0V&%textBackgroundColor0W*U0X& % textColor0Y% @b @ @9 @6  @9 @6J0Z &%0[&&&&&&JJ &&&&&&&ITW0\1NSButton% @A @P @_@ @0  @_@ @0J0] &%0^0_&%Editable0`0a1NSMutableString&%GSSwitch0b%&&&&&&JJ&&&&&&&I0c0d&%GSSwitchSelected&&& &&0e% @A @G @_@ @0  @_@ @0J0f &%0g0h& % Selectable`b&&&&&&JJ&&&&&&&Ic&&& &&0i% @A @< @_@ @0  @_@ @0J0j &%0k0l&%Uses Data Source`b&&&&&&JJ&&&&&&&Ic&&& &&0m0n&%Options&&&&&&JJ &&&&&&&I)0o ? @ @%%0p % @ @ @o @a`  @o @a`J0q &0r % @ @ @m @\@  @m @\@J0s &0t% @ @[ @6  @[ @6J0u &%0v&&&&&&JJ &&&&&&&ITW0w% @] ? @L @7  @L @7J0x &%0y0z&%Add&&&&&&JJ&&&&&&&I&&& &&0{% @f ? @N @7  @N @7J0| &%0}0~&%Remove&&&&&&JJ&&&&&&&I&&& &&01 NSScrollView% @= @m @U  @m @UJ0 &01 NSClipView% @5 @8 @j @M  @j @MJ01 NSTableView%  @j @e`  @j @e`J0 &%0b&&&&&&JJ&&&&&&&0 &01 NSTableColumn0&%column1 CW A GP01NSTableHeaderCell0&%Titles0% &&&&&&JJ &&&&&&&I0*+0&% controlShadowColor0*+0&% windowFrameTextColor0b&&&&&&JJ &&&&&&&ITW0*+0& %  gridColor0*+0&% controlBackgroundColor01 NSTableHeaderView%  @j @6  @j @6J0% @5 @ @j @6  @j @6J0 &0 &01!GSTableCornerView% @ @ @3 @6  @3 @6J0 &%% A @ @0 &0 &01" NSScroller% @ @7 @2 @M  @2 @MJ0 &%0b&&&&&&JJ&&&&&&&J2 _doScroll:I A A A A 01# NSRulerView%    J0 &00&%Items&&&&&&JJ &&&&&&&I)0 ? @ @%%00&%Title0% A &&&&&&JJ&&&&&&& %%)0&%Window0&%ComboBox Attributes Inspector ? @" @Ç @|I&   @ @0 &0 &01$NSMutableDictionary1% NSDictionary&70& % ColorWell10& % ButtonCell(2)@0& % ButtonCell(7)k0& % TableColumn200&%column1 CZ A GP00&%Text&&&&&&JJ &&&&&&&I00&%quatre&&&&&&JJ &&&&&&&ITW0&%TextFieldCell(0)0&%Box(0)0& % ActionCell(0)40&%Box 0&%View(3)N0&%Button1{0&%TableColumn(0)0&%GormNSTableView0%  @Y @d   @Y @d J0 &%0&&&&&&JJ&&&&&&&0 &0±0ñ&%column1 B A GP0ı&&&&&&JJ &&&&&&&I0ű0Ʊ&%quatre&&&&&&JJ &&&&&&&ITW0DZ %  @Y @6  @Y @6J0ȱ &0ɱ!% @ @ @3 @6  @3 @6J0ʱ &%% A @ @0˱ &0̱& % TextField5Y0ͱ&%Box2L0α& % ButtonCell(0):0ϱ& % ButtonCell(5)^0б&%TextFieldCell(3)[0ѱ& % TextField0ұ% @S @` @T @,  @T @,J0ӱ &%0Ա0ձ&%Title&&&&&&JJ &&&&&&&I0ֱ ? ? ? ? ?0ױ ?0ر&%View(1) 0ٱ&%Button3e0ڱ&%Cell(1)0۱& % TableView(0)0ܱ& % TextField2!0ݱ& % TableColumn0ޱ& % Inspector0߱& % ButtonCell(3)C0& % ButtonCell(8)y0&%TextFieldCell(1)#0& % TableColumn100&%column2 BL A GP00&% &&&&&&JJ &&&&&&&I0*+0& %  controlColor00&%three&&&&&&JJ &&&&&&&ITW0&%View(4)r0&%TableColumn(1)00&%column2 BT A GP00&% &&&&&&JJ &&&&&&&I0b&&&&&&JJ &&&&&&&ITW0& % TextField4P0&%Box1.0& % ColorWell20& % ButtonCell(1)=0& % ButtonCell(6)g0& % TableColumn300&%column2 C A GP0&&&&&&JJ &&&&&&&I簍00&%four&&&&&&JJ &&&&&&&ITW0&%TextFieldCell(4)v0&%Buttonw0&%View(2)0P&%Button2\P&%Matrix2P&%Cell(2)P& % ScrollView(0)P& % TextField1P& % TextField6tP&%Box3pP&% NSOwnerP&!%!GormNSComboBoxAttributesInspectorP & % ButtonCell(9)}P & % ButtonCell(4)FP &%TextFieldCell(2)RP &%View(0) P &%Button4iP&%Cell(0)P& % TextField3P% @$ @_ @L @5  @L @5JP &%PP&%Text&&&&&&JJ &&&&&&&IP ? ? ? ? ?P ?P &XXP1&NSNibConnectorP&ؐP&ؐP&ѰސP&ؐP&ܰؐP&󰷐P&P&ͰP &P!&ސP"&P#&ݐP$&␐P%&P&&P'&򰺐P(&P)&P*&P+&̰P,1'NSNibOutletConnectorP-& % nextKeyViewP.'-P/'-P0'-P1'-P2'ްP3&%initialFirstResponderP4'P5& % addButtonP6'P7&%alignmentMatrixP8'P9&%backgroundColorWellP:'P;&%itemTxtP<'P=& % itemFieldP>'P?& % removeButtonP@'PA& % textColorWellPB'PC&%visibleItemsFormPD'PE&%windowPF1(NSNibControlConnectorPG&%ok:PH(GPI(GPJ'PK&%delegatePL(GPM(GPN'KPO&PP&ٰPQ& PR'PS& % nextKeyViewPT'SPU' SPV' SPW(PX&%ok:PY(XPZ( XP['P\&%editableP]'P^& % selectableP_' P`&%usesDataSourcePa&Pb&Pc&ېPd&ېPe&ېPf&Pg& Ph&ذPi&ڰPj&Pk&Pl&ܐPm&Pn&Po&Pp&Pq&Pr& Ps&Pt&͐Pu& Pv&а̐Pw&Px&ِPy& Pz&P{&P|&P}(P~&% NSFirstP&%ok:P& P( ~P'P& % itemTableViewP$&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSDateFormatterInspector.gorm/000077500000000000000000000000001475375552500313015ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSDateFormatterInspector.gorm/data.classes000066400000000000000000000003611475375552500335710ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormDateFormatterInspector = { Actions = ( ); Outlets = ( formatTable, formatField, languageSwitch, detachButton ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSDateFormatterInspector.gorm/data.info000066400000000000000000000002701475375552500330660ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSDateFormatterInspector.gorm/objects.gorm000066400000000000000000000204361475375552500336250ustar00rootroot00000000000000GNUstep archive000f4240:00000025:000000a9:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @801 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @" @[ @o @K  @o @KJ%0 &0 % @ @ @m @<  @m @<J0 &0 1 NSTextField1 NSControl% @ @ @l @6  @l @6J0 &I0 1NSTextFieldCell1 NSActionCell1NSCell0&%Text01NSFont% A@JJJJJJJJ JJJJJJJI01NSColor0&% NSCalibratedRGBColorSpace ? ? ? ? ?0 ?00& % Custom FormatJJJJJJJJ JJJJJJJI00&% NSNamedColorSpace0&% System0&% windowBackgroundColor0 ? @ @%%0 % @" @L @o @I  @o @IJ%0 &0 % @ @ @m @8  @m @8J0 &01NSButton% @$ @  @h @0  @h @0J0 &I0 1 NSButtonCell0!&%Allows natural language0"1NSImage0#1NSMutableString&%GSSwitchJJJJJJJJJJJJJJJI0$&$0%0&&%GSSwitchSelectedJJJ JJ0'0(&%OptionsJJJJJJJJ JJJJJJJI0) ? @ @%%0*% @S @3 @\ @9  @\ @9J%0+ &I0,0-&%Detach FormatterJJJJJJJJJJJJJJJI$$JJJ JJ0.1 NSScrollView% @" @e@ @o @k@  @o @k@J50/ &001 NSClipView% @5 @8 @l @h  @l @hJ011 NSTableView%  @l @e`  @l @e`J1002 &I03$04%JJJJJJJJJJJJJJJ05 &061 NSTableColumn07&%format B A GP081NSTableHeaderCell09&%Format0:% JJJJJJJJ JJJJJJJI0;0<&% controlShadowColor0=0>&% windowFrameTextColor0?0@&% nine4@JJJJJJJJ JJJJJJJI0A0B&%System0C&%textBackgroundColor0DB0E& % textColor10F0G&%date B A GP0H0I&%Date:JJJJJJJJ JJJJJJJI;=0J@4@JJJJJJJJ JJJJJJJIAD10K0L& %  gridColor0M0N&% controlBackgroundColor0O1NSTableHeaderView%  @l @6  @l @6JO0P% @5 @ @l @6  @l @6JO0Q &O0R0S& %  controlColor0T &0U1GSTableCornerView% @ @ @3 @6  @3 @6J0V &%% A @ @0W &0X &1M0Y1 NSScroller% @ @7 @2 @h   @2 @h J0Z &I0[$4JJJJJJJJJJJJJJJJ.2 _doScroll:v24@0:8@16PU0I A A A A YP0\&%Window0]&!%!DateFormater Attributes Inspector] ? @9 @Ç @{I&   @ @0^ &0_ &0`1!NSMutableDictionary1" NSDictionary&0a& % TableColumn10b0c&%column2 C1 A GP0d0e&% :JJJJJJJJ JJJJJJJI;=0f0g&%nine4gJJJJJJJJ JJJJJJJIAD0h&%Box0i&%View(1) 0j&%Box10k& % TextField 0l& % ScrollView.0m& % ButtonCell(0) 0n&%Button1*0o&%View(2)0p&% NSOwner0q&%GormDateFormatterInspector0r& % TableColumn60s&%GormNSTableView10t& % ButtonCell(1),0u&%TableColumn(0)F0v&%Button0w&%Cell(0)30x& % Inspector0y&%TextFieldCell(0) 0z &""0{1#NSNibConnectorxp0|#h0}#ki0~#j0#vo0#n01$NSNibOutletConnectorpx0&%window0$pk0& % formatField0$pv0&%languageSwitch0$pn0& % detachButton01%NSNibControlConnectorkp0&%ok:0%vp0%np0#l0#sl0#rs0#a0$ps0& % formatTable0$sp0& % dataSource0$sp0&%delegate0$kv0& % nextKeyView0$vn0$nk0$xs0&%initialFirstResponder0#ih0#yk0%y0&% NSFirst0&%ok:0#oj0#mv0%m0#tn0%t0#ws0#us0!&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSImageViewInspector.gorm/000077500000000000000000000000001475375552500304155ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSImageViewInspector.gorm/data.classes000066400000000000000000000004171475375552500327070ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormNSImageViewAttributesInspector = { Actions = ( ); Outlets = ( alignmentMatrix, borderMatrix, editableSwitch, iconField, scalingMatrix ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSImageViewInspector.gorm/data.info000066400000000000000000000002701475375552500322020ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSImageViewInspector.gorm/objects.gorm000066400000000000000000000373341475375552500327460ustar00rootroot00000000000000GNUstep archive000f4240:0000001e:00000149:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ0 &0 %  @p @x  @p @xJ0 &0 % @ @r @o @K  @o @KJ 0 &0 % @ @ @m @<  @m @<J0 &01 NSTextField1 NSControl% @ @ @l @6  @l @6J0 &%01NSTextFieldCell1 NSActionCell1NSCell0&%Text01NSFont% A@&&&&&&JJ &&&&&&&I01NSColor0&% NSCalibratedRGBColorSpace ? ? ? ? ?0 ?00&%Icon&&&&&&JJ &&&&&&&I00&% NSNamedColorSpace0&% System0&% windowBackgroundColor0 ? @ @%%0 % @M @b` @b @M  @b @MJ"0 &0 % @ @ @a @@  @a @@J0! &0"1NSMatrix% @ @ @` @9  @` @9J0# &%0$0%&&&&&&&JJ&&&&&&&I% @9 @9 ? ?0& ?* ?* ?* ?* ?&0'& % NSButtonCell0(1 NSButtonCell0)&%Button&&&&&&JJ&&&&&&&I%&&& &&%%0* &0+%0,1NSImage0-& % noBorder_nib&&&&&&JJ&&&&&&&I%&&& &&0.%0/00&%photoframe_nib&&&&&&JJ&&&&&&&I%&&& &&01%0203& % bezel_nib&&&&&&JJ&&&&&&&I%&&& &&04%0506& % ridge_nib&&&&&&JJ&&&&&&&I%&&& &&07%0809& % button_nib&&&&&&JJ&&&&&&&I%&&& &&2 ok:v24@0:8@16+0:0;&%Border&&&&&&JJ &&&&&&&I0< ? @ @%%0= % @M @@ @b @[  @b @[J0> &0? % @ @ @b` @V@  @b` @V@J0@ &0A% @A @  @S@ @S@  @S@ @S@J0B &%0C%&&&&&&JJ&&&&&&&I% @9 @9 ? ?&&0D& % NSButtonCell0E0F&%Button&&&&&&JJ&&&&&&&I&&& &&%%0G &  0H%0I0J&%iconTopLeft_nib&&&&&&JJ&&&&&&&I%&&& &&0K%0L0M& % iconTop_nib&&&&&&JJ&&&&&&&I%&&& &&0N%0O0P&%iconTopRight_nib&&&&&&JJ&&&&&&&I%&&& &&0Q%0R0S&%iconCenterLeft_nib&&&&&&JJ&&&&&&&I%&&& &&0T%0U0V&%iconCenter_nib&&&&&&JJ&&&&&&&I%&&& &&0W%0X0Y&%iconCenterRight_nib&&&&&&JJ&&&&&&&I%&&& &&0Z%0[0\&%iconBottomLeft_nib&&&&&&JJ&&&&&&&I%&&& &&0]%0^0_&%iconBottom_nib&&&&&&JJ&&&&&&&I%&&& &&0`%0a0b&%iconBottomRight_nib&&&&&&JJ&&&&&&&I%&&& &&]0c0d& % Alignment&&&&&&JJ &&&&&&&I0e ? %%0f % @ @j@ @` @U  @` @UJ 0g &0h % @ @ @\ @N  @\ @NJ0i &0j% @ @ @Y @L  @Y @LJ0k &%0l%&&&&&&JJ&&&&&&&I% @Y @2 ? ?0m0n&% controlBackgroundColor0o ?* ?* ?* ?* ?0p& % NSButtonCell0q0r&%Radio0s0t1NSMutableString&%GSRadio&&&&&&JJ&&&&&&&I%0u0v&%GSRadioSelected&&& &&%%0w &0x0y&%Proportionallys&&&&&&JJ&&&&&&&I%u&&& &&0z0{&%To Fits&&&&&&JJ&&&&&&&I%u&&& &&0|0}&%Nones&&&&&&JJ&&&&&&&I%u&&& &&z0~0&%Scaling&&&&&&JJ &&&&&&&I0 ? @ @%%0 % @b @j@ @\ @U  @\ @UJ 0 &0 % @ @ @Y @N  @Y @NJ0 &01NSButton% @. @9 @Q @1  @Q @1J0 &%00&%Editable00&%GSSwitch&&&&&&JJ&&&&&&&I%00&%GSSwitchSelected&&& &&00&%Options&&&&&&JJ &&&&&&&I0 ? @ @%%00&% Title0% A &&&&&&JJ&&&&&&& %%0&%Window0&%Image Attributes Inspector ? ? @Ç @|I&   @ @p0 &0 &01NSMutableDictionary1 NSDictionary&/0&% NSOwner0&"%"GormNSImageViewAttributesInspector0& % ActionCell(0)$0& % ButtonCell(6)K0&%Button0& % Inspector0&%ButtonCell(12)]0&%TextFieldCell(0)0&%ButtonCell(16)|0& % ButtonCell(1).0&%View(3)?0& % ButtonCell(5)H0&%ButtonCell(11)Z0&%Box 0&%Box70& % ButtonCell(9)T0&%Box6f0& % TextField30&%ButtonCell(15)z0& % ButtonCell(0)+0&%View(2) 0&%Box50 % @S @S @J @F  @J @FJ0 &0 % @ @ @C @2  @C @2J0 &00&%Box&&&&&&JJ &&&&&&&I0 ?* ?* ?* ?* ?0 ? @ @%%0& % TextField20% @$ @_ @L @5  @L @5J0 &%00&%Text&&&&&&JJ &&&&&&&I0 ? ? ? ? ?0 ?0& % ButtonCell(4)70&%Box4=0& % TextField10% @$ @_ @L @5  @L @5J0 &%0±0ñ&%Text&&&&&&JJ &&&&&&&I0ı ? ? ? ? ?0ű ?0Ʊ& % ActionCell(2)l0DZ&%Box30ȱ % @S @S @J @F  @J @FJ0ɱ &0ʱ % @ @ @C @2  @C @2J0˱ &0̱0ͱ&%Box&&&&&&JJ &&&&&&&I0α ?* ?* ?* ?* ?0ϱ ? @ @%%0б&%Matrix2j0ѱ&%ButtonCell(10)W0ұ& % ButtonCell(8)Q0ӱ&%Box20Ա % @S @S @J @F  @J @FJ0ձ &0ֱ % @ @ @C @2  @C @2J0ױ &0ر0ٱ&%Box&&&&&&JJ &&&&&&&I0ڱ ?* ?* ?* ?* ?0۱ ? @ @%%0ܱ&%Matrix1A0ݱ&%ButtonCell(14)x0ޱ&%Box10߱&%View(1) 0&%Box(0)0& % ButtonCell(3)40&%View(5)0& % ActionCell(1)C0& % ButtonCell(7)N0&%ButtonCell(13)`0&%View(0) 0& % TextField0% @$ @_ @L @5  @L @5J0 &%00&%Text&&&&&&JJ &&&&&&&I0 ? ? ? ? ?0 ?0&%Matrix"0&%ButtonCell(17)0& % ButtonCell(2)10&%View(4)h0 &BB01NSNibConnector00簝000ߐ0ް00Ӱ0ǰ00ܰ0PPаPPP1NSNibOutletConnectorP& % iconFieldPP& % borderMatrixPP &%alignmentMatrixP P & % scalingMatrixP P &%editableSwitchPP&%windowP1NSNibControlConnectorP&%ok:PܰPаPPP& % nextKeyViewPаPP&%initialFirstResponderPP&%delegatePP&%ok:PPP ߰P!P"P#&% NSFirstP$&% ok:P%ސP&P'P(P)P*P+P,P-ܐP.ܐP/ܐP0ҰܐP1ܐP2ѰܐP3ܐP4ܐP5ܐP6ܐP7񰨐P8ݰАP9АP:АP;ưАP<ⰦP=ﰜP>#$P?P@& % nextKeyViewPA@PBܰ@PC&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSNumberFormatterInspector.gorm/000077500000000000000000000000001475375552500316545ustar00rootroot00000000000000data.classes000066400000000000000000000005721475375552500340710ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSNumberFormatterInspector.gorm{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormNumberFormatterInspector = { Actions = ( ); Outlets = ( formatTable, detachButton, addThousandSeparatorSwitch, commaPointSwitch, formatForm, localizeSwitch, negativeField, negativeRedSwitch, positiveField, zeroField ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSNumberFormatterInspector.gorm/data.info000066400000000000000000000002701475375552500334410ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamobjects.gorm000066400000000000000000000353661475375552500341310ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSNumberFormatterInspector.gormGNUstep archive000f4240:00000028:0000010e:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSButton1 NSControl% @T @" @\ @9  @\ @9J%0 &I0 1 NSButtonCell1 NSActionCell1NSCell0 &%Detach Formatter0 1NSFont% A@JJJJJJJJJJJJJJJI0 & JJJ JJ0 1 NSScrollView% @$ @r @o @X  @o @XJ50 &01 NSClipView% @5 @8 @l @R@  @l @R@J01 NSTableView%  @l @e`  @l @e`J0 &I0 0%JJJJJJJJJJJJJJJ0 &01 NSTableColumn0&%positive B A GP01NSTableHeaderCell1NSTextFieldCell0&%Positive0% JJJJJJJJ JJJJJJJI01NSColor0&% NSNamedColorSpace0&% System0&% controlShadowColor00&% windowFrameTextColor0 0!&% four!JJJJJJJJ JJJJJJJI0"0#&%System0$&%textBackgroundColor0%#0&& % textColor0'0(&%negative B A GP0)0*&%Negative*JJJJJJJJ JJJJJJJI0+!!JJJJJJJJ JJJJJJJI"%0,0-& %  gridColor0.0/&% controlBackgroundColor001NSTableHeaderView%  @l @6  @l @6J001% @5 @ @l @6  @l @6J002 &00304& %  controlColor05 &061GSTableCornerView% @ @ @3 @6  @3 @6J07 &%% A @ @08 &09 &.0:1 NSScroller% @ @7 @2 @R  @2 @RJ0; &I0< JJJJJJJJJJJJJJJJ 2 _doScroll:v24@0:8@1616I A A A A :10=1NSBox% @$ @k @o` @O  @o` @OJ%0> % @ @ @m @B  @m @BJ=0? &0@1 NSTextField% @  @R@ @5  @R@ @5J0A &I0B  JJJJJJJJ JJJJJJJI"%0C% @d  @R@ @5  @R@ @5J0D &I0E  JJJJJJJJ JJJJJJJI"%0F% @ @2 @R@ @2  @R@ @2J0G &I0H0I&%Positive0J% A@IJJJJJJJJ JJJJJJJI"%0K% @d @2 @R@ @2  @R@ @2J0L &I0M0N&%NegativeJNJJJJJJJJ JJJJJJJI"%0O% @T  @R@ @5  @R@ @5J0P &I0Q  JJJJJJJJ JJJJJJJI"%0R% @T @2 @R@ @2  @R@ @2J0S &I0T0U&%ZeroJUJJJJJJJJ JJJJJJJI"%0V &>0W0X&%Appearance SamplesXJJJJJJJJJJJJJJJ @ @%%0Y% @& @C @o@ @P  @o@ @PJ%0Z % @ @ @m @C  @m @CJY0[ &0\ % @6 @[ @0  @[ @0J0] &I0^0_&%Negatve In Red0`1NSImage0a1 NSMutableString&%GSSwitchJJJJJJJJJJJJJJJI 0b0c &%GSSwitchSelectedJJJ JJ0d %  @b@ @0  @b@ @0J0e &I0f0g&%Add 1000s Separator`JJJJJJJJJJJJJJJI bJJJ JJ0h % @c @6 @P @0  @P @0J0i &I0j0k&%Localize`JJJJJJJJJJJJJJJI bJJJ JJ0l % @c  @P @0  @P @0J0m &I0n0o&%,<-->.`JJJJJJJJJJJJJJJI bJJJ JJ0p &Z0q0r&%OptionsrJJJJJJJJJJJJJJJ @ @%%0s1!NSForm1"NSMatrix% @$ @Y @o` @Z  @o` @ZJ%0t &I0u1# NSFormCell JJJJJJJJJJJJJJJI 0v0w&%Field:JJJJJJJJJJJJJJJ% @o` @3 @..0x& % NSFormCell%%0y &0z#  JJJJJJJJJJJJJJJI BT0{0|&%Positive|JJJJJJJJJJJJJJJ0}#0~&~JJJJJJJJJJJJJJJI BT00&%ZeroJJJJJJJJJJJJJJJ0#0&JJJJJJJJJJJJJJJI BT00&%NegativeJJJJJJJJJJJJJJJ0#0&JJJJJJJJJJJJJJJI BT00&%MinJJJJJJJJJJJJJJJ0#0&JJJJJJJJJJJJJJJI BT00&%MaxJJJJJJJJJJJJJJJ00&% windowBackgroundColor0&%Window0&$%$Number Formater Attributes Inspector ? @L @Ç @{I&   @ @0 &0 &01$NSMutableDictionary1% NSDictionary&(0&% NSOwner0&%GormNumberFormatterInspector0& % Inspector0& % ScrollView 0&%GormNSTableView0& % FormCell(1)}0&%TextFieldCell(0)H0& % TextField(3)K0& % Button(2)h0& % ButtonCell(1) 0&%TextFieldCell(4)Q0&%View(3)>0&%Button10&%Box(2)Y0&%TableColumn(0)'0& % TableColumn100&%column2 C1 A GP00&% JJJJJJJJ JJJJJJJI00&%nineJJJJJJJJ JJJJJJJI"%0& % FormCell(0)z0& % TextField(2)F0& % Button(1)d0& % ButtonCell(0)^0&%TextFieldCell(3)M0& % FormCell(4)0& % ButtonCell(4)n0&%Box(1)=0& % TextField(1)C0& % Button(0)\0& % TableColumn0&%Cell(0)0&%TextFieldCell(2)E0& % FormCell(3)0&%View(1)Z0& % TextField(5)R0& % ButtonCell(3)j0&%Form(0)s0& % TextField(0)@0& % FormCell(2)u0&%TextFieldCell(1)B0& % Button(3)l0& % TextField(4)O0& % ButtonCell(2)f0±&%TextFieldCell(5)T0ñ &7701&NSNibConnector0ű&01'NSNibOutletConnector0DZ&%window01(NSNibControlConnector0ɱ&%ok:0ʱ&0˱&0̱&0ͱ&0α'0ϱ & % formatTable0б'0ѱ & % dataSource0ұ'0ӱ &%delegate0Ա'0ձ &%initialFirstResponder0ֱ&0ױ(0ر&% NSFirst0ٱ&%ok:0ڱ&0۱&0ܱ&0ݱ&0ޱ&0߱&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0'0&%negativeRedSwitch0'0&%addThousandSeparatorSwitch0'0&%localizeSwitch0'0& % negativeField0'0& % positiveField0'0& % formatFormP'P& % detachButtonP'P&%commaPointSwitchP&P&P&P&P&P &°P 'P & % zeroFieldP $&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSTextViewInspector.gorm/000077500000000000000000000000001475375552500303175ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSTextViewInspector.gorm/data.classes000066400000000000000000000005571475375552500326160ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormNSTextViewAttributesInspector = { Actions = ( ); Outlets = ( backgroundColorWell, textColorWell, borderMatrix, editableButton, multipleFontsButton, graphicsButton, selectableButton, findPanelButton, undoButton ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSTextViewInspector.gorm/data.info000066400000000000000000000002701475375552500321040ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNSTextViewInspector.gorm/objects.gorm000066400000000000000000000240041475375552500326360ustar00rootroot00000000000000GNUstep archive000f4240:0000001e:000000e6:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @8 @p01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @H @s @d @O  @d @OJ 0 &0 % @ @ @c @B  @c @BJ0 &01 NSColorWell1 NSControl% @H @ @J @?  @J @?J0 &%01NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&01NSColor0&% NSCalibratedRGBColorSpace ? ? ? ? ?2 ok:v24@0:8@1601NSTextFieldCell1 NSActionCell0&%Background Color&&&&&&JJ &&&&&&&I00&% NSNamedColorSpace0&% System0&% windowBackgroundColor0 ? @ @%%0 % @H @, @d @c  @d @cJ0 &0 % @ @ @c @`@  @c @`@J0 &0!1NSButton% @ @Z @a @1  @a @1J0" &%0#1 NSButtonCell0$& % Selectable0%1NSImage0&1NSMutableString&%GSSwitch0'%&&&&&&JJ&&&&&&&I0(0)&%GSSwitchSelected&&& &&0*% @ @P @a @1  @a @1J0+ &%0,0-&%Mutliple fonts allowed%'&&&&&&JJ&&&&&&&I(&&& &&0.% @ @U@ @a @1  @a @1J0/ &%0001&%Editable%'&&&&&&JJ&&&&&&&I(&&& &&02% @ @G @a @1  @a @1J03 &%0405&%Graphics allowed%'&&&&&&JJ&&&&&&&I(&&& &&06% @ @< @a @1  @a @1J07 &%0809& % Undo allowed%'&&&&&&JJ&&&&&&&I(&&& &&0:% @ @" @a @1  @a @1J0; &%0<0=&%Uses Find Panel%'&&&&&&JJ&&&&&&&I(&&& &&0>0?&%Options&&&&&&JJ &&&&&&&I0@ ? @ @%%0A % @H @m @d @O  @d @OJ 0B &0C % @ @ @c @B  @c @BJ0D &0E% @H @ @J @?  @J @?J0F &%0G&&&&&&JJ&&&&&&&0H0I&% NSCalibratedWhiteColorSpace ?0J0K& % Text Color&&&&&&JJ &&&&&&&I0L ? @ @%%0M % @H @e @d @L  @d @LJ0N &0O % @ @ @d` @B  @d` @BJ0P &0Q1NSMatrix% @= @ @Y @9  @Y @9J0R &%0S&&&&&&JJ&&&&&&&I% @9 @9 ? ?0T ?* ?* ?* ?* ?T0U& % NSButtonCell0V0W&%Button&&&&&&JJ&&&&&&&I&&& &&%%0X &0Y0Z0[& % noBorder_nib&&&&&&JJ&&&&&&&I&&& &&0\0]0^&%line_nib&&&&&&JJ&&&&&&&I&&& &&0_0`0a& % bezel_nib&&&&&&JJ&&&&&&&I&&& &&0b0c0d& % ridge_nib&&&&&&JJ&&&&&&&I&&& &&b0e0f&%Border0g% A@f&&&&&&JJ&&&&&&& %%0h0i&%Title0j% A i&&&&&&JJ&&&&&&& %%0k&%Window0l&%TextView Attributes Inspectorl ? @" @Ç @|I&   @ @p0m &0n &0o1NSMutableDictionary1 NSDictionary&"0p&% NSOwner0q&!%!GormNSTextViewAttributesInspector0r& % ActionCell(0)S0s& % ButtonCell(6)00t&%Button!0u& % Inspector0v&%Button320w& % ButtonCell(1)\0x&%Button2.0y&%View(3)0z& % ColorWell0{&%Button1*0|& % ButtonCell(5),0}&%Box 0~& % ButtonCell(9)<0& % Button(1):0& % ButtonCell(0)Y0&%View(2) 0&%Cell(1)G0& % ButtonCell(4)#0&%Box(1)0&%Box30& % ButtonCell(8)80& % Button(0)60& % ColorWell1E0&%Cell(0)0&%View(1) 0&%Box1A0&%Box(0)M0& % ButtonCell(3)b0& % ButtonCell(7)40&%View(0)O0&%MatrixQ0& % ButtonCell(2)_0&%View(4)C0 &>>01NSNibConnectoru0&% NSOwner01NSNibOutletConnectoru0&%window0}0z000z0&%backgroundColorWell00& % borderMatrix0000& % textColorWell01NSNibControlConnectorz0&%ok:000z0& % nextKeyView00uz0&%initialFirstResponder0ty0{y0xy0vy0t0&%selectableButton0x0&%editableButton0{0&%multipleFontsButton0v0&%graphicsButton0t0&%ok:0x0{0v0t0& % nextKeyView0tx0x{0±{v0ñy0ıy0ű0Ʊ& % undoButton0DZ0ȱ&%findPanelButton0ɱ0ʱ&%ok:0˱0̱0ͱw0α0ϱ0бr0ѱ0ұ0ӱ0Ա0ձ}0ֱz0ױy0رt0ٱ|{0ڱsx0۱v0ܱ0ݱ~0ޱ0߱0v0& % nextKeyView00z0&apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNumberFormatterAttributesInspector.h000066400000000000000000000030531475375552500326710ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormNumberFormatterAttributesInspector_h #define INCLUDED_GormNumberFormatterAttributesInspector_h #include @interface GormNumberFormatterAttributesInspector : IBInspector { IBOutlet id addThousandSeparatorSwitch; IBOutlet id commaPointSwitch; IBOutlet id formatForm; IBOutlet id formatTable; IBOutlet id negativeRedSwitch; IBOutlet id detachButton; IBOutlet id localizeSwitch; IBOutlet id positiveField; IBOutlet id negativeField; IBOutlet id zeroField; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormNumberFormatterAttributesInspector.m000066400000000000000000000210221475375552500326720ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNumberFormatterAttributesInspector.h" /* this macro makes sure that the string contains a value, even if @"" */ #define VSTR(str) ({id _str = (id)str; (_str) ? (id)_str : (id)(@"");}) extern NSArray *predefinedNumberFormats; @implementation GormNumberFormatterAttributesInspector - (id) init { if ([super init] != nil) { if ([NSBundle loadNibNamed: @"GormNSNumberFormatterInspector" owner: self] == NO) { NSLog(@"Could not gorm GormNumberFormatterInspector"); return nil; } else { NSNumberFormatter *fmtr = [[NSNumberFormatter alloc] init]; [fmtr setFormat: [NSNumberFormatter defaultFormat]]; [[positiveField cell] setFormatter: fmtr]; [[zeroField cell] setFormatter: fmtr]; [[negativeField cell] setFormatter: fmtr]; } } return self; } - (void) updateAppearanceFieldsWithFormat: (NSString *)format; { [[[positiveField cell] formatter] setFormat: format]; [[positiveField cell] setObjectValue: [NSDecimalNumber decimalNumberWithString: @"123456.789"]]; [[[zeroField cell] formatter] setFormat: format]; [[zeroField cell] setObjectValue: [NSDecimalNumber decimalNumberWithString: @"0.000"]]; [[[negativeField cell] formatter] setFormat: format]; [[negativeField cell] setObjectValue: [NSDecimalNumber decimalNumberWithString: @"-123456.789"]]; } - (void) ok: (id)sender { NSString *positiveFmt, *negativeFmt, *zeroFmt, *fullFmt; NSString *minValue, *maxValue; NSCell *cell = [object cell]; NSNumberFormatter *fmtr = [cell formatter]; // Mark as changed... [[(id)[NSApp delegate] activeDocument] touch]; if (sender == detachButton) { [cell setFormatter: nil]; [[(id)[NSApp delegate] activeDocument] setSelectionFromEditor: nil]; } else { if (sender == formatTable) { int row; if ((row = [sender selectedRow]) != -1) { positiveFmt = [NSNumberFormatter positiveFormatAtIndex:row]; zeroFmt = [NSNumberFormatter zeroFormatAtIndex:row]; negativeFmt = [NSNumberFormatter negativeFormatAtIndex:row]; fullFmt = [NSNumberFormatter formatAtIndex:row]; // Update Appearance samples [self updateAppearanceFieldsWithFormat: fullFmt]; // Update editable format fields [[formatForm cellAtIndex:0] setStringValue: VSTR(positiveFmt)]; [[formatForm cellAtIndex:1] setStringValue: VSTR(zeroFmt)]; [[formatForm cellAtIndex:2] setStringValue: VSTR(negativeFmt)]; [fmtr setFormat:fullFmt]; } } else if (sender == formatForm) { NSUInteger idx; positiveFmt = [[sender cellAtIndex: 0] stringValue]; zeroFmt = [[sender cellAtIndex: 1] stringValue]; negativeFmt = [[sender cellAtIndex: 2] stringValue]; minValue = [[sender cellAtIndex: 3] stringValue]; maxValue = [[sender cellAtIndex: 4] stringValue]; NSDebugLog(@"min,max: %@, %@", minValue, maxValue); fullFmt = [NSString stringWithFormat:@"%@;%@;%@", positiveFmt, zeroFmt, negativeFmt]; // If the 3 formats correspond to a predefined set then highlight it in // number Format table view above if ( (idx = [NSNumberFormatter indexOfFormat: fullFmt]) == NSNotFound) { [formatTable deselectAll:self]; } else { [formatTable selectRow:idx byExtendingSelection:NO]; NSDebugLog(@"format found at index: %d", (int)idx); } // Update Appearance samples [self updateAppearanceFieldsWithFormat: fullFmt]; [fmtr setFormat: fullFmt]; if (minValue != nil) { [fmtr setMinimum: [NSDecimalNumber decimalNumberWithString: minValue]]; } if (maxValue != nil) { [fmtr setMaximum: [NSDecimalNumber decimalNumberWithString: maxValue]]; } } else if (sender == localizeSwitch) { [fmtr setLocalizesFormat:([sender state] == NSOnState)]; } else if (sender == negativeRedSwitch) { NSMutableDictionary *newAttrs = [NSMutableDictionary dictionary]; [newAttrs setObject:[NSColor redColor] forKey:@"NSColor"]; [fmtr setTextAttributesForNegativeValues:newAttrs]; } else if (sender == addThousandSeparatorSwitch) { [fmtr setHasThousandSeparators:([sender state] == NSOnState)]; } else if (sender == commaPointSwitch) { [fmtr setDecimalSeparator: ([sender state] == NSOnState) ? @"," : @"."]; } } } - (void) revert: (id)sender { NSUInteger idx; NSNumberFormatter *fmtr = [[object cell] formatter]; // Format form NSDebugLog(@"format from object: %@", [fmtr format]); [[formatForm cellAtIndex:0] setStringValue: [fmtr positiveFormat]]; [[formatForm cellAtIndex:1] setStringValue: [fmtr zeroFormat]]; [[formatForm cellAtIndex:2] setStringValue: [fmtr negativeFormat]]; [[formatForm cellAtIndex:3] setObjectValue: [fmtr minimum]]; [[formatForm cellAtIndex:4] setObjectValue: [fmtr maximum]]; // If the string typed is a predefined one then highligh it in // Number Format table view above if ( (idx = [NSNumberFormatter indexOfFormat: [fmtr format]]) == NSNotFound) { [formatTable deselectAll:self]; } else { [formatTable selectRow:idx byExtendingSelection:NO]; } // Option switches [localizeSwitch setState: ([fmtr localizesFormat] == YES) ? NSOnState : NSOffState]; [addThousandSeparatorSwitch setState: ([fmtr hasThousandSeparators] == YES) ? NSOnState : NSOffState]; if ([[fmtr decimalSeparator] isEqualToString: @","] ) [commaPointSwitch setState: NSOnState]; else [commaPointSwitch setState: NSOffState]; if ( [[[fmtr textAttributesForNegativeValues] objectForKey: @"NSColor"] isEqual: [NSColor redColor] ] ) [negativeRedSwitch setState: NSOnState]; else [negativeRedSwitch setState: NSOffState]; } /* Positive/Negative Format table data source */ - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [NSNumberFormatter formatCount]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { if ( [[aTableColumn identifier] isEqualToString: @"positive"] ) { return [NSNumberFormatter positiveValueAtIndex:rowIndex]; } else if ( [[aTableColumn identifier] isEqualToString: @"negative"] ) { return [NSNumberFormatter negativeValueAtIndex:rowIndex]; } else { // Huuh?? Only 2 columns NSLog(@"Number table view doesn't known column identifier: %@", [aTableColumn identifier]); } return nil; } /* Positive/Negative Format table Delegate */ - (void)tableViewSelectionDidChange:(NSNotification *)aNotification { // When a row is selected update the rest of the inspector accordingly [self ok: formatTable]; } - (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn*)aTableColumn row:(NSInteger)rowIndex { NSNumberFormatter *fmtr; // Adjust the cell formatter before it is displayed fmtr = [[NSNumberFormatter alloc] init]; [fmtr setFormat: [NSNumberFormatter formatAtIndex:rowIndex]]; [aCell setFormatter: fmtr]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormTextViewAttributesInspector.h000066400000000000000000000032161475375552500313350ustar00rootroot00000000000000/* GormTextViewAttributesInspector.h Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Spilt inspector in separate classes. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #ifndef INCLUDED_GormTextViewAttributesInspector_h #define INCLUDED_GormTextViewAttributesInspector_h #include @class NSColorWell; @class NSMatrix; @interface GormTextViewAttributesInspector : IBInspector { NSColorWell *backgroundColorWell; NSColorWell *textColorWell; NSMatrix *borderMatrix; /* options */ NSButton *selectableButton; NSButton *editableButton; NSButton *multipleFontsButton; NSButton *graphicsButton; NSButton *undoButton; NSButton *findPanelButton; } @end #endif /* INCLUDED_GormTextViewAttributesInspector_h */ apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormTextViewAttributesInspector.m000066400000000000000000000073001475375552500313400ustar00rootroot00000000000000/* GormTextViewAttributesInspector.m Copyright (C) 2001-2005 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* July 2005 : Split inspector classes into separate files. Always use ok: revert: methods Clean up Author : Fabien Vallon */ #include // #warning GNUstep bug ? #include #include "GormTextViewAttributesInspector.h" @implementation GormTextViewAttributesInspector - (id) init { if ([super init] == nil) return nil; if ([NSBundle loadNibNamed: @"GormNSTextViewInspector" owner: self] == NO) { NSLog(@"Could not gorm GormTextViewInspector"); return nil; } return self; } - (void) setObject: (id)anObject { [super setObject: anObject]; [self revert:anObject]; } /* Commit changes that the user makes in the Attributes Inspector */ - (void) ok: (id) sender { BOOL isScrollView; id scrollView; scrollView = [[object superview] superview]; isScrollView = [scrollView isKindOfClass: [NSScrollView class]]; if (sender == backgroundColorWell) { [object setBackgroundColor: [sender color]]; } else if (sender == textColorWell) { [object setTextColor: [sender color]]; } else if ( (sender == borderMatrix) && isScrollView) { [scrollView setBorderType: [[sender selectedCell] tag]]; [scrollView setNeedsDisplay: YES]; } /* options */ else if ( sender == selectableButton ) { [object setSelectable: [selectableButton state]]; } else if ( sender == editableButton ) { [object setEditable: [editableButton state]]; } else if ( sender == multipleFontsButton ) { [object setRichText:[multipleFontsButton state]]; } else if ( sender == graphicsButton ) { [object setImportsGraphics:[graphicsButton state]]; } else if ( sender == undoButton ) { [object setAllowsUndo:[undoButton state]]; } else if ( sender == findPanelButton ) { [object setUsesFindPanel:[findPanelButton state]]; } [super ok:sender]; } /* Sync from object ( NSTextView ) changes to the inspector */ -(void) revert:(id) sender { BOOL isScrollView; id scrollView; if (object == nil) return; scrollView = [[object superview] superview]; isScrollView = [scrollView isKindOfClass: [NSScrollView class]]; [backgroundColorWell setColorWithoutAction: [object backgroundColor]]; [textColorWell setColorWithoutAction: [object textColor]]; if (isScrollView) [borderMatrix selectCellWithTag: [scrollView borderType]]; /* options*/ [selectableButton setState: [object isSelectable]]; [editableButton setState: [object isEditable]]; [multipleFontsButton setState: [object isRichText]]; [graphicsButton setState: [object importsGraphics]]; [undoButton setState: [object allowsUndo]]; [findPanelButton setState: [object usesFindPanel]]; [super revert:sender]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormTextViewEditor.h000066400000000000000000000024731475375552500265520ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormTextViewEditor_h #define INCLUDED_GormTextViewEditor_h #include #include #include #include @interface GormTextViewEditor : GormViewEditor { NSTextView *textView; } @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormTextViewEditor.m000066400000000000000000000101061475375552500265470ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include "GormTextViewEditor.h" @implementation GormTextViewEditor - (id) initWithObject: (id)anObject inDocument: (id)aDocument { if((self = [super initWithObject: anObject inDocument: aDocument]) != nil) { id sv = [anObject enclosingScrollView]; [self registerForDraggedTypes: [NSArray arrayWithObjects: IBViewPboardType, GormLinkPboardType, IBFormatterPboardType, nil]]; // subscribe to frame changes of the superview... [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNotification:) name: NSViewFrameDidChangeNotification object: sv]; // make the view post frame changes... [[textView enclosingScrollView] setPostsFrameChangedNotifications: YES]; } return self; } - (void) dealloc { [[textView enclosingScrollView] setPostsFrameChangedNotifications: NO]; [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc]; } - (BOOL) activate { if ([super activate]) { if ([_editedObject isKindOfClass: [NSScrollView class]]) { textView = [(NSScrollView *)_editedObject documentView]; } else { textView = (NSTextView *)_editedObject; } return YES; } return NO; } - (void) deactivate { [super deactivate]; [[textView enclosingScrollView] setPostsFrameChangedNotifications: NO]; } - (NSDragOperation) draggingEntered: (id)sender { return [self draggingUpdated: sender]; } - (NSDragOperation) draggingUpdated: (id)sender { NSPasteboard *dragPb; NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { id destination = nil; NSView *hitView = [[textView enclosingScrollView] hitTest: [[[textView enclosingScrollView] superview] convertPoint: [sender draggingLocation] fromView: nil]]; if ((hitView == textView) || (hitView == [textView superview])) destination = textView; if (destination == nil) destination = _editedObject; [[NSApp delegate] displayConnectionBetween: [[NSApp delegate] connectSource] and: destination]; return NSDragOperationLink; } else { return NSDragOperationNone; } } - (BOOL) performDragOperation: (id)sender { return ([self draggingUpdated: sender] == NSDragOperationLink); } - (void) handleNotification: (id) notification { id view = [notification object]; NSRect frame = [view frame]; NSSize size; if([view hasVerticalScroller]) { NSSize s = [[view verticalScroller] frame].size; frame.size.width -= (s.width + 5); } if([view hasHorizontalScroller]) { NSSize s = [[view horizontalScroller] frame].size; frame.size.height -= (s.height + 5); } size = frame.size; [textView setMinSize: size]; [textView setFrame: frame]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormTextViewSizeInspector.h000066400000000000000000000023741475375552500301250ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormTextViewSizeInspector_h #define INCLUDED_GormTextViewSizeInspector_h #include #include @interface GormTextViewSizeInspector : GormViewSizeInspector @end #endif apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/GormTextViewSizeInspector.m000066400000000000000000000023471475375552500301320ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include "GormTextViewSizeInspector.h" @implementation GormTextViewSizeInspector - (void) setObject: (id)anObject { id scrollView; scrollView = [anObject enclosingScrollView]; [super setObject: scrollView]; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/inspectors.m000066400000000000000000000035531475375552500251750ustar00rootroot00000000000000/* inspectors - Various inspectors for data elements Copyright (C) 2001 Free Software Foundation, Inc. Author: Laurent Julliard Date: Nov 2001 Author: Gregory Casamento Date: Nov 2003,2004,2005 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include @implementation NSTextView (IBObjectAdditions) - (NSString*) sizeInspectorClassName { return @"GormTextViewSizeInspector"; } - (NSString*) inspectorClassName { return @"GormTextViewAttributesInspector"; } - (NSString*) editorClassName { return @"GormTextViewEditor"; } @end @implementation NSDateFormatter (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormDateFormatterAttributesInspector"; } @end @implementation NSNumberFormatter (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormNumberFormatterAttributesInspector"; } @end /* IBObjectAdditions category */ @implementation NSImageView (IBObjectAdditions) - (NSString*) inspectorClassName { return @"GormImageViewAttributesInspector"; } @end apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/4Data/palette.table000066400000000000000000000001671475375552500252730ustar00rootroot00000000000000{ NOTE = "Automatically generated, do not edit!"; NibFile = ""; Class = "DataPalette"; Icon = "DataPalette"; } apps-gorm-gorm-1_5_0/Applications/Gorm/Palettes/GNUmakefile000066400000000000000000000023621475375552500237400ustar00rootroot00000000000000# GNUmakefile: main makefile for Gorm palettes # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. # PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make # # Each palette is a subproject # SUBPROJECTS = \ 0Menus \ 1Windows \ 2Controls \ 3Containers \ 4Data -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Applications/Gorm/README000066400000000000000000000020231475375552500207570ustar00rootroot000000000000001 Introduction ============== Read the NEWS file for the latest user visible changes. Read the INSTALL file for installation instructions. Gorm is an acronym for Graphic Object Relationship modeler (or perhaps GNUstep Object Relationship Modeler). Gorm is a clone of the Cocoa (OpenStep/NeXTSTEP) 'Interface Builder' application for GNUstep. Gorm is part of the GNUstep project, and is copyrighted by the Free Software Foundation. Gorm is released under the GPL - see the file 'COPYING' for details. Documentation for Gorm is located in the Documentation directory. It's also available on the wiki at http://wiki.gnustep.org/index.php/Gorm_Manual. 2 Status ======== Gorm is usable and stable. Please report bugs to bug-gnustep@gnu.org Known problems (things to do) - 1. Support for IB 3.0 functionality. 2. More palettes. 3 Acknowledgements ================== 1. Icons - Mostly by Andrew Lindsay. Gorm application icon by Jesse Ross. 2. Code - GormViewKnobs.m adapted from code by Gerrit van Dyk. apps-gorm-gorm-1_5_0/Applications/Gorm/Resources/000077500000000000000000000000001475375552500220545ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Applications/Gorm/Resources/Defaults.plist000066400000000000000000000013231475375552500246770ustar00rootroot00000000000000{ AllowUserBundles = YES; ArchiveType = Typed; BuiltinPalettes = ( 0Menus.palette, 1Windows.palette, 2Controls.palette, 3Containers.palette, 4Data.palette ); BuiltinPlugins = ( Gorm.plugin, Nib.plugin, GModel.plugin ); CellSizeWidth = 72; ClassViewType = Browser; GuideColor = { alpha = 1; blue = 0; green = 0; red = 1; }; GuideSpacing = 10; HeaderList = ( ); PreloadHeaders = NO; ShowInspectors = YES; ShowPalettes = YES; UserPalettes = ( ); "NSWindow Frame Inspector" = "663 15 274 452 0 0 960 768 "; "NSWindow Frame Palettes" = "663 470 274 298 0 0 960 768 "; "NSWindow Frame Preferences" = "336 200 352 368 0 0 960 768 "; }apps-gorm-gorm-1_5_0/Applications/Gorm/Resources/language-codes.plist000066400000000000000000000053541475375552500260160ustar00rootroot00000000000000{ alpha2 = English; aa = Afar; ab = Abkhazian; ae = Avestan; af = Afrikaans; ak = Akan; am = Amharic; an = Aragonese; ar = Arabic; as = Assamese; av = Avaric; ay = Aymara; az = Azerbaijani; ba = Bashkir; be = Belarusian; bg = Bulgarian; bh = Bihari; bi = Bislama; bm = Bambara; bn = Bengali; bo = Tibetan; br = Breton; bs = Bosnian; ca = Catalan; ce = Chechen; ch = Chamorro; co = Corsican; cr = Cree; cs = Czech; cu = ChurchSlavic; cv = Chuvash; cy = Welsh; da = Danish; de = German; dv = Divehi; dz = Dzongkha; ee = Ewe; el = Greek; en = English; eo = Esperanto; es = Spanish; et = Estonian; eu = Basque; fa = Persian; ff = Fulah; fi = Finnish; fj = Fijian; fo = Faroese; fr = French; fy = WesternFrisian; ga = Irish; gd = Gaelic; gl = Galician; gn = Guarani; gu = Gujarati; gv = Manx; ha = Hausa; he = Hebrew; hi = Hindi; ho = HiriMotu; hr = Croatian; ht = Haitian; hu = Hungarian; hy = Armenian; hz = Herero; ia = Interlingua; id = Indonesian; ie = Interlingue; ig = Igbo; ii = Nuosu; ik = Inupiaq; io = Ido; is = Icelandic; it = Italian; iu = Inuktitut; ja = Japanese; jv = Javanese; ka = Georgian; kg = Kongo; ki = Kikuyu; kj = Kuanyama; kk = Kazakh; kl = Kalaallisut; km = CentralKhmer; kn = Kannada; ko = Korean; kr = Kanuri; ks = Kashmiri; ku = Kurdish; kv = Komi; kw = Cornish; ky = Kirghiz; la = Latin; lb = Luxembourgish; lg = Ganda; li = Limburgan; ln = Lingala; lo = Lao; lt = Lithuanian; lu = "Luba-Katanga"; lv = Latvian; mg = Malagasy; mh = Marshallese; mi = Maori; mk = Macedonian; ml = Malayalam; mn = Mongolian; mr = Marathi; ms = Malay; mt = Maltese; my = Burmese; na = Nauru; nb = Bokmal; nd = NdebeleNorth; ne = Nepali; ng = Ndonga; nl = Dutch; nn = Norsk; no = Norwegian; nr = Ndebele; nv = Navajo; ny = Chichewa; oc = Occitan; oj = Ojibwa; om = Oromo; or = Oriya; os = Ossetian; pa = Panjabi; Punjabi = Punjabi; pi = Pali; pl = Polish; ps = Pushto; pt = Portuguese; qu = Quechua; rm = Romansh; rn = Rundi; ro = Romanian; ru = Russian; rw = Kinyarwanda; sa = Sanskrit; sc = Sardinian; sd = Sindhi; se = NorthernSami; sg = Sango; si = Sinhala; sk = Slovak; sl = Slovenian; sm = Samoan; sn = Shona; so = Somali; sq = Albanian; sr = Serbian; ss = Swati; st = Sotho; su = Sundanese; sv = Swedish; sw = Swahili; ta = Tamil; te = Telugu; tg = Tajik; th = Thai; ti = Tigrinya; tk = Turkmen; tl = Tagalog; tn = Tswana; to = Tonga; tr = Turkish; ts = Tsonga; tt = Tatar; tw = Twi; ty = Tahitian; ug = Uighur; uk = Ukrainian; ur = Urdu; uz = Uzbek; ve = Venda; vi = Vietnamese; vo = Volapuk; wa = Walloon; wo = Wolof; xh = Xhosa; yi = Yiddish; yo = Yoruba; za = Zhuang; zh = Chinese; zu = Zulu; }apps-gorm-gorm-1_5_0/Applications/Gorm/TODO000066400000000000000000000025371475375552500206010ustar00rootroot00000000000000TO DO: This is a DO list based on feature requests that are being made by users of Gorm. Currently a number of requests are on the table which seem intersting: * Create an xml output format for Gorm files so that they can be used on both MOSX and on GNUstep. This will be done w/ an extension library. (Working on this) * Add a way for the user to edit the spacing used by the guidelines. Also make it so that we can save the settings and retrieve them from external files so that users can distribute thier own preferred spacing for different frameworks. (Done, added a way to do this. Sets a preference with the value.) * Add an autosave feature to Gorm which will save the document at regular intervals. * We should able to edit Window name directly * Add Feature to allow to create its own Palettes (Template) * Add Feature for creating more inteligent [mh] file (for ex. delegate/dataSource method if needs ...) Usability features: 1) Add outlet/action editing feature to advance the cursor to the next outlet/action automatically after the user finishes editing the current one. 2) image sharing between project and gorm/nib files so that images from the proj ect can be loaded into Gorm's interfaces. 3) Add code to keep scrollview setHasVerticalScroller/HasHorizontalScroller in sync with Horiz/Vert resizable in textView object.apps-gorm-gorm-1_5_0/Applications/Gorm/main.m000066400000000000000000000017741475375552500212150ustar00rootroot00000000000000/* main.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #include int main(int argc, const char *argv[]) { return NSApplicationMain(argc, argv); } apps-gorm-gorm-1_5_0/Applications/README.md000066400000000000000000000010071475375552500204530ustar00rootroot00000000000000# Applications directory This directory holds the Gorm application and any other apps which might be written using the framework Gorm provides. The future plans for this directory are to also contain a Plugins directory to facilitate editing Gorm files and other model files in YCode (an upcoming GNUstep IDE) as the plugins would conform to a protocol usable by YCode. An advantage of this approach is that there would be no direct dependencies between YCode and Gorm, but YCode could still utilize Gorm's features. apps-gorm-gorm-1_5_0/CODEOWNERS000066400000000000000000000003441475375552500161440ustar00rootroot00000000000000# These owners will be the default owners for everything in # the repo. Unless a later match takes precedence, # @global-owner1 and @global-owner2 will be requested for # review when someone opens a pull request. * @gcasa apps-gorm-gorm-1_5_0/COPYING000066400000000000000000001045141475375552500156100ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . apps-gorm-gorm-1_5_0/ChangeLog000066400000000000000000015526221475375552500163370ustar00rootroot000000000000002025-02-14 Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormCore/GormFilePrefsManager.m * GormInfo.plist * NEWS * Version: Release 1.5.0 2024-12-29 Gregory John Casamento * GormCore/English.lproj/GormObjectOutlineView.gorm/data.classes * GormCore/GNUmakefile * GormCore/GormDocument.h * GormCore/GormDocument.m * GormCore/GormGenericEditor.h * GormCore/GormObjectEditor.h * GormCore/GormObjectEditor.m * GormCore/GormObjectMainView.h * GormCore/GormObjectMainView.m * GormCore/GormObjectOutlineView.h * GormCore/GormObjectOutlineView.m * GormCore/GormObjectViewController.h * GormCore/GormObjectViewController.m: Add support for outline view of objects. 2024-12-25 Gregory John Casamento * GormObjCHeaderParser/OCClass.m: Improve parsing to allow getting information from .m files/categories. 2023-01-15 Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormCore/GormFilePrefsManager.m * GormInfo.plist * NEWS * Version: Release 1.3.1 2022-11-10 Gregory John Casamento * GormCore/GormDocument.h: Add declaration for new method and improve documentation. * GormCore/GormDocument.m: Add new method openEditorForObject: withParentObject: add logic to exclude NSCell sublcasses from appearing in the toplevel editor. NSCells are a special class since they are not views, so they don't need the editor to highlight them in the way a subview does. 2022-03-29 Gregory John Casamento * Plugins/Xib/GormXibWrapperLoader.m: Use new version of custom class dictionary. 2022-03-26 Gregory John Casamento * GormCore/GormClassEditor.m: Add coercion to (id) to silence warning. * GormCore/GormDocument.m: Add editor when editing a class with a cell. This will allow Gorm to bring up an inspector. 2021-10-19 Gregory John Casamento * GormCore/GormNSSplitViewInspector.m: Correct crash happening in GormNSSplitViewInspector. 2021-07-22 Gregory John Casamento * GormCore/GormDocument.m: -[GormDocument awakeWithContext:] establish connection properly and catch the case where an object might be connected to terminate and redirect it to the deferredEndTesting: method. 2021-05-15 Gregory John Casamento * English.lproj/Gorm.rtfd/TXT.rtf: Add help file * GNUmakefile: Copy help file. * GormCore/GormClassEditor.m * GormCore/GormClassManager.m * GormCore/GormConnectionInspector.m: Code cleanup. * GormCore/GormDocument.h: Declaration of setFontMenu:/fontMenu * GormCore/GormDocument.m: Add setFontMenu:/fontMenu methods. Add outlet connector so that font menu us connected to the font manager when the model is loaded. * GormInfo.plist: Update version * Palettes/0Menus/MenusPalette.m: Use auto variable to hold the NSFontManager singleton. 2021-05-09 Gregory John Casamento * GormCore/GormClassManager.m: Code cleanup * GormCore/GormDocument.m: Code cleanup * GormCore/GormPrivate.m: Code cleanup * GormCore/GormWrapperLoader.m: Code cleanup. * GormLib/IBDocuments.h: Add some GS specific methods to the protocol. * Gorm.m: Remove unneeded ivar. * Plugins/Nib/GormNibWrapperLoader.m: Code cleanup. * Plugins/Xib/GormXibWrapperLoader.m: Add code to handle connections. * Resources/ClassInformation.plist: Add missing classes to this plist. 2021-05-09 Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormCore/GormFilePrefsManager.m * GormInfo.plist * NEWS * Version: Release 1.2.28 2021-04-22 Gregory John Casamento * GormCore/GormScrollViewEditor.m * GormCore/GormViewWithContentViewEditor.m * Palettes/2Controls/GormMatrixAttributesInspector.m: Fixes for issue #11 in Gorm. NSMatrix should now be selectable after the first click. Previously it was selecting the button after the first selection. 2021-03-27 Gregory John Casamento * English.lproj/Gorm.gorm/data.classes: Add action on class. * GormCore/GormGenericEditor.h: Add declaration * GormCore/GormViewWithContentViewEditor.h: * GormCore/GormViewWithContentViewEditor.m: Add implementation of groupSelectionInMatrix method. * Gorm.m: Add groupSelectionInMatrix: IBAction. 2020-04-17 14:45-EDT Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormInfo.plist * NEWS * Version: 1.2.26 2020-04-14 Riccardo Mottola * Palettes/2Controls/GormProgressIndicatorAttributesInspector.m Cast to NSProgressIndicator so correct isVertical method is choosen by compiler. Add check before casting. 2020-03-29 Fred Kiefer * GormCore/GormDocument.m: Remove NSNibConnector duplicating code in gui. Use [-attachObjects:toParent:] and [-detachObjects:] more often. 2020-01-10 Sergii Stoian * Palettes/2Controls/ControlsPalette.gorm, * Palettes/2Controls/GormNSFormInspector.gorm: update stepper size. * Palettes/2Controls/GormMatrixAttributesInspector.h, * Palettes/2Controls/GormMatrixAttributesInspector.m (_displayObject:resize): move object refresh code here. Use it where it's appropriate. * Palettes/2Controls/GormNSMatrixInspector.gorm: separate dimensions form into 2 for rows and columns; add steppers again. * Palettes/2Controls/GormButtonEditor.m (gormTitleRectForFrame:inView:): initialize `titleRect` to supress compiler warning. * Palettes/2Controls/GormMatrixAttributesInspector.m: ehnanced redrawing of object after dimension changes. * Palettes/2Controls/GormNSBoxInspector.gorm: ticks to offset sliders were added; "Stop on ticks only" set. 2020-01-09 Sergii Stoian * Palettes/2Controls/GormMatrixAttributesInspector.m: use ok: on editing finish of textfields objects. * Palettes/2Controls/GormMatrixAttributesInspector.m:(ok:): update window content view on object's dimensions changes. * Palettes/2Controls/GormButtonAttributesInspector.m (ok:): removed unused code. * Palettes/2Controls/GormNSButtonInspector.gorm/objects.gorm: added missed "Disclosure Round" bezel type to popup button. * Palettes/2Controls/GormButtonAttributesInspector.m (buttonTypeForObject:): use NSMomentaryPushInButton for "Momentary Push" type. (rever:): use tag to select button type. 2020-01-08 Sergii Stoian * Palettes/2Controls/GormButtonAttributesInspector.m: fixed "Momentary Light" button type value. * Palettes/2Controls/GormMatrixAttributesInspector.m (ok:): preserve tag and title of cells on "Match Prototype" button click. * Palettes/3Containers/GormTableViewAttributesInspector.m: apply changes only after editing has end. 2020-01-06 Sergii Stoian * Gorm.m: Inspector's shortcuts now work across the application. 2020-01-05 Sergii Stoian * Palettes/3Containers/GormNSTableViewInspector.gorm: tiny fix of inspector position. * Palettes/4Data/GormNSDateFormatterInspector.gorm, * Palettes/4Data/GormNSNumberFormatterInspector.gorm: fixed size and positions of UI elements. * Palettes/2Controls/ControlsPalette.m (willInspectObject:): create "Prototype" mode only if selected object's prototype exists. * Palettes/2Controls/GormMatrixAttributesInspector.m (ok:): fixed "Match Prototype" action - make cells as copy of prototype, select first cell. * GormCore/GormInspectorsManager.m (setCurrentInspector:): get width from Inspector's minSize when new minSize is about to be set. * Palettes/2Controls/GormMatrixAttributesInspector.m (revert:): update object in prototype matrix. * Palettes/2Controls/GormMatrixAttributesInspector.m (ok:): implemented "Match Prototype" button action - recreates object's cells. * Palettes/2Controls/GormButtonAttributesInspector.m (ok:), * Palettes/2Controls/GormButtonAttributesInspector.m (revert:): adopt methods to be usable for objects with prototype. This inspector can be called in "Prototype" mode. * Palettes/2Controls/ControlsPalette.m: implement adding "Prototype" mode to Inspector's popup button for objects with prototype available (mainly NSMatrix). * Palettes/2Controls/GormNSMatrixInspector.gorm: reestablish connection to action for "Match Prototype" button. * Palettes/2Controls/GormNSButtonInspector.gorm: set enabled and not selected state "Bordered" button. 2020-01-04 Sergii Stoian * English.lproj/GormConnectionInspector.gorm: fixed window size to prevent inspector panel resizing while switching from the other standard-sized inspectors. * Palettes/4Data/GormNSComboBoxInspector.gorm: fixed sizes and positions of elements. * GormCore/GormInspectorsManager.m (setCurrentInspector:): increase height of inspector panel frame if inspector taller then previous; set minimum size accordingly. * Palettes/2Controls/GormNSMatrixInspector.gorm: made inspector content taller to look better and as a test case for change in GorInspectorManager. 2019-12-27 Sergii Stoian * GormCore/GormConnectionInspector.m (ok:): return on problem with making connection, don't mark document as edited; update "Outlets" browser after makeing changes to connections - updates "connected" image on selected outlet. * Palettes/2Controls/GormNSBoxInspector.gorm, * Palettes/2Controls/GormNSButtonInspector.gorm, * Palettes/2Controls/GormNSCellInspector.gorm, * Palettes/2Controls/GormNSColorWellInspector.gorm, * Palettes/2Controls/GormNSMatrixInspector.gorm, * Palettes/2Controls/GormNSPopUpButtonInspector.gorm, * Palettes/2Controls/GormNSProgressIndicatorInspector.gorm, * Palettes/2Controls/GormNSSliderInspector.gorm, * Palettes/2Controls/GormNSStepperInspector.gorm, * Palettes/2Controls/GormNSTextFieldInspector.gorm: sizing and positions fixes. 2019-12-27 Sergii Stoian * Palettes/2Controls/GormNSFormInspector.gorm: sizes and positions cleanup and fix. * Palettes/3Containers/GormNSBrowserInspector.gorm: fixed initial first responder. * Palettes/1Windows/GormNSWindowSizeInspector.gorm: fixed initial first responder. * Palettes/1Windows/GormDrawerAttributesInspector.gorm: fixed autosizing. * English.lproj/GormObjectInspector.gorm: fixed initial first responder setting. * English.lproj/GormScrollViewAttributesInspector.gorm: fixed default background color. * English.lproj/GormConnectionInspector.gorm: fixed initial first responder setting. * English.lproj/GormClassInspector.gorm, * English.lproj/GormClassPanel.gorm, * English.lproj/GormScrollViewAttributesInspector.gorm, * English.lproj/GormSetName.gorm, * English.lproj/GormSoundInspector.gorm, * Palettes/4Data/GormNSImageViewInspector.gorm, * Palettes/4Data/GormNSTextViewInspector.gorm: sizing and positioning fixes. * Palettes/3Containers/GormNSTableColumnInspector.gorm: fixed textfields height. * GormCore/GormConnectionInspector.m: use custom cell class for "Outlets" browser to draw dimple image on connected outlets. * Palettes/3Containers/GormNSTableColumnSizeInspector.gorm: adjust sizing and position of elements. * Palettes/3Containers/GormTableColumnSizeInspector.m: apply changes only after editing has end. * Palettes/3Containers/inspectors.m: added missed method to return table column sizer class. 2019-12-26 Sergii Stoian * Palettes/3Containers/GormNSTableViewInspector.gorm: fxed sizing and positioning; rearrange inspector elements. * Palettes/3Containers/GormNSTableColumnInspector.gorm: fxed sizing and positioning; rearrange inspector elements. * Palettes/3Containers/GormNSBrowserInspector.gorm/objects.gorm: fixed vertical offset of option butttons. * Palettes/3Containers/GormBrowserAttributesInspector.m (ok:): reduce number of digits of fraction part to 2. * Palettes/3Containers/GormNSBrowserInspector.gorm: fixed sizing and postioning; remove delegate from textfields - attribute is set only after user finished editing (pressed Return or Tab key). * Palettes/1Windows: Window Attributes Inspecor: - Fixed size, postion and autosizing of elements. - "Autosave Name" form was moved into "Window Size Inspector". - "Minwindow Icon Name": removed clear button, form converted into texfield. Window Size Inspector: - "Size" form was splitted into 2 forms to place them horizontally. - "Size" group was renamed into "Frame". - "Autosave Name" form was added and converted into textfield. - Fixed size, postion and autosizing of elements. NOTE: "Autosave Name" field is not saved into model file - is not encoded? * Palettes/2Controls/GotmNSBoxInspector.gorm: minor fixes. * Palettes/2Controls/GormButtonInspector.gorm: recreate broken "Type" popup button. * Palettes/2Controls/GormButtonAttributesInspector.m (ok:): set "Key:" textfield value to after selecting popup button items. 2019-12-23 Sergii Stoian * Palettes/2Controls/GormNSBoxInspector.gorm: adjust size and positions of elements. * Menu Item Inspector: changed size and positions of UI elements; redesigned key equivalent selection - user can specify either character in text field or special(function) key from popup button; added check for length of key equivalent - only 1 character length allowed. * Palettes/2Controls: return code for NSPopUpButton adding programmatically into palette. 2019-12-23 Sergii Stoian * Palettes/2Controls/ControlsPalette.gorm: adjust some controls position slightly. * Palettes/0Menus/GormMenuAttributesInspector.gorm: fixed positioning and autosizing. * English.lproj/GormConnectionInspector.gorm: adjust splitview height after last change. * GormCore/GormInspectorsManager.m (setCurrentInspector:): do not resize inspector panel on inspector change. * Fixed guideline on/off menu item handling after rearrangement. * GormCore/GormPalettesManager.m (resizeWithOldSuperviewSize:): new method. Fixes correct placement of palette view on panel resize. (init): disable auroresizing of dragView. * GormCore/GormPalettesManager.m (loadPalette): commented out code that leads to issues with scrolling (although, code supposed to fix issues with scrolling :(). * GormCore/GormPalettesManager.m (init): autohide scroller of selection ScrollView. * Palettes/3Containers/ContainersPalette.m: fixed typo. * Palette Panel: set window title from original window title of selected palette; window titles were added/fixed for palettes. * GormCore/GormPalettesManager.m (init): made dragView is not autoresizable to omit problems with palettes visibility. * Palettes/4Data/DataPalette.m (finishInstantiate): ScrollView was made not resizable; move controls in right column slightly to the right. * Palettes/2Controls/ControlsPalette.m (finishInstantiate) do not add popup button - it's already in model file of palette. * Controls Palette: minor fixes to controls position and size. * Menus Palette: adjust position of menu image centered in dragged view. * GormPalettesManager: palettes selection icons now display selection with white color of selected icon background; removed arrows from scroller; icons are replaced to make selection color visible. 2019-12-21 Sergii Stoian * Rearrangement of main menu items: - "Layout" renamed into "Format"; - "Font" submenu was added into "Format"; - "Group" and "Page Layout" were moved into "Format"; - shortcuts 'p' and 'i' were removed from "Palletes..." and "Inspector..." because it's standard shortcuts for "Italic" and "Print" menu actions; * ViewSizeInspector: fixed size, position and autosizing properties. * CustomClassInspector: fixed size, position and autosizing properties. * ConnectionInspector: removed horizontal scroller from "Outlets" browser; adjusted split view frame. * DummyInspector: change text to "Not Applicable" and font size to 18. * CustomClassInspector: autosizing fixes. * ImageInspector: use MSImageView from palette instead of CustomView; autosizing fixes. * ControlsPalette: rearrange controls. * PalettePanel: fixed size and autosize attributes (model file is not used yet). * ObjectInspector: fixed size, position, autosize * NSSplitViewInspector: fixed size, position, autosize; refuse first responder on matrix cells. 2019-07-26 Fred Kiefer * Add .gitignore. * GormCode/GormViewWithContentViewEditor.m: Correct return type of compare function. * Palettes/2Controls/GormFormAttributesInspector.m, * Palettes/2Controls/GormMatrixAttributesInspector.m: Add missing include. * GormCore/GormInspectorsManager.m: Disable menu update during bulk change. 2019-02-07 02:15-EDT Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormInfo.plist * NEWS * Version: 1.2.24 2019-01-25 Fred Kiefer * GormCore/GormDocument.m: Fix wrong string type in David Chisnall fix for the new libobjc. 2015-11-05 20:40-EST Gregory John Casamento * GormCore/GormWindowTemplate.m: in baseWindowClass return GormNSPanel if _windowClass is NSPanel. This should probably use GormPalettesManager substituteClasses at some point, but for now this is a workable solution. 2015-05-20 06:19-EDT Gregory John Casamento * ANNOUNCE * NEWS * Version: 1.2.22 2015-05-20 06:16-EDT Gregory John Casamento * ChangeLog * Documentation/news.texi * English.lproj/GormPrefGeneral.gorm * GormCore/GormFilePrefsManager.m * GormInfo.plist * GormPrefs/GormGeneralPref.m * Plugins/Gorm/GormGormWrapperLoader.m: Remove calls to repairFile: as some of the logic in it is outdated and could cause issues with perfectly good gorm files. Disabling pending further development. * Version 2015-05-11 Gregory John Casamento * Palettes/3Containers/GormTabViewAttributesInspector.m * Palettes/3Containers/GormBrowserAttributesInspector.m * GormCore/GormFilePrefsManager.m Use cast to larger type for string formatting to allow compilation on Solaris. 2015-03-02 00:04-EST Gregory John Casamento * GormObjCHeaderParser/NSScanner+OCHeaderParser.m * GormObjCHeaderParser/OCHeaderParser.m: Fix for crash seen after last commit. 2015-03-02 00:04-EST Gregory John Casamento * GormObjCHeaderParser/OCHeaderParser.m: Add _stripRedundantStatements method which eliminates excess empty statements from the code which could confuse the parser. 2015-02-22 21:21-EST Gregory John Casamento * English.lproj/GormPreferences.gorm: Removed from pulldown menu * English.lproj/GormPrefGuideline.gorm: Added colorwell and connections. * GormPrefs/GNUmakefile: Removed classes. * GormPrefs/GormColorsPref.h * GormPrefs/GormColorsPref.m: Removed. * GormPrefs/GormGuidelinePref.h * GormPrefs/GormGuidelinePref.m: Added color well... * GormPrefs/GormPrefController.m: Removed view from case statement 2014-10-28 03:08-EDT Gregory John Casamento * English.lproj/Gorm.gorm: Change connection to point to new selectAll: * GormCore/GormWrapperLoader.m: Fix for bug #42782 * Gorm.m: Add select all method. 2014-08-31 Fred Kiefer * GormCore/GormDocument.m: Rewrite fix for bug #39072 to stop leaking memory. 2014-07-21 Fred Kiefer * GormCore/GormImage.m: Fix the init issue for the second method as well. Small cleanup. 2014-05-31 10:58-EDT Gregory John Casamento * GormCore/GormDocumentController.h: add declaration of openDocumentForContentsOfURL: * GormCore/GormDocumentController.m: add implementation of openDocumentForContentsOfURL: * GormCore/GormDocument.m: Add implementation of revertContentsOfURL:.. Fix bug#28644 2014-05-30 Sebastian Reitenbach * Palettes/2Controls/GormColorWellAttributesInspector.h fix typo in header guard * Palettes/2Controls/GormFormAttributesInspector.m fix some format string warnings 2014-05-28 Riccardo Mottola * GormCore/GormClassInspector.m * GormCore/GormClassManager.m * GormCore/GormFilePrefsManager.m * GormCore/GormInspectorsManager.m Explicitely cast NSIntegers to avoid warning and problems. 2014-05-27 03:26-EDT Gregory John Casamento * GormCore/GormInspectorsManager.m * Palettes/2Controls/GormMatrixAttributesInspector.h * Palettes/2Controls/GormMatrixAttributesInspector.m * Palettes/2Controls/GormNSMatrixInspector.gorm: Fix for bug #28646. 2014-05-27 03:15-EDT Gregory John Casamento * GormCore/GormDocument.m: Fix bug #39072: add retain to prevent segmentation fault when renaming object in document view. 2014-05-26 19:25-EDT Gregory John Casamento * GormObjCHeaderParser/OCIVarDecl.m * GormObjCHeaderParser/OCIVar.m: Fix for bug#30837. 2014-05-26 18:32-EDT Gregory John Casamento * Palettes/2Controls/GormFormAttributesInspector.h * Palettes/2Controls/GormFormAttributesInspector.m * Palettes/2Controls/GormNSFormInspector.gorm: Accept patch on bug#38477 by Sergei Golovin. Allows user to modify the number of items in an NSForm using the inspector. 2014-01-19 Fred Kiefer * Palettes/2Controls/GormButtonAttributesInspector.h: Use NSButton instead of the non-existign NSSwitch. * GormCore/GormViewKnobs.m: Replace DPS calls. Only realloc rect lists if needed. * Plugins/Gorm/GormGormWrapperBuilder.m, * Palettes/2Controls/GormPopUpButtonAttributesInspector.m, * Palettes/2Controls/GormButtonEditor.m: Remove compiler warnings. 2014-01-19 Fred Kiefer * GormCore/GormResourceManager.m, * GormCore/GormResource.m, * GormCore/GormOutlineView.m, * GormCore/GormObjectEditor.m, * GormCore/GormClassManager.m: Remove compiler warnings. 2014-01-19 Fred Kiefer * GormInfo.plist: Don't claim to be able to write XIB files. 2013-12-31 Fred Kiefer * GormCore/GormResourceManager.m (-resourcePasteboardTypes): Add IBMenuPboardType to work around menus not being draggable. 2013-11-04 10:03-EST Gregory John Casamento * GormCore/GormBoxEditor.m * GormCore/GormClassEditor.m * GormCore/GormClassInspector.m * GormCore/GormClassManager.m * GormCore/GormControlEditor.m * GormCore/GormCustomView.m * GormCore/GormDocument.m * GormCore/GormDocumentWindow.m * GormCore/GormFilePrefsManager.h * GormCore/GormFilePrefsManager.m * GormCore/GormFunctions.h * GormCore/GormFunctions.m * GormCore/GormInspectorsManager.m * GormCore/GormInternalViewEditor.m * GormCore/GormMatrixEditor.h * GormCore/GormMatrixEditor.m * GormCore/GormNSPanel.h * GormCore/GormNSPanel.m * GormCore/GormNSWindow.h * GormCore/GormNSWindow.m * GormCore/GormObjectEditor.m * GormCore/GormObjectInspector.m * GormCore/GormOutlineView.m * GormCore/GormPrivate.h * GormCore/GormPrivate.m * GormCore/GormResourceEditor.m * GormCore/GormResourceManager.m * GormCore/GormSoundView.m * GormCore/GormSplitViewEditor.m * GormCore/GormStandaloneViewEditor.m * GormCore/GormViewEditor.m * GormCore/GormViewKnobs.m * GormCore/GormViewWithContentViewEditor.m * GormCore/GormViewWithSubviewsEditor.m: int -> NSInteger transition. 2013-10-26 Fred Kiefer * Plugins/Nib/GormNibWrapperBuilder.m (-initWithDocument:): Don't store nil values in maps. 2013-10-26 Riccardo Mottola * Plugins/Nib/GormNibWrapperBuilder.m Write warnings of respectively the proper nil object. 2013-10-19 Sebastian Reitenbach * GormCore/GormClassEditor.m * GormCore/GormFilePrefsManager.m * Palettes/3Containers/GormBrowserAttributesInspector.m * Palettes/3Containers/GormTabViewAttributesInspector.m fix format strings 2013-10-14 Eric Wasylishen * Palettes/2Controls/GormNSMatrixInspector.gorm: * Palettes/2Controls/GormNSSliderInspector.gorm: * Palettes/2Controls/GormNSBoxInspector.gorm: * Palettes/2Controls/GormNSTextFieldInspector.gorm: * Palettes/2Controls/GormNSPopUpButtonInspector.gorm: * Palettes/2Controls/GormNSButtonInspector.gorm: * Palettes/2Controls/ControlsPalette.gorm: * Palettes/2Controls/GormNSFormInspector.gorm: * Palettes/2Controls/GormNSCellInspector.gorm: * Palettes/0Menus/GormMenuAttributesInspector.gorm: * Palettes/3Containers/GormNSTableColumnSizeInspector.gorm: * Palettes/3Containers/GormTabViewInspector.gorm: * Palettes/3Containers/GormNSTableViewInspector.gorm: * Palettes/3Containers/GormNSBrowserInspector.gorm: * Palettes/1Windows/GormNSWindowSizeInspector.gorm: * Palettes/1Windows/GormNSWindowInspector.gorm: * Palettes/4Data/GormNSComboBoxInspector.gorm: * Palettes/4Data/GormNSImageViewInspector.gorm: * Palettes/4Data/GormNSTextViewInspector.gorm: Turn off "Draws Background" on NSMatrix and NSForms; there's no need to draw backgrounds and it may look bad with themes. 2013-07-03 Niels Grewe * InterfaceBuilder/InterfaceBuilder.h: Fix incorrect header inclusion guard. 2013-06-05 Riccardo Mottola * GormCore/GormSetNameController.h * GormCore/GormSetNameController.m Make runModal return NSInteger 2013-05-26: Sebastian Reitenbach * Palettes/3Containers/GormNSOutlineView.m * GormCore/GormMatrixEditor.m * GormCore/GormClassEditor.m some int -> NSInteger and float -> CGFloat transitions spotted by libobjc2 runtime in debug mode 2013-04-14 13:19-EDT Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormInfo.plist * NEWS * Version: 1.2.20 2013-03-06 01:44-EST Gregory John Casamento * GormCore/GormViewEditor.m: -handleNotification: touch document when text editing is completed. Fixes for bug #28643. 2013-03-06 00:05-EST Gregory John Casamento * GormCore/GormDocument.m: Touch document when aligning views in -alignSelectedObjects:. * Palettes/4Data/DataPalette.m: -depositViewResourceFromPasteboard:.. touch document when adding formatter. * Palettes/4Data/GormDateFormatterAttributesInspector.m * Palettes/4Data/GormNumberFormatterAttributesInspector.m: -ok: touch document when changing formatter. Fixes for bug #28643. 2013-03-05 20:23-EST Gregory John Casamento * GormCore/GormInternalViewEditor.m: touch document when font is changed in changeFont: 2013-02-25 15:07-EST Gregory John Casamento * GormCore/GormWindowEditor.m: Second try to fix the previous issue. 2013-02-25 04:14-EST Gregory John Casamento * GormCore/GormWindowEditor.m: Check the _firstResponder on the window to see if it is the same as the _initialFirstResponder. If it is, set it to nil as well in -unsetInitialFirstResponder:. 2013-02-23 Sebastian Reitenbach * GormCore/GormObjectEditor.h * GormCore/GormObjectEditor.m * GormCore/GormPalettesManager.m * GormCore/GormSplitViewEditor.m * GormCore/GormViewEditor.m * GormCore/GormViewWithSubviewsEditor.m * GormCore/GormWindowEditor.m * Palettes/0Menus/GormMenuEditor.m * Palettes/3Containers/GormTableViewEditor.m * Palettes/4Data/GormTextViewEditor.m * adapt to -gui changes for DnD 2013-02-16 20:10-EST Gregory John Casamento * GormCore/GormViewEditor.m: -editedObjectFrameDidChange: alter code so that allViews under the editor are collected and set to not post notifications. This change prevents a notification/setFrame cycle which was occurring when certain controls were added as subviews to NSTabView or NSBox. 2013-01-26 20:42-EST Gregory John Casamento * GormCore/GormDocument.m: Corrected issue with adding cells to object tree so that the can be properly addressed in connections. Change to -attachObject:toParent:. 2013-01-13 17:45-EST Gregory John Casamento * GormCore/GormViewSizeInspector.m: Correct bug#30886: Gorm should change the document to edited when changing resize attributes. 2013-01-13 16:57-EST Gregory John Casamento * Palettes/2Controls/GormColorWellAttributesInspector.m: NSColorWell inspector was showing inverted settings after the last change. Corrected this in -ok: and -revert: bug#32827 2012-12-12 12:33-EST Gregory John Casamento * GormCore/GormViewEditor.m: Prevent recursive frame/bounds notifications when resizing a view. * Plugins/Nib/GormNibWrapperLoader.m: Preliminary changes to support reading nibs as files instead of packages. 2012-07-25 22:29-EDT Gregory John Casamento * GormCore/GormDocument.m: Apply patch suggested by Sebastian. This appears to correct an issue seen by Sergey causing an out of memory error. 2012-07-12: Sebastian Reitenbach * GormLib/IBObjectAdditions.m * revert change from 2012-04-20, to fix Connection Inspector on at least a couple of *BSD 2012-06-19 00:44-EDT Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormCore/GormDocument.m * GormCore/GormFilePrefsManager.m * GormCore/GormObjectEditor.m * GormCore/GormViewEditor.m * GormCore/GormViewWindow.m * GormInfo.plist * NEWS * Version: 1.2.18 2012-05-01 23:25-EDT Gregory John Casamento * GormCore/GormDocument.m * GormCore/GormFilePrefsManager.m * GormCore/GormStandaloneViewEditor.m * GormCore/GormViewWithContentViewEditor.m * GormCore/GormWindowTemplate.m * Palettes/0Menus/GormMenuEditor.m * Palettes/0Menus/MenusPalette.m: Eliminate as many of the remaining warnings in the code as possible. 2012-04-20 18:53-EDT Gregory John Casamento * GormCore/GormResourceEditor.m: Correct compiler warnings. 2012-04-20 12:16-EDT Gregory John Casamento * Palettes/2Controls/GormNSPopUpButton.h * Palettes/2Controls/GormNSPopUpButton.m: Added new files for Gorm subclass of NSPopUpButton. 2012-04-20 12:03-EDT Gregory John Casamento * GormCore/GormCustomView.m * GormCore/GormFilesOwner.m * GormCore/GormFunctions.m * GormObjCHeaderParser/OCHeaderParser.m * Palettes/2Controls/ControlsPalette.m * Palettes/2Controls/GNUmakefile * Palettes/2Controls/GormPopUpButtonEditor.m * Palettes/3Containers/GormNSBrowser.m * Palettes/4Data/GormImageViewAttributesInspector.m: Correct compiler warnings found by clang. 2012-04-20 10:34-EDT Gregory John Casamento * GormLib/IBObjectAdditions.m * GormObjCHeaderParser/OCClass.m * GormObjCHeaderParser/OCHeaderParser.m * GormObjCHeaderParser/OCIVarDecl.m * GormObjCHeaderParser/OCIVar.m * GormObjCHeaderParser/OCMethod.m * GormObjCHeaderParser/ParserFunctions.m: Fix compiler warnings when building with clang. 2012-04-20 02:11-EDT Gregory John Casamento * GormCore/GormClassInspector.m * GormCore/GormClassManager.m * GormCore/GormDocument.m * GormCore/GormGenericEditor.m * GormCore/GormObjectInspector.m * GormCore/GormOutlineView.m * GormCore/GormPrivate.h * GormCore/GormPrivate.m * Palettes/0Menus/GormMenuEditor.m * Palettes/1Windows/GormDrawerAttributesInspector.m * Palettes/3Containers/GormTableColumnAttributesInspector.m * Palettes/3Containers/GormTableViewEditor.m * Palettes/4Data/DataPalette.m * Palettes/4Data/GormNumberFormatterAttributesInspector.m: Change int/unsigned int to NSInteger and NSUInteger to address 64-bit issues. Patch by Sebastian Reitenbach * Plugins/Gorm/GormGormWrapperLoader.m * Plugins/Nib/GormNibWrapperBuilder.m * Plugins/Nib/GormNibWrapperLoader.m * Plugins/Xib/GormXibWrapperLoader.m: Clean up warnings found by clang. 2012-04-05 14:38-EDT Gregory John Casamento * GormCore/GormMatrixEditor.m: Change modifier to Ctrl+Shift since these two keys are never remapped and Alt does not always exist on european and some US keyboards. This change should address bug#36096. 2012-03-17 German A. Arias * Gorm.m: Added method -applicationShouldTerminateAfterLastWindowClosed: to avoid terminate Gorm when the user close the last window but have documents minimized at taskbar. 2012-02-19 18:58-EST Gregory John Casamento * Version * GormInfo.plist * GormCore/GormFilePrefsManager.m: Update version information. 2012-02-15 17:59-EST Gregory John Casamento * GormCore/GormPrivate.m: Remove poseAs: override. Fix for compilation with ObjC2.0 compilers. * Palettes/3Containers/GormNSTableColumnInspector.gorm: Correction for tableView column identifiers. Delegate wasn't connected. 2012-02-06 02:02-EST Gregory John Casamento * Version: 1.2.16 * GormInfo.plist * Documentation/news.texi: Update version and documentation. 2012-02-06 02:02-EST Gregory John Casamento * GormCore/GormClassInspector.m * GormCore/GormCustomClassInspector.h * GormCore/GormFilesOwner.m * GormCore/GormOutlineView.m 2012-01-15 Eric Wasylishen * English.lproj/GormClassInspector.gorm: Re-save with the last change, so the outlet/action table data cells are editable. 2012-01-15 Eric Wasylishen * Palettes/3Containers/GormTableColumnAttributesInspector.m: Set editable state of the data cell to match editable state of the column. (NSTableView now refuses to edit non-editable data cells in editable columns.) 2012-01-15 Eric Wasylishen * Palettes/3Containers/GormTabViewAttributesInspector.m: Add retain/release so tab view item isn't deallocated while being moved from one position to another. 2011-11-28 Gregory John Casamento * Palettes/0Menus/GormMenuAttributesInspector.m * Palettes/0Menus/GormMenuInspectors.m: Correction for bug #33457, title change should now cause document to be modified. 2011-10-29 Gregory John Casamento * Plugins/Xib/GormXibWrapperLoader.m * Plugins/Nib/GormNibWrapperLoader.m: Include GormWindowTemplate from GormCore instead of locally. * Plugins/Nib/GormWindowTemplate.h * Plugins/Nib/GormWindowTemplate.m: Move to GormCore. * Plugins/Nib/GNUmakefile: Remove GormWindowTemplate from here. * GormCore/GNUmakefile: Add GormWindowTemplate.[hm] here. 2011-11-04 Eric Wasylishen * GormCore/GormFunctions.m: change float to CGFloat to match change in gui of -[NSColor getRed:green:blue:alpha:] method 2011-11-03 Fred Kiefer * Plugins/Xib/GormXibWrapperLoader.h, * Plugins/Xib/GormXibWrapperLoader.m: Get XIB files to be loaded. 2011-10-29 Gregory John Casamento * Palettes/3Containers/GormTableColumnAttributesInspector.h: Add sortMatrix and sortOrder to class for inspector. * Palettes/3Containers/GormTableColumnAttributesInspector.m: Add logic to ok:/revert: to handle sort descriptors. * Palettes/3Containers/GormTableColumnAttributesInspector.gorm: Add fields and popupbutton for sortKey, sortSelector and sortOrder removed previous changes and moved them over to these classes since they didn't belong in the NSTableView inspector. 2011-10-26 Gregory John Casamento * Palettes/3Containers/GormTableViewAttributesInspector.h: Add sortMatrix and sortOrder to class for inspector. * Palettes/3Containers/GormTableViewAttributesInspector.m: Add logic to ok:/revert: to handle sort descriptors. * Palettes/3Containers/GormNSTableViewInspector.gorm: Add form and popupbutton for sortMatrix and sortOrder 2011-10-25 Fred Kiefer * Palettes/0Menu/GormMenuEditor.m: Protect against the menu parent being a popup button cell. * Plugins/Xib/GormXibWrapperLoader.m: Move additional methods into gui and correct handling of file owner. 2011-09-15 Fred Kiefer * GormCore/GormPrivate.h ([NSDateFormatter +initialize], [NSNumberFormatter +initialize]): Remove these dangerours methods. * Palettes/4Data/DataPalette.m: Move +initialize method into DataPalette and retain the static objects. * Palettes/4Data/GormNumberFormatterAttributesInspector.m: Clean up compiler warnings. 2011-09-15 Fred Kiefer * Palettes/0Menu/GormMenuEditor.m: Change becomeMainWindow call to makeMainWindow. Patch by Matt Rice 2011-05-17 20:43-EDT Gregory John Casamento * GormCore/GormStandaloneViewEditor.h: * GormCore/GormStandaloneViewEditor.m: Improve support for standalone views. Correct issue with ungrouping. Correct issues with editing subviews in a standalone view. * GormCore/GormViewSizeInspector.m: Remove code which made standalone views uneditable in the size inspector. 2011-05-17 17:32-EDT Gregory John Casamento * GormLib/COPYING.LIB: Update license text for files. * GormLib/IBApplicationAdditions.h * GormLib/IBApplicationAdditions.m * GormLib/IBCellAdditions.h * GormLib/IBCellProtocol.h * GormLib/IBConnectors.h * GormLib/IBConnectors.m * GormLib/IBDefines.h * GormLib/IBDocuments.h * GormLib/IBDocuments.m * GormLib/IBEditors.h * GormLib/IBEditors.m * GormLib/IBInspector.h * GormLib/IBInspector.m * GormLib/IBInspectorManager.h * GormLib/IBInspectorManager.m * GormLib/IBInspectorMode.h * GormLib/IBInspectorMode.m * GormLib/IBObjectAdditions.h * GormLib/IBObjectAdditions.m * GormLib/IBObjectProtocol.h * GormLib/IBPalette.h * GormLib/IBPalette.m * GormLib/IBPlugin.h * GormLib/IBPlugin.m * GormLib/IBProjectFiles.h * GormLib/IBProjects.h * GormLib/IBResourceManager.h * GormLib/IBResourceManager.m * GormLib/IBSystem.h * GormLib/IBViewAdditions.h * GormLib/IBViewProtocol.h * GormLib/IBViewResourceDragging.h * GormLib/InterfaceBuilder.h 2011-05-17 17:32-EDT Gregory John Casamento * Plugins/Xib/GormXibWrapperLoader.m: Various fixes for XIB loading. * English.lproj/GormDocument.gorm: Fix button title. 2011-04-28 14:44-EDT Gregory John Casamento * Plugins/Xib/GormXibWrapperLoader.m: Correct compilation errors and warnings in Xib loading code. Correct loading code so that Xib file partially loads. 2011-04-26 20:24-EDT Gregory John Casamento * Palettes/2Controls/GormTextFieldAttributesInspector.m: Fix issue with refreshing display of enter/end editing when selecting fields. 2011-04-01 03:04-EDT Gregory John Casamento * Palettes/2Controls/GormNSTextFieldInspector.gorm: Add matrix for enter/end editing. * Palettes/2Controls/GormTextFieldAttributesInspector.h: Added ivar to point to new matrix * Palettes/2Controls/GormTextFieldAttributesInspector.m: Implement changes to handle "Send Action On Enter/End editing" per task #10799. Added code to ok: method to handle new matrix. 2011-04-01 03:04-EDT Gregory John Casamento * GormInfo.plist: Bump version. * Version: Bump version for SVN version. 2011-01-04 Wolfgang Lux * GormCore/GormMatrixEditor.m (-connectTargetAtPoint:, -draggingEntered:, -performDragOperation:): Make connections to the whole matrix possible again for matrixes with small intercell spacing. 2011-01-04 Wolfgang Lux * GormCore/GormDocument.m (-windowAndRect:forObject:): * GormCore/GormMatrixEditor.m (-draggingEntered:, -performDragOperation:): Allow making connections to individual cells of a matrix. * GormCore/GormMatrixEditor.m (-validateFrame:...): Attach added cells and detach removed cells when changing the number of rows or columns in a matrix. 2010-12-05 19:10-EST Gregory John Casamento * Palettes/4Data/GormImageViewAttributesInspector.m: Archive by name. 2010-12-05 18:12-EST Gregory John Casamento * Palettes/4Data/GormImageViewAttributesInspector.m: Remove check for name so that images which currently do not reference a known image can be saved by name. * Palettes/4Data/GormNSImageViewInspector.gorm: Add connection to ok: from the text field. 2010-11-01 Riccardo Mottola * Plugins/Xib/GormXibWrapperLoader.m Removed c99-ism 2010-09-39 Niels Grewe * Gorm.m: Replace calls to sel_eq() with sel_isEqual() for compatibility with the Objective-C 2 runtime API. Whitespace cleanup. Small tweak for Objective-C 2 runtime API compatibility. 2010-09-17 Wolfgang Lux * Palettes/4Data/GormTextViewAttributesInspector.h: * Palettes/4Data/GormTextViewAttributesInspector.m (-ok:, -revert:): * Palettes/4Data/GormNSTextViewInspector.gorm: Add switches to the text view inspector to control use of an undo manager and the find panel, respectively. 2010-09-17 Wolfgang Lux * Palettes/2Controls/GormButtonEditor.m (-mouseDown): Fix bug where a button's title was lost when starting editing by double clicking into the button. 2010-09-17 Wolfgang Lux * English.lproj/Gorm.gorm: Actually bring the "Recent Documents" menu to life. 2010-09-15 Eric Wasylishen * GormCore/GormClassManager.m: * GormCore/GormObjectInspector.m: Tweaks to use ObjectiveC2 runtime API functions. Now Gorm works on libobjc2. 2010-08-04 13:20-EDT Gregory John Casamento * English.lproj/Gorm.gorm: Add "Recent Documents" to menu. * GormCore/GormClassManager.m: Post notifications when files are created. * GormInfo.plist: Update my email address and list of authors to include Wolfgang and Adam. 2010-08-02 Wolfgang Lux * Palettes/0Menus/MenusPalette.m (-finishInstantiate): Initialize the find menu items with tags and actions suitable for using the standard NSTextView find panel. * Resources/ClassInformation.plist: Add -centerSelectionInVisibleArea: and -performFindPanelAction: to the list of first responder actions. 2010-07-10 01:22-EDT Gregory John Casamento * GormInfo.plist: Simplified copyright portion. Give a range of years instead of each year individually. * Gorm.m: Implement simple mechanism for recieving notifications to parse a given class file. 2010-06-24 Wolfgang Lux * Palettes/2Controls/GormPopUpButtonEditor.m (-attachPopUpWithFrame:inView:): Copy change from -gui which swaps the meaning of NSMinYEdge and NSMaxYEdge. 2010-06-24 Wolfgang Lux * Palettes/2Controls/GormPopUpButtonAttributesInspector.h * Palettes/2Controls/GormPopUpButtonAttributesInspector.m * Palettes/2Controls/GormNSPopUpButtonInspector.gorm: Add a form to allow editing the title of a pull down menu and a pop up button to allow setting its preferred attachment edge. 2010-06-19 Riccardo Mottola * GormLib/IBEditors.h Make IBEditors implement NSobject protocol to avoid warnings. 2010-06-02 17:45-EDT Gregory John Casamento * English.lproj/GormFontView.gorm: Fix problem with popup showing as Button. * GormCore/GormDocument.m: Add the NSMenu as a top level item only if it has filesOwner as it's parent. * GormCore/GormPalettesManager.m: remove the restriction for having just one instance of NSMenu in the document at the top level. 2010-05-30 03:07-EDT Gregory John Casamento * GormCore/GormDocument.m: In [GormDocument loadFileWrapperRepresentation:ofType:] call updateChangeCount: to clear changes so that the document doesn't show as modified on load. 2010-05-30 03:02-EDT Gregory John Casamento * GNUmakefile: Added Xib.plugin to resources. * GormInfo.plist: Added xib to the list of files Gorm can load * Gorm.m: Change to recieve notifications to add/delete classes. * Plugins/GNUmakefile: Added Xib plugin to subprojects list. * Plugins/Xib/GNUmakefile * Plugins/Xib/GNUmakefile.preamble * Plugins/Xib/GormXibCustomResource.h * Plugins/Xib/GormXibCustomResource.m * Plugins/Xib/GormXibPlugin.m * Plugins/Xib/GormXibWrapperLoader.h * Plugins/Xib/GormXibWrapperLoader.m: Initial code for XIB plugin. 2010-05-28 Wolfgang Lux * Palettes/0Menus/GormNSMenu.h: * Palettes/0Menus/GormNSMenu.m: * Palettes/0Menus/GormMenuAttributesInspector.m: Don't validate menu items in design menus. 2010-05-28 Wolfgang Lux * GormCore/GormDocument.h: * GormCore/GormDocument.m: * Palettes/0Menus/GormMenuAttributesInspector.m: * Palettes/0Menus/GormMenuAttributesInspector.gorm: Add support for a recent documents menu in gorm documents. * Palettes/0Menus/MenusPalette.m: Add a recent documents menu to the palette's file menu. Add undo and redo commands to the palette's edit menu. 2010-05-22 02:23-EDT Gregory John Casamento * English.lproj/GormPreferences.gorm: Correct issue with pop up showing up as "Button." 2010-05-20 04:04-EDT Gregory John Casamento * GormCore/GormFilePrefsManager.m: Update version * GormInfo.plist: Update version * Palettes/2Controls/GormPopUpButtonEditor.m: Override method to prevent changes to appearance during editing. * Version: Change to 1.2.13 for SVN version of Gorm. 2010-05-18 21:55-EDT Gregory John Casamento * Version: 1.2.12 2010-05-18 21:50-EDT Gregory John Casamento * ChangeLog * GormCore/GormNSWindow.m * GormCore/GormNSPanel.m: Update to use new designated initializer. 2010-05-18 20:50-EDT Gregory John Casamento * ANNOUNCE * Documentation/announce.texi * Documentation/news.texi * Documentation/readme.texi * NEWS * README: Updating for release. 2010-05-18 20:38-EDT Gregory John Casamento * GormCore/GormFilePrefsManager.m * GormInfo.plist: Update version number. 2010-05-18 20:31-EDT Gregory John Casamento * English.lproj/Gorm.gorm: Remove delegate connection, since it's manually set in the Gorm NSApplication subclass to self. * GormCore/GormDocumentController.[hm]: Added new method buildDocumentType: * GormCore/GormDocument.m: Added call to touch in setName: so that the document would be set as modified when the user alters the name of an object in the document. * GormCore/GormDocumentWindow.m: Remove methods preventing document window from assuming main/key status. * GormCore/GormPalettesManager.m: Remove methods allowing palette window to assume main/key status * Gorm.m: Added delegate methods to handle opening a document, if in a mode which requires a default document to be created. 2010-05-18 19:42-EDT Gregory John Casamento * Documentation/Gorm.texi * Documentation/news.texi * Documentation/readme.texi * GormCore/GormDocument.m: Correction for bug #28643. * Version 2010-05-05 20:55-EDT Gregory John Casamento * GormCore/GormClassManager.m: Correct bug#29795: Unable to change superclass of NSOwner... This bug was due to the owner class name being released and a subsequent set failing on NSOwner in the parseHeader: method. 2010-05-05 12:38-EDT Gregory John Casamento * GormCore/GormClassInspector.m: [GormClassInspector selectClass:] Refresh connections so that when the class is reparented only those connections which aren't present anymore get broken. 2010-05-04 19:25-EDT Gregory John Casamento * GormCore/GormClassInspector.m: Allow a class' name to be changed in the GormClassInspector without it disconnecting all connections for that class. 2010-05-02 01:11-EDT Gregory John Casamento Applied patch submitted by qmathe. * GormCore/GormClassManager.m: Remove include for GSCategories.h 2010-03-07 Richard Frith-Macdonald * Documentation/gorm.texi: Fixed opening file to say 'gopen -a Gorm.app' for bug #29085 2010-03-05 Richard Frith-Macdonald * GormCore/GormFunctions.m: update for latest base library. 2010-02-24 17:55-EST Gregory John Casamento * Palettes/2Controls/ControlsPalette.tiff * Palettes/4Data/DataPalette.tiff: Remove background and replace with alpha. 2010-02-12 20:01-EST Gregory John Casamento * GormCore/GormFunctions.m: Correct the function which enumerates over the list of methods in a class when adding from a palette. 2010-02-08 07:13-EST Gregory John Casamento * Gorm.m: Separate out the server methods into a category. 2010-02-08 06:46-EST Gregory John Casamento * GormCore/GormServer.h: Added deleteClass: method * Gorm.m: Added implementation for deleteClass: 2010-02-07 05:43-EST Gregory John Casamento * GormCore/GNUmakefile: Added GormServer.h to the headers. * GormCore/GormCustomClassInspector.m: Change tooltip when a new custom class is selected from the list. * GormCore/GormPalettesManager.m: Set autoresizing on drag view. * GormCore/GormServer.h: Protocol for GormServer. * GormCore/GormViewEditor.m: Add the class name to the tooltip. * Gorm.m: Vend the object so that other apps can talk to Gorm via DO. 2010-01-20 Wolfgang Lux * Palettes/2Controls/ControlsPalette.gorm: Replace the two orphaned radio buttons by a NSMatrix. 2010-01-17 Wolfgang Lux * Palettes/2Controls/GormButtonAttributesInspector.m(-ok:, -revert:): Fix the NSButton inspector to use \r as key equivalent for the Return key. * GormCore/GormViewWithContentViewEditor.m (-ungroup): * GormCore/GormSplitViewEditor.m (-ungroup, -destroyAndListSubviews): Remove the former container view from its parent after an ungroup operation. 2010-01-14 06:46-EST Gregory John Casamento * GormCore/GormDocumentWindow.m: Make window unable to become main. This is so that the document window will not receive the menu on Windows. * GormCore/GormPalettesManager.m: Make the panel able to become main so that it can recieve the menu on Windows. 2010-01-06 01:06-EST Gregory John Casamento * GormCore/GNUmakefile: Add files here. * GormCore/GormNSPanel.[hm] * GormCore/GormNSWindow.[hm]: Move GormNSPanel.[hm] and GormWindow.[hm] here. * Palettes/1Windows/GNUmakefile: Remove files from being compiled * Palettes/1Windows/GormNSPanel.h * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.h * Palettes/1Windows/GormNSWindow.m: Remove these from here * Palettes/1Windows/GormWindowAttributesInspector.m * Palettes/1Windows/WindowsPalette.m: Change to include GormNSPanel/GormNSWindow from the correct area. 2009-12-30 23:40-EST Gregory John Casamento * Plugins/Nib/GormNibWrapperLoader.m: Remove reference to GSClassSwapper and replace it with NSClassSwapper. * Plugins/Nib/GormWindowTemplate.m: Override the baseWindowClass method to return GormNSWindow as appropriate. 2009-12-27 01:17-EST Gregory John Casamento * Gorm.m * Plugins/Nib/GNUmakefile: Add new class to makefile. * Plugins/Nib/GormNibWrapperLoader.m: Modified to use GormWindowTemplate. * Plugins/Nib/GormWindowTemplate.[hm]: Replace flags used only at runtime when the template is loaded. This is so, for example, the released when closed flag will not cause issues when editing the window. 2009-12-01 Riccardo Mottola * Gorm.m: do not open untitled document on application start 2009-12-01 German Arias * GormCore/GormDocument.m: Changes to prevent menus placed off screen on screens with low resolutions 2009-11-11 09:27-WIT Hans Baier * English.lproj/Gorm.gorm: remove duplicate keyboard shortcut #p (now pops up palette only) 2009-10-13 23:52-EDT Gregory John Casamento * GormCore/GormFunctions.m: Temporary change to fix compilation problem. * GormCore/GormViewEditor.m: Added code to show id of the object as a tooltip. 2009-09-22 16:59-EDT Gregory John Casamento * GormCore/GormViewWithSubviewsEditor.m: Call super instead of parent. Corrects issue with connecting to NSBox and NSProgressIndicator. Patch by Wolfgang Lux 2009-09-06 23:55-EDT Gregory John Casamento * English.lproj/Gorm.gorm * GormCore/GormGenericEditor.h * GormCore/GormViewWithContentViewEditor.h * GormCore/GormViewWithContentViewEditor.m * Gorm.m: Beginning of implementation of groupSelectionInView: 2009-08-22 18:04-EDT Gregory John Casamento * GormCore/GormOutlineView.m: Remove .tiff from the end of the images. This is interfering with theming in gorm since it's not pulling the right images in this case. * Plugins/Nib/GormNibCustomResource.[hm]: Handle custom resources in gorm, currently just images/sounds. * Plugins/Nib/GormNibWrapperLoader.h: Include nib resource header 2009-08-10 10:02-EDT Gregory John Casamento * GormCore/GormDefines.h: Move defines for certain things here so that they are centralized. 2009-08-08 03:09-EDT Gregory John Casamento * GormCore/GNUmakefile: Added reference to new classes. * GormCore/GormBoxEditor.m: Cleanup. * GormCore/GormClassManager.m: Correction for when loading from a nib and there are no custom classes in the nib file. * GormCore/GormDocumentWindow.m: Added awakeFromNib to accept mouse moved events. * GormCore/GormInternalViewEditor.m: Cleanup. * GormCore/GormStandaloneViewEditor.[hm]: Addition of new class. * GormCore/GormViewWithContentViewEditor.[hm]: Removal of handleMouseOnKnob:ofView:withEvent:, handleMouseOnView:withEvent: methods * GormCore/GormViewWithSubviewsEditor.[hm]: Addition of handleMouseOnKnob:ofView:withEvent:, handleMouseOnView:withEvent: methods * Palettes/0Menus/GormNSMenu.m: Cleanup. 2009-07-25 18:47-EDT Gregory John Casamento * GormCore/GNUmakefile * GormCore/GormBoxEditor.m * GormCore/GormDocumentWindow.m * GormCore/GormInternalViewEditor.m * GormCore/GormObjectEditor.m * GormCore/GormStandaloneViewEditor.[hm]: New classes to handle standalone views. * GormCore/GormViewWithContentViewEditor.[hm]: * GormCore/GormViewWithContentViewEditor.m * GormCore/GormViewWithSubviewsEditor.h * GormCore/GormViewWithSubviewsEditor.m 2009-06-23 22:19-EDT Gregory John Casamento * GormCore/GormFilePrefsManager.m * GormInfo.plist * Version: Update to 1.2.11. 2009-06-01 21:21-EDT Gregory John Casamento * Version: 1.2.10 2009-03-24 18:02-EDT Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: -(void)deleteSelection, remove arbitrary limitation which prevents removing all items in a menu. 2009-03-19 23:39-EDT Gregory John Casamento * GormCore/GormWrapperLoader.m: Allow handling of wrappers which are not directories. * Plugins/Gorm/GormGormWrapperLoader.m: Change logic to accommodate previous generation of .gorm files which were not packages. Also correct the code so that a return is not made within the NS_DURING block. * Plugins/Nib/GormNibWrapperLoader.m: Do not load if the wrapper is not a directory. 2009-03-17 01:05-EDT Gregory John Casamento * Plugins/Nib/GormNibWrapperLoader.m: Correct the code so that return is not called from within an NS_DURING block. 2009-03-16 20:18-EDT Gregory John Casamento * Plugins/Nib/GormNibWrapperLoader.m: Correct compilation error. 2009-03-03 18:17-EST Gregory John Casamento * GormCore/GormClassInspector.m: Change the cell to scrollable to allow long action/outlet names. 2009-02-11 09:22-EST Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: Revert some changes from previous modification. Corrects issue with submenus showing up when they shouldn't. 2009-02-11 01:31-EST Gregory John Casamento * GormCore/GormDocument.m: Remove call to deprecated method. * GormCore/GormInternalViewEditor.m: Minor cleanup * GormObjCHeaderParser/OCMethod.m: Minor cleanup * Palettes/2Controls/GormNSTextFieldInspector.gorm: Correct issue with misspelled outlet name. 2009-02-02 17:13-EST Gregory John Casamento * Palettes/2Controls/GormButtonAttributesInspector.[hm]: Added code to handle button style. * Palettes/2Controls/GormNSButtonInspector.gorm: Added button style popup to the inspector. 2009-02-01 09:20-EST Gregory John Casamento * GormCore/GormBoxEditor.m * GormCore/GormInternalViewEditor.m * GormCore/GormViewWithSubviewsEditor.m: Changes to support standalone views. 2009-01-31 18:45-EST Gregory John Casamento * GormCore/GormCustomView.m: Allow addition of plain NSView to a gorm file. 2009-01-25 09:47-EST Gregory John Casamento * GormCore/GormViewWindow.m: Change the color used for standalone views. 2009-01-25 07:54-EST Gregory John Casamento * Palettes/0Menus/GormNSMenu.m: Fix memory leak. 2009-01-25 07:00-EST Gregory John Casamento * GormCore/GormFilePrefsManager.m * GormInfo.plist: Change version to 1.2.9 (SVN) unstable. 2009-01-25 06:50-EST Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: Display the in certain situations. * Palettes/0Menus/GormNSMenu.m: Remove call to setMenu: in _createWindow since it's not needed and was causing display issues. * Palettes/0Menus/GormNSMenuView.m: Use new method in NSMenuView to reduce code duplication. Corrections for bug #25401. 2009-01-06 20:48-EST Gregory John Casamento * Resources/ClassInformation.plist: Added printDocument: method to FirstResponder 2009-01-06 Fred Kiefer * GormCore/GormClassManager.m (-nibData): Make sure an action name of ":" gets ignored. 2008-12-26 13:53-EST Gregory John Casamento * Version: 1.2.8 2008-12-26 13:53-EST Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormCore/GormFilePrefsManager.m * GormInfo.plist * NEWS: Update with new version information. 2008-12-19 Nicola Pero * All GNUmakefiles: removed GNUSTEP_CORE_SOFTWARE=YES and added PACKAGE_NAME=gorm. * GNUmakefile: Export PACKAGE_NAME to reduce chances of a problem if a GNUmakefile in a subdirectory is missing it. * GormObjCHeaderParser/GNUmakefile: Do not set PACKAGE_NAME to GormObjCHeaderParser. 2008-12-18 Nicola Pero * All GNUmakefiles: added GNUSTEP_CORE_SOFTWARE=YES at the beginning. * GNUmakefile: Export GNUSTEP_CORE_SOFTWARE to reduce chances of a problem if a GNUmakefile in a subdirectory is missing it. 2008-12-18 00:52-EST Gregory John Casamento * Plugins/Nib/GormNibWrapperBuilder.m: -[GormNibWrapperBuilder archiver: willEncodeObject:] add back code to replace GormFirstResponder with nil. Changes to use proper templates when encoding nib files. 2008-12-18 00:20-EST Gregory John Casamento * GormCore/GormInspectorsManager.m: Fix for bug#25111. * Plugins/Nib/GormNibWrapperBuilder.m: Remove code which adds nil to the map if the object is a GormFirstResponder 2008-12-06 11:04-EST Bernard Cafarelli Gregory John Casamento * GormCore/GNUmakefile.preamble: Corrects bug #25001. 2008-12-02 02:58-EST Gregory John Casamento * GormCore/GormCustomView.m * GormCore/GormDocument.m * GormCore/GormFilePrefsManager.m * GormCore/GormHelpInspector.m * GormCore/GormPrivate.h * GormCore/GormPrivate.m * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m * Palettes/1Windows/GormWindowSizeInspector.m * Palettes/1Windows/WindowsPalette.m * Plugins/Gorm/GormGormWrapperBuilder.m * Plugins/Nib/GormNibWrapperBuilder.m * Plugins/Nib/GormNibWrapperLoader.h: Use new header files for nib/gorm loading. 2008-11-27 11:43-EST Gregory John Casamento * GNUmakefile: Remove default install to SYSTEM, per bug #24673. * Plugins/Gorm/GormGormWrapperLoader.m: Minor grammatical correction. 2008-11-13 23:36-EST Gregory John Casamento * GormCore/GormDocument.m: Change to apply labels in the document to cells in a matrix. * GormCore/GormFilePrefsManager.m: Update version to 1.2.7 * GormInfo.plist: Same * Version: Same 2008-10-25 18:40-EDT Gregory John Casamento * Version: 1.2.6 2008-10-22 22:30-EDT Wolfgang Lux Patch committed by: Gregory John Casamento * GormLib/IBObjectAdditions.m: Remove duplicate method implementations from here to fix issues on Darwin. 2008-10-19 21:50-EDT Wolfgang Lux Patch committed by: Gregory John Casamento * GormCore/GormGenericEditor.h * GormCore/GormGenericEditor.m * GormCore/GormImageEditor.m * GormCore/GormObjectEditor.m * GormCore/GormSoundEditor.m: Observe notification IBWillCloseDocument and remove the reference to the document when that is recieved to avoid a crash. * Resources/ClassInformation.plist: Add outlet for delegate to NSSplitView. 2008-10-06 19:22-EDT Gregory John Casamento * Palettes/2Controls/ControlsPalette.m: Correct sizing issue with Controls Palette. 2008-09-27 23:11-EDT Gregory John Casamento * GormPrefs/GormPluginsPref.m: Include GormPluginManager.h to eliminate compiler warning. 2008-09-27 23:02-EDT Gregory John Casamento * English.lproj/GormPreferences.gorm * English.lproj/GormPrefPlugins.gorm * GNUmakefile * GormCore/GormPluginManager.m * GormPrefs/GNUmakefile * GormPrefs/GormPalettesPref.h * GormPrefs/GormPluginsPref.h * GormPrefs/GormPluginsPref.m * GormPrefs/GormPrefController.h * GormPrefs/GormPrefController.m: Changes to allow addition of plugins by users. 2008-09-27 21:10-EDT Gregory John Casamento * GormCore/GormPalettesManager.h * GormCore/GormPalettesManager.m: Reverted the previous change to the palettes manager. 2008-09-06 16:12-EDT Gregory John Casamento * GormCore/GNUmakefile: Added GNUSTEP_INSTALLATION_DOMAIN * GormCore/GormCustomView.m: Reverted previous change. Need to write a GormCustomViewEditor instead to handle this case. * GormLib/GNUmakefile: Added GNUSTEP_INSTALLATION_DOMAIN 2008-09-04 08:00-EDT Gregory John Casamento * Gorm.m: Remove unhide: implementation. Correction for bug#24146. 2008-08-24 13:20-EDT Gregory John Casamento * GormCore/GormCustomView.m: Code to return the best possible superclass. * GormCore/GormDocument.m: More info in the description method * GormCore/GormViewWindow.m: Fixing handling of standalone views. 2008-07-20 09:32-EDT Gregory John Casamento * GormObjCHeaderParser/OCIVar.m * GormObjCHeaderParser/ParserFunctions.h * GormObjCHeaderParser/ParserFunctions.m: Correction for bug #23889. 2008-06-24 19:18-EDT Gregory John Casamento * GormCore/GormWrapperBuilder.h * GormCore/GormWrapperBuilder.m * GormCore/GormWrapperLoader.h * GormCore/GormWrapperLoader.m * Plugins/GModel/GormGModelPlugin.m * Plugins/GModel/GormGModelWrapperLoader.h * Plugins/GModel/GormGModelWrapperLoader.m * Plugins/Gorm/GormGormPlugin.m * Plugins/Gorm/GormGormWrapperBuilder.m * Plugins/Gorm/GormGormWrapperLoader.m * Plugins/Nib/GormNibPlugin.m * Plugins/Nib/GormNibWrapperBuilder.m * Plugins/Nib/GormNibWrapperLoader.m: Change method name from "type" to "fileType" to avoid issues with gcc < 3.0 2008-06-24 18:09-EDT Gregory John Casamento * GormCore/GormWrapperLoader.h * Plugins/Gorm/GormGormWrapperLoader.h * Plugins/Nib/GormNibPlugin.m: Call type from here. * Plugins/Nib/GormNibWrapperLoader.h: Move type method to super-class declaration. 2008-05-25 09:09-EDT Gregory John Casamento * GormCore/GormObjectEditor.m: Correction for segfault. * Plugins/Nib/GormNibPlugin.m: Correction for compilation error on gcc < 3.1 systems. 2008-05-20 fabien * GormCore/GormObjectEditor.m: add draggingExited: to implement autoscrolling during IBAction connections. 2008-05-18 19:16-EDT Gregory John Casamento * GormCore/GormDocument.m: Correct segfault. Remove unecessary call to removeFromSuperview for the selection box from GormDocument window. 2008-05-18 fabien * Palettes/3Containers/GormTabViewAttributesInspector.h: Add itemPrevious and itemNext outlets * Palettes/3Containers/GormTabViewInspector.gorm: Add itemPrevious and itemNext outlets * Palettes/3Containers/GormTabViewInspector.gorm: Implement NSTabView items ordering in ok: 2008-05-16 20:47-EDT Gregory John Casamento * GormCore/GormPluginManager.h * GormCore/GormPluginManager.m: Added manager class. 2008-05-16 20:46-EDT Gregory John Casamento * GormCore/GormPlugin.h * GormCore/GormPlugin.m: plugin class for gorm plugins. 2008-05-16 20:41-EDT Gregory John Casamento * GNUmakefile: Added plugins as resources. * GormCore/GNUmakefile: Remove classes from file * GormCore/GormGModelWrapperLoader.m * GormCore/GormGormWrapperBuilder.m * GormCore/GormGormWrapperLoader.m * GormCore/GormNibWrapperBuilder.m * GormCore/GormNibWrapperLoader.m: Removed the loaders from GormCore. * GormCore/GormProtocol.h: Added a new method. * GormLib/IBPlugin.m: Added implementations to some of the methods. * Gorm.m: Added a "pluginManager" method. * Palettes/1Windows/GNUmakefile.preamble * Palettes/2Controls/GNUmakefile.preamble * Palettes/3Containers/GNUmakefile.preamble * Palettes/4Data/GNUmakefile.preamble: Corrected issue with all of the palette makefiles pointing to the wrong name. * Plugins/GModel/GNUmakefile * Plugins/GModel/GNUmakefile.preamble * Plugins/GModel/GormGModelPlugin.m * Plugins/GModel/GormGModelWrapperLoader.h * Plugins/GModel/GormGModelWrapperLoader.m * Plugins/Gorm/GNUmakefile * Plugins/Gorm/GNUmakefile.preamble * Plugins/Gorm/GormGormPlugin.m * Plugins/Gorm/GormGormWrapperBuilder.m * Plugins/Gorm/GormGormWrapperLoader.h * Plugins/Gorm/GormGormWrapperLoader.m * Plugins/Nib/GNUmakefile * Plugins/Nib/GNUmakefile.preamble * Plugins/Nib/GormNibPlugin.m * Plugins/Nib/GormNibWrapperBuilder.m * Plugins/Nib/GormNibWrapperLoader.h * Plugins/Nib/GormNibWrapperLoader.m: Added new plugins for each supported file type. * Resources/Defaults.plist: Added the "BuiltinPlugins" default. 2008-05-06 20:04-EDT Gregory John Casamento * English.lproj/Gorm.gorm: Added shortcut to Page Layout menu. 2008-05-05 20:26-EDT Gregory John Casamento * English.lproj/Gorm.gorm: Add Page Layout menu. 2008-05-05 20:08-EDT Gregory John Casamento * English.lproj/Gorm.gorm: Added Print menu. * Gorm.m: Added print: method to print the current keyWindow. 2008-05-04 18:09-EDT Gregory John Casamento * GormCore/GormPalettesManager.m: Cleanup 2008-05-04 18:00-EDT Gregory John Casamento * GormCore/GormPalettesManager.m: Correction for issue with palette clipping the top of the controls. 2008-05-03 13:40-EDT Gregory John Casamento * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m: Cleanup and fix for release when closed on panel. * Palettes/2Controls/ControlsPalette.gorm: Minor adjustment 2008-04-28 19:06-EDT Gregory John Casamento * English.lproj/GormPalettePanel.gorm 2008-04-28 17:31-EDT Gregory John Casamento * GormCore/GormDocument.m: Reinstate large toolbar on document. 2008-04-27 19:32-EDT Gregory John Casamento * English.lproj/GormPalettePanel.gorm: Moved palette window to gorm file. * GNUmakefile: Added new gorm here. * GormCore/GormDocument.m: Made toolbar items smaller * GormCore/GormPalettesManager.[hm]: Added toolbar implementation to this class to allow the user to switch palettes using the toolbar. 2008-04-25 17:41-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Corrected possition. * GormCore/GormInspectorsManager.m: Show the name of the object which is being edited in the inspector title. * Palettes/1Windows/GormNSWindowInspector.gorm: Added support for setting the frame save name. * Palettes/1Windows/GormWindowAttributesInspector.h: Added ivar * Palettes/1Windows/GormWindowAttributesInspector.m: Modified ok: and revert: 2008-04-24 18:57-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Correct position of window. 2008-04-24 18:06-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Correct resize attributes of GormDocument. 2008-04-24 01:28-EDT Gregory John Casamento * English.lproj/GormScrollViewAttributesInspector.gorm: Correct resizing issues with inspector. 2008-04-24 01:21-EDT Gregory John Casamento * GormCore/GormDocument.m: change to log to debug instead. * GormCore/GormImageEditor.m: properly dealloc the image code. 2008-04-24 00:54-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Correct issue with window. * GormCore/GormDocument.m * GormCore/GormImageEditor.m * GormCore/GormObjectEditor.m * GormCore/GormSoundEditor.m: Fix memory leak. 2008-04-23 20:03-EDT Gregory John Casamento * Palettes/1Windows/GormNSWindowInspector.gorm: Connected the button for "released when closed" button. * Palettes/1Windows/GormNSWindow.m: Correction for issue where isReleasedWhenClosed isn't set properly. 2008-04-20 11:47-EDT Gregory John Casamento * GormInfo.plist: Minor correction to the plist. 2008-04-14 17:37-EDT Gregory John Casamento * GormCore/GormImageEditor.m * GormCore/GormOutlineView.m * GormCore/GormResourceManager.m * GormCore/GormSoundInspector.m * GormCore/GormSplitViewEditor.m * GormLib/IBInspectorManager.m * Palettes/2Controls/GormBoxAttributesInspector.m * Palettes/4Data/GormDateFormatterAttributesInspector.m * Palettes/4Data/GormImageViewAttributesInspector.m * Palettes/4Data/GormNumberFormatterAttributesInspector.m: General clean up and compilation fixes to allow Gorm to compile without warnings. 2008-04-07 18:59-EDT Gregory John Casamento * GormCore/GormFilePrefsManager.m * GormInfo.plist * Version: Moved to version 1.2.5. 2008-04-06 22:09-EDT Gregory John Casamento * Version: 1.2.4 2008-04-06 22:09-EDT Gregory John Casamento * ANNOUNCE * ChangeLog * Documentation/news.texi * GormCore/GormFilePrefsManager.m * GormInfo.plist * NEWS * Version: Updating for release. 2008-03-05 20:45-EST Gregory John Casamento * GormCore/GormWrapperLoader.m: Correct c99'ism. 2008-02-18 20:31-EST Gregory John Casamento * Palettes/2Controls/GormPopUpButtonEditor.m: Change to use helper method to set up "preferred edge" correctly. 2008-02-17 12:49-EST Gregory John Casamento * GormCore/GormViewEditor.m * GormCore/GormViewWindow.m: Minor correction to view resizing for windowless views to show contents properly. Still working on editor issues. 2008-02-17 01:07-EST Gregory John Casamento * GormCore/GormInternalViewEditor.m * GormCore/GormScrollViewEditor.m * GormCore/GormSplitViewEditor.m * GormCore/GormViewEditor.m * GormCore/GormViewWithContentViewEditor.m: Corrections for bug#18171. Fixes issues with grouping and ungrouping. 2008-02-16 20:54-EST Gregory John Casamento * Palettes/2Controls/GormSliderAttributesInspector.m: Cleaned up code to use NSOnState and NSOffState properly, since we can't depend on them always reflecting YES and NO respectively. * Palettes/3Containers/GormTableViewAttributesInspector.m: Corrected call in ok: to use enclosingScrollView instead of simply getting the superview of the table. This corrects bug#22333. 2008-02-09 Adam Fedor * GormCore/GormGenericEditor.m ([GormGenericEditor -refreshCells]): Avoid segfault on solaris machines. 2008-02-09 12:15-EST Gregory John Casamento * GormCore/GormClassEditor.m * GormCore/GormGenericEditor.m * GormCore/GormObjectEditor.m: Change background color of object view. 2008-01-10 Nicola Pero * GNUmakefile.postamble (LN_S_RECURSIVE): For backwards-compatibility with older versions of gnustep-make, define to be the same as LN_S if not defined yet. (before-all): Use RM_LN_S to delete the symlink, and use LN_S_RECURSIVE to create it. (after-clean): Use RM_LN_S to delete the symlink. * GormPrefs/GormPrefController.m ([-init]): Avoid compiler warning. 2008-01-07 20:04-EST Gregory John Casamento * Palettes/0Menus/GormMenuItemAttributesInspector.h * Palettes/0Menus/GormMenuItemAttributesInspector.m: Moved strings for non-printable characters to class variables. 2008-01-07 18:50-EST Gregory John Casamento * GormCore/GormGenericEditor.m: Removed patch for bug#17539. Was causing issues on load. * GormCore/GormNibWrapperLoader.m: Removed extra NSLog(...); 2008-01-07 18:37-EST Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Minor issues corrected with c99 changes. 2008-01-07 17:40-EST Gregory John Casamento * Palettes/1Windows/GormDrawerAttributesInspector.gorm: Fixed issue with dropdown. * Palettes/2Controls/GormButtonEditor.m: Fixed minor resize issue. 2008-01-05 Riccardo Mottola * GormCore/GormWrapperBuilder.m: removed some c99-isms 2008-01-04 Riccardo Mottola * GormCore/GormGormWrapperLoader.m: removed some c99-isms * GormCore/GormNibWrapperLoader.m: removed some c99-isms 2008-01-04 18:38-EST Gregory John Casamento * GormCore/GormViewWindow.m: Try to get the editor for the standalone view and activate it. 2008-01-04 13:22-EST Gregory John Casamento * English.lproj/Gorm.gorm: Changed delete to require command, it was causing issues with editing text fields. * English.lproj/GormScrollViewAttributesInspector.gorm * GormCore/GormScrollViewAttributesInspector.h * GormCore/GormScrollViewAttributesInspector.m: Added ruler switches to inspector. 2008-01-04 12:05-EST Gregory John Casamento * GormCore/GormDocument.m * GormLib/IBDocuments.h: Addition of private methods for bug#17892. 2008-01-03 20:39-EST Gregory John Casamento * GormCore/GormGenericEditor.m: Reformed and applied patch provided by Sergey Golovin. Corrects bug#17539. 2008-01-03 20:17-EST Gregory John Casamento * English.lproj/Gorm.gorm: Added menu shortcut for delete/backspace to correct bug#15637. 2008-01-03 20:02-EST Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Corrections for bug#19792. Nib loader connector logic modified to correct this issue. 2008-01-03 19:40-EST Gregory John Casamento * GormCore/GormViewKnobs.m: drkgrey changed to fgcolor. 2008-01-03 17:22-EST Gregory John Casamento * GormCore/GormViewKnobs.m: Draw initial knobs as red to differentiate them from the black ones which indicates that the inside of a non-simple view is selected. Corrects bug#21479. 2008-01-03 14:50-EST Gregory John Casamento * GormCore/GormGormWrapperLoader.m: Correct invalid window level in _repairFile: method. 2008-01-01 23:07-EST Gregory John Casamento * GormCore/GormGormWrapperLoader.m: Touch the document to mark it as modified in the _repairFile method only if corrections have been made. 2008-01-01 22:57-EST Gregory John Casamento * GormCore/GormGormWrapperLoader.m: Cleanup array after display of errors/warnings. 2008-01-01 15:26-EST Gregory John Casamento * Plugins/GModel/GNUmakefile * Plugins/Gorm/GNUmakefile * Plugins/Nib/GNUmakefile: Add dummy makefiles. 2008-01-01 15:21-EST Gregory John Casamento * Plugins/GNUmakefile: Add makefile in plugins dir. 2008-01-01 14:03-EST Gregory John Casamento * GormCore/GormGormWrapperLoader.m: More corrections to the _repairFile method. * GormInfo.plist: Changed to reflect SVN status 2007-12-31 21:22-EST Gregory John Casamento * English.lproj/GormInconsistenciesPanel.gorm: Error panel to show detected inconsistencies. * English.lproj/GormPrefGeneral.gorm: Added option to turn on repair method. * GNUmakefile: Added reference to new gorm file. * GormCore/GormGormWrapperLoader.m: Added code to bring up the new panel and show the errors. * GormPrefs/GormGeneralPref.[mh]: Added new method and ivar to handle switch for consistency checking. 2007-12-19 19:03-EST Gregory John Casamento * GormCore/GormGormWrapperLoader.m * GormCore/GormNibWrapperBuilder.m: Correction for bug#21845. 2007-12-04 20:52-EST Gregory John Casamento * English.lproj/GormViewSizeInspector.gorm: Correction for bug#19640. 2007-11-30 15:58-EST Gregory John Casamento * GNUmakefile * GormLib/GNUmakefile * GormLib/IBPlugin.h * GormLib/IBPlugin.m * GormLib/InterfaceBuilder.h * Plugins/GNUmakefile: First cut at changes to add Plugin support to Gorm. 2007-11-11 15:40-EST Gregory John Casamento * Version: 1.2.2 2007-11-11 15:38-EST Gregory John Casamento * ANNOUNCE * Documentation/Gorm.texi * GNUmakefile * GormCore/GormFilePrefsManager.m * GormInfo.plist * NEWS * Palettes/GNUmakefile * README * Resources/Defaults.plist * Version: Preparing for release. 2007-11-11 00:18-EST Gregory John Casamento * Palettes/0Menus/GormMenuItemAttributesInspector.m: call itemChanged: so that changes are seen immediately in the menu. 2007-11-10 21:46-EST Gregory John Casamento * Documentation/news.texi * Documentation/readme.texi: Update of documentation. * Palettes/0Menus/GormMenuItemAttributesInspector.gorm * Palettes/0Menus/GormMenuItemAttributesInspector.h * Palettes/0Menus/GormMenuItemAttributesInspector.m * Palettes/2Controls/GormButtonAttributesInspector.m: Add key equivalent drop down for special keys for menu items. 2007-11-05 18:43-EST Gregory John Casamento * GormCore/GormBoxEditor.h * GormCore/GormBoxEditor.m * GormCore/GormClassEditor.h * GormCore/GormClassEditor.m * GormCore/GormClassInspector.h * GormCore/GormClassInspector.m * GormCore/GormClassManager.h * GormCore/GormClassManager.m * GormCore/GormClassPanelController.h * GormCore/GormClassPanelController.m * GormCore/GormConnectionInspector.h * GormCore/GormConnectionInspector.m * GormCore/GormControlEditor.h * GormCore/GormControlEditor.m * GormCore/GormCustomClassInspector.h * GormCore/GormCustomClassInspector.m * GormCore/GormCustomView.h * GormCore/GormCustomView.m * GormCore/GormDocumentController.h * GormCore/GormDocumentController.m * GormCore/GormDocument.h * GormCore/GormDocument.m * GormCore/GormDocumentWindow.h * GormCore/GormDocumentWindow.m * GormCore/GormFilePrefsManager.m * GormCore/GormFilesOwner.h * GormCore/GormFilesOwner.m * GormCore/GormFunctions.h * GormCore/GormFunctions.m * GormCore/GormGenericEditor.h * GormCore/GormGenericEditor.m * GormCore/GormGModelWrapperLoader.m * GormCore/GormGormWrapperBuilder.m * GormCore/GormGormWrapperLoader.m * GormCore/GormImageEditor.h * GormCore/GormImageEditor.m * GormCore/GormImage.h * GormCore/GormImage.m * GormCore/GormInspectorsManager.h * GormCore/GormInspectorsManager.m * GormCore/GormInternalViewEditor.h * GormCore/GormInternalViewEditor.m * GormCore/GormMatrixEditor.h * GormCore/GormMatrixEditor.m * GormCore/GormNibWrapperBuilder.m * GormCore/GormNibWrapperLoader.m * GormCore/GormObjectEditor.h * GormCore/GormObjectEditor.m * GormCore/GormObjectInspector.h * GormCore/GormObjectInspector.m * GormCore/GormOpenGLView.h * GormCore/GormOpenGLView.m * GormCore/GormOutlineView.h * GormCore/GormOutlineView.m * GormCore/GormPalettesManager.h * GormCore/GormPalettesManager.m * GormCore/GormPlacementInfo.h * GormCore/GormPrivate.h * GormCore/GormPrivate.m * GormCore/GormProtocol.h * GormCore/GormResourceEditor.h * GormCore/GormResourceEditor.m * GormCore/GormResource.h * GormCore/GormResource.m * GormCore/GormResourceManager.h * GormCore/GormResourceManager.m * GormCore/GormScrollViewAttributesInspector.h * GormCore/GormScrollViewAttributesInspector.m * GormCore/GormScrollViewEditor.m * GormCore/GormSoundEditor.h * GormCore/GormSoundEditor.m * GormCore/GormSound.h * GormCore/GormSoundInspector.h * GormCore/GormSoundInspector.m * GormCore/GormSound.m * GormCore/GormSoundView.h * GormCore/GormSoundView.m * GormCore/GormSplitViewEditor.h * GormCore/GormSplitViewEditor.m * GormCore/GormViewEditor.h * GormCore/GormViewEditor.m * GormCore/GormViewKnobs.h * GormCore/GormViewKnobs.m * GormCore/GormViewSizeInspector.h * GormCore/GormViewSizeInspector.m * GormCore/GormViewWindow.h * GormCore/GormViewWindow.m * GormCore/GormViewWithContentViewEditor.h * GormCore/GormViewWithContentViewEditor.m * GormCore/GormViewWithSubviewsEditor.h * GormCore/GormViewWithSubviewsEditor.m * GormCore/GormWindowEditor.h * GormCore/GormWindowEditor.m * GormCore/GormWrapperBuilder.h * GormCore/GormWrapperBuilder.m * GormCore/GormWrapperLoader.h * GormCore/GormWrapperLoader.m * GormCore/NSCell+GormAdditions.h * GormCore/NSCell+GormAdditions.m * GormCore/NSColorWell+GormExtensions.h * GormCore/NSColorWell+GormExtensions.m * GormCore/NSFontManager+GormExtensions.h * GormCore/NSFontManager+GormExtensions.m * GormCore/NSView+GormExtensions.h * GormCore/NSView+GormExtensions.m * GormLib/IBApplicationAdditions.h * GormLib/IBApplicationAdditions.m * GormLib/IBCellAdditions.h * GormLib/IBCellProtocol.h * GormLib/IBConnectors.h * GormLib/IBConnectors.m * GormLib/IBDefines.h * GormLib/IBDocuments.h * GormLib/IBDocuments.m * GormLib/IBEditors.h * GormLib/IBEditors.m * GormLib/IBInspector.h * GormLib/IBInspector.m * GormLib/IBInspectorManager.h * GormLib/IBInspectorManager.m * GormLib/IBInspectorMode.h * GormLib/IBInspectorMode.m * GormLib/IBObjectAdditions.h * GormLib/IBObjectAdditions.m * GormLib/IBObjectProtocol.h * GormLib/IBPalette.h * GormLib/IBPalette.m * GormLib/IBProjectFiles.h * GormLib/IBProjects.h * GormLib/IBResourceManager.h * GormLib/IBResourceManager.m * GormLib/IBSystem.h * GormLib/IBViewAdditions.h * GormLib/IBViewProtocol.h * GormLib/IBViewResourceDragging.h * GormLib/InterfaceBuilder.h * Gorm.m * GormObjCHeaderParser/NSScanner+OCHeaderParser.h * GormObjCHeaderParser/NSScanner+OCHeaderParser.m * GormObjCHeaderParser/OCClass.h * GormObjCHeaderParser/OCClass.m * GormObjCHeaderParser/OCHeaderParser.h * GormObjCHeaderParser/OCHeaderParser.m * GormObjCHeaderParser/OCIVarDecl.h * GormObjCHeaderParser/OCIVarDecl.m * GormObjCHeaderParser/OCIVar.h * GormObjCHeaderParser/OCIVar.m * GormObjCHeaderParser/OCMethod.h * GormObjCHeaderParser/OCMethod.m * GormObjCHeaderParser/ParserFunctions.h * GormObjCHeaderParser/ParserFunctions.m * GormPrefs/GormColorsPref.h * GormPrefs/GormGeneralPref.m * GormPrefs/GormGuidelinePref.h * GormPrefs/GormPalettesPref.m * GormPrefs/GormPrefController.h * GormPrefs/GormShelfPref.h * GormPrefs/GormShelfPref.m * main.m * Palettes/0Menus/GormMenuAttributesInspector.h * Palettes/0Menus/GormMenuAttributesInspector.m * Palettes/0Menus/GormMenuEditor.m * Palettes/0Menus/GormMenuInspectors.m * Palettes/0Menus/GormMenuItemAttributesInspector.h * Palettes/0Menus/GormMenuItemAttributesInspector.m * Palettes/0Menus/GormNSMenu.h * Palettes/0Menus/GormNSMenu.m * Palettes/0Menus/GormNSMenuView.h * Palettes/0Menus/GormNSMenuView.m * Palettes/0Menus/inspectors.m * Palettes/0Menus/MenusPalette.m * Palettes/1Windows/GormDrawerAttributesInspector.h * Palettes/1Windows/GormDrawerAttributesInspector.m * Palettes/1Windows/GormNSPanel.h * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.h * Palettes/1Windows/GormNSWindow.m * Palettes/1Windows/GormWindowAttributesInspector.h * Palettes/1Windows/GormWindowAttributesInspector.m * Palettes/1Windows/GormWindowSizeInspector.h * Palettes/1Windows/GormWindowSizeInspector.m * Palettes/1Windows/inspectors.m * Palettes/1Windows/WindowsPalette.h * Palettes/1Windows/WindowsPalette.m * Palettes/2Controls/ControlsPalette.m * Palettes/2Controls/GormBoxAttributesInspector.h * Palettes/2Controls/GormBoxAttributesInspector.m * Palettes/2Controls/GormButtonAttributesInspector.h * Palettes/2Controls/GormButtonAttributesInspector.m * Palettes/2Controls/GormButtonEditor.h * Palettes/2Controls/GormButtonEditor.m * Palettes/2Controls/GormCellAttributesInspector.h * Palettes/2Controls/GormCellAttributesInspector.m * Palettes/2Controls/GormColorWellAttributesInspector.h * Palettes/2Controls/GormColorWellAttributesInspector.m * Palettes/2Controls/GormFormAttributesInspector.h * Palettes/2Controls/GormFormAttributesInspector.m * Palettes/2Controls/GormMatrixAttributesInspector.h * Palettes/2Controls/GormMatrixAttributesInspector.m * Palettes/2Controls/GormPopUpButtonAttributesInspector.h * Palettes/2Controls/GormPopUpButtonAttributesInspector.m * Palettes/2Controls/GormProgressIndicatorAttributesInspector.h * Palettes/2Controls/GormProgressIndicatorAttributesInspector.m * Palettes/2Controls/GormSliderAttributesInspector.h * Palettes/2Controls/GormSliderAttributesInspector.m * Palettes/2Controls/GormStepperAttributesInspector.h * Palettes/2Controls/GormStepperAttributesInspector.m * Palettes/2Controls/GormTextFieldAttributesInspector.h * Palettes/2Controls/GormTextFieldAttributesInspector.m * Palettes/2Controls/inspectors.m * Palettes/3Containers/ContainersPalette.m * Palettes/3Containers/GormBrowserAttributesInspector.h * Palettes/3Containers/GormBrowserAttributesInspector.m * Palettes/3Containers/GormNSBrowser.h * Palettes/3Containers/GormNSBrowser.m * Palettes/3Containers/GormNSOutlineView.h * Palettes/3Containers/GormNSOutlineView.m * Palettes/3Containers/GormNSTableView.h * Palettes/3Containers/GormNSTableView.m * Palettes/3Containers/GormTableColumnAttributesInspector.h * Palettes/3Containers/GormTableColumnAttributesInspector.m * Palettes/3Containers/GormTableColumnSizeInspector.h * Palettes/3Containers/GormTableColumnSizeInspector.m * Palettes/3Containers/GormTableViewAttributesInspector.h * Palettes/3Containers/GormTableViewAttributesInspector.m * Palettes/3Containers/GormTableViewEditor.h * Palettes/3Containers/GormTableViewEditor.m * Palettes/3Containers/GormTableViewSizeInspector.h * Palettes/3Containers/GormTableViewSizeInspector.m * Palettes/3Containers/GormTabViewAttributesInspector.h * Palettes/3Containers/GormTabViewAttributesInspector.m * Palettes/3Containers/GormTabViewEditor.h * Palettes/3Containers/GormTabViewEditor.m * Palettes/3Containers/inspectors.m * Palettes/4Data/DataPalette.m * Palettes/4Data/GormDateFormatterAttributesInspector.h * Palettes/4Data/GormDateFormatterAttributesInspector.m * Palettes/4Data/GormImageViewAttributesInspector.h * Palettes/4Data/GormImageViewAttributesInspector.m * Palettes/4Data/GormNSComboBoxAttributesInspector.h * Palettes/4Data/GormNSComboBoxAttributesInspector.m * Palettes/4Data/GormNumberFormatterAttributesInspector.h * Palettes/4Data/GormNumberFormatterAttributesInspector.m * Palettes/4Data/GormTextViewAttributesInspector.h * Palettes/4Data/GormTextViewAttributesInspector.m * Palettes/4Data/GormTextViewEditor.h * Palettes/4Data/GormTextViewEditor.m * Palettes/4Data/GormTextViewSizeInspector.h * Palettes/4Data/GormTextViewSizeInspector.m * Palettes/4Data/inspectors.m * Palettes/5Controllers/ControllersPalette.m: Change header to reflect license change to GPLv3. 2007-11-05 18:20-EST Gregory John Casamento * GormCore/GormViewEditor.m: Removed commented out code. * Palettes/3Containers/GormNSTableColumnInspector.gorm * Palettes/3Containers/GormTableColumnAttributesInspector.h * Palettes/3Containers/GormTableColumnAttributesInspector.m * Palettes/3Containers/GormTableViewEditor.m: Added new column title field to the inspector so that the title can be edited there instead of directly. 2007-11-05 01:56-EST Gregory John Casamento * GormCore/GormViewEditor.m: Change code to use drawRect: instead of drawInNeededIgnoringOpacity: to correct bug#21478. 2007-09-07 19:57-EDT Gregory John Casamento * Palettes/0Menus/GormNSMenu.m: Correct exception on start when opening a gorm from the command line. 2007-09-05 00:41-EDT Gregory John Casamento * Palettes/2Controls/GormButtonAttributesInspector.h: Added ivars for new buttons. * Palettes/2Controls/GormButtonAttributesInspector.m: Addeed code in ok: and revert: to handle modifier settings * Palettes/2Controls/GormNSButtonInspector.gorm: Added key equivalent modifier buttons. 2007-09-03 23:12-EDT Gregory John Casamento * Palettes/2Controls/GormButtonAttributesInspector.m: added code to ok: and revert: to handle arrow keys for key equivalents. * Palettes/2Controls/GormNSButtonInspector.gorm: Added to dropdown list to include options for arrow keys. 2007-09-01 16:24-EDT Gregory John Casamento * Palettes/0Menus/GormNSMenu.m: Correction for compilation issue found by Riccardo. Code was improperly using protected _superMenu variable directly. 2007-08-24 22:36-EDT Gregory John Casamento * Resources/VersionProfiles.plist: Added version information for NSButtonCell. 2007-08-24 00:50-EDT Gregory John Casamento * GormCore/GormPrivate.m: Changed initWithCoder: to handle older .gorm (version 0) files correctly. 2007-08-19 21:22-EDT Gregory John Casamento * ChangeLog * GNUmakefile * Palettes/5Controllers/ControllersPalette.m * Palettes/5Controllers/ControllersPalette.tiff * Palettes/5Controllers/GNUmakefile * Palettes/5Controllers/GNUmakefile.preamble * Palettes/5Controllers/palette.table * Palettes/GNUmakefile * Resources/Defaults.plist: Initial changes for controllers palette. 2007-08-19 21:21-EDT Gregory John Casamento * GNUmakefile * Palettes/GNUmakefile * Resources/Defaults.plist 2007-07-27 13:30-EDT Gregory John Casamento * Gorm.m: Remove commented code. * Palettes/0Menus/GormNSMenu.m: Added private category to prevent compilation warning. 2007-07-26 10:25-EDT Gregory John Casamento * Palettes/0Menus/GormNSMenuView.m: Remove commented out code. 2007-07-26 10:06-EDT Gregory John Casamento * Gorm.m: Remove default setting * Palettes/0Menus/GNUmakefile: Add GormNSMenuView.m * Palettes/0Menus/GormNSMenu.m: Override methods to prevent changing style to Mac style for menu being edited. * Palettes/0Menus/GormNSMenuView.[mh]: New class overrides methods to prevent switching style to Mac style for menu being edited. * Palettes/0Menus/palette.table: Added substitution rule for NSMenuView. 2007-06-27 19:25-EDT Gregory John Casamento * GormCore/GormViewEditor.m: Correct bug#20274. Changed call displayIfNeededInRectIgnoringOpacity: to displayRectIgnoringOpacity: 2007-04-29 17:08-EDT Gregory John Casamento * English.lproj/GormViewSizeInspector.gorm: Correct bug#19640 * GormInfo.plist: update 2007-03-17 Gregory John Casamento * Version: 1.2.0 2007-03-08 Fred Kiefer * Palettes/3Containers/GormTabViewAttributesInspector.m (-ok:): Handle changed NSTabViewType enumerator values correctly. 2007-02-21 Matt Rice * GormLib/IBResourceManager.m (+registerResourceManagerClass:): Post an IBResourceManagerRegistryDidChangeNotification. 2007-02-04 Matt Rice * GormCore/GormDocument.m (_real_close): New function. (handleNotification:): Move document closing code to _real_close. (close:): Call _real_close. 2006-12-27 23:01-EST Gregory John Casamento * Gorm.m: [Gorm init] added code to force menu interface style to NSNextStepInterfaceStyle. 2006-10-04 Matt Rice * Palettes/3Menus/GormTableViewEditor.m: Start a connection when control-mousing the selected table column. 2006-12-03 19:54-EST Gregory John Casamento * GormCore/GormDocument.h: Change declaration for window member from NSWindow to GormDocumentWindow. * GormCore/GormDocument.m: Move cast from call to setDocument: to call to _docWindow private method. 2006-12-03 19:34-EST Gregory John Casamento * GormCore/GormDocument.m: Cast window for call of setDocument: method in awakeFromNib. * GormCore/GormDocumentWindow.h: Add setDocument: method. 2006-12-02 Matt Rice * Palettes/0Menus/GormMenuEditor.m (-mouseDown:): Call startConnecting. * GormCore/GormViewEditor.m (-startConnectingObject:withEvent:): Ditto. * GormCore/GormObjectEditor.m (-mouseDown:): Ditto. * GormCore/GormDocument.m (changeToViewWithTag:): Don't change the selection if connecting. * GormCore/GormResourceManager.m: Revert previous commit. * Gorm.m (-startConnecting:): Remove checks for a nil connectDestination. 2006-11-27 Matt Rice * GormCore/GormResourceManager.m: Temporarily comment out some code. 2006-11-23 22:23-EST Gregory John Casamento * English.lproj/GormDocument.gorm: Move initial position of Gorm document window back to the lower left of the screen. 2006-11-23 11:03-EST Gregory John Casamento * Version: 1.1.0 (also updated version requirements.) 2006-11-18 Matt Rice * GormCore/GormDocumentWindow.[h,m]: Add copyright headers. 2006-11-18 Matt Rice * GormCore/GNUmakefile: Add GormDocumentWindow.[h,m]. * GormCore/GormResourceManager.m: Add code to handle image/sound/header files. * GormCore/GormDocument.[h,m]: Add -viewWithTag: method. * GormCore/GormClassEditor.m: Remove dragging destination code for resources. * GormCore/GormResourceEditor.m: Ditto. * GormCore/GormObjectEditor.m: Ditto. (addObject:): Change the editor to the GormObjectEditor. * GormCore/GormDocument.m: Register the window for dragged types. Implement -viewWithTag:. * GormCore/GormDocumentWindow.[h,m]: New subclass of NSWindow which handles drag and drop to GormResourceManager. * GormCore/GormDocument.gorm: Set the main document window to a GormDocumentWindow class. 2006-11-15 Nicola Pero * Documentation/Examples/Controller/GNUmakefile: Do not set GNUSTEP_INSTALLATION_DIR. * Documentation/Examples/SimpleApp/GNUmakefile: Same change. 2006-11-11 00:04-EST Gregory John Casamento * Palettes/2Controls/GormNSSliderInspector.gorm: Added switch and textfield to hold the number of tickmarks. * Palettes/2Controls/GormSliderAttributesInspector.[hm]: Added method and ivar to handle tick marks. 2006-10-29 19:21-EST Gregory John Casamento * Palettes/3Containers/GormTableViewEditor.m: Add scrollToPoint: method to call the super_view. Corrects bug #18143. 2006-10-28 09:41-EDT Gregory John Casamento * English.lproj/GormClassEditor.gorm: Add tool tips for button and for pulldown. 2006-10-27 Matt Rice * Palettes/3Containers/GormTableViewEditor.m: Change documentRect to documentVisibleRect. 2006-10-23 01:23-EDT Gregory John Casamento * English.lproj/GormHelpInspector.gorm: Change resize properties. * GormCore/GormHelpInspector.m: in revert: blank text field when no connections are retrieved. 2006-10-23 01:14-EDT Gregory John Casamento * English.lproj/GormHelpInspector.gorm: Help inspector .gorm file. * GNUmakefile: Add .gorm file. * GormCore/GNUmakefile: Add new class. * GormCore/GormConnectionInspector.m: Call [super ok:] from ok: method. * GormCore/GormHelpInspector.[hm]: Implemented the beginnings of the help inspector. * GormCore/GormObjectEditor.m: Add helpInspectorClassName implementation to NSView category. 2006-10-21 23:51-EDT Gregory John Casamento * Palettes/3Containers/GormNSTableViewInspector.gorm: Added connection from tag form to tagForm instance variable. * Palettes/3Containers/GormTableViewAttributesInspector.m: Cleaned up includes. 2006-10-21 16:06-EDT Gregory John Casamento * GormCore/GormConnectionInspector.m: Added awakeFromNib method to call setDoubleAction: on the newBrowser (connection) object so that double click will now cause a connection to be made. * GormCore/GormGenericEditor.m: Initialize local variables in refreshCells method. 2006-10-21 11:45-EDT Matt Rice * Palettes/3Containers/GormTableViewEditor.m: Implement documentRect. Since the editor is the table's superview, it will take its size from the editor. Corrects bug#18073 Patch committed by Gregory John Casamento 2006-10-20 20:08-EDT Gregory John Casamento * GormCore/GNUmakefile * GormLib/GNUmakefile * GormLib/Version * GormObjCHeaderParser/GNUmakefile * GormObjCHeaderParser/Version * GormPrefs/GNUmakefile: Modify GNUmakefiles to use Version to properly name .so libraries. 2006-10-19 23:11-EDT Gregory John Casamento * GormCore/GormClassManager.m: Retain File's Owner setting, if class is being updated. Correction for bug #18035 2006-10-19 22:56-EDT Gregory John Casamento * GormCore/GormClassManager.[hm]: Added actionExists:onClassNamed: and outletExists:onClassNamed: methods to query the existence of a given action/outlet on a given class. * GormCore/GormDocument.[hm]: Added refreshConnectionsForClassNamed: method. * Images/GormFile.tiff: Added "gorm" in the center to make it obvious which type this is for. * Images/GormNib.tiff: Added "nib" in the center to make it obvious which type this is for. Correction for bug #18035 2006-10-18 14:03-EDT Gregory John Casamento * Images/FileIcon_gmodel.tiff * Images/GormNib.tiff * Images/GormPalette.tiff: Redid icons. 2006-10-15 19:32-EDT Gregory John Casamento * Images/GormFile.tiff: New Gorm file icon, based on new Gorm icon. * Images/GormTesting.tiff: New testing icon. * Images/Gorm.tiff: Switch to icon by Jesse Ross. 2006-10-10 22:46-EDT Gregory John Casamento * GNUmakefile: Install into SYSTEM domain by default. 2006-10-10 21:28-EDT Gregory John Casamento * GormLib/IBInspector.m: Remove uneeded call to [window setDocumentEdited:] in touch: method. * Palettes/2Controls/GormButtonAttributesInspector.m: In ok: call [super ok:]. 2006-10-10 20:56-EDT Gregory John Casamento * English.lproj/GormClassEditor.gorm: Make button momentary push and remove the image. * English.lproj/GormPrefGeneral.gorm: Change box title. * GormCore/GormClassEditor.[hm]: Change switchView to switchViewToDefault, add method toggleView:, add code to change image as appropriate. * GormPrefs/GormGeneralPref.m: Remove notification in classesAction: so that the default changes don't effect all class editors. 2006-10-10 00:37-EDT Gregory John Casamento * English.lproj/GormClassEditor.gorm: Aligned the toggle with the classesView. 2006-10-09 23:54-EDT Gregory John Casamento * English.lproj/GormClassEditor.gorm: Added button and search image. * GNUmakefile: Added new tiff files to images. * GormCore/GormClassEditor.m: Added toggleView: method. * Images/browserView.tiff: Browser image. * Images/outlineView.tiff: Outline image. 2006-10-09 Nicola Pero If you further modify any makefile using ProjectCenter, manually edit it before committing removing any line that sets GNUSTEP_INSTALLATION_DIR. * GNUmakefile: Do not try to set GNUSTEP_INSTALLATION_DIR. * Documentation/GNUmakefile: Same change. * GormCore/GNUmakefile: Same change. * GormObjCHeaderParser/GNUmakefile: Same change. * GormPrefs/GNUmakefile: Samce change. 2006-10-08 20:32-EDT Gregory John Casamento * Resources/ClassInformation.plist: Add NSSearchField and NSSearchFieldCell. 2006-10-06 Richard Frith-Macdonald * GormCore/GormPalettesManager.m: rewrite code to set up drag image so we avoid glitches on the pallette view (we no longer use the pallette window directly as the cached image window) and ensure that the image dragged is all copied correctly to avoid the glitches when dragging BSBox and NSScrollView items. 2006-10-06 00:16-EDT Gregory John Casamento * GormCore/GormClassEditor.m: Minor cleanup in handleNotification: method. 2006-10-05 13:16-EDT Gregory John Casamento * English.lproj/GormClassEditor.gorm: Added new gorm file to hold classes view contents as well as search and operations drop down. * English.lproj/GormDocument.gorm: Removed search and drop down * GNUmakefile: Added new gorm file. * GormCore/GormClassEditor.h: new outlets classesView and mainView, added declarations for methods createSubclass:, createClassFiles:, instantiateClass:, removeClass: * GormCore/GormClassEditor.m: Changes to methods to use the above. * GormCore/GormDocument.h: Removed duplicate declarations. * GormCore/GormDocument.m: Remove code for methods and replace with simple calls to the editor. * Palettes/2Controls/GormBoxAttributesInspector.m: ok: and revert: changed to convert to integer. 2006-10-04 22:35-EDT Gregory John Casamento * GormCore/GormCustomView.m: Minor cleanup in initWithFrame: * GormCore/GormGormWrapperLoader.m: Added logic to _repairFile to correct issue with views that don't have a name in the nametable. * GormCore/GormViewWithContentViewEditor.m: Properly add the subview back into the document in ungroup method. 2006-10-04 00:12-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Make connection to fileType in GormFilePrefsManager. * GormCore/GormDocumentController.m: Move the window when "New Application" is selected. * GormCore/GormDocument.m: Add call in awakeFromNib to setFileTypeName:. * GormCore/GormFilePrefsManager.h: add setFileTypeName: and fileTypeName. * GormCore/GormFilePrefsManager.m: add setFileTypeName: and fileTypeName. * Palettes/4Data/GormTextViewEditor.m: Remove commented out windowAndRect:forObject: 2006-10-01 23:07-EDT Gregory John Casamento * GormCore/GormClassEditor.m: Correct issue with class selection in deleteSelection method. 2006-10-01 22:50-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Remove some extra classes. 2006-10-01 22:23-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Added section in file section to show fileType. * GormCore/GormFilePrefsManager.m: Changed version number from 1,1,0 to 1,1,2. * GormCore/GormInspectorsManager.m: Removed kludge from setCurrentInspector:. * GormCore/GormScrollViewEditor.m: Remove code which returns the table view editor in editorClassName. In mouseDown: remove check in mouseDown: for NSScroller and subclasses. * GormCore/GormViewEditor.h: Declare frameDidChange: * Palettes/3Containers/GormTableViewEditor.m: Remove redundant implementation of performDragOperation:. Call draggingUpdated instead. * Palettes/4Data/DataPalette.m: Change minimum size. * Palettes/4Data/GormTextViewEditor.m: Add handleNotification: and add initWithObject:inDocument:. 2006-09-30 23:09-EDT Gregory John Casamento * GormCore/GormGModelWrapperLoader.m: Cleanup NSLog() calls. 2006-09-30 12:00-EDT Gregory John Casamento * GormCore/GormClassManager.h: Added declaration findByClassName: * GormCore/GormClassManager.m: Added findClassByName: method to find classes with partial text matches. * GormCore/GormDocument.m: Modified controlTextDidChange: to call findClassByName:. * GormCore/GormGModelWrapperLoader.m: Change className to cm in initWithModelUnarchiver: to avoid warning. 2006-09-29 22:56-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Added "Remove" to Operations menu. 2006-09-29 21:59-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Added "Operations" item to prevent accidental subclassing. Aligned with side of view and changed resizing properties. 2006-09-28 22:27-EDT Gregory John Casamento * GormCore/GormClassManager.m: Allow addClassNamed:... to accept arguments superClass, actions, and outlets as nil. * GormObjCHeaderParser/OCClass.m: Correctly recognize a category in [OCClass parse]; Corrects bug#17804. 2006-09-28 20:38-EDT Gregory John Casamento * English.lproj/GormDocument.gorm: Added search field and drop down for loading reading and subclassing. * GormCore/GormClassManager.m: Removed sorting from allSuperclassesOf: * GormCore/GormDocument.m: Added delegate method for search field. Implemments suggestions in bug#17802 (Change request). 2006-09-28 00:43-EDT Gregory John Casamento * Resources/Defaults.plist: Make the browser classes view the default. 2006-09-28 00:36-EDT Gregory John Casamento * GormCore/GormClassEditor.m: Correct problem which caused class inspector to loose focus. * GormInfo.plist: Update version to reflect SVN. * GormPrefs/GormGuidelinePref.m: Eliminate warning. 2006-09-27 22:28-EDT Gregory John Casamento * GormCore/GormClassManager.m: Sort classnames in subClassesOf:, allSuperclassesOf:, allSubclassesOf:, allCustomSubClassesOf:. 2006-09-13 23:19-EDT Gregory John Casamento * Palettes/1Windows/GNUmakefile: Added new classes and interface. * Palettes/1Windows/GormDrawerAttributesInspector.gorm: Inspector interface. * Palettes/1Windows/GormDrawerAttributesInspector.[hm]: Inspector. * Palettes/1Windows/inspectors.m: Added implementation for inspectorClassName. 2006-09-12 23:10-EDT Gregory John Casamento * GormCore/GormWindowEditor.m: Remove IBApplicationAdditions category. * Palettes/1Windows/DrawerSmall.tiff: icon for NSDrawer in objects view. * Palettes/1Windows/Drawer.tiff: Icon for drawer on palette * Palettes/1Windows/GNUmakefile: Added new files. * Palettes/1Windows/inspectors.m: Add IBApplicationAdditions category for NSWindow (from GormWindowEditor above) and add category for NSDrawer. * Palettes/1Windows/WindowsPalette.h: Moved interface for WindowsPalette here. * Palettes/1Windows/WindowsPalette.m: Removed interface and added #include * Resources/ClassInformation.plist: Added ivars which were missing for NSDrawer. 2006-08-27 01:37-EDT Gregory John Casamento * GormCore/GormBoxEditor.m: Check to see if the subview responds to destroyAndListSubviews. * GormCore/GormViewWithContentViewEditor.m: [GormViewWithContentViewEditor ungroup] added local variable "v" to hold the view. * Gorm.m: Remove NSLog from ungroup method. Partial correction for bug#17538. 2006-08-20 12:23-EDT Gregory John Casamento * GormCore/GormDocument.m: Modify outdated "upgrade" warning in fileWrapperRepresentationOfType:. * GormCore/GormGormWrapperLoader.m: Set .gorms of version 1 as old in buildFileWrapperDictionaryWithDocument:. 2006-08-19 19:18-EDT Gregory John Casamento * Palettes/2Controls/GormFormAttributesInspector.m: Minor cleanup in ok: * Palettes/2Controls/GormNSFormInspector.gorm: Added missing connections. 2006-08-16 00:54-EDT Gregory John Casamento * GormCore/GormDocument.m: Simplify message in fileRepresentationOfType:. * GormCore/GormNibWrapperBuilder.m: Correct test for menu which was causing the app to crash in openItems method. 2006-08-15 17:50-EDT Gregory John Casamento * GormCore/GormWrapperLoader.m: Correct problem introduced in previous commit in [GormWrapperLoader loadFileWrapper: withDocument:]; 2006-08-15 02:16-EDT Gregory John Casamento * GormCore/GormFilePrefsManager.h: Add declaration for nibDataWithOpenObjects: * GormCore/GormFilePrefsManager.m: Rename nibData to nibDataWithOpenObjects: * GormCore/GormNibWrapperBuilder.m: Create the IBOpenObjects list in buildWrapper... * GormCore/GormResource.m: Properly assign the data to the ivar in initWithData:... * GormCore/GormWrapperBuilder.m: Correct image loading and saving issue. * GormCore/GormWrapperLoader.m: Correct image problem. 2006-08-14 21:48-EDT Gregory John Casamento * GormCore/GormNibWrapperBuilder.m: Properly encode oids as integers in -[NSIBObjectData initWithDocument:] since bug#17426 is corrected. 2006-08-14 01:04-EDT Gregory John Casamento * GormCore/GormNibWrapperBuilder.m: Temporary workaround in -[NSIBObjectData initWithDocument:] until 17426 is resolved. 2006-08-13 21:48-EDT Gregory John Casamento * GormCore/GormNibWrapperBuilder.m: Correct issue which was causing IB to complain about the File's Owner not having an oid in [NSIBObjectData initWithDocument:]. * GormCore/GormWrapperBuilder.m: Correct issue discovered by Benhur Stein that was causing images not to be saved in the wrapper correctly in buildFileWrapperDictionaryWithDocument: * Gorm.m: Remove uneeded application:openFile: method which was commented out. 2006-08-11 11:13-EDT Gregory John Casamento * GormCore/GormDocumentController.m: Default backing store changed in newDocument: to NSBackingStoreBuffered instead of NSBackingStoreRetained. 2006-08-11 01:53-EDT Gregory John Casamento * GormCore/GormCustomView.m: Corrected encoding issues with custom view in encodeWithCoder: it now properly encodes itself as an NSCustomView. 2006-08-09 02:29-EDT Gregory John Casamento * GormCore/GormCustomView.m: encodeWithCoder: changes to encode the customview. * GormCore/GormNibWrapperBuilder.m: Add oids for connectors and also add one for the owner. 2006-08-06 00:37-EDT Gregory John Casamento * GormCore/GormFilesOwner.m: Remove implementation of initWithCoder: * GormCore/GormNibWrapperBuilder.m: In -[NSIBObjectData initWithDocument:] add code to set NSFramework key. 2006-08-05 08:46-EDT Gregory John Casamento * GormCore/GormClassManager.m: Fixes to encode classes.nib file properly. * GormCore/GormFilePrefsManager.m: Added code to encode a dummy info.nib for nib saving. * GormCore/GormFilesOwner.m: Code to encode this as a NSCustomObject in encodeWithCoder: * GormCore/GormNibWrapperBuilder.m: in -[NSIBObjectData initWithDocument:] added code to pull the names and generate OIDS for the .nib properly. 2006-08-01 00:12-EDT Gregory John Casamento * GormCore/GNUmakefile: Add GormNibWrapperBuilder.m * GormCore/GormClassManager.m: Correct nibData method to properly output information in classes.nib format. * GormCore/GormDocument.m: Slight improvement to windowAndRect: forObject:. * GormCore/GormFilePrefsManager.[hm]: Add nibData method. * GormInfo.plist: Change GSNibFileType entry to "Editor" * GormNibWrapperBuilder.m: Class to write nibs. 2006-07-18 23:04 Gregory John Casamento * GormCore/GormFunctions.m: Remove the width and height adjustment from the function minimalContainerFrame(). * GormCore/GormPrivate.m: Add the encoding logic for saving NSCustomObject. * GormCore/GormViewWindow.m: Add the width and height here, instead of in the function. 2006-07-16 23:13 Gregory John Casamento * GormCore/GormFunctions.h: * GormCore/GormFunctions.m: * GormCore/GormViewWindow.m: Improved placement of standalone views when being loaded by .gorm files. 2006-07-15 18:34 Gregory John Casamento * Images/Gorm.tiff: Slightly improved icon. Based on suggestions from people on #gnustep. More improvements to come. 2006-07-12 00:31 Gregory John Casamento * Gorm.m: in testInterface, make the item with terminate: the "Quit Test" item, if none is found add one. 2006-07-10 01:32 Gregory John Casamento * GormCore/GormGormWrapperLoader.m: in loadFileWrapper:withDocument: removed the check for the info file. Some earlier versions of the .gorm wrapper don't have this file. 2006-07-09 23:27 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Replace the destination or source of any connection which connects to an NSWindowTemplate object. 2006-07-09 17:59 Gregory John Casamento * GormCore/GormViewEditor.m: Correction for issue which was causing size inspector not to update when a view was moved or changed. Removed code in editoedObjectFrameDidChange: and frameDidChange: to correct the problem. 2006-07-09 13:04 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Correct test for customClass or name in loadFileWrapper:withDocument:. 2006-07-09 11:18 Gregory John Casamento * GormCore/GormCustomView.m: initWithCoder: move call to get customView className after the if, so that it's properly set. * GormCore/GormNibWrapperLoader.m: Remove commented out code. 2006-07-09 10:46 Gregory John Casamento * English.lproj/GormDocument.gorm: New version profile added to pull down. * GormCore/GormDocument.m: Encode topLevelObjects first in encodeWithCoder: and decode first in initWithCoder:. * GormCore/GormGormWrapperBuilder.m: Changes for version 2 of GSNibContainer. * GormCore/GormGormWrapperLoader.m: Changes for version 2 of GSNibContainer. * GormCore/GormNibWrapperLoader.m: No longer explicitly get the main menu. The main menu is the only menu that is a top level object, so let it determine itself. * GormCore/GormWrapperBuilder.m: Changes to prevent sending back a file wrapper if the dictionary returned is nil in buildWrapperWithDocument:. * Resources/VersionProfiles.plist: New version profile. 2006-07-05 20:17 Gregory John Casamento * Gorm.m: In testInterface, assign top level objects from the testContainer to topObjects, a temporary var, so that they can be properly cleaned up. 2006-07-05 19:56 Gregory John Casamento * Gorm.m: Correct bug introduced at some point in testInterface which causes the test mode not to display a menu when the application has no menu. It is supposed to show a small test menu so that test mode can be exited. 2006-07-05 00:02 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Added check to prevent error if customclass or name comes back nil. 2006-07-03 17:18 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Remove category for NSView which provided setSuperview as it is no longer needed. 2006-07-02 00:53 Gregory John Casamento * GormCore/GormCustomView.[hm]: If CustomView includes some subviews in a nib file make the custom view into the best possible superclass of the custom class indicated. Also store the className in a variable instead of depending on "stringValue". 2006-06-24 20:49 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Make _isTopLevelObject: into a normal method, not private. 2006-06-24 20:41 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Change -[GormNibWrapperLoader _isTopLevelObject:] to use the "objects" map. This map is used to maintain parent/child object relationships in the .nib file. * Gorm.m: in -[Gorm testInterface] change the warning to use multiple lines. On smaller screens it runs over. 2006-06-24 10:36 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Remove swappedObjects ivar and also remove from -init and -dealloc in GormNibWrapperLoader. 2006-06-24 10:22 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Use the "classes" map properly in -[GormNibWrapperLoader loadWrapperFile:withDocument:]. * main.m: Correct comment. 2006-06-23 00:57 Gregory John Casamento * GormCore/GormGModelWrapperLoader.m: call -[NSDocument updateChangeCount:] to clear changes so that the document isn't flagged as needing to be saved right after load. * GormCore/GormNibWrapperLoader.m: Use the objects in the map returned by -names in -loadFileWrapper:withDocument:. 2006-06-18 14:40 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Added filter to remove NSIBHelpConnector instances from the connections array. 2006-06-17 20:39 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Remove resizing change from loadFileWrapper:withDocument: since it was moved to NSWindowTemplate nibInstantiate. 2006-06-17 12:45 Gregory John Casamento * GormCore/GormInternalViewEditor.m: Removed previous resize in activate method. * GormCore/GormNibWrapperLoader.m: Code to properly resize the window after loading. 2006-06-17 10:54 Gregory John Casamento * GormCore/GormCustomView.m: Return self in the conditional that reads the custom view. * GormCore/GormInternalViewEditor.m: Reset the current view size so that the window is properly displayed. * Palettes/1Windows/GormNSWindow.m: Send deferred as "NO" always. 2006-06-17 06:53 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Added code to clear changes so that the nib loads without showing the document as changed. Also added code to correct the missing colon in some nib files for certain methods so that connections are correctly made. * Resources/ClassInformation.plist: Addition of missing methods on NSFirst. 2006-06-17 06:25 Gregory John Casamento * GormCore/GormNibWrapperLoader.m: Fix for connections to NSOwner. 2006-06-15 00:48 Gregory John Casamento * GormCore/GModelDecoder.m: Removed old class. * GormCore/GNUmakefile: Added new GormGModelWrapperLoader class * GormCore/GormClassManager.m: Minor cleanup * GormCore/GormDocument.m: Temporarily comment out release of file prefs window. * GormCore/GormGModelWrapperLoader.m: new loader class for GModel. * GormCore/GormNibWrapperLoader.m: Minor cleanup * GormInfo.plist: Added GModel entry back in and made both GModel and Nib "Viewer" entries. 2006-06-14 22:45 Gregory John Casamento * GormCore/GormDocument.[hm]: Added new deactivateEditors and reactivateEditors methods. * GormCore/GormGormWrapperBuilder.m: Moved connection name/object swap here for gorm format. * Gorm.m: Calling new deactivate/reactivateEditors 2006-06-14 01:42 Gregory John Casamento * GormCore/GNUmakefile: Addition of GormNibWrapperLoader to the makefile. * GormCore/GormClassManager.[hm]: Correction for nib classes loading. * GormCore/GormDocument.h: Added include for GSNibContainer * GormCore/GormDocument.m: In NSNibConnector category which implements "isEqual" check if it's the same "kind of class". If not return NO. * GormCore/GormGormWrapperBuilder.m: Corrections for connection persistence issues. * GormCore/GormGormWrapperLoader.m: Corrections for connection persistence issues. * GormCore/GormNibWrapperLoader.m: Initial cut at class to build the nib wrapper. * GormCore/GormPrivate.[hm]: Added encoding changes to GormObjectProxy and GormCustomView to allow them to handle NSCustomObject and NSCustomView respectively * Gorm.m: In testing, don't substitute the browser either. 2006-06-10 21:04 Gregory John Casamento * GormCore/GormGormWrapperLoader.m: removed uneeded sound/image logic. That is in the parent class. 2006-06-10 10:28 Gregory John Casamento * GormCore/GormDocument.m: Removed code that does name/obj substitution in connections. * GormCore/GormGormWrapperBuilder.m: Added code which handles name/obj substitution. * Gorm.m: Corrected issues with testing. 2006-06-10 09:24 Gregory John Casamento * GormCore/GModelDecoder.m: Changes to make this compile with new modifications. * GormCore/GNUmakefile: Addition of new files. * GormCore/GormCustomView.m:Encoding changes for NSCustomView. * GormCore/GormDocumentController.m: Removed touch, so that it is possible to quit when first creating a new document, this is the way other document oriented apps behave. * GormCore/GormDocument.[hm]: Added container methods and coding methods. * GormCore/GormGormWrapperBuilder.m: Class whic writes gorm files. * GormCore/GormGormWrapperLoader.m: Class which loads gorm files * GormCore/GormPrivate.[hm]: Simplification of init call to GormObjectProxy. * GormCore/GormWrapperBuilder.[hm]: Wrapper builder * GormCore/GormWrapperLoader.[hm]: Wrapper loader * Gorm.m: Change testInterface to encode the doc. 2006-06-05 21:20 Gregory John Casamento * GormCore/GormDocumentController.m: touches the initial document so that the user cannot simply quit after. Also sets the initial fileType. * GormCore/GormDocument.m: Compose the names used in Gorm name table using the base class name (without NS or GS) and a number in parenthesis starting with 0. A new panel or window might look like Window(0) or Panel(1). 2006-06-05 01:46 Gregory John Casamento * GormCore/GormClassManager.h: Added classes.nib loading and saving method declarations. * GormCore/GormClassManager.m: Added classes.nib loading and saving method implementations. * GormCore/GormDocument.h: Add NSObject to id declaration for container ivar. * GormCore/GormDocument.m: Minor cleanup. * GormCore/GormProtocol.h: Minor cleanup. 2006-06-04 22:11 Gregory John Casamento * ChangeLog * English.lproj/GormDocument.gorm * English.lproj/Gorm.gorm * GormCore/GModelDecoder.m * GormCore/GNUmakefile * GormCore/GormClassManager.h * GormCore/GormClassManager.m * GormCore/GormDocument.h * GormCore/GormDocument.m * GormCore/GormFilePrefsManager.h * GormCore/GormFilePrefsManager.m * GormCore/GormFilesOwner.m * GormCore/GormImageEditor.m * GormCore/GormImage.h * GormCore/GormImage.m * GormCore/GormProtocol.h * GormCore/GormResource.h * GormCore/GormResource.m * GormCore/GormSound.h * GormCore/GormSound.m * GormCore/GormViewWithContentViewEditor.m * GormInfo.plist * GormLib/IBDocuments.h * GormLib/IBPalette.m * Gorm.m * Palettes/0Menus/GormNSMenu.m * Palettes/1Windows/GormNSWindow.m * Version: Merged from NibCompatibility branch. 2006-06-03 11:44 Gregory John Casamento * English.lproj/Gorm.gorm: Add GormDocumentController as delegate to Gorm. * GormCore/GormDocumentController.m: Comment. * GormCore/GormDocument.h: Comments and containerClass declaration. * GormCore/GormDocument.m: containerClass implementation and use. * GormLib/IBDocuments.h: More descriptive comment. * GormLib/IBPalette.m: Remove IBPaletteDocument, since this is not used. * Gorm.m: Remove applicationShouldTerminate, since it is handled by GormDocumentController as the app delegate. 2006-06-01 23:06 Gregory John Casamento * GormInfo.plist: Correct NSName entries. 2006-05-30 00:03 Gregory John Casamento * GormCore/GormDocumentController.h * GormCore/GormDocumentController.m: New file. * Gorm.m: Reimplemented activeDocument to use the document controller. 2006-05-29 22:55 Gregory John Casamento * GormCore/GormDocument.m: Removed some unused variables in fileWrapperRepresentationOfType:. 2006-05-29 22:50 Gregory John Casamento * GormCore/GormDocument.[hm]: Added scmDirWrapper and private method saveSCMDirectory to preserve the .svn/CVS directories, if they are there. * GormInfo.plist: GormDocument will be responsible for saving/reading all types. 2006-05-29 18:38 Gregory John Casamento * GormCore/GormImage.m: Corrected minor issue in initWithData:... 2006-05-29 11:48 Gregory John Casamento * GormCore/GormDocument.h: Added new ivars for holding images/sounds temporarily. * GormCore/GormDocument.m: loadFileWrapperRepresentation:ofType: modified to use images/sounds arrays. The awakeFromNib method now pulls objects from those arrays and inserts them into the GormImageEditor/GormSoundEditor instances when the nib is fully loaded. 2006-05-29 10:39 Gregory John Casamento * GormCore/GormDocument.m: Override displayName and keepBackupFile. * Palettes/1Windows/GormNSWindow.m: Remove test code. 2006-05-28 23:31 Gregory John Casamento * GormCore/GormProtocol.h: Removed some methods not needed anymore. 2006-05-28 23:03 Gregory John Casamento * English.lproj/Gorm.gorm: Removed uneeded methods from Gorm class. * GormCore/GormDocument.[hm]: Add sender as a parameter to translate and exportStrings. * Gorm.m: Removed some uneeded checks in validateMenu: also removed uneeded methods which were used to forward to GormDocument. * Palettes/0Menus/GormNSMenu.m: Can't become key. 2006-05-28 19:36 Gregory John Casamento * English.lproj/GormDocument.gorm: Reparented GormDocument to be a subclass of NSDocument and also redid connections. * English.lproj/Gorm.gorm: Added new GormDocumentController class. redid connections to save/new/and loadDocument methods for NSDocument subclasses. * GormCore/GModelDecoder.m: Changed to reflect changes to document. * GormCore/GNUmakefile: Added new classes. * GormCore/GormClassManager.[hm]: Added methods to allow initialization and saving to NSData * GormCore/GormDocument.[hm]: Removed save* and load* methods, implemented loadFileWrapperRepresentation:ofType: and fileWrapperRepresentationOfType: for NSDocument. * GormCore/GormFilePrefsManager.[hm]: Added methods to allow initialization from data. * GormCore/GormImageEditor.m: Changed comment. * GormCore/GormImage.[hm]: Allow init with data. * GormCore/GormProtocol.h: Removed superceded methods. * GormCore/GormResource.[hm]: Allow initialization with data. * GormCore/GormSound.[hm]: Changed to allow initialization with data. * GormCore/GormViewWithContentViewEditor.m: Fixed warning. * GormInfo.plist: Updated information for use with NSDocument. * Gorm.m: Remove superceded methods. * Palettes/1Windows/GormNSWindow.m: Temporary debugging method. 2006-05-20 18:19 Gregory John Casamento * GormCore/GormFilePrefsManager.m: Updated to 1.0.9 * GormInfo.plist: Updated to 1.0.9. * [NibCompatibility]: Merged from this branch to HEAD. 2006-01-08 14:03 Gregory John Casamento * GormCore/GormPrivate.m: Removed deprecated templates. * GormCore/GormViewEditor.m: Removed problem which was causing a notification loop. [NibCompatibility] 2006-05-20 04:47 Gregory John Casamento * Version 1.0.8 2006-05-20 04:46 Gregory John Casamento * ANNOUNCE * Documentation/news.texi * GormCore/GormFilePrefsManager.m * GormInfo.plist * NEWS * Version: Changes for 1.0.8 bugfix release. 2006-05-16 00:56 Gregory John Casamento * GormCore/GormDocument.m: Improved logic in detachObject: to clear the selection in the parent editor and reset the selection in the document to prevent any problems when an object is removed. Also added code for removeAllInstancesOfClass: from GormObjectEditor. * GormCore/GormFunctions.m: allSubviews shouldn't return the view which is initially passed. * GormCore/GormInternalViewEditor.m: simplified deleteSelection because of changes to detachObject: * GormCore/GormObjectEditor.[hm]: Remove removeAllInstancesOfClass: from the header and class. 2006-05-15 22:58 Gregory John Casamento * GormCore/GormClassEditor.m: Reload all on calls to reloadData * GormCore/GormDocument.m: in detachObject: make certain that window is closed and released. Corrects bug#16587. 2006-05-15 21:28 Gregory John Casamento * GormCore/GormFilePrefsManager.m * GormInfo.plist: Update to 1.0.7. 2006-05-01 07:45 David Ayers * Palettes/3Containers/GormNSTableView.m ([-tableView:objectValueForTableColumn:row:]): Do not assume that the identifier of the table column is an NSString. 2006-04-30 09:15 David Ayers * GormCore/GormCustomClassInspector.m ([-_replaceWithCellClassForClassName:]): Cast to NSCell to invoke type to disambiguate incompatible method signatures. 2006-04-08 15:16 Gregory John Casamento * Version 1.0.6 2006-04-08 15:15 Gregory John Casamento * GormCore/GormFilePrefsManager.m 2006-04-08 14:40 Gregory John Casamento * ANNOUNCE * Documentation/news.texi * NEWS * Version: Changed for release 1.0.6. 2006-04-06 07:29 Gregory John Casamento * GormInfo.plist: Update date in info file. 2006-03-25 10:32 Gregory John Casamento * Palettes/4Data/GormNSNumberFormatterInspector.gorm: Change labels in inspector to clarify. 2006-03-24 17:34 Gregory John Casamento * Images/GormTesting.tiff: New testing icon * Palettes/2Controls/GormNSButtonInspector.gorm: * Palettes/2Controls/GormNSTextFieldInspector.gorm: * Palettes/4Data/GormNSImageViewInspector.gorm: Usability changes. Some inspectors had some "dead" space. 2006-03-21 20:03 Gregory John Casamento * Images/Gorm.tiff: Slight change so that .xpm renders a little more nicely when docking. 2006-03-21 19:54 Gregory John Casamento * GNUmakefile * GormInfo.plist * Images/Gorm.tiff: Improved icon. 2006-03-20 22:41 Gregory John Casamento * GNUmakefile: Added entries for new icons * GormInfo.plist: Added entries for new icons * Images/FileIcon_gmodel.tiff: Changed icon * Images/GormFile.tiff: New icon * Images/GormPalette.tiff: New icon * Images/GormTesting.tiff: Changed icon * Images/Gorm.tiff: Changed icon 2006-03-19 23:38 Gregory John Casamento * GormInfo.plist: Added 2006 * Images/centeralign_nib.tiff * Images/leftalign_nib.tiff * Images/rightalign_nib.tiff: Recreated images. 2006-03-19 22:42 Gregory John Casamento * GormInfo.plist: Update date. 2006-03-19 21:43 Gregory John Casamento * Images/GormEHCoil.tiff * Images/GormEHLine.tiff * Images/GormEVCoil.tiff * Images/GormEVLine.tiff * Images/GormMHCoil.tiff * Images/GormMHLine.tiff * Images/GormMVCoil.tiff * Images/GormMVLine.tiff: Improved images. 2006-03-18 20:12 Gregory John Casamento * GormCore/GormDocument.m: Generalize rule for adding documentView objects from a scrollview. * GormCore/GormInspectorsManager.m: Correct logic which selects the object to send to the inspector. * GormCore/GormScrollViewEditor.m: Cleanup code a little bit. 2006-03-16 06:33 Gregory John Casamento * GormCore/GormViewWithContentViewEditor.m: Correction related to bug#16049. There was an issue with moving a table column while the table was selected. 2006-03-11 20:40 Gregory John Casamento * GormCore/GormViewWithContentViewEditor.m: Minor formatting changes. * Palettes/4Data/DataPalette.m: Correction for bug#15988, patch by Matt Rice. 2006-03-11 16:57 Gregory John Casamento * Palettes/3Containers/GormTableViewEditor.m: Correction for bug#16050. 2006-03-10 01:24 Gregory John Casamento * GormCore/GormViewEditor.m: Correction for bug#16049 2006-03-09 05:18 Gregory John Casamento * Images/GormEHCoil.tiff * Images/GormEHLine.tiff * Images/GormEVCoil.tiff * Images/GormEVLine.tiff * Images/GormMHCoil.tiff * Images/GormMHLine.tiff * Images/GormMVCoil.tiff * Images/GormMVLine.tiff: Remade coil/lines to look cleaner. 2006-03-05 20:10 Gregory John Casamento * GormCore/GormPalettesManager.m: Correction for bug#15989 2006-03-04 19:44 Gregory John Casamento * Palettes/3Containers/GormTableViewEditor.m: Correction for bug#15987. 2006-02-22 22:52 Gregory John Casamento * Gorm.m: Overide arrangeInFront: so that when testing the interface it doesn't inadvertantly bring the edited window forward. 2006-02-20 08:54 Gregory John Casamento * GormCore/GormScrollViewEditor.m: Correction for bug#15817. Returning only GormScrollViewEditor was causing an issue with editing tables. 2006-02-19 12:07 Gregory John Casamento * Palettes/2Controls/GormTextFieldAttributesInspector.m: Correction for bug#15780. 2006-02-09 23:36 Gregory John Casamento * GormInfo.plist: Change "RELEASE" to SVN to indicate that 1.0.5 is an unstable version. 2006-02-06 21:06 Gregory John Casamento * Palettes/3Containers/GormNSTableViewInspector.gorm * Palettes/3Containers/GormTableViewAttributesInspector.m: Correction for bug#15642. 2006-02-03 21:56 Gregory John Casamento * GormCore/GormScrollViewAttributesInspector.m * GormCore/GormScrollViewEditor.m: Corrected problem with adding something to a scrollview. 2006-02-01 23:24 Gregory John Casamento * GormCore/GormFilePrefsManager.m * GormInfo.plist * Version: Updated with new version information. 2006-02-01 22:08 Gregory John Casamento * Palettes/4Data/GormDateFormatterAttributesInspector.m: Correction for bug#15556 2006-01-25 05:21 Gregory John Casamento * Version 1.0.4 2006-01-21 00:19 Gregory John Casamento * GormCore/GormViewEditor.m: [GormViewEditor activate] do not send notifications about frame size changes, if the object is a standalone view. * GormCore/GormViewSizeInspector.m: [GormViewSizeInspector setObject:] Added code to enable/disable cells if view is standalone. 2006-01-17 22:03 Gregory John Casamento * ChangeLog * GormCore/GormViewEditor.m * GormCore/GormViewSizeInspector.m * Palettes/1Windows/GormWindowAttributesInspector.m * Palettes/1Windows/GormWindowSizeInspector.m: Merged changes from the baseline. 2006-01-16 23:19 Gregory John Casamento * GormCore/GormViewSizeInspector.m: Correction for a similar problem in the view size inspector. Added to call to abort editing. 2006-01-16 16:25 Gregory John Casamento * Palettes/1Windows/GormWindowSizeInspector.m: Correction for bug#13994. abortEditing call to all forms added to revert:. 2006-01-16 12:20 Gregory John Casamento * Palettes/1Windows/GormWindowAttributesInspector.m: Correction for bug#15236. In ok: method the newStyleMask variable wasn't properly initialized, this was causing the flags to be set 2006-01-08 14:03 Gregory John Casamento * GormCore/GormPrivate.m: Removed deprecated templates. * GormCore/GormViewEditor.m: Removed problem which was causing a notification loop. 2005-12-15 19:08 Gregory John Casamento * GormCore/GormDocument.m: Correction for crash on close after opening objects.gorm directly. Corrects bug#15178. 2005-12-14 22:08 Gregory John Casamento * GormCore/GormDocument.h: Declaration for new readableTypes method. * GormCore/GormDocument.m: Added readableTypes method to return the types accepted by GormDocument. * Gorm.m: Use readableTypes in application:openFile: corrects bug#15178 2005-11-19 09:57 Gregory John Casamento * Version 1.0.1 2005-11-14 09:59 Gregory John Casamento * Palettes/3Containers/GormTabViewEditor.m: Correction to tabView: shouldSelectTabViewItem: for gcc < 3.x compatibility. 2005-11-13 23:17 Gregory John Casamento * GormCore/GormCustomClassInspector.m: Correctly handle image/text cell in replaceWithCellClassForClassName:. 2005-11-13 Richard Frith-Macdonald * GormCore/GormFunctions.m: Use NSSearchPathForDirectoriesInDomains() to locate resources rather than broken use of NSOpenStepRootDirectory() 2005-11-12 16:32 Gregory John Casamento * GormCore/GormClassManager.m * GormCore/GormGenericEditor.h * GormCore/GormPalettesManager.m * GormCore/GormPrivate.h * GormObjCHeaderParser/OCHeaderParser.m * Palettes/0Menus/GormMenuAttributesInspector.m: Corrected minor compilation warnings. 2005-11-12 15:33 Gregory John Casamento * GormCore/GormScrollViewAttributesInspector.m: Corrected problem reported by Matt Rice with table column selection. 2005-11-04 00:20 Gregory John Casamento * GormCore/GormCustomClassInspector.m: Corrected problem with cell. 2005-11-02 20:17 Gregory John Casamento * GormCore/GormFilePrefsManager.m: Updated version to 1.0.1 * GormInfo.plist: Same * Palettes/2Controls/GormNSTextFieldInspector.gorm: Corrected resize issues. 2005-10-29 09:09 Gregory John Casamento * Version 1.0.0 2005-10-29 09:04 Gregory John Casamento * ANNOUNCE: Updated for 1.0 * Documentation/news.texi: Updated for 1.0 * INSTALL: Updated for 1.0 * NEWS: Updated for 1.0 * README: Updated for 1.0 * Version: Updated for 1.0 * GormCore/GormCustomClassInspector.m: Fixed minor problem updating cell. 2005-10-05 20:21 Gregory John Casamento * Palettes/1Windows/GormNSWindowSizeInspector.gorm: Remove delegate from sizeForm and connect to ok: * Palettes/1Windows/GormWindowSizeInspector.m: Cleanup in ok: and other methods. 2005-10-05 fabien * Palettes/2Controls/GormButtonAttributesInspector.m : Add delegate method for forms 2005-10-05 00:21 Gregory John Casamento * Palettes/1Windows/GormNSWindowInspector.gorm: Corrected spelling of "deactivate" on Window Inspector. 2005-10-04 20:57 Gregory John Casamento * GormCore/GormScrollViewAttributesInspector.m: In category IBObjectAdditions, for editorClassName, return only GormScrollViewEditor. * GormCore/GormScrollViewEditor.m: Cleanup. 2005-09-29 19:38 Gregory John Casamento * GormCore/GormConnectionInspector.m: Corrected resizing attributes in the GormInspectorManager setCurrentInspector: method. * GormCore/GormInspectorsManager.m: Corrected resizing attributes for connect and revert buttons in init. 2005-09-25 14:40 Gregory John Casamento * GormCore/GormInspectorsManager.m: Additional correct in setCurrentInspector: 2005-09-25 12:54 Gregory John Casamento * English.lproj/GormInspectorPanel.gorm: Set resize options correctly. * GormCore/GormConnectionInspector.m: [GormConnectionInspector init] modified size of ok/revert buttons. * GormCore/GormDocument.m: Pull the archive type in [GormDocument saveGormDocument:] * GormCore/GormInspectorsManager.m: in setCurrentInspector: corrected issues with inspector resizing. 2005-09-15 00:53 Gregory John Casamento * GormCore/GormInspectorsManager.[mh]: Added origFrame to allow resetting the inspectorView frame to it's original size in setCurrentInspector:. * GormCore/GormPalettesManager.m: Removed old commented out code in init. 2005-09-12 22:15 Gregory John Casamento * GNUmakefile: Copy the .gorm file into the Resources. * GormCore/GormInspectorsManager.h: Use the inspector panel gorm. * GormCore/GormInspectorsManager.m: Use the inspector panel gorm. * English.lproj/GormInspectorPanel.gorm: corrects bug#13767. * English.lproj/GormDummyInspector.gorm: corrects bug#13767. 2005-09-04 10:17 Gregory John Casamento * Palettes/4Data/GormNSComboBoxAttributesInspector.m: In ok: performs a revert to show any changes which were made automatically as a result of other changes. 2005-09-04 10:00 Gregory John Casamento * Palettes/1Windows/GormWindowAttributesInspector.m * Palettes/1Windows/GormWindowSizeInspector.m * Palettes/2Controls/GormBoxAttributesInspector.m * Palettes/2Controls/GormColorWellAttributesInspector.m * Palettes/2Controls/GormMatrixAttributesInspector.m * Palettes/2Controls/GormNSTextFieldInspector.gorm * Palettes/2Controls/GormTextFieldAttributesInspector.m * Palettes/3Containers/GormTableColumnAttributesInspector.m * Palettes/3Containers/GormTableViewAttributesInspector.m * Palettes/4Data/GormNSComboBoxAttributesInspector.h * Palettes/4Data/GormNSComboBoxAttributesInspector.m * Palettes/4Data/GormNSComboBoxInspector.gorm * Palettes/4Data/GormTextViewAttributesInspector.m: Removed all extraneous and unecessary (and annoying) #warning messages. 2005-08-29 22:41 Gregory John Casamento * Palettes/2Controls/GormFormAttributesInspector.h: Added ivar autosizeSwitch. * Palettes/2Controls/GormFormAttributesInspector.m: Added code to handle autosize flag. * Palettes/2Controls/GormNSFormInspector.gorm: Added autosize flag * Palettes/2Controls/GormNSMatrixInspector.gorm: Box on bottom now reads "Options". 2005-08-29 19:40 Gregory John Casamento * GormCore/GormMatrixEditor.m: Corrected bug in editTitleWithEvent: which was causing a portion of the window to become transparent. 2005-08-19 00:24 Gregory John Casamento * GormCore/GormDocument.m: [GormDocument attachObject:toParent:] handle popup button items. * GormCore/GormFilePrefsManager.m: Updated version. * GormInfo.plist: Updated version. 2005-08-18 23:22 Gregory John Casamento * GormCore/GormDocument.m: retrieveObjectForParent:.. check for nil before placing in result array. 2005-08-18 22:21 Gregory John Casamento * GormCore/GormDocument.m: attachObject:toParent: added code to add menu items and submenus to document. 2005-08-18 21:32 Gregory John Casamento * GormCore/GormDocument.m: attachObject:toParent code to add all subviews of a view when it's added to the document. 2005-08-18 21:02 Gregory John Casamento * GormCore/GormDocument.m: attachObject:toParent: added code to insert the content view into the nametable and the parent->child connections. * GormCore/GormViewWithContentViewEditor.m: in the group* methods added code to "reparent" the objects so that the parent->child relationships are reset to represent the reflect the new relationship. 2005-08-18 20:21 Gregory John Casamento * GormCore/GormDocument.m: Remove commented out code. 2005-08-17 23:26 Gregory John Casamento * GormCore/GormDocument.m: attachObject:toParent: code to handle addition of tab view and items. * Palettes/3Containers/GormTabViewAttributesInspector.m: in ok: code to handle attaching and detaching from the document, when items are added and deleted. * Palettes/3Containers/GormTabViewEditor.m: Streamlined code in delegate. Corrects bug#14004. 2005-08-12 01:23 Gregory John Casamento * GormCore/GormClassEditor.m: Correction for crash when loading .gorm files via [NSApplication openFile:...]. 2005-08-11 23:00 Gregory John Casamento * GormCore/GormInspectorsManager.m: Removed explicit check for table or text view. * GormCore/GormScrollViewAttributesInspector.m: removed explicit check for table or text view. * Palettes/3Containers/inspectors.m: Added editorClassName * Palettes/4Data/GNUmakefile: Added new files. * Palettes/4Data/GormImageViewAttributesInspector.m: Pulled out IBObjectAdditions category * Palettes/4Data/GormTextViewAttributesInspector.[hm]: Change class name to GormTextViewAttributesInspector. * Palettes/4Data/GormNumberFormatterAttributesInspector.m: Split * Palettes/4Data/GormDateFormatterAttributesInspector.m: Split * Palettes/4Data/GormTextViewEditor.m: Split * Palettes/4Data/inspectors.m: Moved all IBObjectAdditions categories here. 2005-08-10 21:05 Gregory John Casamento * Palettes/3Containers/GormTableViewEditor.m: in pasteInSelection, pasteType:fromPasteboard:parent: w/ _editedObject as the parent. 2005-08-10 02:36 Gregory John Casamento * GormCore/GormDocument.[hm]: Added retrieveObjectForParent:recursive: which retrieves all of the children of a given parent. Also modified detachObject: to use this method. * GormCore/GormFilePrefsManager.m: Bumped version to 0.13.1 * GormInfo.plist: Bumped version to 0.13.1 * Palettes/3Containers/GormNSTableViewInspector.gorm: Corrected minor spacing issue. 2005-08-07 21:15 Gregory John Casamento * GNUmakefile: Added new GormObjectInspector.gorm file. * English.lproj/GormObjectInspector.gorm: New file. * GormCore/GNUmakefile: Added new GormObjectInspector.h. * GormCore/GormObjectInspector.m: Now loads gorm file. * GormCore/GormObjectInspector.h: New file. * Gorm.m: Corrected comment in header. 2005-08-07 10:26 Gregory John Casamento * GormCore/GNUmakefile: Add new header file. * GormCore/GormConnectionInspector.m: Include new header. * GormCore/GormConnectionInspector.h: New file, split from .m 2005-08-07 08:38 Gregory John Casamento * GormCore/GNUmakefile: Added new file. * GormCore/GormInspectorsManager.m: Removed GormConnectionInspector. * GormCore/GormConnectionInspector.m: Split out from GormInspectorsManager.m 2005-08-07 08:30 Gregory John Casamento * GormCore/GormFilePrefsManager.m: Update version to 0.13.0 * GormInfo.plist: Same 2005-08-06 22:25 Gregory John Casamento * English.lproj/GormClassInspector.gorm: Minor changes. * GNUmakefile: Added GormConnectionInspector.m * GormCore/GNUmakefile: Added the new resource manager. * GormCore/GormDocument.m: Changed to refer to the new resource manager. * GormCore/GormInspectorsManager.m: Removed hard coded gui. * GormCore/GormObjectEditor.m: Enabled copy/paste for objects in the object view. * GormCore/GormResourceManager.[hm]: Added to replace GormViewResourceManager.[hm] * Palettes/3Containers/GormBrowserAttributesInspector.[hm]: Added code to handle maxVisibleColumnsField. Corrected tag issue. * Palettes/3Containers/GormNSBrowserInspector.gorm: Added maximum visible columns field. 2005-08-06 18:04 Gregory John Casamento * GormLib/IBInspector.m: Change to correct problem with revert call in setObject:. It should call using self as the sender parameter, not anObject or object. 2005-08-06 17:52 Gregory John Casamento * Palettes/2Controls/GNUmakefile: Add in GormButtonAttributesInspector files. * Palettes/2Controls/GormButtonAttributesInspector.h: Changed ivar names. * Palettes/2Controls/GormButtonAttributesInspector.m: Changed names of vars and corrected problem with revert using anObject instead of object as it should. Removed explicit button item adds from init. Added trivial subclass to the file. * Palettes/2Controls/GormNSButtonInspector.gorm: Added NSPopUpButton items for button types. * Palettes/2Controls/GormStepperAttributesInspector.m: Added trivial subclass to the file. * Palettes/2Controls/inspectors.m: Moved all of IBObjectAdditions categories here. 2005-08-06 15:40 Gregory John Casamento * Palettes/0Menus/GNUmakefile: Add new file * Palettes/0Menus/GormMenuAttributesInspector.m: Removed IBObjectAdditions definitions from this file. * Palettes/0Menus/GormMenuEditor.m: Same * Palettes/0Menus/GormMenuInspectors.m: Same * Palettes/0Menus/GormMenuItemAttributesInspector.m: Same * Palettes/0Menus/inspectors.m: new file to hold implementation of IBObjectAdditions. * Palettes/1Windows/GNUmakefile: Add new file. * Palettes/1Windows/GormWindowAttributesInspector.m: Remove IBObjectAdditions definitions from this file. * Palettes/1Windows/inspectors.m: new file to hold implementation of IBObjectAdditions. 2005-08-06 15:24 Gregory John Casamento * Palettes/0Menus/GNUmakefile * Palettes/1Windows/GNUmakefile * Palettes/2Controls/GNUmakefile * Palettes/3Containers/GNUmakefile * Palettes/4Data/GNUmakefile: Added new palette file names. * Palettes/0Menus/MenusPalette.m: New file created from main.m * Palettes/1Windows/WindowsPalette.m: New file created from main.m * Palettes/2Controls/ControlsPalette.m: New file created from main.m * Palettes/3Containers/ContainersPalette.m: : New file created from main.m * Palettes/4Data/DataPalette.m: New file created from main.m 2005-08-06 11:33 Gregory John Casamento * Merge from post 1.0 branch. 2005-08-03 07:57 Gregory John Casamento * Palettes/2Controls/GormStepperAttributesInspector.m: Removed call to setNeedsDisplay in ok: method. 2005-08-03 07:11 Gregory John Casamento * Palettes/4Data/inspectors.m: Removed local declaration of GormViewSizeInspector, added include of new header, added copyright header. 2005-08-03 06:20 Gregory John Casamento * GormCore/GNUmakefile: Added new GormViewSizeInspector.h file, split out from the GormViewSizeInspector.h file. * GormCore/GormViewSizeInspector.m: Removed interface, put into .h * GormCore/GormViewSizeInspector.h: Moved interface here. * Palettes/1Windows/GormNSWindowSizeInspector.gorm: Corrected position and sizing of elements in size inspector. * Palettes/1Windows/GormWindowAttributesInspector.m: Corrected comment, added copyright header. * Palettes/1Windows/GormWindowSizeInspector.m: Corrected comment, added copyright header. * Palettes/1Windows/main.m: Added category for NSPanel to add allocSubstitute. Same as change on HEAD. * Palettes/2Controls/GormBoxAttributesInspector.[hm]: Added copyright header. * Palettes/2Controls/GormCellAttributesInspector.[hm]: Added copyright header. * Palettes/2Controls/GormColorWellAttributesInspector.[hm]: Added copyright header. * Palettes/2Controls/GormFormAttributesInspector.m: Added copyright header. * Palettes/2Controls/GormMatrixAttributesInspector.m: Corrected comment. * Palettes/2Controls/GormPopUpButtonAttributesInspector.m: Corrected comment. * Palettes/2Controls/GormProgressIndicatorAttributesInspector.m: Corrected comment. * Palettes/2Controls/GormSliderAttributesInspector.m: Corrected comment. * Palettes/2Controls/GormStepperAttributesInspector.m: Corrected comment. * Palettes/2Controls/GormTextFieldAttributesInspector.m: Corrected comment. * Palettes/3Containers/GNUmakefile: Added table size inspector files. * Palettes/3Containers/GormBrowserAttributesInspector.m: Corrected comment. * Palettes/3Containers/GormNSOutlineView.[hm]: Added copyright header. * Palettes/3Containers/GormTableColumnAttributesInspector.[hm]: Added copyright header. Corrected comment. * Palettes/3Containers/GormTableColumnSizeInspector.m: Corrected comment. * Palettes/3Containers/GormTableViewAttributesInspector.m: Corrected comment. * Palettes/3Containers/GormTableViewSizeInspector.[hm]: Re-added this as it was previously removed. * Palettes/3Containers/GormTabViewAttributesInspector.m: Corrected comment. * Palettes/3Containers/inspectors.m: Moved all categories from containers to here. * Palettes/4Data/GormImageViewAttributesInspector.m: Corrected comment. * Palettes/4Data/GormNSComboBoxAttributesInspector.m: Corrected comment. * Palettes/4Data/GormTextViewAttributesInspector.m: Corrected comment. 2005-08-02 Fabien VALLON * Palettes/2Controls/GormBoxAttributesInspector.m : split file use ok: revert:, clean up and comments. Add NSBox IBObjectAdditions category * Palettes/2Controls/GormBoxAttributesInspector.h : split file clean up and comments * Palettes/2Controls/GormCellAttributesInspector.m: split file use ok: revert: , clean up and comments. Add NSCell IBObjectAdditions category * Palettes/2Controls/GormCellAttributesInspector.h: split file clean up and comments. * Palettes/2Controls/GormFormAttributesInspector.m: split file use ok: revert:, replace optionMatrix by cellPositionSwitch, editableSwitch,selectableSwitch, and scrollableSwitch. clean up and comments. Add NSForm IBObjectAdditions category * Palettes/2Controls/GormFormAttributesInspector.h: split file replace optionMatrix by cellPositionSwitch,editableSwitch, selectableSwitch, and scrollableSwitch. clean up and comments. * Palettes/2Controls/GormNSFormInspector.gorm: replace optionMatrix by cellPositionSwitch,editableSwitch, selectableSwitch, and scrollableSwitch. setNextKeyView * Palettes/2Controls/GormMatrixdAttributesInspector.m: split file use ok: revert:. clean up and comments. Add NSMatrix IBObjectAdditions category * Palettes/2Controls/GormMatrixdAttributesInspector.h: split file clean up and comments * Palettes/2Controls/GormPopUpButtonAttributesInspector.m: split file use ok: revert:, clean up and comments. Add NSPopUpButton IBObjectAdditions category * Palettes/2Controls/GormPopUpButtonAttributesInspector.h : split file clean up and comments * Palettes/2Controls/GormSliderAttributesInspector.m: split file use ok: revert:, clean up and comments. Add NSSlider IBObjectAdditions category. Remove : altForm, knobField, numberOfTicks,snapToTicks, tickPosition Rename : valueForm into valuesForm. clean up & comments. * Palettes/2Controls/GormSliderAttributesInspector.h: split file clean up and comments * Palettes/2Controls/GormNSSliderInspector.gorm : Remove : altForm, knobField, numberOfTicks,snapToTicks,tickPosition Rename : valueForm into valuesForm. Remove : ok: target for NSForms ( use delegate ) * Palettes/2Controls/GormStepperAttributesInspector.m: split file use ok: revert: clean up and comments. Add NSStepper IBObjectAdditions category * Palettes/2Controls/GormStepperAttributesInspector.h: split file Clean up and comments * Palettes/2Controls/GormTextFieldAttributesInspector.m: split file use ok: revert. replace optionsMatrix by editableSwitch, selectableSwitch,scrollableSwitch. clean up and comments. Add NSTextField IBObjectAdditions category. * Palettes/2Controls/GormTextFieldAttributesInspector.h: split file replace optionsMatrix by editableSwitch, selectableSwitch, scrollableSwitch. clean up and comments. * Palettes/2Controls/GormNSTextFieldInspector.gorm: replace optionsMatrix by editableSwitch, selectableSwitch andscrollableSwitch. set NextKeyView: * Palettes/2Controls/GormColorWellAttributesInspector.m: split file renamed bordered in borderedSwitch, initialColor in initialColorWell, disabled in disabledSwitch, tagValue in tagField. remove initialColorSelected:, disabledSelected:, borderedSelected:. use ok: revert: clean up and comments. * Palettes/2Controls/GormColorWellAttributesInspector.h: split file renamed bordered in borderedSwitch, initialColor in initialColorWell, disabled in disabledSwitch, tagValue in tagField. remove initialColorSelected:, disabledSelected:, borderedSelected:. Clean up and comments. * Palettes/2Controls/GormColorWellInspector.gorm: renamed bordered in borderedSwitch, initialColor in initialColorWell, disabled in disabledSwitch, tagValue in tagField. remove initialColorSelected:, disabledSelected:, borderedSelected:. tagField remove ok: target ( use delegate ) * Palettes/2Controls/GormProgressIndicatorAttributesInspector.m : split file emove doubleValue; borderMatrix. use ok: revert: Clean up and comments * Palettes/2Controls/GormProgressIndicatorAttributesInspector.h : split file remove doubleValue; borderMatrix. Clean up and comments * Palettes/2Controls/GormNSProgressIndicatorInspector.gorm: remove doubleValue; borderMatrix * Palettes/3Containers/GormBrowserAttributesInspector.m : split file use ok: revert: , use multipleSelectionSwitch, emptySelectionSwitch, branchSelectionSwitch,separateColumnsSwitch,horizontalScrollerSwitch, and displayTitlesSwitch instead of optionMatrix.clean up and comments Add NSBrowser category ( IBObjectAdditions ) * Palettes/3Containers/GormBrowserAttributesInspector.h : split file use multipleSelectionSwitch, emptySelectionSwitch, branchSelectionSwitch,separateColumnsSwitch,horizontalScrollerSwitch, and displayTitlesSwitch instead of optionMatrix. clean up and comments * Palettes/3Containers/GormNSBrowserInspector.gorm: use multipleSelectionSwitch, emptySelectionSwitch, branchSelectionSwitch,separateColumnsSwitch,horizontalScrollerSwitch, and displayTitlesSwitch instead of optionMatrix. set nextKeyView: * Palettes/3Containers/GormTableViewAttributesInspector.m: split file use ok: revert:, replace selectionMatrix by multipleSelectionSwitch, emptySelectionSwith and columnSelectionSwitch, replace optionMatrix by drawgridSwitch, resizingSwitch and reorderingSwitch.clean up and comments. Add NSTableView category ( IBObjectAdditions ) * Palettes/3Containers/GormTableViewAttributesInspector.h: split file replace selectionMatrix by multipleSelectionSwitch,emptySelectionSwith and columnSelectionSwitch. replace optionMatrix by drawgridSwitch, resizingSwitch and reorderingSwitch.clean up and comments. * Palettes/3Containers/GormNSTableViewInspector.gorm : replace selectionMatrix by multipleSelectionSwitch,emptySelectionSwith and columnSelectionSwitch. replace optionMatrix by drawgridSwitch, resizingSwitch and reorderingSwitch.set nextKeyView: * Palettes/3Containers/GormTableColumnAttributesInspector.m : split file clean up, comments and warnings ( TODO ) Add NSTableColumn category ( IBObjectAdditions ) * Palettes/3Containers/GormTableColumnAttributesInspector.h : split file clean up and comments * Palettes/3Containers/GormTableColumnSizeInspector.m: split file use controlTextDidChange: for the form, clean up and comments. Add IBObjectAdditionsSize category * Palettes/3Containers/GormTableColumnSizeInspector.h: split file clean up and comments. * Palettes/3Containers/ GormNSTableColumnSizeInspector.gorm: remove ok: taget ( use delegate ) * Palettes/3Containers/GNUmakefile : add GormBrowserAttributesInspector.m GormTabViewAttributesInspector.m, GormTableColumnAttributesInspector.m GormTableColumnSizeInspector.m and GormTableViewAttributesInspector. * Palettes/3Containers/inspector.m : remove GormBrowserAttributesInspector GormTabViewAttributesInspector, GormTableColumnAttributesInspector GormTableColumnSizeInspector and GormTableViewAttributesInspector * Palettes/4Data/GormComboBoxAttributesInspector.m: split file * Palettes/4Data/GormImageViewAttributesInspector.m: split file use ok:, revert:, clean up and comments * Palettes/4Data/GormImageViewAttributesInspector.h: split file clean up * Palettes/4Data/GormTextViewAttributesInspector.m: split file replace optionsMatrix by selectableButton, editableButton, multipleFontsButtonand graphicsButton, clean up and comments. Add NSTextView IBObjectAdditions category * Palettes/4Data/GormTextViewAttributesInspector.h: split file replace optionsMatrix by selectableButton, editableButton, multipleFontsButton and graphicsButton, clean up and comments * Palettes/4Data/GormNSTextViewInspector.gorm: replace optionsMatrix by selectableButton, editableButton, multipleFontsButton and graphicsButton 2005-08-01 20:30 Gregory John Casamento * English.lproj/GormPreferences.gorm: Add keyboard equivalents to dropdown for preference panels. 2005-08-01 07:59 Gregory John Casamento * GormCore/GormClassInspector.m: Return an autoreleased copy of the class name from _currentClass. 2005-08-01 05:45 Gregory John Casamento * GormCore/GormClassInspector.m: Remove dopy code from _currentClass. * GormCore/GormPrivate.m: Use ASSIGNCOPY in initWithClassName: * Palettes/1Windows/main.m: Removed FIXME, since Gorm shouldn't show the window decoration changes directly. 2005-07-31 19:14 Gregory John Casamento * Palettes/1Windows/main.m: Addition of allocSubstitute method for NSPanel in the category GormPrivate. 2005-07-31 18:56 Gregory John Casamento * GormCore/GormDocument.m: Correction for bug#13990. * GormCore/GormInspectorsManager.m: Removed uneeded GormISelectionView class. 2005-07-31 10:57 Gregory John Casamento * GormCore/GormInspectorsManager.m: [GormConnectionsInspector ok:] Removed code which blanks out the connector. This allows the user to select connections repeatedly. Suggested by Matt Rice. 2005-07-31 08:43 Gregory John Casamento * GormCore/GormPrivate.m: Reverted previous change in init. 2005-07-30 15:57 Gregory John Casamento * English.lproj/GormPreferences.gorm: Changed class hierarchy. Also added panel outlet. * GormCore/GormClassInspector.m: -[GormClassInspector _currentClass] copy the className. * GormCore/GormPrivate.m: -[GormClassProxy init] copy the className. * Gorm.m: Changed to initialize preferences panel using init. * GormPrefs/GormPrefController.[hm]: Added panel method, changed derivation to a subclass of NSObject, instead of NSWindowController. 2005-07-30 09:30 Gregory John Casamento * Documentation/Makefile.postamble: Generate documentation from headers only. * GormPrefs/GormColorsPref.h * GormPrefs/GormGeneralPref.h * GormPrefs/GormGeneralPref.m * GormPrefs/GormGuidelinePref.h * GormPrefs/GormHeadersPref.h * GormPrefs/GormPalettesPref.h * GormPrefs/GormPrefController.h * GormPrefs/GormShelfPref.h: Added documentation. 2005-07-30 04:29 Gregory John Casamento * GormCore/GormFilePrefsManager.h: Added documentation. 2005-07-30 04:16 Gregory John Casamento * GormCore/GormDocument.m: use versionOfClass: in _replaceObjectsWithTemplates: method. * GormCore/GormFilePrefsManager.[hm]: Added versionOfClass:. 2005-07-30 Fabien VALLON * Palettes/1Window/GormWindowAttributesInspector.[mh] : split files. use ok: revert: methods, remove controls & options Matrix, & replace it by a set of switch buttons. Clean up & comments * Palettes/1Window/GormWindowSizeInspector.{m,h} :split files. use ok: revert: methods. Clean up & comments * Palettes/1Window/main.m : remove GormWindowSizeInspector, GormWindowAttributesInspector classes and move IBObjectAdditions categories into GormWindowAttributesInspector and GormSizeInspector. * Palettes/1Window/GormNSWindowInspector.gorm: remove controls and options matrix, & replace it by a set of switch buttons. * Palettes/0Menus/GormMenuAttributesInspector.{m,h} : split files. use ok: revert: methods, replace menuType matrix by a matrix of Radio buttons.Clean up and comments. * Palettes/0Menus/GormMenuItemAttributesInspector.m: split files. use ok: revert: methods, Clean up and comments. * Palettes/0Menus/MenuInspectors.m : removed * Palettes/0Menus/GormMenuAttributesInspector.gorm : improve ui, use a matrix of radioButtonCell for menu type * Palettes/0Menus/GormMenuEditor.m : rename IBObjectAdditions category 2005-07-28 00:04 Gregory John Casamento * GormCore/GormImage.h: Added documentation. * GormCore/GormImage.m: Properly implemented IBObjectAdditions. * GormCore/GormPrivate.h: Remove illegalClassSubstitution method. * GormCore/GormPrivate.m: Remove illegalClassSubstitution method. * GormCore/GormSound.h: Added documentation. * GormCore/GormSound.m: Properly implemented IBObjectAdditions. * Gorm.m: Removed methods which check for user bundles. 2005-07-27 02:10 Gregory John Casamento * GormPrefs/GormGeneralPref.m: Removed extra calls to synchronize. * GormPrefs/GormHeadersPref.m: ditto 2005-07-27 01:47 Gregory John Casamento * GormCore/GormDocument.h: Added documentation. * GormCore/GormDocument.m: Removed commented code. Corrected problem in [GormDocument instantiateClass:] when switching to the objects view. * GormCore/GormWindowEditor.h: Added documentation. 2005-07-26 22:56 Gregory John Casamento * GormCore/GNUmakefile: Added new GormWindowEditor.h file. * GormCore/GormWindowEditor.m: Reorganized methods, extracted .h * GormCore/GormWindowEditor.h: New file. * GormCore/NSCell+GormAdditions.h * GormCore/NSColorWell+GormExtensions.h * GormCore/NSColorWell+GormExtensions.m * GormCore/NSFontManager+GormExtensions.h * GormCore/NSFontManager+GormExtensions.m * GormCore/NSView+GormExtensions.h: Added documentation. 2005-07-26 21:02 Gregory John Casamento * Palettes/2Controls/GormNSTextFieldInspector.gorm: Correct resize attributes. 2005-07-25 23:26 Gregory John Casamento * GormCore/GormClassEditor.m: [GormClassEditor selectClass:editClass:] add exception handling. * GormCore/GormDocument.m: [GormDocument pasteObjects:type fromPasteboard:] added check for specific pb types. 2005-08-06 08:30 Gregory John Casamento * Version 0.11.0 (Gorm 1.0 release candidate #1) 2005-08-01 20:30 Gregory John Casamento * English.lproj/GormPreferences.gorm: Add keyboard equivalents to dropdown for preference panels. 2005-08-01 07:59 Gregory John Casamento * GormCore/GormClassInspector.m: Return an autoreleased copy of the class name from _currentClass. 2005-08-01 05:45 Gregory John Casamento * GormCore/GormClassInspector.m: Remove dopy code from _currentClass. * GormCore/GormPrivate.m: Use ASSIGNCOPY in initWithClassName: * Palettes/1Windows/main.m: Removed FIXME, since Gorm shouldn't show the window decoration changes directly. 2005-07-31 19:14 Gregory John Casamento * Palettes/1Windows/main.m: Addition of allocSubstitute method for NSPanel in the category GormPrivate. 2005-07-31 18:56 Gregory John Casamento * GormCore/GormDocument.m: Correction for bug#13990. * GormCore/GormInspectorsManager.m: Removed uneeded GormISelectionView class. 2005-07-31 10:57 Gregory John Casamento * GormCore/GormInspectorsManager.m: [GormConnectionsInspector ok:] Removed code which blanks out the connector. This allows the user to select connections repeatedly. Suggested by Matt Rice. 2005-07-31 08:43 Gregory John Casamento * GormCore/GormPrivate.m: Reverted previous change in init. 2005-07-30 15:57 Gregory John Casamento * English.lproj/GormPreferences.gorm: Changed class hierarchy. Also added panel outlet. * GormCore/GormClassInspector.m: -[GormClassInspector _currentClass] copy the className. * GormCore/GormPrivate.m: -[GormClassProxy init] copy the className. * Gorm.m: Changed to initialize preferences panel using init. * GormPrefs/GormPrefController.[hm]: Added panel method, changed derivation to a subclass of NSObject, instead of NSWindowController. 2005-07-30 09:30 Gregory John Casamento * Documentation/Makefile.postamble: Generate documentation from headers only. * GormPrefs/GormColorsPref.h * GormPrefs/GormGeneralPref.h * GormPrefs/GormGeneralPref.m * GormPrefs/GormGuidelinePref.h * GormPrefs/GormHeadersPref.h * GormPrefs/GormPalettesPref.h * GormPrefs/GormPrefController.h * GormPrefs/GormShelfPref.h: Added documentation. 2005-07-30 04:29 Gregory John Casamento * GormCore/GormFilePrefsManager.h: Added documentation. 2005-07-30 04:16 Gregory John Casamento * GormCore/GormDocument.m: use versionOfClass: in _replaceObjectsWithTemplates: method. * GormCore/GormFilePrefsManager.[hm]: Added versionOfClass:. 2005-07-28 23:09 Gregory John Casamento * Palettes/1Windows/GormNSWindowSizeInspector.gorm: Corrected layout. 2005-07-28 00:04 Gregory John Casamento * GormCore/GormImage.h: Added documentation. * GormCore/GormImage.m: Properly implemented IBObjectAdditions. * GormCore/GormPrivate.h: Remove illegalClassSubstitution method. * GormCore/GormPrivate.m: Remove illegalClassSubstitution method. * GormCore/GormSound.h: Added documentation. * GormCore/GormSound.m: Properly implemented IBObjectAdditions. * Gorm.m: Removed methods which check for user bundles. 2005-07-27 02:10 Gregory John Casamento * GormPrefs/GormGeneralPref.m: Removed extra calls to synchronize. * GormPrefs/GormHeadersPref.m: ditto 2005-07-27 01:47 Gregory John Casamento * GormCore/GormDocument.h: Added documentation. * GormCore/GormDocument.m: Removed commented code. Corrected problem in [GormDocument instantiateClass:] when switching to the objects view. * GormCore/GormWindowEditor.h: Added documentation. 2005-07-26 22:56 Gregory John Casamento * GormCore/GNUmakefile: Added new GormWindowEditor.h file. * GormCore/GormWindowEditor.m: Reorganized methods, extracted .h * GormCore/GormWindowEditor.h: New file. * GormCore/NSCell+GormAdditions.h * GormCore/NSColorWell+GormExtensions.h * GormCore/NSColorWell+GormExtensions.m * GormCore/NSFontManager+GormExtensions.h * GormCore/NSFontManager+GormExtensions.m * GormCore/NSView+GormExtensions.h: Added documentation. 2005-07-26 21:02 Gregory John Casamento * Palettes/2Controls/GormNSTextFieldInspector.gorm: Correct resize attributes. 2005-07-25 23:26 Gregory John Casamento * GormCore/GormClassEditor.m: [GormClassEditor selectClass:editClass:] add exception handling. * GormCore/GormDocument.m: [GormDocument pasteObjects:type fromPasteboard:] added check for specific pb types. 2005-07-24 16:43 Gregory John Casamento * GormCore/GormPrivate.h: Removed GormOutlineView.h from the includes. 2005-07-24 16:31 Gregory John Casamento * GormCore/GormClassEditor.m: Call selectRow: method. * GormCore/GormOutlineView.[hm]: Added new selectRow: method. Corrects bug#13754. 2005-07-24 12:29 Gregory John Casamento * Gorm.m: Eliminated [Gorm finishLaunching] and moved default initialization code to init before paletteManager is called so that the palette window is placed correctly. * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m: Added override for saveFrameUsingName: to prevent saving the position of windows during testing in Gorm's defaults. * Resources/Defaults.plist: Added defaults for Inspector, Palettes, and Preferences windows so that they appear at a reasonable position on the screen when Gorm is first used. Corrects bug#13780. 2005-07-24 11:20 Gregory John Casamento * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m: Readded override of orderWindow:relativeTo:. This corrects bug#13838. 2005-07-23 18:02 Gregory John Casamento * GormCore/GormInspectorsManager.m: Remove extra revert: call. * GormLib/IBInspector.m: Touch changes the inspector X to the broken X, per specs. * Gorm.m: [Gorm testInterface] fix for menu disappearance when testing the interface. * Palettes/0Menus/main.m: Added to authors list. 2005-07-23 10:10 Gregory John Casamento * Documentation/Makefile.postamble: Create documentation for GormCore, GormObjCHeaderParser and GormPrefs. 2005-07-21 fabien * Palettes/0Menus/GormMenuInspectors.m : Corrects bug #13872 2005-07-20 23:39 Gregory John Casamento * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m: Reverted previous change. 2005-07-19 00:35 Gregory John Casamento * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m: Removed override for orderWindow:... added sendEvent: to do the same thing, since it's a little more generic. This corrects bug#13838. 2005-07-18 23:54 Gregory John Casamento * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m: Added override for orderWindow:relativeTo: which causes selection of the window by Gorm, if the title bar is clicked. 2005-07-17 15:47 Gregory John Casamento * GormCore/GormClassEditor.m: Added code to prevent memory leak with previous change. 2005-07-17 15:08 Gregory John Casamento * GormCore/GormClassEditor.m: Removed AUTORELEASE for subClassesArray, it was causing a crash. * GormCore/GormClassInspector.m: setObject: conditional which prints a warning if a non-GormClassProxy class is passed in. * GormCore/GormPrivate.m: initWithClassName: conditional which prints a warning if a non-string is used to initialize th GormClassProxy. 2005-07-17 08:42 Gregory John Casamento * GormCore/GormInternalViewEditor.m: -init, prepareForDragOperation:, performDragOperation: removed uneeded IBFormatterPboardType from the list. 2005-07-16 23:34 Gregory John Casamento * GormCore/GormClassInspector.m: -_refreshView removed call to deselectAll: for the actionTable and outletTable. On occasion this was causing the application to go into a notification-update loop. 2005-07-15 21:48 Gregory John Casamento * GormCore/GormInspectorsManager.m: -init, changed NSLog to NSDebugLog. 2005-07-15 00:54 Gregory John Casamento * GormCore/GormClassEditor.m: Added exception handling to portions of code which call itemAtIndex: method on the outline view to prevent any problems. * GormCore/GormInspectorsManager.m: Changed a NSLog to NSDebugLog. 2005-07-14 12:39 Gregory John Casamento * GormCore/GormDocument.m: Minor change to changeView: to switch to the appropriate toolbar item when the view changes automatically while dragging. Also a change to awakeFromNib to select the correct item on startup. 2005-07-14 09:03 Gregory John Casamento * GormCore/GormDocument.m: Implement toolbarSelectableItemIdentifiers in the toolbar delegate so that the items will remain selected showing the current selection. 2005-07-14 00:05 Gregory John Casamento * GormCore/GormInspectorsManager.m: Removed commented out code. * Palettes/3Containers/GormNSTableColumnInspector.gorm: Changed "Is visible at launch" to NO to prevent exception. 2005-07-13 22:51 Gregory John Casamento * Palettes/2Controls/GormButtonEditor.m: Corrected issue with button editing. bug #13756. 2005-07-13 09:01 Gregory John Casamento * GormCore/GormClassEditor.m: Corrected problem selecting NSObject in browser when it's selected in the outline. 2005-07-13 02:17 Gregory John Casamento * GormCore/GormClassEditor.m: Changed code in selectClass:editClass: to use the methods from the GormClassManager as appropriate. Removed do.. while construct since it did the same thing as allSuperClassesOf in GormClassManager. * GormCore/GormClassManager.[hm]: Added new method isRootClass: which returns true if the argument is a root class. Also replaced references to @"NSObject" in a number of places with calls to this method. This makes the code more generic. * GormCore/GormPalettesManager.m: Added check in importClasses:withDictionary: which should allow loading palettes which define root level classes. 2005-07-12 fabien * GormCore/GormClassEditor.m: Fix OutlineView / BrowserView switch Add some warnings. Greg please check the code. You will need to change it when GormClassManager will change ( for root object ) * Palettes/3Containers/inspector.m : Add minimum column size for NSBrowser * Palettes/3Containers/GormNSBrowserInspector.gorm : Ditto 2005-07-11 fabien * Palettes/1Windows/ControlsPalette.gorm : Fix bad layout when doing a matrix of NSForms. * Documentation : Gorm.texi, Update documentation * GormCore/GormInspectorsManager.m : make setInitialFirstResponder working with inspector * Palettes/0Menus/GormMenuInspectors.gorm : set initialFirstResponder * Palettes/0Menus/GormMenuItemAttributesInspector.gorm : Ditto * Palettes/1Windows/GormNSWindowSizeInspector.gorm : Ditto * Palettes/2Controls/GormNSButtonInspector.gorm : Ditto * Palettes/2Controls/GormNSCellInspector.gorm : Ditto * Palettes/3Containers/GormNSTableColumnInspector.gorm : Ditto * Palettes/4Data/GormNSDateFormatterInspector.gorm: Ditto * Palettes/4Data/GormNSNumberFormatterInspector.gorm : Ditto * English.lproj/GormCustomClassInspector.gorm : Ditto * English.lproj/GormScrollViewAttributesInspector.gorm: Ditto * English.lproj/GormViewSizeInspector.gorm : Ditto 2005-07-10 20:37 Gregory John Casamento * English.lproj/Gorm.gorm: Corrected some connections which were causing the "Classes" menu items to be enabled when the shouldn't have been. 2005-07-08 13:34 Gregory John Casamento * Gorm.m: Correction for problem with testing with tables and outline views in testInterface. * Palettes/3Containers/GormNSOutlineView.m: Removed awakeFromNib * Palettes/3Containers/GormNSTableView.m: ditto. 2005-07-08 04:36 Gregory John Casamento * GormCore/GormCustomClassInspector.m: In -(void)_replaceCellClassForObject:className: added checks to make sure the object/cell responds to appropriate messages before call. This prevents an issue when selecting a new custom class. 2005-07-07 22:02 Gregory John Casamento * GormCore/GormCustomClassInspector.m: In the method - (void) _replaceCellClassForObject:className: added logic to automatically replace the cell in a more generic fashion. * GormCore/GormPrivate.m: Added logic to canSubstituteForClass: to determine if it's possible for the class passed in to substitute for the reciever. * Palettes/2Controls/inspectors.m: Removed canSubstituteForClass: implementation for NSSecureTextView. * Palettes/3Containers/GormNSOutlineView.[hm]: Cleaned up initWithCoder: and encodeWithCoder:. * Palettes/3Containers/GormNSTableView.[hm]: Ditto 2005-07-07 13:22 Gregory John Casamento * GormCore/GormControlEditor.m: Removed commented out code in GormControlEditor. * GormCore/GormDocument.m: Removed unused variables. * Palettes/3Containers/GormNSTableView.m: Added encoder methods to the data source/delegate to allow testInterface: to work properly. 2005-07-07 fabien * English.lproj/GormClassInspector.gorm : Improve UI * English.lproj/GormClassPanel.gorm : Ditto * English.lproj/GormCustomClassInspector.gorm : Ditto * English.lproj/GormDocument.gorm : Ditto * English.lproj/GormFontView.gorm : Ditto * English.lproj/GormImageInspector.gorm : Ditto * English.lproj/GormNSSplitViewInspector.gorm : Ditto * English.lproj/GormPrefColors.gorm : Ditto * English.lproj/GormPrefGeneral.gorm : Ditto * English.lproj/GormPrefGuideline.gorm : Ditto * English.lproj/GormPrefHeaders.gorm : Ditto * English.lproj/GormPrefPalettes.gorm : Ditto * English.lproj/GormPreferences.gorm : Ditto * English.lproj/GormScrollViewAttributesInspector.gorm : Ditto * English.lproj/GormSetName.gorm : Ditto * English.lproj/GormShelfPref.gorm : Ditto * English.lproj/GormSoundInspector.gorm : Ditto * English.lproj/GormViewSizeInspector.gorm : Ditto * Palettes/0Menus/GormMenuInspectors.m: Implement the delegate method controlTextDidChange for textField * Palettes/0Menus/GormMenuAttributesInspector.gorm: Improve UI, set setNextView:, initialFirstResponder: ... * Palettes/0Menus/GormMenuItemAttributesInspector.gorm: Improve UI, set setNextView:, initialFirstResponder: ... * Palettes/1Windows/main.m: Implement delegate method controlTextDidChange for textFields * Palettes/1Windows/GormNSWindowInspector.gorm: Improve UI,set setNextView:, initialFirstResponder: ... * Palettes/1Windows/GormNSWindowSizeInspector.gorm: Improve UI,set setNextView:, initialFirstResponder: ... * Palettes/2Controls/inspectors.m: Implement delegate method controlTextDidChange: for textFields * Palettes/2Controls/ControlsPalette.gorm: Improve UI,set setNextView:, initialFirstResponder: ... * Palettes/2Controls/GormNSBoxInspector.gorm: Ditto * Palettes/2Controls/GormNSButtonInspector.gorm: Ditto * Palettes/2Controls/GormNSCellInspector.gorm: Ditto * Palettes/2Controls/GormNSColorWellInspector.gorm : Ditto * Palettes/2Controls/GormNSFormInspector.gorm : Ditto * Palettes/2Controls/GormNSMatrixInspector.gorm : Ditto * Palettes/2Controls/GormNSPopUpButtonInspector.gorm : Ditto * Palettes/2Controls/GormNSProgressIndicatorInspector.gorm : Ditto * Palettes/2Controls/GormNSSliderInspector.gorm : Ditto * Palettes/2Controls/GormNSStepperInspector.gorm : Ditto * Palettes/2Controls/GormNSTextFieldInspector.gorm : Ditto * Palettes/3Containers/inspectors.m: Implement delegate method controlTextDidChange: for textFields * Palettes/3Containers/GormNSBrowserInspector.gorm :Improve UI, set setNextView:, initialFirstResponder: ... * Palettes/3Containers/GormNSTableColumnInspector.gorm :Ditto * Palettes/3Containers/GormNSTableColumnSizeInspector.gorm :Ditto * Palettes/3Containers/GormNSTableViewInspector.gorm :Ditto * Palettes/3Containers/GormTabViewInspector.gorm : Ditto * Palettes/4Data/GormNSComboBoxInspector.gorm : Ditto * Palettes/4Data/GormNSDateFormatterInspector.gorm: Ditto * Palettes/4Data/GormNSImageViewInspector.gorm: Ditto * Palettes/4Data/GormNSNumberFormatterInspector.gorm: Ditto * Palettes/4Data/GormNSTextViewInspector.gorm: Ditto 2005-07-06 10:48 Gregory John Casamento * GormCore/GormDocument.m: changeToViewWithTag: added code to change current selection when switching the editor. 2005-07-05 10:59 Gregory John Casamento * GormCore/GormDocument.m: Corrected problem where the Gorm was incorrectly warning of version upgrade on .gorm files which don't contain windows. Also added documentation/comments for all methods in GormDocument.m. 2005-07-04 21:18 Gregory John Casamento * Gorm.m: In -testInterface corrected a problem with testing interface when menu item is connected to NSOwner. 2005-07-04 20:44 Gregory John Casamento * English.lproj/Gorm.gorm: Cleaned up some duplicate connections * GormCore/GormFilePrefsManager.m: Updated version to 0.10.2 * GormInfo.plist: Updated version to 0.10.2 * Version: Updated version to 0.10.2 2005-07-04 17:53 Gregory John Casamento * English.lproj/Gorm.gorm: Added Layout and Alignment menus. * GormCore/GormDocument.[hm]: Added alignSelectedObjects: and arrangeSelectedObjects: methods. * GormCore/GormProtocol.h: Added alignSelectedObjects: and arrangeSelectedObjects: methods declarations * GormCore/NSView+GormExtensions.[hm]: Added moveViewToFront: and moveViewToBack: methods. * Gorm.m: Added alignSelectedObjects: and arrangeSelectedObjects: methods. 2005-07-03 12:52 Gregory John Casamento * Palettes/4Data/main.m: Minor fix in depositViewResourceFromPasteboard: to prevent crash. 2005-07-03 12:26 Gregory John Casamento * GormCore/GormBoxEditor.m: Minor cleanup. * GormCore/GormControlEditor.m: Removed unecessary code to handle formatter, since it is now handled generically via the dragging delegate code. * GormCore/GormViewEditor.m: Added code in performDragOperation: and other dragging methods to correctly use the dragging delegate code. * GormCore/NSView+GormExtensions.m: Added implementation of delegate registration methods to NSView here. * GormLib/IBApplicationAdditions.h: Added declaration for documentForObject: to the IBDocuments protocol. * GormLib/IBPalette.h: Changed "document" ivar to paletteDocument. * GormLib/IBPalette.m: Changed "document" ivar to paletteDocument. * Gorm.m: Added implementation of documentForObject: * Palettes/2Controls/main.m: Added methods for IBViewResourceDraggingDelegates to handle images and sounds dragged to controls. * Palettes/4Data/main.m: Added methods for IBViewResourceDraggingDelegates to handle formatters being dragged to controls. 2005-07-02 16:12 Gregory John Casamento * GormCore/GormControlEditor.m: Added call to setSelectionFromEditor: in performDragOperation, if the object has a formatter. * GormCore/GormInspectorsManager.m: Changes to refresh the popup button based on the inspector modes in setCurrentInspector: * GormLib/IBInspectorManager.[hm]: New instance variable. Implemented addInspectorModeWithIndentifier:forObject:... * GormLib/IBInspectorMode.[hm]: Added. * Palettes/4Data/inspectors.m: minor cleanup. * Palettes/4Data/main.m: Added code to add the inspector mode to the manager when the object is selected. 2005-06-30 00:21 Gregory John Casamento * English.lproj/GormPrefGeneral.gorm: Remove the preferences to manually change if the inspector or palette is shown. * Gorm.m: -[Gorm applicationWillTerminate:] added code to save the inspector and palette state. 2005-06-20 20:11 Gregory John Casamento * GNUmakefile.preamble: Remove dependency on GL. * GormCore/GormOpenGLView.h: Make a subclass of NSView. * GormCore/GormOpenGLView.m: Comment out uneeded code. 2005-06-20 19:32 Gregory John Casamento * GNUmakefile.preamble: Add -lGL to ADDITIONAL_LIBS * GormCore/GNUmakefile: Added new opengl view. * GormCore/GormCustomView.m: Added include for GormOpenGLView and modified _bestPossibleSuperClass to return the GormOpenGLView. * GormCore/GormOpenGLView.[hm]: Displays a rotating polygon to illustrate that this is a OpenGL view to the user when in test mode. * GormCore/GormViewWithSubviewsEditor.m: Corrected includes. * Gorm.m: Corrected a memory leak in testInterface and endTesting. 2005-06-17 17:33 Gregory John Casamento * Palettes/0Menus/GormNSMenu.m: Code cleanup. 2005-06-17 07:59 Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m * Palettes/0Menus/main.m * Palettes/1Windows/main.m * Palettes/3Containers/inspectors.m: Code cleanup. 2005-06-17 00:47 Gregory John Casamento * GormCore/GormClassManager.m * GormCore/GormDocument.m * GormCore/GormInspectorsManager.m * GormCore/GormObjectEditor.m * GormCore/GormObjectInspector.m * GormCore/GormPalettesManager.m * GormCore/GormResourceEditor.m * GormCore/GormWindowEditor.m: Code cleanup. 2005-06-17 00:24 Gregory John Casamento * Gorm.m: Code cleanup. 2005-06-16 23:49 Gregory John Casamento * Gorm.m: Override "stop:" to call endTesting: if a test session is running, instead of killing the app. 2005-06-16 19:49 Gregory John Casamento * GormLib/IBInspector.m: Added "revert" call in setObject: 2005-06-14 20:39 Gregory John Casamento * GormCore/GormDocument.m: Fix in [GormDocument translate] to properly redisplay the window after translation. 2005-06-12 23:36 Gregory John Casamento * GormCore/GormOutlineView.m: _handleDoubleClick: now calls NSDebugLog 2005-06-12 23:24 Gregory John Casamento * GormCore/GNUmakefile: Added GormProtocol.h to the exported headers. 2005-06-12 23:07 Gregory John Casamento * GormCore/GormClassEditor.m: Modified the data source method outlineView:setObjectValue:forItem: to reject outlet/action changes when the item and the objectValue are the same. * GormCore/GormDocument.m: Changed collectAllObjects to _collectAllObjects, since it is private. * GormCore/GormOutlineView.m: In mouseDown: only send to the super class under certain conditions. 2005-06-11 14:10 Gregory John Casamento * English.lproj/Gorm.gorm: Addition of "Translation" submenu as well as Load Strings and Export Strings * GormCore/GormDocument.h: Declaration of exportStrings * GormCore/GormDocument.m: Implementation of exportStrings * GormCore/GormProtocol.h: Declaration of app level exportStrings: * Gorm.m: Implementation of app level exportStrings: method. 2005-06-11 05:13 Gregory John Casamento * GormCore/GormDocument.m: Improved translate method. * Gorm.m: validateMenuItem: add case to handle translate menu. 2005-06-10 07:45 Gregory John Casamento * English.lproj/Gorm.gorm: Addition of "Translate" menu. * GormCore/GormClassInspector.m: Corrected problem in outlet and action data sources in tableView:setObjectValue: tableColumn:row: * GormCore/GormDocument.h: Added translate method, also added selectClass:editClass: method declarations. * GormCore/GormDocument.m Added translate method, also added selectClass:editClass: method implementation. * GormCore/GormProtocol.h: Added translate method declaration to call from the menu. * Gorm.m: Added translate method implementation which simply calls the method on the currently active document. 2005-06-04 07:41 Gregory John Casamento * English.lproj/GormClassInspector.gorm: Updated to new .gorm file version * English.lproj/GormDocument.gorm: Added new profile to drop down. * English.lproj/GormViewSizeInspector.gorm: Updated to new .gorm file version * GormCore/GormDocument.m: Change to _replaceObjectsWithTemplates: to always replace windows with a GSWindowTemplate. This allows the autoposition and defered logic to work properly when loading this .gorm file in an application. * GormCore/GormFilePrefsManager.m: Bumped version to 0.10.1 * GormCore/GormViewSizeInspector.m: Minor changes. * GormInfo.plist: Bumped version to 0.10.1 * Palettes/0Menus/GormMenuEditor.m: Removed uneeded code. * Palettes/0Menus/GormNSMenu.h: Added +menuWithMenu declaration. * Palettes/0Menus/GormNSMenu.m: Added +menuWithMenu: to initialize one menu from another. * Palettes/0Menus/main.m: Change to use the fontMenu: method in the NSFontManager to build the menu in Gorm's palette. * Palettes/1Windows/GormNSPanel.h: Declarations for new methods. * Palettes/1Windows/GormNSPanel.m: setAutoPositionMask: and autoPositionMask methods added. * Palettes/1Windows/GormNSWindow.h: Declarations for new methods. * Palettes/1Windows/GormNSWindow.m: setAutoPositionMask: and autoPositionMask methods added. * Palettes/1Windows/GormNSWindowSizeInspector.gorm: Additions to handle window positioning and maxsize. * Palettes/1Windows/main.m: Additions to the window inspector to handle maxSize and window position. * Resources/VersionProfiles.plist: New profile entry 2005-05-25 23:38 Gregory John Casamento * GormCore/GModelDecoder.m * GormCore/GormBoxEditor.h * GormCore/GormBoxEditor.m * GormCore/GormClassEditor.h * GormCore/GormClassEditor.m * GormCore/GormClassManager.h * GormCore/GormClassManager.m * GormCore/GormClassPanelController.h * GormCore/GormClassPanelController.m * GormCore/GormControlEditor.h * GormCore/GormControlEditor.m * GormCore/GormCustomView.h * GormCore/GormCustomView.m * GormCore/GormDocument.h * GormCore/GormDocument.m * GormCore/GormFilesOwner.h * GormCore/GormFilesOwner.m * GormCore/GormFunctions.h * GormCore/GormFunctions.m * GormCore/GormGenericEditor.h * GormCore/GormGenericEditor.m * GormCore/GormImageEditor.h * GormCore/GormImageEditor.m * GormCore/GormImage.m * GormCore/GormInspectorsManager.h * GormCore/GormInspectorsManager.m * GormCore/GormInternalViewEditor.h * GormCore/GormInternalViewEditor.m * GormCore/GormMatrixEditor.h * GormCore/GormMatrixEditor.m * GormCore/GormObjectEditor.h * GormCore/GormObjectEditor.m * GormCore/GormObjectInspector.m * GormCore/GormPalettesManager.h * GormCore/GormPalettesManager.m * GormCore/GormPlacementInfo.h * GormCore/GormPrivate.h * GormCore/GormPrivate.m * GormCore/GormProtocol.h * GormCore/GormResourceEditor.h * GormCore/GormResourceEditor.m * GormCore/GormResource.m * GormCore/GormScrollViewEditor.m * GormCore/GormSoundEditor.h * GormCore/GormSoundEditor.m * GormCore/GormSound.m * GormCore/GormSplitViewEditor.h * GormCore/GormSplitViewEditor.m * GormCore/GormViewEditor.h * GormCore/GormViewEditor.m * GormCore/GormViewResourceManager.h * GormCore/GormViewResourceManager.m * GormCore/GormViewSizeInspector.m * GormCore/GormViewWindow.h * GormCore/GormViewWindow.m * GormCore/GormViewWithContentViewEditor.h * GormCore/GormViewWithContentViewEditor.m * GormCore/GormViewWithSubviewsEditor.h * GormCore/GormViewWithSubviewsEditor.m * GormCore/GormWindowEditor.m * GormCore/NSCell+GormAdditions.h * GormCore/NSCell+GormAdditions.m * GormCore/NSColorWell+GormExtensions.h * GormCore/NSColorWell+GormExtensions.m * GormCore/NSFontManager+GormExtensions.h * GormCore/NSFontManager+GormExtensions.m * GormCore/NSView+GormExtensions.h * GormCore/NSView+GormExtensions.m * GormLib/IBApplicationAdditions.h * GormLib/IBApplicationAdditions.m * GormLib/IBCellAdditions.h * GormLib/IBCellProtocol.h * GormLib/IBConnectors.h * GormLib/IBConnectors.m * GormLib/IBDefines.h * GormLib/IBDocuments.h * GormLib/IBDocuments.m * GormLib/IBEditors.h * GormLib/IBEditors.m * GormLib/IBInspector.h * GormLib/IBInspector.m * GormLib/IBInspectorManager.h * GormLib/IBInspectorManager.m * GormLib/IBObjectAdditions.h * GormLib/IBObjectAdditions.m * GormLib/IBObjectProtocol.h * GormLib/IBPalette.h * GormLib/IBPalette.m * GormLib/IBProjectFiles.h * GormLib/IBProjects.h * GormLib/IBResourceManager.h * GormLib/IBResourceManager.m * GormLib/IBViewAdditions.h * GormLib/IBViewProtocol.h * GormLib/IBViewResourceDragging.h * GormLib/InterfaceBuilder.h * GormPrefs/GormColorsPref.h * GormPrefs/GormGeneralPref.m * GormPrefs/GormGuidelinePref.h * GormPrefs/GormPalettesPref.m * Palettes/0Menus/GormMenuEditor.m * Palettes/0Menus/GormMenuInspectors.m * Palettes/0Menus/GormNSMenu.h * Palettes/0Menus/GormNSMenu.m * Palettes/0Menus/main.m * Palettes/1Windows/GormNSPanel.h * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.h * Palettes/1Windows/GormNSWindow.m * Palettes/1Windows/main.m * Palettes/2Controls/GormButtonEditor.h * Palettes/2Controls/GormButtonEditor.m * Palettes/2Controls/inspectors.m * Palettes/2Controls/main.m * Palettes/3Containers/GormNSBrowser.h * Palettes/3Containers/GormNSBrowser.m * Palettes/3Containers/GormNSOutlineView.h * Palettes/3Containers/GormNSOutlineView.m * Palettes/3Containers/GormNSTableView.h * Palettes/3Containers/GormNSTableView.m * Palettes/3Containers/GormTableViewEditor.h * Palettes/3Containers/GormTableViewEditor.m * Palettes/3Containers/GormTabViewEditor.h * Palettes/3Containers/GormTabViewEditor.m * Palettes/3Containers/inspectors.m * Palettes/3Containers/main.m * Palettes/4Data/inspectors.m * Palettes/4Data/main.m * Palettes/GNUmakefile: Change of address for FSF in header. 2005-05-25 23:09 Gregory John Casamento * GNUmakefile * GNUmakefile.postamble * GNUmakefile.preamble * Gorm.m * main.m: Change address of FSF. * Palettes/1Windows/GormNSWindowInspector.gorm: Remove "wants to be color". * Palettes/1Windows/GormNSWindowSizeInspector.gorm: Added window autoposition section and max size section to .gorm file. 2005-05-24 00:28 Gregory John Casamento * English.lproj/GormClassInspector.gorm: Added link to invoke selectAction: when an action is selected, also added link to invoke selectOutlet: when an outlet is selected. * GormCore/GormClassInspector.m: Addition of two new actions selectAction: and selectOutlet: 2005-05-22 00:41 Gregory John Casamento * GormCore/GormClassEditor.m: Correction for outline view resize issues in switchView. 2005-05-21 13:15 Gregory John Casamento * English.lproj/GormPrefGeneral.gorm: Make the top switch off. * GormCore/GormClassEditor.m: Added code in switchView to properly resize the view so that it doesn't shrink when switching between the outline and browser. * GormPrefs/GormGeneralPref.m: Correct problem setting the radio button. 2005-05-21 11:06 Gregory John Casamento * English.lproj/GormPrefGeneral.gorm: Added oulets/actions for matrix to choose outline or browser view. * GormCore/GormClassEditor.h: Added forward declaration for NSBrowser. * GormCore/GormClassEditor.m: Added new private methods and also added code to existing methods to handle the browser view. * GormCore/GormClassManager.m: Removed artificial returning of NSObject in subClassesOf: and allSubclassesOf: so that it's now possible to all root classes when querying for "nil". * GormCore/GormFilePrefsManager.m: Updated version. * GormInfo.plist: Updated version. * GormPrefs/GormGeneralPref.h: Added interfaceMatrix and classesAction: * GormPrefs/GormGeneralPref.m: Implemented classesAction. * Resources/Defaults.plist: Added new default so that the user's preference for the classes view is stored. 2005-05-19 23:54 Gregory John Casamento * Version 0.9.10 2005-05-07 06:50 Gregory John Casamento * Gorm.m: In handleNotification: reset selection owner to nil when document is closed. In validateMenuItem: do not get class manager or selection owner when there is no active document. 2005-05-07 06:35 Gregory John Casamento * GormCore/GModelDecoder.m: Code to remove uneeded classes from the model during processing. * GormCore/GormClassEditor.m: Beginnings of class browser code. 2005-05-04 05:32 Gregory John Casamento * GormCore/GormClassEditor.h: Changed class inheritance added some ivars. * GormCore/GormClassEditor.m: Made the editor indenpendent of the outlineview. It now is an NSBox subclass. Preparing to implement NSBrowser view of class hierarchy. * GormCore/GormClassInspector.m: Changed document extensions to call resetObject: on the editor instead of reset. * GormCore/GormClassManager.m: Removed uneeded variable. * GormCore/GormDocument.m: Changed to use new editor view. * GormCore/GormPrivate.h: Added include. 2005-05-01 01:18 Gregory John Casamento * GormCore/GormClassManager.m: Added code in initWithDocument: which properly adds the methods to FirstResponder. Previously these methods were being added in "ExtraActions" which was not correct. Methods which are added in the palette should be added to "Actions". 2005-04-28 08:50 Gregory John Casamento * GormCore/GormDocument.m: Correct problem in setName:forObject: which was causing a segfault. 2005-04-24 11:16 Gregory John Casamento * GormCore/GormClassManager.m: Remove special case for NSSecureTextField. * GormCore/GormCustomClassInspector.m: Added new private method to call canSubstituteForClass: when appropriate to determine if the class should appear in the class list. * GormCore/GormPrivate.m: Added default implementation of canSubstituteForClass: on NSObject to return NO. * Palettes/2Controls/inspectors.m: Added implementation of canSubstituteForClass: to NSSecureTextField. 2005-04-23 22:57 Gregory John Casamento * GormCore/GormClassEditor.m: Change in performDragOperation: to bring up an alert panel if the header can't be parsed. 2005-04-23 20:13 Gregory John Casamento * GormCore/GormClassEditor.m: Register for all types. * GormCore/GormDocument.h: Added new method allManagedPbTypes. * GormCore/GormDocument.m: Implemented new method. * GormCore/GormObjectEditor.m: Register for all types. * GormCore/GormPrivate.m: Added call to new method which returns the pb types for all resource managers. 2005-04-23 14:37 Gregory John Casamento * GormCore/GNUmakefile: Added new files. * GormCore/GormBoxEditor.m: Added new includes. * GormCore/GormControlEditor.m: Added new includes * GormCore/GormDocument.m: Added new includes. * GormCore/GormGenericEditor.m: Added new includes. * GormCore/GormImageEditor.m: Added new includes. * GormCore/GormInternalViewEditor.m: * GormCore/GormMatrixEditor.m: Added new includes * GormCore/GormObjectEditor.m: Added new header. * GormCore/GormPrivate.h: Removed declarations. * GormCore/GormResourceEditor.m: Include new header. * GormCore/GormScrollViewEditor.m: Include new header. * GormCore/GormSoundEditor.m: Include new header. * GormCore/GormSplitViewEditor.m: Added GormViewKnobs.h * GormCore/GormViewEditor.m: Added GormViewKnobs.h * GormCore/GormViewSizeInspector.m: Added GormViewKnobs.h * GormCore/GormViewWithContentViewEditor.m: Added GormViewKnobs.h * GormCore/GormWindowEditor.m: Added GormViewKnobs.h * GormCore/GormSoundEditor.h: Pulled out of GormPrivate.h * GormCore/GormImageEditor.h: Pulled out of GormPrivate.h * GormCore/GormResourceEditor.h: Pulled out of GormPrivate.h * GormCore/GormObjectEditor.h: Pulled out of GormPrivate.h * GormCore/GormGenericEditor.h: Pulled out of GormPrivate.h * Gorm.m: Added new includes * GormPrefs/GormPalettesPref.m: Eliminated warning. * Palettes/0Menus/GormMenuEditor.m: Removed unused variable. * Palettes/3Containers/GormTabViewEditor.m: Added include to GormViewKnobs.h 2005-04-23 13:11 Gregory John Casamento * GormCore/GNUmakefile: Added new files. * GormCore/GormClassEditor.m: Changed to include new header, and use new method for registration of pboard types. * GormCode/GormClassEditor.h: New file * GormCore/GormDocument.m: Changed to include new header. * GormCore/GormObjectEditor.m: Uses new method to register all pboard types. * GormCore/GormPrivate.h: Added declaration for new method. * GormCore/GormPrivate.m: Added new method to register pboard types. * GormCore/GormResourceEditor.m: Changed to use new method. * NSCell+GormAdditions.h: Removed from GormPrivate.h * NSCell+GormAdditions.m: Removed from GormPrivate.m 2005-04-23 02:50 Gregory John Casamento * GormCore/GormClassEditor.m: Implementation of editor/dragging methods. * GormCore/GormDocument.m: Uncommented the section of the changeToTopLevelEditorAcceptingTypes: method which switches to the classes view. * GormCore/GormGenericEditor.m: Added implementation for fileTypes. * GormCore/GormPrivate.h: Added declaration of fileTypes. 2005-04-22 17:15 Gregory John Casamento * GormCore/GormDocument.h: Changed signature. * GormCore/GormDocument.m: Add another parameter on the new method added previously. * GormCore/GormObjectEditor.m: Get the ext to pass and call changeToTopLevelEditorAcceptingTypes:andFileTypes: if the type is NSFilenamePboardType. * GormCore/GormResourceEditor.m: Get the ext to pass and call changeToTopLevelEditorAcceptingTypes:andFileTypes: 2005-04-22 15:57 Gregory John Casamento * GormCore/GormDocument.h: Added new method. * GormCore/GormDocument.m: Added implementation for changeToTopLevelEditorAcceptingTypes and changeToViewWithTag:. * GormCore/GormObjectEditor.m: Added code to call changeToTopLevelEditorAcceptingTypes: when a given type isn't accepted by this editor. * GormCore/GormResourceEditor.m: Added code to call changeToTopLevelEditorAcceptingTypes: when a given type isn't accepted by this editor. 2005-04-22 12:38 Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: [GormMenuEditor pasteInSelection] removed extra call to attachObject:withParent:. 2005-04-22 12:24 Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: [GormMenuEditor pasteInSelection] corrected problem with pasting the menu items. 2005-04-21 20:40 Gregory John Casamento * GormCore/GNUmakefile: Build the new resource manager. * GormCore/GormDocument.m: Register the new resource manager. * GormCore/GormViewResourceManager.m: New resource manager for views. * GormLib/IBResourceManager.m: Removed views for the main resource manager. 2005-04-21 00:39 Gregory John Casamento * GormCore/GormViewEditor.m: Fix for double "setView:" call. * GormCore/GormViewWindow.m: Code cleanup. 2005-04-20 23:00 Gregory John Casamento * GormCore/GormObjectEditor.m: Added copyright information. * GormLib/IBResourceManager.m: Added exception handling to prevent a problem unarchiving an object from the pasteboard from crashing the app. 2005-04-20 21:51 Gregory John Casamento * GormCore/GormClassManager.m: Restrict instantiation of NSView and subclasses using Command-Shift-I. This means that standalone views can only be created from objects which are draggable from the palette. * GormCore/GormViewEditor.m: Removed logging ever time a standalone view is placed, as I don't consider the functionality experimental at this point. * GormCore/GormViewWindow.m: Size the window to accommodate the view if it already has size, if it doesn't resize the view to the window's dimensions. 2005-04-20 06:27 Gregory John Casamento * Palettes/2Controls/ControlsPalette.gorm: Corrected minor problem with switch and radio buttons in the controls palette. * TODO: Updated completed item. 2005-04-17 20:46 Gregory John Casamento * GormCore/GormCustomClassInspector.m: In _replaceCellClassForObject: className: corrected a problem where the drawBackground flag is set to NO when changing the cell type. It is now preserved when the new cell object is set. * Palettes/2Controls/GormButtonEditor.h: Added ivar. * Palettes/2Controls/GormButtonEditor.m: Corrects a bug reported by Matt Rice where the temporary text field becomes part of the document when saving while editing a button. 2005-04-17 12:06 Gregory John Casamento * GormCore/GormDocument.m: Added code in loadDocument: and saveGormDocument: to use data from the new SubstituteClasses entry in the palette.table. * GormCore/GormFilePrefsManager.m: Updated version to 0.9.9 * GormCore/GormPalettesManager.h: Added substituteClasses ivar. * GormCore/GormPalettesManager.m: Implemented code to use SubstituteClasses entry in palette. * GormInfo.plist: Update version to 0.9.9 2005-04-16 21:44 Gregory John Casamento * GormCore/GormDocument.m: In removeConnector: make the IBWillRemoveConnectorNotification carry aConnector as the object, instead of the document. The same for IBDidRemoveConnectorNotification. 2005-04-16 19:29 Gregory John Casamento * GormCore/GormPalettesManager.m: Slight improvement to palette import. 2005-04-16 17:21 Gregory John Casamento * GormCore/GormClassManager.m: Added code in initWithDocument: to add the actions to the FirstResponder. * GormCore/GormFunctions.h * GormCore/GormFunctions.m: Added function to get the actions from a class. * GormCore/GormPalettesManager.m: Added code to get actions/outlets from classes in exported from palettes. * Palettes/0Menus/GNUmakefile * Palettes/1Windows/GNUmakefile * Palettes/2Controls/palette.table * Palettes/3Containers/GNUmakefile: Added palette.table 2005-04-15 02:14 Gregory John Casamento * GormCore/GormInspectorsManager.m: Patch from Matt Rice to allow connection from a table column. * GormCore/GormPalettesManager.m: Import action methods automatically from the class. * Palettes/3Containers/GormTableViewEditor.m: Patch from Matt Rice to allow connection from a table column. 2005-04-14 01:42 Gregory John Casamento * Resources/ClassInformation.plist: Added NSPopUpButtonCell and NSMenuItemCell. 2005-04-14 00:31 Gregory John Casamento * GormCore/GormClassManager.m: More informative error message when a class can't be found. * GormCore/GormImage.m: Implement objectNameForInspectorTitle. * GormCore/GormInspectorsManager.m: Remove special cases for Image and Sound. * GormCore/GormPalettesManager.m: Beginnings of code to get outlets/actions for exported class. * GormCore/GormResource.h: Added include for IBObjectAdditions.h to GormResource.h * GormCore/GormSound.m: Implement objectNameForInspectorTitle. 2005-04-12 20:27 Gregory John Casamento * GormCore/GormGenericEditor.m: Unsubscribe from all notifications. * GormCore/GormObjectEditor.m: Correct problem preventing connections. 2005-04-11 23:24 Gregory John Casamento * GormCore/GormInspectorsManager.m: Send a call to "revert" to load the contents of the inspector from the object. 2005-04-11 22:46 Gregory John Casamento * GormCore/GormGenericEditor.m: Removed release of resource manager. This is a "weak connection" in the sense that the manager is a shared instance and is retained by the document, not the editor. 2005-04-11 19:22 Gregory John Casamento * GormCore/GormObjectEditor.m: Correction for problem which was causing issues with dragging. 2005-04-11 16:38 Gregory John Casamento * GormCore/GormDocument.m: Improved documentation. 2005-04-11 01:38 Gregory John Casamento * GormLib/IBResourceManager.m: Made addResourcesFromPasteboard: call addResources: for each array for a given type from the pasteboard. 2005-04-11 01:04 Gregory John Casamento * GormCore/GormDocument.m * GormCore/GormObjectEditor.m: Corrected problem with resource manager. 2005-04-10 23:59 Gregory John Casamento * GormCore/GormDocument.m: Moved call to register IBResourceManager here and also correct a memory problem. * GormCore/GormObjectEditor.m: Corrected a problem with registering the types. 2005-04-10 22:42 Gregory John Casamento * GormCore/GormFilePrefsManager.m * GormInfo.plist: Updated version to 0.9.7. 2005-04-10 20:09 Gregory John Casamento * GormCore/GormDocument.h * GormCore/GormDocument.m: addition of the method resourceManagerForPasteboard:. * GormCore/GormObjectEditor.m: Changes to utilize IBResourceManager * GormLib/IBResourceManager.h * GormLib/IBResourceManager.m: Changes to add objects to the document properly. 2005-04-10 18:13 Gregory John Casamento * GormCore/GormDocument.h: Organized methods. * GormCore/GormDocument.m: Added code here to add to top level objects array, when appropriate. * GormCore/GormGenericEditor.m: Prevent close when already closed. * GormCore/GormObjectEditor.m: Removed code which adds to document/top level objects, this is done in the document now. * GormCore/GormPrivate.h: Added new ivar to GormGenericEditor * GormLib/IBResourceManager.h * GormLib/IBResourceManager.m: Corrected implementation of register methods. * Resources/ClassInformation.plist: Added Object. 2005-04-03 07:36 Gregory John Casamento * GormLib/IBResourceManager.[hm]: Implementation of this class. 2005-03-30 23:36 Gregory John Casamento * GormCore/GormFilePrefsManager.m: Update the version of a file, once it's been saved with a new version of Gorm. 2005-03-30 22:43 Gregory John Casamento * GormCore/GormFilePrefsManager.m: Update to version 0.9.5. * GormInfo.plist: Update to version 0.9.5. 2005-03-30 06:09 Gregory John Casamento * Merge: from branch: build_reorg_branch. 2005-03-30 06:09 Gregory John Casamento BRANCH: build_reorg_branch * GNUmakefile: Added GormInfo.plist back to the top level dir * Resources/GormInfo.plist: Removed from here. 2005-03-29 21:42 Gregory John Casamento BRANCH: build_reorg_branch * GNUmakefile * GNUmakefile.preamble * GormPrefs/GNUmakefile * GormPrefs/GNUmakefile.preamble * Palettes/0Menus/GNUmakefile.preamble * Palettes/1Windows/GNUmakefile.preamble * Palettes/2Controls/GNUmakefile.preamble * Palettes/3Containers/GNUmakefile.preamble * Palettes/4Data/GNUmakefile.preamble: Removed GormPrefs framework, it is now a library. * Resources: Moved all .gorm files from here.. * English.lproj: To here. 2005-03-29 Richard Frith-Macdonald BRANCH: build_reorg_branch * GormPalettesManager.m: Fix some coordinate translation bugs when the gui is decorating windows itsself. 2005-03-29 02:47 Gregory John Casamento BRANCH: build_reorg_branch * GormCore/GNUmakefile.preamble: Removed link to GormPrefs. * GormCore/GormPrivate.m: Removed uneeded reference to GormPrefs. 2005-03-29 02:24 Gregory John Casamento BRANCH: build_reorg_branch * GNUmakefile.postamble: Removed kludge for windows. * GormCore/GNUmakefile.preamble: Fixed path. 2005-03-29 01:50 Gregory John Casamento BRANCH: build_reorg_branch * GNUmakefile: Reorganized the build order so that GormCore is built before GormPrefs. 2005-03-29 01:40 Gregory John Casamento BRANCH: build_reorg_branch * GNUmakefile.preamble * GormPrefs/GNUmakefile * Palettes/0Menus/GNUmakefile.preamble * Palettes/1Windows/GNUmakefile.preamble * Palettes/2Controls/GNUmakefile.preamble * Palettes/3Containers/GNUmakefile.preamble * Palettes/4Data/GNUmakefile.preamble: Build and link GormPrefs as a library on windows, for now, until the bug is fixed. 2005-03-29 01:24 Gregory John Casamento BRANCH: build_reorg_branch * Palettes/0Menus/GNUmakefile.preamble * Palettes/1Windows/GNUmakefile.preamble * Palettes/2Controls/GNUmakefile.preamble * Palettes/3Containers/GNUmakefile.preamble * Palettes/4Data/GNUmakefile.preamble: Added lines to all of these files to link the GormCore when the palette is built on windows. 2005-03-29 01:08 Gregory John Casamento BRANCH: build_reorg_branch * Gorm.m: Added new version here, after factoring out of GormCore. * install-windows.sh: Removed. 2005-03-28 19:55 Gregory John Casamento BRANCH: build_reorg_branch * GormCore: New library (may become a framework) * *.[hm]: Except for main.m, moved to GormCore. 2005-03-27 06:24 Gregory John Casamento * GormClassEditor.m: Added addAttributeToClass here. Also added a check to prevent changing the outline row count. * GormOutlineView.m: Removed addAttributeToClass from here. * GormPrivate.h: Moved addAttributeToClass to class editor. 2005-03-26 15:02 Gregory John Casamento BRANCH: build_reorg_branch * GNUmakefile: Add new framework to makefile. * Resources: Removed pref gorms. * GormLib: New framework. Pref gorms moved here as 2005-03-26 10:18 Gregory John Casamento * install-windows.sh: Installation script for windows. This automates the process until the reorg is completed. 2005-03-26 01:49 Gregory John Casamento * GNUmakefile: Correction to previous commit. Compile palettes after GormLib/InterfaceBuilder library. 2005-03-26 01:37 Gregory John Casamento These changes allow the build to work correctly on UNIX and preserve Nicola's changes for mingw. This is temporary until the build is reorganized. * GNUmakefile: Added Palettes back to subprojects back in with conditional for mingw. * GNUmakefile.postamble: Added conditional for targets so that they will work as expected on UNIX. 2005-03-22 04:30 Nicola Pero With these changes, Gorm builds and runs out-of-the-box on Mingw32 with latest gnustep-make. * GNUmakefile (SUBPROJECTS): Do not build Palettes as a subproject because they depend on Gorm.app having been built first. * GNUmakefile.postamble (after-all): Added rule to manually build Palettes after Gorm.app. (after-clean): Same change. (after-distclean): Same change. * Palettes/0Menus/GNUmakefile.preamble: Link ../../Gorm.app/Gorm.exe.a on Mingw. * Palettes/1Windows/GNUmakefile.preamble: Same change. * Palettes/2Controls/GNUmakefile.preamble: Same change. * Palettes/3Containers/GNUmakefile.preamble: Same change. * Palettes/4Data/GNUmakefile.preamble: Same change. 2005-03-21 23:30 Nicola Pero * GormLib/IBSystem.h: Fixed windows32 check for building the library. The library name is libGorm, not libGormLib! Also, simply use extern when exporting on Mingw. * GormLib/GNUmakefile.preamble: Removed special linking additions on Mingw, not needed. * Palettes/0Menus/GNUmakefile.preamble: Use ADDITIONAL_GUI_LIBS, not xxx_LIBRARIES_DEPEND_UPON, to link libGorm on Mingw. * Palettes/1Windows/GNUmakefile.preamble: Same change. * Palettes/2Controls/GNUmakefile.preamble: Same change. * Palettes/3Containers/GNUmakefile.preamble: Same change. * Palettes/4Data/GNUmakefile.preamble: Same change. 2005-03-20 10:17 Gregory John Casamento * GormViewEditor.m: [GormViewEditor performDragOperation:] call [GormDocument setSelectionFromEditor:] with self in order to force the inspector to show the newly added image name. 2005-03-19 16:04 Gregory John Casamento * GormLib/InterfaceBuilder.h: Added new header * GormLib/IBViewResourceDragging.h: New header * GormLib/GNUmakefile: Added new header 2005-03-19 05:39 Gregory John Casamento * GormViewEditor.m: Corrected problem with control snapping to edge when the threshold for the guideline was set lower than 5. * Resources/GormPrefGuideline.gorm: Set minimum of slider to 1. * Resources/GormPrefHeaders.gorm: Adjusted sizing of table. * Resources/GormPrefPalettes.gorm: Corrected background color 2005-03-19 04:57 Gregory John Casamento * Defaults.plist: Added default of 10 for "GuideSpacing". * GNUmakefile: Added new files. * GormColorsPref.h: Removed extra "#" from header. * GormGuidelinePref.[hm]: New controller class for preference module. * GormPrefController.[hm]: Added new preference panel. * GormViewEditor.m: Modifed to use new GuideSpacing preference value instead of a hardcoded value of 10 or 5. * Resources/GormPreferences.gorm: Added new pulldown. * Resources/GormPrefGuideline.gorm: New gui for setting GuideSpacing default. 2005-03-19 03:31 Gregory John Casamento * Defaults.plist: Change default to allow user bundles to YES. 2005-03-11 21:31 Gregory John Casamento * GNUmakefile: Remove Testing directory from makefile. 2005-03-11 21:25 Gregory John Casamento * Testing: Removed the "GormTest" application. Since most .gorm files use classes which will never be linked into that application and since the "test interface" functionality in Gorm itself provides the same functionality, this app is being removed. 2005-03-09 23:58 Gregory John Casamento * Documentation/GNUmakefile: Install docs into correct location under ${GNUSTEP_SYSTEM_ROOT}/Library/Documentation. 2005-03-08 00:15 Gregory John Casamento * GNUmakefile: Added new files. * GormDocument.h: Added header for InterfaceBuilder.h to get the necessary interface declarations. * GormDocument.m: Change to retain and release the last used editor. * NSFontManager+GormExtensions.[hm]: New files. 2005-03-07 22:18 Gregory John Casamento * GormDocument.m: Added code to make the window of the widget selected, the key window. This helps correct Bug#12224. * Palettes/1Windows/GormNSWindow.m: Added method canBecomeKeyWindow to guarantee that it returns YES. 2005-03-06 06:20 Gregory John Casamento * Documentation/Gorm.texi: Added FAQ concerning font modification. 2005-03-05 23:07 Gregory John Casamento * GNUmakefile: Added new class. * GormImageEditor.m: Refactored all of the code into the new parent. Implemented only those methods needed. * GormPrivate.h: Changed hierarchy of GormImageEditor and GormSoundEditor to have GormResourceEditor as their parent * GormResourceEditor.m: New parent for sound/image editors. * GormSoundEditor.m: Refactored all of the code into the new parent class. Implemented needed methods. 2005-03-04 04:04 Gregory John Casamento * GormImageEditor.m * GormPrivate.h: Added declaration for new method. * GormSoundEditor.m: Streamlined drag/drop code in image/sound editors. 2005-03-01 21:34 Gregory John Casamento * GNUmakefile: Added new files. * GormDocument.m: Calls new resource methods. * GormImageEditor.m: Calls new resource methods. * GormImage.[hm]: Now inherits from GormResource. * GormResource.[hm]: Added. New abstract resource class which implements IBResourceFiles. * GormSoundEditor.m: Calls new methods. * GormSound.[hm]: Now inherits from GormResource. * GormSoundInspector.m: Calls new methods. 2005-02-28 20:13 Gregory John Casamento * GormFilePrefsManager.m * GormInfo.plist: Bump application version in CVS. 2005-02-28 19:53 Gregory John Casamento * Version 0.9.2 2005-02-27 12:07 Gregory John Casamento * Documentation/Gorm.texi: Added a question to the FAQ. 2005-02-27 00:22 Gregory John Casamento * Documentation/Makefile.postamble: Now generates autogsdoc documentation for GormLib and places it in the "InterfaceBuilder" directory under Documentation. 2005-02-27 00:03 Gregory John Casamento * Documentation/Gorm.texi: Palette documentation. 2005-02-26 22:14 Gregory John Casamento * Documentation/Gorm.texi: Updating documentation to contain information answering recent questions about encoding. 2005-02-20 12:48 Gregory John Casamento * GModelDecoder.m: Mapped NSCStringText to NSText. 2005-02-19 02:29 Gregory John Casamento * Defaults.plist: Added new default "AllowUserBundles" to disable new code which prevents Gorm from running if a user bundle is present. * Gorm.m: Added code in [Gorm applicationDidFinishLaunching:] to warn the user and quit, unless the above default is set, if there is a user bundle loaded. It will give the user a few panels explaining what's going on. 2005-02-15 23:37 Gregory John Casamento * GormPosingView.[hm]: Removed. 2005-02-15 23:24 Gregory John Casamento * Gorm.m: Disabled poseAs: and poseAsClass: while in Gorm. * Resources/GormClassInspector.gorm * Resources/GormFontView.gorm * Resources/GormImageInspector.gorm * Resources/GormNSSplitViewInspector.gorm * Resources/GormPrefGeneral.gorm * Resources/GormPrefPalettes.gorm * Resources/GormScrollViewAttributesInspector.gorm: made sure that all fonts are system fonts. 2005-02-14 23:35 Gregory John Casamento * GormClassManager.m: changed [GormClassManager parseHeader:] to be able to properly handle categories on existing classes. 2005-02-14 01:00 Gregory John Casamento * GormObjCHeaderParser/OCIVarDecl.m: Corrected problem with reading declarations which have the "*" spaced oddly. Problem reported by Nicolas Roard. 2005-02-13 09:37 Gregory John Casamento * GModelDecoder.m: After gmodel load, mark the document as edited in openGModel:. * GormDocument.m: in setupDefaults: mark the document as edited. 2005-02-13 09:27 Gregory John Casamento * GormDocument.m: in [GormDocument attachObject:withParent:] coercion of id to NSControl to avoid warning about selection of the target method. Changed setSelectionFromEditor: to stop any connection activity when a selection is changed. 2005-02-13 04:46 Gregory John Casamento * GormDocument.m: in -loadDocument: if the extension is .gmodel call the openGModel: method to load it. 2005-02-06 10:43 Gregory John Casamento * GormDocument.m: in -saveAsDocument: return the value returned by -saveGormDocument: when it's called. 2005-02-06 02:13 Gregory John Casamento * Resources/GormViewSizeInspector.gorm: Corrected box title color. 2005-02-05 15:26 Gregory John Casamento * Palettes/0Menus/main.m: Corrected "revert To Saved" to "Revert To Saved". * Palettes/2Controls/GormNSButtonInspector.gorm: Corrected box title color. 2005-02-05 09:16 Gregory John Casamento * GormDocument.m: Improved some of the panel messages when gorm has a problem loading/saving. Added titles. * Gorm.m: Made some of the warning panels have a title. Added code to -testInterface: and -endTesting: to close extra windows opened during testing. * GormPrivate.h: testingWindows ivar to hold windows which were open before testing, so that we know which ones to orderOut when testing ends. 2005-02-02 22:44 Gregory John Casamento * GormDocument.m: -[GormDocument removeConnectionsWithLabel:..] added break to avoid iterating through all connections when the user has responded "NO". * GormFilePrefsManager.m: Update version to 0.9.1 * GormInfo.plist: Update version to 0.9.1 * GormObjCHeaderParser/OCIVarDecl.m: Change to correct problem reading ivars with <...> in them such as id xxx. 2005-02-01 23:40 Gregory John Casamento * Version 0.9.0 2005-01-31 23:34 Gregory John Casamento * GormClassManager.m: Corrected bug#11778. Added code which removes connections when a class is being reparsed. * GormFilePrefsManager.m: Updated file prefs with new version. * GormInfo.plist: Updated plist with new version. 2005-01-31 01:33 Gregory John Casamento * GormDocument.m: In the -[GormDocument removeConnections:..] methods corrected a problem with removing a connector while enumerating throught the list of connectors. This was causing the process to miss some of the connections which should have been removed. * Gorm.m: -[Gorm stopConnecting]: Properly reset the connectionSource and connectionDestination with the connecting process is stopped. Correction for bug#11777. * GormObjectEditor.m: -[GormObjectEditor removeAllInstancesOfClass:] correct problem where all instances were not being removed. 2005-01-30 14:34 Gregory John Casamento * GormObjCHeaderParser/GNUmakefile: Added new files. * GormObjCHeaderParser/OCClass.m: Uses lookAhead function * GormObjCHeaderParser/OCIVarDecl.m: Uses lookAhead function * GormObjCHeaderParser/OCIVar.m: Uses lookAhead function * GormObjCHeaderParser/ParserFunctions.[hm]: New functions for use by the class parser. * Resources/GormDocument.gorm: Corrected background color. 2005-01-30 00:33 Gregory John Casamento * GNUmakefile: Build new file. * NSColorWell+GormExtensions.[hm]: Category which allows the setting of a color into a color well without invoking the action associated with that control. * Palettes/1Windows/main.m: Include new extension. * Palettes/2Controls/inspectors.m: Include new extension. * Palettes/3Containers/inspectors.m: Include new extension. * Palettes/4Data/inspectors.m: Include new extension. 2005-01-29 22:36 Gregory John Casamento * GormDocument.m: in -handleNotification: added code to reset the selection to nil to clear the inspector when the window is miniaturized. 2005-01-29 18:55 Gregory John Casamento * GormClassInspector.m: In -addAction:, -addOutlet:, -removeAction:, -removeOutlet:, -selectClass: made changes to make sure that if the document is not active, that the method will fall through. This prevents a crash when user presses buttons on the class inspector window when the document is miniaturized. * Palettes/2Controls/inspectors.m: Improved error when the .gorm file can't be loaded for GormBoxInspector. 2005-01-28 21:50 Gregory John Casamento * Palettes/2Controls/GormNSStepperInspector.gorm: Corrected problem with inspector. 2005-01-28 00:41 Gregory John Casamento * GormClassInspector.m: Added call to super ok: method. * GormCustomClassInspector.m: Added call to super ok: method. * GormLib/IBInspector.m: Corrected touch method to properly update the document status. Implemented ok: which simply calls touch: in the superclass. * GormNSSplitViewInspector.m: Added call to super ok: method. * GormObjectInspector.m: Added call to super ok: method. * GormScrollViewAttributesInspector.m: Added call to super ok: method. * GormViewSizeInspector.m: Added call to super ok: method. * Palettes/1Windows/GormNSWindowInspector.gorm: Corrected background. * Palettes/1Windows/main.m: Added call to super ok: method for all inspectors. * Palettes/2Controls/GormNSBoxInspector.gorm: Corrected background. * Palettes/2Controls/GormNSButtonInspector.gorm: Corrected background. * Palettes/2Controls/GormNSCellInspector.gorm: Corrected background. * Palettes/2Controls/GormNSColorWellInspector.gorm: Corrected background. * Palettes/2Controls/GormNSFormInspector.gorm: Corrected background. * Palettes/2Controls/GormNSMatrixInspector.gorm: Corrected background. * Palettes/2Controls/GormNSPopUpButtonInspector.gorm: Corrected background. * Palettes/2Controls/GormNSSliderInspector.gorm: Corrected background. * Palettes/2Controls/GormNSStepperInspector.gorm: Corrected background. * Palettes/2Controls/GormNSTextFieldInspector.gorm: Corrected background. * Palettes/2Controls/inspectors.m: Added call to super ok: method. * Palettes/3Containers/GormNSBrowserInspector.gorm: Corrected background. * Palettes/3Containers/GormNSTableColumnInspector.gorm: Corrected background. * Palettes/3Containers/GormNSTableColumnSizeInspector.gorm: Corrected background. * Palettes/3Containers/GormNSTableViewInspector.gorm: Corrected background. * Palettes/3Containers/GormTabViewInspector.gorm: Corrected background. * Palettes/3Containers/inspectors.m: Added call to super ok: method. * Palettes/4Data/GormNSComboBoxInspector.gorm: Corrected background. * Palettes/4Data/GormNSDateFormatterInspector.gorm: Corrected background. * Palettes/4Data/GormNSImageViewInspector.gorm: Corrected background. * Palettes/4Data/GormNSNumberFormatterInspector.gorm: Corrected background. * Palettes/4Data/GormNSTextViewInspector.gorm: Corrected background. * Palettes/4Data/inspectors.m: Added call to super ok: method for all inspectors. * Resources/GormImageInspector.gorm: Corrected background. * Resources/GormViewSizeInspector.gorm: Corrected background. Corrects bug#11346 2005-01-23 00:41 Gregory John Casamento * GormFunctions.m: identifierString() added code which tests the result to see if it's zero length. If it is, it's replaced with "dummyIdentifier". 2005-01-22 15:38 Gregory John Casamento * GormClassEditor.m: Replaced use of the class methods from GormDocument with the appropriate function call. * GormClassInspector.m: Replaced use of the class methods from GormDocument with the appropriate function call. * GormDocument.[hm]: Removed the formatting class methods. * GormFunctions.[hm]: Added indentifierString(), formatAction(), formatOutlet() functions. NOTE: The correct way to apply this formatting is using NSFormatter subclasses. This will be done after the pending release. 2005-01-22 14:21 Gregory John Casamento * GNUmakefile: Reorganized the files in the resources, hearders and source lists. 2005-01-22 12:14 Gregory John Casamento * GormDocument.m: In [GormDocument detachObject:] made [GormDocument setObject:isVisibleAtLaunch:] called only when the object is an NSWindow subclass. * GormImageEditor.m: Added implementation of addObject: to prevent addition of duplicate images. * GormImage.h: Added isEqual: so that containsObject: can find the image. * GormImage.m: Added isEqual: declaration. * GormSoundEditor.m: Added implementation of addObject to prevent addition of duplicate sounds. * GormSound.h: Added isEqual: so that containsObject can find the sound. * GormSound.m: Added isEqual: declaration. 2005-01-11 22:04 Gregory John Casamento * GModelDecoder.m: Default NSWindows being imported from the .gmodel to the default window background color in the method [GModelApplication initWithModelUnarchiver:]. 2005-01-09 01:36 Gregory John Casamento * ClassInformation.plist: Added missing changeFont: method. * GormClassManager.m: Changed code to read only the additions to FirstResponder from the data.classes file. * GormFilePrefsManager.m: Updated version to 0.8.7. * GormImageEditor.m: Made some logs "debug". * GormInfo.plist: Updated version. * GormInternalViewEditor.m: Made some logs "debug". * Palettes/1Windows/GormNSWindowInspector.gorm: Changes to layout * Palettes/1Windows/GormNSWindowSizeInspector.gorm: Same. 2005-01-08 18:36 Gregory John Casamento * GormImage.h: Moved the declaration for setArchiveByName: here. * GormImage.m: Moved the code for the category here. * GormMatrixEditor.m: Included GormImage.h. 2005-01-08 18:06 Gregory John Casamento * GormClassManager.m: Corrected bug#11534. * GormFilePrefsManager.m: Updated alpha version * GormInfo.plist: Updated alpha version 2005-01-08 12:28 Gregory John Casamento * GormViewWithContentViewEditor.m: Change in pasteInView: to move a view to the origin if it's rect is outside the view it's being placed into. 2005-01-03 23:56 Gregory John Casamento * GormDocument.m: Improved resource handling in saveGormDocument: * GormImageEditor.m: Implemented deleteSelection * GormImage.[hm]: Added new init methods. * GormSoundEditor.m: Implemented deleteSelection * GormSound.[hm]: Added new init methods. 2005-01-02 15:11 Gregory John Casamento * GormImageEditor.m * GormSoundEditor.m: Fix to correct exception when dragging from a cell which doesn't contain a resource. 2005-01-01 10:33 Gregory John Casamento * GormLib/IBObjectAdditions.m: Implementation for nibLabel. * GormLib/IBObjectProtocol.h: Better document for nibLabel. 2005-01-01 09:59 Gregory John Casamento * GormLib/IBApplicationAdditions.h * GormLib/IBCellProtocol.h * GormLib/IBConnectors.h * GormLib/IBInspector.h * GormLib/IBObjectProtocol.h * GormLib/IBSystem.h * GormLib/IBViewProtocol.h: Completed all documentation for existing IntefaceBuilder classes. 2005-01-01 02:39 Gregory John Casamento * GormLib/GNUmakefile: Added new headers and new .m file. * GormLib/IBCellAdditions.h: Added include for NSCell.h * GormLib/IBDocuments.h: Added documentation. * GormLib/IBDocuments.m: Added include of IBDocuments.h to get string declarations. * GormLib/IBPalette.m: Implemented IBPaletteDocument. * GormLib/IBProjectFiles.h: New * GormLib/IBProjects.h: New * GormLib/IBResourceManager.[hm]: New * GormLib/InterfaceBuilder.h: Added new headers. 2004-12-31 14:29 Gregory John Casamento * Palettes/1Windows/GormNSWindowInspector.gorm: Added form to allow setting of the miniaturized image by name. * Palettes/1Windows/main.m: Changes to use the form added to the UI. 2004-12-31 08:22 Gregory John Casamento * GormDocument.h: Added GormFilesOwner to @class declaration. * Gorm.m: Made rect drawn around objects thinner to prevent residual lines from remaining when the rect is erased. * Palettes/1Windows/main.m: Simplified includes. 2004-12-28 21:21 Gregory John Casamento * GormImageEditor.m: Added check to see if object responds to setImage: in performDragOperation. * GormImage.m: Moved NSImage category dec/def here. * GormPrivate.h: Removed NSImage category declaration. * GormViewEditor.m: Removed NSImage category definition. 2004-12-28 16:38 Gregory John Casamento * GormPalettesManager.m: Enhancment in loadPalette: to allow loading using either the plist or the strings format for palette.table. 2004-12-28 12:10 Gregory John Casamento * Palettes/1Windows/GormNSPanel.m * Palettes/1Windows/GormNSWindow.m: Initialize the miniaturized window image to nil. 2004-12-28 08:38 Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: Improvement on previous correction. 2004-12-27 22:02 Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: Correction for Bug#11410. 2004-12-27 21:39 Gregory John Casamento * GormLib/IBObjectAdditions.m: Changed some implementations. * GormObjectEditor.m: Removed methods which it was unecessary to override. 2004-12-27 21:21 Gregory John Casamento * GModelDecoder.m: * GormDocument.m: Change to properly handle exception when a class fails to parse. * Gorm.m: Correction for Bug#11415 and also made a changed to discontinue connection when a cut/paste/copy operation is done. * GormObjectEditor.m: Correction for Bug#11415. * Palettes/0Menus/GormMenuEditor.m: Correction for Bug#11412. 2004-12-23 14:52 Gregory John Casamento * GormFilesOwner.h: Added inspector declaration. * GormFilesOwner.m: Changed code in setObject to create an autoreleased mutableCopy of the array and removed FirstResponder from the list to prevent the user from selecting this. * GormPrivate.h: Added the include for GormFilesOwner.h and also removed the inspector declaration from this file. 2004-12-23 13:30 Gregory John Casamento * GormViewEditor.m: In -performDragOperation: copy the image/sound before setting it into the control to make certain any changes made to the original image don't reflect in the system wide image. 2004-12-23 06:20 Gregory John Casamento * Resources/GormClassPanel.gorm: Set nextKeyView for all views in the window and the initialFirstResponder of the window to the table view. 2004-12-23 06:03 Gregory John Casamento * GormClassInspector.m: Fix for issue when loading from gmodel. Corrected _refreshView: and searchForClass: so that if list is nil, the selection isn't set. * Gorm.spec.in: Minor correction. 2004-12-19 09:05 Gregory John Casamento * GormInspectorsManager.m: Added [super init] call to init. * GormLib/IBInspectorManager.m: Corrected init. 2004-12-19 08:38 Gregory John Casamento * GormInspectorsManager.h: Changed parent class. * GormInspectorsManager.m: Added notification IBWillInspectoObjectNotification. * GormLib/GNUmakefile: Added new class. * GormLib/IBInspectorManager.h: New class * GormLib/IBInspectorManager.m: New class * GormLib/InterfaceBuilder.h: Added new class. * Gorm.m: Coerce IBInspectorManager to GormInspectorsManager. 2004-12-18 13:24 Gregory John Casamento * GormLib/IBApplicationAdditions.h * GormLib/IBConnectors.h * GormLib/IBDocuments.h * GormLib/IBEditors.h * GormLib/IBPalette.h * GormLib/IBSystem.h: Changed IB_EXPORT to IB_EXTERN. 2004-12-18 10:05 Gregory John Casamento * GormDocument.m: * GormFilesOwner.m: * Gorm.m: * GormPalettesManager.m: * GormWindowEditor.m: Changed NSRunAlertPanel(...) calls to use nil instead of NULL. NULL shouldn't be used. 2004-12-18 08:53 Gregory John Casamento * GormLib/GNUmakefile: Added new header * GormLib/GNUmakefile.preamble: Added comment. * GormLib/IBApplicationAdditions.h: Add include, change extern to IB_EXPORT * GormLib/IBConnectors.h: Same * GormLib/IBDocuments.h: Same * GormLib/IBEditors.h: Same * GormLib/IBPalette.h: Same * GormLib/IBSystem.h: New file containing declarations for IB_EXPORT for different Operating Systems. * GormLib/InterfaceBuilder.h: Include IBSystem.h. 2004-12-17 21:28 Gregory John Casamento * GormClassInspector.m: Set the double action and target for parentClass. * GormObjectEditor.m: Moved the pasteInSelection method. 2004-12-17 05:48 Gregory John Casamento * GormDocument.m: Changed implementation here to call the one on the object editor. * GormObjectEditor.m: Added implementation for removeAllInstancesOfClass: * GormPrivate.h: Added declaration for removeAllInstancesOfClass: 2004-12-16 05:32 Gregory John Casamento * GormClassEditor.m: added call to removeAllInstancesOfClass: in deleteSelection so that no objects in the objectView can refer to a class that doesn't have a correstponding class in the class manager/class editor. * GormClassManager.h: Added declaration for classNameForObject:. * GormClassManager.m: Added implemented for classNameForObject:. * GormDocument.h: Added declaration of removeAllInstancesOfClass:. * GormDocument.m: Addition of method to remove all instances from the objects view if a class is removed from the classes view. 2004-12-15 01:43 Gregory John Casamento * GormClassEditor.m: Code from -changeView added to select contents of a scrollview instead of the scrollview itself (when appropriate). * GormDocument.m: Moved code from -changeView: to GormClassEditor. * GormPrivate.h: Added methods for changing the selection in the outline view without setting the inspector. 2004-12-14 21:26 Gregory John Casamento * GormClassManager.m: -addClassNamed:withSuperClassNamed: actions:outlets:isCustom: added check for superclass of "FirstResponder". 2004-12-14 21:04 Gregory John Casamento * GormClassEditor.m: Added code in pasteInSelection to prevent the user from pasting a subclass onto FirstResponder. 2004-12-14 06:53 Gregory John Casamento * GormClassEditor.m: Further correction to previous issue. 2004-12-14 06:30 Gregory John Casamento * GormClassEditor.m: Corrected potential issue after delete of a class which is selected. 2004-12-14 06:04 Gregory John Casamento * GormClassEditor.m: Added code in -deleteSelection to copy the selection, if it's a class, added code in copySelection and pasteInSelection to handle copy/paste. * GormClassManager.h: Made variable names conform a little more to standard practice. Also changed the declarations of "NSArray*" to "NSArray *". * GormClassManager.m: Corrected addClassNamed:withSuperClassNamed: actions:outlets:isCustom: to eliminate duplicate actions, outlets from the class being added if they exist on the superclass. * Gorm.m: Changed coercion to id * GormDocument.h: Added declaration for windowAndRect:forObject: * GormLib/IBDocuments.h: Removed the declaration for windowAndRect:forObject: from here as it doesn't belong in the IBDocuments protocol. * GormLib/IBPalette.m: Started implementing the private class IBPaletteDocument. * Gorm.m: Changed some code due to to switch in location of the windowAndRect:forObject: method from IBDocuments.h to GormDocument.h. 2004-12-12 16:00 Gregory John Casamento * GormLib/GNUmakefile: Added new header files. * GormLib/IBViewAdditions.h: Creates a category/informal protocol. * GormLib/IBViewProtocol.h: New file defines IBViewProtocol * GormLib/IBCellAdditions.h: New file for IBCellAdditions, adopts protocol and creates a category/informal protocol. * GormLib/IBCellProtocol.h: New file defines IBCellProtocol 2004-12-12 15:27 Gregory John Casamento * GormClassEditor.m: Corrected problem in -outlineView: shouldEditTableColumn:item: to prevent editing of FirstResponder name in the class editor. 2004-12-12 14:16 Gregory John Casamento * GormClassEditor.m: Implemented new methods. * GormGenericEditor.m: Implemented new methods. * GormLib/IBEditors.h: Added back some of the commented out methods and added also validateEditing and openSubeditorForObject: * GormLib/IBViewAdditions.h: Added the category IBCellAdditions as defined in the IB API Spec. * GormViewEditor.m: Added stub implementations for methods not implemented in the view editor. They are implemented in some of the lower level editors, but it still needs to be compliant. * GormViewWithSubviewsEditor.[hm]: Removed redundant method for deleteSelection. 2004-12-11 18:03 Gregory John Casamento * GormClassManager.m: Correction for reparenting of a class in -setSuperClassNamed:forClassNamed: 2004-12-11 10:22 Gregory John Casamento * GormClassInspector.m: Changed _refreshView to gray out the class field when the FirstResponder is selected since it's name isn't editable. 2004-12-11 00:51 Gregory John Casamento * GormClassInspector.m: Added code in setObject: to show the total outlets and actions in the class. * Resources/GormClassInspector.gorm: Swapped the outlet/action tabs. 2004-12-11 00:21 Gregory John Casamento * GormDocument.m: in handleNotification: changed the condition for IBClassNameChangedNotification so that the inspector is cleared when the class name is modified. This prevents the inspector from accidently being used to modify a class which no longer exists. 2004-12-10 23:57 Gregory John Casamento * Resources/GormClassInspector.gorm: Added proper resizing settings so that the buttons on the outlets and actions tabs resize in the same way. 2004-12-10 17:55 Gregory John Casamento * GormClassEditor.m: Changes to return a item if it's an action/outlet holder without generating a string. * GormOutlineView.m: Modifications to make drawing of the actions and outlets more efficient. 2004-12-08 21:03 Gregory John Casamento * GormOutlineView.m: Corrected a leak. 2004-12-08 19:52 Gregory John Casamento * GormClassEditor.m: Use new ivar to store selected class. * GormClassManager.m: Reimplement addAction:toClassNamed: and addOutlet:forClassNamed:. * GormImageEditor.m: Release the objects in dealloc. * GormPrivate.h: Added new ivar for GormClassEditor to store selected class in. 2004-12-05 18:21 Gregory John Casamento * GormClassEditor.m: Added new methods moved from GormDocument. * GormDocument.m: Moved remove: to deleteSelection on GormClassEditor, also moved createSubclass to GormClassEditor. * GormPrivate.h: Added methods moved from GormDocument to GormClassEditor. * GormLib/IBEditors.h: Added deleteSelection back into the protocol. 2004-12-05 15:40 Gregory John Casamento * GNUmakefile: Added new classes to the makefile. * GormClassEditor.m: Moved some methods from GormDocument to here. * GormDocument.[hm]: Changes for new GormSound/GormImage methods. Also modifications for changes in GormClassEditor. * GormImage.[hm]: New files. * GormImageEditor.m: Added imageForPath: call. * GormImageInspector.m: Added imageForPath: call. * GormInspectorsManager.m: Added GormImage/GormSound include * GormPrivate.h: Added incudes * GormSound.[hm]: New files. * GormSoundEditor.m: Added includes and soundForPath call. * GormSoundInspector.m: Added includes and soundForPath call. * Palettes/0Menus/GormMenuAttributesInspector.gorm: Made correction to allow "Title" field to resize properly. * Palettes/3Containers/GormNSTableViewInspector.gorm: Corrected a slight problem with one of the boxes cutting off text on the bottom. * Resources/GormClassInspector.gorm: Made outlets table resize properly 2004-12-05 07:48 Gregory John Casamento * GormCustomClassInspector.m: Set the max visible columns to 1 in awakeFromNib. * GormDocument.m: Corrected a segfault when reverting to the saved document. * GormObjectEditor.m: Fully implemented IBObjectAdditions.m * Palettes/0Menus/GormMenuAttributesInspector.gorm * Palettes/0Menus/GormMenuItemAttributesInspector.gorm * Palettes/1Windows/GormNSWindowInspector.gorm * Palettes/2Controls/GormNSBoxInspector.gorm * Palettes/2Controls/GormNSButtonInspector.gorm * Palettes/2Controls/GormNSCellInspector.gorm * Palettes/2Controls/GormNSColorWellInspector.gorm * Palettes/2Controls/GormNSFormInspector.gorm * Palettes/2Controls/GormNSMatrixInspector.gorm * Palettes/2Controls/GormNSPopUpButtonInspector.gorm * Palettes/2Controls/GormNSProgressIndicatorInspector.gorm * Palettes/2Controls/GormNSSliderInspector.gorm * Palettes/2Controls/GormNSStepperInspector.gorm * Palettes/2Controls/GormNSTextFieldInspector.gorm * Palettes/3Containers/GormNSBrowserInspector.gorm * Palettes/3Containers/GormNSTableColumnInspector.gorm * Palettes/3Containers/GormNSTableColumnSizeInspector.gorm * Palettes/3Containers/GormNSTableViewInspector.gorm * Palettes/3Containers/GormTabViewInspector.gorm * Palettes/3Containers/inspectors.m * Palettes/4Data/GormNSComboBoxInspector.gorm * Palettes/4Data/GormNSDateFormatterInspector.gorm * Palettes/4Data/GormNSImageViewInspector.gorm * Palettes/4Data/GormNSNumberFormatterInspector.gorm * Palettes/4Data/GormNSTextViewInspector.gorm * Resources/GormClassInspector.gorm * Resources/GormCustomClassInspector.gorm * Resources/GormImageInspector.gorm * Resources/GormNSSplitViewInspector.gorm * Resources/GormScrollViewAttributesInspector.gorm * Resources/GormSoundInspector.gorm * Resources/GormViewSizeInspector.gorm: Modified the inspectors to resize properly. Corrects bug#11216. 2004-12-04 17:43 Gregory John Casamento * GormBoxEditor.m * GormControlEditor.m * GormInternalViewEditor.m * GormMatrixEditor.m * GormNSSplitViewInspector.m * GormObjectEditor.m * GormScrollViewAttributesInspector.m * GormScrollViewEditor.m * GormSplitViewEditor.m * GormWindowEditor.m * Palettes/2Controls/GormButtonEditor.m * Palettes/2Controls/inspectors.m * Palettes/3Containers/GormTabViewEditor.m * Palettes/3Containers/inspectors.m: Replaced all references of GormObjectAdditions with IBObjectAdditions. This makes Gorm more compliant with the IB API spec. 2004-12-03 07:09 Gregory John Casamento * GormClassManager.[hm]: New method allCustomClassNames which returns the customClasses array. * GormDocument.m: Change in handleNotification: method to select the class just added. 2004-12-02 06:20 Gregory John Casamento * GormObjCHeaderParser/OCClass.m: [OCClass parse] added a check to determine if the string is nil before loading it into the scanner. 2004-12-02 06:20 Gregory John Casamento * GormObjCHeaderParser/OCClass.m: added code in parse method to use new class for IVar parsing. * GormObjCHeaderParser/OCIVarDecl.[hm]: New class. This class handles the declaration and breaks it into separate ivar objects. 2004-12-01 02:12 Gregory John Casamento * GormClassManager.m: [GormClassManager parseHeader:] altered method to throw NSInvalidArgumentException instead of a custom exception. 2004-11-29 23:40 Gregory John Casamento * GormPalettesManager.[hm]: [GormPalettesManager loadPalette:] now returns BOOL. * GormPalettesManager.m: [GormPalettesManager openPalette:] returns nil of loadPalette returns NO. * GormObjCHeaderParser/OCHeaderParser.m: Returns NO if there is no class in the file. 2004-11-27 13:22 Gregory John Casamento * GormObjCHeaderParser/OCClass.m * GormObjCHeaderParser/OCIVar.m * GormObjCHeaderParser/OCMethod.m: Added code to parse method to trim the result of any whitespace to make certain that there aren't any extra spaces in the data which could cause problems. 2004-11-27 09:17 Gregory John Casamento * GormObjCHeaderParser/OCClass.m: Condensed parse methods into parse. Corrected a minor issue. 2004-11-27 05:53 Gregory John Casamento * GormObjCHeaderParser/OCClass.h * GormObjCHeaderParser/OCClass.m * GormObjCHeaderParser/NSScanner+OCHeaderParser.h * GormObjCHeaderParser/NSScanner+OCHeaderParser.m * GormObjCHeaderParser/OCMethod.h * GormObjCHeaderParser/OCMethod.m * GormObjCHeaderParser/OCIVar.h * GormObjCHeaderParser/OCIVar.m * GormObjCHeaderParser/OCHeaderParser.h * GormObjCHeaderParser/OCHeaderParser.m * GormObjCHeaderParser/GNUmakefile: New files for class parser. * GormClassManager.m: Changes to use new class parser. 2004-11-24 00:04 Gregory John Casamento * Palettes/3Containers/GormNSOutlineView.h: Removed savedColor and added "Gorm" methods to the header. * Palettes/3Containers/GormNSOutlineView.m: Removed all references to savedColor and commented out select and unselect methods. * Palettes/3Containers/GormNSTableView.h: Removed saved color and commented out select and unselect. * Palettes/3Containers/GormNSTableView.m: Removed all references to savedColor and commented out select and unselect methods. Corrects bug #10118. 2004-11-20 13:27 Gregory John Casamento * Resources: Updated all gorms to latest format. * Palettes: Updated all gorms to latest format. 2004-11-18 00:23 Gregory John Casamento * GNUmakefile: Addition of entries for new NSView+GormExtensions.[hm] files. * NSView+GormExtensions.[hm]: Added to hold extensions for the NSView class in Gorm. * GModelDecoder.m: Changes to minimize warnings during compilation with gcc 3.x. * GormClassEditor.m: Same as above * GormClassManager.m: Same as above * GormDocument.m: Same as above + new code to eliminate orphaned views in _repairFile. * GormGenericEditor.m: Added copyright comment. * GormInspectorsManager.h: Added copyright comment. Made changes to minimize warnings. * GormPrivate.h: Removed AppKit.h include and replaced it with several specific includes to reduce compile issues. This was causing a lot of warnings because of similar selectors. * GormLib/IBEditors.h: removed circular referece to IBDocuments.h * Palettes/3Containers/GormNSBrowser.h: Removed AppKit.h and replaced it with a specific include. * Palettes/3Containers/GormNSBrowser.m: Added specific includes for classes used. * Palettes/3Containers/GormNSOutlineView.m: Same as above. * Palettes/3Containers/GormNSTableView.m: Same as above. * Palettes/3Containers/inspectors.m: fix for method name on GormClassManager which changed from setCustomClass:forObject: to setCustomClass:forName:. Also, other changes which needed to be made to minimize warnings. * Palettes/3Containers/main.m: Removed overly general includes and added specific includes for each class used. Made changes to minimize warnings. 2004-11-17 00:59 Gregory John Casamento * GormViewEditor.m: initWithObject:withDocument: added code to instantiated GormViewWindow if the view being added has no window attached to it. This is to handle standalone views. Correction for Report #10849. * GormViewWindow.m: [GormViewWindow initWithView:] call to setReleasedWhenClosed so that the window isn't released when the view window is closed. This was causing a crash. 2004-11-16 19:19 Gregory John Casamento * GormClassPanelController.[hm]: Added method browserAction:. Changed okButton: to use the value from the textfield. Added new textfield so that the user can type the name of the class. * GormClassPanel.gorm: Added textfield. Changed connection so that the browser now invokes browserAction: on the controller. 2004-11-13 00:03 Gregory John Casamento * GModelDecoder.m: Added GModelMenuTemplate to allow decoding of .gmodels which contain the menu template class. * GormClassManager.m: Changed the allClassNames method to not prepend NSObject now that NSObject is part of the classInformation plist. * GormFunctions.[hm]: Added parameter to pass in the current list of classes from the calling document. * GormClassPanelController.[hm]: New class. * GormClassPanel.gorm: Added interface. 2004-11-12 17:08 Gregory John Casamento * GModelDecoder.m: Changes to improve loading of .gmodel files. * GormClassManager.[hm]: Changed name of setCustomClass:forObject: to setCustomClass:forName: and also removeCustomClassforObject: to removeCustomClassForName: * GormCustomClassInspector.m: Changes to accomodate the new method name. * GormDocument.m: Changes to accomodate the new method name. * GormFilesOwner.m: Corrected an issue with changing the class for the file's owner. Added code which checks both the actions and outlets attached to see if it's necessary to prompt before destroying connections. 2004-11-09 09:08 Gregory John Casamento * Palettes/2Controls/GormNSStepperInspector.gorm: Changed some of the titles and made the layout more consistent with other inspectors. 2004-11-09 08:55 Gregory John Casamento * GormClassInspector.m: Modified the code in the table delegate to use the NSTableView * to determine which table is calling the delegate instead of which tab is currently selected. 2004-11-07 22:56 Gregory John Casamento * GormClassManager.m: Added code to [GormClassManager loadCustomClasses:] to ignore any entry in the data.classes file which is not a dictionary. 2004-11-07 22:56 Gregory John Casamento * GormClassManager.m: Added code to [GormClassManager saveToFile:] and [GormClassManager loadCustomClasses:] to handle adding (and subsequently removing before processing) of a comment which warns users not to manually edit the file. 2004-11-07 22:18 Gregory John Casamento * GormClassInspector.m: [GormClassManager removeAction:] added code to check for a custom class. 2004-11-07 14:27 Gregory John Casamento * ClassInformation.plist: Added entry for NSObject. * Gorm.m: Removed check for adding attribute to class so that "category" actions can be added to existing AppKit classes. * GormClassEditor.m: Removed check for custom in outlineView: addActionToClass: for category method support. * GormClassInspector.m: Changed "isCustom" to isEditable in table delegate method. * GormClassManager.[hm]: Changed grouping of methods. Also made changes to correct various problems found while implementing category support. Fixes Bug#10934. * GormDocument.m: [GormDocument remove:] added check for custom class or for category to allow remove. * GormLib/IBConnectors.m: Added default implementation of nibInstantiate. 2004-11-04 01:43 Gregory John Casamento * GormClassManager.m: Corrected a memory leak in loadFromFile:. * GormClassManager.h: Added FSF/GPL header and organized the methods in the header according to function. 2004-11-03 22:07 Gregory John Casamento * GormClassManager.m: modified addNewActionToClassNamed: and addNewOutletToClassNamed: so that the initial names for outlets and actions are newOutet1, newOutlet2, and similar for actions newAction1:, newAction2:, etc. 2004-11-03 21:45 Gregory John Casamento * GormDocument.m: Added alert panel to loadDocument: so that if the build version loaded from the .gorm file is greater than the one of the running Gorm application, the user is warned that this .gorm file was created with a newer version of the application. * GormFilePrefsManager.[hm]: Added +currentVersion to give the current build number. 2004-10-26 21:18 Gregory John Casamento * GormControlEditor.m: Added code to call the superclass in the dragging methods if the type being dragged isn't a formatter. This was a bug introduced on 10-17. Corrected now. Thanks to Fabien Vallon for the report. 2004-10-24 01:13 Gregory John Casamento * Palettes/0Menus/GNUmakefile.preamble * Palettes/1Windows/GNUmakefile.preamble * Palettes/2Controls/GNUmakefile.preamble * Palettes/3Containers/GNUmakefile.preamble * Palettes/4Data/GNUmakefile.preamble: Removed extra slash for compilation under MinGW on win32. 2004-10-23 20:16 Gregory John Casamento * GormLib/GNUmakefile.postamble: Changed the build process a little to be more compatible with MinGW on win32. 2004-10-17 12:51 Gregory John Casamento * GormControlEditor.m: Added necessary methods for dragging of the formatter to the view. * GormInternalViewEditor.m: Changed initWithObject:inDocument: so that the view doesn't attempt to accept an IBFormatterPboardType object from the drag when it shouldn't. * GormViewEditor.m: Made similar changes here. * Palettes/4Data/inspectors.m: Removed hard coded implementations of tables. Added code to blank inspector when the formatter is detached. * Palette/4Data/GormNSDateFormatterInspector.gorm: Updated with new table. * Palette/4Data/GormNSNumberFormatterInspector.gorm: Updated with new table. 2004-10-03 12:51 Gregory John Casamento * GormMatrixEditor.m: Added performDragOperation implementation to allow the drag and drop of sound/images to a matrix cell. * GormPrivate.h: Moved a category which defines a method called on setArchiveByName to this header so it's useful to more than just the editors. * GormViewEditor.m: Removed category declaration. * Palettes/2Controls/GormButtonEditor.m: Removed some old, commented out code. 2004-10-02 13:08 Gregory John Casamento * Resources/GormDocument.gorm: Changed the spacing of the file view so that the text fields don't get cut off. 2004-10-02 01:15 Gregory John Casamento * Palettes/0Menus/GormNSMenu.m: Modified -[GormNSMenu handleNotification:] so that the menu is no longer closed if the window which displays it isn't visible. This prevents the annoying "Ordering invalid window 0" error. 2004-09-27 07:40 Gregory John Casamento * GormFilePrefsManager.m: Bumped version to 0.8.1 (Alpha) * GormInfo.plist: Bumped version to 0.8.1 (Alpha) * Documentation/Gorm.texi: Updated documentation. 2004-09-26 08:16 Gregory John Casamento * Version 0.8.0 2004-09-25 07:21 Gregory John Casamento * GormInfo.plist: Changed version number to 0.8.0 (Alpha) since we are now, more or less, in "pre-release" mode. * GormFilePrefsManager.m: Updated call which sets version. * Palettes/0Menus/GormMenuAttributesInspector.gorm: * Palettes/1Windows/GormNSWindowInspector.gorm: * Palettes/2Controls/ControlsPalette.gorm: * Palettes/2Controls/GormNSBoxInspector.gorm: * Palettes/2Controls/GormNSButtonInspector.gorm: * Palettes/2Controls/GormNSFormInspector.gorm: * Palettes/2Controls/GormNSMatrixInspector.gorm: * Palettes/2Controls/GormNSPopUpButtonInspector.gorm: * Palettes/2Controls/GormNSProgressIndicatorInspector.gorm: * Palettes/2Controls/GormNSStepperInspector.gorm: * Palettes/2Controls/GormNSTextFieldInspector.gorm: * Palettes/3Containers/GormNSBrowserInspector.gorm: * Palettes/3Containers/GormNSTableViewInspector.gorm: * Palettes/3Containers/GormTabViewInspector.gorm: * Palettes/4Data/GormNSComboBoxInspector.gorm: * Palettes/4Data/GormNSDateFormatterInspector.gorm: * Palettes/4Data/GormNSImageViewInspector.gorm: * Palettes/4Data/GormNSNumberFormatterInspector.gorm: * Palettes/4Data/GormNSTextViewInspector.gorm: Modified spacing of the widgets so that text isn't clipped when using Vera font. 2004-09-24 Adam Fedor * GModelDecoder.m ([GormDocument -openGModel:]): Initialize variable. 2004-09-17 18:07 Gregory John Casamento * VersionProfiles.plist: Updated the profile to properly set the version for NSTextFieldCell which has also been updated since the last release. 2004-09-17 00:54 Gregory John Casamento * GormPalettesManager.m: Added code to [GormPalettesManager setCurrentPalette:] to change the title to reflect the name of the palette currently selected. This makes it easier for the developer to navigate the palettes. 2004-09-17 00:54 Gregory John Casamento * Palettes/2Controls/ControlsPalette.gorm: Removed old 14pt. system title widget and added some widgets which are standard sized which use the system defined fonts. * Palettes/2Controls/main.m: Changed the location of the pulldown, since it isn't in the .gorm. 2004-09-12 20:06 Gregory John Casamento * Gorm.m: Made some changes in [Gorm testInterface] and [Gorm endTesting] to change the icon when testing and also to modify the menu and quit titles so that it is obvious to the user that Gorm is in testing mode and has not died. * Images/GormTesting.tiff: Alternate icon used when Gorm is testing. 2004-09-08 22:00 Gregory John Casamento * Gorm.m: Removed main function from Gorm class file. * main.m: Added main function here. 2004-09-07 21:00 Gregory John Casamento * Gorm.m: Removed some old code which measured the startup time for the application. * GormDocument.m: Removed previous temporary fix. * Palettes/3Containers/GormTableViewEditor.m: Correction for recently discovered crash. The problem is located here. I have added a retain which seems to stop the crash, but I need to find a better solution. Also removed some old commented out code. * Palettes/3Containers/inspectors.m: Properly indented some code. 2004-09-06 17:39 Gregory John Casamento * Gorm.m: * GormInspectorsManager.m: * GormInternalViewEditor.m: * GormMatrixEditor.m: * GormViewKnobs.m: * GormWindowEditor.m: Removed some old FIXME comments which were no longer appropriate or which have already been addressed. 2004-09-06 15:30 Gregory John Casamento * GormDocument.m: Temporary fix for crash. Corrects a problem with document deallocation, until I can find a more permanent solution. 2004-09-06 08:52 Gregory John Casamento * ClassInformation.plist: Added missing NSImageCell class description. * Palettes/3Containers/inspectors.m: Corrected issue with getting the class name of the data cell in [GormTableColumnAttributesInspector _getCellClassName]. 2004-09-06 08:38 Gregory John Casamento * ClassInformation.plist: Reformatted to canonical plist. Suggested by Deek/Jeff. * Palettes/3Containers/GormNSTableColumnInspector.gorm: Added title and made the table draw the grid. 2004-09-05 12:17 Gregory John Casamento * Palettes/3Containers/inspectors.m: Added _getCellClassName to GormTableColumnAttribitesInspector to get the cell class for the inspector. Also modified _getValuesFromObject: to call the method and display the cell class name in the table. Modified setValuesFromControl to add the object to the document and assign the correct custom class. 2004-09-05 10:15 Gregory John Casamento * Palettes/3Containers/GormNSTableColumnInspector.gorm: Made changes to allow user to edit the tableColumn dataCell. * Palettes/3Containers/inspectors.m: Added code for the delegate and datasource of the table added to the inspector. Also modified methods _getValuesFromObject and _setValuesFromControl: in GormTableColumnInspector to accommodate changing the dataCell and redisplaying the tableView which the column belongs to. 2004-08-28 16:43 Gregory John Casamento * GormCustomView.m: Modified _bestPossibleSuperClass to return NSView if the class isn't defined or is not an NSView subclass. 2004-08-28 11:00 Gregory John Casamento * Gorm.m: Added calls to [GSClassSwapper setIsInInterfaceBuilder:] to shut off the custom class -> real class morphing when testing. Added implementation for method which changes the static value of the flag as well called setIsInInterfaceBuilder:. * GormDocument.m: Added calls in loadDocument: to [GSClassSwapper setIsInInterfaceBuilder:] to turn off custom class conversion while loading the .gorm document. * GormCustomView.m: Added implementation of a method called _bestPossibleSuperClass to get the best substitute for the custom class specified when testing the interface. This allows the user to see a more accurate picture of what the gui will look like when it's done. 2004-08-25 22:28 Gregory John Casamento * Palettes/1Windows/GormNSWindow.m: Removed canBecomeKeyWindow method. This was returning NO and preventing the method user from setting the font. 2004-08-23 22:28 Gregory John Casamento * GormClassInspector.m: Corrected bug introduced a few days ago. The actions tag in the class inspector wasn't functioning correctly. 2004-08-23 15:06 Gregory John Casamento * Palettes/1Windows/GormNSPanel.[hm]: * Palettes/1Windows/GormNSWindow.[hm]: Changed the name of the styleMask method to _styleMask. Since this serves as a "proxy" of the original value so that it can be edited without effecting the window, it shouldn't have the same name as the method in the parent class anyway. The new window decoration code was calling this method. * Palettes/1Windows/main.m: [GormWindowAttributesInspector _setValuesFromControl:] and [GormWindowAttributesInspector _getValuesFromObject] changed to use new method name. 2004-08-21 00:20 Gregory John Casamento * Palettes/1Windows/GormNSPanel.m: * Palettes/1Windows/GormNSWindow.m: Added code to prevent redundant release and subsequent crash. 2004-08-18 00:20 Gregory John Casamento * GormClassEditor.m: Cleaned up some code. * GormClassInspector.m: Added code in the data source for both the GormActionDataSource and GormOutletDataSource classes in the class inspector to call the method in GormDocument which removes connections when a connections' name changes. Corrects Bug #100026. * GormMenuEditor.m: If a menu item being added to a popup has a submenu, reject it. 2004-08-13 18:30 Gregory John Casamento * Gorm.m: Disabled class parser menu item in [Gorm validateMenuItem:]. * GormClassManager.m: [GormClassManager parseClass:] commented out contents of this method. The class parser needs to be replaced and it shouldn't be used until it's rewritten. 2004-08-12 21:41 Gregory John Casamento * Gorm.m: [Gorm validateMenuItem:] deselect the cut, delete, paste, etc. items for top level objects which cannot be removed. * GormDocument.m: Simplified implementation of [GormDocument isTopLevelObject:] to simply check in the set of top level objects. 2004-08-11 22:41 Gregory John Casamento * GormDocument.[hm]: Added back isTopLevelObject:. 2004-08-11 07:18 Gregory John Casamento * GormDocument.m: Removed the delegate and data source for the outline view. Changed the code in init to use the GormClassEditor as the outline view, instead of instantiating two different classes. I also changed the coded in other areas where "classEditor" was being used. Removed an uneeded method. * GormClassEditor.m: Added the delegate here. Added the initialization code from GormDocument init to the init method here. * GormPrivate.h: Made GormClassEditor into a subclass of GormOutlineView. This ultimately makes the code cleaner as it unifies the view/editor for the class editor. 2004-08-09 17:18 Gregory John Casamento * GormFilePrefsManager.m: The method showIncompatibilities: added call to "center" method on iwindow so that the incompatibilities window shows up in the center of the screen. 2004-08-08 16:46 Gregory John Casamento * Resource/GormDocument.gorm: Made text label lengths a little longer. 2004-08-08 16:33 Gregory John Casamento * Palettes/0Menus/GormNSMenu.m: Changed the code in handleNotification to not call edited object blindly. It now checks to make sure the object responds to the message before calling. 2004-08-08 13:43 Gregory John Casamento * Palettes/1Windows/GormNSWindow.m: Removed some debugging information. 2004-08-08 13:23 Gregory John Casamento * GormDocument.[hm]: Added ivar isDocumentOpened to track when document is opened and closed. The document was being made active while closing and was causing an issue with some of the windows in the document being edited being brought to the front even though the document itself had been deallocated. This is the permanent fix for the previously discovered issue. * Palettes/1Windows/GormNSWindow.m: Added canBecomeKeyWindow which returns NO. The edited window should never be able to become either key or main window within the application. 2004-08-07 06:10 Gregory John Casamento * GormObjectEditor.m: Temporary fix for recently discovered crash. 2004-08-06 07:20 Gregory John Casamento * Palettes/GormMenuEditor.m: Added rightMouseDown: method to effectively ignore when the right mouse button is pressed when over a menu that is being edited. This was causing the problem described in Bug#9827. 2004-08-05 01:36 Gregory John Casamento * Palettes/GormNSMenu.m: Added code in the initWithCoder: method to subscribe to the notification which indicates a selection change. When the notification is recieved, if the menu is owned by a popup the menu is closed. This corrects Bug#9771. 2004-08-04 01:08 Gregory John Casamento * GormPalettesManager.m: -[GormPalettesManager loadPalette:] added code to made sure that the palette view cannot exceed the maximum size. This prevents accidentally causing the issue cited in the previous entry. 2004-08-04 00:52 Gregory John Casamento * GormDocument.m: -[GormDocument setupDefaults:] changed size of the window for a new palette. If it's too big it causes problems with event handling in the palettes. * Palettes/2Controls/GNUmakefile: Added ControlsPalette.gorm * Palettes/2Controls/main.m: Removed much of the code from the ControlsPalette class. It's not needed now that the palette uses a .gorm file. * Palettes/2Controls/ControlsPalette.gorm: New gui for the palette. 2004-08-02 23:00 Gregory John Casamento * GormViewEditor.m: Added stub for initWithCoder just for completeness. * Palettes/2Controls/GormButtonEditor.m: Change references to xDist and yDist to new names from NSCell.h 2004-08-02 08:54 Gregory John Casamento * GormPalettesManager.m: Clarified error message when unable to load palettes. 2004-08-02 00:54 Gregory John Casamento * GormPrefController.m: Center the window the prefs appear in. Changed [GormPrefController awakeFromNib] to center the window. 2004-08-02 00:14 Gregory John Casamento * Palettes/2Controls/inspectors.m: Reversion of previous change. The real problem was that in setObject: the _setValuesFromObject: method was being called unnecessarily. The call has been removed. 2004-08-01 23:17 Gregory John Casamento * GormLib/IBEditors.m: Removed some old comments which are no longer pertinent. Added documentation for all methods. * GormLib/IBObjectAdditions.m: Added documentation for all methods. * GormLib/IBPalette.h: Clarified documentation of one of the methods. * Palettes/0Menus/GormNSMenu.m: Removed some old commented out code. Changed superclass of GormNSMenuWindow to NSPanel. * Palettes/2Controls/inspectors.m: Made the first two lines conditional for NSForm and subclasses. These were causing a bug which was making it difficult to edit button matrices since the title would revert when clicking on on the next button. This corrects issue #9830. 2004-07-27 02:15 Gregory John Casamento * GormLib/IBInspector.m: Change the name of the method called when receiving IBDocumentWillCloseNotification to _releaseObject: instead of handleNotification:. This prevents confusion as some of the subclasses define handleNotification for other purposes. * GormDocument.m: Modified the code in instantiateObject so that NSView itself can be instantiated. 2004-07-27 02:15 Gregory John Casamento * Gorm.m: Cleaned up some commented out code. * GormDocument.m: Added code in [GormDocument instantiateClass] to add the appropriate information to the document when an NSView subclass is instantiated in the classes view. This is for "standalone view" support. Some additional cleanup. * GormGenericEditor.m: The editor wasn't calling [GormDocument editor:didCloseForObject:] as it should when the editor is closed. Added implementation for isOpened to give any subeditors the correct response when the editor is opened. * GormInternalViewEditor.m: Added code to show the appropriate image when we have a standalone view in the document. * GormPrivate.h: Added declaration for isOpened to GormGenericEditor class declaration. * GormViewEditor.h: Added ivar for GormViewWindow. * GormViewEditor.m: Added code in activate, deactivate, and resetObject to properly show the standalone view. This allows the user to see and edit the view. * GormViewWindow.[hm]: completed implementation of this class for use by the GormViewEditor. * GormLib/IBEditors.h: Properly documented resetObject. * GormLib/IBInspector.m: Added code which releases objects held by the inspector after the document has been released. This prevents problems with old objects being retained in memory by the inspectors until another object is selected. * Palettes/0Menu/GormNSMenu.m: corrected a crash caused by a recent change. * Palettes/3Containers/GormNSOutlineView.m: Added allocSubstitute method. * Palettes/3Containers/GormNSTableView.m: Added allocSubstitute method. 2004-07-20 20:04 Gregory John Casamento * GormDocument.m: Leak fixes and general clean up. * GormGenericEditor.m: Same. * GormImageEditor.m: Same. * GormViewEditor.h: Same. * GormWindowEditor.m: Same. * Palettes/0Menus/GormMenuEditor.m: Same. * Palettes/0Menus/GormNSMenu.m: Same. * Palettes/1Windows/GormNSPanel.h: Added new method so that the window setting "is released when closed" is saved, but doesn't effect the window displayed in Gorm. This presents some tricky memory management problems. * Palettes/1Windows/GormNSPanel.m: Same. * Palettes/1Windows/GormNSWindow.h: Same. * Palettes/1Windows/GormNSWindow.m: Same. * Palettes/1Windows/main.m: Added code necessary in the inspector to use the new method. 2004-07-17 17:54 Gregory John Casamento * GormFilePrefsManager.m: Removed reference to math.h and values.h in includes. They were there temporarily for something which I ended up not doing anyway. Causing compilation problem on FreeBSD. 2004-07-15 21:43 Gregory John Casamento * Gorm.m: Added a check in applicationDidFinishLaunching: to make certain the user is using the right version of GNUstep by checking for a recent signature change in GSNibContainer. * ClassInformation.plist: Added redo: and undo: to the list of methods on the first responder. * GormFilePrefsManager.m: Changed a lot of the NSLogs to NSDebugLog. 2004-07-12 23:08 Gregory John Casamento * GormImageEditor.m: [GormImageEditor initWithObject:inDocument:] added call to [GormPalettesManager importedImages] to return the images imported by any custom palettes. * GormSoundEditor.m: [GormSoundEditor initWithObject:inDocument:] added call to [GormPalettesManager importedSounds] to return the sounds imported by any custom palettes. * GormPalettesManager.m: Changed the return of [GormPalettesManager importClasses:withDictionary:], added [GormPalettesManager importImages:withBundle:], [GormPalettesManager importSounds:withBundle:], [GormPalettesManager importedImages], and [GormPalettesManager importedImages]. These methods are used to get the images and sounds from a palette so that they can be used from Gorm by the user. * GormPalettesManager.h: Added banner. 2004-07-11 23:40 Gregory John Casamento * GormDocument.m: saveGormDocument.m: Changes to prevent a new gorm from being saved twice. This was an innocuous problem as it would simply overwrite the same .gorm with itself. Added code to set isOlderArchive in loadDocument: method. Added code to call [GormFilePrefsManager setClassVersions] and [GormFilePrefsManager restoreClassVersions] in beginArchiving and endArchiving respectively to set and reset the versions of classes which need to be used for each .gorm file version to be saved. Updated changeView: method to switch to the filePrefsView when clicking on the button. Added code to the toolbar delegate to add the "File" button to the document toolbar. Added code to loadDocument to load the data.info file if it's present, if not we simply use the defaults. * GormDocument.h: Added new ivars for isOlderArchive, filePrefsView, and filePrefsManager. * GormFilePrefsManager.[hm]: New files. * GormPalettesPref.[hm]: New files. * GormPrefsPalette.gorm: new interface for palette loading. * GormDocument.gorm: Updated with new window to view incompatibilities and controller for new "file" document button. * GormPreferences.gorm: Addition of palettes in pulldown. * GormClassManager.[hm]: Added - (BOOL) addClassNamed: (NSString*)class_name withSuperClassNamed: (NSString*)super_class_name withActions: (NSArray*)_actions withOutlets: (NSArray*)_outlets isCustom: (BOOL) isCustom; So that classes can be added with out adding them to the custom list. Added logic in "init" to get the list of classes imported by the palettes manager and add them into the master list of classes. This allows the user to work with the classes added by the palette. * GormFunctions.[hm]: appVersion function to calculate a useful value which can be used to compare against easily when reading. This will allow gorm to tell if this file was created with an older or newer version of Gorm.app and take appropriate action. * GormObjectEditor.m: Added capability to place non-UI instances in the objects view directly. This will allow the user to place arbitrary non-ui objects in a Gorm file. It will be useful for adding DB objects or other things which a .gorm file might need. * GormPalettesManager.[hm]: Added [GormPalettesManager importedClasses] and [GormPalettesManager importClasses:withDictionary:] adds the classes from the list in the palette.table. * GormLib/IBPalette.h: Changed name of ivar. This ivar wasn't properly named. It should have been originalWindow. This issue was causing the .gorm load to not make a needed connection. * GormLib/IBPalette.m: Change to read palette.table as a property list instead of strings file format. This was needed to facilitate the reading of all of the classes, sounds and images a palette might import. Also modified to correctly load the nib file. * Palettes/0Menus/main.m: Corrected window to originalWindow as detailed above. It was referred to in a few places by the old name. * Palettes/1Windows/main.m: same. * Palettes/2Controls/main.m: same. * Palettes/3Containers/main.m: same. * Palettes/4Data/main.m: same. * Palettes/2Controls/inspectors.m: Change to clarify the autoenable switch on pulldown buttons. * Palettes/2Controls/GormNSPopUpButtonInspector.gorm: Corresponding .gorm file change for the above. Added new outlet and made new connection. 2004-07-09 16:24 Gregory John Casamento * Palettes/3Containers/GormNSTableViewInspector.gorm: Missing connection to ok: from the tag form was causing the table not to save the value. 2004-06-30 20:14 Gregory John Casamento * GormDocument.m: Added "Compatibility Warning" alert panel to [GormDocument saveGormDocument:]. If the user loads a version 0 file and saves it will give a warning telling the user that the new version isn't compatible with older releases of GNUstep. * GormDocument.h: Added ivar to keep track of whether we are going to upgrade the version of the .gorm file or not. 2004-06-30 01:45 Gregory John Casamento * GormDocument.m: [GormDocument loadDocument:] the application was not picking up subclasses of GSNibItem (GormObjectProxy) properly from version 0 files. I needed to add a loop which iterates through the objects, since the GormObjectProxy doesn't call the super class's initWithCoder: method. 2004-06-28 23:14 Gregory John Casamento * Gorm.m: -[Gorm testInterface:] changed awakeWithContext: call to use new signature. * GormDocument.m: [GormDocument rebuildObjToNameMapping] added logic to add all of the objects in the topLevelObjects set to the objects view. Modified [GormDocument attachObject:toParent:] so that any top level object which is attached, such as a window, the main, menu, or a controller is automatically added to the topLevelObjects set. Modified [GormDocument loadDocument:] so that the topLevelObjects set is properly merged into the current document's data structures. [GormDocument setupDefaults:] removed explicit call to [GormDocument setName:forObject:] since the attachObject:toParent: method automatically makes the new menu in a .gorm which doesn't have any menus the main menu and adds it to the topLevelItems array. * GormPalettesManager.m: Removed some of the palette prefs code for now so I could concentrate on the version update. * GormSoundView.m: Commented out currently unused function. * Resources/Gorm.gorm: Updated to a version 1 gorm file. This prevent someone from running the new Gorm with the old gnustep which doesn't contain the recent changes. 2004-06-27 08:45 Gregory John Casamento * Gorm.m: -[Gorm testInterface:] removed NSWindowsMenu and NSServicesMenu from the nameTable of the .gorm being tested. This prevents an exception because of problems re-setting these on the fly. * GormPalettesManager.m: The beginnings of getting the palettes from a default rather than being hardcoded. This allows greater flexibility in adding custom palettes to Gorm later on. 2004-06-26 18:10 Gregory John Casamento * GormPalettesManager.m: Removed line in -init which observes IBDidDeleteConnectionNotification in GormConnectionInspector. It was causing a number of bugs since it could potentially modify the connection prior to adding it to the connections list. Added method _selectAction: which is used to select the action without going through all of the other code in _internalCall:. * GormDocument.m: Added code in NSNibConnector category to let isEqual immediately return true if the object and self are precisely the same object. * GormClassInspector.m: Added code to change the color of the textfield to grey if the class isn't editable and to white if the class name is editable. 2004-06-26 08:25 Gregory John Casamento * GormPalettesManager.m: There was problem which crops up when the user has many connections to the same object both action/outlet in the same list. When disconnecting it the inspector, because of a memory leak, was deleting the outlet & the action following it. This was happening inconsistently and would cause a blank line to appear in the connections inspector when the user would click on the object. This was reported as Bug #9461. 2004-06-25 01:33 Gregory John Casamento * GormDocument.m: [GormDocument(GormOutlineDataSource) outlineView:setObjectValue:forTableColumn:byItem:] added code to ignore the value which comes if it is nil. This corrects a recent problem caused by a "fix" in gui's NSTableView. * GormClassInspector.m: Changes to allow the user to change the class name when it's a custom class that's being edited. * GormClassInspector.gorm: Changes to facilitate the above modification. 2004-06-24 01:33 Gregory John Casamento * Gorm.m: [Gorm close:] the window is already released when the document is released and the code had an "setReleasedWhenClosed" which was call which was causing an extra release and subsequently a core dump when selecting the "Close" item from the document menu. 2004-06-24 01:33 Gregory John Casamento * GormDocument.m: Additions to [GormDocument attachObject: withParent:], [GormDocument loadDocument:], [GormDocument setupDefaults:] to move the main menu appropriately when it is either added to the documnent, loaded, or added when the user selects the "Application" type from the New menu. This helps alleviate confusion when editing the menu. 2004-06-22 23:33 Gregory John Casamento * GormDocument.m: A fix in -[GormDocument pasteType: fromPasteboard: parent:] to retain objects unarchived from the pasteboard to prevent a recently discovered segfault. 2004-06-21 23:33 Gregory John Casamento * GModelDecoder.m: Added code to openGModel: to more automatically detect what actions should be added to FirstResponder. This facilitates importing the .gmodel without even needing the header file. All of the information necessary to convert the interface can be gleaned from the .gmodel information. 2004-06-18 23:40 Gregory John Casamento * Version 0.7.7 2004-06-15 01:28 Gregory John Casamento * GormPalettesManager.m: [GormPalettesManager mouseDown:] a call to convertRect:toView: was added to correctly translate the view being dragged in all cases. This will show no real benefit until Alex M. adds the window decoration patches. 2004-06-10 01:28 Gregory John Casamento * Gorm.m: [Gorm testInterface] added code in the exception handler to show an alert panel when an exception occurs along with a warning (and the actual exception, of course). This allows users to see what the issue was when trying to test the interface. 2004-06-07 23:59 Gregory John Casamento * GormInspectorsManager.m: [GormConnectionInspector setObject:] corrected code to call "isConnecting" before blindly causing the inspector to show the connection on the selected object. This was interfering with the user making connections in some cases. 2004-06-06 21:57 Gregory John Casamento * Palettes/3Containers/GormNSOutlineView.h: added ivar _savedColor. This is used to save the color during selection. * Palettes/3Containers/GormNSTableView.h: same as above. * Palettes/3Containers/GormNSTableView.m: implemented select and unselect methods to allow the color to be saved when the object is selected. * Palettes/3Containers/GormNSOutlineView.m: same as above. 2004-06-06 08:39 Gregory John Casamento * GormImageEditor.m: Corrected comments. 2004-06-04 23:53 Gregory John Casamento * GormImageEditor.m: Added some code to correct a problem found by Riccardo Mattolla and Sungjin Chun. The code is as suggested by Sujin, to return when the superview is not available. * GormSoundEditor.m: same as above. NOTE: This was due to a recent change to load all images for easy access by the user. Apparently, Linux is a little more forgiving that some other OSes. :) 2004-06-03 00:43 Gregory John Casamento * GormDocument.h: Added "lastEditor" ivar to hold the last editor selected by the document. * GormDocument.m: In [GormDocument setDocumentActive:] used lastEditor to reset the selection to the current one for the document selected. This causes the inspector to switch to the appropriate inspector for the object currently being edited in that document. 2004-06-03 00:43 Gregory John Casamento * Gorm.m: Removed code in the testInterface: method to allow NSBrowser, NSTableView, and NSOutlineView display correctly in testing mode. * GormDocument.m: Moved the code in loadDocument: into a NS_DURING block to catch any exceptions thrown during loading of a .gorm file. This will facilitate recovery of the application when a problem is encountered while loading the file and will allow the user to continue using the application despite the issue. 2004-05-30 22:37 Gregory John Casamento * GormDocument.m: [GormFirstResponder connectInspectorClassName] made it return the "not applicable" inspector instead of the connections inspector for this. The FirstResponder shouldn't be able to make outlet connections. 2004-05-29 23:10 Gregory John Casamento * GormInspectorsManager.m: [GormConnectionsInspector _internalCall:] The search for an existing control connection was leaving the con variable set to a outlet connection (occasionally) which caused later logic to not properly set the action list and prevented the user from selecting an action. 2004-05-29 23:10 Gregory John Casamento * Gorm.m: [Gorm testInterface:] removed conditional. The services menu is always set to nil when testing. [Gorm endTesting:] added a NS_DURING block to catch any issues with resetting the services menu. This prevents Gorm from crashing, if there's a problem. Since the menu is set to nil and then reset there shouldn't be an issue. 2004-05-29 16:00 Gregory John Casamento * GormDocument.m: [GormDocument attachObject:] added code to automatically mark a menu being attached as the windows/services menu if it has the appropriate title. Also changed [GormDocument detachObject:] added code to remove the menu as the services/windows menu if it's detached from the document. 2004-05-29 08:56 Gregory John Casamento * Palettes/2Controls/main.m: Had some DOS formatted lines. Simply converted to UNIX format. * Palettes/3Containers/main.m: Changed the default border type for both NSTableView and NSOutlineView to NSBezelBorder in -finishInstantiate. * Palettes/4Data/main.m: Changed the default border type for the NSTextView to NSBezelBorder in -finishInstantiate. 2004-05-29 07:30 Gregory John Casamento * Palettes/4Data/GormNSComboBoxInspector.gorm: Improved the layout a little. 2004-05-28 21:48 Gregory John Casamento * GormClassManager.m: Corrected a problem the the renameClassNamed: newName: method. It was releasing the classInformation and causing a crash. 2004-05-25 07:01 Gregory John Casamento * Gorm.m: [Gorm testInterface:] added code to save the services menu and set the current one to nil, if one is not defined in the .gorm file. This prevents the annoying "Services Menu not in main menu" warning. * GormPrivate.h: Added servicesMenu ivar. 2004-05-24 10:22 Gregory John Casamento * GormDocument.m: [GormDocument awakeFromNib] added call to [NSToolbar setUsesStandardBackgroundColor:] to make the background light-grey instead of clear. 2004-05-22 12:31 Gregory John Casamento * Gorm.m: [Gorm validateMenuItem:] removed code which greys out the add/remove for first responder. This was preventing people from adding in the classes view. 2004-05-21 07:20 Gregory John Casamento * Gorm.m: Removed the infoPanel method. * GormInfo.plist: Added all of the information to this file to produce an identical info panel as before. * Gorm.gorm: Changed info menu so that "orderFrontStandardInfoPanel:" is called. 2004-05-19 07:20 Gregory John Casamento * GormDocument.gorm: Added. This replaces much of the code which was once in [GormDocument init]. * Gorm.m: Missing definition for GormLinkPboardType added. * GormDocument.h: Removed selectionView, added toolbar. * GormDocument.m: Added include for NSNibLoading and NSToolbar and removed some of the old rect declarations for creating the GUI. Portions of this will stay hard-coded, since the editors all need to be initialized with the document. Moved some of the initialization around. Added awakeFromNib method to load the toolbar and the toolbar delegate methods. 2004-05-18 07:20 Gregory John Casamento * GModelDecoder.m: Changed reference to the class loader. * Gorm.m: Added code to inactivate menu items when a class isn't selected. Moved some code to decide what is instantiable to the GormClassManager. * GormDocument.m: Moved the parseHeader: method to GormClassManager where it belongs. All methods dealing with loading classes into Gorm or creating class files from data within the application belong in GormClassManager. Changed references to the call where appropriate in the code. Added document as observer when a class is added. This is to help factilitate the move of the parseHeader method. Moved the init method near the top of the file. * GormClassManager.m: added parseHeader method to process headers into data usable by Gorm. Added an instance variable to cache the document when a class manager is instantiated. The class manager needs to communicate with the document it belongs to frequently. * GormSoundInspector.m: Backed out previous change. * GormSoundInspector.h: Removed _currentSound ivar. 2004-05-16 07:20 Gregory John Casamento * Gorm.m: in testInterface: bring the temporary menu to the front. There has been an issue with it sometimes not displaying. In endTesting bring the normal menu to the front. In unhide, bring the menu to the front. * GormLib/IBPalette.[hm]: Added paletteDocument method as per specs. Currently this method will return nil unless the ivar is set to something conforming to IBDocuments. 2004-05-16 07:20 Gregory John Casamento * GormSoundEditor.m: Added methods to GormSound class to show the "not applicable" inspector on all options but the attributes inspector. * GormImageEditor.m: same as above for GormImage. * GormInspectorsManager.m: Added code to show "Sound Inspector" or "Image Inspector" when appropriate for either GormSound or GormImage respectively. 2004-05-15 23:14 Gregory John Casamento * GormImageInspector.gorm: Repositioned fields. 2004-05-15 16:19 Gregory John Casamento * GormDocument.m: [GormDocument init] changed initialization of scrollviews to allow horizontal scroller to be used. * GormImageInspector.gorm: resized some of the fields which were too short. 2004-05-15 12:42 Gregory John Casamento * GormFunctions.[hm]: added function to get all system sounds. NOTE: Current there aren't any, but why wait? I'm assuming that they'll go into $GNUSTEP_SYSTEM_ROOT/Library/Sounds. * GormSoundEditor.m: Added call to add all system sounds to the editor. 2004-05-15 11:14 Gregory John Casamento * Gorm.m: Add call to [GormDocument closeAllEditors] to avoid a crash when the user attempts to open a document, then cancels. The document wasn't properly released. * GormDocument.h: Removed the images and sounds arrays. This information is kept in the editor and these arrays are redundant. Also exposed the closeAllEditors method. * GormDocument.m: Removed references to the images and sounds array. Changed load/save logic to use the list from the editors themselves. * GormFunctions.[hm]: Added function to retrieve the names of the images from the system directory named systemImagesList(). * GormImageEditor.m: Modified to call the new function and add the images to the editor when it is first instantiated. * GormPrivate.h: Added objects method to GormGenericEditor's interface. * GormSoundInspector.h: Changed _currentSound to id. * GormSoundInspector.m: Uses _currentSound to make certain that the same GormSound object isn't reinspected, thus wasting time loading it over and over. 2004-05-14 22:11 Gregory John Casamento * GormDocument.m: [GormDocument _closeAllEditors] mocified to use secondary array. The close method causes the editor to call editor:didCloseForObject: which modifies the openEditors array while the "close" message is being sent to all of the objects. To avoid any issues with the array potentially being changed while this is happening I add all of the objects to another array execute the method on all objects of that and empty both the original and the copy. * GormSoundInspector.m: Corrected an issue where the sound wasn't immediately being set into the inspector. 2004-05-14 17:46 Gregory John Casamento * GormButtonEditor.[hm]: Moved to the Controls palette, removed from the main directory. In general, inspectors and editors should appear in the palette which provides those things. * GormTabViewEditor.[hm]: Moved to Containers palette. 2004-05-14 11:36 Gregory John Casamento * GormButtonEditor.m: Added a line between some methods to improve readability. * GormDocument.m: [GormDocument instantiateClass:] removed extra release for an object being added to the objectsView which is already autoreleased (in setName:forObject:). * GormInspectorsManager.m: [GormNotApplicableInspector setObject:] method removed. This was a temporary hack until the memory leak was located. 2004-05-14 02:39 Gregory John Casamento * GormClassManager.m: Moved the call to _touch to the bottom of all of the methods. This should be called only after all changes have been made to the class. * GormImageInspector.m: setObject: wasn't calling [super setObject:] * GormInspectorsManager.m: [GormNotApplicableInspector setObject:] added code to prevent crash. * GormObjectEditor.m: Removed some commented-out code. * GormSoundInspector.m: Added code to set the _currentSound to nil if the selection sent is empty. * GormPreferences.gorm: Added line. 2004-05-13 18:47 Gregory John Casamento * Gorm.m: Removed some commented out code. Removed commented out RELEASE statements, now that AUTORELEASE is used. * GormDocument.m: [GormDocument dealloc] added openEditors to the set of things released. [GormDocument editorForObject:create:] when a new editor is created, add it to the master list of editors. This makes it easier to send the close message to all of the editors upon shutdown. [GormDocument editor:dicCloseForObject:] removes the editor from the list of editors. [GormDocument _closeAllEditors] closes all of the editors in the document using the new list. * GormDocument.h: Added member variable openEditors. * Palettes/GormMenuEditor.m: Added category to allow testing when a menu is visible so that we can avoid sending the close message to it. This prevents the harmless message "Invalidparm: ordered invalid window 0" from appearing when the document is being closed. 2004-05-13 01:03 Gregory John Casamento NOTE: These changes might unstabilize things a bit. * Gorm.m: The document is now autoreleased when it is instantiated. This change was made in [Gorm application:openFile:],[Gorm open:], [Gorm newGormDocument:]. * GormDocument.m: Addition of a method called [GormDocument _closeAllEditors] this closes all of the editors from the handleNotification method before the any objects are ultimately released. Removal of old, commented out GormFontManager implementation. Streamlined the dealloc method to make certain everything is released. Also changed the window in the init method so that it doesn't release itself when it's closed by the user. This allows for a more controlled shutdown. * GormDocument.h: Minor code cleanup. * GormGenericEditor.[hm]: Added activate, closed ivars. Also added code in close and activate to make use of them. Added code in dealloc to call [GormGenericEditor close] if there the flag indicates the editor is open. Also moved some common, trivial, operations to the parent class implementation of initWithObject:inDocument:. * GormObjectEditor.m: Added code in close to remove the document from the map. This eliminates a crash which was occurring. * GormSoundEditor.m: Same. * GormImageEditor.m: Same. * GormViewEditor.m: Re-arranged the initWithObject:inDocument:. * GormWindowEditor.m: Same. * GormMenuEditor.m: Same. 2004-05-10 21:45 Gregory John Casamento * GormDocument.m: [GormDocument handleNotification:] was failing to remove the document as an observer in the notification center. This was causing the old document to be retained and was, also causing "Test Interface" to fail randomly because the notifcation cetner was still attempting to reach the old document. 2004-05-10 11:58 Gregory John Casamento * Gorm.m: Update version to 0.7.7 (Alpha) to avoid confusion between users using the release and users using CVS. 2004-05-10 09:55 Gregory John Casamento * Version 0.7.6 2004-05-10 09:08 Gregory John Casamento * GormDocument.m: Corrected an issue when creating an "Inspector" or "Palette" in [GormDocument setupDefaults:]. The method was creating an NSWindow which doesn't respond to one of the methods the inspector needs it to. * GormSetName.gorm: Reduced the line to 2 pixels high to make it look a little better. 2004-05-09 10:16 Gregory John Casamento * GModelDecoder.m: defineClass:inFile: changed signature to take the object and get the classname from it. This allows a call to add the class under an assumed superclass, if the user says no to the query. Also in loadGModel: added code to pull the outlet/action from the connections and add them to the class if they are not present on the imported header. This also allows, in the above case, for Gorm to automatically get all outlets/actions from the gmodel. 2004-05-08 08:53 Gregory John Casamento * GormDocument.m: [GormDocument loadDocument:] added code to prevent users from invoking "open objects.gorm" or opening "objects.gorm" directly when in GWorkspace. This caused Gorm to convert the objects.gorm file as if it were an old-style file before gorm packages. It now issues a warning. Also added code to [GormDocument openDocument:] to check for a duplicate open of a model which is already opened. This can cause confusion. * Gorm.m: Added a new method [Gorm documentNameIsUnique:] which checks all existing open documents for a duplicate name and returns NO, if it's not unique. * GormPrivate.h: Added declaration of the method mentioned above to the Gorm class interface. 2004-05-08 08:53 Gregory John Casamento * GModelDecoder.m: [GModelDecoder openGModel:] Corrected issue which was causing a crash. * GormDocument.m: Cleaned up a memory leak. Commented/Documented the location / justification for all memory operations. * Gorm.m: same as above. Also added code to [Gorm unhide:] to prevent bringing forward the document window when clicking on the app icon in test mode. 2004-05-06 21:21 Gregory John Casamento * GormDocument.m: [GormDocument selectClass:] do not switch if the class is one of GormSound or GormImage. This prevents a harmless, but annoying message. 2004-05-05 22:18 Gregory John Casamento * Gorm.m: [Gorm unhide:] improvement over previous fix to bring all things to front. The code now toggles the active status of the document to cause all of the windows of the document to come to the front when the icon is clicked. 2004-05-02 18:35 Gregory John Casamento * GormImageEditor.m: Added code to allow it to resize the cells in the matrix according to the setting in preferences. * GormSoundEditor.m: Added code to allow it to resize the cells in the matrix according to the setting in preferences. * GormSoundView.m: Commented out some of the sound drawing code. I'm planning on getting this working later. * GormSoundInspector.gorm: Added images in buttons, rw.tiff, rec.tiff, play.tiff, pause.tiff, and ff.tiff. 2004-05-02 23:40 Gregory John Casamento * GormDocument.m: [GormDocument openEditorForObject:] Do not bring the editor to the front if it's for an NSMenu. This prevents the "flash" bug which was apparent after the most recent fix for menu editing in Gorm. * GormNSMenu.m: Added #ifdef in GormNSMenu to conditionally compile [GormNSMenu display] so that it becomes easier to debug issues with NSMenu editing. 2004-05-01 17:40 Gregory John Casamento * Documentation/Gorm.texi: Correction of itemize bullet, error found by Christopher Culver. 2004-05-01 11:46 Gregory John Casamento * GormSoundView.[hm]: New class to visualize the sound being inspected. * GormSoundInspector.m: Modifications so that it can now use a GormSoundView. * GormSoundInspector.gorm: Added soundView to .gorm file and made appropriate connections. 2004-05-01 11:18 Gregory John Casamento * GormClassInspector.m: Corrected a problem with the wrong name being sent to the class manager. This was causing an error to be printed by the class manager. This problem had no effect, but was annoying. 2004-05-01 09:44 Gregory John Casamento * Gorm.m: Added implementation for unhide: to bring forward the document window as well as any other windows. This corrects Report #3269. 2004-05-01 09:03 Gregory John Casamento * GormNSMenu.m: [GormNSMenu _createWindow] added call to setExcludedFromWindowsMenu: to make certain that the menu windows are not displayed in the Windows menu under Gorm's main menu. 2004-05-01 07:10 Gregory John Casamento * GormClassManager.m: Removed some NSLog messages. 2004-04-30 20:04 Gregory John Casamento * Gorm.m: Removed code which calls "awakeFromDocument:" on objects loaded in palettes. * GormDocument.m: [GormDocument loadGormDocument:] added back code which calls awakeFromDocument:. Also in [GormDocument setDocumentActive:] removed code which was causing all menus to display instead of just the main menu when loading a .gorm. * GormMenuEditor.m: [GormMenuEditor activate] removed code which was causing all submenus to be displayed when the editor for a menu was activated. * GormMenuInspectors.m: Removed awakeFromDocument: method. * GormNSMenu.m: Commented out some old code. 2004-04-30 19:15 Gregory John Casamento * GormDocument.m: Modified _repairFile so that it works. :) * Gorm.gorm: Removed some extraneous menu items/submenus. 2004-04-27 22:15 Gregory John Casamento * Palettes/0Menus/GormMenuEditor.m: [GormMenuEditor deleteSelection] added code to re-display and resize after an item is deleted. This corrects the problem where the menu item doesn't immediately disappear from the screen when deleted. 2004-04-27 21:50 Gregory John Casamento * GormClassInspector.m: Added code to properly collapse the item if the class is being edited in the class inspector. * GormClassManager.m: some improvements on the previous fix. 2004-04-27 01:28 Gregory John Casamento * GormClassManager.m: Modified [GormClassManager addAction:forClassNamed:], [GormClassManager addOutlet:forClassNamed:], [GormClassManager removeAction:fromClassNamed:], [GormClassManager removeOutlet:fromClassNamed:], [GormClassManager replaceAction:withAction:forClassNamed:], [GormClassManager replaceOutlet:withOutlet:forClassNamed:], to allow synchronization in the class list. When a outlet/action is added/removed/replaced the subclasses of that action stay in sync. 2004-04-26 01:04 Gregory John Casamento * GormClassInspector.m: Modifications to addAction: removeAction: addOutlet: & removeOutlet to syncronize with the classes outline view. * GormDocument.[hm]: exposed selectClass: method. * GormOutlineView.[hm]: Simplified some code and added a method called "reset" which stops the editing process on a class. 2004-04-25 23:24 Gregory John Casamento * GormClassInspector.m: removeOutlet: and removeAction: check for i >= 0 to allow deletion of last element. This was an issue introduced in the previous commit. Also made the tables deselect the previous selection so that it would allow deselection of all rows. * GormClassInspector.gorm: Made both tables capable of having an empty selection. This corrected an issue with deleting the last element. * GormDocument.m: Added back, in handleNotification:, handling of GormDidModifyClassNotification. Previously this was removed since there were no other places where the classes were being modified. This is no longer the case. 2004-04-25 06:34 Gregory John Casamento * GormClassInspector.m: removeOutlet: and removeAction: check for i > 0 to prevent and out of range exception if nothing is selected. 2004-04-18 08:30 Gregory John Casamento * GormPrefsController.m: Added dealloc to prevent any memory leaks. 2004-04-17 23:55 Gregory John Casamento * Resources/GormPrefColors.gorm: New gorm file for color preferences. * GormColorsPref.[hm]: new class to implement color preferences. * GormViewEditor.m: Added code to allow the color of guidelines to be changed in preferences. * Defaults.plist: Added entry for GuideColor. The default is red. 2004-04-17 13:11 Gregory John Casamento * Palettes/3Containers/inspectors.m: Added code to the GormTableViewInspector update the background color when the user changes it in the inspector. * Palettes/3Containers/GormNSTableViewInspector.gorm: added color well to allow changing of the background color. 2004-04-17 12:52 Gregory John Casamento * GormObjectEditor.m: [GormObjectEditor mouseDown:] check that "name" is not nil before proceeding into the code to do the drag & drop. This was causing an exception. 2004-04-17 10:58 Gregory John Casamento * Palettes/3Containers/GormNSOutlineView.m: Changed some of the default data source's elements to be closer to the actual class hierarchy. * Palettes/3Containers/inspectors.m: Added code to the GormTableViewInspector to add or delete columns based on the new field which specifies the number of columns in the table/outline. * Palettes/3Containers/main.m: removed some old code and added code to expand the outline view so it looks better in the palette. * Palettes/3Containers/GormNSTableViewInspector.gorm: added "#Columns" field to allow the user to modify the columns in the table without cutting/pasting. 2004-04-13 20:57 Gregory John Casamento * Version 0.7.5 2004-04-11 21:26 Gregory John Casamento * GormBoxEditor.m: Cleaned up warnings. * GormImageEditor.m: same.. * GormInternalViewEditor.m: same.. * GormTabViewEditor.m: same.. * GormViewEditor.m: same.. * GormViewWithContentViewEditor.m: same.. * Palettes/0Menus/main.m: same.. * Palettes/3Containers/GormTableViewEditor.m: same.. * Palettes/3Containers/inspectors.m: same.. * Palettes/4Data/inspectors.m: same.. * Palettes/4Data/main.m: same.. * GormViewKnobs.m: Added reference to new header... * GormViewKnobs.h: New header which declares the knob related functions. 2004-04-06 20:16 Gregory John Casamento * GormClassManager.m: Correction to how actions are added to FirstResponder. Previously it was adding *all* actions to this entry, but it shouldn't do this. It now adds only those methods added to subclasses of NSResponder. 2004-04-06 00:16 Gregory John Casamento * Palettes/2Controls/inspectors.m: added defaultItemForm attribute. Added code in [GormPopUpButtonAttributesInspector _setValuesFromControl:] to select the appropriate item, when the value is changed in the inspector. * Palettes/2Controls/GormNSPopUpButtonInspector.gorm: corresponding changes to above code modifications. 2004-04-05 00:06 Gregory John Casamento * GormDocument.m: [GormDocument rebuildObjToNameMapping] some additional debugging information. Also in [GormDocument loadDocument:] unarchiver is now explicitly using RELEASE instead of AUTORELEASE. 2004-04-04 22:09 Gregory John Casamento * GormDocument.m: [GormDocument rebuildObjToNameMapping] use [[********* ******** ***************** ******* ** ************** ********* **** *********** ********** ***** ******* **** ********* ************************** * ************************ ********* **** ******** *** *********** *** *********************** **** ***** **** ** ********************** ************** ** **** *** *** **** ****** **** *** ********** ***** * ***** **** * ******************* ********* **** ********* ********** ***** ******* **** ********* ************************** * ******************* ********* * ******* **** ******** * ***** ** ***************** ****************************** *** ****** ********** ** *** ***** ***** **** ** ***** ******* **** ** ******** ** **** ***** ********** **** *** ** *** *** ***** * ***************** *** *** ****** **** ** *** *** **** **** ** ******* *** **** **** ** *** ******* **** *** ** *** ***** * *************** ********* ** ***** **** ********* ** *** ******* ***** ***** **** **** **** ******* ** ******* **** ******** ********* * ************************* *** ******* ****** ** *** **** ********** ** *** ** *** *** ******** ******** ** **** ***** **** ** **** *** **** **** ***** ***** **** ********* * ****** ***** * **************************** *********************** ************* **** ****** *** **** ** ** ******** ** ******** * ********************** **** ** ****** ****** ***** ******** ***** ** * ******* ***** *** ******* ***** ****** **** *** ******* ** *** ****** *** *** ************** ** *********** ********** ***** ******* **** ********* ************************** * ********************** **************** ********************* *********** ***** **** ** ******* *** ******* **** ***** *** **** ** ***** **** ** * ********* ********* *** *** ***** ** *** *** ******** ********** ***** ******* **** ********* ************************** * ************************** ***** ******* ***** ******** **** **** ***** ******* **** * ***** * ****************** ******* ** ********* ** ***** **************** ****** **** **** **************** ***** ****** ********** ***** ******* **** ********* ************************** * *************** ************* *********************** ******* ** ******* ****** * *** ***** ** *** **** **** *** **** ******** * ********************** **************** ********************* *********** ***** **** ** ***** ******* ** ***** ** * ******* ******* ** ******** ********** ***** ******* **** ********* ************************** * ********************************* ***** **** ** ********** *** *** ** *** ***** *** ******** ** *** ********* * *********************** ***** **** ** ***** **** ** **** * *** **** ** *** ********* * ********************************** ***** *** **** ** **** * ********************* *** ****** ********** ***** ******* **** ********* ************************** * ****************** ***** ************* ************************ ****** ** ****** *** **** ******* **** ********* ********* *** ** ****** ***** ********* ** *** ****** ** *** *** **** ******* ************** ******* *********** *** ********** ** *** *************** ****** ******** ********************** ** ******** ****** **** * **** **** ** ***** ***** ***** ***** *** **** ******** * ****************** ***** ************** ** ************** ** **** * **** ******* ***** ** *** ****** ** * ************* ** **** ********* * ******************* ***** ******** ********** ***** ******* **** ********* ************************** * ****************** ******* **** ******* *** *** ************ ***** **** ** ************* ************** ** ****** *** ********** ********** ********** *** ********** **** *** ***** ******* ********* ***** ******* *** **** ** ********** *** ******** ********** *** ********** * ******************* ******* *** ***** *** ****** ** ** ****** ***** ***** ** ******** ** **** ** ******** ** ****** ** **** ** *** ** ************ * *********************** ******* **** ** *** *********** **** ** **** **** *** **** ******** **** ***** ** *** ********* **** **** ** **** *** *** *** *********** ************** ** ***** ********** ***** ******* **** ********* ************************** * *********************** ******* **** ******* ***** ****** *** **** **** ** *************** * ******* ***** **** ** *** ******* ** *********** * ************** ********** ** **** * **** ******* *** *** **** *** *** * ****** ***** *** *********** ** *** **** ******** ***** *** *** **** ****** **** ****** ***** *** **** ** *********** ** ********* * ***************** ******* ************* *** ********** ********* * **************** ***** *********** *** ********** ********* **** ** **** **** *** ** **** *********** ***** * ******************* ***************** ***************** ***** **** ** ***** *** **** ****** ******** ** *** **** ***** ** **** **** ******* ****** ** ********* ***** **** ** ****** *** ******** ** * ****** **** *** ********* ********** ***** ******* **** ********* ************************** * *************** ************* ************** ***** **** ** ************* ************ ** * ***** ******* ** ***** **** ***** *** **** *** ******* ** ****** ***** ***** ***** ***** **** ******* * ***************** ************************ *********** **** ****** ****** ********** ** *** ****** ****** ** ** * *************** **** *** ******* ** ***** **** ***** **** ****** *********** ******* *** ****** ******* ****** ** ***** * ********************** ***** ******** ********** ***** ******* **** ********* ************************** * ***************************** ******* **** ** *************************** *********** ** *********************** ** ************* **** *** ******* *** ****** ** ** ***** ** ******** ** **** ** **** ** **** ***** ******* ********** ***** ******* **** ********* ************************** * *************************** ***** ** **** ** ********** ** ******* *** ******** ** *** ****** ****** ** ** **** * *************** ***** ******** * ***************** ***** ******** ********** ***** ******* **** ********* ************************** * ***************** **************** ***** ******* *** ********** ** ******** **** **** ** ** **** *** ********* ***** ** ** **** *** ********** *** *** ****** ***** ***** ** ********* **** ** **** ** ** ***** ****** ********** ***** ******* **** ********* ************************** * *************** ************* ******************* ***** **** ** ***** *** **** ** ** ****** ** ** ** ** *** ****** ***** **** ********** ***** ******* **** ********* ************************** * ****************************** ******* ***************** ** ** *** ********* **** *** ******** ***** ********** *** **** *** *********** ** *** ******* *** ** ***** *** **** ****** ** ***** ** *** ****** ***** ** **** ******* ********** ** *** ********* ******* ********** ** ******************* * ********************** ******* *** ***** ****** ****************** *** ******** ** *** **** ** ********** *** *********** ****** **** ********* ** ****** *** **** ** *** ***** *** ***** ********** ** ******** ** **** **** ** * ******* ********* * *************** ******* *** ********** ** ****************** ** *** ************* ******* * ***************** ******* **** ****** ** ********** ** **** *** ********* ** ******* *** *** ****** ***** **** ******* ** *** ******* **** ***** *** ******* * ********************** ***** ********** * *********************** ***** * ************************ ***** * ********************************* ***** ********* ** ************** ** ***************** *** ********************** * *************************** ***** ********** * ************************* ***** ********** ***** ******* **** ********* ************************** * *************************** ************************** *********** ********* ****** ****** ********* *** ******** ******* *** ******** ** *** ****** **** *** ***** ** ********* ******* * ************************ ******* **** ******* ***** ** ********************** ********** ***** ******* **** ********* ************************** * *********************** *********** *** ************* **** ******* ** ******* ***** **** ******* *** ** ********** ********** ***** ******* **** ********* ************************** * *************** *** *** ******* *** ******** ************** ******* ** ************ * ********************* ***** **** *** *** ******* * *************** ****** ******* **** ********** * ************************ **** * ******************* **** * ********************* **** * ********************** **** * ***************************** **** * ******************* **** * ********************************* **** * ************************* **** * ******************************************* **** * ******************************* *** ******* *** ******** *************** **** ********* ******* **** ***** *** ***** ********* ********** ** *** ***** ************ ********** ***** ******* **** ********* ************************** * ***************** ***** ****** ************ * ******************** ***** ***** ******* ** ******** * ******************************************* ******* **** ********* ************ * ********************* ***** ******* *** ******* **** ************ ********** ***** ******* **** ********* ************************** * *************** ************** ******************** ***** **** ** *** ********* **** ** ***** ** *** ******** ** ******* ********** ***** ******* **** ********* ************************** * ********************* ******************** ************* ********* ** ***** **** **** ******* ** ********* ********** ***** ******* **** ********* ************************** * ******************* ***** ********** ***** *** *** *********** ******* * ******************* ***** ********* *** *** *********** ******* ****** ** ****** ******** **** *********** ****** *** **** ** ***** ******* ** **** **** ** ***** *** *********** * ******* *********** *** ************* * ************** ************* *** ************* ********** ***** ******* **** ********* ************************** * ********************* ***** ******** ** ***** ****** ************ ** *** ******* **** **** *** ***** ********** *** *** ****** ** * ****** ************** ********* ************ ******** ******************* ************* ** ****** *** **** **** *** ****** *** **** **** *** **** ******* ** ************* ***** **** ** ******** ** ******* ********* ** * ******** ** *** ******* ****** * *************** ******* ** **** ** *** **** ********** ** ************* ********************* ********** ***** ******* **** ********* ************************** * ********************* ***** *** ************* ** ******* *** *** ***** *** *** ******* ********* ** ****** ****** ********* ** ****** *** **** ** ****** *** ****** ***** ** ** *** ********* ******** ****** **** ** ******* ** ******* ***** ******* * ***** ***** *** *** ******* ******* ** *** **** ****** ****** ** ****** *** ********** ***** *** ********** ***** ******* **** ********* ************************** * ******* ***** ********** ***** ******* **** ********* ************************** * *********************** ***** ****** ** ******** ***** ********* ** ****** ******** *** **************** ****** *** ******* **** *** **** ** ******* *** **** ****** ********** ***** ******* **** ********* ************************** * *************** ************** *********************** ***** **** ** ***** *** ************* ** ** ****** ***** **** ********** *** **** ***** ** *** *********** ***** ***** *** *********** *** ******** **** *** ***** ** ******* **** ******** *** ************* **** ***** ********* **** **** *** ***** ** *** **** ******* * ********************************* ***** ************************** ************** ** ****** *** ********** ** **** ********** ********** ***** ******* **** ********* ************************** * *************** ************** *********************** ***** **** ** ******* **** ******* **** ***** ******** **** ******** ** **** ****** ********** ***** ******* **** ********* ************************** * ********************************* **************** ********* ******* **** ** ******** ********* **** ******** ************ ********** ***** ******* **** ********* ************************** * ******************* ******** *** **** ****** ********* **** **** ***** ********** ***** ******* **** ********* ************************** * ************************* ***** **** ** *********************** ** ****** *** **** **** *** ******** ** ************ * ********************** **** ** ****** * ***************** ***** ******* ** ****** **** **** ****** *** ****** **** ******** ** ******* ** ***** ********* ** *** ******* * *********************** **** ** ****** **** ***** **** ** ****** ******* ** ****** **** **** *** ****** ***** * ******************************** ******* **** ***** **** *** ***** **** ** *************************** ** *** *** **** ****** ** ***** ** **** *** **** ********* ********** ***** ******* **** ********* ************************** * ************************* ****** ** ****** ********** ** ********* ** ********* ************* ** *********** ********** ***** ******* **** ********* ************************** * ******************************** ******* *** ******** ******* ********** ***** ******* **** ********* ************************** * ******************** ******** ** ********* *** ******************** ******* ** ***** ***** ** ***** ****** * ********** ******* * ********** ******* * ******************************** ******* **** ** ************************** ** *** ****** * ****** ** ******* *** ******* ***** ******* ** *** **** ***** ***** ** **** *** **** ********* ***** ***** ******* ************ ********** ***** ******* **** ********* ************************** * *********************** ***** ************** ** *** ****** ****** ********** ***** ******* **** ********* ************************** * *************** ********************** **** *** ********** ********* ** *** ****** ***** ** ******** ** **** *** *** ******* **** ******** * ***** ***** **** ****** *** **** ******** ********** ***** ******* **** ********* ************************** * *************** ******* ***************** **** *** ***** ** ** ****** ** **** ***************** ** ****** ***** *** ************** ** ***** * ******* ***** **** ** ***** ** ***** *** ******* ** *** ********* ***** ******** * *********************************** ***** **** ** ***** *** ** *** ******* ***** **** ******** **** ******** ****** ****** ********** ***** ******* **** ********* ************************** * *************** ************* ************** ***** ***** ** ************* *** ********** *********** ** *** ********** ***** ** **** **** *** ** *********** ** ***** ** * ******* ******* *** *********** ** ** *** ***** ********** *** *** ***** ** ** ****************************** **** **** **** ** ********* ** *** *********** ********** * *********************** **** *** ******** **** ************* ***** ******** *** ******* * ***** ***** ***** ** ******** *** ************* ** ***** ** **** ** ****** ********** ***** ******* **** ********* ************************** * *************** **** ************** ******************** ************** **************** *** ************** *************** **** ************** ******************* ************** *************** *** ************** ************** ** **** **** *** ** **** ** ***** ******* ***** **** ** ****** **************** * *************** ***** ************ *** *** *** ***** ******** * ************************ *** *** *** ******* ** ******* **** **** ******** * *** **** *** ** ****** ** ******* ********** ***** ******* **** ********* ************************** * ************************ ***** **** **** **** ** **** *** ******* ** *** ***** ** *** ********* **** *********** **** ******* * ****** *** ***** *** ****** ****** **** ********** ************* **** **** *** **** ********* *** * ***** ***** ********** ***** ******* **** ********* ************************** * ********************* ***** ********** ** ************** *** ************** ** ******* ** ********* ***** ****** **** ********** ****** **** ***** *** *** *************** ** *** ***** ********** ***** ******* **** ********* ************************** * ******* **** ********* ******* ** **** *** **** ***** ***** *************** ** ******** ********** ***** ******* **** ********* ************************** * ******* ********* ** ***** **** ************* ******* ** *** *** ********* *** ****************** **** ***** ** ***** ** ****** ******* ******* ***** ******************** ******* **** ******* ******* ** ****** *** ***** ****** ** **** ***** **** ***** ********* **** ********* ********** ***** ******* **** ********* ************************** * *************** ******* ******* ****** ***** *** ********** ****************** **** ****** ** ****** **** ************* **** ***** *** ************ ** * ********* *** ** ***** ****** ** **** ****** ********** *** ***** ************** ** ********** * *********************** **** ** *** ****** *********** *** ****** **** *** ********** * ******* ***** **** ** ****************** ** **** *** ******* **** ***** ***** ***** *********** **** ******** ********* *** ******** *** **** **** ********** *** ***** **** ** ***** ********* ****** *** ********** ********** ***** ******* **** ********* ************************** * ******* ****************** ***** **** ** **** *** *** **** ***** **** ***** ** *** ****** ******** ****** ** ******** ********** ***** ******* **** ********* ************************** * ******* ***** * ********* ***** ****** *** **** ******** ** *** ************* ****** *** **** ***** **** ** *** ******* ** *** **** ** ******* ***** **** ** ** ********** **** ***** ********* ************ ********** ***** ******* **** ********* ************************** * ******* ****** *** ***** ******* ******* *** **** ** ****** ***** ****** ** ** ****** ** * **** ***** ******* ****** ******** *** **** ** ****** *** * ********************* ***** *** * *** ***** *** ********** ***** **** ******** **************** **** ***** * **** ** *** ****** ***** ******* *********** **** ** ****** ** ****** ** ******* **** *** ********* * ******************* ***** **** ** ******* ******* ******** **************** *** ******* **** *** ***** ******** ******* **** *** *********** * *************************** *** ******* **** *** ****************** ***** ****** ** ** ******* ************ *** *** ******** ********* *** **** **** * ****** *** *** ********** * *** ****** ****** *************************** ********** *** ***** ** ***** *** **** ** ** ******* ** *********** *** *** ******** ****** * ****************** ***** **** ** ******** ****** *** ***** ********* **** ********* ** ******* **** *** ***** **** ******** ***** ************** *** ***************** * ************************ ******* ******* *** ******** ******* *** ************ ** *** ******** ***** ****** ****** ******* *** ******* ******* ** ** *** **** ***** * ********************** ****** * ******************* ******** ** *** *** ***** ***** ********** **** ***** *************** * ******************* ******************************** *** ****************** ******* * ***************************** **** *** ******* ** ***** *** ******* ********** ***** ******* **** ********* ************************** * *************** ************** ***** ******* *** ******* * ****** ******* **** *** ****** *** ** ****** *** ************ ******* **** *** **************** ******* * ******** **** ******** ** ******* **** *** **** ********** ***** ******* **** ********* ************************** * ********************** ****** ************ ********************** ********** ***** *** * ******* **** ***** ***** ******* *** ********* **** *** **** ***** **** * *************************** **** ****** ** ***** ******* ** *** *** *********** ****** ******** ****** *** ****** ****** *** **** ****** ** ******** *** **** ************ * ********************************************** ******* ******** ******** ** ********* ***** **** ** *** *** ** *** ***** ******* ** *** **** *** **** ** *** **** **** ****** *** **** ** *** **** ********** ***** ******* **** ********* ************************** * ********************************* ***** ****** ** ******* ********* ******** ********** ***** ******* **** ********* ************************** * ******* ***** ********** ***** ******* **** ********* ************************** * ********************** ***** ****** **************** ** *** *** ********** ******* ****** ** **** * *************************** **** *** ****** ** ***** ******* ** *** *** *********** ******** ****** ****** ********** ***** ******* **** ********* ************************** * ******************************** ***** **** ** ***** ******** ** *** ***** ** ***** ******** ****** ****** ********** ***** ******* **** ********* ************************** * *************** ******* *********** **** ******** ** ************ *** **** *** ***** *** *** ****** **** *** ******* * ********* ********** ***** ******* **** ********* ************************** * ******************************** ***** ******* ***************** *** *************************** *** ******** *** ************************* ****** ** ***** ********** *********** ** *** ********** *** **** ****** *** ****** *** ********* ** ** ***** ***** ** *** ******** ******** ** *** ***** ** *** ****** ***** ******* **** *** ********* ********** ****** ********** ***** ******* **** ********* ************************** * ***************** ******* ***** ******* ***** *** ******* * ********* ********** ***** ******* **** ********* ************************** * ****************************** ***** ************** * ****************************** ***** ********** * ******* ******* ********************* ******* ********** ***** ******* **** ********* ************************** * *************** ******************** ********* ***** ***** *** ******* * ************ ****** ********** ***** ******* **** ********* ************************** * ************************ **** ******* ******* ***** ***** *** ********** ********** ** ******** ********** ***** ******* **** ********* ************************** * **************** ******* ********* *** ***** * ******************** **** * ***************** **** * ************************* **** * ******************** **** * ****************** **** * ****************** **** * ************************* **** * ******************* **** * ******************* **** * ********************** **** * ***************** **** * ******************************** **** * ***************************** **** * ************************ ***** ******** * *************** ************* ************** ******* ****** ******* ******* ************* ************** ******* *** ****** **** ***** **** ******** **** *** ********* ************* ******************** ******* ***** ****** ****** ************* ****************************** ******* ***** ******* * ************************ ******* **** ** *** ************* ** ******* ****** ******** **** ******* ************* ********* ** *** ******* ********** ***** ******* **** ********* ************************** * ******* ***** ********** *** *** *** ********* ** ***** **** ** ** ******* *** *** ********* *** *** ********* ************* **** *** **** ** ******* ** ****** ******** ** **** ******* *** ***** ********** ***** ******* **** ********* ************************** * ****************** ********* ***** ** ******************* ***** *** ****** ** *** ***** **** ***** ****** ********** **** *** **** *** ***** ************* ********** ***** ******* **** ********* ************************** * ************************************* ********* *** *** ************ ****** ***** **** ** ******** *** ****** ** *** ******* **** *** ********** **** *** **** *** *** ****** ** *** ****** ******* *** *** **** * ********** ***** ******** *** *** ************* ******* ***** ****** ********** ***** ******* **** ********* ************************** * *********************** ***** *********** *** ****** * ******* ******* ***** ****** * ******************* ***** *********** ****** ** *** ** ****** ********** * *************** ***** **** ** **** * ******* ** *** ************ ****** ** *** ****** ***** ******** ******* **** * ***** ***** * *********** ******* * ***************** ***** ************ *** *************************** ** ******* *** ** *** ***** ***** **** ** ** ******** **** * ****** **** ** ******* **** *** **** **** ** **** *** ** ************** ** *************** ********** ***** ******* **** ********* ************************** * ************************ ********* ****** ** ************** ********** ***** ********** * ***************** ***** ******************* *** ***************** ** *********** ******* *** ******* ***** ****** ** ******* **** *** ********* **** *** **** ******* * **** ***** * ************************************* ********** ******* ******** *** ********* ****** ***** ****** ** ********* ******** ******* ** *************** ***** * ***************************** ********** ** *** ** ******* **** **** ******* *** ***** ** ***** ********** ***** ******* **** ********* ************************** * *************** ***** **** ** **** **** ********** ****** * ************************ ***** **** ** ** ******** ****** ** ****** **** *** **** ****** **** ********* ************ ********** ***** ******* **** ********* ************************** * *************** ***** ******* *** **************** ******* **** ******** *** ******* ** *** ***** ** ***************************** ******* ************ ***** *** ******* **** ******** ********* ***** **** ** *** *** ***** **** ** *** ******** *** *** ******** ***** ******** ** ************** * ************************* ***** ******* ***** **** ******** * ********************************************* ******* ***** ***** ********** ***** ******* **** ********* ************************** * ******* ***** ********** ***** ******* **** ********* ************************** * *************** ******* **** ***** ***** **** *** ***** ***** ***** ************ *** ******* *************** **************** ************* ************ * *************** ***** ************** ** ***** ******** * ************************************* ***** ************** ** ****** ************** ***** **** *** **** ************* ** **** **** *** **** ** ********** *** ****** **** ******* ** ********** * ********************************************** ***** ********** *** ****** *************** * ******************** ********** ******** *** ******* ***** *** ***** ********** ***** ******* **** ********* ************************** * **************************** *** ***** ***** *** *** ********** * ********************************* ******** ********* ** ****** ************ **** ******** *** *** ** **** ********* *** **** *** **** **** ***** *** *** ******* ******** ***** * ***************************** ******* **** *** **** ***** *** *** ********** * ************************************* ******* ********* *** *** ******** ** **** *** ******* ** *** *********** ***** ***** *** **** ********** * ************************************************* *** *** *** **** ********** **** ***** *** ********** ** *** ********* ** ***** *** **************** ***** **** ** ********** * ***************************************************** *** *** *** **** **** ********** ********** ******* **** ********* ************************** * ******************* ************************ ** *** ***** ****** ** ** *** ****** ** **** ****** *** ********* ********** ** **** ****** **** ** ** ***** *** *** ** *** ****** ***** ********* ** ****** ******* ***** *** *** ****** *** *** *** ******* ** *** ******** ***** ******************* ********** ******* **** ********* ************************** * ******************** ******** * ****** *** ********** ***** ** ***** ********** **** ***** ***************** ******** ** ******* ********* * ***************** *** **** **** *** ******* ****** * *************************** ******** *** ******* ** *** ***** * ******* ******** *** ******* ** **** ***** ***** *** ***** ********** ******* **** ********* ************************** * ************************ ******* ** *** ******** ****** ******** ****** **** **** ** * ********** ** *********** *** *** *** ****** ****** ** ********** *** ********** ** ******* *** ** ***** ******* ** ********* ********** **** ****** *** ********** ** ***** ********** ******* **** ********* ************************** * ************************ ***** ***** ** ****** ** ********* ** ******** *********** ** ****** ** ** ** *** ** ***** ***** ** ****** **** **** **** ******* *** ******** ** ******* ************ ********** ****** ***** ***************** ******** ** ******* ********* * ******* ***** *** ** *** **************************** ****** **** ******* ** *** **** ****** * **************** ***** ******** *** **** ** ***** ******** ** ***** ** *** ***** ** ** ****** * **************************** ***** **************************** ************** *** ********** ********** **** ********** *** *********** ******** **** ***** **** ** ************** ******** ** **** **** ******* ***** * ***************************** ***** **************************** *** *********** ** ******** *** *** *** **** ******** * **************************** ***** ****** ** ******* ** **** ** ******* **** ******* ***** ********** ******* **** ********* ************************** * *********************** ***** *********** *** ********* *** ************** ********** ******* **** ********* ************************** * ******* ***** ********** ******* **** ********* ************************** * ***************** ***** **** ** ***** ****** ** ***** ** **** ** *** ***** **** ******** * *** *** ****** ***** *** ****** ********** ******* **** ********* ************************** * *************** ***** ***** ************** ** ***************** ***** **** ****** ** **** **** ** ********* *********** ** * **** ************ **** ****** *** ** **** **** *** **** ** ****** **** **** ******* ********** ******* **** ********* ************************** * ****************** ***** ********** ** ***** *********** **** *** * **** ****** ** ******** ********************* ********** ******* **** ********* ************************** * *************** ***** ********** ** ***** *********** **** *** * **** ********** ******* **** ********* ************************** * *************** ******* **** ** *** ***** ***** * ********************* *** ***** ** ******* ***** *** ** ****** ********** ********** ******* **** ********* ************************** * *************** ********* **** ****** ******* ******* * ************************* ***** ** *** ***** ******* **** ** * *** ****** ******** **** *** **** **** * ******* ******* ** **** ******** *** ******* *** ******* ** *** ************ ********** ******* **** ********* ************************** * *************** ***** **** ***** ***** *** ** ***************************** ******** *** ****** ** *** *** ************** **** ******* ** ********* *** *** ********* * ******************* ***************** *** ***************** **** **** ******* ** ****** *** ****** ***** ************ **** * ****** ***** ** ******* ** ******** ***** *** **** ** ** ***** * *************************** ***** ***** *** *** ****** **** *** ************* **** **** ***** * ******* ** ******* ** **** ******** ********** ******* **** ********* ************************** * *************** ********* ********* ******** ***** **** ** ****** **** ** ******* **** **** ********************* * *********************** ******* *** **** **** ***** ********** ******* **** ********* ************************** * *************************** ***** ****** ****** **** ** ******** ********* ** ******* *** ***** ********** ******* **** ********* ************************** * ****************** **** ********************* ******* * *********************** ***** ***** ** **** ********************* ** **** **** ** ****** ** ********* *** ******* **** ******* ** *** ********** ******* **** ********* ************************** * ******************* ******* ********** ******* ****** ** **** ***** **** **************** *** **** **** ***** ****** ** ****** ************* ***** *** *** ********* ** **** **** ** ******* ********** * *************** ********* ************* ****** ** ****** ****** ****** *** ******** **** *** *** ***** ******* **** *** ****** ***** ***** ** **** *** ****** * ********* ***** ***** ********** ******* **** ********* ************************** * *************** ******* ********* ** *** ******** ******** ***** **** ** *** *** ******** ******* *** ***** ******* ***** * ******* ******* *** ********** *** ********** ******** ******** * ************** ******* ********** *** ********** ******** ******** * ************************** ***** ************** ******* ********** **** ***** *************** * ******************** ********************** *** ********* ********** ****** ****** ********************** * ********************** * *** ****** **** ********** ******* **** ********* ************************** * ************************* ***** ************* *** ******** * ** **** ** ** *** **** ************* ** *** ***** ***** ** *** ************** ********** ******* **** ********* ************************** * **************** ************** ********************************* ***** ***** ** ********* ** ***** ** ********* ** ** *** ****** ***** ******* **** *** ******* ** *********** ********** ******* **** ********* ************************** * ***************** ********* ******** ****** ********** * ************************ ******* ***** ******************* **** ***** *** ******* * ******* **** ******** *********** **** ******** ********** ****** ****** ********************** * *** * **** **** ****** ****** ********** ****** ****** ********************** * ***************** * *** *** ***** * ****** ***************** ***** ****** **** ************ ** ********* ********* ********** ****** ****** ********************** * ************** * *** ****** **** ******* * ****** * ***** ** * *** **** ******* * ************* * ***** ** ********** ******* **** ********* ************************** * *************** ***** ******** ** *** *** ******** *** ******* ******** * **************** ****** ********** ******* **** ********* ************************** * ******* ***** ********** ******* **** ********* ************************** * **************************** ***** ******** ** ****** ******* ****** ** ************ ***** ** ****** ** *** **** ******* * ******************************** **** ** ****** ********** ******* **** ********* ************************** * ********************** ***** ** **** **** ******** ******** * ********************* ***** ****************** ** **** **** *** ** ******** ** *** ***** ******** *** ****** ********** ******* **** ********* ************************** * ************************ ****** ********** ***** ********** * ********************************** ***** ********* ***** ********** ******* **** ********* ************************** * *************** *************** ******************* ***** **** ** ******* ******* ** ************* ** *** ****** **** ** *** **** ** *** ************ **** *** ******* *** **** ** ** ********* ** **** *** ****** **** ** ***** * *************** *************** ******* ***** ************ *********** ********** ******* **** ********* ************************** * ********************** ***** ************** *** *** ******* ** *** ** ***** ** ******* *** ******* ** * ****** * ****************** ***** *** ****** ** *** ** **** ** **** *** **** ******* ** *** ************ ****** ** ******** ****** ** ***** **** *********** * ******************* ******* **** **** *** *** ********* *** ***** ********** ******* **** ********* ************************** * ******************* ***** **** ** **** ************* **** * ***** ** ************ * ************** ***** ************ *** *** ************** * ******* ***** ****** ********* *** *** ************** * ***************** ***** **** ** *** ********* ** ******* *** ************* *** ****** *** ***** **** **** * ***** ** ************** ********** ******* **** ********* ************************** ******* ***** ********* ** **** **** * *************** ***** **** ** ***** ******** ********* ** ****** *** ****** **** ****** **** ** * ***** ***** ******* ****** ********** ******* **** ********* ************************** * ************************************************* ***** *** ********* *** ****** * ******************************** *********** ********************** ** ***** *** ************ ** ***** ***** ** ***** * ************************* ***** ******* ******** ** *** ******* ************ *** ************* ********** ******* **** ********* ************************** * ********************************************************* ***** * ******************************* ***** ****************************** ***** ** ****** ********** ** ******************** * **************************** ***** **** ** **** *** ***** ***** ********** ******* **** ********* ************************** * *************** *********** ***** ***** ** ******* *** ******** ** *************** **** ******* ********** **** ********* **** * ******* **** **** ******** * ******* ***** ******** **** ***** ******** **** *** ***** ** ******** ********** ******* **** ********* ************************** * *************** ***** *********** ** ********* ** ***************** ** *** *** ** *** ****** ** **** ** **** ******* ** *** * **** ******* ***** *** ***** ********* ** ******* ******* ******* ********** ******* **** ********* ************************** * ************ ***** ******* ** *************************** ** *** ********* * ******* ***** ****** *** ******* ******************** ** ******* *** **** **** *** **** ***** ** ************* * *********************** ***** **** ******** * **************************** ****** ********** ******* **** ********* ************************** * *********************** ***** ************************* ****** ** ***** ***** ****** * ************ ** ** ********** * ******************************** ***** ******************** ** **** ** ******* ** **** *** ** **** *** ******* ****** **** ******** ********* *** ****** ********** ******* **** ********* ************************** * ************** ***** *********** *** ****************************** * ******* ***** ********** *** ******************************* **** ********* ** ***** ***** *** ******* **** ** ***** **** ******* ** ********** * ******************* ***** **** ** **** *** ************ **** ** ****** ** ** ****** ** ****** * ********************* ***** **** ** ****************** ****************************** ** **** *** ***** ** *** ********* *** ** ******** ******* **** *** ***** ** ****** ** *** ***** ******* ********** ******* **** ********* ************************** * ********************* ***** **** ** ************ ** *********** ******* *** ***** ************************************** **** *** ***** ** ******* **** *** ********** * *************** ***** ***** ** ****************** ** ******* *** *** ************ **** ****** ********** ******* **** ********* ************************** * ********************************** ***** ******* **** *** ***** * ************************ ***** *** ******* *** ***** *** ******* ** **** *** ***** * *************** ***** **** ** ******* ******** ** ******* ** *************** * ******************* ******* **** ***** ********* ****** ******* ** *************** **** ** **** ** *** ******** *** *** ******* ** *************** **** ******** **** **** **** *********** ** *** ***** ******* ** *** *** ****** ** ************** **** ********* *** ****** ********** ******* **** ********* ************************** * ********************************** *** ********* * ************************ *** ********* ******* * *************** ***** ******** ****** ** ****** ***** ** *************** **** ******** ** *** *************** ***** * ******************* ***** ******* ** *********** ******* ** *** *** ***** ****** ******** ** *** ****** **** ** *** **** ****** **** * ************* ** ****** ********** ******* **** ********* ************************** * ********************************************** ***** *** ********** ******** * ******************************** ***** **** ** ****** *** ********* ********** ******* **** ********* ************************** * ********************* ******** ***** **** ********** ** *** ******************* ********** ******* **** ********* ************************** * ************************** ***** *** ****** ** ******** *** *** ***** ****** ******** * *********************** *** ***** * *********************** *** ***** * ************ ***** ****** ** ********* ********** ******* **** ********* ************************** * ************************************ ***** **** ** **** ******* ** * ****** ***** *** ********* ** *** *********** * *************************************** ***** *********** ** ******* * ********************************** ********* *** ***** ********* *** ****** ****** ********** ******* **** ********* ************************** * ************************************************* *** * ************************************ *** * ************************************ *** * ************************************ *** * *************************************** *** * **************************************** *** * ****************************************** *** * ************************************ *** * ******* ******* **** ********* *** ***** **** ** ******** * *************** ******* **** ********* *** ***** **** ** ******** * ************* ******* ******* ** ********* *** *** ** ******* ***** ** ******** ** ***** *********** ********* **** ********* *** ******** **** **** ** *** ******* *** ************ ** ******* ********* ***** ** ***** ********** ******* **** ********* ************************** * *************** ******* *********** ** *************** ********** ******* **** ********* ************************** * ************************ **** ******* ** ****** ********* ** ******* **** * ******** ** ******* * ******************* ******* **** **** ****** ******* ** *************** ************** *** ************* **** *** ****** ******* ** **** ******* * *************** ********* * ******* ***** *** ******** *** **** ** *********** *************** * ******* ******* ** **** ****** ***** * *** ***** ***** ** *** ****** **** **** ***** ********* ********** ****** ****** ********************** * ****** * *** **** ********** ****** ****** ********************** * ****** * *** ************ * ************** * ***** * **************** * ***** * *********************** * ***** * ********************* * ***** * ********************* * ***** ********** ****** ****** ********************** * ****** * ********** *************** ********* ************ ************* *** ****** * *************** *** ********** ****** ********* ********* * ********* * *** **** *** *************** ********* ************ ************ ********** ******* **** ********* ************************** * *************** **** *** ****************************** ***** **** ** **************** *** ******** ******* ** *** ********* ***** *** ******** **** ******** * **** **** ***** *** ********* **** ******* * **** *** ******** ** ******** **************** ********** ******* **** ********* ************************** * ***** ******** * ************ ***** ********* ** ******* ** * ********** ** **** * **************** ******* ** **** ***** *** ******* ********* ** *********** *** ********** * ********************* ******** *** ******* ********* ** *** ********* *** **** * ******* ******* **** ***** *** ***** ** ******* ******** * ******************* ***** ******** *** ***************** * ****************** ******* ****** ****** ***** ** ** ****** ********** * ******************* ***** ******* ** *********** *** * *************************** ******* ****** ****** ********** * *************** ***** **** ******** * *************** ******* **** ******** ******* ************* ***** **** ** ** ******* ******** *********** *** ** ******************** * *** ****** ******* ** ******* ***** ****** ************ ** ******** **** * ***** ** ****** ** ***** **** ******* ********* ******* ********** * ***************** ***** ************** ****** ***** *** ********** ******** ** ******* **** *** *** **** ******* ****** ***** * ************************ **** ** ****** * ************** ***** *** ****** *** ******* *** ****************** * ********************* ********* *********** *** ****************** ****** * ********* ******* *** ******** ** *** ******** ********* ** ******* *** *** ******** * ******************** *** ***** * ****************************** *** ***** * ***************************** *** ***** * ********************************* *** ***** * ********************************* *** ***** * *********************** *** ***** * *********************** *** ***** * ******************** *** ***** * ********************** *** ***** * ********************** *** ***** * ******************** *** ***** * ******************** *** ***** * ********************** *** ***** * ********************** *** ***** * **************************** *** ***** * **************************** *** ***** * *************************** *** ***** * ******************** *** ***** * ******************** *** ***** * ************************** *** ***** * *************************** *** ***** * *************** *** ***** ********** ******* **** ********* ************************** ******* ***** ********* ** ****** ****** ********************** * ******* ******* ** *************** ***** ***** ******* ** ***** ******** ** ********** ******* **** **** ************ ** ***************** * ****************** ******* ************** ** ****** ***** ******* ************ ** ***************** * ************** ***** **** **** ** ************** ********* ***** ************ ** ******** **** *** ********* ** ***** ********* * ******************************** ***** **** ** ***** ****** ** ***** ******* ** ****** ********** ** *** ***** ** * ******* ***** ** *** ** *** **** ***** * ********** ***** **** **** ** ************** ********** ***** *** **** ***** ******** ****** ******* ********** ******* **** ********* ************************** * *************** ********* ********* ***** *** ** ***** **** ****** ***** *** ******* **** ** **** ** * **** *** ********* ********** ******* **** ********* ************************** ******* ***** ********* ** ****** ********************** * ************ ***** ***** ***** *** *** ** *** ** ****** * ********************* ******* **** ** ************* ****** *** *********** ******* ******* ********** ** **************** *** ***** *** *** ************** ****** * ********************* ******* *** *** ************ * ********************* ****** * ******* **** **** ******** ** ***** * ******* ******* ********* ***** * ********************* ****** * ********************* ****** * ********************* ****** ********** ******* **** ********* ************************** * ******************************** *** ********** ****** *** *** ****** ***** ** *** ********* ***** * ****** ***** **** *** **** *** **** ********* **** *** ******** ********* ********** ******* **** ********* ************************** * ********************* ***** ** ******* *** ******* ********* ** ******* *** **** ******** ** *** ******* * **************** ********* **** ** ********* ********* * ******* ********* **** ** ********* ********* * ******************** ********* **** ** ********* ********* * *************** ***** **** ** *** ******* ***** **** ***** **** **** ******* ** *** ****** *** **** ***** ******** ********* * *************** ********* **** ** ********* ********* * ******************** ********* **** ** ********* ********* * ****************** ********* **** ** ********* ********* * ************************* ********* **** ** ********* ********* * ******************* ********* **** ** ********* ********* * ************** ***** ************ ** ****** ***** ******* ****** ** ******* ********* * ****************** ********* **** ** ********* ********* * ***************** ********* **** ** ********* ********* * ******************************** ********* **** ** ********* ********* ********** ******* **** ********* ************************** * *************** ******* ******** *** *** ** *** ******* ***** ********** *** ****** ***** **** *** ******* * ******* **** ** *** ** *** ******* ** *** ********** **** *** *** ********* ****** *** ****** ** * ******** ****** *** *** ******* **** ****** **** **** **** *********** ********** ******* **** ********* ************************** * *************** ********* * ******* ***** *** ******* *** ********* ***** ** *** ********* ** ****** ********* **** ***** ****** ******** **** ***** * ********** **** ** **** **** ******** ** *** ********** ********** ******* **** ********* ************************** ******* ***** ********* ** *** ***** * ************ ***** ********************* * *************** ***** ******************** ** ******* **** *** ****** ****** ********** **** ***** *************** * *********************** *** ********************* ** *** ******* *** ********* ********** ******* *************** ************* * ******* ***** ******* ** ******* **** ****** *** *** *** **** ****** *** ****** ********** * *************** ***** * *************** ** ****** **** * *** ***** *** **** **** **** ***** ** ** *** ******* *** ** *** ******* *** ***** ****** * ******* **** *** ****** ************ ******** *** *** * ****** ******** ** ***** *** ****** ******** ** ******* *** ******* ** ** *** **** ******************* ****** ********** ******* ********* ************************** * ***************** ********* ***** ******* **** ******** ***** ***** *** *** ****** ***** ********** ** *** *** ******** *** **** **** *********** *** **** ******* ** *** ******* **** *** ***** ********** ********** **** ***** *************** * ******** ***** ********** ****** ********************** * ********************************** ****** ******* ********* * **************************** ****** ******** ********** ********** **** ***** *************** * ****** ****** ******************** ****** *********** ***** * ********************** ************** ********************* *** *************************** *** **** **** ***** ********** ******* *************** ************* * ******* * ******* * **************** * **************** * ******************* * ******************* * ****************** * ******************* * ******************* * ******************** * ******************** * *************************** * ***************** * ***************** * *************** * *************** * ***************** * ******************** * ************************ * ************************* * ************************* * ******************* * ******************* * ****************** * ********************** * ******************** * ***************** * ***************** * ****************** * ****************** * ************** * *********************** * ********************* * ********************** * ********************** * ******************** * ******************** * ***************** * ***************** * ******************************** * ******************************** * ***************************** * ***************************** * ******************* * ***************************** * ***************************** * ******************************** * ******************************** * ********************************* * ********************************* * ******************************************* * ************************************* * ************************************* * ***************************************** * ***************************************** * *************************************** * *************************************** * ******************************************* * ******************************************* * ********************************** * **************************** ********* ** ***** *** ** ******* ****** *** **** ********** *** ****** *** ** ******* ******* ***** ******* ******** ********** ******* *************** ************* * *************** **** *********** ******** ******* ********** ******* *************** ************* * ****************** *** **** ** ****** **** **** ************* ****** *** ******* *** ********** ******* *************** ************* * ************************ ** ******* ******** ********** ********* *** ************ ******* ** ********* ***** *** ***** ** *** **** ******** **** ************ ** ******* ******** ********* ********* *********** *********** ******** ********** *********** ******** ********************** * ************************ ************** **** ****** *** ****** **** ******* **** *** ******* ********* **** *** *** ********* ***** ********** ******* **** ********* ************************** * ******************************************* ******* ****** *** ******* ** ********* ** ** ****** **** ********** ** ****** * ****** ** *********** **** ******* ** ********* ********** ******* **** ********* ************************** * ******* **** ******* ******** ******* *** *********** ******** ******** **** **** ** ******* ** *********** * **************** ***** *********** ** *** *** ** ******* ********** ** **** *** ****** ********** *** ** **** ** ***** * ************************** ******* ** **** ******* ******* ********** ******* **** ********* ************************** * ******* ******* ********* ** ******************* **** ******** *** ******* ** *** *** ******* *** *** ******* *********** ** ***** **** ******* ** ****** ** ******* *** ** **** *** ********* ********** **** ***** *************** * ******** ***** ********** ******* **** ********* ************************** * ******* ************ ***** ** *** *** ******** ** *** *** **** ******* ** *** ***** ***** **** ** ** ******* * *** **** ******* *** ********** * ************** ***** *** ****** ** **** **** ***** * ******************** ***** ****** *** ********* ********** ******* **** ********* ************************** * ******* ***************** ***************** ********* * ******* ***** *** ********** *** ********* **** ***** ****** * ****************** ***** **** ** ******* *** ******** **** *** ******** ********************* *** ***************** **** ****** * **************** ***** ******* *** ******** ***** * ****** ****** *** **** ** *** **** ***** ******************* ***** ** ** ******* ** ***** **** **** ** ** ***** **** ****** ***** ** **** ** ******** ********** ******* **** ********* ************************** * *************** **************************** **** ********* *** ******* ****** *** ******** *** *** ***** ********* ********* **** ** *** ****** ********** ******* **** ********* ************************** * *************** **************************** ***** * **** ** * *** ****** ** *** ***** ******* ***** ******* ****** ******* ***** ** *** **** ******** ** *** ******* * ******************* ***** * ****** ** **** *** ****** ***** *********** ** ***** **** ********* ** ***** **** ****** ******** ********** ******* **** ********* ************************** * **************** *********** ***** **** ** ****** *** ******* ** ****** ******* **** **** *** ******* ***** ********** ******* **** ********* ************************** * *************** ************** ************** ***** * ******* ******* ******* **** ******** ********* ** *** ************ ***** *** ******** **** ***** **** ** ********* ******* ** *** **** ** ***** *********** ******* * ************************ ******** **** ** **** ******* ****** ** ***** ********** ******* **** ********* ************************** * ***************** ********* ******* **** ***** ************** ** ***************** ******** ***** *** ***** ******** ** ***** ******** ********** ******* **** ********* ************************** * *************** ************* ********* ***** **** ** ***** *** ******* ******** **** *** **************** ******** ** *** ****** ** *** **** ******* **** *** ******* ********** ******* **** ********* ************************* * *************** ************* ********* ***** **** ** ***** *********** **** * ****** ****** ** ****** ** ******** ********** ******* **** ********* ************************** * *********************** ***** ******* ******************** ****** ** *************** * ********** ******* ** *** **** ***** ******** * ******* *********** ******************** ********** ******* **** ********* ************************** * ********************************* ********* *** *** ******** * **** ********** * ********* *** *** ****** ***** *** ********* ******* *** *** *** ********* **** *** ******* **** **** ********** ********** ******* **** ********* ************************** * ******************* ****************** *********************** ***** **** ** ******* *** ****** ***** ****** ** ** *** **** ***** ** **** ** *** **** ****** **** ** *** ****** ** *** ****** ***** **** **** ******** * ******* ***** *** ********** ** *** ******** **** * ************************ ** ******* ********* ******* **** ***** *** ******* ** *** **** *********** *** ****** ** **** ***** ****** * *************************** ************************** ******************************** ******* **** ***** ***** ** *** ***** *** **** **** ** ***************** ********** ******* **** ********* ************************** * ******************* ***** **** ********** ********** ** ****** **** ********** * *********************** ********* * ******* ***** *** ********** *********** ***** **** ** ******* ***** ** * ********* ********** ******* **** ********* ************************** * ******* ******* ** **** ***** *********** ****** *************** ***** **** ** ****** *********** ** ******* **** ******** * *************** ************** ************** ***** **** ** ****** *********** ** ******** ************** ************** ***** **** ** ****** ******* ** *********** ** ** *** ** ******* * ****************************** ***** *** ***** ***************** * *********************************** ****** * ************************* ******** ** *** *** *********** ****** * ******************************* ******** ** ******** ******** ** *** ****** ********** ******* **** ********* ************************** * ********* ******** *** *** ************** ***** **** ***** ********* ********** ******* **** ********* ************************** * ******* ********** **** *********** ********* * *************** ********** **** *********** ********* * ***************** **** ** ****** * ************************ **** ** ****** * ********************** **** ** ****** * ***************** ***** ******** ** ******* ************************ ** ******* *********** ******** ** *** ****** ******** * ***************** ******* ***** ************** ** **************** ** ******* ********* * ************************* ***** * ******** ** ******* ** *** *** ****** ********* ** **** ** ******* ********* ********** ******* **** ********* ************************** * *************** ***** **** *** ******** *** ******* **** ******** ***** * ************ ***** *** ****** * ********************* ***** ****** ** ****** *** *********** ***** ****** ***************** ** **** ** * *** ***** * *************** ************** ****** ***** **** ** ******* ******* **** *** ******** ***** ** ********* ********** ** ******* ** * ******* ********** **** *** ******* ** ********* ************** *************** ******* ********** ** ******** ******* ***** ** ********* ************** *************** ******* ********** ** ********* ******* ***** ** ********* * ***** ***** **** **** ****** ********** ******* **** ********* ************************** * ********** ***** ** ******* ***** **** ***** ** **** ** *** ****** ***** * ******* ****** ***************** ******* **** ***** **** ** *** ***** ** *** **** ********** ** *** ********* ***** ****** ***** ***** **** ** **** *** ***** ***** ****** ****************** ******** ** **** ******* **** ***** ****** **** ************ * ****************** ***** ************** ******** ** ***** *** *** ** ********* ***** **** ** ***** ****** ********* ******* ******* ********* ********** ******* **** ********* ************************** * ******************* **** * ***** ********** ** *** *************************** ** ***** ******* ** ** ******* **** ****** ******** ********** ******* **** ********* ************************** * ******* ******* ******* *********** ** ***** *** ** *** ** *** ****** *** ***** *** ************* * *************** **** ** ****** * ***************** ******* ** ******** ***** *** ** ****** ***** *** ******* *** *********** ** ****** ********** ******* **** ********* ************************** * ***** **** **** ** ******** *********** ******* *********** *** **** ***** **** ** ** ****** ********** ******* **** ********* ************************** * ******* ***************** ******************** ******* *************************** ***** ** ********* ** **** ** ******** ****** *** ** *** ********** ** * **************** ********** ******* **** ********* ************************** * *************** ************** ************* ***** **** ** ****** *** ***** **** ** ** ****** ** *** ******* ***** **** ******** *** ************** ************** ****** *** ***** * *** ******* ****** ************** ************************ ***** **** ****** ***** ** ****** ***** ** ****** *** ********** ******* **** ********* ************************** * *************** ************** ************* ********* ******* ******* *** ** ****** ******** ******* ****** ******* ********** ******* **** ********* ************************** * *************** ***** **** ** ************* ** ****** ** ***** ********** *** ****** ******** ********* ******* ** ***************** ***** ********* ******* ***** **** *** ***** ****** ***** ******* ******* ******** ********** ******* **** ********* ************************** * ******************* ******* ***** ** *********** * *************************** ******* ***** ***** ** *********** * *************** ******* ***** ***** ** ********** ***** ************ * ****************** ******* **** ******* ***** ****** ********** ******* **** ********* ************************** * ******* ***** ******** * ********************** ***** ****** ** *** *** ************ ** * ***** ****** ***** *** ****************** ****** ***** **** ***** ** ******** ******* ** ***** ******** ************* * *************************** **** ******* ** **** *** ***** ****** ** ***************** * *************** ***** ******** ******** ** ************ ****** ***** **** ***** *** ******* **** ** **** *** ***** ** *** ******** ********* ******** ** *** ****** ***** ********** *********** ******** ********************** * **************** * ************************ * ******************************* ******** ********* ******* ***** ******** ** ***** **** ********** ** ***** * *********** **** **** *** ******* ****** ** ********* ********** ******* **** ********* ************************** * *************** ***** **** ** ****** ** *** ***** **** **** *** *********** ** ******** *** ***** ***** ********** ******* **** ********* ************************** * ****************** ***** ****** ***** ************** *************************************** ** ****** *** ****** ** *** ****** ****** ** **** *** *********** **** ** **** ** *** *** ***** * ********************* ***** ***************** ************** ********** **** ***** *************** * ******** ***** * ******* ****** **** ***** ******** ** * ********** **** ***** *************** * *************** ************** ****************************** ****** *** ** ****** ** **** ********** ******* **** ********* ************************** * ***** ***** * ***** ********* ** ****** ****** ** *** *** **** ********** ******* * *********************************************** ****** * ********************************** ******** * ********************************* ******** ********** ******* **** ********* ************************** * ***** ***** * ***** ********* ** ****** ****** ** *** ************* ** *** ***** *** ********** ******* * ******************************************** ****** * **************************** ******** ********** ******* **** ********* ************************** * ******* ***************** ************************ ***** **** ** ****** ****************************** ********** ******* **** ********* ************************** * ***************** **************** ************************ *********** ** ****** ****************************** * *************** ******************** ************************ **** ** ****** ********** ******* **** ********* ************************** * ******* **************** ******************** ******* ** ****** ***************************** ** **** **** * **** ******* * *** ******** ** *** ***** ****** ** ********* ** ****** ******* ***** ******** **************** ***** ** ** ******** ****** ********** ******* **** ********* ************************** * ******* **************** ************************* ******* ** ****** ***************************** ** **** **** * **** ******* * *** ******** ** *** ***** ****** ** ********* ** ****** ******* ***** ******** **************** ***** ** ** ******** ****** ********** ******* **** ********* ************************** * *********************** ******* ********** ********** ***** **** *** **** ****** ***** ******* ** *************** **** ***** ** ****** ** ***** *** **** ***** ********** ******* **** ********* ************************** * ************************* ***** **** ** **************** *************** *** ***************** *************** ** ***** *** ************ ** *** ***** **** ****** *********** ** *** ********* ** **** *** ************ ***** ****** *** ********** ******* **** ********* ************************** * *************** ******** ***************************** ** ****** * ******* ** ******** ** ************* *** ******** **** ******** *** **** ** **** *** ***** **** ******* ** * ********** ******** ******* ********** ******* **** ********* ************************** * *************** ************** ****************** ***** ******* ***** *** ******* *** ********* **** *** ********* ******** *** ** *** ************ ** *** ***** ***************** **************** ** *** *** ***** ***** ******* ********** ******* **** ********* ************************** * ****************** ***** ************** *************************** ********* ****** ************** ********* *********** ********* ************* **** ****** ******* *** *********** ******** ** ** ************* **** **** **** ** ******** * **** ******** *** ******** ** **** ** *** ** ******* *** **** ** ** ***** ****** **** ** ********** ** *** **************** ******** ********** **** ***** *************** * *************** ***************** **************************** ****** *** ********** ************** *********************** **** ************** *************** ****** ****** ******** ***** ********** ******* ************* * ****************** ***************** **** * **************** ************************* *********** ***** ******* ********** **** ******* ********** ******* **** ********* ************************** * *********************** ***** ***** *** ************* ********** *********** ******** ********************** * ****************** ****************** ************************** ******** **** **** ******* ***** *** ** ********* **** ********** *** ****** ********** ******* **** ********* ************************** * ******* ***** *** *********** *** ********** ** *** ******* ***** ********** *********** ******** ********************** * ************ ***** ************************ ******************* *** ****************** * ******************** *** ******** ********** ** ***************** *************** *** **************** * ****************** *** ***** ** **** **** ******* * ****************** ********** **** **** ****************** *** ***** **** ***************** * ************************** ******* ***** ** **** ***** ************ *** *** ************* ****** ******** * ******* ******* ************** *************** *************** ******* ** ********** *** ***** * ***** ***** * ************************ *** ***** ******** **** ***** **** ******************* ********** ******* **** ********* ************************** * ****** ****** ****************** **** ********** * **** ****** *** ***** ** ************* **************** *** ************* ************** ** **** ** *** ******* *** ***** ** ***** ******** * ******************* *** ****** **** ** ***************** **************** ** ******************* *** *** ********* ** ***************** ******************** ** ******************** * ******************* ***************** ******************** *** ****** ******* *** ***** *** ******* ** ******* *** * *************************** **** *** **** ** *** ***** **** *** **** ***** ********* ****************** ******* ** ***** *** ***** ******** ***** ***** ***** ****** ******* **** ******* **** ** ****** *** ****** ***** ******* ** ** *** ***** ** ****** **** ** *** ****** ***** ***** * *************** *** *** ******* ** *** ************ ***** ** *** ************* ************ ******* ******* **** ********* *** **** ** *** ************* ************************** ******* ** ************* **************** *** ************* ************** ***** **** ** ***** ******** ************ ** ** *** ** ******* ***** **** ********* * **** **** **** ******* ** * ***** **** **** ****** ******** ***** ***** ***** *** ****** ******* *** *** ** ************* ************** ***** *** ******* * **** ***** ********** **** ***** *************** * ************** ************** **************** ****** *** ***** **** ***** ****** * ***** *********** **** ****** ************************ ********** **** ***** *************** * **** *********** **** ** ******* ******* **** ******* ***** * ************** ************** *************************** **** **************** *** *** * **************** *** **** *** *********** ****** ****** ************** ***** **** ************* ********** **** ***** *************** * ********************** ************* *** ******* ******* * ****************** ************************************************************** *** **** * *** ***** **** *** **** ** ************** * ************** ************** **************** *** ** **** ** ****** ***** ********** ******* **** ********* ************************** * *************** ************** ****************************** ****** ** ****** *** ******** ******* ********** **** ****** *** ***** ********** ******* **** ********* ************************** * ******************* ****************** ************ ********* *** *** *** ***** ** ******* ** ******* * ****** ********** ******* **** ********* ************************** * *************** ************** ******************** ***** ** *** ****** ****** **** ** *** ** ********* **** *** ******* ** ********** ********** ******* **** ********* ************************** * *************** ************** ******** ***** ** *** ****** ****** **** ** *** ** ********* **** *** ******* ** ********** ********** ******* **** ********* ************************** * ****************** ***** ******* ***** ********** ******* **** ********* ************************** * *************** ***** ************** ************ ** ***** *** ******* ** ******* ***** *** ********** **** ***** ****** * ********************* ********* * ******* ** ******** ****** ***** *** ******* * **** ***** ********** ******* **** ********* ************************** * *************** ***** ******* *** ***** ******* ************** ************ ************** ************************** ******** ************** ************** *** ************** ************* ** ****** ******* ** ****** **** *** **** **** ******* **** *** ***** ** ***** *** *********** **** ** **** **** *** ******* ** ************ ******* * ************** ***** ***** *********** *** ********** *** ***** *********** ****** **** ***** ******** *** ******* *********** ****** ** ****** ****** ** ***** * ************************ *** ***** ********** * ********************************** *** ********** ** *** ***** ********* **** * ********** ******** *** **** ***** ** ********* ********** ******* **** ********* ************************** * *************** ************** ************** **** ******* ** ***** ****** ** ***** ***** ** ************ ************** ************** **** ********* ************* ** **** ***** ********* ********* **** **** ******* **** *** **** ***** *** ****** ******** *** ********* **** ****** * ******************* **** ************* ** ***** ***************** ** ********** *** *********** *** ******* ** ********** *** ********* **** **** ******* ** ***** ************** ** ********* ********** **** ***** *************** * ****************** ************************************************* *** ************ ** * **** ********* * ** ********************************************************** ***** * ******************* ****** ********* *** ***** ********** *********** ******** ********************** * *************** ****** ********* ********* ****** **** ********************************** ** ************************ **** ********** ********* **** ******** **** ************** ******** ****** ***** **** ***** *** ** *** **** ********* *** ** **** ***** * *********************** * ********************** * ********************************* * *************************** ******* ******* ** ******************** *** ** ********** ******** ********* ** ******************* ********** ******* **** ********* ************************** * *************** ******* ********** ***** ** ********* ******* ** *** ********* *** **** *** ************ ******* **** *** ********* *** ******* ** **** ******** **** ********* * ********** ***** ***** **** *** ****** ****** ********** **** ***** *************** * ************** *********** ******* ************** ****** **** ****** ** ************ ********** **** ***** *************** * ************** ********************* *** ******* **** **** ** ********** * ******************************* ******************************** ************************* *** ********* ****** ********** **** ***** *************** * ******** ***** ********* * ************************ ******* ********** **** ***** *************** * *********************** ***** ******************** *** ********** ******* ** ************** ************** *********************** ****************** ************** **************** ***************** * *********************** ************************ **** ***** ********* **** **** ***** * ** ** ** ********* **** ** ******** ** ******* **** *************************** * ****************** ************** **** ****** ** ****** *** ** ************* * ******************************** ************** **** ********* ** ********* ** ***** *** *** *** * ********************** ********************* ****** ******* ** *********** ********** ******** * ******************************* *********** ************************** ****** ** ****** **** ********* ** ***** * *************************** ********************************** ************************** **** ***** ***** ** ******* ***** **** ** *** ***** ****** ****** ***** ********** ********** ******* **** ********* ************************** * ******* *********** ******* ********* ** **** *** ********* **** **** *** **** **** *** ********* **** **** **** *** *********** ****** ****** **** **** ************* ** *** ******** ********* *** ***************** *** *** ***** ********* ** **** *** ******* **** ****** ** ******* * ******************* ***** **** ******* ** ****** ****** ******* *** ******* ** **** ** *** ********** ** *********** ***** ****** ** **** ******** * ******************* ***** *************** ** *** ****** ***** ******** ******* *** *** ************** *** *** ******************** **** *** ******* * *************************** ***** ******* ******** *********** ******* ********* ** ***** *** **** ** ****** * ***** **** * **** ** ******* ********* ** *** ********** * *************** ***** ************* ******** ** **** *** ******* ***** *** **** ** ***** ********** **** ****** *** ********* ** ** *********** ****** *** ********* ******* *** *** **** ******* ** ** ***** *** ******** *********** ***** ******** ******* ********* * *************** ***** ******************************* *** ****************************** ***** *** ****** **** ***************** *** *************** ************* ***** ******* ********** *** ********* **** *** ****** ***** **** *** **** ** ********* *** ******* *** ******** ******* ** **** *** **** *** ******** ** ** ****** ***** *** ***** **** **** ********* ************* ** *************** *** *************** ** **** *** ****** ***** ***** ***** ******* ** ***** ******* ** ** ******** ********************** *** ******************** * ************** ******** ************ *** ***** ** ** *** ********** *** *** ******** ******** ******** **** ******** ******** * ****************************** **** **** ***** *********** ** *** **** ** *** ***** ********** ******* **** ********* ************************** * ****** * ***** ******* ******** * **************** * ***** ******* ******** ********** *********** ******** ********************** * ******* ***** **** **** *** ****** ** ****** ****** * ************ ***** ********************** * *********************** *** ***** * ************************* ***** ******* *** ************ ******** ******** * ******************************************* ******* *** ******* *** ************* * ******************************** ***** ******* *** ******** ****** * ******** ** ******** * ******* *** ****** ** ****** ****** * ********************************* ***** **** ****** * **** **** **** ** ************** * ***************************************** * ******************************************* * *********************************************** ******* *** ****** ****** ******* * ******************* ***** ****** ***** ******** * *************** ** *** **** *** **** ********* ** *** ************** ** *** ****** *********** ********** ******* **** ********* ************************** * ************************* ************* **** ******** ** *** ********* ** *** * ** ******* ***** *** ***** ********* ** ****** ******* ********** *********** ******** ********************** * ********************** ******* **** ***** ** ******************** **** **** ***** * ******************************************* ******* *********** ******* ********** *********** ******** ********************** * ******* *** ******** **** ******* **** ***** **** ******* ******** *** ********** *** ****** **** ******** **** **** ** ******* ** ********** * *************** ***** *** ************ ** ******** * **************** ********* ****** *********** ***** * ***************** ***** ****************** ***** ** **** **** ******* ***** **** ******* ******* ** ********** * ************************ *** ** **** **** *** ********* ********** * ******************* ****************** ****************** ********* ******** ***** * ************************* * ***************** ******* *********** ******** * ******************* ********* ****** ***** * ******************* ****** ******* ** ******** ****** * ******************************** ******* ****** **** ************ * ******************************** * ************************************ * **************************** * **************************** * ********************** ******* **** ******* ** ******* ************** ***** *** ******* ****** * ****************************************** * ****************************** * ******************************* * ************************* * ************** * ****** ***** ******* *** ************** * ****************************************** ******* *********** *** ****** ************ * ********************* ******* ********** ************** ** **** ** ******* ********* ********** ******* **** ********* * ****************** ********* ***** *********** ******* *** ** ****** ********** **** ** *** **** ******* ** *** ******** ********* ********** **** ***** *************** * ****************** ************************ ***** ***** ** ***** ******** ************************ ****** *********************** ***** * ******************* ************************************************* **** ******** ** *** ********* ** *** * ** ********** ******* **** ********* ************************** * *************** ************** ************************ ***** *********** ** **** ** * ***** ****** ******** ** *** ****** ****** ***** ** ******* ******************* **** *** ******* * ******* **** ****** *** ******** ********** ******* **** ********* ************************** * **************************** *** ****** **** *** *** ***** **** *** ******* **** **** *** ***** ***** ** *** ****** ***** ** *** *************** ***** **** *** ******* ** ********* ** ****** ** ***** ********** *********** ******** ********************** * ********************** ******* ** ***** * **** *** ******** *** **** * **************** ******* ******* * ***************** ****** ******* ** *********** ********* ****** * ******************** *********** ********* **** ******* **** ******** * **************************** ***** ******* ******* **** ****** ********** * ***************** **************** ****************** ******* ****** **** **** ** ** **** ***** *** *********** **** ******************* ********** *********** ******** ********************** * ***** ******* ** ******* ******** * ***** ******* *** *********** *** ********** * *********** ********* *** ******** ** ******* * ******** ****** **** *** *** ****** ************ * ******** **** **************** *** *********** * ****** ******* ** ********** *** ******* ****** * **** ***** ****** ********** ******* **** ********* ************************** * ************************************************** ****** * ****************************** ****** ****** ***** ******* ** *** ***** *********** * ** ********* ******* ** *** *** * ******* ** ***** ** ****** ** ****** *** **** ****** ****** **** ****** * ******* **** **** ***** ** ******* **** ***** * ******************* ******* **** ********* ***** ***** *** ***** ***** ** ******* *** ******** ** *********** *************** ** * ****** * *************** ******** ** *** ****** ************** ***** **** ** **** ** ***** ***** **** *** **** ***** ** *** * ********* ******* ****** ** *** ****** * ****************** ***** ****** ** ***** ******** ** * ***** *** ******** **** *** ******* ***** * ************************ ******** ** *** ** ****** ** **** ****** ***** ********* ** ** ******* * ******************* ******* ****** ***** ********* **** ************************ ** ******* * ************** ******* **** **** ***** *** ******* **** ***** ********** ******* **** ********* ************************** * ********************** ***** **** ******* ** ******* ****** ******** * ********** ******************* ********* ************* * ********** ********************** ********* ************* *** **** **** **** *********** ** *** ************* ** ******* * ******* **** ******* ** *** ******* ***** ********** ******* **** ********* ************************** * ********************** ******* ***** ******* ** **** ** ***** *** ******* **** ***** * ********************** ******* ********* ************* ********* ***** **** *** ******** *** ********* ** *** *** ** *** ***** **** * ****** *** ******* ****** *********** *********** ********** ******* **** ********* ************************** * ********************** ***** ******* ** ******* ******** ** ******** ******** *** ******** * *************** **** ******* *** ****** ***** ******* ** ******* ********* * ******* ***** **** **** *** *********** ********** ******* **** ********* ************************** * ********************** ***** *** ******** * ********* ** ************************* ********* ******* * ********* ** ************************* ********* ******* * ****** ****************** **************** * ****** ************** ********* ************ * ****** ********* ********* ************ ******** ********* ************ * ****** ********* ********* ** ********** ******** ********* ************ ******* *** ****** ** *** ********** **** ** ***** **** *** ****** ******** **** ** **** ********* ***** *** **** ***** **** ** ******* ****** **** *** **************** ** ************ *** ****** ***** **** ** ****** **** **** ** ****** *** ******* ***** ** *** ******* ***** * *************** ******** ** ******* *** ***** ******** ** *** ****** ***** ***** *** ***** **** *** *** **** ******* * ****************** ***** *** ******* ** *** *** *************** **** ******* ***** ** **** *** **** *** **** *** *************** **** ****** ********** ******* **** ********* ************************** * ******* ********* **** ** ****** ***** ***** ***** ** ******* ******** ** ***** ******* ****** ** ***** ***** * ******************* ******* ** ************* *** ****** ******** ********** ******* **** ********* ************************** * ******* *************************** ***** ****** ** ** **** ** *** **** **** ******* *************** ******* **** ***** *********** * ********************** ***** ******* ** ******* ****** *** ********* ******* *** ******** * *************** ******** **** ****** ******* ** *** *** ******* ***** ** *** ***** ******* ** **** *** ******** ** *** ***** ***** * ********************* ***** ******* ** *** ******* *** ******* ** *** **** ****** **** *** ******* ***** **** ******* *** ******* **** ** **** *** ************* ***** ****** ******* ***** **** ******** ********** ******* **** ********* ************************** * ******************* ***** ***** *** *** *** ****** ** *** ******* *** ******* ***** ** ********** * *************** ***** ***** *** *** **** ** *** **** ****** ******** * ****************** ******** *********************************** ** **** ******** *** *** *************** * ****************** **** ********************** ** ****** ** ** *** ** **** ** *** **** ******* ********** ******* **** ********* ************************** * ******* ***** *** **** **** *** ****** ** *** ************* ****** ********************* * *************** ***** *** ****** ***** **** ****** ** *** *** ** ****** *** ****** ******* ** *** ************ * ***************** ***** ***************** ******************** ** *** ****** ** ****** ** ** ****** ********* ** **** **** ** ********* ***** ********* ** **** **** *** **** *** ******* ****** *** *********** *** **** ******* ***** ********** ******* **** ********* ************************** * ***************** *********** ***** ***** ** **** ******* ***** ** *** ****** ** ****** ****** ** ******** ******** ***** ** ***** ****** ** *** ******* ***** * ****************** ***** ******* ** ******** ******* ******* ** ******* *** ***** ******* * ******************************* ***** * ******************************* ***** * ************ ******** ** **** ****** ** *** ********* ********** ********** ******* **** ********* ************************** * ******************** * ****** **** ** * ************* ******** ******* ******* *** ******* *** *** ***** ***** ** ** **** ********* *** *** **** *** ******* *** ******* ** * ****** *** *** ***** **** ***** * *************** ******** ** *** *** ****** * ************************ ******* **** **** ***** *** ******* *** *********** ** **** **** ** ***** ********** ******* **** ********* ************************** * ****************** ***** ***** ************** ** **************** ***************************** ******* **** ******** * *** ***** *** ******* *** *** *********** *** ******** ** ********* *** ** *** ******* ** **** ******* ** *** ***** ** ******** ********** ********** ******* **** ********* ************************** * **************************** *********** **************** ******* ***** ********* ****** ******* **** *********** ***** *** ******* **** *** ** ***** ** ********* *** * **** ********** *********** ******** ********************** * *********************** *** ****** *** ****************** * ****** * ****************** * ********************* * ****************** ******** *** ****** **************** ** ********** * ************** **** *** ******** **** **** **** *** ********** ****** *** **** ********* **** *** ******* ** *** ***** *** ******** ** *** ******* *** **** ***** * ****************** * ************************************ * *************************************** *** **** ********* ** *** ****** **** * **** ***** * ************** * **************************** * **************************** * ********************** * ******************************** * *************************** ********** ******** ****** **** ******* ********** * ************************ *** ******** **** ** *********** **** ***** ************* ****** **** ****** ******** ********** *********** ***************** * ********************* ********************* ************ ****** *** *** ***** ********** *********** ******** ********************** * ****************** **** ******** ******* *** ******* ****** *** ************ **** ******** ** ****** **** *** ********* *** ******* *********** *** *** ****** * *********** * ****************** * ************************************ * *************************************** ***** ********************* ** ***** * *********************** ************* ************ * ************** ************** ******* **************** * ********************* *********************************** * ******************************** * *************************** * **************************************** * **************************************** * ********************************* ***************** ******** ************* **** ******* ********** ***************** ******** * ***** ********** ****** ******* *** ******** * ************************* * **************************************** * ******************************************* * ***************************************** * ******************************************* * ********************************************** ******** ******** ********** *********** ******** ********************** * ************** ************** **************************** ******* *** ************* ******** * ************** ************** ************************* **** ********* * ************ ****** *** ************ **** * ****************** ****************** ************ ***** ******************* **** ******* * ****************** ******************** **** *** **** * ****** ******** ***** ** * ***** *** *** ****** *** ************* ********* * ********************* *** ****** * *********** * *** ********************* * ************* ********* *** ******************* * ********************** *** ******* ******** ** **** ********** * ******************************** * ******************************* * ***************************************************** * ************************************************** * ********************************************************* * ****************************************************** ******* *** ************* ********* * ************************************** * ************************************** ******* ****** ** **************** ********** *********** ******** ********************** * ************** ************** ******** **** ******** ******* ** *********** *** ************* ******* **** ********* ** ************ * ************** ************** ******* **************** *** ******* *** **************** * ******************************** * *************************** * ************************************** * ************************************** * ********************************* *************** ******** *********** **** ******* ********** *************** ******** * ***** ********** ****** ******* *** ******** ********** ******* **** ********* ************************** * *************** ***** ******* ** ***** *********** ********** ******* **** ********* ************************** * *************** **** ********* ************* ** ****** *** *********** **** ** *********** ** ** ************** * ******************* ***** ****** ** ****** *** ********** *** * ***** *********** * ******************* ***** *********** *** *** ****** ********* ****** ********** ******* *************** ************* * ************** ***** ******* ****** ** ******* *** ****** ** * ******** ******* **** ******* * ************ ***** ********** ******* *************** ************* * ************** ******* *** ***** ** ******** * ************ ***** * ************************************* ***** ******* ********** ***** ** *** ******* ******* * ************************* ***** * ******************************** ***** * ********************************** ***** * **************************** ***** * **************************** ***** ******* ** **** ************** ********** *** ********** **** *** ******* *** ***** ** * ********** ** ***** ******* ****** ** *** ********** ******* ****** ****** ** ***** ***** *** ******* ** ****** ******** ******* ****** ********** *********** ******** ********************** * ****** ***************** ****************** **** ******* ********** *********** ******** ********************** * ****** ***************** ****************** ******* ** ******* **** ********* *** ******** ******* ********** *********** ******** ********************** * **************** **************** ***************** *** ******* **** *** ** **** **** ************** ** ****** ******* ** * ************* * **************** **************** ****************** **************** ******************** *** ******** ****** **** *** *** ************ ********** ******* ** **** *** ********** * *************** ************** ************************************ ****** ************ ** *************** ********** *********** ******** ********************** * ******************************** * *************************** * ************************************ * ************************************ * ****** * ************** ******** ** ********* *** *********** ** ** **** ** *** *** ******** *** ******* **** ****** ** * ***** ******** *** ********* *** *********** ***** ******* *** ******* ** ********************* *** ********************* *** ******* ** ***************************** * ***************************** * ******************************** * ******************************** * ************************ * ************** * ****** ******** ** ******** ** ** **** ** ****** *** ********* *** ** ***** ** **** ** ********************* *** ****** ** *** ****** ********** ** *** ********** **** ***** ** ******* ** ******** *** ******** ** ******* ** ************* * ************** ************************** *********** * ********** ******* ********* ** ************ *** *** ****** *********** ** *** **** ***** ******* *** *** ********** * ******************* *** ****************** ******** ********* ***** **** ****** ******* ************************ ******** ** *** *** **** ****** *** ************ ** *** *********** *********** ********* ****** *** ************** * ********************************* * ********************************************** * ************************************************ *********** *** ********* ********** ******* **** *** ****** ****** **** ****** ******* ************************* ********** **** ***** *************** * ******** ***** * ************************ ******* ********** **** ***** *************** * ****************** ************************ *** ******* *** ***** ********* ** ***** * *********************** ****** ***** ************************ *** ************** ******** * ************************ ****** ********** **** ***** *************** * ************** ************** ******** *********** ************ * ****************** ****************** ************** *** *** *********** *** ********* **** **** **** *** ******* ***** ** **** ****** ******** **** ********** ********** ******* **** ********* ************************** * ******* ********* ****** ***** ** **** *** ****** ** ************ * *************** ********* ****** *** ********** ****** ***** ** ***** *** ******** ** * ***** **** ** ******* ** ***** ** *** ******* ***** * ********************** ***************** ****** ****** ********** ******* ******** ******************** * ********************** **** *** ****** ********** ***** * **************************** **** *** ****** ********** ***** * *************************** **** *** ****** ********** ***** * ******************* **** *** **** ***** *** ********** * ************ **** *** **** ***** *** ********** * ************** *************** *** ***************** ********* * ********************** **** *** **** ***** *** ********** * ************************ *** ********** ***** ****** **** *** ********** * ******* *** **** *** **** **** *** ********** * *********************************************** *** **** ********* ********* * *********************************************** *** ****** ********* ********* ********** ******* ******** ***************************** * ************ **** ******* *** *** ***** ***** * ********************** *********************** ******** ******** ** ************ **** ** ******* *********** * ****************** ************ * **** ********* **** ***** * ***************************************** ********* ****** * ********************************************** * *** ********* ********* * ************************************************* *** *********** ********* * ********************** *** **** ******* * **************************** *** **** ******* * ****************************************** *** ********** ********* ************ * ******************************************* *** *********** ********* * ****************************************** *** ********** ********* * ************************** *** ********* **** * *********************** *** ********* **** * *************************** *** ********* **** * ******************************* *** ********* **** * ******************************** *** ********* **** * *************************** *** ********* **** * ******************************* *** ********* **** * ******************************** *** ********* **** * *************************** *** ********* **** * **************************** *** ********* **** * ***************************** *** ********* **** * ************************ *** ********* **** * ***************************** *** ********* **** * *************************** *** ********* **** ********** ******* *************** ************* * *************** ******* ***** ********* ********* ** ******* ********* *** ********** ******** ***** **** *** ***** *** ***** *** ******* *********** ***** ** ********* ***** ****** ********** **** ***** *************** * ************** ************** ***************** **** **** **** ******* **** * ************************* *** ************* ** *** ** ******* ** ******************* *** ************************ ****** *** ***************** ************** * ******************************** ******** *** *** ******* *********** **** **** **** *** *************** ******** *** **** * ******* ******* ********** ******* *************** ************* * ******************* ***** ******* ******* ******** **** ******** ******* *** ****** ***** ** ************ ** ** ***** ******** *** * *** *********** ** *********** ********** *********** ******** ********************** * ************** ************** ******** *** *** ************* ********** ** **** ** ******** **** ************ *********** ********** ******* *************** ************* * ******************* **** ****** ***** ** ******* **** * ******************* **** **** ** ****** ** *** ** ******* ********** *********** ******** ********************** * ************************* ***************** ********************* ****** ********* ** *** ********* ******* *** *** * *** ******* ***** ********** ******* *************** ************* * ******************* ***** ****** ******* *** ****** ***** ** ** ***** *********** *** ** ******* ** ************ *** ********** ********** **** * *********** ******* ********** * ********************** *** *** * ******* ********** ****** ***** ******** ** ******* ******** ********** ******* ******** ***************************** * *********************** *********** *************** ****** ** ** *** * ******************************************* *** ****** *** *** ****** * ******************************************* *** ****** *** *** ****** * ************************* **** *** *** ****** ********* * ******************************************** *** ****** *** *** ****** * *********************************************** **** ****** *** ******* ** ****** ******* * ******************************************** **** ****** ** ****** ******* * ***************************************** **** ***** *** ******* * ****************************************** ** ****** ******** **** ****** * ************************************************* ** ****** ******* * ****************************************** ** ****** ******* * ***************************************** ** ****** ******** ******* ***** * ******************************** **** *** *********** ********** * **************************** *** ********* **** * ***************************** *** ********* **** * ************************** *** ********* **** * ***************************** *** ********* **** * *************************** *** ********* **** * ************************* *** ********* **** * ************************* *** ********* **** * ************************** *** ********* **** * ************************** *** ********* **** * ************************** *** ********* **** * ************************** *** ********* **** * ********************* *** ********* **** * ********************** *** ********* **** * ************************* *** ********* **** * ********************** *** ********* **** ********** *********** ******** ********************** * ******************* ******* ***************** ************* ** **** ******** ** *** ****** **** *** ******* **** **** ***** *** ****** **** *** ** ******** ***** ** ************************** ********** ******* ******** ***************************** * ****************************************** *** **** ********** * ********************************************* ********* * ************************************************* *** ***** ****** ********* * **************************************************** ******** * ****************************************** *** **** ********* * ********************************************* ******** * ******************************** *** ***** *** *** *** ********** * ******************************* *** ********** ** ********* ********** **** ***** *************** * ********************* ********************* ********************** ***** *** ** ****** ******* ***** ******** ***** ********** **** ***** *************** * *********************** *** *********** ********** **** ***** *************** * ************** ***************** **** *** * ***** ******* ************** ** ****** ******* **** **** ********* ** *********************** ********** **** ***** *************** * ****************** **************** ****** ****** ****** ** **** **** ***** ************* * ****************** ***************************************************** ***** ******* *** ********* ******* **** **** *** *** ** **** ********** **** ***** *************** * *** ******* *** ****** ***** * ****************** ************************ *** ******* *** ************** ************************ ********* *********************** ********* * ************** ***************** ****** ************ ** *************** ***************** ******** *** ********* * ***************** *** ****** * ************************** *** ********** ***** ********** **** ***** *************** * ******************************** *** ******** *** ***** ****** ****** * ******************************************** ****** *** *** ***** ****** ** *** ******** ********** **** ***** *************** * *********************** ************************ ********** ****** ** ********* ******** ****** * ****************** **************************** ********* ***** ****** ******* * ******************************** *** ****** ************* ********* *** *********** *********** ********** **** ***** *************** * ****************** ***************************************************** ***** ****** ** ***** ** ******* *** ****** * ******************************** ********* ****** **** ***** *** ****** ********** ********** **** ***** *************** * ***** ** ****** ******** ******* ******** ****** ****** ******** ******* *** ****** **** *** ******** * ****************** *********************** ******** *** **** **** *** ********* *** ******* *** ******** *** ********* ****** ****** * ******************* *** ***** *** ******* ****** ****** * ****************** ************************** ***** ** ******************* ***************************************************** **** ********* **** **** ****** ****** *** **** *** ****** ****** ** ********* ************** **** ****** ********* ** ************ ** ******* ******************* ****** ******** ** * *** ****** ******** **** * ******************************** *** ****** ********** ********** *********** ******** ********************** ***** *** ******* ** ****** *** **** ** *** ******** ******* * ******* *** ******** * ****** *************** *** ***** ** full control of the font's changes) added a menu item for the font panel added a shortcut for the palettes panel (@"p") * GormWindowEditor.m : [-acceptsFirstResponder] new method, returns YES [-initWithObject] set self as initialFirstResponder of the window [-changeFont:] new method, change the font of the selected controls [-selectObjects:] update the font in the font panel * Palettes/2Controls/GormSliderInspector.gorm: font updates 2001-08-20 Pierre-Yves Rivaille * Palettes/2Controls/main.m: Add stepper control to the controls' palette * Add stepper inspector. * Palettes/2Controls/inspectors.m: added GormSliderAttributsInspector class * Palettes/2Controls/GormSliderInspector.gorm: New file. * Palettes/2Controls/GNUmakefile: Update 2001-08-18 Adam Fedor * GormWindowEditor.m (-_editTextView:withEvent:): Size the NSForm to fit when titles are edited. * Add slider inspector. * Palettes/2Controls/inspectors.m: New file. * Palettes/2Controls/GormSliderInspector.gorm: Likewise. * Palettes/2Controls/GNUmakefile: Update 2001-07-18 Adam Fedor * Version 0.0.3. 2001-07-10 Richard Frith-Macdonald GormDocument.m: ([-detachObject:]) retain object name on entry and release on exit, or if the object is not in the name table the detach process could cause the name to be released before we try to use it to remove the object from the table. 2001-07-09 Richard Frith-Macdonald Gorm.m: Tidied code a little to conform to coding standards and avoid gcc-3.0 compiler warning. Incorporated Pierres fixes to his last patch. 2001-07-08 Mirko Viviani * GormWindowEditor.m ([GormWindowEditor -_editTextView:withEvent:]): return if mouse not on cell. 2001-07-07 Richard Frith-Macdonald Gomr.m: Fixed typo in info panel and updated a little. 2001-07-04 Pierre-Yves Rivaille Added the ability to create the .m and .h files of a class created within Gorm (it's a basic implementation but it works) Added an "application: openFile:" method in the class Gorm and a GormInfo.plist file, it is now possible to open a Gorm document from ProjectCenter (and I suppose GWorkspace but I have not checked yet) a keyEquivalent for the inspector (i was really missing this ...) no more [menu display] in the initialization of Gorm, I found out that it prevented a proper docking within WindowMaker's dock, and it does not seem to have any side effect. 2001-06-24 Mirko Viviani * GormWindowEditor.m ([GormWindowEditor -_validateFrame:forViewPtr: withEvent:update:update]): fixed checks for non-matrix control. Allow the matrix to reduce rows and columns. 2001-06-20 Adam Fedor * GormDocument.m (-beginArchiving): Add filesOwner class name to archive. (-loadDocument:): Retreive and set filesOwner class. * GormClassManager.m (-removeOutlet:forObject:): Remove from allOutlets even if not in extraOutlets. (-ok:): Implement renaming outlets. 2001-06-18 Adam Fedor * GormWindowEditor.m (-_validateFrame:forViewPtr:withEvent:update:update): Allow the frame to increase even if it's already too small. * Palettes/1Windows/main.m: Implement GormWindowSizeInspector. * Palettes/1Windows/GormWindowSizeInspector.gorm: New file. * Palettes/1Windows/GormWindowSizeInspector.class: Likewise. 2001-06-15 Adam Fedor * GormWindowEditor.m (-_editTextView:withEvent:): New method to edit text in place (handles only NSForms now). (-mouseDown:): Double-click on NSForm edits NSFormCell. 2001-06-06 Adam Fedor * Changes to allow an NSBox to be 'edited' and add subviews, move them around inside the box, etc. * GormPalettesManager.m (-mouseDown): Make sure the drag view is the proper one, not a subview of the indented item. * GormViewKnobs.m (GormDrawOpenKnobsForRect): New function. * GormWindowEditor: Add edit_view ivar to show which view accepts DnD, selections, etc. Changes to allow double-click to 'edit' an NSBox. 2001-05-09 Adam Fedor * GormWindowEditor.m (-_validateFrame:forViewPtr:withEvent:update:): New method - validate and update view during resize. 2001-05-08 Richard Frith-Macdonald Applied patch by Raphael Sebbe to add support for custom objects. Went through the code and tried to make it conform to GNUstep coding standards. * GNUmakefile: Custom class modifications * Gorm.h: ditto * Gorm.m: ditto * GormClassManager.h: ditto * GormClassManager.m: ditto * GormDocument.h: ditto * GormDocument.m: ditto * GormInspectorsManager.m: ditto * GormObjectEditor.m: ditto * GormPrivate.h: ditto * GormWindowEditor.m: ditto 2001-04-24 Adam Fedor * Version: 0.0.2 snapshot * GNUmakefile: Add rpm package info * Gorm.spec.in: New file. * Documentation/{readme,news,install}.texi: Update * README, INSTALL, NEWS: Regenerate 2001-02-07 Richard Frith-Macdonald * GormInspectorsManager.m: Resize a few buttons to fit text neatly. 2001-02-06 Richard Frith-Macdonald * Palettes/2Control/main.m: Added patch to tidy up and add more objects to the controls palette ... patch by Jason H Clouse Removed bogus code that selected a window when it was made key. 2001-01-27 Richard Frith-Macdonald * GormPalettesManager.m: Ensure that palette manager window can never become key or main. Accept first mouse events so drag start works. 2000-11-06 Adam Fedor * Documenation: Remove use of tmpl texi files Fri Feb 25 16:31:00 2000 Richard Frith-Macdonald * Gorm.m: Fix a few window deallocation problems. * GormDocument.m: Fix error in renaming objects. 2000-02-21 Adam Fedor * GNUmakefile: Don't make Documentation by default for those who don't have TeX setup. Sun Feb 14 06:56:00 2000 Richard Frith-Macdonald * Palettes/2Control/main.m: Add popup and pulldown menu controls though there is no way to edit them yet. Sun Feb 6 8:44:00 2000 Richard Frith-Macdonald Removed InfoPanel.m and updated Gorm to use standard panel now that NSApplication supports it. Fri Feb 4 11:10:59 2000 Richard Frith-Macdonald * Palettes/0Menu/GormMenuInspectors.m: Added code for setting key-equivalent in menu item inspector. Thu Feb 3 16:16:59 2000 Richard Frith-Macdonald * Gorm.m: tidied start/end testing. * GormDocument.m: ditto Sat Jan 15 04:35:59 2000 Nicola Pero * GormObjectEditor.m ([GormObjectEditor -activate]), ([GormObjectEditor -orderFront]): Trivial fix to make it compile. Fri Jan 14 16:22:00 2000 Richard Frith-Macdonald * GormDocument.m: Fix to deactivate editors while copying to pb and add support for a few more document setup types. * Gorm.m: Add Inspector, Panel and Empty documents. Fri Jan 14 9:34:00 2000 Richard Frith-Macdonald * Palettes/OMenus/GormMenuEditor.m: ([mouseDown:]) support for dragging menu items to rearrange their order. Thu Jan 13 20:34:00 2000 Richard Frith-Macdonald Preliminary menu support (very limited). Fri Jan 7 11:03:00 2000 Richard Frith-Macdonald * GNUmakefile: Set Gorm_PRINCIPAL_CLASS * Gorm.m: Do startup stuff in [-finishLaunching] and use the NSApplicationMain() function to run the app (as well-behaved apps do). Wed Jan 5 17:00:00 2000 Richard Frith-Macdonald * Palettes/0Menu/main.m: First cut at code for providing menus items on the palette. * GormWindowEditor.m: accept first mouse so we act immediately that the mouse is clicked anywhere in the window. * Palettes/1Window/main.m: Tidy attributes editor and add support for setting window title. Tue Jan 4 17:42:00 2000 Richard Frith-Macdonald Added 'miniaturize', 'close', and 'revert to saved' menu items and implemented their actions. Tue Jan 4 12:13:00 2000 Richard Frith-Macdonald Various tidyups Somewhat improved documentation Added registration ddefaults stuff Mon Jan 3 10:50:00 2000 Richard Frith-Macdonald Rewrote testing mechanism so that we test by creating an in-memory nib, and load that nib. This way, the testing process has no effect on the original objects in the document we are working on. Also changed the editor api so that we have a deactivate method. Editors are deactivated on archiving and reactivated afterwords - this means that we no longer need to destroy all editors during archiving in order to stop them being included in the archive. Thu Dec 23 16:32:00 1999 Richard Frith-Macdonald Added generic object inspector. Wed Dec 22 12:16:00 1999 Richard Frith-Macdonald Replaced the two NeXT images for sounds and classes. Improved drag and drop. Tue Dec 21 15:30:00 1999 Richard Frith-Macdonald Added size inspector for autoresizing of views. Tue Dec 21 8:10:00 1999 Richard Frith-Macdonald Added inspector for files owner so we can create connections from objects inside the nib to the files owner. Mon Dec 20 14:16:00 1999 Richard Frith-Macdonald Added connections inspector so connecting objects should work. Use information from 'ClassInformation.plist' to specify outlets and actions for a class. Added GormClassManager stuff to manage this information. Sat Dec 18 21:24:00 1999 Richard Frith-Macdonald Add partial support for draagging into object view. Fix move/resize of window subviews to make sure subviews can't be dragged outside visible area. Fri Dec 17 18:44:00 1999 Richard Frith-Macdonald Add some support for connections - handle link dragging within window editor - raise connection inspector on completion. Thu Dec 16 21:35:00 1999 Richard Frith-Macdonald Change directory structure - add palettes directory, move palettes into it, rename them, change automatic loading of palettes to do it in palette name order. Thu Dec 16 15:45:00 1999 Richard Frith-Macdonald * GormWindowEditor.m: Implemented support for moving and resizing subviews within a window. * Gorm.m: Implemented edit menu (mostly) with cut and paste. Thu Dec 16 6:54:00 1999 Richard Frith-Macdonald * GormWindowEditor.m: Implemented selection mechanism including marking subviews within a window by drawing knobs on them. Wed Dec 15 15:27:00 1999 Richard Frith-Macdonald Archive save/restore fixes. Implementation of framework for interactive testing mode. Tue Dec 14 20:13:00 1999 Richard Frith-Macdonald Enough for today. * View/View.m: Added a single button to the 'View' palette. * GormPaletteManager.m: improve DnD image ffset code. * GormWindowEditor.m: accept dropped views in window. Tue Dec 14 19:53:00 1999 Richard Frith-Macdonald Removed GormResourcesManager - merged functionality into GormDocument Loads of other minor changes too - hopefully all simplified a bit. Tue Dec 14 17:33:00 1999 Richard Frith-Macdonald * GormDocument.m: Major changes - nearly all methods implemented to including all the editor related methods. * GormWindowEditor.m: Loads of stuff fleshed out, mostly just leaving drawing code to do. Mon Dec 13 20:04:00 1999 Richard Frith-Macdonald * GormViewKnobs.m: imported from IM Mon Dec 13 14:57:00 1999 Richard Frith-Macdonald * Gorm.h: Added NSView additions * GormWindowEditor.m: new skeleton file. * GormDocument.m: handle class replacement on archiving/unarchiving. Add filesOwner and firstResponder dummy objects. * GormResourcesManager.m: tidy files owner and first responder stuff. * GormObjectEditor.m: Use neater mechanism for determining image to be displayed in matrix. Wed Dec 8 20:54:00 1999 Richard Frith-Macdonald * Gorm.m: ([-init]) make sure that the palettes manager is loaded. Wed Dec 8 16:33:00 1999 Richard Frith-Macdonald * GormObjecteditor.m: ([-refreshCells]) cell highlighting fixed so that empty cells in the matrix can't be highlighted. apps-gorm-gorm-1_5_0/Documentation/000077500000000000000000000000001475375552500173615ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Documentation/.cvsignore000066400000000000000000000001241475375552500213560ustar00rootroot00000000000000*.log *.dvi *.ps *.html *.info *.aux *.toc *.cp *.fn *.vr *.tp *.ky *.pg *.ps *.vrs apps-gorm-gorm-1_5_0/Documentation/ANNOUNCE000066400000000000000000000023541475375552500205160ustar00rootroot000000000000001 ANNOUNCE ********** This is version 1.5.0 of Gorm. 1.1 What is Gorm? ================= Gorm is an acronym for Graphic Object Relationship modeler (or perhaps GNUstep Object Relationship Modeler). Gorm is a clone of the Cocoa (OpenStep/NeXTSTEP) 'Interface Builder' application for GNUstep. 1.2 Noteworthy changes in version '1.5.0' ========================================= * Add outline view that shows object structure. * Enhance parser to handle prpperties. 1.3 How can I get support for this software? ============================================ You may wish to use the GNUstep discussion mailing list for general questions and discussion. Look at the GNUstep Web Pages for more information regarding GNUstep resources 1.4 Where can you get it? How can you compile it? ================================================= You can download sources and rpms (for some machines) from . 1.5 Where do I send bug reports? ================================ Bug reports can be sent to . 1.6 Obtaining GNU Software ========================== Check out the GNUstep web site. (), and the GNU web site. () apps-gorm-gorm-1_5_0/Documentation/COPYING000066400000000000000000000431271475375552500204230ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. apps-gorm-gorm-1_5_0/Documentation/Examples/000077500000000000000000000000001475375552500211375ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/000077500000000000000000000000001475375552500232625ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/Controller.gorm/000077500000000000000000000000001475375552500263505ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/Controller.gorm/data.classes000066400000000000000000000066651475375552500306550ustar00rootroot00000000000000{ FirstResponder = { Actions = ( "activateContextHelpMode:", "alignCenter:", "alignJustified:", "alignLeft:", "alignRight:", "arrangeInFront:", "cancel:", "capitalizeWord:", "changeColor:", "checkSpelling:", "close:", "complete:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "deleteBackward:", "deleteForward:", "deleteToBeginningOfLine:", "deleteToBeginningOfParagraph:", "deleteToEndOfLine:", "deleteToEndOfParagraph:", "deleteToMark:", "deleteWordBackward:", "deleteWordForward:", "deminiaturize:", "deselectAll:", "fax:", "hide:", "hideOtherApplications:", "indent:", "loosenKerning:", "lowerBaseline:", "lowercaseWord:", "makeKeyAndOrderFront:", "miniaturize:", "miniaturizeAll:", "moveBackward:", "moveBackwardAndModifySelection:", "moveDown:", "moveDownAndModifySelection:", "moveForward:", "moveForwardAndModifySelection:", "moveLeft:", "moveRight:", "moveToBeginningOfDocument:", "moveToBeginningOfLine:", "moveToBeginningOfParagraph:", "moveToEndOfDocument:", "moveToEndOfLine:", "moveToEndOfParagraph:", "moveUp:", "moveUpAndModifySelection:", "moveWordBackward:", "moveWordBackwardAndModifySelection:", "moveWordForward:", "moveWordForwardAndModifySelection:", "newDocument:", "ok:", "open:", "openDocument:", "orderBack:", "orderFront:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "orderOut:", "pageDown:", "pageUp:", "paste:", "pasteAsPlainText:", "pasteAsRichText:", "pasteFont:", "pasteRuler:", "performClose:", "performMiniaturize:", "performZoom:", "print:", "raiseBaseline:", "redo:", "revertDocumentToSaved:", "runPageLayout:", "runToolbarCustomizationPalette:", "saveAllDocuments:", "saveDocument:", "saveDocumentAs:", "saveDocumentTo:", "scrollLineDown:", "scrollLineUp:", "scrollPageDown:", "scrollPageUp:", "scrollViaScroller:", "selectAll:", "selectLine:", "selectNextKeyView:", "selectParagraph:", "selectPreviousKeyView:", "selectText:", "selectToMark:", "selectWord:", "showContextHelp:", "showGuessPanel:", "showHelp:", "showWindow:", "stop:", "subscript:", "superscript:", "swapWithMark:", "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:", "terminate:", "tightenKerning:", "toggle:", "toggleContinuousSpellChecking:", "toggleRuler:", "toggleToolbarShown:", "toggleTraditionalCharacterShape:", "transpose:", "transposeWords:", "turnOffKerning:", "turnOffLigatures:", "underline:", "undo:", "unhide:", "unhideAllApplications:", "unscript:", "uppercaseWord:", "useAllLigatures:", "useStandardKerning:", "useStandardLigatures:", "yank:", "zoom:", "closeWindow:" ); Super = NSObject; }; WinController = { Actions = ( "closeWindow:" ); Outlets = ( window ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/Controller.gorm/data.info000066400000000000000000000002701475375552500301350ustar00rootroot00000000000000GNUstep archive00002af8:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Documentation/Examples/Controller/Controller.gorm/objects.gorm000066400000000000000000000027371475375552500307000ustar00rootroot00000000000000GNUstep archive00002af8:00000018:00000025:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0& % WinController0&%GSCustomClassMap0&0&%Button01NSButton1 NSControl1NSView1 NSResponder% C B C5 B  C5 B&0 1 NSMutableArray1 NSArray&%0 1 NSButtonCell1 NSActionCell1NSCell0 &%Close0 1NSFont%&&&&&&&&%0 &0&&&&0& % GormNSWindow01NSWindow% ? A C C&% C D>@0% ? A C C  C C&0 &01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor0&%Window0&%Window0&%Window @@ B F@ F@%01NSImage0&%NSApplicationIcon0 &01NSNibConnector0&%NSOwner01NSNibOutletConnector0 &%window0!0"&%Button0#1NSNibControlConnector"0$& %  closeWindow:0%1 GSMutableSet1 NSMutableSet1NSSet&apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/GNUmakefile000066400000000000000000000014541475375552500253400ustar00rootroot00000000000000# # GNUmakefile # # # Put all of your customisations in GNUmakefile.preamble and # GNUmakefile.postamble # include $(GNUSTEP_MAKEFILES)/common.make # # Main application # PACKAGE_NAME=Controller APP_NAME=Controller Controller_MAIN_MODEL_FILE=MainMenu.gorm # # Additional libraries # ADDITIONAL_GUI_LIBS += # # Resource files # Controller_RESOURCE_FILES= \ MainMenu.gorm \ Controller.gorm # # Header files # Controller_HEADERS= \ MyController.h \ WinController.h # # Class files # Controller_OBJC_FILES= \ main.m \ MyController.m \ WinController.m # # C files # Controller_C_FILES= # # Subprojects # SUBPROJECTS = -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/MainMenu.gorm/000077500000000000000000000000001475375552500257365ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/MainMenu.gorm/data.classes000066400000000000000000000067371475375552500302430ustar00rootroot00000000000000{ FirstResponder = { Actions = ( "activateContextHelpMode:", "alignCenter:", "alignJustified:", "alignLeft:", "alignRight:", "arrangeInFront:", "cancel:", "capitalizeWord:", "changeColor:", "checkSpelling:", "close:", "complete:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "deleteBackward:", "deleteForward:", "deleteToBeginningOfLine:", "deleteToBeginningOfParagraph:", "deleteToEndOfLine:", "deleteToEndOfParagraph:", "deleteToMark:", "deleteWordBackward:", "deleteWordForward:", "deminiaturize:", "deselectAll:", "fax:", "hide:", "hideOtherApplications:", "indent:", "loosenKerning:", "lowerBaseline:", "lowercaseWord:", "makeKeyAndOrderFront:", "miniaturize:", "miniaturizeAll:", "moveBackward:", "moveBackwardAndModifySelection:", "moveDown:", "moveDownAndModifySelection:", "moveForward:", "moveForwardAndModifySelection:", "moveLeft:", "moveRight:", "moveToBeginningOfDocument:", "moveToBeginningOfLine:", "moveToBeginningOfParagraph:", "moveToEndOfDocument:", "moveToEndOfLine:", "moveToEndOfParagraph:", "moveUp:", "moveUpAndModifySelection:", "moveWordBackward:", "moveWordBackwardAndModifySelection:", "moveWordForward:", "moveWordForwardAndModifySelection:", "newDocument:", "ok:", "open:", "openDocument:", "orderBack:", "orderFront:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "orderOut:", "pageDown:", "pageUp:", "paste:", "pasteAsPlainText:", "pasteAsRichText:", "pasteFont:", "pasteRuler:", "performClose:", "performMiniaturize:", "performZoom:", "print:", "raiseBaseline:", "redo:", "revertDocumentToSaved:", "runPageLayout:", "runToolbarCustomizationPalette:", "saveAllDocuments:", "saveDocument:", "saveDocumentAs:", "saveDocumentTo:", "scrollLineDown:", "scrollLineUp:", "scrollPageDown:", "scrollPageUp:", "scrollViaScroller:", "selectAll:", "selectLine:", "selectNextKeyView:", "selectParagraph:", "selectPreviousKeyView:", "selectText:", "selectToMark:", "selectWord:", "showContextHelp:", "showGuessPanel:", "showHelp:", "showWindow:", "stop:", "subscript:", "superscript:", "swapWithMark:", "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:", "terminate:", "tightenKerning:", "toggle:", "toggleContinuousSpellChecking:", "toggleRuler:", "toggleToolbarShown:", "toggleTraditionalCharacterShape:", "transpose:", "transposeWords:", "turnOffKerning:", "turnOffLigatures:", "underline:", "undo:", "unhide:", "unhideAllApplications:", "unscript:", "uppercaseWord:", "useAllLigatures:", "useStandardKerning:", "useStandardLigatures:", "yank:", "zoom:", "buttonPressed:", "openWindow:" ); Super = NSObject; }; MyController = { Actions = ( "buttonPressed:", "openWindow:" ); Outlets = ( value ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/MainMenu.gorm/data.info000066400000000000000000000002701475375552500275230ustar00rootroot00000000000000GNUstep archive00002af8:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Documentation/Examples/Controller/MainMenu.gorm/objects.gorm000066400000000000000000000053611475375552500302620ustar00rootroot00000000000000GNUstep archive00002af8:0000001e:00000054:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&%NSOwner0& % NSApplication0&%GSCustomClassMap0&0& % MyController01 GSNibItem  &0 & % NSVisible0 1NSMutableArray1NSArray&0 1 NSWindow1 NSResponder% ? A D C&% C\ D0 1 NSView% ? A D C  D C&0 &01 NSButton1 NSControl% C C B` A  B` A&0&%01 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont%&&&&&&&&%0&0&&&&01 NSTextField% C CW B` A  B` A&0&%01NSTextFieldCell0&%Text&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor00 &%System0!&%windowBackgroundColor0"&%Window0#& % My Window# @@ B F@ F@%0$1NSImage0%&%NSApplicationIcon0&& % My Window 0'& % TextField0(&%Button0)&%MenuItem0*1 NSMenuItem0+&%Hide0,&%h&&%0-0.1NSMutableString&% common_2DCheckMark0/00& %  common_2DDash%01& %  MenuItem10203&%Quit04&%q&&%-/%05&%NSMenu061NSMenu07& % Main Menu08&090:&%Open0;&&&%-/%*20<& %  MenuItem290=&0>1NSNibConnector&0?&%NSOwner0@5?0A)50B1NSNibControlConnector)0C&%NSFirst0D&%hide:0E150F1C0G& % terminate:0H?0I1NSNibOutletConnector?0J&% delegate0K(0L'0M'0N&%value0O(0P&% buttonPressed:0Q<50R #include "WinController.h" @interface MyController : NSObject { id value; WinController *winController; } - (void) buttonPressed: (id)sender; @end apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/MyController.m000066400000000000000000000005341475375552500260730ustar00rootroot00000000000000/* All rights reserved */ #include #include "MyController.h" @implementation MyController - (void) buttonPressed: (id)sender { [value setStringValue: @"Hello"]; } - (void) openWindow: (id) sender { winController = [[WinController alloc] init]; } - (void) dealloc { [super dealloc]; RELEASE(winController); } @end apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/WinController.h000066400000000000000000000001611475375552500262320ustar00rootroot00000000000000/* All Rights reserved */ #include @interface WinController : NSObject { id window; } @end apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/WinController.m000066400000000000000000000007461475375552500262500ustar00rootroot00000000000000/* All rights reserved */ #include #include "WinController.h" @implementation WinController - (id) init { if((self = [super init]) != nil) { if([NSBundle loadNibNamed: @"Controller" owner: self] == NO) { NSLog(@"Problem loading interface"); return nil; } [window makeKeyAndOrderFront: self]; } return self; } - (void) closeWindow: (id) sender { [window close]; } - (void) dealloc { [super dealloc]; RELEASE(window); } @end apps-gorm-gorm-1_5_0/Documentation/Examples/Controller/main.m000066400000000000000000000002541475375552500243650ustar00rootroot00000000000000#include #define APP_NAME @"GNUstep" /* * Initialise and go! */ int main(int argc, const char *argv[]) { return NSApplicationMain (argc, argv); } apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/000077500000000000000000000000001475375552500230315ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/GNUmakefile000066400000000000000000000013611475375552500251040ustar00rootroot00000000000000# # GNUmakefile # # # Put all of your customisations in GNUmakefile.preamble and # GNUmakefile.postamble # include $(GNUSTEP_MAKEFILES)/common.make # # Main application # PACKAGE_NAME=SimpleApp APP_NAME=SimpleApp SimpleApp_MAIN_MODEL_FILE=MainMenu.gorm # # Additional libraries # ADDITIONAL_GUI_LIBS += # # Resource files # SimpleApp_RESOURCE_FILES= \ MainMenu.gorm # # Header files # SimpleApp_HEADERS= \ MyController.h # # Class files # SimpleApp_OBJC_FILES= \ main.m \ MyController.m # # C files # SimpleApp_C_FILES= # # Subprojects # SUBPROJECTS = -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/MainMenu.gorm/000077500000000000000000000000001475375552500255055ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/MainMenu.gorm/data.classes000066400000000000000000000066671475375552500300140ustar00rootroot00000000000000{ FirstResponder = { Actions = ( "activateContextHelpMode:", "alignCenter:", "alignJustified:", "alignLeft:", "alignRight:", "arrangeInFront:", "cancel:", "capitalizeWord:", "changeColor:", "checkSpelling:", "close:", "complete:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "deleteBackward:", "deleteForward:", "deleteToBeginningOfLine:", "deleteToBeginningOfParagraph:", "deleteToEndOfLine:", "deleteToEndOfParagraph:", "deleteToMark:", "deleteWordBackward:", "deleteWordForward:", "deminiaturize:", "deselectAll:", "fax:", "hide:", "hideOtherApplications:", "indent:", "loosenKerning:", "lowerBaseline:", "lowercaseWord:", "makeKeyAndOrderFront:", "miniaturize:", "miniaturizeAll:", "moveBackward:", "moveBackwardAndModifySelection:", "moveDown:", "moveDownAndModifySelection:", "moveForward:", "moveForwardAndModifySelection:", "moveLeft:", "moveRight:", "moveToBeginningOfDocument:", "moveToBeginningOfLine:", "moveToBeginningOfParagraph:", "moveToEndOfDocument:", "moveToEndOfLine:", "moveToEndOfParagraph:", "moveUp:", "moveUpAndModifySelection:", "moveWordBackward:", "moveWordBackwardAndModifySelection:", "moveWordForward:", "moveWordForwardAndModifySelection:", "newDocument:", "ok:", "open:", "openDocument:", "orderBack:", "orderFront:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "orderOut:", "pageDown:", "pageUp:", "paste:", "pasteAsPlainText:", "pasteAsRichText:", "pasteFont:", "pasteRuler:", "performClose:", "performMiniaturize:", "performZoom:", "print:", "raiseBaseline:", "redo:", "revertDocumentToSaved:", "runPageLayout:", "runToolbarCustomizationPalette:", "saveAllDocuments:", "saveDocument:", "saveDocumentAs:", "saveDocumentTo:", "scrollLineDown:", "scrollLineUp:", "scrollPageDown:", "scrollPageUp:", "scrollViaScroller:", "selectAll:", "selectLine:", "selectNextKeyView:", "selectParagraph:", "selectPreviousKeyView:", "selectText:", "selectToMark:", "selectWord:", "showContextHelp:", "showGuessPanel:", "showHelp:", "showWindow:", "stop:", "subscript:", "superscript:", "swapWithMark:", "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:", "terminate:", "tightenKerning:", "toggle:", "toggleContinuousSpellChecking:", "toggleRuler:", "toggleToolbarShown:", "toggleTraditionalCharacterShape:", "transpose:", "transposeWords:", "turnOffKerning:", "turnOffLigatures:", "underline:", "undo:", "unhide:", "unhideAllApplications:", "unscript:", "uppercaseWord:", "useAllLigatures:", "useStandardKerning:", "useStandardLigatures:", "yank:", "zoom:", "buttonPressed:" ); Super = NSObject; }; MyController = { Actions = ( "buttonPressed:" ); Outlets = ( value ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/MainMenu.gorm/data.info000066400000000000000000000002701475375552500272720ustar00rootroot00000000000000GNUstep archive00002af8:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/MainMenu.gorm/objects.gorm000066400000000000000000000052241475375552500300270ustar00rootroot00000000000000GNUstep archive00002af8:0000001e:00000050:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&%NSOwner0& % NSApplication0&%GSCustomClassMap0&0& % MyController01 GSNibItem  &0 & % NSVisible0 1NSMutableArray1NSArray&0 1 NSWindow1 NSResponder% ? A D C&% C\ D0 1 NSView% ? A D C  D C&0 &01 NSButton1 NSControl% C C B` A  B` A&0&%01 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont%&&&&&&&&%0&0&&&&01 NSTextField% C CW B` A  B` A&0&%01NSTextFieldCell0&%Text&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor00 &%System0!&%windowBackgroundColor0"&%Window0#& % My Window# @@ B F@ F@%0$1NSImage0%&%NSApplicationIcon0&& % My Window 0'& % TextField0(&%Button0)&%MenuItem0*1 NSMenuItem0+&%Hide0,&%h&&%0-0.1NSMutableString&% common_2DCheckMark0/00& %  common_2DDash%01& %  MenuItem10203&%Quit04&%q&&%-/%05&%NSMenu061NSMenu07& % Main Menu08&*209&  0:1NSNibConnector&0;&%NSOwner0<5;0=0>&%MenuItem50?1NSNibControlConnector>0@&%NSFirst0A&%hide:0B150C1@0D& % terminate:0E;0F1NSNibOutletConnector;0G&% delegate0H0I&%Button0J0K& % TextField0LK0M&%value0NI0O&% buttonPressed:0P1 GSMutableSet1 NSMutableSet1NSSet& 6apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/MyController.h000066400000000000000000000002231475375552500256300ustar00rootroot00000000000000/* All Rights reserved */ #include @interface MyController : NSObject { id value; } - (void) buttonPressed: (id)sender; @end apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/MyController.m000066400000000000000000000003011475375552500256320ustar00rootroot00000000000000/* All rights reserved */ #include #include "MyController.h" @implementation MyController - (void) buttonPressed: (id)sender { [value setStringValue: @"Hello"]; } @end apps-gorm-gorm-1_5_0/Documentation/Examples/SimpleApp/main.m000066400000000000000000000002541475375552500241340ustar00rootroot00000000000000#include #define APP_NAME @"GNUstep" /* * Initialise and go! */ int main(int argc, const char *argv[]) { return NSApplicationMain (argc, argv); } apps-gorm-gorm-1_5_0/Documentation/GNUmakefile000066400000000000000000000012601475375552500214320ustar00rootroot00000000000000PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make include ../Version # The application to be compiled DOCUMENT_NAME = Gorm DOCUMENT_TEXT_NAME = README NEWS INSTALL ANNOUNCE # The texinfo source files to be used Gorm_TEXI_FILES = install.texi news.texi Gorm.texi announce.texi ANNOUNCE_TEXI_FILES = version.texi ANNOUNCE_TEXT_MAIN = announce.texi README_TEXI_FILES = version.texi README_TEXT_MAIN = readme.texi INSTALL_TEXI_FILES = version.texi INSTALL_TEXT_MAIN = install.texi NEWS_TEXI_FILES = version.texi NEWS_TEXT_MAIN = news.texi -include Makefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/documentation.make -include Makefile.postamble apps-gorm-gorm-1_5_0/Documentation/Gorm.texi000066400000000000000000001263561475375552500211750ustar00rootroot00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @settitle Guide to the Gorm application @setfilename Gorm.info @c %**end of header @defcodeindex cl @defcodeindex pr @include version.texi @ifinfo @format START-INFO-DIR-ENTRY * Gorm:: The GNUstep Graphical Object Relationship Modeler END-INFO-DIR-ENTRY @end format @end ifinfo @ifinfo This file documents the features and implementation of the Gorm application. Copyright (C) 1999,2000,2009,2010 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through @TeX{} and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the section entitled ``GNU Library General Public License'' is included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that the section entitled ``GNU Library General Public License'' and this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English. @end ifinfo @iftex @finalout @c @smallbook @c @cropmarks @end iftex @titlepage @title Guide to the @title Gorm application @sp 3 @c @subtitle last updated February, 2001 @subtitle Version @value{GORM-VERSION} @subtitle (for use with @samp{gnustep-gui} version @value{GNUSTEP-VERSION}) @subtitle (and with @samp{gnustep-base} version 1.10.0) @author Gregory John Casamento @author Richard Frith-Macdonald @page @vskip 0pt plus 1filll Copyright @copyright{} 1999,2000 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the section entitled ``GNU Library General Public License'' is included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that the section entitled ``GNU Library General Public License'' may be included in a translation approved by the author instead of in the original English. @strong{Note: You will be performing a valuable service if you report any bugs you encounter.} @strong{The full gorm manual is available at http://wiki.gnustep.org/index.php/Gorm_Manual.} @end titlepage @contents @node Top, Copying, , @menu * Copying:: GNU Public License says how you can copy and share Gorm. * Contributors:: People who have contributed to Gorm. * Installation:: How to build and install Gorm. * News:: The latest changes to Gorm. * Overview:: Gorm in brief. * Usage:: How Gorm is used. * Implementation:: Implementation notes. * Concept Index:: @end menu @node Copying, Contributors, Top, Top @unnumbered Copying See the file @samp{COPYING}. @node Contributors, Installation, Copying, Top @unnumbered Contributors to Gorm @itemize @bullet @item Gregory John Casamento Is the current maintaner of Gorm. Has implemented lots of new features and rewritten large portions of the existing code. @item Richard Frith-Macdonald wrote the original version of Gorm as part of the GNUstep project. @item Pierre-Yves Rivaille Is also a major contributor to the Gorm application. @end itemize @node Installation, News, Contributors, Top @chapter Installing Gorm @include install.texi @node News, Overview, Installation, Top @chapter News @include news.texi @subsection To Do @itemize @bullet @item Debug and stabilize existing code. @end itemize @node Overview, Usage, News, Top @chapter Overview Gorm is an application for creating the user interface (and possibly entire applications) for a GNUstep application. Initially a close clone of the old NeXTstep 3.3 Interface Builder application, I expect that Gorm will mutate beyond the capabilities of that app. GNUstep is an object-oriented programming framework and a collection of tools developed for or using the GNUstep libraries. You can find out more about GNUstep at @url{http://www.gnustep.org}@* The basic idea behind Gorm is simple - it provides a graphical user interface with which to connect together objects from the GNUstep libraries (as well as custom-written objects) and set their attributes in an easy to use manner. The collection of objects is then saved as a document which can either be re-loaded into Gorm for further editing, or can be loaded into a running GNUstep application in order to provide that application with a user interface or some subsystem. @section What You Must Know To Understand This Manual This manual assumes a working knowledge of Objective-C and C. These are necessary prerequisites to understanding some of the technical details and examples given here. @subsection Major features @cindex features @itemize @bullet @item Drag-and-drop creation of GUI elements from palettes. @item Run-time loading of additional palettes that may be written using an API very similar to that of Apple/NeXTs interface Builder palette API. @item Direct on-screen manipulation of GUI elements @item Manipulation and examination of objects via inspectors. @item Drag-and-drop creation of connections between objects. @item Interactive test mode for interfaces/object-networks under development. @item Saving data in a format loadable by GNUstep applications. @end itemize @section About this Manual This manual is ment to cover basic operation of the Gorm application. It is not meant to be a complete tutorial on GNUstep programming. @node Usage, Implementation, Overview, Top @chapter Usage Here is a description of the menu structure and what each menu does - @itemize @bullet @item Info @* The @samp{Info} menu item produces a submenu ... @itemize @bullet @item Info Panel @* A panel giving very limited information about Gorm @item Preferences @* A panel allowing you to set preferences about how Gorm operates @item Help (not implemented) @* A panel providing general help on using Gorm @end itemize @item Document @* The @samp{Document} menu item produces a submenu ... @itemize @bullet @item Open @* This produces an open panel that lets you open a Gorm document. You use this if you want to use Gorm to edit an exisiting document. @item New Application @* This creates a new application document within Gorm, you may then use the Palettes panel to drag new objects into the document. @item New Module @* Contains a submenu, which also contains: @itemize @bullet @item New Empty @* produces an empty document with only NSFirst and NSOwner. @item New Inspector @* produces a document with NSOwner, NSFirst and a window which is the correct size for an Inspector. @item New Palette @* produces a document which is like the one by @samp{New Inspector}, but it's window is the right size for a Palette. @end itemize @item Save @* This saves the current document @item Save As @* This saves the current document to a new file and changes the document name to match the new name on disk. @item Save All @* This saves all documents currently being edited by Gorm. @item Revert To Saved @* This removes all changes made to the document sunce the last save, or since the document was opened. @item Test Interface @* This provides interactive testing of the active document. To end testing, you need to select the @samp{quit} menu item. @item Translate @* Contains a submenu, which also contains: @itemize @bullet @item Load Strings @* Load a string file. This file contains the strings to translate. @item Export Strings @* Export a strings file. TODO @end itemize @item Miniaturize @* This miniaturises the active document (or whatever panel is currently key). @item Close @* This closes the currenly active document. @item Debug @* Prints some useful internal information. @item Load Sound @* Loads a sound into the .gorm file. @item Image @* Loads an image into the .gorm file. @end itemize @item Edit @* In addition to the usual Cut, Copy, Paste, Delete Select All, this menu also contains: @item Set Name @* This allows the user to set a name for a given object in the Objects view in the main document window. @itemize @bullet @item Group @* Which produces a submenu @itemize @bullet @item In Splitview @* Groups views into an NSSplitView. Gorm does this based on the relative positions of the views being grouped. It determines the orientation and the order of th views and then groups them either vertically or horizontally in the order they appear on the screen. @item In Box @* Simply groups all of the views into one NSBox. @item In ScrollView @* Simply groups all of the views into one NSScrollView. @item Ungroup @* Ungroups the contained views. @end itemize @item Disable Guideline @* This item toggles between Enable Guideline and Disable Guideline. This allows the user to turn on or off the guides which appear when placing views in a window or view in Gorm. @item Font Panel The Font Panel allow you to modify fonts of your views. @end itemize @item Classes @* Contains menus for working with classes. @itemize @bullet @item Create Subclass @* Creates a subclass of the currently selected class in the current document classes view. @item Load Class @* Loads a class from a .h file into the current document. @item Create Class Files @* Generates a .h and .m file from the currently selected class in the current document classes view. @item Instantiate @* Creates an instance of the selected class in the current document classes view. @item Add Outlet/Action @* Adds an outlet or an action depending on what is selected in the document classes view. If the outlet icon is selected, it will add an outlet, if it the action icon is selected it will add an action. @item Remove @* Removes the currently selected outlet, action or class. @end itemize @item Tools @* Contains the inspector and the palette menus @itemize @bullet @item Inspector @* Shows the inspector @item Palette @* Shows the palette @item Load Palette @* Opens a file panel and allows the user to load a palette into Gorm. @end itemize @item Layout @* Contains a menu for working with alignement and layout of you views @itemize @bullet @item Alignement Wich produces a submenu @itemize @bullet @item Center Vertically @* Center Vertically two or more views. TODO :explain what is the reference view @item Center Horizontally @* Center Horizontally two or more views. TODO :explain what is the reference view @item Left Edges @* TODO @item Right Edges @* TODO @item Top Edges @* TODO @item Bottom Edges @* TODO @end itemize @item Bring to Front @* Bring to front the selected view @item Send to Back @* Send to back the selected view @end itemize @item Windows @* Shows currently open windows. @item Services @* Shows currently available services. @item Hide @* Hides the application. @item Quit @* Quits the application. @end itemize @node Implementation, Concept Index, Usage, Top @chapter Implementation @menu * Preferences:: @end menu @section Notes on implementation The IB documentation on how object selection is managed and how editors and inspectors are used is unclear ... so I've gone my own way. 1. When a document is loaded, the document object creates an editor attached to each top-level object in the user interface (NSMenu and NSWindow objects). These editors must be aware of their edited objects being clicked upon, and clicking on one of these should cause the corresponding editor to become the active editor. The active editor is responsible for handling selection of the edited object (and any objects below it in the object hierarchy). Upon change of selection, the editor is responsible for sending an IBSelectionChangedNotification with the selection owner (normally the editor itsself) as the notification owner. The main application watches for these notifications in order to keep track of who has the selection. @section Connections The connection API is the same as that for IB, but with the extension that the document object must implement [-windowAndRect:forObject:] to return the window in which the object is being displayed, and the rectangle enclosing the object (in window base coordinates). This information is needed by Gorm so that it can mark the connection. The editors mananging the drag-and-drop operation for a connection must call @samp{[NSApp -displayConnectionBetween:and:]} to tell Gorm to update its display. This method sets the values currently returned by @samp{[NSApp -connectSource]} and @samp{[NSApp -connectDestination]}. @node Preferences, , Implementation, Implementation @chapter Preferences @cindex preferences @cindex defaults The preferences panel contains a number of useful customizable options which can be used to modify the behavior of Gorm. Some of these defaults can be safely modified from the command line by the user. @itemize @bullet @item PreloadHeaders @* The user can define a set of headers to load when Gorm starts creation of a new .gorm file. This is useful when the user is building a framework or a set of interfaces for a large application. @item ShowInspectors @* Controls whether the inspector shows when Gorm is started. @item ShowPalettes @* Controls whether the palettes window shows when Gorm is started. @item BackupFile @* Determines if the old .gorm is moved to .gorm~ when the modified version is saved. @item AllowUserBundles @* If the user sets this to YES, they will still get a warning, but Gorm won't quit. @end itemize @chapter Basic Concepts This chapter will explain some of the basic things you need to understand before starting work on a new application. @section Getting Started First you need to understand a few basic concepts. Gorm's main window includes a few standard entries which must be explained before we can proceed. They are: @cindex NSOwner @cindex NSFirst @cindex NSFont @itemize @bullet @item NSOwner @item NSFirst @item NSFont @end itemize @section What is NSOwner? NSOwner is the class which ``owns'' the interface. This is, by default, NSApplication, but it can be any class you like. You can change it by selecting NSOwner in the document window and going to the ``Custom Class'' inspector in the inspectors window. From there, you should see all of the classes which the NSOwner can assume. We'll discuss more about this later when we go over how to create a new application @section What is NSFirst? NSFirst is your interface to the responder chain. NSFirst is representative of the current ``first responder'' in the application. When you want a message, such as a changeFont: message, to go to the current first responder from, say, a menu, you connect the menu item to the NSFirst object in the document window. By doing this, it means that whichever object has first responder status at that time in the application will become the reciever of the ``changeFont:'' message. @subsection Responders @cindex NSResponder A responder is any subclass of NSResponder. This includes NSWindow, NSView and all of the NSControl subclasses. @subsection The Responder Chain @cindex Responder Chain The responder chain is a sequence of objects which are called to determine where a message sent to the first responder will go. A message invoked on the first responder will be invoked on the first object in the responder chain which responds to that message. The object which this message will be called on is determined in the method [NSApplication targetForAction:]. The call sequence is as follows, it will only proceed to the next step in each case if the current step fails to respond to the message which was invoked: @itemize @bullet @item The firstResponder of the keyWindow, if one exists. @item Iterates through all responders by pulling each in the linked list of responders for the key window. @item It then tries the keyWindow. @item Then the keyWindow's delegate @item if the application is document based it tries the document controller object for the key window. @item then it tries the mainWindow's list of responders (as above) @item the mainWindow's delegate @item if the app is document based, it tries the document controller for the main window @item and finally, it tries the NSApplication delegate. @end itemize If all of the options in this list are exhausted, it then gives up and returns nil for the object which is to respond. @section What is NSFont? NSFont represents the NSFontManager object for the application. This object is a shared singleton. This means that, for any given app, there should be only one instance of the object. This object is generally added to the document window when another objec, such as a Font menu item, is added to the interface, which, in turn, requires that this object be added to the document. @section The awakeFromNib method This method is called on any custom object which is unarchived from a nib/gorm file. This method is called on all objects after the entire archive has been loaded into memory and all connections have been made. Given all of this, you should not make any assumptions at all about which objects have been called and which have not. You should not release any objects in this method. @chapter Creating an Application If you have ProjectCenter, you need to open it and create an ``Application'' project. Create it with the name ``FirstApp''. From there you can open the MainMenu.gorm by clicking on interfaces and selecting MainMenu.gorm. If Gorm.app is properly installed, you Gorm should start up. If you don't have ProjectCenter, you can create the Gorm file by hand. First you need to start Gorm. You can either do this by doing @samp{gopen -a Gorm.app} from a command line prompt, or you can invoke it from the Dock or from the workspace's file viewer. You then need to select the @samp{Document} menu, and then @samp{New Application}. This should produce a new document window, with a menu and an empty window. This should be the same as with the ProjectCenter gorm file since this is the basic starting point for an application. For the sections below... only do one or the other, not both. @section Creating A Class In Gorm @cindex Creating Classes There are two ways to do this next operation. I will take you through each step by step. First click on the classes icon in the toolbar on the top of the Gorm document window. You should see the view below change to an outline view containing a list of class names. Once this happens we're ready to create a class. Select the class you wish to subclass in the outline view. For our example we will use the simplest: NSObject. Select it by clicking on the class name once. Then go to the Classes menu in the main menu and select Create Subclass (you can also type Alt-Shift-c, which will do this as well. The new class will be created in the list with the name ``NewClass''. @section Using The Outline View @cindex Classes Outline View From here double click on the subclass name to make it editable. Type the name of the class and hit enter. For our example, please use the class name MyController. When you hit enter an alert panel will appear and warn you about breaking connections, simply select OK and continue. This method of inputting the classes was inspired by IB in OPENSTEP 4.2/Mach which had functionality very similar to this. For users of that the transition to Gorm will be seamless. @subsection Adding Outlets In The Outline View Too add an outlet, select the round icon with the two horizontal lines in it (it sort of looks like a wall outlet. This should become depressed. Here you need to go to the Gorm Menu, under Classes select ``Add Outlet/Action''. Each time you press this menu item another outlet will be added with a name similar to newOutlet, as you add more the number at the end will increase. For now add only one outlet. To rename the outlet simply double click it and change it's name like you did the class above to ``value'' for the sake of our example. @subsection Adding Actions In the Outline View The procedure to add on action is precisely the same as adding an outlet, except you must click on the button which looks like a target (a circle with a + inside). Add an action and name it ``buttonPressed:'' for the sake of our example. @section Using The Class Edit Inspector @cindex Class Edit Inspector This way is much more inline with the ``OPENSTEP/GNUstep'' philosophy. For each object there is an inspector, even for Class objects. Once you have created the class as described in the previous section ``Creating a Class In Gorm'', you must skip to this section to use the inspector. In the Gorm main menu select Tools and then select ``Inspectors''. This will make certain that the inspectors window is being displayed. Once the inspectors window is up move the pulldown on the top to ``Attributes'' and select the class you created which should, at this point, have the name ``NewClass''. You'll notice that the ``Class'' field at the top which shows the name's background color has turned white, instead of grey. This indicates that this class name is editable. Erase ``NewClass'' from the text field and type ``MyController''. @subsection Adding Outlets In The Inspector Adding outlets is very intuitive in the inspector. Simply select the ``Outlets'' tab in the tab view and click ``Add'' to add more outlets, and ``Remove'' to remove them. For the sake of our example, add one outlet and name it ``value''. @subsection Adding Actions In the Inspector Very much like above only with the ``Actions'' tab, add an action called button pressed. @section Instantiating The Class @cindex Instantiating In the Classes outline view select the new class you've created, now called MyController and then go to the Gorm menu and select Classes, and then Instantiate. The document window should shift from the classes view to the objects view. Amoung the set of objects should be a new object called MyController. @section Adding Controls from the Palette Go to the Gorm menu and select Tools, then Palettes. This will bring the palette window to the front. The second palette from the left is the ``ControlsPalette''. Select that one and find the button object (it should have the word ``Button'' in it). Drag that to the window and drop it anywhere you like. Repeat this operation with the text field. It's the control with ``Text'' in it. We are now ready to start making connections between different objects in the document. @subsection Making Connections @cindex Connections The type of application we are creating is known as a ``NSApplication delegate'' this means that the MyController object will be set as the delegate of NSApplication. To make this connection click on NSOwner and hold down the Control button, keep it pressed as you drag from the NSOwner object to the MyController object. The inspectors window should change to the Connections inspector and should show two outlets ``delegate'' and ``menu''. Select the ``delegate'', at this point you should see a green S and a purple T on the NSOwner and MyController objects respectively, and press the ``Connect'' button in the inspector. In the ``Connections'' section of the inspector you should see an entry which looks similar to ``delegate (MyController)'' this indicates that the connection has been made. Now we need to make connections from the controller to the textfield and from the controller to the button. Select the MyController object and Control-Drag (as before) from the object to the text field, this will make an outlet connection. You should see the connections inspector again, this time select the ``value'' outlet and hit Connect. Next, control-drag from the button to the controller, this will make an action connection. The connections inspector should again appear. This time you need to select the ``target'' outlet, to get the list of actions. The list should have only one entry, which is ``buttonPressed:'' since this is the one we added earlier. Press Connect. You should see an entry like ``buttonPressed: (MyController'' in the Connections section of the inspector. It is also possible to make this connection to NSFirst, but to keep things simple, make it directly to the object. If you make the connection to buttonPressed: on NSFirst the functionality of the application will be unchanged, but the invocation will take the path described above in the section which describes ``The Responder Chain''. @section Saving the gorm file @cindex Saving At this point you must save the .gorm file. Go to the Gorm menu and click Documents and then select ``Save''. If the document was opened from a pre-existing .gorm, it will save to that same file name. If it is an UNTITLED .gorm file a file dialog will appear and you will need to select the directory where you want to store the .gorm file and type the name of the .gorm file. @section Generating .h and .m files from the class. This is different than saving, some people have gotten this confused with the idea of Gorm generating the code for the gui. Gorm does nothing of the sort (grin). Go to the Classes section in the Document window and select the MyController class yet again. Now go to the Gorm menu and select Classes and the select ``Create Class Files''. This will bring up a file panel and it allow you to select the directory in which to put the files. It will first create the MyController.m file and then the MyController.h file. Simply select the directory in which your app will reside and hit okay for both. You can change the names, but the default ones, which are based on the class name, should be sufficient. When you look at the .m for this class, you should see the @samp{buttonPressed:} method with the commecnt @samp{/* insert your code here */} in it. Delete this comment and add @samp{[value setStringValue: @@``Hello''];}. The class should look like this after you're done: /* All Rights reserved */ #include #include "MyController.h" @@implementation MyController - (void) buttonPressed: (id)sender @{ [value setStringValue: @@''Hello'']; @} @@end You recall, we connected the textfield to the ``value'' variable. The call above causes the method setStringValue to be invoked on the textfield you added to the window. Also, note that the name of the method is ``buttonPressed:''. This is the action which is bound to the button. When it is pressed the text in the textfield should change to ``Hello''. You now need to build the application either by copying in a GNUmakefile and making the appropriate changes or by using ProjectCenter's build capability, depending on if you use it or not. This app is available as ``SimpleApp'' in the Examples directory under the Documentation directory distributed with Gorm. Hopefully this has helped to demonstrate, albeit on a small scale, the capabilities of Gorm. In later chapters we will cover more advanced application architectures and topics. @chapter Another Simple Application This chapter will describe an application, very much like the previous one, but using a slightly different structure. This application builds on the previous application and uses WinController as the NSOwner of the app instead of making it the delegate of NSApplication. @section Adding Menu Items Select the first palette in the palette window, this should be the MenusPalette. The palette will have a bunch of pre-made menu items on it that you can add. We want to keep this simple, so grab the one called ``Item'' and drag it over to the menu in main menu nib (the menu on the screen, not the one in the objects view). As you have this object over the menu, the copy/paste mouse cursor should appear (it looks something like one box over another box at a 45 degree angle). Where you drop the menu determines it's position in the menu. You can always drag it to a new position after you've placed it by simply selecting and dragging up or down. Once you've placed the menu item, double click on the title and change it to ``Open'' You can also change the name in the NSMenuItem attributes inspector. Now you must add openWindow: to MyController and make the connection from the ``Open'' menu item to NSFirst. In the connections inspector, find the ``openWindow:'' action. You could simply make the connection directly, but this is an exaple to show you that this connection will work as well. Whichever object has First Responder status will be tested to see if it responds to this method. The implementation for openWindow: in MyController should simply be: - (void) openWindow: (id) sender @{ winController = [[WinController alloc] init]; @} Also add the winController attribute and an include to allow WinController to be referenced in the MyController.m file. @section Making a Controller-based .gorm file Create a new .gorm file as described in the previous section using the ``New Module'' menu item. Under ``New Module'' select ``New Empty''. This should produce a .gorm file with only NSOwner and NSFirst. From the WindowsPalette (which should be the second palette in the palette window) drag a window to the location where you want it to appear on the screen. In the window add a button called ``Close''. Go through the same steps you went through previously to create MyController, except for adding the outlets/actions, but this time with the name WinController. Add an outlet called window and an action called ``closeWindow:''. @cindex Setting the NSOwner Now, instead of instantiating the class go back to the objects view and select the NSOwner object. After that select the ``Custom Class'' inspector. Look for the entry for WinController and select it. You now must connect the ``window'' outlet to the Window you added previously. @cindex Connecting to a Window Switch back to the objects view, then Control-Drag not to the window on the screen, but to the window's representation in the objects view. In the connection inspector select the window outlet and click Ok. Save the .gorm as using the name Controller.gorm in the project directory. Generate the Controller.h and Controller.h files as described in the previous section. @subsection Add the init method to WinController Add an implementation of the action ``closeWindow:'' to WinController and also an init which loads the gorm/nib file and declares itself as the owner. Here's how: /* All Rights reserved */ #include #include "WinController.h" @@implementation WinController - (id) init @{ if((self = [super init]) != nil) @{ if([NSBundle loadNibNamed: @@"Controller" owner: self] == NO) @{ NSLog(@@"Problem loading interface"); return nil; @} [window makeKeyAndOrderFront: self]; @} return self; @} - (void) closeWindow: (id) sender @{ [window close]; @} - (void) dealloc @{ [super dealloc]; RELEASE(window); @} @@end The Controller gorm will be loaded and the connections will be made to the current instance, i.e. window will point to the window object instantianted in the .gorm file and all actions declared in the .gorm file which are attached to the object NSOwner will be resolved on self. @section Running the App Type the command @samp{open Controller.app} on the command line in the project directory. Once the application has started it should look very much like the first application. Select the ``Open'' button from the Menu and you should see the second window pop up, now choose close, this will call the method ``closeWindow:'' which should cause the window to disappear. @chapter Advanced Topics This section will cover some topics which won't be of general interest to most users. The details in this section pertain to the internal workings of Gorm. @section Gorm file format The current Gorm file format is basically just a set of objects, encoded one after another in a continuous stream with some markers indicating when a new class starts or which class is encoded. @subsection The Name Table @cindex Name Table Each object in the .gorm file has a name assigned to it by the application. This allows Gorm to refer to the objects by a name once they are loaded rather than an address. Each name is associated with it's object in a dictionary which preserves the overall structure of the GUI which has been created. @subsection The Custom Class Table This is only used when the user has associated a custom class with an existing instance in the gorm file. If the user has, for instance, added an NSWindow to the gorm, he/she can use the custom class inspector to select a subclass of NSWindow to change to. @subsection Connections Array This array is used to form the connections after the .gorm file is loaded. The method @samp{[... establishConnection]} is never called on either NSNibControlConnector or NSNibOutletConnector objects while in Gorm. This prevents the connections from having any effect while they are being edited in Gorm itself. Once they are loaded, the establishConnection method is called and the connections are made. @section Custom Class Encoding @cindex Custom Class Encoding Custom objects are an interesting challenge in Gorm. By definition, custom classes are not known to Gorm, unless they are in a palette (covered elsewhere). For classes which are not in a palette instances of these classes in Gorm are encoding in one of three ways: @itemize @bullet @item A Proxy - This is a standin object which takes the place of the custom object. This is usually used when the superclass of the object is a non-graphical object, such as a controller. The init message is called on this object when it's unarchived. @item A Custom View - This is a standin view object similar to the one descrribed above, but it is a subclass of NSView. When this is used the initWithFrame: message is called on the view instance which is created (based on what view subclass the user selects) @item A Template - Probably the most interesting of the three. This is a standin class which uses an existing instance created in Gorm to build a custom subclass from. For instance when a window subclass is created, call it MyWindow, a template class called GSWindowTemplate is used to hold the NSWindow created in Gorm as well as the name of the subclass to be created when the class is unarchived outside of Gorm as well as some additional information. When the classes are unarchived in the running app, the designated initializer for that class will be invoked, except in the case of NSControl subclasses. See the Apple documentation for more information. @end itemize All custom instances have awakeFromNib invoked on them when they are unarchived from the .gorm file. This allows the user to do whatever additional setup that needs to be done, such as setting attribute. Classes which are ``known'' are, of course, directly encoded into the .gorm file. @subsection Restrictions On Your Custom Subclasses The restrictions here are the same as those in Apple's InterfaceBuilder. In general, you cannot have additional information which is expected to be decoded in an initWithCoder: method from a custom class which uses one of the methods in the previous section. This is because, by definition, Gorm doesn't know anything about these classes and allowing you to use them in Gorm in this way is a convenience to make it simpler for the developer. Gorm therefore, must use one of the proxies to encode the class since it cannot encode the class directly. How can you get your classes into Gorm, you say? I'm pleased that you asked me that question. The best way to make your class known to Gorm so that you don't need to worry about the above restriction is to add a palette which contains your class. In this way, because you're literally linking the class into Gorm, you're making the class and it's structure known to Gorm so that it can encode the class directly. With the new palette loaded you can load and save classes containing real instances, not proxies, of your class encoded directly in the .gorm file. How to create a palette is discussed at length in the following section. @section Palettes @cindex Palettes @cindex Inspectors @cindex Editors @subsection Graphical Objects In A Palette You are, by now, familiar with the built in palettes which are provided with Gorm. Palettes are a powerful feature which allows the developer to add his/her own objects to Gorm. It is possible for a developer to write custom inspectors, editors and palettes for use with Gorm. A good example of a custom palette is palettetest in the dev-apps/test in the GNUstep distribution. Assuming you don't have that, however, I will explain precisely what you need to do in order to create a simple palette. The entire process is very short and suprisingly simple. First open Gorm and selection Gorm->Document->New Module->New Palette. This will create a palette sized window. Once that's done go to the classes view in the main document window and find ``IBPalette'' in the class list. Create a subclass of that, the name can be whatever you want. For the purposes of our example we'll call it MyPalette. Drag a custom view to the window and choose the class you would like to add to the palette from one of your custom classes. Once you've done this, generate the code for the classes (discussed in previous chapters). In the code, you'll add a method called ``-(void) finishInstantiate'' leave it empty for now. In the makefile for the palette make sure that the library or framework the view comes from is linked with the palette. Now build the palette. After the palette is built you're ready to load it into Gorm. Go to the preferences panel and go to ``Palettes''. This should bring up a table view. Click on add. You should see a open dialog open. Select the palette bundle with this. If the palette is successfully loaded, you should see the name appear in the list. One thing to note here. Once a palette is loaded, it can't be unloaded until you close and restart Gorm. This is because by loading the palette bundle, the code in the bundle is being linked into Gorm. This can't be undone, once it's done. Now, you should see the palette in the set of palettes in the palette window. Simply scroll over to it and select it's icon. When you do this, you should see the view that you set up using the custom view displayed as an actual instance. Note that we used one of the techniques listed above, it is possible to use any of the three for any object you add to your palette. You can now drag the view from the palette to a new window. @subsection Non Graphical Objects In A Palette You may recall the creation of a method called ``-(void) finishInstantiate'' in the previous section. This section will make full use of that method. Re-open the palette you created before, but this time add an image view to the window. Then add to the image view, the icon you want to represent the non-graphical object. Here you'll need to add an ivar to the MyPalette class in both Gorm and in your source code called, imageView. Once you've done this make the connection between the image view and it's ivar. Assuming that the class is called ``NonUIObject'', in finish instantiate, you'll need to add the following line of code: id obj = [NonUIObject new]; [self associateObject: obj type: IBObjectPboardType with: imageView]; This code has the effect of associating the non-ui object with the ui object you just added to represent it. When you drag and drop the element which prepresents the object to something, it will copy the object, not the ui element, to the destination. Congratulations, you now know how Palettes work. @chapter Frequently Asked Questions @cindex FAQ @subsection Should I modify the data.classes of file in the .gorm package? My advice is never to do this, ever. Some have said that ``they're plain text and I should be able to change them''. My response to this rather loosely pronounced and weak rationale is that if they are modified I cannot and will not guarantee that Gorm will be able to read them or will function correctly if it does. @subsection Why does my application crash when I add additional attributes for encoding in encodeWithCoder: or initWithCoder: in my custom class? If you've selected the custom class by clicking on an existing object and then selecting a subclass in the Custom Class Inspector in Gorm's inspector panel, then when the .gorm file is saved, Gorm must use what is called a template to take the place of the class so that when the .gorm is unarchived in the running application, the template can become the custom subclass you specified. Gorm has no way of knowing about the additional attributes of your subclass, so when it's archived the template depends on the encodeWithCoder: of the existing class. Also, when AppKit loads the .gorm file, the initWithCoder: on the subclass is called to allow the user to do any actions, except for additional encoding, which need to be done at that time. This is particularly true when non-keyed coding is used, since, with keyed coding, it's possible to skip keys that are not present. The application may not crash if keyed coding is used, but Gorm would still not know about the additional attributes and would not be able to persist them anyway. Please see information in previous chapters regarding palettes, if you would like to be able to add your classes to Gorm so that they don't need to be replaced by templates, or proxy objects. @subsection Why does Gorm give me a warning when I have bundles specified in GSAppKitUserBundles? Some bundles may use poseAs: to affect change in the existing behavior of some GNUstep classes. The poseAs: method causes an issue which may cause Gorm to incorrectly encode the class name for the object which was replaced. This makes the resulting .gorm file unusable when another user who is not using the same bundle attempts to load it. @subsection How can I avoid loading GSAppKitUserBundles in Gorm? You need to write to Gorm's defaults like this: @samp{ defaults write Gorm GSAppKitUserBundles '()' } Doing this overrides the settings in NSGlobalDomain for Gorm and forces Gorm not to load any user bundles at all. To eliminate this simply do: @samp{ defaults delete Gorm GSAppKitUserBundles } @subsection How can I change the font for a widget? This is a simple two step process. Select the window the widget is in and then select the widget itself, then bring up the font panel by hitting Command-t (or by choosing the menu item). By doing this you're making the window the main window and by selecting the widget, you're telling the editor for that object to accept changes. Then you can select the font in the panel and hit ``Set''. For some objects, the font panel isn't effective because those objects can't have a font directly set. @node Concept Index, , Implementation, Top @unnumbered Concept Index @printindex cp @bye apps-gorm-gorm-1_5_0/Documentation/Makefile.postamble000066400000000000000000000031741475375552500230130ustar00rootroot00000000000000# # Makefile.postamble # # Project specific makefile rules # # Uncomment the targets you want. # The double colons (::) are important, do not make them single colons # otherwise the normal makefile rules will not be performed. # include ../Version # Things to do before compiling before-all:: version.texi autogsdoc -MakeFrames YES \ -DocumentationDirectory InterfaceBuilder \ -Declared InterfaceBuilder \ ../InterfaceBuilder/*.h 2> /dev/null autogsdoc -MakeFrames YES \ -DocumentationDirectory GormCore \ -Declared GormCore \ ../GormCore/*.h 2> /dev/null autogsdoc -MakeFrames YES \ -DocumentationDirectory GormObjCHeaderParser \ -Declared GormObjCHeaderParser \ ../GormObjCHeaderParser/*.h 2> /dev/null # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning after-clean:: rm -f *.bak *.cl *.fns *.pr *.log rm -f version.texi # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning # after-distclean:: # Things to do before checking # before-check:: # Things to do after checking # after-check:: version.texi: ../Version rm -f version.texi echo '@set GNUSTEP-VERSION' $(GNUSTEP_CORE_VERSION) \ > version.texi echo '@set GNUSTEP-GCC $(GNUSTEP_GCC)' \ >> version.texi echo '@set GORM-VERSION $(VERSION)' \ >> version.texi regenerate: mv ANNOUNCE README INSTALL NEWS .. apps-gorm-gorm-1_5_0/Documentation/NEWS000066400000000000000000000653231475375552500200710ustar00rootroot000000000000001 Noteworthy changes in version '1.5.0' ======================================= * Add outline view that shows object structure. * Enhance parser to handle prpperties. 2 Noteworthy changes in version '1.4.0' ======================================= * Fix issue with saving a gorm from a nib file. * Fix issue with saving a gorm file from a xib. * Add XLIF support for language translation. * Add capability to generate XIB file. * Add gormtool command-line tool. Allows some gorm work without the gui * Fixes and some improvements to structure Gorm as framework/app. 3 Noteworthy changes in version '1.3.1' ======================================= * Fix issue with cells appearing in top level editor * Make nibs read only since saving is unstable * Add XIB reading so that they can be loaded by Gorm * Add storyboard file to list of supported files so that an icon is displayed, does not support reading yet. * Fix testing model mode * Bug fixes in GormClassManager, GormDocument, etc. 4 Noteworthy changes in version '1.2.28' ======================================== * Improved NSScrollView handling. * Added NSMatrix to Group menu to make it easier to create NSMatrix objects * Improved inspector for NSMatrix. Added ability to add rows/columns * Fixed NSMatrix selection problems when grouped in an NSScrollView * Fixes and other improvements to inspectors. Corrected issue where Gorm's menu stays present during testing mode. 5 Noteworthy changes in version '1.2.26' ======================================== * Refactoring of palettes by Sergii Stoian to correct usability issues in Gorm. * Refactoring of handling and rearrangment of controls in inspectors for usuability. * Stability fixes to make Gorm easier to use. * Autosizing of views corrected in many inspectors * Improvements in error handling. 6 Noteworthy changes in version '1.2.24' ======================================== * Fix for issue where Gorm was referencing private variables. This caused a crash when built with clang. 7 Noteworthy changes in version '1.2.23' ======================================== * Fix for issue where NSPanel was being saved as an NSWindow in some cases. 8 Noteworthy changes in version '1.2.22' ======================================== * Fix for bug#45040: Fix allows Gorm custom class functionality to work normally on OpenBSD/NetBSD/FreeBSD. * Fixes for Solaris * Memory leak fixes. * Objective-C parser improvements. 9 Noteworthy changes in version '1.2.20' ======================================== * Bug fixes #28643, #32827 * Corrected issues with updating document when there is a change. * Add cells as objects to the document so they can be properly edited. * Changes to prevent recursive frame change notifications. 10 Noteworthy changes in version '1.2.18' ========================================= * Code cleanup, removal of warnings when building with clang. * Removal of use of call to objc_poseAs(..) which was preventing building with newer runtimes. * Stability improvements. 11 Noteworthy changes in version '1.2.16' ========================================= * XIB reading. * Bug fixes for standalone views. * Stability changes. 12 Noteworthy changes in version '1.2.12' ========================================= Requires: gnustep-base-1.20.0, gnustep-gui-0.18.0. Reason: Parts of the runtime which Gorm used were refactored and it was necessary to make corresponding changes in Gorm to use it. * Correction for bugs #27295, 28643, 29085. * Added a DO server which allows modification of internal data structures using a simple interface. * Tooltips now show the object name and the object type for informational purposes. * Opens default document when using NSWindows95InterfaceStyle. 13 Noteworthy changes in version '1.2.10' ========================================= * Correction for bug #25401 * Correction for some nib loading issues. * Limited support for standalone views. * Fixes for various bugs. 14 Noteworthy changes in version '1.2.8' ======================================== Requires: gnustep-gui-0.16.0. It will not compile without this version of the library. Reason: Nib and Gorm loading were moved to a more sensible file structure. Additionally, Nib loading was refactored. * Correction for bug#25001. * Correction for bug#25111. * Fixes for nib encoding to use the proper template class instances. * Changes to use new headers. 15 Noteworthy changes in version '1.2.6' ======================================== * Corrections to allow Gorm to build and run properly on the Darwin operating system. * Corrected sizing of Controls Palette. * Added preliminary support for IBPlugin API. * Added preferences panel to add plugins dynamically. * Moved load/save logic for gorm, gmodel, and nib to plugins. This change should allow plugins for virtually any format to be read/written by Gorm. * Correction for bug#24146, bug#23889. 16 Noteworthy changes in version '1.2.4' ======================================== Requires: gnustep-gui-0.13.2. Reason: Due to changes in popupbutton controller logic. * Corrected bug#'s 19640, 21845, 19792, 15637, 17892, 18171. * Added error panel to show the detected inconsistencies in a file. * Added preference setting to turn on or off the gorm file repair logic. * Added capability to repair logic to fix window level issue. * Added ruler switch to scroll view inspector. 17 Noteworthy changes in version '1.2.2' ======================================== Requires: gnustep-gui-0.13.0. * Moved to GPLv3 * Added text field to NSTableColumn inspector to allow editing of table column title. * Corrected issue with selection. * Added button modifiers for special keys to button inspectors. * Corrected issue with loading of older gorm files. * Fix to allow Gorm's menus to be Mac-style, but not the one being edited. * Other miscellaneous bug corrections. 18 Noteworthy changes in version '1.2.1' ======================================== * Minor corrections to previous release. 19 Noteworthy changes in version '1.2.0' ======================================== * Corrections to some editors to not change selection if connection is in progress. * Force menu style to NSNextStepInterfaceStyle for editing purposes. * Correction for memory issue when closing document. * Minor bug fixes. 20 Noteworthy changes in version '1.1.0' ======================================== * Changed Gorm architecture to use NSDocument classes. * Abstracted model loading mechanism. This was done by implementing a set of "Loader" and "Builder" classes which handle filling in the data structures in Gorm and exporting them to external formats. * Implemented GormNibWrapperLoader and GormNibWrapperBuilder for reading and writing Cocoa NIB files. * Implemented GormGormWrapperLoader and GormGormWrapperBuilder for reading and writing GNUstep Gorm files * Implemented GormGModelWrapperLoader for reading GNUstep gmodel files. * Updated icon * A number of bugs have been addressed in this release. 21 Noteworthy changes in version '1.0.8' ======================================== This is a bugfix release. * Correction for bug#16587. * Correction for handling non-string identifiers in tableviews. 22 Noteworthy changes in version '1.0.6' ======================================== This is a bugfix release. * Entirely new icon set, for palettes, gorm, gmodel, nib and the application. * Replaced some of the images for the inspectors. * Corrected the following bugs since the last release: #16049, #16050, #15988, #16049, #15989, #15987, #15817, #15780, #15642, #15556. * Changed formatting in some of the inspectors so that they are easier to navigate. 23 Noteworthy changes in version '1.0.4' ======================================== This is a bugfix release. * Corrected some bug#15236 with window style mask settings. * Corrected bug#15236, which caused window fields in the inspector not to update when the field was being edited and a new window is selected. * Corrected bug #15178. * Corrected problem with standalone views 24 Noteworthy changes in version '1.0.2' ======================================== This is a bugfix release. * Fixed some bugs with table column selection. * Corrected a minor problem in the custom class inspector. 25 Noteworthy changes in version '1.0.0' ======================================== PLEASE NOTE: This version of Gorm requires base 1.11.1 and gui 0.10.1 to be installed (gnustep-startup-0.13.0). * All inspectors are now modeled in .gorm files. * Added autosizing to form attributes inspector. * Utilize and maintain parent/child data structure more pervasively * Reorganized code in palettes for cleaner implementation. * Removed code to check for user bundles, since bugs in Camaelon which prompted those changes were fixed long ago. * Added documentation to GormCore 26 Noteworthy changes in version '0.11.0' ========================================= * Improved implementation of canSubstituteForClass: the default implementation of this method tests the classes to see if initWithCoder: or encodeWithCoder: is implemented on a subclass to determine automatically if that class has the same encoding signature as the original class, if it does, it can be substituted. * Improved handling of classes which use cell classes in the custom class inspector. The inspector now autmatically replaces the cell class with the appropriate one when the user selects a given subclass. * Browser based class editor in document panel. This interface is more like the one on OSX. The user now has a choice in preferences to determine which view they would like to use. * Translation tools. The Document->Translate menu allows the user to export string and import strings in the strings format, so that someone can easily translate just the strings in the file and doesn't need to directly edit anything in Gorm. The strings file can then be loaded back into Gorm and all of the relevant strings are updated. * Alignment tools. In the new Layout menu there are options to align views, center views, bring views to front or push them to the back of the view layers. * Implementation of IBViewResourceDraggingDelegate. This allows updating of the pull down in the inspectors panel dynamically. It requires the developer of a palette to implement some code to enable this, as on OSX. * Lots of bugfixes and usability changes are also included in this release. 27 Noteworthy changes in version '0.9.10' ========================================= * Gorm now has a full implementation of canSubstituteForClass: which is used to determine if a class can be substituted in the custom class inspector. This allows classes added in palettes to say whether or not they can be used as a subsitute for a kit class. * Better separation of Gorm into libraries. As well as the ability to compile on windows with a simple: "make install" * Implementation of IBResourceManager class. This class is used by palettes to register drag types to be considered by the top level editors in the document window: object, sound, image, class. * Gorm now is able to switch views in the document window when you drag a file into it. If it's an image it will switch to the image view, if it's a sound, the sound view, an object the object view etc or if it's a class (a .h file) it will switch to the classes view. * Drag and drop parsing of header files (if you hadn't gathered from the previous item). * Better support for standalone views. while the user cannot instantiate from the classes view (there were too many problems with this approach). They can now drag any view from the palette into the objects view and have it work. * A myriad of bug fixes. 28 Noteworthy changes in version '0.9.2' ======================================== NOTE: This is mainly a bugfix release. * Some improvements to the procedure for removing connections. * Corrected various issues with header parsing. * Now closes windows which were opened during interface testing such as font panels, info panels, etc. * Minor corrections to background color for a number of inspectors. * Improvements to gmodel importation. * Better detection of when the user is utilizing a user bundle. Gorm will now warn the user with a panel. * Various improvements in documentation 29 Noteworthy changes in version '0.9.0' ======================================== * Images/Sounds can now be dragged into a matrix cell. * Fully implemented date and number formatter inspectors (these classes still need work in GUI). * Added warning panel if the user attempts to edit a .gorm file created with a newer version of Gorm * Modified data.classes format so that only those actions specifically added to FirstResponder are listed. * Greatly improved gmodel importation. (experimental) * It's now possible to add methods to classes which are not custom. This allows the user to add actions which may have been added to those classes by categories. * Completely new header parser implemented. * Improved cut/paste. It's now possible to use cut/paste from almost anywhere. The class editor now fully supports it. * Improved implementation of some of the InterfaceBuilder framework classes. * Object editor will now remove all instances of a class that has been deleted from the class editor. * The class inspector and the classes view will now apply stricter rules to names of actions and outlets to ensure that they are properly entered. * All inspectors work perfectly with customized colors. * Fixed a number of bugs. 30 Noteworthy changes in version '0.8.0' ======================================== PLEASE NOTE: It is important for this release that you upgrade to Gorm 0.8.0 when using Gorm with the new GNUstep libraries (base-1.10.0 and gui-0.9.4). This version of Gorm contains some features which are reliant on changes made in those versions of the libraries. It is stated in Gorm's documentation (the Gorm.texi file) that this is required, but I felt it important enough to also mention it here so that it is known beyond a reasonable doubt. * New gorm file version. * Full custom palette support * Palette preferences panel to allow the user to configure palettes to load * Experimental: Standalone views. This feature is to allow the use of a view without the need of a containing window. This allows developers to treat these views as they would any other top level object in the .gorm file. This is experimental functionality. * Improved NSTableColumn inspector. The new inspector allows the user to change the data cell used for a given column. This allows the user to select from a list of cell subclasses and set the appropriate custom or non-custom one they want to appear in that column of the table. * Improved layout of some of the inspectors. * Removed old class parser. The parser was somewhat buggy and was actually causing some issues. A new parser will be available in the next version of Gorm. For now users will need to use the class inspector or the outline view to enter classes into Gorm. * Experimental: "File" section. This is essentially a per-file preference which allows the user to control which version of GNUstep a given file will be compatible with. It also lists the potential compatibility issues with the selected version. * Improved controls palette. New items for some of the standard font replace the old "Title" widget which was a System-14 font. The new widgets use a selection of the standard System font to allow the user to easily build a gui using these and reducing the amount of time the user needs to spend fiddling with the font panel. 31 Noteworthy changes in version '0.7.7' ======================================== * Important bugfixes in editor classes. * Rearranged some of the editor classes to be in the palettes which contain the classes they are responsible for editing (GormButtonEditor & GormTabViewEditor). * Image and Sound editors will now display system default images or sounds if they are available. * Document window now uses an NSToolbar (experimental). * Improved the layout of some of the inspectors. * Corrected some minor issues in the inspectors * Added code to allow NSTableView and NSOutlineView to show some data during testing * Gorm will now show an alert panel when a model fails to load or test properly. 32 Noteworthy changes in version '0.7.6' ======================================== This release is mainly a bugfix release for 0.7.5. * Improved .gmodel support * Corrections to previous repair feature. * Important bugfixes for Menu editing. * Important bugfixes for class inspector. 33 Noteworthy changes in version '0.7.5' ======================================== * The 'reparent' feature in the class inspector. This allows the user to change the class hierarchy from within Gorm. * Some important bugfixes * a property 'GormRepairFileOnLoad' (untested) which should repaire old .gorm files... It is HIGHLY recommended that Gorm not be run with this on constantly and that you back up any files which you want to repair before opening them with this option turned on. * A shelf inspector in prefs that lets you expand the size of the names in the object view.. * Support for NSFontManager * A way to restore a complete NSMenu if it's deleted (a new palette entry for NSMenu, not just an item) 34 Noteworthy changes in version '0.6.0' ======================================== * Several major bugs corrected. * Clarified some of the inspectors * Menu items are now properly enabled/disabled when appropriate * More descriptive title displayed when a class is being edited. 35 Noteworthy changes in version '0.5.0' ======================================== * Enabled defer in NSWindow inspector. * Added code to the connection inspector to prevent erroneous connections. * Added support for upgrading of old .gorm files using the older template mechanism * Grouping with an NSSplitView now operates using the relative positions of the views in the window. * Custom Class inspector now shows all subclasses, not just direct custom subclasses. * Bug fixes, eliminated memory leak, code cleanup, etc. 36 Noteworthy changes in version '0.4.0' ======================================== * New Menu and Menu Item inspectors. * User can now specify the Services and Windows menus in the menu inspector. * User can specify a non-custom subclass as well as a custom one to replace the class when the .gorm is unarchived. This can be used to turn a NSTextField into NSSecureTextField and etc. * New set name panel. * New switch control on the font panel to allow the user to specify if a font is encoded with its default size or not. * Added NSStepper and NSStepperCell to the class list to allow creation of custom subclasses. * Windows and Services menus now function correctly. 37 Noteworthy changes in version '0.3.1' ======================================== * New custom class system. * Images now persist correctly when added to a button or view. * Fixed DND * Various bugfixes 38 Noteworthy changes in version '0.3.0' ======================================== * Preferences added. * User can now enable and disable guidlines for easier editing. * Refactored code into GormLib which is a clone of the InterfaceBuilder framework. This facilitates creating palettes and inspectors outside of Gorm. * Added class inspector for easier editing of classes. This gives the user the option to use either the outline view or the inspector to edit new classes. * Added inspectors for the following: NSScrollView, NSProgressIndicator, NSColorWell, GormImageInspector (for images added to .gorm files). * Improved look of NSTabView inspector. * Removed all warnings from the code. * various bug fixes. 39 Noteworthy changes in version '0.2.5'. ========================================= Many fixes and improvements to make the app work better. * Better parsing of headers * Interface code redone as gorm files. * Re-add multiple selection via mouse drag. 40 Noteworthy changes in version '0.2.0' snapshot. ================================================== Gobs of improvements, mostly due to the hard work of Gregory John Casamento and Pierre-Yves Rivaille. Thanks guys! * Custom class support/translations implemented. * Added NSScrollView, NSPopupButton, NSOutlineView, NSTableView editing. * Improved test mode support. * Improved drag n' drop support on many items. * Intelligent placement hints. * Read gmodel files. * More inspectors. * Sound and Image support. * gorm files were changed to directory wrappers for more flexibility. 41 Noteworthy changes in version '0.1.0' ======================================== * load/parses class files for entry into class list. * Pallete/inspectors for date and number formatters * Pallete/Inspectors for browsers and tableViews * NSStepper, NSForm, NSPopupButton pallete item and inspector * Most inspectors greatly improved and fleshed out. * Custom views added. * Ability to edit cells in a matrix. * Ability to change the font of some objects. 42 Noteworthy changes in version '0.0.3' ======================================== * Create stub .m and .h files from new classes * Works better with ProjectCenter. * Handle Ctrl-Drag and Alt-Drag of objects - automatic conversion to matrices and/or increase decrease rows and cols. * Edit NSForms titles in place. * Edit NSBoxes and add subviews. * Support for custom objects. 43 Noteworthy changes in version '0.0.2' ======================================== * Add popup and pulldown menu controls * Menu support * More inspectors * Some support for connections * Much more fleshed out - too numerous to mention. 44 Noteworthy changes in version '0.0.1' ======================================== * 8th December 1999 * Save/Load 'nib' documents (binary archived data) This works so far as it can be tested - but that's just archives containing windows or panels so far. * Load palettes Loading of palettes works. You can load palettes from the 'Tools' menu. Gorm automatically loads all the palettes from its Resources directory. * Basic framework So far, the app provides a basic framework that needs fleshing out. * It has a palettes manager object that allows you to select a palette and drag items from the palette into your document. * It has a special per-document editor object, which keeps track of a matrix of icons representing the top-level objects in the document. * It has an inspector manager class, which updates the inspector panel when the selected object is changed by an editor. * It has special inspectors for handling an empty selection or a multiple selection. * Palettes Four palettes (three of which are empty at present) are built and installed in the apps Resources directory. The Window palette is more fully fleshed out than the other palettes. It permits windows and panels to be created in Gorm. If provides the start of a window attributes inspector. * 18 December 1999 * You can drag views from a palette into a window or panel. * You can select views in a window by clicking on them, shift-clicking (for multiple selection), or click-drag on the window background to select views in a box. * You can delete/cut/copy/paste views betwen windows. * You can move views in a window by clicking on them and dragging. * You can resize views by clicking on their knobs and dragging. * You can control-drag to mark source and destination views for a connection. * Next task - inspectors. The connection inspector needs to be implemented to complete the process of establishing connections. The size inspector needs to be implemented to set autosizing parameters for a view. Once these are done, the object editor needs to be made to support connections so that we can connect between objects other than views, then we need to write a menu editor. * 22 December 1999 * Connections inspector is now working - but it needs some effort to tidy it up. * Class info (outlets and actions) is specified in 'ClassInformation.plist' and needs to be present so that the app knows what outlets/actions an object has (and therefore what connections can be made). * The view size inspector is working - allowing you to set the size of the subviews within a window. * The attributes inspector for 'FilesOwner' is working, so you can define the class of the files owner (it defaults to NSApplication). * There is a crude panel for setting the name of the selected object. * I've created a couple of new images and got rid of the two NeXT images that were lurking in there. * There is a Testing directory, with a GormTest application that lets you load a nib for testing - it assumes that the nib will set its FilesOwners delegate to point to a window, and makes that window the key window ... * 23 December 1999 Last work before christmas ... Various bits of tidying up plus - Added an evil hack of a generic attributes inspector ... This looks through all the methods of the selected object to find those taking a single argument and beginning with 'set'. It makes all these setting methods (whose argument is a simple scalar type or an object) available for you to invoke from the inspector panel. This makes it possible to set pretty much any attribute of any object, but you do need to have the GNUstep header files to hand, so you can tell what numeric values to enter to achieve a desired result. apps-gorm-gorm-1_5_0/Documentation/README.md000066400000000000000000000002201475375552500206320ustar00rootroot00000000000000# Documentation directory This directory contains documentation for the Gorm application as well as the frameworks used in it's functionality. apps-gorm-gorm-1_5_0/Documentation/announce.texi000066400000000000000000000021051475375552500220600ustar00rootroot00000000000000@c -*- texinfo -*- @chapter ANNOUNCE @ifset TEXT-ONLY @include version.texi @end ifset This is version @value{GORM-VERSION} of Gorm. @section What is Gorm? Gorm is an acronym for Graphic Object Relationship modeler (or perhaps GNUstep Object Relationship Modeler). Gorm is a clone of the Cocoa (OpenStep/NeXTSTEP) `Interface Builder' application for GNUstep. @set ANNOUNCE-ONLY @include news.texi @clear ANNOUNCE-ONLY @section How can I get support for this software? You may wish to use the GNUstep discussion mailing list for general questions and discussion. Look at the GNUstep Web Pages for more information regarding GNUstep resources @url{http://www.gnustep.org/} @section Where can you get it? How can you compile it? You can download sources and rpms (for some machines) from @url{ftp://ftp.gnustep.org/pub/gnustep/dev-apps}. @section Where do I send bug reports? Bug reports can be sent to @email{bug-gnustep@@gnu.org}. @section Obtaining GNU Software Check out the GNUstep web site. (@url{http://www.gnustep.org/}), and the GNU web site. (@url{http://www.gnu.org/}) apps-gorm-gorm-1_5_0/Documentation/install.texi000066400000000000000000000013241475375552500217220ustar00rootroot00000000000000@c -*-texinfo-*- @ifset TEXT-ONLY @include version.texi @end ifset @subsection Required software You need to have the GNUstep core libraries installed in order to compile and use Gorm. The core packages are, at a minimum: @itemize @bullet @item gnustep-make @item gnustep-base @item gnustep-gui @item gnustep-back @end itemize See @url{http://www.gnustep.org/} for further information. @subsection Build and Install Steps to build: @itemize @item make && make install @end itemize Please note that GormLib must be installed for Gorm.app to run. @subsection Trouble Give us feedback! Tell us what you like; tell us what you think could be better. Send bug reports and patches to @email{bug-gnustep@@gnu.org}. apps-gorm-gorm-1_5_0/Documentation/news.texi000066400000000000000000000641631475375552500212420ustar00rootroot00000000000000@c -*-texinfo-*- @ifset TEXT-ONLY @include version.texi @end ifset @section Noteworthy changes in version @samp{1.5.0} @itemize @bullet @item Add outline view that shows object structure. @item Enhance parser to handle prpperties. @end itemize @c ==================================================================== @c Keep the next line just below the list of changes in most recent version. @ifclear ANNOUNCE-ONLY @section Noteworthy changes in version @samp{1.4.0} @itemize @bullet @item Fix issue with saving a gorm from a nib file. @item Fix issue with saving a gorm file from a xib. @item Add XLIF support for language translation. @item Add capability to generate XIB file. @item Add gormtool command-line tool. Allows some gorm work without the gui @item Fixes and some improvements to structure Gorm as framework/app. @end itemize @section Noteworthy changes in version @samp{1.3.1} @itemize @bullet @item Fix issue with cells appearing in top level editor @item Make nibs read only since saving is unstable @item Add XIB reading so that they can be loaded by Gorm @item Add storyboard file to list of supported files so that an icon is displayed, does not support reading yet. @item Fix testing model mode @item Bug fixes in GormClassManager, GormDocument, etc. @end itemize @section Noteworthy changes in version @samp{1.2.28} @itemize @bullet @item Improved NSScrollView handling. @item Added NSMatrix to Group menu to make it easier to create NSMatrix objects @item Improved inspector for NSMatrix. Added ability to add rows/columns @item Fixed NSMatrix selection problems when grouped in an NSScrollView @item Fixes and other improvements to inspectors. Corrected issue where Gorm's menu stays present during testing mode. @end itemize @section Noteworthy changes in version @samp{1.2.26} @itemize @bullet @item Refactoring of palettes by Sergii Stoian to correct usability issues in Gorm. @item Refactoring of handling and rearrangment of controls in inspectors for usuability. @item Stability fixes to make Gorm easier to use. @item Autosizing of views corrected in many inspectors @item Improvements in error handling. @end itemize @section Noteworthy changes in version @samp{1.2.24} @itemize @bullet @item Fix for issue where Gorm was referencing private variables. This caused a crash when built with clang. @end itemize @section Noteworthy changes in version @samp{1.2.23} @itemize @bullet @item Fix for issue where NSPanel was being saved as an NSWindow in some cases. @end itemize @section Noteworthy changes in version @samp{1.2.22} @itemize @bullet @item Fix for bug#45040: Fix allows Gorm custom class functionality to work normally on OpenBSD/NetBSD/FreeBSD. @item Fixes for Solaris @item Memory leak fixes. @item Objective-C parser improvements. @end itemize @section Noteworthy changes in version @samp{1.2.20} @itemize @bullet @item Bug fixes #28643, #32827 @item Corrected issues with updating document when there is a change. @item Add cells as objects to the document so they can be properly edited. @item Changes to prevent recursive frame change notifications. @end itemize @section Noteworthy changes in version @samp{1.2.18} @itemize @bullet @item Code cleanup, removal of warnings when building with clang. @item Removal of use of call to objc_poseAs(..) which was preventing building with newer runtimes. @item Stability improvements. @end itemize @section Noteworthy changes in version @samp{1.2.16} @itemize @bullet @item XIB reading. @item Bug fixes for standalone views. @item Stability changes. @end itemize @section Noteworthy changes in version @samp{1.2.12} Requires: gnustep-base-1.20.0, gnustep-gui-0.18.0. Reason: Parts of the runtime which Gorm used were refactored and it was necessary to make corresponding changes in Gorm to use it. @itemize @bullet @item Correction for bugs #27295, 28643, 29085. @item Added a DO server which allows modification of internal data structures using a simple interface. @item Tooltips now show the object name and the object type for informational purposes. @item Opens default document when using NSWindows95InterfaceStyle. @end itemize @section Noteworthy changes in version @samp{1.2.10} @itemize @bullet @item Correction for bug #25401 @item Correction for some nib loading issues. @item Limited support for standalone views. @item Fixes for various bugs. @end itemize @section Noteworthy changes in version @samp{1.2.8} Requires: gnustep-gui-0.16.0. It will not compile without this version of the library. Reason: Nib and Gorm loading were moved to a more sensible file structure. Additionally, Nib loading was refactored. @itemize @bullet @item Correction for bug#25001. @item Correction for bug#25111. @item Fixes for nib encoding to use the proper template class instances. @item Changes to use new headers. @end itemize @section Noteworthy changes in version @samp{1.2.6} @itemize @bullet @item Corrections to allow Gorm to build and run properly on the Darwin operating system. @item Corrected sizing of Controls Palette. @item Added preliminary support for IBPlugin API. @item Added preferences panel to add plugins dynamically. @item Moved load/save logic for gorm, gmodel, and nib to plugins. This change should allow plugins for virtually any format to be read/written by Gorm. @item Correction for bug#24146, bug#23889. @end itemize @section Noteworthy changes in version @samp{1.2.4} Requires: gnustep-gui-0.13.2. Reason: Due to changes in popupbutton controller logic. @itemize @bullet @item Corrected bug#'s 19640, 21845, 19792, 15637, 17892, 18171. @item Added error panel to show the detected inconsistencies in a file. @item Added preference setting to turn on or off the gorm file repair logic. @item Added capability to repair logic to fix window level issue. @item Added ruler switch to scroll view inspector. @end itemize @section Noteworthy changes in version @samp{1.2.2} Requires: gnustep-gui-0.13.0. @itemize @bullet @item Moved to GPLv3 @item Added text field to NSTableColumn inspector to allow editing of table column title. @item Corrected issue with selection. @item Added button modifiers for special keys to button inspectors. @item Corrected issue with loading of older gorm files. @item Fix to allow Gorm's menus to be Mac-style, but not the one being edited. @item Other miscellaneous bug corrections. @end itemize @section Noteworthy changes in version @samp{1.2.1} @itemize @bullet @item Minor corrections to previous release. @end itemize @section Noteworthy changes in version @samp{1.2.0} @itemize @bullet @item Corrections to some editors to not change selection if connection is in progress. @item Force menu style to NSNextStepInterfaceStyle for editing purposes. @item Correction for memory issue when closing document. @item Minor bug fixes. @end itemize @section Noteworthy changes in version @samp{1.1.0} @itemize @bullet @item Changed Gorm architecture to use NSDocument classes. @item Abstracted model loading mechanism. This was done by implementing a set of ``Loader'' and ``Builder'' classes which handle filling in the data structures in Gorm and exporting them to external formats. @item Implemented GormNibWrapperLoader and GormNibWrapperBuilder for reading and writing Cocoa NIB files. @item Implemented GormGormWrapperLoader and GormGormWrapperBuilder for reading and writing GNUstep Gorm files @item Implemented GormGModelWrapperLoader for reading GNUstep gmodel files. @item Updated icon @item A number of bugs have been addressed in this release. @end itemize @section Noteworthy changes in version @samp{1.0.8} This is a bugfix release. @itemize @bullet @item Correction for bug#16587. @item Correction for handling non-string identifiers in tableviews. @end itemize @section Noteworthy changes in version @samp{1.0.6} This is a bugfix release. @itemize @bullet @item Entirely new icon set, for palettes, gorm, gmodel, nib and the application. @item Replaced some of the images for the inspectors. @item Corrected the following bugs since the last release: #16049, #16050, #15988, #16049, #15989, #15987, #15817, #15780, #15642, #15556. @item Changed formatting in some of the inspectors so that they are easier to navigate. @end itemize @section Noteworthy changes in version @samp{1.0.4} This is a bugfix release. @itemize @bullet @item Corrected some bug#15236 with window style mask settings. @item Corrected bug#15236, which caused window fields in the inspector not to update when the field was being edited and a new window is selected. @item Corrected bug #15178. @item Corrected problem with standalone views @end itemize @section Noteworthy changes in version @samp{1.0.2} This is a bugfix release. @itemize @bullet @item Fixed some bugs with table column selection. @item Corrected a minor problem in the custom class inspector. @end itemize @section Noteworthy changes in version @samp{1.0.0} PLEASE NOTE: This version of Gorm requires base 1.11.1 and gui 0.10.1 to be installed (gnustep-startup-0.13.0). @itemize @bullet @item All inspectors are now modeled in .gorm files. @item Added autosizing to form attributes inspector. @item Utilize and maintain parent/child data structure more pervasively @item Reorganized code in palettes for cleaner implementation. @item Removed code to check for user bundles, since bugs in Camaelon which prompted those changes were fixed long ago. @item Added documentation to GormCore @end itemize @section Noteworthy changes in version @samp{0.11.0} @itemize @bullet @item Improved implementation of canSubstituteForClass: the default implementation of this method tests the classes to see if initWithCoder: or encodeWithCoder: is implemented on a subclass to determine automatically if that class has the same encoding signature as the original class, if it does, it can be substituted. @item Improved handling of classes which use cell classes in the custom class inspector. The inspector now autmatically replaces the cell class with the appropriate one when the user selects a given subclass. @item Browser based class editor in document panel. This interface is more like the one on OSX. The user now has a choice in preferences to determine which view they would like to use. @item Translation tools. The Document->Translate menu allows the user to export string and import strings in the strings format, so that someone can easily translate just the strings in the file and doesn't need to directly edit anything in Gorm. The strings file can then be loaded back into Gorm and all of the relevant strings are updated. @item Alignment tools. In the new Layout menu there are options to align views, center views, bring views to front or push them to the back of the view layers. @item Implementation of IBViewResourceDraggingDelegate. This allows updating of the pull down in the inspectors panel dynamically. It requires the developer of a palette to implement some code to enable this, as on OSX. @item Lots of bugfixes and usability changes are also included in this release. @end itemize @section Noteworthy changes in version @samp{0.9.10} @itemize @bullet @item Gorm now has a full implementation of canSubstituteForClass: which is used to determine if a class can be substituted in the custom class inspector. This allows classes added in palettes to say whether or not they can be used as a subsitute for a kit class. @item Better separation of Gorm into libraries. As well as the ability to compile on windows with a simple: "make install" @item Implementation of IBResourceManager class. This class is used by palettes to register drag types to be considered by the top level editors in the document window: object, sound, image, class. @item Gorm now is able to switch views in the document window when you drag a file into it. If it's an image it will switch to the image view, if it's a sound, the sound view, an object the object view etc or if it's a class (a .h file) it will switch to the classes view. @item Drag and drop parsing of header files (if you hadn't gathered from the previous item). @item Better support for standalone views. while the user cannot instantiate from the classes view (there were too many problems with this approach). They can now drag any view from the palette into the objects view and have it work. @item A myriad of bug fixes. @end itemize @section Noteworthy changes in version @samp{0.9.2} NOTE: This is mainly a bugfix release. @itemize @bullet @item Some improvements to the procedure for removing connections. @item Corrected various issues with header parsing. @item Now closes windows which were opened during interface testing such as font panels, info panels, etc. @item Minor corrections to background color for a number of inspectors. @item Improvements to gmodel importation. @item Better detection of when the user is utilizing a user bundle. Gorm will now warn the user with a panel. @item Various improvements in documentation @end itemize @section Noteworthy changes in version @samp{0.9.0} @itemize @bullet @item Images/Sounds can now be dragged into a matrix cell. @item Fully implemented date and number formatter inspectors (these classes still need work in GUI). @item Added warning panel if the user attempts to edit a .gorm file created with a newer version of Gorm @item Modified data.classes format so that only those actions specifically added to FirstResponder are listed. @item Greatly improved gmodel importation. (experimental) @item It's now possible to add methods to classes which are not custom. This allows the user to add actions which may have been added to those classes by categories. @item Completely new header parser implemented. @item Improved cut/paste. It's now possible to use cut/paste from almost anywhere. The class editor now fully supports it. @item Improved implementation of some of the InterfaceBuilder framework classes. @item Object editor will now remove all instances of a class that has been deleted from the class editor. @item The class inspector and the classes view will now apply stricter rules to names of actions and outlets to ensure that they are properly entered. @item All inspectors work perfectly with customized colors. @item Fixed a number of bugs. @end itemize @section Noteworthy changes in version @samp{0.8.0} PLEASE NOTE: It is important for this release that you upgrade to Gorm 0.8.0 when using Gorm with the new GNUstep libraries (base-1.10.0 and gui-0.9.4). This version of Gorm contains some features which are reliant on changes made in those versions of the libraries. It is stated in Gorm's documentation (the Gorm.texi file) that this is required, but I felt it important enough to also mention it here so that it is known beyond a reasonable doubt. @itemize @bullet @item New gorm file version. @item Full custom palette support @item Palette preferences panel to allow the user to configure palettes to load @item Experimental: Standalone views. This feature is to allow the use of a view without the need of a containing window. This allows developers to treat these views as they would any other top level object in the .gorm file. This is experimental functionality. @item Improved NSTableColumn inspector. The new inspector allows the user to change the data cell used for a given column. This allows the user to select from a list of cell subclasses and set the appropriate custom or non-custom one they want to appear in that column of the table. @item Improved layout of some of the inspectors. @item Removed old class parser. The parser was somewhat buggy and was actually causing some issues. A new parser will be available in the next version of Gorm. For now users will need to use the class inspector or the outline view to enter classes into Gorm. @item Experimental: ``File'' section. This is essentially a per-file preference which allows the user to control which version of GNUstep a given file will be compatible with. It also lists the potential compatibility issues with the selected version. @item Improved controls palette. New items for some of the standard font replace the old ``Title'' widget which was a System-14 font. The new widgets use a selection of the standard System font to allow the user to easily build a gui using these and reducing the amount of time the user needs to spend fiddling with the font panel. @end itemize @section Noteworthy changes in version @samp{0.7.7} @itemize @bullet @item Important bugfixes in editor classes. @item Rearranged some of the editor classes to be in the palettes which contain the classes they are responsible for editing (GormButtonEditor & GormTabViewEditor). @item Image and Sound editors will now display system default images or sounds if they are available. @item Document window now uses an NSToolbar (experimental). @item Improved the layout of some of the inspectors. @item Corrected some minor issues in the inspectors @item Added code to allow NSTableView and NSOutlineView to show some data during testing @item Gorm will now show an alert panel when a model fails to load or test properly. @end itemize @section Noteworthy changes in version @samp{0.7.6} This release is mainly a bugfix release for 0.7.5. @itemize @bullet @item Improved .gmodel support @item Corrections to previous repair feature. @item Important bugfixes for Menu editing. @item Important bugfixes for class inspector. @end itemize @section Noteworthy changes in version @samp{0.7.5} @itemize @bullet @item The 'reparent' feature in the class inspector. This allows the user to change the class hierarchy from within Gorm. @item Some important bugfixes @item a property 'GormRepairFileOnLoad' (untested) which should repaire old .gorm files... It is HIGHLY recommended that Gorm not be run with this on constantly and that you back up any files which you want to repair before opening them with this option turned on. @item A shelf inspector in prefs that lets you expand the size of the names in the object view.. @item Support for NSFontManager @item A way to restore a complete NSMenu if it's deleted (a new palette entry for NSMenu, not just an item) @end itemize @section Noteworthy changes in version @samp{0.6.0} @itemize @bullet @item Several major bugs corrected. @item Clarified some of the inspectors @item Menu items are now properly enabled/disabled when appropriate @item More descriptive title displayed when a class is being edited. @end itemize @section Noteworthy changes in version @samp{0.5.0} @itemize @bullet @item Enabled defer in NSWindow inspector. @item Added code to the connection inspector to prevent erroneous connections. @item Added support for upgrading of old .gorm files using the older template mechanism @item Grouping with an NSSplitView now operates using the relative positions of the views in the window. @item Custom Class inspector now shows all subclasses, not just direct custom subclasses. @item Bug fixes, eliminated memory leak, code cleanup, etc. @end itemize @section Noteworthy changes in version @samp{0.4.0} @itemize @bullet @item New Menu and Menu Item inspectors. @item User can now specify the Services and Windows menus in the menu inspector. @item User can specify a non-custom subclass as well as a custom one to replace the class when the .gorm is unarchived. This can be used to turn a NSTextField into NSSecureTextField and etc. @item New set name panel. @item New switch control on the font panel to allow the user to specify if a font is encoded with its default size or not. @item Added NSStepper and NSStepperCell to the class list to allow creation of custom subclasses. @item Windows and Services menus now function correctly. @end itemize @section Noteworthy changes in version @samp{0.3.1} @itemize @bullet @item New custom class system. @item Images now persist correctly when added to a button or view. @item Fixed DND @item Various bugfixes @end itemize @section Noteworthy changes in version @samp{0.3.0} @itemize @bullet @item Preferences added. @item User can now enable and disable guidlines for easier editing. @item Refactored code into GormLib which is a clone of the InterfaceBuilder framework. This facilitates creating palettes and inspectors outside of Gorm. @item Added class inspector for easier editing of classes. This gives the user the option to use either the outline view or the inspector to edit new classes. @item Added inspectors for the following: NSScrollView, NSProgressIndicator, NSColorWell, GormImageInspector (for images added to .gorm files). @item Improved look of NSTabView inspector. @item Removed all warnings from the code. @item various bug fixes. @end itemize @section Noteworthy changes in version @samp{0.2.5}. Many fixes and improvements to make the app work better. @itemize @bullet @item Better parsing of headers @item Interface code redone as gorm files. @item Re-add multiple selection via mouse drag. @end itemize @section Noteworthy changes in version @samp{0.2.0} snapshot. Gobs of improvements, mostly due to the hard work of Gregory John Casamento and Pierre-Yves Rivaille. Thanks guys! @itemize @bullet @item Custom class support/translations implemented. @item Added NSScrollView, NSPopupButton, NSOutlineView, NSTableView editing. @item Improved test mode support. @item Improved drag n' drop support on many items. @item Intelligent placement hints. @item Read gmodel files. @item More inspectors. @item Sound and Image support. @item gorm files were changed to directory wrappers for more flexibility. @end itemize @section Noteworthy changes in version @samp{0.1.0} @itemize @bullet @item load/parses class files for entry into class list. @item Pallete/inspectors for date and number formatters @item Pallete/Inspectors for browsers and tableViews @item NSStepper, NSForm, NSPopupButton pallete item and inspector @item Most inspectors greatly improved and fleshed out. @item Custom views added. @item Ability to edit cells in a matrix. @item Ability to change the font of some objects. @end itemize @section Noteworthy changes in version @samp{0.0.3} @itemize @bullet @item Create stub .m and .h files from new classes @item Works better with ProjectCenter. @item Handle Ctrl-Drag and Alt-Drag of objects - automatic conversion to matrices and/or increase decrease rows and cols. @item Edit NSForms titles in place. @item Edit NSBoxes and add subviews. @item Support for custom objects. @end itemize @section Noteworthy changes in version @samp{0.0.2} @itemize @bullet @item Add popup and pulldown menu controls @item Menu support @item More inspectors @item Some support for connections @item Much more fleshed out - too numerous to mention. @end itemize @section Noteworthy changes in version @samp{0.0.1} @itemize @bullet @item 8th December 1999 @itemize @bullet @item Save/Load 'nib' documents (binary archived data) This works so far as it can be tested - but that's just archives containing windows or panels so far. @item Load palettes Loading of palettes works. You can load palettes from the 'Tools' menu. Gorm automatically loads all the palettes from its Resources directory. @item Basic framework So far, the app provides a basic framework that needs fleshing out. @itemize @bullet @item It has a palettes manager object that allows you to select a palette and drag items from the palette into your document. @item It has a special per-document editor object, which keeps track of a matrix of icons representing the top-level objects in the document. @item It has an inspector manager class, which updates the inspector panel when the selected object is changed by an editor. @item It has special inspectors for handling an empty selection or a multiple selection. @end itemize @item Palettes Four palettes (three of which are empty at present) are built and installed in the apps Resources directory. The Window palette is more fully fleshed out than the other palettes. It permits windows and panels to be created in Gorm. If provides the start of a window attributes inspector. @end itemize @item 18 December 1999 @itemize @bullet @item You can drag views from a palette into a window or panel. @item You can select views in a window by clicking on them, shift-clicking (for multiple selection), or click-drag on the window background to select views in a box. @item You can delete/cut/copy/paste views betwen windows. @item You can move views in a window by clicking on them and dragging. @item You can resize views by clicking on their knobs and dragging. @item You can control-drag to mark source and destination views for a connection. @item Next task - inspectors. The connection inspector needs to be implemented to complete the process of establishing connections. The size inspector needs to be implemented to set autosizing parameters for a view. Once these are done, the object editor needs to be made to support connections so that we can connect between objects other than views, then we need to write a menu editor. @end itemize @item 22 December 1999 @itemize @bullet @item Connections inspector is now working - but it needs some effort to tidy it up. @item Class info (outlets and actions) is specified in 'ClassInformation.plist' and needs to be present so that the app knows what outlets/actions an object has (and therefore what connections can be made). @item The view size inspector is working - allowing you to set the size of the subviews within a window. @item The attributes inspector for 'FilesOwner' is working, so you can define the class of the files owner (it defaults to NSApplication). @item There is a crude panel for setting the name of the selected object. @item I've created a couple of new images and got rid of the two NeXT images that were lurking in there. @item There is a Testing directory, with a GormTest application that lets you load a nib for testing - it assumes that the nib will set its FilesOwners delegate to point to a window, and makes that window the key window ... @end itemize @item 23 December 1999 Last work before christmas ... Various bits of tidying up plus - Added an evil hack of a generic attributes inspector ... This looks through all the methods of the selected object to find those taking a single argument and beginning with 'set'. It makes all these setting methods (whose argument is a simple scalar type or an object) available for you to invoke from the inspector panel. This makes it possible to set pretty much any attribute of any object, but you do need to have the GNUstep header files to hand, so you can tell what numeric values to enter to achieve a desired result. @end itemize @end ifclear apps-gorm-gorm-1_5_0/Documentation/readme.texi000066400000000000000000000021461475375552500215140ustar00rootroot00000000000000@c -*-texinfo-*- @ifset TEXT-ONLY @include version.texi @end ifset @section Introduction Read the NEWS file for the latest user visible changes. Read the INSTALL file for installation instructions. Gorm is an acronym for Graphic Object Relationship modeler (or perhaps GNUstep Object Relationship Modeler). Gorm is a clone of the Cocoa (OpenStep/NeXTSTEP) `Interface Builder' application for GNUstep. Gorm is part of the GNUstep project, and is copyrighted by the Free Software Foundation. Gorm is released under the GPL - see the file `COPYING' for details. Documentation for Gorm is located in the Documentation directory. It's also available on the wiki at http://wiki.gnustep.org/index.php/Gorm_Manual. @section Status Gorm is usable and stable. Please report bugs to bug-gnustep@@gnu.org Known problems (things to do) - @enumerate @item Support for IB 3.0 functionality. @item More palettes. @end enumerate @section Acknowledgements @enumerate @item Icons - Mostly by Andrew Lindsay. Gorm application icon by Jesse Ross. @item Code - GormViewKnobs.m adapted from code by Gerrit van Dyk. @end enumerate apps-gorm-gorm-1_5_0/GNUmakefile000066400000000000000000000041421475375552500166230ustar00rootroot00000000000000# GNUmakefile: main makefile for GNUstep Object Relationship Modeller # # Copyright (C) 1999,2002,2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2003 # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # ifeq ($(GNUSTEP_MAKEFILES),) GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null) ifeq ($(GNUSTEP_MAKEFILES),) $(warning ) $(warning Unable to obtain GNUSTEP_MAKEFILES setting from gnustep-config!) $(warning Perhaps gnustep-make is not properly installed,) $(warning so gnustep-config is not in your PATH.) $(warning ) $(warning Your PATH is currently $(PATH)) $(warning ) endif endif ifeq ($(GNUSTEP_MAKEFILES),) $(error You need to set GNUSTEP_MAKEFILES before compiling!) endif VERSION = 1.5.0 PACKAGE_NAME = gorm export PACKAGE_NAME include $(GNUSTEP_MAKEFILES)/common.make CVS_MODULE_NAME = gorm SVN_MODULE_NAME = gorm SVN_BASE_URL = svn+ssh://svn.gna.org/svn/gnustep/apps # # Each palette is a subproject # SUBPROJECTS = \ InterfaceBuilder \ GormObjCHeaderParser \ GormCore \ Plugins \ Applications \ Tools -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble include $(GNUSTEP_MAKEFILES)/Master/nsis.make apps-gorm-gorm-1_5_0/GNUmakefile.postamble000066400000000000000000000005261475375552500206120ustar00rootroot00000000000000# GNUmakefile -- copy all plugins after-all:: echo "Copying Plugins..." cp -r Plugins/GModel/*.plugin GormCore/GormCore.framework/Resources cp -r Plugins/Gorm/*.plugin GormCore/GormCore.framework/Resources cp -r Plugins/Nib/*.plugin GormCore/GormCore.framework/Resources cp -r Plugins/Xib/*.plugin GormCore/GormCore.framework/Resources apps-gorm-gorm-1_5_0/GormCore/000077500000000000000000000000001475375552500162655ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/000077500000000000000000000000001475375552500210035ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassEditor.gorm/000077500000000000000000000000001475375552500250075ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassEditor.gorm/data.classes000066400000000000000000000010271475375552500272770ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "createClassFiles:", "createSubclass:", "instantiateClass:", "loadClass:", "toggleView:", "removeClass:" ); Super = NSObject; }; GormClassEditor = { Actions = ( "instantiateClass:", "createSubclass:", "loadClass:", "createClassFiles:", "removeClass:", "toggleView:" ); Outlets = ( classesView, mainView, viewToggle ); Super = NSView; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassEditor.gorm/data.info000066400000000000000000000002701475375552500265740ustar00rootroot00000000000000GNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassEditor.gorm/objects.gorm000066400000000000000000000110031475375552500273210ustar00rootroot00000000000000GNUstep archive00002c88:00000026:00000086:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? A C CY&% C D:01 NSView% ? A C CY  C CY&01 NSMutableArray1 NSArray&01NSBox%  C CX  C CX&0 &0 %  C CX  C CX&0 &0 1 NSTextField1 NSControl% B@ C< C A  C A&0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor01 NSPopUpButton1NSButton% CF C; C A  C A& 0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0&&&&&&&&&01NSMenu0&0 &01 NSMenuItem0& % Operations&&%01NSImage0 &%common_3DArrowDown%0!0"&%Subclass&&%%0#0$& % Instantiate&&%%0%0&& % Load Class0'&&&%%0(0)&%Create Class Files0*&&&%%0+0,&%Remove0-&&&%%%0.&.&&&%%%%%0/%  C C8  C C8&00 &01 %  C C8  C C8&02 &0304&%Box&&&&&&&& %%051 NSImageView% A C= A A  A A& 06 &%071 NSImageCell0809&%GSSearch&&&&&&&&%%% Ap Ap0:% C= A A  A A& 0; &%0<0=&=&&&&&&&&%0>&0?&&&&0@0A&%Box&&&&&&&& %%0B0C&%System0D&%windowBackgroundColor0E&%WindowE0F&%Window @@ B F@ F@%&  D D0G &0H &0I1 NSMutableDictionary1! NSDictionary&0J& % MenuItem(3)%0K& % ImageView(0)50L& % MenuItem(5)+0M&%NSOwner0N&%GormClassEditor0O&%View(1) 0P&%Box(0)0Q& % TextField(1) 0R&%PopUpButton(0)0S& % MenuItem(0)0T& % MenuItem(2)#0U& % MenuItem(4)(0V&%View(0)0W& % Button(0):0X&%View(2)10Y& % Window(0)0Z&%Box(1)/0[& % MenuItem(1)!0\ &0]1"NSNibConnectorVY0^"PV0_"OP0`"QO0a"RO0b"S0c"[0d"T0e"J0f"U0g"L0h"ZO0i"XZ0j1#NSNibOutletConnector0k&%NSOwnerP0l&%mainView0m#kZ0n& % classesView0o#Qk0p1$NSMutableString&%delegate0q1%NSNibControlConnector[k0r&%createSubclass:0s%Tk0t&%instantiateClass:0u%Jk0v& % loadClass:0w%Uk0x&%createClassFiles:0y%Lk0z& % removeClass:0{"KO0|"WO0}%Wk0~& % toggleView:0#kW0& % viewToggle01&NSIBHelpConnectorW0&%NSToolTipHelpKey0&%Switch clases view0&R0&(%(Perform operations on the selected class0 &apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassInspector.gorm/000077500000000000000000000000001475375552500255275ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassInspector.gorm/data.classes000066400000000000000000000015531475375552500300230ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "addOutlet:", "clickOnClass:", "selectOutlet:", "orderFrontFontPanel:", "removeOutlet:", "searchForClass:", "selectAction:", "selectClass:" ); Super = NSObject; }; GormClassInspector = { Actions = ( "select:", "removeAction:", "addAction:", "removeOutlet:", "addOutlet:", "selectClass:", "searchForClass:", "clickOnClass:", "changeClassName:", "selectOutlet:", "selectAction:" ); Outlets = ( "_classField", "_tabView", "_removeOutlet", "_addAction", "_actionTable", "_outletTable", "_removeAction", "_addOutlet", "_selectClass", "_parentClass", "_search", "_searchText" ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassInspector.gorm/data.info000066400000000000000000000002701475375552500273140ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassInspector.gorm/objects.gorm000066400000000000000000000710521475375552500300530ustar00rootroot00000000000000GNUstep archive000f4240:0000002a:00000177:00000002:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSTabView%  @q0 @k  @q0 @kJ0 &0 % ? @2 @q @h  @q @hJ 0 1NSButton1 NSControl% @f @ @U@ @8  @U@ @8J! 0 % @& @ @U@ @8  @U@ @8J$ 0 &I0 1 NSButtonCell1 NSActionCell1NSCell0&%Add01NSFont% A@JJJJJJJJJJJJJJJI0&JJJ JJ0 &I00&%RemoveJJJJJJJJJJJJJJJIJJJ JJ0 & 01 NSScrollView% @& @C @o` @b  @o` @bJ0 &01 NSClipView% @5 @8 @l @^  @l @^J01 NSTableView%  @l @e`  @l @e`J0 &I00%JJJJJJJJJJJJJJJ0 &01 NSTableColumn0&%column1 Cd A GP01NSTableHeaderCell1NSTextFieldCell0 & % Outlet Names0!% JJJJJJJJ JJJJJJJI0"1NSColor0#&% NSNamedColorSpace0$&% System0%&% controlShadowColor0&#$0'&% windowFrameTextColor0(0)&% sept)JJJJJJJJ JJJJJJJI0*#0+&%System0,&%textBackgroundColor0-#+0.& % textColor0/#$00& %  gridColor01#$02&% controlBackgroundColor031NSTableHeaderView%  @l @6  @l @6J304% @5 @ @l @6  @l @6J305 &3106 &071GSTableCornerView% @ @ @3 @6  @3 @6J08 &%% A @ @09 &0: &10;1 NSScroller% @ @7 @2 @^  @2 @^J0< &I0=JJJJJJJJJJJJJJJJ2 _doScroll:47I A A A A ;0>1 NSRulerView%    J0? &40@ &0A1 NSTabViewItem0B&%Outlets0C&%Outlets % 0D0E&%Actions0F&%Actions0G % ? @2 @q @h  @q @hJG0H% @f @ @U@ @8  @U@ @8J!G0I% @& @ @U@ @8  @U@ @8J$H0J &I0K0L&%Add0M% A@JJJJJJJJJJJJJJJIJJJ JJ0N &I0O0P&%RemoveMJJJJJJJJJJJJJJJIJJJ JJ0Q &HI0R% @& @C @o` @b  @o` @bJ0S &0T% @5 @8 @l @^  @l @^J0U%  @l @e`  @l @e`JUT0V &I0WJJJJJJJJJJJJJJJ0X &0Y0Z&%column1 Cd A GP0[0\& % Action Names!\JJJJJJJJ JJJJJJJI"&0]))JJJJJJJJ JJJJJJJI*-/10^%  @l @6  @l @6J^0_% @5 @ @l @6  @l @6J^0` &^10a &0b% @ @ @3 @6  @3 @6J0c &%% A @ @0d &0e &U10f% @ @7 @2 @^  @2 @^J0g &I0hJJJJJJJJJJJJJJJJR_bTI A A A A f0i%    J0j &_%G%J0k1 NSTextField% @$ @v @Q@ @2  @Q@ @2J 0l &I0m0n& % Class Name:nJJJJJJJJ JJJJJJJI*-0o % @T@ @v @f @5  @f @5J 0p &I0qMJJJJJJJJ JJJJJJJI*-0r% @& @p@ @o @W  @o @WJ 0s &0t% @5 @8 @l @Q@  @l @Q@J0u%  @l @e`  @l @e`Jut0v &I0wJJJJJJJJJJJJJJJ0x &0y0z&%column1 Ce A GP0{0|& % Parent Class!JJJJJJJJ JJJJJJJI"&0}0~&% quatre~JJJJJJJJ JJJJJJJI*-/10%  @l @6  @l @6J0% @5 @ @l @6  @l @6J0 &0#$0& %  controlColor0 &0% @ @ @3 @6  @3 @6J0 &%% A @ @0 &0 &u10% @ @7 @2 @Q  @2 @QJ0 &I0JJJJJJJJJJJJJJJJr2 _doScroll:v24@0:8@16tI A A A A 0% @i @m @L @8  @L @8J 0 &I00&%SelectJJJJJJJJJJJJJJJIJJJ JJ0 % @& @m@ @Y@ @5  @Y@ @5J0 &I0JJJJJJJJ JJJJJJJI*-0% @]@ @m @L @8  @L @8J0 &I00&%SearchJJJJJJJJJJJJJJJIJJJ JJ0#$0&% windowBackgroundColor0&%Window0&%Inspector Window @F @Ç @{I01!NSImage 00&% NSCalibratedWhiteColorSpace 0 &01"NSBitmapImageRep1# NSImageRep0&% NSDeviceRGBColorSpace @H @HII0I001$NSData&$$II*$[=T8J2R-!k[=U:K3xB-H'R-!k[=S7J2xB-H'/ ?[=S7I2xB-H'/ ?[=S7H0xB-H'/ ?[=R7I2xB-H'/ ?[=S7I0xB-H'/ ?[=R7I2xB-H'/ ?[=R7H0xB-H'/ ?[>X/!j:)H'/ ?D49  ?hft{y<;D ?hft}<;D ?<;D ?43:""""43:zzzzͱ""""EEEEEEEEEEEE43:555222t43:0?55hhhiiiyyyVVV777?43:~=0rdxxxUUU444?/17?43:5?0\Mzz{]]]QQQmmm_bn:9@5?0I>e]xxwvtsqpo}66<5?2A3QFA4H:|zzywutrqpbao++05?2@2@2A3B3C4E6}}|zxxwutrqpn}VT_=,, 5@2@3A3A3JdbqihvFEOQ-)Y)!W)`/$k3'q6*n4)l3'i2'f0&c/$`-$Y*!)5C4C4D4E6F7H7Ʀkkk)))LJRkjxihvhgu::B\/&[-$Y-$c/&l3'o4)l3'j2'g2&d0$a/$^-#X*!)5@2D4E6F7H7I8{{{[[[322QPZ^]jjhwhguQP[K33\-&W)_/$j3'm3'm4)j3'h2&d0&b/$_-#],#X*!)P'~>>ddd>>?87?4$$E)&_-#`0'_0&]/&^/&`/&`/&c0&j2'n3'k3'h2&d0$a/$^-#\,!Z,!X*!U)T))ttttttzzz;;;rqyjhwPPZ43:C@?w9,c2)b2)^,#_0&d2'g2'h2'k3)l3)l3)l3'l3'i2'f0&c/$_-#],#Z,!X*!W)T)S))rrr```FFF000mmm\[a<;CA)'^3,I::76v8,_-$b2'g2'l4)r7*s7*s7*w8,t7,q6*n4)k3'g2&d0$`-$],#[,!X*!W)U)S'S')YYY777XWcKJS|||SSS\2,KDD4I:I;A?>~>0b2)f2'p6*x:-y:-{;-x:-v9,s7*o4)l3'i2&f0&c/$_-#\,#Y*!W)T)S'R'S')TR^|z@?Gↄ\Zg<;CJJJm4)D4E6J;UIPEvI@q:/l4)m4)x:,};/{:-y:-w9,t7*q6*m4)j3'h2&c0&a/$]-#[,!X*!V)T)R'R'R')0/5?_^kCBJ43:?QQQ ^-#I:O>SBP?H7?2p6*s7*0|;/y:-p6*f0&d0&c/&`/$_-$]-#\,#T)!T)!T)!T)!T)!T)!T)!)))) ?h3'z;/T)!T)!T)!`/$`/$))))) ? 00$$R&   @ @0 &0 &01%NSMutableDictionary1& NSDictionary&.0&% NSOwner0&%GormClassInspector0&%Button50&%TableColumn(1)00&%column2 BT A GP00&% !JJJJJJJJ JJJJJJJI"&0JJJJJJJJ JJJJJJJI*-0& % TableColumn6y0&%Button40&%Button 0& % TableColumn500&%column2 CO A GP00& % Action NamesMJJJJJJJJ JJJJJJJI"&0JJJJJJJJ JJJJJJJI*-0&%GormNSTableView0%  @c @d   @c @d J0 &I0MJJJJJJJJJJJJJJJ0 &00&%column2 C A GP00&% MJJJJJJJJ JJJJJJJI"&00&%nineMJJJJJJJJ JJJJJJJI*-/10±%  @c @6  @c @6J0ñ &0ı%  @3 @6  @3 @6J0ű &%% A @ @0Ʊ &0DZ&%Button3I0ȱ&%TextFieldCell(0)m0ɱ& % TableColumn40ʱ0˱&%column1 BP A GP0̱0ͱ&% MJJJJJJJJ JJJJJJJI&0α0ϱ&%neufMJJJJJJJJ JJJJJJJI*-0б& % ButtonCell(1) 0ѱ&%Button2H0ұ&%TabViewItem(1)D0ӱ& % TableColumn30Ա0ձ&%column2 CO A GP0ֱ0ױ& % Outlet NamesMJJJJJJJJ JJJJJJJI"&0رJJJJJJJJ JJJJJJJI*-0ٱ&%Cell(2)w0ڱ&%Button1 0۱&%TableColumn(0)0ܱ& % ButtonCell(5)0ݱ& % TableColumn20ޱ0߱&%column1 BP A GP00&% MJJJJJJJJ JJJJJJJI&0ϐMJJJJJJJJ JJJJJJJI*-0& % ScrollView2r0& % TableColumn10&%TabView0& % TableView(1)U0& % ButtonCell(0)0&%TabViewItem(0)A0&%View(2)G0&%Cell(1)W0& % TextField20& % ButtonCell(4)0& % TextField1o0& % ScrollView(1)R0& % TableView(0)0& % TableColumn00&%column1 BP A GP00&% MJJJJJJJJ JJJJJJJI&00&%neufMJJJJJJJJ JJJJJJJI*-0&%View(1) 0& % InspectorWin0&%TextFieldCell(2)0&%Cell(0)0&%GormNSTableView3u0& % ButtonCell(3)K0& % ScrollView(0)0&%TableColumn(2)Y0&%TextFieldCell(1)qP& % TextFieldkP& % ButtonCell(2)OP& % TableColumn7PP&%column2 C5 A GPPP&% !JJJJJJJJ JJJJJJJI&PP&%twoJJJJJJJJ JJJJJJJI*-P &NNP 1'NSNibConnectorP '吐P 'P 'P'䐐P'P'퐐P1(NSNibOutletConnectorP&%windowP'ݐP'ӐP'ɐP'P'P'ڰP'ѰP'ǰP'㐐P'P'P'P'P 1)NSNibControlConnectorP!& % selectClass:P"'됐P#'P$)P%&%searchForClass:P&)P'&%changeClassName:P()ǰP)1*NSMutableString& % addAction:P*)ѰP+*& % removeAction:P,(P-*& % nextKeyViewP.(-P/(밧-P0(-P1(ڰ-P2(-P3(P4*&%initialFirstResponderP5'P6'P7'P8'۰P9'P:'P;'P<'P='P>)ﰥP?& % selectOutlet:P@(PA& % nextKeyViewPB)氥PC& % selectAction:PD(PE& % nextKeyViewPF'PG'PH'簰PI)PJ&% NSFirstPK& % removeAction:PL'аڐPM)JPN& % addAction:PO'ҰPP'ҐPQ'ѐPR'ǐPS'PT'PU'ٰPV'찯PW'PX'ܰPY)ڰPZ& % addOutlet:P[)P\& % removeOutlet:P](P^& % _classFieldP_(P`& % _outletTablePa(Pb& % _parentClassPc(Pd& % _searchTextPe(Pf&%_searchPg(Ph& % _selectClassPi(Pj&%_tabViewPk(Pl& % _actionTablePm(Pn& % _addActionPo(Pp& % _removeActionPq(Pr& % _addOutletPs(Pt& % _removeOutletPu%&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassPanel.gorm/000077500000000000000000000000001475375552500246205ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassPanel.gorm/data.classes000066400000000000000000000005641475375552500271150ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "okButton:", "browserAction:" ); Super = NSObject; }; GormClassPanelController = { Actions = ( "okButton:", "browserAction:" ); Outlets = ( okButton, classBrowser, panel, classNameForm ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassPanel.gorm/data.info000066400000000000000000000002701475375552500264050ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormClassPanel.gorm/objects.gorm000066400000000000000000000122161475375552500271410ustar00rootroot00000000000000GNUstep archive000f4240:00000024:00000062:00000004:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @n @qJ I @~ @`01 NSView% ? @" @n @q  @n @qJ01 NSMutableArray1 NSArray&01 NSBrowser1 NSControl% @$ @O @l @j   @l @j J0 &0 1 NSScroller% @ ? @k @2  @k @2J0 &%0 1NSCell0 &0 1NSFont%&&&&&&JJ&&&&&&&J2 scrollViaScroller:v24@0:8@1601 NSScrollView% @7 @l @d`  @l @d`J0 &01 NSClipView% @5 @ @i@ @c  @i@ @cJ01NSMatrix%  @i@ @Y  @i@ @YJ0 &%01 NSActionCell0& &&&&&&JJ&&&&&&&I% @i@ @Y 01NSColor0&% NSNamedColorSpace0&% System0& %  controlColor0& % NSBrowserCell01 NSBrowserCell &&&&&&JJ&&&&&&&%%0 &2doClick:2doDoubleClick:0 &00&% controlBackgroundColor0% @ @ @2 @c  @2 @cJ0 &%0! &&&&&&JJ&&&&&&&J2 _doScroll:v24@0:8@16I A A A A %0" &&&&&&JJ&&&&&&&0#&% NSMatrix0$&%/% @Y  @ ? @k @2 @l @d`0% &0&1NSBrowserColumn%$%%0'1NSButton% @f` @  @L @8  @L @8J0( &%0)1 NSButtonCell0*&%OK &&&&&&JJ&&&&&&&I &&& &&0+1NSForm% @ @B @l @4  @l @4J0, &%0-1 NSFormCell &&&&&&JJ&&&&&&&I 0.0/&%Field: &&&&&&JJ&&&&&&&% @l @4 @00& % NSFormCell%%01 &02 &&&&&&JJ&&&&&&&I B0304& % Class Name: &&&&&&JJ&&&&&&&20506&% windowBackgroundColor07&%Window08&%Select A Class8 @m @k@ @Ç @xI091NSImage0:&% NSApplicationIcon&   @ @p0; &0< &0=1NSMutableDictionary1 NSDictionary&0>&%Button'0?& % SelectPanel0@&% NSOwner0A&%GormClassPanelController0B&%Form+0C& % GormNSBrowser0D &0E1!NSNibConnector?0F&% NSOwner0G!C0H!>0I1"NSNibOutletConnectorFC0J& % classBrowser0K"F?0L&%panel0M"F>0N&%okButton0O1#NSNibControlConnector>F0P& % okButton:0Q"CF0R1$NSMutableString&%delegate0S!B0T#CF0U&%browserAction:0V"FB0W& % classNameForm0X"B>0Y$& % nextKeyView0Z"CBY0[">CY0\"?C0]$&%initialFirstResponder0^&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormConnectionInspector.gorm/000077500000000000000000000000001475375552500265615ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormConnectionInspector.gorm/data.classes000066400000000000000000000004621475375552500310530ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "_internalCall:" ); Super = NSObject; }; GormConnectionInspector = { Actions = ( "_internalCall:" ); Outlets = ( newBrowser, oldBrowser ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormConnectionInspector.gorm/data.info000066400000000000000000000002701475375552500303460ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormConnectionInspector.gorm/objects.gorm000066400000000000000000000145151475375552500311060ustar00rootroot00000000000000GNUstep archive000f4240:00000021:00000070:00000004:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSSplitView% @ @B @pp @v  @pp @vJ0 &0 1 NSBrowser1 NSControl%  @pp @n`  @pp @n`J0 &0 1 NSScrollView%  @` @k  @` @kJ0 &0 1 NSClipView% @5 @ @Z @k  @Z @kJ01NSMatrix%  @Z @Y  @Z @YJ 0 &%01 NSActionCell1NSCell0&01NSFont%&&&&&&JJ&&&&&&&I% @Z @Y 01NSColor0&% NSNamedColorSpace0&% System0& %  controlColor0& % NSBrowserCell01 NSBrowserCell0&&&&&&&JJ&&&&&&&%%0 & 2doClick:2doDoubleClick:0 &00&% controlBackgroundColor01 NSScroller% @ @ @2 @k  @2 @kJ0 &%0 &&&&&&JJ&&&&&&&J 2 _doScroll:v24@0:8@16 I A A A A 0!% @`  @`@ @k  @`@ @kJ0" &0#% @5 @ @Z @k  @Z @kJ0$ &0%% @ @ @2 @k  @2 @kJ0& &%0'&&&&&&JJ&&&&&&&J!#I A A A A %%0(&&&&&&JJ&&&&&&&0)&% NSMatrix0*&%/% @Y0+% @ ? @o @2  @o @2J0, &%0-&&&&&&JJ&&&&&&&J 2 scrollViaScroller:v24@0:8@16   @` @k0. &0/1NSBrowserColumn %*00!%%%01% @o  @pp @Y  @pp @YJ02 &03%  @pp @S  @pp @SJ04 &05% @5 @ @n @R  @n @RJ06%  @n @Y  @n @YJ507 &%08&&&&&&JJ&&&&&&&I% @n @Y 09& % NSBrowserCell0:&&&&&&JJ&&&&&&&%%0; &10< &60=% @ @ @2 @R  @2 @RJ0> &%0?&&&&&&JJ&&&&&&&J35I A A A A =%0@&&&&&&JJ&&&&&&&:)0A&%/% @Y0B% @ ? @o @2  @o @2J0C &%0D&&&&&&JJ&&&&&&&J1   @pp @S0E &0F36%A%%0G1NSImage0H&%common_Dimple.tiff0I0J&% controlShadowColor%A0K0L&% windowBackgroundColor0M&%Window0N&%Connections InspectorN ? @\@ @Ç @|I&   @ @0O &0P &0Q1NSMutableDictionary1 NSDictionary&0R&%GormNSBrowser110S& % SplitView0T&% NSOwner0U&%GormConnectionInspector0V& % InspectorWin0W& % GormNSBrowser 0X &  0Y1NSNibConnectorV0Z&% NSOwner0[WS0\RS0]S0^1NSNibOutletConnectorZR0_& % oldBrowser0`ZW0a& % newBrowser0b1 NSNibControlConnectorWZ0c&%_internalCall:0d RZc0eZV0f1!NSMutableString&%window0gRZ0h!&%delegate0iWZh0jVW0k&%initialFirstResponder0l&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormCustomClassInspector.gorm/000077500000000000000000000000001475375552500267225ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormCustomClassInspector.gorm/data.classes000066400000000000000000000003001475375552500312030ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormCustomClassInspector = { Actions = ( "select:" ); Outlets = ( browser ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormCustomClassInspector.gorm/data.info000066400000000000000000000002701475375552500305070ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormCustomClassInspector.gorm/objects.gorm000066400000000000000000000070511475375552500312440ustar00rootroot00000000000000GNUstep archive000f4240:0000001e:00000041:00000004:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBrowser1 NSControl% @4 @( @m @v  @m @vJ-0 &0 1 NSScrollView%  @m @up  @m @upJ0 &0 1 NSClipView% @5 @ @j @u0  @j @u0J0 1NSMatrix%  @j @Y  @j @YJ 0 &%01 NSActionCell1NSCell0&01NSFont%&&&&&&JJ&&&&&&&I% @j @Y 01NSColor0&% NSNamedColorSpace0&% System0& %  controlColor0& % NSBrowserCell01 NSBrowserCell0&0% A@&&&&&&JJ&&&&&&&%%0 &2doClick:2doDoubleClick:0 & 00&% controlBackgroundColor01 NSScroller% @ @ @2 @u0  @2 @u0J0 &%0&&&&&&JJ&&&&&&&J 2 _doScroll:v24@0:8@16 I A A A A %0 &&&&&&JJ&&&&&&&0!&% NSMatrix0"&%/% @Y0#%  @2   @2 J0$ &%0%&&&&&&JJ&&&&&&&J2 scrollViaScroller:v24@0:8@16   @m @up0& &0'1NSBrowserColumn %"%%0(&%Window0)&%Inspector Window) @U @Ç @|I0*1NSImage0+&% NSApplicationIcon&   @ @0, &0- &0.1NSMutableDictionary1 NSDictionary&0/&% NSOwner00&%GormCustomClassInspector01& % Inspector02& % GormNSBrowser03 &041NSNibConnector105&% NSOwner0621071NSNibOutletConnector5208&%browser09510:&%window0;250<&%delegate0=120>1NSMutableString&%initialFirstResponder0?&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDocument.gorm/000077500000000000000000000000001475375552500243515ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDocument.gorm/data.classes000066400000000000000000000017741475375552500266520ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "createClassFiles:", "createSubclass:", "instantiateClass:", "loadClass:", "remove:", "selectArchiveType:" ); Super = NSObject; }; GSNibContainer = { Actions = ( ); Outlets = ( ); Super = NSObject; }; GormDocument = { Actions = ( "createSubclass:", "loadClass:", "createClassFiles:", "instantiateClass:", "remove:" ); Outlets = ( selectionBox, filePrefsView, filePrefsManager, filePrefsWindow ); Super = NSDocument; }; GormDocumentWindow = { Actions = ( ); Outlets = ( ); Super = NSWindow; }; GormFilePrefsManager = { Actions = ( "showIncompatibilities:", "selectTargetVersion:", "selectArchiveType:" ); Outlets = ( showIncompatibilities, targetVersion, gormAppVersion, archiveType, iwindow, itable, fileType ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDocument.gorm/data.info000066400000000000000000000002701475375552500261360ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDocument.gorm/objects.gorm000066400000000000000000000372461475375552500267040ustar00rootroot00000000000000GNUstep archive000f4240:0000002b:0000014c:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @x0 @pJI @ @01 NSView% ? @" @x0 @p  @x0 @pJ01 NSMutableArray1 NSArray&01 NSScrollView% @0 @$ @v @o`  @v @o`J0 &0 1 NSClipView% @5 @8 @u @l   @u @l J0 1 NSTableView1 NSControl%  @u @d   @u @d J 0 &I0 1NSCell0 &01NSFont%JJJJJJJJJJJJJJJ0 &01 NSTableColumn0&%item BP A GP01NSTableHeaderCell1NSTextFieldCell1 NSActionCell0&%Item#0% JJJJJJJJ JJJJJJJI01NSColor0&% NSNamedColorSpace0&% System0&% controlShadowColor00&% windowFrameTextColor00&% nineJJJJJJJJ JJJJJJJI00&%System0&%textBackgroundColor0 0!& % textColor 0"0#& % description C A GP0$0%& % DescriptionJJJJJJJJ JJJJJJJI0&JJJJJJJJ JJJJJJJI  0'0(& %  gridColor0)0*&% controlBackgroundColor0+1NSTableHeaderView%  @u @6  @u @6J0,% @5 @ @u @6  @u @6J+0- &+0.0/& %  controlColor00 &011GSTableCornerView% @ @ @3 @6  @3 @6J02 &%% A @ @03 &04 & )051 NSScroller% @ @7 @2 @l@  @2 @l@J06 &I07 JJJJJJJJJJJJJJJJ,1 I A A A A 5,0809&% windowBackgroundColor0:&%Window0;&%Show Incompatibilities;  @Ç @wI0<1NSImage0=&% NSApplicationIcon&   @ @0>1 GSNibItem0?&%GormFilePrefsManager  &0@% ? @" @u @h`JI @@ @`0A % ? @" @u @h`  @u @h`J0B &0C1NSBox%  @u` @g  @u` @gJ0D &0E % @ @ @t @f@  @t @f@J0F &  0G1 NSTextField% @$ @^ @e @2  @e @2J 0H &I0I0J&%Gorm Build Identifier0K% A@JJJJJJJJ JJJJJJJI 0L% @f @^ @` @2  @` @2J 0M &I0N JJJJJJJJ JJJJJJJI8 0O% @$ @] @s @  @s @J 0P &0Q % @ @ @r   @r J0R &0S0T&%BoxJJJJJJJJJJJJJJJ @ @%%0U% @$ @V @e @2  @e @2J 0V &I0W0X&%GNUstep Target VersionKJJJJJJJJ JJJJJJJI 0Y1 NSPopUpButton1 NSButton% @f @V @` @4  @` @4J 0Z &I0[1!NSPopUpButtonCell1"NSMenuItemCell1# NSButtonCell JJJJJJJJ0\1$NSMenu 0] &0^1% NSMenuItem0_&%GNUstep gui-0.10.3 JJII0`%0a&%GNUstep gui-0.9.5 JJII0b%0c&%GNUstep gui-0.9.3 JJII0d%0e&%Latest Version JJI0f0g& %  common_NibbleIJJJJJJJI JJJ JJd\dIIIII0h % @R  @g @9  @g @9J"0i &I0j#0k&% Show IncompatibilitiesJJJJJJJJJJJJJJJI JJJ JJ0l% @$ @O @e @2  @e @2J,0m &I0n0o& % Archive TypeKJJJJJJJJ JJJJJJJI 0p% @f @O @` @4  @` @4J)0q &I0r! JJJJJJJJ0s$ 0t &0u%0v& % Typed Stream JJIfI0w%0x& % Keyed Archive JJII0y%0z&%Both JJIIJJJJJJJI JJJ JJusuIIIII0{% @$ @> @\ @2  @\ @2J$0| &I0}0~& % Document TypeK~JJJJJJJJ JJJJJJJI 0% @f @> @a` @2  @a` @2J!0 &I00&%System0% A@JJJJJJJJ JJJJJJJI 0 JJJJJJJJJJJJJJJ @ @%%80&%Window0&%Window0&% Window  @Ç @wI<&   @ @00&%GormDocumentWindow% ? @" @x @lJI @Y @p0 % ? @" @x @l  @x @lJ0 &0%  @x @l  @x @lJ0 &0 % @ @ @wp @k`  @wp @k`J0 &00&%BoxJJJJJJJJJJJJJJJ @ @%%80&%Window0&%UNTITLED ?  @Ç @wI&  @ @0 &0 &01&NSMutableDictionary1' NSDictionary&30&%TableCornerView(0)10& % MenuItem(10)0%0& % Load Class JJII0& % MenuItem5`0& % TableColumn200&%column1 BP A GP00&% JJJJJJJJ JJJJJJJI00&%troisJJJJJJJJ JJJJJJJI 0&%Box(0)0& % Panel Window@0&%GormNSPopUpButton1p0& % Window(0)0& % MenuItem(6)0%0&%Remove JJII0&%GormNSTableView 0& % MenuItem(1)0%0&%Subclass JJII0&%Box2O0&%ViewE0& % TextField(2){0& % ScrollView0& % ClipView(0) 0& % MenuItem2u0& % TextFieldG0&%Incompatibilities Window0&%View(1)0& % MenuItem(4)0%0& % Operations JJI00&% common_3DArrowDownI0& % MenuItem(9)0%0& % Instantiate JJII0& % TextField2U0& % TableColumn?>0&%TableHeaderView(0)+0±& % MenuItem4y0ñ& % MenuItem(11)0ı%0ű&%Create Class Files JJII0Ʊ& % TableColumn1"0DZ&%GormNSPopUpButtonY0ȱ& % MenuItem(2)0ɱ%0ʱ& % Load Class JJII0˱& % MenuItem(7)0̱%0ͱ& % Operations JJII0α&%Box1C0ϱ& % TextField(3)0б& % MenuItem1d0ѱ& % ClipView(1),0ұ& % TableColumn30ӱ0Ա&%column2 BT A GP0ձ0ֱ&% JJJJJJJJ JJJJJJJI0ױ0ر&%threeJJJJJJJJ JJJJJJJI 0ٱ&%Buttonh0ڱ&%MenuItemb0۱&%View(2)Q0ܱ& % MenuItem(0)^0ݱ& % MenuItem(5)0ޱ%0߱& % Instantiate JJII0& % TextField1L0&% NSOwner0& % GormDocument0& % MenuItem3w0& % MenuItem(12)0%0&%Remove JJII0&%View(0)0& % Scroller(0)50& % MenuItem(8)0%0&%Subclass JJII0& % MenuItem(3)0%0&%Create Class Files JJII0& % TextField3l0 &DD01(NSNibConnector0(య0(0(0(ǰ0(ڐ0(А0(ٰ01)NSNibOutletConnector?0&%gormAppVersion0)?0& % targetVersion0)?0&%showIncompatibilities01*NSNibControlConnectorٰ?P&%showIncompatibilities:P(ﰯP(P(P(㐐P)?P& % archiveTypeP*?P&%selectArchiveType:P *ǰ?P &%selectTargetVersion:P (P (P (P(P(ƐP(P(ҐP)?P&%iwindowP)?P&%itableP)?P& % dataSourceP)?P&%delegateP(P)ᰵP1+NSMutableString&%filePrefsWindowP)P+& % filePrefsViewP)?P +&%filePrefsManagerP!(ܐP"(P#(ȐP$(쐐P%*P&&%createSubclass:P'*ȰP(& % loadClass:P)*P*&%createClassFiles:P+(P,(ݐP-*ݰP.&%instantiateClass:P/(P0*P1&%remove:P2(P3(ϰP4)?P5&%fileTypeP6(ːP7(鐐P8(P9(P:(ÐP;(䐐P<(P=(簦P>(P?(P@)ᰦPA+&%_windowPB)ᰣPC+& % selectionBoxPD(PE(谱PF*谱PG& % _doScroll:PH(ѰPI(ѐPJ(PK(۰PL&&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDummyInspector.gorm/000077500000000000000000000000001475375552500255555ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDummyInspector.gorm/data.classes000066400000000000000000000002521475375552500300440ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormDummyInspector = { Actions = ( ); Outlets = ( button ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDummyInspector.gorm/data.info000066400000000000000000000002701475375552500273420ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormDummyInspector.gorm/objects.gorm000066400000000000000000000034051475375552500300760ustar00rootroot00000000000000GNUstep archive000f4240:00000019:00000024:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01NSButton1 NSControl%  @q @x@  @q @x@J0 &%0 1 NSButtonCell1 NSActionCell1NSCell0 &%Not Applicable0 1NSFont% A&&&&&&JJ&&&&&&&I0 & &&& &&0 1NSColor0&% NSNamedColorSpace0&% System0&% windowBackgroundColor0&%Window0&%Inspector Window ? @" @Ç @|I&   @ @p0 &0 &01NSMutableDictionary1 NSDictionary&0&%Button0&% NSOwner0&%GormDummyInspector0& % InspectorWin0&%View0 &01NSNibConnector0&% NSOwner000 1NSNibOutletConnector0!1NSMutableString&%window0"0#&%button0$&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormFontView.gorm/000077500000000000000000000000001475375552500243345ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormFontView.gorm/data.classes000066400000000000000000000005241475375552500266250ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "selectFont:" ); Super = NSObject; }; GormFontViewController = { Actions = ( "selectFont:" ); Outlets = ( view, fontSelector, encodeButton ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormFontView.gorm/data.info000066400000000000000000000002701475375552500261210ustar00rootroot00000000000000GNUstep archive00002f44:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormFontView.gorm/objects.gorm000066400000000000000000000126451475375552500266630ustar00rootroot00000000000000GNUstep archive00002f44:00000026:00000097:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSWindow1 NSWindow1 NSResponder% ? @" @r @d`&% @o @01 NSView% ? @" @r @d`  @r @d`&01 NSMutableArray1 NSArray&01NSBox% @$ @O @q @S  @q @S&0 &0 % @ @ @p @Q@  @p @Q@&0 &0 1 NSPopUpButton1NSButton1 NSControl% @H @5 @f @4  @f @4&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont% A@&&&&&&&&01NSMenu0&0 &  01 NSMenuItem0&%As Selected Above0&&&%01NSImage @& @ 01NSColor0&%NSCalibratedWhiteColorSpace 0 &01NSBitmapImageRep1 NSImageRep0&%NSDeviceRGBColorSpace @& @ %% %01NSData&II*t8 O Иd "Q8&)Fb@8*@bѩ$%R\K/Idk S|M&E!FR(yTi9JT*:v  lR%00&%Bold System Font0&&&%%0 0!& % System Font&&%%0"0#&%User Fixed Font0$&&&%%0%0&& % User Font&&%%0'0(&%Title Bar Font0)&&&%%0*0+& % Menu Font0,&&&%%0-0.& % Message Font0/&&&%%0001& % Palette Font02&&&%%0304&%Tool Tips Font05&&&%%0607&%Control Content Font08&&&%%090:&%Role Label Font0;&&&%%&&&&&&%0<&0=&&&& &&%%%%%0>1 NSTextField% @H @I @f @2  @f @2&0? &%0@1 NSTextFieldCell0A&%Use Family and Typeface0B% A@&&&&&&&& &&&&&&%0C0D&%NSNamedColorSpace0E&%System0F&%textBackgroundColor0GDE0H& % textColor0I% @H  @f @0  @f @0&0J &%0K0L&%Encode default size0M0N1!NSMutableString&%common_SwitchOff&&&&&&&&&&&&&&%0O&0P&0Q0R!&%common_SwitchOn&&& &&0S 0T&%Box0U% A@&&&&&&&& &&&&&&%0VD0W&%System0X&%windowBackgroundColorG @ @%%V0Y&%Window0Z& % FontViewPanelZ ? @> @È @È%0[0\&%NSApplicationIcon&   @ @0] &0^ &0_1"NSMutableDictionary1# NSDictionary&0`&%NSOwner0a&%GormFontViewController0b& % MenuItem1 0c& % TextField>0d& % MenuItem2%0e& % MenuItem3"0f&%ButtonI0g& % MenuItem4'0h& % MenuItem5*0i& % MenuItem6-0j& % MenuItem700k& % MenuItem1090l& % MenuItem830m&%MenuItem0n& % MenuItem110o& % MenuItem960p&%View(0) 0q&%Box0r&%GormNSPopUpButton 0s& % FontViewPanel0t &0u1$NSNibConnectors0v&%NSOwner0w$q0x$rp0y$m0z$b0{$d0|$e0}$g0~$h0$i0$j0$l0$o0$k0$n01%NSNibOutletConnectorvq0&%view0%vr0& % fontSelector01&NSNibControlConnectorrv0& % selectFont:0$cp0$fp0%vf0& % encodeButton0%rf0!& % nextKeyView0%fr0%sr0!&%initialFirstResponder0$pq0"&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormHelpInspector.gorm/000077500000000000000000000000001475375552500253525ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormHelpInspector.gorm/data.classes000066400000000000000000000002521475375552500276410ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormHelpInspector = { Actions = ( ); Outlets = ( toolTip ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormHelpInspector.gorm/data.info000066400000000000000000000002701475375552500271370ustar00rootroot00000000000000GNUstep archive00002c88:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormHelpInspector.gorm/objects.gorm000066400000000000000000000040361475375552500276740ustar00rootroot00000000000000GNUstep archive00002c88:0000001b:00000038:00000000:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C&% Ce D01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01 NSTextField1 NSControl% B C C> A  C> A& 0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 &0 1NSFont% &&&&&&&&0%0 1NSColor0 &%NSNamedColorSpace0&%System0&%textBackgroundColor0 0& % textColor0% @ C B A  B A&0 &%00& % Tool Tips:0% A@&&&&&&&&0%0 0&%System0&%textBackgroundColor0 0& % textColor0 0&%System0&%windowBackgroundColor0&%Window0 &%Inspector Window  @@ B F@ F@%&   D D0! &0" &0#1NSMutableDictionary1 NSDictionary&0$& % TextField(0)0%&%NSOwner0&&%GormHelpInspector0'& % InspectorWin0(& % TextField(1)0)&%View(0)0* &0+1NSNibConnector'0,&%NSOwner0-)'0.$)0/()001NSNibControlConnector$,011NSMutableString&%ok:021NSNibOutletConnector$,03&%delegate04,'05&%window06,$07&%toolTip08&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormImageInspector.gorm/000077500000000000000000000000001475375552500255045ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormImageInspector.gorm/data.classes000066400000000000000000000004571475375552500300020ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; GormImageInspector = { Actions = ( ); Outlets = ( height, width, imageView, name ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormImageInspector.gorm/data.info000066400000000000000000000002701475375552500272710ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormImageInspector.gorm/objects.gorm000066400000000000000000000107031475375552500300240ustar00rootroot00000000000000GNUstep archive000f4240:0000001b:0000005d:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @$ @$ @o @Z  @o @ZJ"0 &0 % @ @ @m @T  @m @TJ0 &0 1 NSTextField1 NSControl% @$ @K @G @3  @G @3J0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&%Width:01NSFont% A@&&&&&&JJ &&&&&&&I01NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% @$ @@ @G @3  @G @3J0 &%00&%Height:&&&&&&JJ &&&&&&&I0% @$ @ @G @3  @G @3J0 &%00&%Name:&&&&&&JJ &&&&&&&I0% @O @K @L @3  @L @3J0 &%0 0!&!&&&&&&JJ &&&&&&&I0"0#&% System0$&% controlBackgroundColor0%% @O @@ @L @3  @L @3J0& &%0'!0(%!&&&&&&JJ &&&&&&&I"0)% @O @ @d @3  @d @3J0* &%0+!(!&&&&&&JJ &&&&&&&I"0,0-& % Attributes&&&&&&JJ &&&&&&&I0.#0/&% windowBackgroundColor @ @%%001 NSImageView% @$ @^@ @o @p  @o @pJ01 &%021 NSImageCell031NSImage(&&&&&&JJ&&&&&&&%%% @I @I.04&%Window05&%Inspector Window5 @S@ @Ç @|I0607&% NSApplicationIcon&   @ @p08 &09 &0:1NSMutableDictionary1 NSDictionary& 0;&%Box0<& % TextField30=& % TextField 0>& % TextField5)0?& % TextField20@&% NSOwner0A&%GormImageInspector0B& % ImageCell(0)20C& % ImageView(0)00D& % TextField10E& % InspectorWin0F& % TextField4%0G &0H1NSNibConnectorE0I&% NSOwner0J=0KD0L?0M<0NFI0O>I0P;0Q1NSNibOutletConnectorIE0R&%window0SI<0T&%width0UI>0V&%name0WIF0X&%height0YC0ZBC0[IC0\& % imageView0]&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInconsistenciesPanel.gorm/000077500000000000000000000000001475375552500267135ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInconsistenciesPanel.gorm/data.classes000066400000000000000000000004461475375552500312070ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormGormWrapperLoader = { Actions = ( ); Outlets = ( message, textField, panel ); Super = GormWrapperLoader; }; GormWrapperLoader = { Actions = ( ); Outlets = ( ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInconsistenciesPanel.gorm/data.info000066400000000000000000000002701475375552500305000ustar00rootroot00000000000000GNUstep archive00002ced:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInconsistenciesPanel.gorm/objects.gorm000066400000000000000000000050211475375552500312300ustar00rootroot00000000000000GNUstep archive00002ced:0000001f:0000003e:00000001:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C C&% D DD01 NSView% ? A C C  C C&01 NSMutableArray1NSArray&01 NSScrollView% A A  C C[  C C[&0 &0 1 NSClipView% A @ C CW A A  C CW&0 &0 1 NSTextView1NSText% A A  C C[  C C[&0 &0 1NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor C C[ K K00& % textColor C K 01 NSScroller1 NSControl% @ @ A CW  A CW&0 &%01NSCell0&01NSFont%&&&&&&&&&&&&&&&2 _doScroll:v12@0:4@8 % A A A A 01 NSTextField% A Cj C A  C A&0 &%01NSTextFieldCell1 NSActionCell0&0% A@&&&&&&&&&&&&&&%00&%System0&%textBackgroundColor0 0!& % textColor0"0#&%System0$&%windowBackgroundColor0%&%Window0&&%Inconsistencies Found& @@ B F@ F@%&  D D0' &0( &0)1NSMutableDictionary1 NSDictionary&0*& % TextField(0)0+&%NSOwner0,&%GormGormWrapperLoader0-& % ScrollView(0)0.&%Panel(0)0/& % TextView(0) 00&%View(0)01 &021NSNibConnector.03&%NSOwner040.05-006/-07*0081NSNibOutletConnector3/091NSMutableString& % textField0:3*0;&%message0<3.0=&%panel0>&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInspectorPanel.gorm/000077500000000000000000000000001475375552500255215ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInspectorPanel.gorm/data.classes000066400000000000000000000007361475375552500300170ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "setCurrentInspector:" ); Super = NSObject; }; GormInspectorsManager = { Actions = ( "setCurrentInspector:" ); Outlets = ( panel, popup, selectionView, inspectorView ); Super = IBInspectorManager; }; IBInspectorManager = { Actions = ( ); Outlets = ( currentMode, selectedObject ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInspectorPanel.gorm/data.info000066400000000000000000000003221475375552500273040ustar00rootroot00000000000000GNUstep archive00002b5c:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&% Latest Version0& %  Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormInspectorPanel.gorm/objects.gorm000066400000000000000000000107471475375552500300510ustar00rootroot00000000000000GNUstep archive00002b5c:00000021:00000083:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&% GormInspectorsManager0& %  GormNSPanel01GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1 NSWindow1 NSResponder% ? A C CՀ& % Dp D\01 NSView% ? A C CՀ  C CՀ&0 1 NSMutableArray1 NSArray&0 1NSBox%  C C  C C&0 &0 %  C C  C C&0 &01NSCell0&01NSFont%&&&&&&&& %%0% Cŀ C @  C @& 0 &0 % @ @ C   C &0 &00&&&&&&&&& %%0% Cƀ C A  C A& 0 &0 %  C A  C A&0 &01 NSPopUpButton1NSButton1 NSControl% B @@ C A  C A&0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell0&&&&&&&&&01NSMenu0 &0! &0"1 NSMenuItem0#& %  Attributes0$&% 1&&%0%1NSImage0&& % common_Nibble%0'0(& %  Connections0)&% 2&&%%0*0+&% Size0,&% 3&&%%0-0.&% Help0/&% 4&&%%0001& %  Custom Class02&% 5&&%%%03&04&&&&""%%%%%0506&&&&&&&&& %%071NSColor08&%NSNamedColorSpace09&% System0:&% windowBackgroundColor0;&% Window0<&% Panel< C C F@ F@%&   D D0=& %  MenuItem10>0?& %  Connections0@&% 2&&%%0A& %  MenuItem20B0C&% Size0D&% 3&&%%0E& %  MenuItem30F0G&% Help0H&% 4&&%%0I& %  MenuItem40J0K& %  Custom Class0L&% 5&&%%0M& %  MenuItem5"0N& %  MenuItem6'0O& %  MenuItem7*0P& %  MenuItem8-0Q&% MenuItem0R0S& %  Attributes0T&% 1&&%%%0U& %  MenuItem900V&% GSCustomClassMap0W&0X&% Box 0Y&% View1 0Z&% View20[&% View30\&% GormNSPopUpButton0]&% Box10^&% View0_&% Box20` &0a1NSNibConnector0b&%NSOwner0c^0dX^0eYX0f]^0gZ]0hQ0i=0jA0kE0lI0m_^0n[_0o\[0pM0qN0rO0sP0tU0u1NSNibOutletConnectorbX0v& %  inspectorView0wb_0x& %  selectionView0yb\0z&% popup0{b0|&% panel0}1NSNibControlConnectorMb0~&% setCurrentInspector:0Nb~0Ob~0Pb~0Ub~01 GSMutableSet1 NSMutableSet1!NSSet&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormNSSplitViewInspector.gorm/000077500000000000000000000000001475375552500266515ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormNSSplitViewInspector.gorm/data.classes000066400000000000000000000004411475375552500311400ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; GormNSSplitViewInspector = { Actions = ( ); Outlets = ( orientation, divider ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormNSSplitViewInspector.gorm/data.info000066400000000000000000000002701475375552500304360ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormNSSplitViewInspector.gorm/objects.gorm000066400000000000000000000126711475375552500311770ustar00rootroot00000000000000GNUstep archive000f4240:00000022:0000006f:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @p @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @R @`@ @_@ @T  @_@ @TJ%0 &0 % @ @ @[ @L  @[ @LJ0 &0 1NSMatrix1 NSControl% @2 @ @T @H  @T @HJ0 &I0 1 NSActionCell1NSCell0&01NSFont% A@JJJJJJJJJJJJJJJI% @T @8 01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor0& % NSButtonCell01 NSButtonCell0&%Radio01NSImage01NSMutableString&%GSRadio0%JJJJJJJJJJJJJJJI00&%GSRadioSelectedJJJ JJ%%0 &00& % Horizontal0% A@JJJJJJJJJJJJJJJIJJJ JJ0 0!&%VerticalJJJJJJJJJJJJJJJIJJJ JJ2 ok:v24@0:8@16 0"1NSTextFieldCell0#& % OrientationJJJJJJJJ JJJJJJJI0$0%&% windowBackgroundColor0&0'&%System0(& % textColor @ @%%0) % @R @k@ @_@ @I  @_@ @IJ 0* % @ @ @[ @8  @[ @8J)0+ &0,1 NSPopUpButton1NSButton% ? @[ @6  @[ @6J0- &I0.1NSPopUpButtonCell1NSMenuItemCellJJJJJJJJ0/1NSMenu00 &011 NSMenuItem02&%ThickJJI0304& %  common_NibbleI0506&%ThinJJII0708&%SplitterJJIIJJJJJJJIJJJ > =JJ1/1IIIII09 &*0:0;&%Divider;JJJJJJJJJJJJJJJ @ @%%$0<&%Window0=&%SplitView InspectorPanel= @3 @Ç @{I0>0?&% NSApplicationIcon&   @@ @`0@ &0A &0B1NSMutableDictionary1 NSDictionary& 0C&%PopUpButtonCell(0).0D&%Box0E&%View(0)*0F&%PopUpButton(0),0G& % MenuItem(2)70H& % MenuItem(0)10I& % MenuItem(1)50J&% NSOwner0K&%GormNSSplitViewInspector0L&%Matrix 0M&%Box(0))0N&%SplitViewInspector0O &0P1 NSNibConnectorN0Q&% NSOwner0R D0S L0T1!NSNibOutletConnectorQL0U& % orientation0V!QN0W&%window0X1"NSNibControlConnectorLQ0Y&%ok:0Z!NL0[&%initialFirstResponder0\ M0] EM0^ FE0_ H0`"HC0a&%_popUpItemAction:0b I0c"IC0d&%_popUpItemAction:0e G0f"GC0g&%_popUpItemAction:0h CF0i"FQ0j&%ok:0k!QF0l&%divider0m&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectInspector.gorm/000077500000000000000000000000001475375552500256705ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectInspector.gorm/data.classes000066400000000000000000000004441475375552500301620ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "update:" ); Super = NSObject; }; GormObjectInspector = { Actions = ( "update:" ); Outlets = ( browser, label, value ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectInspector.gorm/data.info000066400000000000000000000002701475375552500274550ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectInspector.gorm/objects.gorm000066400000000000000000000127171475375552500302170ustar00rootroot00000000000000GNUstep archive000f4240:00000023:00000062:00000004:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBrowser1 NSControl% @$ @W @p` @q  @p` @qJ0 &0 1 NSScrollView%  @p` @pp  @p` @ppJ0 &0 1 NSClipView% @5 @ @m @p0  @m @p0J0 1NSMatrix%  @m @Y  @m @YJ 0 &I01 NSActionCell1NSCell0&01NSFont%JJJJJJJJJJJJJJJI% @m @Y 01NSColor0&% NSNamedColorSpace0&% System0& %  controlColor0& % NSBrowserCell01 NSBrowserCellJJJJJJJJJJJJJJJ%%0 &2doClick:2doDoubleClick:0 & 00&% controlBackgroundColor01 NSScroller% @ @ @2 @p0  @2 @p0J0 &I0JJJJJJJJJJJJJJJJ 2 _doScroll:v24@0:8@16 I A A A A I0JJJJJJJJJJJJJJJ0&% NSMatrix0 &%/% @Y0!% @ ? @o @2  @o @2J0" &I0#JJJJJJJJJJJJJJJJ2 scrollViaScroller:v24@0:8@16   @p` @pp0$ &0%1NSBrowserColumn % %%0&1 NSTextField% @$ @F @o @5  @o @5J"0' &I0(1NSTextFieldCellJJJJJJJJ JJJJJJJI0)0*&%System0+&%textBackgroundColor0,*0-& % textColor0.1NSButton% @$ @Q @o @3  @o @3J"0/ &I001 NSButtonCell01&%No TypeJJJJJJJJJJJJJJJIJJJ JJ02% @i @$ @L @8  @L @8J'03 &I0405&%OKJJJJJJJJJJJJJJJIJJJ JJ0607&% windowBackgroundColor08&%Window09&%Inspector Window9 ? @R@ @Ç @{I&   @ @0: &0; &0<1NSMutableDictionary1 NSDictionary&0=& % Button(0)20>& % TextField&0?&%Button.0@&% NSOwner0A&%GormObjectInspector0B& % InspectorWin0C& % GormNSBrowser0D& % ButtonCell(0)40E &0F1 NSNibConnectorB@0G C0H >0I ?0J1!NSNibOutletConnector@?0K&%label0L!@>0M&%value0N!@C0O&%browser0P1"NSNibControlConnector>@0Q1#NSMutableString&%ok:0R!C@0S#&%delegate0T!@B0U#&%window0V"C@0W&%update:0X!B>0Y&%initialFirstResponder0Z =0[ D=0\"=@0]&%ok:0^!@=0_&%okButton0`&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectOutlineView.gorm/000077500000000000000000000000001475375552500261745ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectOutlineView.gorm/data.classes000066400000000000000000000006541475375552500304710ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "iconView:", "editorButton:", "outlineView:" ); Super = NSObject; }; GormObjectViewController = { Actions = ( "iconView:", "outlineView:", "editorButton:" ); Outlets = ( displayView, iconButton, outlineButton, editorButton ); Super = NSViewController; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectOutlineView.gorm/data.info000066400000000000000000000002701475375552500277610ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectOutlineView.gorm/editor.tiff000066400000000000000000000067321475375552500303440ustar00rootroot00000000000000MM* P8$ BaPd6DbQ8V-FcQv(c8"I$*K%9;*L&9I=P )rDNzPATz&ORSibKZ*RC"Vi\j& =?`խh s^{d#m$/drY (=RSs H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectOutlineView.gorm/iconView.tiff000066400000000000000000000070241475375552500306340ustar00rootroot00000000000000MM* P8$ BaPd6DbQ8k)D0 7FcV%$ILfQ'L R9\=D39oTN$44"kWlV'rp.Vˮ,xFc^qX='زWL9dڱvmh[MPr8 cUom.} o\>'  (=RSćs H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectOutlineView.gorm/objects.gorm000066400000000000000000000161611475375552500305200ustar00rootroot00000000000000GNUstep archive000f4240:0000001d:0000005c:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @up @h`JI @ @01 NSView% ? @" @up @h`  @up @h`J01 NSMutableArray1 NSArray&01 NSButton1 NSControl% @ @d @8 @8  @8 @8J 0 &I0 1 NSButtonCell1 NSActionCell1NSCell0 &0 1NSImage @8 @80 1NSColor0 &% NSCalibratedWhiteColorSpace 0 &01NSBitmapImageRep1 NSImageRep0&% NSDeviceRGBColorSpace @8 @8III01NSData&llII* P8$ BaPd6DbQ8kF^=1E&DcQId+%9)M`(yb *.x2 ) "VTjľW,T΍:Ҭ; :ƷdPMUw;g0يd/~;#ױ9f^4Rs-eWj6[=m dR01NSFont%JJJJJJJJJJJJJJJI JJJ JJ0 % @A @d @8 @8  @8 @8J 0 &I0 0 @8 @8 0 &0 @8 @8III0&  II*   RJJJJJJJJJJJJJJJI JJJ JJ01NSBox%  @up @d  @up @dJ0 % @ @ @t @c  @t @cJ0 &0 &00&%BoxJJJJJJJJJJJJJJJ @ @%%0 % @s @d @8 @8  @8 @8J 0! &I0" 0# @8 @80$ 0% &0& @8 @8III0'&$$II* P8$ BaPd6DbQ8V-FcQv(#8̊&JariDU/Kf21NSNibConnector960?490@340A;30B540C<50D840E280F1NSNibOutletConnector640G&%view0H630I& % iconButton0J650K& % outlineButton0L680M& % displayView0N1NSNibControlConnector360O& % iconView:0P560Q& % outlineView:0R140S:10T160U& % editorButton:0V&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormObjectOutlineView.gorm/outlineView.tiff000066400000000000000000000051321475375552500313610ustar00rootroot00000000000000II*   F 4 @ J R (R/home/heron/Development/gnustep/dev-apps/gorm/Images/outlineView.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPalettePanel.gorm/000077500000000000000000000000001475375552500251515ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPalettePanel.gorm/data.classes000066400000000000000000000007061475375552500274440ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormPaletteMatrix = { Actions = ( ); Outlets = ( ); Super = NSMatrix; }; GormPalettePanel = { Actions = ( ); Outlets = ( ); Super = NSPanel; }; GormPaletteView = { Actions = ( ); Outlets = ( ); Super = NSView; }; GormPalettesManager = { Actions = ( ); Outlets = ( panel, dragView, selectionView ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPalettePanel.gorm/data.info000066400000000000000000000002701475375552500267360ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPalettePanel.gorm/objects.gorm000066400000000000000000000055741475375552500275030ustar00rootroot00000000000000GNUstep archive000f4240:0000001c:00000041:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @p @pJ I @ @01 NSView% ? @" @p @p  @p @pJ01 NSMutableArray1 NSArray&01 NSScrollView% @h  @q @R  @q @RJ 0 &0 1 NSClipView% ? ? @p @J  @p @JJ0 1 GSCustomView1 GSNibItem0 &%GormPaletteMatrix  @J @J&0 & 0 1NSColor0&% NSCalibratedWhiteColorSpace >~ ?01 NSScroller1 NSControl% ? @K @p @2  @p @2J0 &%01NSCell0&01NSFont%&&&&&&JJ&&&&&&&J I A A A A 00&%GormPaletteView  @q @h@&%00&% NSNamedColorSpace0&% System0&% windowBackgroundColor0&%Window0&%Palettes @p @n @Ç @xI01NSImage0&% NSApplicationIcon&  @ @p0 &0 &0 1NSMutableDictionary1 NSDictionary& 0!&%View(0)0"& % ClipView(0) 0#&%Panel(0)0$& % ScrollView(0)0%& % CustomView(0)0&& % CustomView(1) 0'& % Scroller(0)0(& % Scroller(1)0)% @ @ @2 @P  @2 @PJ0* &%0+&&&&&&JJ&&&&&&&J0,&% NSOwner0-&%GormPalettesManager0. &  0/1NSNibConnector#,00!#01%!021NSNibOutletConnector,#03&%panel04,%05&%dragView06&!07$!08"$09'$0:1NSNibControlConnector'$0;& % _doScroll:0<($0=($0>& % _doScroll:0?,&0@& % selectionView0A&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefColors.gorm/000077500000000000000000000000001475375552500246515ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefColors.gorm/data.classes000066400000000000000000000003061475375552500271400ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormColorsPref = { Actions = ( "ok:" ); Outlets = ( color, window, _view ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefColors.gorm/data.info000066400000000000000000000002701475375552500264360ustar00rootroot00000000000000GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefColors.gorm/objects.gorm000066400000000000000000000037731475375552500272020ustar00rootroot00000000000000GNUstep archive00002af9:0000001b:00000030:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&%GormColorsPref0&%GSCustomClassMap0&0&%Box01NSBox1NSView1 NSResponder% B C C B  C B&0 1 NSMutableArray1 NSArray&0 % @ @ B BD  B BD&0 &0 1 NSColorWell1 NSControl% B A BT A  BT A&0 &%01 NSCell0&01NSFont%&&&&&&&&01NSColor0&%NSCalibratedRGBColorSpace ? ? ? ?0 0& % Guides Color&&&&&&&& @ @%%0& % GormNSPanel01GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1NSWindow% ? A C Cz& % Cn DD0% ? A C Cz  C Cz&0 &00&%NSNamedColorSpace0&%System0&%windowBackgroundColor0&%Window0&%PrefsColor Panel ? A F@ F@%0 1NSImage0!&%NSApplicationIcon&   D D0"& % ColorWell 0# &0$1NSNibConnector0%&%NSOwner0&0'"0(1NSNibControlConnector"%0)&% ok:0*1NSNibOutletConnector%"0+&%color0,%0-&%window0."0/1NSMutableString&% initialFirstResponder001 GSMutableSet1 NSMutableSet1NSSet&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGeneral.gorm/000077500000000000000000000000001475375552500247655ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGeneral.gorm/data.classes000066400000000000000000000011311475375552500272510ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "archiveAction:", "classesAction:", "consistencyAction:", "orderFrontFontPanel:" ); Super = NSObject; }; GormGeneralPref = { Actions = ( "palettesAction:", "inspectorAction:", "backupAction:", "archiveAction:", "classesAction:", "consistencyAction:" ); Outlets = ( window, palettesButton, inspectorButton, backupButton, archiveMatrix, interfaceMatrix, checkConsistency ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGeneral.gorm/data.info000066400000000000000000000002701475375552500265520ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGeneral.gorm/objects.gorm000066400000000000000000000105661475375552500273140ustar00rootroot00000000000000GNUstep archive000f4240:0000001e:00000064:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @u @o@J I @l @01 NSView% ? @" @u @o@  @u @o@J01 NSMutableArray1 NSArray&01NSBox% @P @b @k @T  @k @TJ0 &0 % @ @ @i` @L  @i` @LJ0 &0 1NSButton1 NSControl% @C @6 @a @1  @a @1J0 &%0 1 NSButtonCell1 NSActionCell1NSCell0&%Create backup file01NSImage01NSMutableString&%GSSwitch01NSFont% A@&&&&&&JJ&&&&&&I0&0&00&%GSSwitchSelected&&& &&01NSTextFieldCell0& % Save Option&&&&&&JJ&&&&&&I01NSColor0&% NSNamedColorSpace0&% System0&% windowBackgroundColor00&%System0& % textColor @ @%%0% @P @I @k @V@  @k @V@J0 &0! % @ @ @i` @P  @i` @PJ0" &0#1NSMatrix% @I @* @Y @D  @Y @DJ0$ &%0%0&&0'%&&&&&&JJ&&&&&&I% @Y @4 0(0)&% controlBackgroundColor(0*& % NSButtonCell0+0,&%Radio0-0.&%GSRadio'&&&&&&JJ&&&&&&I0/&00&0102&%GSRadioSelected&&& &&%%03 &0405& % Outline View-'&&&&&&JJ&&&&&&I06&07&1&&& &&0809& % Browser View-'&&&&&&JJ&&&&&&I0:&0;&1&&& &&40<0=&%Default Classes Interface'=&&&&&&JJ&&&&&& @ @%%0>&%Window0?&%General? " @Ç @xI0@0A&% NSApplicationIcon&   @ @0B &0C &0D1NSMutableDictionary1 NSDictionary&0E&%Button2 0F&%Box20G&% NSOwner0H&%GormGeneralPref0I& % GormNSPanel0J&%Matrix#0K&%Box10L &  0M1NSNibConnectorI0N&% NSOwner0OK0PE0Q1NSNibOutletConnectorNI0R&%window0S1NSNibControlConnectorEN0T& % backupAction:0UNE0V& % backupButton0WF0XJ0YJN0Z&%classesAction:0[NJ0\&%interfaceMatrix0]EJ0^& % nextKeyView0_JE^0`IE0a&%initialFirstResponder0b&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGuideline.gorm/000077500000000000000000000000001475375552500253155ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGuideline.gorm/data.classes000066400000000000000000000005511475375552500276060ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "reset:" ); Super = NSObject; }; GormGuidelinePref = { Actions = ( "ok:", "reset:" ); Outlets = ( spacingSlider, window, "_view", currentSpacing, halfSpacing, colorWell ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGuideline.gorm/data.info000066400000000000000000000002701475375552500271020ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefGuideline.gorm/objects.gorm000066400000000000000000000122251475375552500276360ustar00rootroot00000000000000GNUstep archive000f4240:00000023:00000070:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @u @o@J I @v @01 NSView% ? @" @u @o@  @u @o@J01 NSMutableArray1 NSArray&01NSBox% @Q@ @? @i @g`  @i @g`J0 &0 % @ @ @g@ @d@  @g@ @d@J0 &0 1 NSTextField1 NSControl% @( @U @\ @5  @\ @5J0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0&%Container Edge:01NSFont% A@&&&&&&JJ &&&&&&I01NSColor0&% NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor01NSSlider% @I @H @U @0  @U @0J0 &%01 NSSliderCell0&%100%01NSNumber1NSValued @$&&&&&&JJ&&&&&&I ? A %00&&&&&&&JJ &&&&&&I00&% System0 &% controlTextColor0!0"&0#1NSImage0$&%common_SliderHoriz&&&&&&JJ&&&&&&I%0%% @_ @U @? @5  @? @5J0& &%0'0(&%Text&&&&&&JJ &&&&&&I0)0*&% windowBackgroundColor0+1NSButton% @P @$ @L @8  @L @8J0, &%0-1 NSButtonCell0.&%Reset&&&&&&JJ&&&&&&I0/&00&&&& &&01% @( @Q@ @\ @2  @\ @2J02 &%0304&%Between Views:&&&&&&JJ &&&&&&I05% @_ @Q@ @? @5  @? @5J06 &%0708&%Text&&&&&&JJ &&&&&&I)091 NSColorWell% @P @] @J @>  @J @>J0: &%0;0<&&&&&&&JJ&&&&&&0=0>&% NSCalibratedWhiteColorSpace ?0?0@& % Guide Spacing&&&&&&JJ&&&&&& @ @%%)0A&%Window0B&%PanelB  @Ç @xI0C0D&% NSApplicationIcon&   @ @0E &0F &0G1NSMutableDictionary1 NSDictionary& 0H&%Box0I&%Slider0J& % TextField350K& % ColorWell(0)90L& % TextField 0M& % TextField210N&%Button+0O&% NSOwner0P&%GormGuidelinePref0Q& % GormNSPanel0R& % TextField1%0S&%Cell(0);0T &0U1 NSNibConnectorQ0V&% NSOwner0W H0X L0Y1!NSNibOutletConnectorVQ0Z&%window0[ I0\ R0]1"NSNibControlConnectorIV0^1#NSMutableString&%ok:0_!VI0`#& % spacingSlider0a!VR0b#&%currentSpacing0c N0d"NV0e&%reset:0f M0g JV0h!VJ0i& % halfSpacing0j K0k SK0l!VK0m& % colorWell0n"KV0o&%ok:0p&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefHeaders.gorm/000077500000000000000000000000001475375552500247635ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefHeaders.gorm/data.classes000066400000000000000000000007311475375552500272540ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:" ); Super = NSObject; }; GormHeadersPref = { Actions = ( "addAction:", "removeAction:", "preloadAction:" ); Outlets = ( preloadButton, addButton, removeButton, window, table ); Super = NSObject; }; HeaderDataSource = { Actions = ( ); Outlets = ( ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefHeaders.gorm/data.info000066400000000000000000000002701475375552500265500ustar00rootroot00000000000000GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefHeaders.gorm/objects.gorm000066400000000000000000000124671475375552500273140ustar00rootroot00000000000000GNUstep archive00002af9:00000026:00000094:00000001:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&% Button201NSButton1 NSControl1NSView1 NSResponder% C6 A@ B` A  B` A&01 NSMutableArray1 NSArray&%01 NSButtonCell1 NSActionCell1NSCell0&%Remove01NSFont% A@&&&&&&&&%0 &0 &&&&0 &%NSOwner0 &%GormHeadersPref0 & % ScrollView01 NSScrollView% A B0 C C  C C&0 &01 NSClipView% A A C B  C B&0 &01 NSTableView%  C C!  C C!&0 &%00&0%&&&&&&&&0 &01 NSTableColumn0&%column2 C A GP01NSTableHeaderCell1NSTextFieldCell0&%Headers0% &&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0 &%controlShadowColor0!0"&%System0#&%windowFrameTextColor0$0%&%six%&&&&&&&&0%0&"0'&%textBackgroundColor0("0)& % textColor0*"0+& % gridColor0,0-&%System0.&%controlBackgroundColor0/1NSTableHeaderView%  C A  C A&00 &011GSTableCornerView% @ @ A A  A A&02 &%% A @ @@03"04&%controlBackgroundColor051 NSScroller% @ A A B  A B&06 &%07&&&&&&&&&2 _doScroll:v12@0:4@808% A @ C A  C A&09 &/0:"0;& % controlColor0<% A C C A  C A&0= &%0>0?&&&&&&&&&&1% A A A A <580@&%GSCustomClassMap0A&0B&%Button0C% A CP C A  C A&0D &%0E 0F&%Preload Headers0G1NSImage0H1NSMutableString&% common_SwitchOff&&&&&&&&%0I&0J&0K0L&% common_SwitchOn&&&0M&%HeaderDataSource0N1 GSNibItemM  &0O& % TableColumn0P0Q&%column1 BP A GP0R0S&% &&&&&&&&0%0T0U&%System0V& % controlColor!0W0X&%septX&&&&&&&&0%&(0Y& % GormNSPanel0Z1GSWindowTemplate1GSClassSwapper0[&%NSPanel1NSPanel1 NSWindow% ? A C Ct& % C D@0\% ? A C Ct  C Ct&0] &C0^% B A@ B` A  B` A&0_ &%0` 0a&%Add&&&&&&&&%0b&0c&&&&0d0e&%System0f&%windowBackgroundColor0g&%Window0h&%Headersh ? A F@ F@%0i0j&%NSApplicationIcon&   D D0k&%GormNSTableView0l& %  TableColumn10m&% Button1^0n &0o1!NSNibConnectorY0p&%NSOwner0q!B0r!m0s!0t1"NSNibOutletConnectorpm0u& % addButton0v"p0w& % removeButton0x"pB0y& % preloadButton0z1#NSNibControlConnectorBp0{&% preloadAction:0|#mp0}& %  addAction:0~#p0& %  removeAction:0"pY0&%window0! 0!k0!O0!l0!Mp0"kM0& % dataSource0"kp0&%delegate0"pk0&%table0"Bk0& %  nextKeyView0"km0"m0"B0"YB0&% initialFirstResponder01$ GSMutableSet1% NSMutableSet1&NSSet&NZapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPalettes.gorm/000077500000000000000000000000001475375552500251715ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPalettes.gorm/data.classes000066400000000000000000000007451475375552500274670ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "removeAction:", "addAction:" ); Super = NSObject; }; GormPalettesPref = { Actions = ( "removeAction:", "addAction:" ); Outlets = ( _view, window, removeButton, addButton, table ); Super = NSObject; }; PaletteDataSource = { Actions = ( ); Outlets = ( ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPalettes.gorm/data.info000066400000000000000000000002701475375552500267560ustar00rootroot00000000000000GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPalettes.gorm/objects.gorm000066400000000000000000000115431475375552500275140ustar00rootroot00000000000000GNUstep archive00002af9:00000026:00000080:00000001:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&%NSOwner0&% GormPalettesPref0&%GSCustomClassMap0&0&% PaletteDataSource01 GSNibItem  &0 &% Button10 1NSButton1 NSControl1 NSView1 NSResponder% B A B` A  B` A&0 1 NSMutableArray1 NSArray&%0 1 NSButtonCell1 NSActionCell1NSCell0 &%Add01NSFont% A@&&&&&&&&%0&0&&&&0& %  TableColumn101 NSTableColumn0&%column2 C A GP01NSTableHeaderCell1NSTextFieldCell0&%Palettes0% &&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%controlShadowColor00&%System0&%windowFrameTextColor00&%seven0 %&&&&&&&&0%0!0"&%textBackgroundColor0#0$& % textColor0%& % GormNSPanel0&1GSWindowTemplate1GSClassSwapper0'&%NSPanel1NSPanel1NSWindow% ? A C Cz& % C DK@0( % ? A C Cz  C Cz&0) & 0*% C4 A B` A  B` A&0+ &%0, 0-&%Remove&&&&&&&&%0.&0/&&&&001 NSScrollView% A B  C C)  C C)&01 &021 NSClipView% A A C B  C B&03 &041 NSTableView%  C C!  C C!&05 &%0607& &&&&&&&&08 &090:& % gridColor0;0<&% System0=&%controlBackgroundColor0>1NSTableHeaderView%  C A  C A&0? &0@1GSTableCornerView% @ @ A A  A A&0A &%% A @ @@;0B1 NSScroller% @ A A C  A C&0C &%0D7 &&&&&&&&&02 _doScroll:v12@0:4@80E% A @ C A  C A&0F &>0G0H& % controlColor0I% A C C A  C A&0J &%0K0L& &&&&&&&&&0@2% A A A A IBE0M0N&%System0O&%windowBackgroundColor0P&%Window0Q&%HeadersQ ? A F@ F@%0R1NSImage0S&%NSApplicationIcon&   D D0T& % ScrollView00U&% Button2*0V& % TableColumn0W0X&%column1 BP A GP0Y0Z&% &&&&&&&&0%0[0\&%System0]& % controlColor0^0_&%sept _&&&&&&&&0%!#0`&%GormNSTableView40a &0b1 NSNibConnector 0c U0d T0e `0f V0g 0h 0i&%NSOwner0j1!NSNibOutletConnector`0k1"NSMutableString& %  dataSource0l!`i0m"&% delegate0n!i`0o"&% table0p!i 0q"& %  addButton0r!iU0s"& %  removeButton0t!i%0u"&% window0v1#NSNibControlConnector i0w"& %  addAction:0x#Ui0y"& %  removeAction:0z!` 0{"& %  nextKeyView0|! U{0}!U`{0~!% 0"&% initialFirstResponder01$ GSMutableSet1% NSMutableSet1&NSSet&&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPlugins.gorm/000077500000000000000000000000001475375552500250315ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPlugins.gorm/data.classes000066400000000000000000000007431475375552500273250ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "removeAction:", "addAction:" ); Super = NSObject; }; GormPluginsPref = { Actions = ( "removeAction:", "addAction:" ); Outlets = ( _view, window, removeButton, addButton, table ); Super = NSObject; }; PluginDataSource = { Actions = ( ); Outlets = ( ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPlugins.gorm/data.info000066400000000000000000000002701475375552500266160ustar00rootroot00000000000000GNUstep archive00002db4:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPrefPlugins.gorm/objects.gorm000066400000000000000000000117661475375552500273630ustar00rootroot00000000000000GNUstep archive00002db4:00000026:00000080:00000001:01GSNibContainer1NSObject01 GSMutableSet1 NSMutableSet1NSSet&01 GSNibItem01NSString&%PluginDataSource  &01GSWindowTemplate1 GSClassSwapper0&%NSPanel1 NSPanel1 NSWindow1 NSResponder% ? A C Cz& % D @ DD01 NSView% ? A C Cz  C Cz&01NSMutableArray1NSArray&0 1NSButton1 NSControl% B A B` A  B` A&0 &%0 1 NSButtonCell1 NSActionCell1NSCell0 &%Add0 1NSFont% A@&&&&&&&&&&&&&&%0&0&&&& &&0% C4 A B` A  B` A&0&%00&%Remove &&&&&&&&&&&&&&%0&0&&&& &&01 NSScrollView% A B  C C)  C C)&0&01 NSClipView% A A C B  C B&0&01 NSTableView%  C C!  C C!&0&%00&0%&&&&&&&&&&&&&&0&0 1 NSTableColumn0!&%column2 C A GP0"1NSTableHeaderCell1NSTextFieldCell0#&%Plugins0$% #&&&&&&&& &&&&&&%0%1NSColor0&&%NSNamedColorSpace0'&%System0(&%controlShadowColor0)&'0*&%windowFrameTextColor0+0,&%seven,&&&&&&&& &&&&&&%0-&0.&%System0/&%textBackgroundColor00&.01& % textColor02&.03& % gridColor04&05&%System06&%controlBackgroundColor071NSTableHeaderView%  C A  C A&08&091GSTableCornerView% @ @ A A  A A&0:&%% A @ @@40;1 NSScroller% @ A A C  A C&0<&%0=&&&&&&&&&&&&&&&2 _doScroll:v24@0:8@160>% A @ C A  C A&0?&70@&.0A& % controlColor0B% A C C A  C A&0C&%0D0E&&&&&&&&&&&&&&&&9% A A A A B;>0F&0G&%System0H&%windowBackgroundColor0I&%Window0J&%PluginsJ ? A F@ F@%0K1 NSImage0L&%NSApplicationIcon&   D D0M&0N&0O1!NSMutableDictionary1" NSDictionary& 0P&%PluginDataSource(0)0Q&%NSOwner0R&%GormPluginsPref0S&%Button1 0T& % GormNSPanel0U&%Button20V& % ScrollView0W& % TableColumn1 0X& % TableColumn0Y0Z&%column1 BP A GP0[0\&% $&&&&&&&& &&&&&&%0]&0^&%System0_& % controlColor0`&.0a&%windowFrameTextColor0b0c&%septc&&&&&&&& &&&&&&%-00d&%GormNSTableView0e&0f1#NSNibConnectorS0g#U0h#V0i#d0j#X0k#W0l1$NSNibOutletConnectordS0m1%NSMutableString& % nextKeyView0n$SUm0o$Udm0p$TS0q%&%initialFirstResponder0r$dP0s%& % dataSource0t1&NSNibControlConnectorSQ0u%& % addAction:0v&UQ0w%& % removeAction:0x$QT0y%&%window0z$QS0{%& % addButton0|$QU0}%& % removeButton0~$Qd0%&%table0!&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPreferences.gorm/000077500000000000000000000000001475375552500250345ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPreferences.gorm/data.classes000066400000000000000000000003241475375552500273230ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormPrefController = { Actions = ( "popupAction:" ); Outlets = ( popup, prefBox, panel ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPreferences.gorm/data.info000066400000000000000000000002701475375552500266210ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormPreferences.gorm/objects.gorm000066400000000000000000000344061475375552500273620ustar00rootroot00000000000000GNUstep archive000f4240:0000002c:0000011e:00000006:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @u @rJI @p @01 NSView% ? @" @u @r  @u @rJ01 NSMutableArray1 NSArray&01NSBox% @n @u @H  @u @HJ0 &0 % @ @ @u@ @C  @u@ @CJ0 &0 1 NSPopUpButton1NSButton1 NSControl% @\ @, @] @4  @] @4J0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont% A@&&&&&&JJ01NSMenu0&0 &01 NSMenuItem0&%General0&JJI01NSImage @& @ 01NSColor0&% NSCalibratedWhiteColorSpace 0 &01NSBitmapImageRep1 NSImageRep0&% NSDeviceRGBColorSpace @& @ II I01NSData&II*t8 O Иd "Q8&)Fb@8*@bѩ$%R\K/Idk S|M&E!FR(yTi9JT*:v  lRI00&%HeadersJJII00 &%Shelf0!&JJII0"0#&%Palettes0$&JJII0%0&& % Guidelines0'&JJII0(0)&%Plugins0*&JJII&&&&&&I0+&0,&&&& &&%%%%%0-% $  @u @  @u @J0. &0/ % @ @ @u   @u J00 &0102&%Box03%&&&&&&JJ&&&&&& @ @%%041NSTextFieldCell05&%Box&&&&&&JJ &&&&&&I0607&% NSNamedColorSpace08&% System09&% windowBackgroundColor0:70;&%System0<& % textColor @ @%%0=% ? @u @m  @u @mJ0> &0? % @ @ @u@ @l`  @u@ @l`J0@ &0A0B&%Box&&&&&&JJ &&&&&&I6: @ @%%60C&%Window0D& % PreferencesD @ @Ç @|I0E0F&% NSApplicationIcon&   @ @0G &0H &0I1 NSMutableDictionary1! NSDictionary&0J&%Box20K% @G @R @o @S  @o @SJ0L &0M % @ @ @m @I  @m @IJ0N &0O% @$ @8 @k` @0  @k` @0J0P &%0Q0R&%Create Backup file when saving0S0T1"NSMutableString&%GSSwitch&&&&&&JJ&&&&&&I0U&0V&0W0X"&%GSSwitchSelected&&& &&0Y0Z& % Save Options&&&&&&JJ &&&&&&I6: @ @%%0[&%Button80\% @W @ @L @8  @L @8J0] &%0^0_&%Add&&&&&&JJ&&&&&&I0`&0a&&&& &&0b&%Button10c% @9 @B @L @0  @L @0J0d &%0e0f&%SwitchS&&&&&&JJ&&&&&&I0g&0h&W&&& &&0i& % MenuItem5"0j&%Box4=0k&%Button30l% @G @. @L @8  @L @8J0m &%0n0o&%Add&&&&&&JJ&&&&&&I2 addHeader:v24@0:8@160p&0q&&&& &&0r&%Button50s% @F @ @]@ @0  @]@ @0J0t &%0u0v&%Show InspectorS&&&&&&JJ&&&&&&I0w&0x&W&&& &&0y&% NSOwner0z&%GormPrefController0{& % MenuItem20|&%MenuItem0}&%Box10~% @Q @c @h` @S@  @h` @S@J0 &0 % @ @ @f @J  @f @JJ0 &0% @F @9 @]@ @0  @]@ @0J0 &%00& % Show PalettesS&&&&&&JJ&&&&&&I0&0&W&&& &&s00&%Startup Options&&&&&&JJ &&&&&&I6: @ @%%0&%Button70% @$ @i @a @0  @a @0J0 &%00&%Preload HeadersS&&&&&&JJ&&&&&&I0&0&W&&& &&0& % MenuItem400&%Item0&JJI00"&%GSMenuSelected00"& % GSMenuMixedI0& % MenuItem(0)(0&%Box30% @$ @$ @t @p   @t @p J0 &0 % @ @ @s @m   @s @m J0 &01# NSBrowser% @D @A @n @c  @n @cJ0 &01$ NSScroller% @ ? @m @2  @m @2J0 &%00&&&&&&&JJ&&&&&&J2 scrollViaScroller:v24@0:8@1601% NSScrollView% @7 @n @\@  @n @\@J0 &01& NSClipView% @5 @ @k @[@  @k @[@J01'NSMatrix%  @k @Y  @k @YJ0 &%00&&&&&&&JJ&&&&&&I% @k @Y 0780&% controlBackgroundColor0& % NSBrowserCell01( NSBrowserCell&&&&&&JJ&&&&&&%%0 &2 doClick:v24@0:8@162 doDoubleClick:v24@0:8@160 &0$% @ @ @2 @[@  @2 @[@J0 &%0&&&&&&JJ&&&&&&J2 _doScroll:v24@0:8@16I A A A A %0(&&&&&&JJ&&&&&&0&% NSMatrix0&%/% @Y @ ? @m @2 @n @\@0 &01)NSBrowserColumn%%%\0% @d` @ @L @8  @L @8J0 &%00&%Remove&&&&&&JJ&&&&&&I0&0&&&& &&00&%Preload Headers&&&&&&JJ &&&&&&I6: @ @%%0±&%Button90ñ&%GormNSBrowser10ı&%Button20ű& % MenuItem6%0Ʊ&%Box5-0DZ&%Button0ȱ% @$ @j @^ @1  @^ @1J0ɱ &%0ʱ0˱&%Preload HeadersS&&&&&&JJ&&&&&&I2 setGeneralPreferences:v12@0:4@80̱&0ͱ&W&&& &&0α&%Button40ϱ% @` @. @L @8  @L @8J0б &%0ѱ0ұ&%Remove&&&&&&JJ&&&&&&I0ӱ&0Ա&&&& &&0ձ& % MenuItem10ֱ& % GormNSBrowser0ױ#% @F @m @b  @m @bJ-0ر &0ٱ$% @ ? @l @2  @l @2J0ڱ &%0۱0ܱ&&&&&&&JJ&&&&&&Jײ0ݱ%% @7 @m @Z@  @m @Z@J0ޱ &0߱&% @5 @ @j @Y@  @j @Y@J0'%  @j @Y  @j @YJ0 &%00&&&&&&&JJ&&&&&&I% @j @Y 0& % NSBrowserCell0(ܐ&&&&&&JJ&&&&&&%%0 &ײ0 &బ0$% @ @ @2 @Y@  @2 @Y@J0 &%0ܐ&&&&&&JJ&&&&&&JݲI A A A A %0(ܐ&&&&&&JJ&&&&&&尶0&%/% @Y @ ? @l @2 @m @Z@0 &0)ݰ%%%0&%Box0&%Button6O0&%Panel0&%GormNSPopUpButton 0 &01*NSNibConnectorǐ0*֐0*k0*ΐ0*b0*}0*Đ0*r0*J0*0*0*P*ÐP*[P*P*P*jP*P*|P*ՐP*{P *ƐP *iP *ŐP 1+NSNibOutletConnectorP "&%initialFirstResponderP1,NSNibControlConnectorP&% NSOwnerP"& % popupAction:P+jP"&%prefBoxP+P"&%popupP+P&%panelP*P &apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormScrollViewAttributesInspector.gorm/000077500000000000000000000000001475375552500306225ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormScrollViewAttributesInspector.gorm/data.classes000066400000000000000000000013131475375552500331100ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "borderSelected:", "colorSelected:", "horizontalRuler:", "horizontalSelected:", "verticalRuler:", "orderFrontFontPanel:", "verticalSelected:" ); Super = NSObject; }; GormScrollViewAttributesInspector = { Actions = ( "borderSelected:", "horizontalSelected:", "verticalSelected:", "colorSelected:", "horizontalRuler:", "verticalRuler:" ); Outlets = ( borderMatrix, horizontalScroll, verticalScroll, color, lineAmount, pageContext, horizontalRuler, verticalRuler ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormScrollViewAttributesInspector.gorm/data.info000066400000000000000000000002701475375552500324070ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormScrollViewAttributesInspector.gorm/objects.gorm000066400000000000000000000507001475375552500331430ustar00rootroot00000000000000GNUstep archive000f4240:00000023:000000f9:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @(01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @ @ @p @x  @p @xJ-0 &0 %  @p @x  @p @xJ0 &0 % @ @n @^ @R  @^ @RJ0 &0 % @ @ @[@ @G  @[@ @GJ0 &01 NSColorWell1 NSControl% @= @$ @J @>  @J @>J0 &%01NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&01NSColor0&% NSCalibratedWhiteColorSpace ?* ?01NSTextFieldCell1 NSActionCell0&%Background Color0% A@&&&&&&JJ&&&&&&&I00&% NSNamedColorSpace0&% System0&% windowBackgroundColor00&%System0& % textColor @ @%%0 % @ @e @^ @Q  @^ @QJ 0! &0" % @ @ @[@ @F  @[@ @FJ0# &0$1NSButton% @& @8 @S @0  @S @0J0% &%0&1 NSButtonCell0'&%Vertical0(1NSImage0)1NSMutableString&%GSSwitch&&&&&&JJ&&&&&&&I0*0+&%GSSwitchSelected&&& &&0,% @& @ @S @0  @S @0J0- &%0.0/& % Horizontal(/&&&&&&JJ&&&&&&&I*&&& &&0001& % Scrollbars&&&&&&JJ&&&&&&&I @ @%%02 % @a @n @^ @R  @^ @RJ 03 &04 % @ @ @[@ @G  @[@ @GJ05 &061NSMatrix% @ @( @Y @:  @Y @:J07 &%08&&&&&&JJ&&&&&&&I% @9 @: 090:&% controlBackgroundColor90;& % NSButtonCell0<0=&%Button&&&&&&JJ&&&&&&&I&&& &&%%0> &0?0@&%Button0A0B& % noBorder_nib&&&&&&JJ&&&&&&&I&&& &&0C0D&%Button0E0F&%line_nib&&&&&&JJ&&&&&&&I&&& &&0G0H&%Button0I0J& % bezel_nib&&&&&&JJ&&&&&&&I&&& &&0K0L0M& % ridge_nib&&&&&&JJ&&&&&&&I&&& &&C0N0O&%Borders&&&&&&JJ&&&&&&&I @ @%%0P % @ @R@ @o @W  @o @WJ"0Q &0R % @ @ @m @Q  @m @QJ0S &0T1NSForm% @G @B @b @5  @b @5J0U &%0V1 NSFormCell&&&&&&JJ&&&&&&&I 0W0X&%Field:&&&&&&JJ&&&&&&&% @b @5 @990Y& % NSFormCell%%0Z &0[&&&&&&JJ&&&&&&&I B0\0]& % Line Amount:&&&&&&JJ&&&&&&&[0^% @E @$ @c` @5  @c` @5J0_ &%0`&&&&&&JJ&&&&&&&I 0a0b&%Field:&&&&&&JJ&&&&&&&% @c` @5 @990c& % NSFormCell%%0d &0e&&&&&&JJ&&&&&&&I B0f0g& % Page Context:&&&&&&JJ&&&&&&&e0h0i& % Parameters&&&&&&JJ&&&&&&&I @ @%%0j % @a @e @^ @Q  @^ @QJ0k &0l % @ @ @[@ @F  @[@ @FJ0m &0n% @( @7 @S@ @0  @S@ @0J0o &%0p0q&%Vertical(0r%q&&&&&&JJ&&&&&&&I*&&& &&0s% @( @ @S@ @0  @S@ @0J0t &%0u0v& % Horizontal(rv&&&&&&JJ&&&&&&&I*&&& &&0w0x&%Rulersrx&&&&&&JJ&&&&&&& @ @%%0y0z&%Title0{% A &&&&&&JJ&&&&&&& %%0|&%Window0}&%Inspector Window} @ @Ç @|I0~ 0 0 &01NSBitmapImageRep1 NSImageRep0&% NSDeviceRGBColorSpace @H @HII0I001NSData&$$II*$ (/LBaq/EQ~ -5RC`paua "!!!,  ,3QEcsgww3KX /;h2I\B`yQw 0)槧777G -5QGdudyeU{ahX )` 4adg777I !/7THevm~qnkphir^&9H !%}~~򣣣 "/7SJhyi~|s|yknaTzef5Ma  4{GMKfx`qxwvuutrq{ro|]U|rLq '  <"1>j0FYBayNrTy_wwy{yvuutsrqrihffRytT} E#BGiRxX]bnw|rxrrqoqjhiltuZoY$.h!G_|~y}gd|spos|ls|ke~`cb)LP 2GScig|bc~m`gko_Z]h?dx ,6px|~zp["08 !%Lpf|b`wouujfkkeiT!LCl}{xm[ .6 (((*\s-BS+7` 9:Ukpdvutt{bahc@Zi 444222 2 *>Mhbvttsrqq~reerykX>^q$2< 3333334(3b^kmusqqpomljiggelzxiU3M\zK V! 333111:U~whqqpommkjhhsvcLs%8C G >!  Ote]tponmlkij~sb?_q&-x0 9! k FfRzIkbqomlktlX2KY U  6!w P V:0EQ}nl||lPw%7@ B 1hf3iycA`q!'p)  Nrzr]3JW W &8BqQv$5><% 00$$R&   @ @p0 &0 &01NSMutableDictionary1 NSDictionary&$0&% NSOwner0&!%!GormScrollViewAttributesInspector0& % ActionCell(0)80& % ButtonCell(6)p0&%Button$0& % FormCell(1)V0& % ButtonCell(1).0&%View(3)R0& % ColorWell0&%Button1,0& % ButtonCell(5)K0&%Box 0&%Form1^0& % FormCell(0)[0& % Button(1)s0& % ButtonCell(0)&0&%View(2)40& % ButtonCell(4)G0&%Box(1)0&%Box3P0&%Matrix160&%Box220& % Button(0)n0&%Cell(0)0& % InspectorWin0& % FormCell(3)`0&%Box1 0&%View(1)"0&%FormT0&%Box(0)j0& % ButtonCell(3)C0&%View(5) 0& % ButtonCell(7)u0& % FormCell(2)e0&%View(0) 0& % ButtonCell(2)?0&%View(4)l0 &3301!NSNibConnector0&% NSOwner0!0!0!0!0!0!01"NSNibOutletConnector0&%color0!0!0"0&%verticalScroll0"0&%horizontalScroll0"0& % borderMatrix0!0!0"0±& % lineAmount0ñ"0ı& % pageContext01#NSNibControlConnector0Ʊ&%colorSelected:0DZ#0ȱ&%verticalSelected:0ɱ#0ʱ&%horizontalSelected:0˱#0̱&%borderSelected:0ͱ"0α&%window0ϱ"0б&%initialFirstResponder0ѱ!0ұ!0ӱ!0Ա!0ձ!0ֱ!0ױ!0ر!0ٱ#0ڱ&%verticalRuler:0۱#0ܱ&%horizontalRuler:0ݱ"0ޱ&%horizontalRuler0߱"0& % verticalRuler0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0!0&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSetName.gorm/000077500000000000000000000000001475375552500241275ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSetName.gorm/Gorm.tiff000066400000000000000000000100461475375552500257060ustar00rootroot00000000000000II*` P8$ BaPd6Dar~*ȢPRMq)$M'JeQHx:"c7-E*PhT:~)Ȉm8Oဃ蕺vF bHʝ7:^^\nQ*2fB[EFTV+W<& VK5>R[x|V_ݩHrM~`mm&MFLb~աi[8nx_* iB/CN>mpz]8xA_DCGm cyDA:K#K&@#_@dN%|  C) tñ*E G$d=lblpb |} xH#̔siXB,+YDO 0)s56FmN=\>)vQ -R~ JRE4?4nɫQLUMQU5iV5}]XulYׇ7_=6)+Yoej #z2HOO=]VRi[Uɞq]]WY{08)Aa p<nnI:_ѯ0?Ri`[֦QYV7=uF}qgcNzm0Gk C (۳7nye% o§tsY3V$JI$2yk^w~}_.)Ou;՟4M:<Xfn@Zácxy:y(!b$&>NeqNkV]E t4QwRGX\ x""z=;Q ?rC8?a Ȕ${ a M[$!1"H ޘI3eO* (Crct?' C>ֺS:A?q8_x fXp!4DC8!NM\"DQ l tpTD2$TML;<[`i/Qr.9CbL"cPR6D $ :aA'paP!ʲ9 GB& aac GA$(0N0t$Z-0fT`yGCqY2Ž)["^;Jj®/H* xa9m9'0ds7X2hx;P pĮ28o$A#C0^Ib%\kL*:;?߸  X-Dwc²C?1uecUY(V*+HHh Pvx = vJE4 X Ca&#eF|*#[ hn%cF #T ˦𩆛qZi}3cˋ)@L)48-_, 慚 Bk tધ rr`qV wX?xA21X&8#k !H'C%,,37YMjnJ390H='2ge~N2Ex,ڋSjO=hք?Xi|) IO R>/7 a 9uNsG͋c-F?ΛưD'#5-"B ;-D{ɹ3%ూ5rl}~_ ř)?PCsq;T0-gqOoMqN}ZY:cMiړSV%BAJ˜P䜖9,4SK<;gߘN(I -_3&pPxaGyzάK-Z@i+[h^\,u׈k#DxF /)B\$1FnʏYj5׃,hYkofQ hj oy3p@ڸXI L^ fʞ.J N~^R)A,lnM.>Vc p |! Ј4@$I ج8o砐 zha@H P \ Nάd. t!^!` D ™r2 .p` қk agaRņJ  a ~f*߭>aB2=62v!3$+:QN.!zl }/oZ C~pbtzt`R~`(@`2lR@ܸޡ ҳ!n +Th= =3hFQ7JX%snd F@Dr`0` XI S)2/Zm-r<<)qZ각1y5sT`+(?`@! @`AAH~ `B) f" "`F`oRly  [;I L6F4fÍ @G˄1hsH[>08ζ! `OIt(.,N^ !E a `&$ MrKh@4>&& 1 |/sG`jPӨyc 3=u(p(SI @NId$ @,: A ,A @aks Q ! & u\JPhvQ :sݴtU)4 QH TUI_B?IJ"$^~AN–31 UK  f 0`.)Fl5%D pX i6`"!wFn\,:&"u$ĊPpA_H 5G_T!< 'b.bbXm Edn 5n *fgQjgU [3u_ 5U8֧IkIU_ָ!D L-c``ne,|` !`e@pU5)5. *S>3YIU=_5TR{JpK!`NA\ |gցQ*P9)0:҅31r98_x nGm!жqp?x1@mm7B"00X(R ' 'apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSetName.gorm/data.classes000066400000000000000000000005751475375552500264260ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "okHit:", "cancelHit:" ); Super = NSObject; }; GormSetNameController = { Actions = ( "okHit:", "cancelHit:" ); Outlets = ( cancelButton, okButton, window, textField ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSetName.gorm/data.info000066400000000000000000000002701475375552500257140ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSetName.gorm/objects.gorm000066400000000000000000000110421475375552500264440ustar00rootroot00000000000000GNUstep archive000f4240:00000020:00000065:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSPanel1NSPanel1 NSWindow1 NSResponder% ? @" @u` @cJI @ @01 NSView% ? @" @u` @c  @u` @cJ01 NSMutableArray1 NSArray&01 NSTextField1 NSControl% @Q @\ @n@ @7  @n@ @7J0 &%0 1NSTextFieldCell1 NSActionCell1NSCell0 &%Set Object Name0 1NSFont% A &&&&&&JJ &&&&&&&I0 1NSColor0 &% NSNamedColorSpace0&%System0&%textBackgroundColor0 0& % textColor0% @$ @I @H @2  @H @2J0 &%00&%Name:0%&&&&&&JJ &&&&&&&I 0% @O @I @p @5  @p @5J0 &%00&0%&&&&&&JJ &&&&&&&I01NSButton% @p @$ @R @8  @R @8J0 &%01 NSButtonCell0&%Set0 1NSImage0!& %  common_ret&&&&&&JJ&&&&&&&I0"&% 0#0$& % common_retH&&& &&2 performClick:v24@0:8@16 0%1 NSImageView% @$ @Y @H @H  @H @HJ0& &%0'1 NSImageCell0(0)& % Gorm.tiff&&&&&&JJ&&&&&&&%%% @H @H0*% @f @$ @R @8  @R @8J0+ &%0,0-&%Cancel&&&&&&JJ&&&&&&&I&&& &&0.1NSBox% @W@ @u` @  @u` @J0/ &00 % @ @ @t   @t J01 &0203&%Box&&&&&&JJ &&&&&&&I04 05&% System06&% windowBackgroundColor @ @%%407&%Window @u` @_ @Ç @|I0809&% NSApplicationIcon&   @ @p0: &0; &0<1NSMutableDictionary1 NSDictionary& 0=&%Box.0>& % TextField20?& % TextField0@&%Button0A&%Button1*0B&% NSOwner0C&%GormSetNameController0D& % TextField10E&%Panel0F& % ImageView%0G &0H1NSNibConnectorE0I&% NSOwner0J?0KD0L>0M@0NF0OA0P1NSNibControlConnector>@0Q& % performClick:0R1NSNibOutletConnectorIA0S& % cancelButton0TI@0U&%okButton0VI>0W& % textField0XIE0Y&%window0Z@I0[&%okHit:0\AI0]& % cancelHit:0^=0_>@0`1 NSMutableString& % nextKeyView0a@A`0bA>`0cE>0d &%initialFirstResponder0e&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormShelfPref.gorm/000077500000000000000000000000001475375552500244515ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormShelfPref.gorm/data.classes000066400000000000000000000040151475375552500267410ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; ArrResizer = { Actions = ( "initForController:" ); Outlets = ( ); Super = NSView; }; FirstResponder = { Actions = ( "alignCenter:", "alignLeft:", "arrangeInFront:", "capitalizeWord:", "changeFont:", "close:", "copy:", "copyRuler:", "delete:", "deleteForward:", "deleteToBeginningOfParagraph:", "deleteToEndOfParagraph:", "deleteWordBackward:", "deminiaturize:", "fax:", "hideOtherApplications:", "loosenKerning:", "lowercaseWord:", "miniaturize:", "moveBackward:", "moveDown:", "moveForward:", "moveLeft:", "moveToBeginningOfDocument:", "moveToBeginningOfParagraph:", "moveToEndOfLine:", "moveUp:", "moveWordBackward:", "moveWordForward:", "newDocument:", "openDocument:", "orderFront:", "orderFrontDataLinkPanel:", "orderFrontFontPanel:", "orderFrontStandardAboutPanel:", "orderOut:", "pageUp:", "pasteAsPlainText:", "pasteFont:", "performClose:", "performZoom:", "raiseBaseline:", "runPageLayout:", "saveAllDocuments:", "saveDocumentAs:", "scrollLineDown:", "scrollPageDown:", "scrollViaScroller:", "selectLine:", "selectParagraph:", "selectToMark:", "selectWord:", "showGuessPanel:", "showWindow:", "subscript:", "swapWithMark:", "takeFloatValueFrom:", "takeObjectValueFrom:", "terminate:", "toggle:", "toggleRuler:", "toggleTraditionalCharacterShape:", "transposeWords:", "turnOffLigatures:", "unhide:", "unscript:", "useAllLigatures:", "useStandardLigatures:", "zoom:" ); Super = NSObject; }; GormShelfPref = { Actions = ( "setDefaultWidth:" ); Outlets = ( win, prefbox, iconbox, imView, leftResBox, rightResBox, nameField, setButt ); Super = NSObject; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormShelfPref.gorm/data.info000066400000000000000000000002701475375552500262360ustar00rootroot00000000000000GNUstep archive00002af9:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormShelfPref.gorm/objects.gorm000066400000000000000000000102471475375552500267740ustar00rootroot00000000000000GNUstep archive00002af9:0000001e:00000078:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&%NSOwner0& % GormShelfPref0&%GSCustomClassMap0&0& % ImageView01 NSImageView1 NSControl1NSView1 NSResponder% B A B@ B@  B@ B@&0 1 NSMutableArray1 NSArray&%0 1 NSImageCell1 NSCell0 1NSFont% A@&&&&&&&&%%% ? ?0 &%Box0 1NSBox% B B CE B  CE B&0 &0% @ @ CA B  CA B&0 &01 NSTextField% B @ B@ A  B@ A&0 &%01NSTextFieldCell1 NSActionCell0& &&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0% B @ A A  A A&0 &0%  A A  A A&0 &00 &%Box &&&&&&&&0%0!0"&%System0#&%windowBackgroundColor0$0%&%System0&& % textColor %%0'% Bh @ A A  A A&0( &0)%  A A  A A&0* &0+0,&%Box &&&&&&&&0%0-0.&%System0/&%windowBackgroundColor0001&%System02& % textColor %%0304& % Title Width &&&&&&&&0%!0506&%System07& % textColor %%08&%Button091NSButton% B B C A  C A&0: &%0;1 NSButtonCell0<&%Use Default Settings &&&&&&&&%0=&0>&&&&0?& % TextField0@&% Box10A% A  C C  C C&0B &0C%  C C  C C&0D & 90E0F&%Box &&&&&&&&0%!0G0H&%System0I& % textColor %%0J&% Box20K&%MenuItem0L1 NSMenuItem0M&%Item 10N&&&%0O1NSImage0P& % common_Nibble%0Q& % GormNSWindow0R1NSWindow% ? A C C&% D D<@0S% ? A C C  C C&0T &A!0U&%Window0V&%Window0W&%Window C C F@ F@%0X0Y&%NSApplicationIcon0Z&% Box3'0[ &0\1NSNibConnectorQ0]&%NSOwner0^@0_K0` 0a0b?0c80dJ0eZ0f1NSNibOutletConnector]Q0g&%win0h]@0i&%prefbox0j] 0k&%iconbox0l]0m&%imView0n]Z0o& % leftResBox0p]J0q& % rightResBox0r]?0s& % nameField0t]80u&%setButt0v1NSNibControlConnector8]0w&%setDefaultWidth:0x1 GSMutableSet1 NSMutableSet1NSSet&Rapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/000077500000000000000000000000001475375552500255525ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/data.classes000066400000000000000000000004671475375552500300510ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormSoundInspector = { Actions = ( "record:", "pause:", "play:", "stop:" ); Outlets = ( soundView ); Super = IBInspector; }; GormSoundView = { Actions = ( ); Outlets = ( ); Super = NSView; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/data.info000066400000000000000000000002701475375552500273370ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/ff.tiff000066400000000000000000000224501475375552500270220ustar00rootroot00000000000000II*$ccc{ccc{ddhuuy))*>ddhuuy))*>~~~~eeedTTfedTTfeeetteeetteeeeggyeeeeggyeeeeeBBKeeeeeBBK##$+eeeeee***eeeeee***''(1eeeeeeeeeeeeee__geeeeeeeeeeeeeeeff}ww|eeeeeeeeeeeeeeeerreeeeeeeeeeeeeeeeeWW|ffs""#8eeeeeeeeeeeeeeeeeeddwttteeeeeeeeeeeeeeeeeeeWWreeeeeeeeeeeeeeeeeeeeIIuIIQeeeeeeeeeeeeeeeeeeU< 8 eeeeeeeeeeeeeeeeeeNQ eeeeeeeeeeeeeeeeRL99XGGO%eeeeeeeeeeeeeeeUJ;;\TT`--.A eeeeeeeeeeeeeeUU..OJJV003U eeeeeeeeeeeeeeN..Y@@L'eeeeeUFeeeeeUF??cYY`//1I eeeeU LLLeeeeeU LLLecck;;=NeeeNOBBP||eeeNOBBP||wwy**+4eeNS??S~~eeNS??S~~!!!)eUGSSh,,-8eUGSSh,,-8e L``qe L``q Gddt Gddt__f__fUUYUUY00$ $%@$% %(R/home/heron/ff.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/objects.gorm000066400000000000000000001235651475375552500301050ustar00rootroot00000000000000GNUstep archive000f4240:00000021:00000084:00000000:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x@JI @ @01 NSView% ? @" @q @x@  @q @x@J01 NSMutableArray1 NSArray&01 NSBox% @$ @W @o @r  @o @rJ0 &0 % @ @ @m @pp  @m @ppJ0 &0 1 GSCustomView1 GSNibItem0 & % GormSoundView  @m @p`&0 1NSTextFieldCell1 NSActionCell1NSCell0&%Sound Attributes01NSFont% A@&&&&&&JJ &&&&&&&I01NSColor0&% NSNamedColorSpace0&% System0&% windowBackgroundColor00&%System0& % textColor @ @%%0 % @$ @ @o @T@  @o @T@J%0 &0 %  @o @T@  @o @T@J0 &01NSButton1 NSControl% @ @O @S@  @O @S@J 0 &%01 NSButtonCell0&%Stop01NSImage @H @H0 0!&% NSCalibratedWhiteColorSpace 0" &0#1NSBitmapImageRep1 NSImageRep0$&% NSDeviceRGBColorSpace @H @HII0I00%1NSData&$$II*$eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 00$$R&&&&&&JJ&&&&&&&I0&&&&&& &&0'% @O @ @O @S@  @O @S@J 0( &%0)0*&%Play0+ @H @H 0, &0-$ @H @HII0I00.&$$II*$ddhuuy))*>~~eedTTfeeetteeeeggyeeeeeBBK##$+eeeeee***''(1eeeeeee__geeeeeeeeff}ww|eeeeeeeeerreeeeeeeeeeWW|ffs""#8eeeeeeeeeeeddwttteeeeeeeeeeeeWWreeeeeeeeeeeeeIIuIIQeeeeeeeeeeeU< 8 eeeeeeeeeeeNQ eeeeeeeeeRL99XGGO%eeeeeeeeUJ;;\TT`--.A eeeeeeeUU..OJJV003U eeeeeeeN..Y@@L'eeeeeUF??cYY`//1I eeeeU LLLecck;;=NeeeNOBBP||wwy**+4eeNS??S~~!!!)eUGSSh,,-8e L``q Gddt__fUUYccc{ccc{ 00$$R&&&&&&JJ&&&&&&&I&&&&& &&0/% @_ @ @O @S@  @O @S@J 00 &%0102&%Pause03 @H @H 04 &05$ @H @HII0I006&$$II*$eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 00$$R&&&&&&JJ&&&&&&&I&&&&& &&07% @g @ @O @S@  @O @S@J 08 &%090:&%Record0; @H @H 0< &0=$ @H @HII0I00>&$$II*$0/yFWaeaWF/y0"XMeeeeeeeeeeeM"X0JeeeeeeeeeeeeeeeJ0&`eeeeeeeeeeeeeeeeeee&`,qeeeeeeeeeeeeeeeeeeeee,q&`eeeeeeeeeeeeeeeeeeeeeee&`0eeeeeeeeeeeeeeeeeeeeeeeee0JeeeeeeeeeeeeeeeeeeeeeeeeeJ"Xeeeeeeeeeeeeeeeeeeeeeeeeeee"XMeeeeeeeeeeeeeeeeeeeeeeeeeeeM0eeeeeeeeeeeeeeeeeeeeeeeeeeeee0/yeeeeeeeeeeeeeeeeeeeeeeeeeeeee/yFeeeeeeeeeeeeeeeeeeeeeeeeeeeeeFWeeeeeeeeeeeeeeeeeeeeeeeeeeeeeWaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaWeeeeeeeeeeeeeeeeeeeeeeeeeeeeeWFeeeeeeeeeeeeeeeeeeeeeeeeeeeeeF/yeeeeeeeeeeeeeeeeeeeeeeeeeeeee/y0eeeeeeeeeeeeeeeeeeeeeeeeeeeee0MeeeeeeeeeeeeeeeeeeeeeeeeeeeM"Xeeeeeeeeeeeeeeeeeeeeeeeeeee"XJeeeeeeeeeeeeeeeeeeeeeeeeeJ0eeeeeeeeeeeeeeeeeeeeeeeee0&`eeeeeeeeeeeeeeeeeeeeeee&`,qeeeeeeeeeeeeeeeeeeeee,q&`eeeeeeeeeeeeeeeeeee&`0JeeeeeeeeeeeeeeeJ0"XMeeeeeeeeeeeM"X0/yFWaeaWF/y0 00$$R&&&&&&JJ&&&&&&&I&&&&& &&0?0@&%Title0A% A @&&&&&&JJ&&&&&&& %%0B&%Window0C&%Inspector WindowC @ @Ç @|I0D0E&% NSApplicationIcon&   @ @p0F &0G &0H1NSMutableDictionary1 NSDictionary&0I&%Box0J& % ButtonCell(2)10K&%Box(0)0L& % ButtonCell(0)0M&%Button1'0N&%Button370O& % ButtonCell(3)90P&% NSOwner0Q&%GormSoundInspector0R& % InspectorWin0S&%GormCustomView 0T& % ButtonCell(1))0U&%View(0)0V&%Button0W&%Button2/0X &0Y1NSNibConnectorRP0ZVK0[MK0\WK0]NK0^I0_1NSNibOutletConnectorPR0`&%window0a1 NSNibControlConnectorVP0b&%stop:0c MP0d&%play:0e WP0f&%pause:0g NP0h&%record:0iS0jPS0k& % soundView0lVM0m1!NSMutableString& % nextKeyView0nMWm0oWNm0pNVm0qK0rUK0sLV0t L0u&% NSFirst0v&%stop:0wTM0xJW0yON0zRM0{&%initialFirstResponder0|&apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/pause.tiff000066400000000000000000000224541475375552500275500ustar00rootroot00000000000000II*$eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00$ $%@$%$%(R/home/heron/pause.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/play.tiff000066400000000000000000000224521475375552500273760ustar00rootroot00000000000000II*$ddhuuy))*>~~eedTTfeeetteeeeggyeeeeeBBK##$+eeeeee***''(1eeeeeee__geeeeeeeeff}ww|eeeeeeeeerreeeeeeeeeeWW|ffs""#8eeeeeeeeeeeddwttteeeeeeeeeeeeWWreeeeeeeeeeeeeIIuIIQeeeeeeeeeeeU< 8 eeeeeeeeeeeNQ eeeeeeeeeRL99XGGO%eeeeeeeeUJ;;\TT`--.A eeeeeeeUU..OJJV003U eeeeeeeN..Y@@L'eeeeeUF??cYY`//1I eeeeU LLLecck;;=NeeeNOBBP||wwy**+4eeNS??S~~!!!)eUGSSh,,-8e L``q Gddt__fUUYccc{ccc{00$ $%@$%"%(R/home/heron/play.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/rec.tiff000066400000000000000000000224521475375552500272020ustar00rootroot00000000000000II*$0/yFWaeaWF/y0"XMeeeeeeeeeeeM"X0JeeeeeeeeeeeeeeeJ0&`eeeeeeeeeeeeeeeeeee&`,qeeeeeeeeeeeeeeeeeeeee,q&`eeeeeeeeeeeeeeeeeeeeeee&`0eeeeeeeeeeeeeeeeeeeeeeeee0JeeeeeeeeeeeeeeeeeeeeeeeeeJ"Xeeeeeeeeeeeeeeeeeeeeeeeeeee"XMeeeeeeeeeeeeeeeeeeeeeeeeeeeM0eeeeeeeeeeeeeeeeeeeeeeeeeeeee0/yeeeeeeeeeeeeeeeeeeeeeeeeeeeee/yFeeeeeeeeeeeeeeeeeeeeeeeeeeeeeFWeeeeeeeeeeeeeeeeeeeeeeeeeeeeeWaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaWeeeeeeeeeeeeeeeeeeeeeeeeeeeeeWFeeeeeeeeeeeeeeeeeeeeeeeeeeeeeF/yeeeeeeeeeeeeeeeeeeeeeeeeeeeee/y0eeeeeeeeeeeeeeeeeeeeeeeeeeeee0MeeeeeeeeeeeeeeeeeeeeeeeeeeeM"Xeeeeeeeeeeeeeeeeeeeeeeeeeee"XJeeeeeeeeeeeeeeeeeeeeeeeeeJ0eeeeeeeeeeeeeeeeeeeeeeeee0&`eeeeeeeeeeeeeeeeeeeeeee&`,qeeeeeeeeeeeeeeeeeeeee,q&`eeeeeeeeeeeeeeeeeee&`0JeeeeeeeeeeeeeeeJ0"XMeeeeeeeeeeeM"X0/yFWaeaWF/y000$ $%@$%"%(R/home/heron/rec.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/rw.tiff000066400000000000000000000224501475375552500270570ustar00rootroot00000000000000II*$UUYUUYړ__fړ__fΓddt GΓddt Gꍍ``q Leꍍ``q Le,,-8֘SShGUe,,-8֘SShGUe!!!)~~??SSNee~~??SSNee**+4wwy||BBPONeee||BBPONeee;;=NcckLLe LUeeeeLLe LUeeee //1IYY`??cFUeeeeeFUeeeee'@@L..YNeeeeeeeeeeeeee 003UJJV..OUUeeeeeeeeeeeeee --.ATT`;;\JUeeeeeeeeeeeeeee%GGO99XLReeeeeeeeeeeeeeee QNeeeeeeeeeeeeeeeeee 8<UeeeeeeeeeeeeeeeeeeIIQIIueeeeeeeeeeeeeeeeeeeeWWreeeeeeeeeeeeeeeeeeetttddweeeeeeeeeeeeeeeeee""#8ffsWW|eeeeeeeeeeeeeeeeerreeeeeeeeeeeeeeeeww|ff}eeeeeeeeeeeeeee__geeeeeeeeeeeeee''(1***eeeeee***eeeeee##$+BBKeeeeeBBKeeeeeŮggyeeeeŮggyeeeetteeetteeeTTfdeTTfde޴e޴e~~~~))*>uuyddh))*>uuyddhccc{ccc{00$ $%@$% %(R/home/heron/rw.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormSoundInspector.gorm/stop.tiff000066400000000000000000000224521475375552500274160ustar00rootroot00000000000000II*$eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00$ $%@$%"%(R/home/heron/stop.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormViewSizeInspector.gorm/000077500000000000000000000000001475375552500262275ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormViewSizeInspector.gorm/data.classes000066400000000000000000000004111475375552500305130ustar00rootroot00000000000000{ "## Comment" = "Do NOT change this file, Gorm maintains it"; GormViewSizeInpector = { Actions = ( "setAutosize:" ); Outlets = ( bottom, height, left, right, sizeForm, top, width ); Super = IBInspector; }; }apps-gorm-gorm-1_5_0/GormCore/English.lproj/GormViewSizeInspector.gorm/data.info000066400000000000000000000002701475375552500300140ustar00rootroot00000000000000GNUstep archive000f4240:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamapps-gorm-gorm-1_5_0/GormCore/English.lproj/GormViewSizeInspector.gorm/objects.gorm000066400000000000000000000215231475375552500305510ustar00rootroot00000000000000GNUstep archive000f4240:0000001f:000000ca:00000001:01GSNibContainer1NSObject01 NSMutableSet1NSSet&01GSWindowTemplate1GSClassSwapper01NSString&% NSWindow1NSWindow1 NSResponder% ? @" @q @x`JI @ @01 NSView% ? @" @q @x`  @q @x`J01 NSMutableArray1 NSArray&01 NSBox% @$ @$ @o @w0  @o @w0J-0 &0 %  @o @w0  @o @w0J0 &0 % @2 @n @j @_  @j @_J0 &0 % @ @ @j@ @Z@  @j@ @Z@J0 &01NSForm1NSMatrix1 NSControl% @7 @" @d @W@  @d @W@J0 &%01 NSFormCell1 NSActionCell1NSCell0&01NSFont% A@&&&&&&JJ&&&&&&&I 00&%Field:&&&&&&JJ&&&&&&&% @d @5 @01NSColor0&% NSNamedColorSpace0&% System0&% controlBackgroundColor00&% NSCalibratedRGBColorSpace ?* ?* ?* ?* ?0& % NSFormCell%%0 &0&&&&&&JJ&&&&&&&I B00 &%X:&&&&&&JJ&&&&&&&0!&&&&&&JJ&&&&&&&I B0"0#&%Y:&&&&&&JJ&&&&&&&0$&&&&&&JJ&&&&&&&I B0%0&&%Width:&&&&&&JJ&&&&&&&0'&&&&&&JJ&&&&&&&I B0(0)&%Height:&&&&&&JJ&&&&&&&2 ok:v24@0:8@16'0*1NSTextFieldCell0+&%Frame+&&&&&&JJ&&&&&&&I0,0-&% windowBackgroundColor0. ? %%0/ % @2 @$ @j @l  @j @lJ00 &01 % @ @ @i @i`  @i @i`J02 &031NSButton% @I @I @Y @Y@  @Y @Y@J04 &%051 NSButtonCell&&&&&&JJ&&&&&&&I&&& &&06% @V  @4 @I  @4 @IJ%07 &%08091NSImage0:& % GormEVLine&&&&&&JJ&&&&&&&I0;0<& % GormEVCoil&&& &&0=% @V @c  @4 @I  @4 @IJ 0> &%0?9&&&&&&JJ&&&&&&&I;&&& &&0@% @b @W  @I @4  @I @4J)0A &%0B0C&%Button0D0E& % GormEHLine&&&&&&JJ&&&&&&&I0F0G& % GormEHCoil&&& &&0H% @W  @I @4  @I @4J,0I &%0JD&&&&&&JJ&&&&&&&IF&&& &&0K% @I @W@ @X@ @4  @X@ @4J*0L &%0M0N0O& % GormMHLine&&&&&&JJ&&&&&&&I0P0Q& % GormMHCoil&&& &&0R% @V @J @3 @X@  @3 @X@J0S &%0T0U0V& % GormMVLine&&&&&&JJ&&&&&&&I0W0X& % GormMVCoil&&& &&0Y0Z& % Autosizing&&&&&&JJ&&&&&&&I,0[ ? @ @%%0\0]&%Title0^% A &&&&&&JJ&&&&&&& %%,0_&%Window0`&%Inspector Window` @C @Ç @|I&   @ @p0a &0b &0c1NSMutableDictionary1 NSDictionary&0d& % FormCell(4)0e&%Button160f& % ButtonCell(5)M0g&%View(0) 0h&%Button3@0i& % FormCell(1)!0j& % ButtonCell(2)?0k&%Button5K0l&% NSOwner0m&%GormViewSizeInpector0n& % ButtonCell(6)T0o&%Box1/0p&%View(1) 0q& % FormCell(2)$0r&%Form0s& % ButtonCell(3)B0t&%Button2=0u& % ButtonCell(0)50v&%View(2)10w& % FormCell(3)'0x&%Button30y& % InspectorWin0z&%Button4H0{& % ButtonCell(4)J0|&%Box(0)0}&%Box 0~&%Button6R0& % FormCell(0)0& % ButtonCell(1)80 &1101NSNibConnectory0&% NSOwner0}|0rp0o|0xv0ev0tv0hv0zv0kv0~v01NSNibOutletConnectorz0&%left0h0&%right0t0&%top0e0&%bottom0r0&%sizeForm0~0&%height0k0&%width01NSNibControlConnectorr0&%ok:0y0&%window0yr01NSMutableString&%initialFirstResponder0|0g|0p}0r0ir0qr0wr0dr0vo0ux0e00&% NSFirst0& % setAutosize:0jt0j0& % setAutosize:0sh0s0& % setAutosize:0{z0{0& % setAutosize:0fk0f0& % setAutosize:0n~0n0& % setAutosize:0k0& % setAutosize:0~0±& % setAutosize:0ñt0ız0űh0Ʊe0DZ& % setAutosize:0ȱ&apps-gorm-gorm-1_5_0/GormCore/GNUmakefile000066400000000000000000000150731475375552500203450ustar00rootroot00000000000000# GNUmakefile: main makefile for GNUstep Object Relationship Modeller # # Copyright (C) 1999,2002,2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2003 # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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 # PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make PACKAGE_NAME=GormCore FRAMEWORK_VAR=GORMCORE FRAMEWORK_NAME=GormCore ADDITIONAL_INCLUDE_DIRS = -I.. srcdir = . SUBPROJECTS = GormCore_HEADER_FILES = \ GormCore.h \ GormAbstractDelegate.h \ GormBoxEditor.h \ GormClassEditor.h \ GormClassInspector.h \ GormClassManager.h \ GormClassPanelController.h \ GormConnectionInspector.h \ GormControlEditor.h \ GormCustomClassInspector.h \ GormCustomView.h \ GormDefines.h \ GormDocument.h \ GormDocumentController.h \ GormDocumentWindow.h \ GormFilePrefsManager.h \ GormFilesOwner.h \ GormFontViewController.h \ GormFunctions.h \ GormGenericEditor.h \ GormHelpInspector.h \ GormImage.h \ GormImageEditor.h \ GormImageInspector.h \ GormInspectorsManager.h \ GormInternalViewEditor.h \ GormMatrixEditor.h \ GormNSPanel.h \ GormNSSplitViewInspector.h \ GormNSWindow.h \ GormObjectEditor.h \ GormObjectInspector.h \ GormObjectViewController.h \ GormOpenGLView.h \ GormOutlineView.h \ GormPalettesManager.h \ GormPlacementInfo.h \ GormPlugin.h \ GormPluginManager.h \ GormPrivate.h \ GormProtocol.h \ GormResource.h \ GormResourceEditor.h \ GormResourceManager.h \ GormScrollViewAttributesInspector.h \ GormServer.h \ GormSetNameController.h \ GormSound.h \ GormSoundEditor.h \ GormSoundInspector.h \ GormSoundView.h \ GormSplitViewEditor.h \ GormStandaloneViewEditor.h \ GormViewEditor.h \ GormViewKnobs.h \ GormViewSizeInspector.h \ GormViewWindow.h \ GormViewWithContentViewEditor.h \ GormViewWithSubviewsEditor.h \ GormWindowEditor.h \ GormWindowTemplate.h \ GormWrapperBuilder.h \ GormWrapperLoader.h \ NSCell+GormAdditions.h \ NSColorWell+GormExtensions.h \ NSFontManager+GormExtensions.h \ NSView+GormExtensions.h \ GormGeneralPref.h \ GormGuidelinePref.h \ GormHeadersPref.h \ GormPalettesPref.h \ GormPluginsPref.h \ GormPrefController.h \ GormPrefs.h \ GormShelfPref.h \ GormXLIFFDocument.h \ GormXLIFFDocument.h \ GormXLIFFDocument.h \ GormXLIFFDocument.h \ GormXLIFFDocument.h \ GormCore_OBJC_FILES = \ GormAbstractDelegate.m \ GormBoxEditor.m \ GormClassEditor.m \ GormClassInspector.m \ GormClassManager.m \ GormClassPanelController.m \ GormConnectionInspector.m \ GormControlEditor.m \ GormCustomClassInspector.m \ GormCustomView.m \ GormDocument.m \ GormDocumentController.m \ GormDocumentWindow.m \ GormFilePrefsManager.m \ GormFilesOwner.m \ GormFontViewController.m \ GormFunctions.m \ GormGenericEditor.m \ GormHelpInspector.m \ GormImage.m \ GormImageEditor.m \ GormImageInspector.m \ GormInspectorsManager.m \ GormInternalViewEditor.m \ GormMatrixEditor.m \ GormNSPanel.m \ GormNSSplitViewInspector.m \ GormNSWindow.m \ GormObjectEditor.m \ GormObjectInspector.m \ GormObjectViewController.m \ GormOpenGLView.m \ GormOutlineView.m \ GormPalettesManager.m \ GormPlugin.m \ GormPluginManager.m \ GormResource.m \ GormResourceEditor.m \ GormResourceManager.m \ GormScrollViewAttributesInspector.m \ GormScrollViewEditor.m \ GormSetNameController.m \ GormSound.m \ GormSoundEditor.m \ GormSoundInspector.m \ GormSoundView.m \ GormSplitViewEditor.m \ GormStandaloneViewEditor.m \ GormViewEditor.m \ GormViewKnobs.m \ GormViewSizeInspector.m \ GormViewWindow.m \ GormViewWithContentViewEditor.m \ GormViewWithSubviewsEditor.m \ GormWindowEditor.m \ GormWindowTemplate.m \ GormWrapperBuilder.m \ GormWrapperLoader.m \ NSCell+GormAdditions.m \ NSColorWell+GormExtensions.m \ NSFontManager+GormExtensions.m \ NSView+GormExtensions.m \ GormPrivate.m \ GormGeneralPref.m \ GormGuidelinePref.m \ GormHeadersPref.m \ GormPalettesPref.m \ GormPluginsPref.m \ GormPrefController.m \ GormShelfPref.m \ GormXLIFFDocument.m \ GormCore_RESOURCE_FILES = \ Images/GormActionSelected.tiff \ Images/GormAction.tiff \ Images/GormClass.tiff \ Images/GormCopyImage.tiff \ Images/GormEHCoil.tiff \ Images/GormEHLine.tiff \ Images/GormEVCoil.tiff \ Images/GormEVLine.tiff \ Images/GormFile.tiff \ Images/GormFilesOwner.tiff \ Images/GormFirstResponder.tiff \ Images/GormFontManager.tiff \ Images/GormImage.tiff \ Images/GormMenu.tiff \ Images/GormMHCoil.tiff \ Images/GormMHLine.tiff \ Images/GormMVCoil.tiff \ Images/GormMVLine.tiff \ Images/GormObject.tiff \ Images/GormOutletSelected.tiff \ Images/GormOutlet.tiff \ Images/GormSound.tiff \ Images/GormUnknown.tiff \ Images/GormView.tiff \ Images/GormWindow.tiff \ Images/browserView.tiff \ Images/outlineView.tiff \ Images/iconView.tiff \ Images/editor.tiff \ Resources/VersionProfiles.plist \ Resources/ClassInformation.plist GormCore_LANGUAGES = English GormCore_LOCALIZED_RESOURCE_FILES = \ GormClassEditor.gorm \ GormClassInspector.gorm \ GormClassPanel.gorm \ GormConnectionInspector.gorm \ GormCustomClassInspector.gorm \ GormDocument.gorm \ GormDummyInspector.gorm \ GormFontView.gorm \ GormHelpInspector.gorm \ GormImageInspector.gorm \ GormInconsistenciesPanel.gorm \ GormInspectorPanel.gorm \ GormNSSplitViewInspector.gorm \ GormObjectInspector.gorm \ GormObjectOutlineView.gorm \ GormPalettePanel.gorm \ GormPrefColors.gorm \ GormPreferences.gorm \ GormPrefGeneral.gorm \ GormPrefGuideline.gorm \ GormPrefHeaders.gorm \ GormPrefPalettes.gorm \ GormPrefPlugins.gorm \ GormScrollViewAttributesInspector.gorm \ GormSetName.gorm \ GormShelfPref.gorm \ GormSoundInspector.gorm \ GormViewSizeInspector.gorm -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/framework.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/GormCore/GNUmakefile.preamble000066400000000000000000000027271475375552500221350ustar00rootroot00000000000000# GNUmakefile: main makefile for GNUstep Object Relationship Modeller # # Copyright (C) 2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2003 # # This file is part of GNUstep. # # 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 # ADDITIONAL_INCLUDE_DIRS += -I../.. ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormObjCHeaderParser endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ $(BUNDLE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormObjCHeaderParser endifapps-gorm-gorm-1_5_0/GormCore/GormAbstractDelegate.h000066400000000000000000000051571475375552500224710ustar00rootroot00000000000000/* GormAppDelegate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #ifndef GNUSTEP_GormAbstractDelegate_H #define GNUSTEP_GormAbstractDelegate_H #import #import #import #import @class NSDictionary; @class NSImage; @class NSMenu; @class NSMutableArray; @class NSSet; @class GormPrefController; @class GormClassManager; @class GormPalettesManager; @class GormPluginManager; @class NSDockTile; @interface GormAbstractDelegate : NSObject { IBOutlet id _gormMenu; IBOutlet id _guideLineMenuItem; GormPrefController *_preferencesController; GormClassManager *_classManager; GormInspectorsManager *_inspectorsManager; GormPalettesManager *_palettesManager; GormPluginManager *_pluginManager; id _selectionOwner; BOOL _isConnecting; BOOL _isTesting; id _testContainer; NSMenu *_mainMenu; // saves the main menu... NSMenu *_servicesMenu; // saves the services menu... NSMenu *_classMenu; // so we can set it for the class view NSDictionary *_menuLocations; NSImage *_linkImage; NSImage *_sourceImage; NSImage *_targetImage; NSImage *_gormImage; NSImage *_testingImage; id _connectSource; id _connectDestination; NSMutableArray *_testingWindows; NSSet *_topObjects; NSDockTile *_dockTile; } // testing the interface - (IBAction) deferredEndTesting: (id) sender; - (IBAction) testInterface: (id)sender; - (IBAction) endTesting: (id)sender; // Testing... - (void) setTestingInterface: (BOOL)testing; - (BOOL) isTestingInterface; @end #endif // import guard apps-gorm-gorm-1_5_0/GormCore/GormAbstractDelegate.m000066400000000000000000000635171475375552500225020ustar00rootroot00000000000000/* GormAppDelegate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #import #import #import #import #import #import "GormAbstractDelegate.h" #import "GormDocument.h" #import "GormDocumentController.h" #import "GormFontViewController.h" #import "GormFunctions.h" #import "GormGenericEditor.h" #import "GormPluginManager.h" #import "GormPrefController.h" #import "GormPrivate.h" #import "GormSetNameController.h" @implementation GormAbstractDelegate /* GormAppDelegate */ - (id) init { self = [super init]; if (self != nil) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSNotificationCenter *ndc = [NSDistributedNotificationCenter defaultCenter]; NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSConnection *conn = [NSConnection defaultConnection]; NSString *path = nil; if ([self isInTool] == NO) { path = [bundle pathForImageResource: @"GormLinkImage"]; _linkImage = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormSourceTag"]; _sourceImage = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormTargetTag"]; _targetImage = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"Gorm"]; _gormImage = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormTesting"]; _testingImage = [[NSImage alloc] initWithContentsOfFile: path]; } // Initialize ivars _isTesting = NO; // regular notifications... [nc addObserver: self selector: @selector(handleNotification:) name: IBSelectionChangedNotification object: nil]; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillCloseDocumentNotification object: nil]; // distibuted notifications... [ndc addObserver: self selector: @selector(handleNotification:) name: @"GormAddClassNotification" object: nil]; [ndc addObserver: self selector: @selector(handleNotification:) name: @"GormDeleteClassNotification" object: nil]; [ndc addObserver: self selector: @selector(handleNotification:) name: @"GormParseClassNotification" object: nil]; /* * establish registration domain defaults from file. */ path = [bundle pathForResource: @"Defaults" ofType: @"plist"]; if (path != nil) { NSDictionary *dict; dict = [NSDictionary dictionaryWithContentsOfFile: path]; if (dict != nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults registerDefaults: dict]; } } /* * Make sure the palettes/plugins managers exist, so that the * editors and inspectors provided in the standard palettes * are available. */ [self palettesManager]; [self pluginManager]; [GormDocumentController sharedDocumentController]; /* * Start the server */ if ([self isInTool] == NO) { [conn setRootObject: self]; if([conn registerName: @"GormServer"] == NO) { NSLog(@"Could not register GormServer"); } } } return self; } - (void) dealloc { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc removeObserver: self]; RELEASE(_inspectorsManager); RELEASE(_palettesManager); RELEASE(_classManager); [super dealloc]; } // Handle all alerts here... - (BOOL) shouldUpgradeOlderArchive { NSInteger retval = NSRunAlertPanel(_(@"Compatibility Warning"), _(@"Saving will update this gorm to the latest version \n" @"which may not be compatible with some previous versions \n" @"of GNUstep."), _(@"Save"), _(@"Don't Save"), nil, nil); return (retval == NSAlertDefaultReturn); } - (BOOL) shouldLoadNewerArchive { NSInteger retval = NSRunAlertPanel(_(@"Gorm Build Mismatch"), _(@"The file being loaded was created with a newer build, continue?"), _(@"OK"), _(@"Cancel"), nil, nil); return (retval == NSAlertDefaultReturn); } - (BOOL) shouldBreakConnectionsForClassNamed: (NSString *)className { NSInteger retval = -1; NSString *title = [NSString stringWithFormat: @"%@",_(@"Modifying Class")]; NSString *msg; NSString *msgFormat = _(@"This will break all connections to " @"actions/outlets to instances of class '%@' and it's subclasses. Continue?"); msg = [NSString stringWithFormat: msgFormat, className]; // ask the user if he/she wants to continue... retval = NSRunAlertPanel(title, msg,_(@"OK"),_(@"Cancel"), nil, nil); return (retval == NSAlertDefaultReturn); } - (BOOL) shouldRenameConnectionsForClassNamed: (NSString *)className toClassName: (NSString *)newName { NSInteger retval = -1; NSString *title = [NSString stringWithFormat: @"%@", _(@"Modifying Class")]; NSString *msgFormat = _(@"Change class name '%@' to '%@'. Continue?"); NSString *msg = [NSString stringWithFormat: msgFormat, className, newName]; // ask the user if he/she wants to continue... retval = NSRunAlertPanel(title, msg,_(@"OK"),_(@"Cancel"), nil, nil); return (retval == NSAlertDefaultReturn); } - (BOOL) shouldBreakConnectionsModifyingLabel: (NSString *)name isAction: (BOOL)action prompted: (BOOL)prompted { NSString *title; NSString *msg; NSInteger retval = -1; if(prompted == NO) { title = [NSString stringWithFormat: @"Modifying %@",(action==YES?@"Action":@"Outlet")]; msg = [NSString stringWithFormat: _(@"This will break all connections to '%@'. Continue?"), name]; retval = NSRunAlertPanel(title, msg,_(@"OK"),_(@"Cancel"), nil, nil); // prompted = YES; } return (retval == NSAlertDefaultReturn); } - (void) couldNotParseClassAtPath: (NSString *)path { NSString *file = [path lastPathComponent]; NSString *message = [NSString stringWithFormat: _(@"Unable to parse class in %@"),file]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } - (void) exceptionWhileParsingClass: (NSException *)localException { NSString *message = [localException reason]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } - (BOOL) shouldBreakConnectionsReparsingClass: (NSString *)className { NSString *title = [NSString stringWithFormat: @"%@", _(@"Reparsing Class")]; NSString *messageFormat = _(@"This may break connections to " @"actions/outlets to instances of class '%@' " @"and it's subclasses. Continue?"); NSString *msg = [NSString stringWithFormat: messageFormat, className]; NSInteger retval = NSRunAlertPanel(title, msg,_(@"OK"),_(@"Cancel"), nil, nil); return (retval == NSAlertDefaultReturn); } // Gorm specific methods... - (BOOL) isInTool { return NO; } - (id) activeDocument { return [[GormDocumentController sharedDocumentController] currentDocument]; } - (GormClassManager*) classManager { id document = [self activeDocument]; if (document != nil) return [document classManager]; /* kept in the case one want access to the classManager without document */ else if (_classManager == nil) { _classManager = [[GormClassManager alloc] init]; } return _classManager; } - (id) connectDestination { return _connectDestination; } - (id) connectSource { return _connectSource; } - (void) displayConnectionBetween: (id)source and: (id)destination { NSWindow *window; NSRect rect; if (source != _connectSource) { if (_connectSource != nil) { window = [(GormDocument *)[self activeDocument] windowAndRect: &rect forObject: _connectSource]; if (window != nil) { NSView *view = [[window contentView] superview]; rect.origin.x --; rect.size.width ++; rect.size.height ++; [window disableFlushWindow]; [view displayRect: rect]; [window enableFlushWindow]; [window flushWindow]; } } _connectSource = source; } if (destination != _connectDestination) { if (_connectDestination != nil) { window = [(GormDocument *)[self activeDocument] windowAndRect: &rect forObject: _connectDestination]; if (window != nil) { NSView *view = [[window contentView] superview]; /* * Erase image from old location. */ rect.origin.x --; rect.size.width ++; rect.size.height ++; [view lockFocus]; [view displayRect: rect]; [view unlockFocus]; [window flushWindow]; } } _connectDestination = destination; } if (_connectSource != nil) { window = [(GormDocument *)[self activeDocument] windowAndRect: &rect forObject: _connectSource]; if (window != nil) { NSView *view = [[window contentView] superview]; NSRect imageRect = rect; imageRect.origin.x++; //rect.size.width--; //rect.size.height--; [view lockFocus]; [[NSColor greenColor] set]; NSFrameRectWithWidth(rect, 1); [_sourceImage compositeToPoint: imageRect.origin operation: NSCompositeSourceOver]; [view unlockFocus]; [window flushWindow]; } } if (_connectDestination != nil && _connectDestination == _connectSource) { window = [(GormDocument *)[self activeDocument] windowAndRect: &rect forObject: _connectDestination]; if (window != nil) { NSView *view = [[window contentView] superview]; NSRect imageRect = rect; imageRect.origin.x += 3; imageRect.origin.y += 2; // rect.size.width -= 5; // rect.size.height -= 5; [view lockFocus]; [[NSColor purpleColor] set]; NSFrameRectWithWidth(rect, 1); imageRect.origin.x += [_targetImage size].width; [_targetImage compositeToPoint: imageRect.origin operation: NSCompositeSourceOver]; [view unlockFocus]; [window flushWindow]; } } else if (_connectDestination != nil) { window = [(GormDocument *)[self activeDocument] windowAndRect: &rect forObject: _connectDestination]; if (window != nil) { NSView *view = [[window contentView] superview]; NSRect imageRect = rect; imageRect.origin.x++; // rect.size.width--; // rect.size.height--; [view lockFocus]; [[NSColor purpleColor] set]; NSFrameRectWithWidth(rect, 1); [_targetImage compositeToPoint: imageRect.origin operation: NSCompositeSourceOver]; [view unlockFocus]; [window flushWindow]; } } } - (IBAction) testInterface: (id)sender { if (_isTesting == NO || [self isInTool]) { // top level objects NS_DURING { NSUserDefaults *defaults; NSNotificationCenter *notifCenter = [NSNotificationCenter defaultCenter]; GormDocument *activeDoc = (GormDocument*)[self activeDocument]; NSData *data; NSArchiver *archiver; NSEnumerator *en; NSDictionary *substituteClasses = [_palettesManager substituteClasses]; NSString *subClassName; id obj; id savedDelegate = [NSApp delegate]; NSMenu *modelMenu = [activeDoc objectForName: @"NSMenu"]; // which windows were open when testing started... _testingWindows = [[NSMutableArray alloc] init]; en = [[NSApp windows] objectEnumerator]; while((obj = [en nextObject]) != nil) { if([obj isVisible]) { [_testingWindows addObject: obj]; if ([activeDoc window] != obj) { [obj close]; // close the visible windows... } } } // set here, so that beginArchiving and endArchiving do not use templates. _isTesting = YES; // [NSApp setApplicationIconImage: _testingImage]; // Set up the dock tile... _dockTile = [[NSDockTile alloc] init]; [_dockTile setShowsApplicationBadge: YES]; [_dockTile setBadgeLabel: @"Test!"]; // Encode palette classes with their equivalent substitutes archiver = [[NSArchiver alloc] init]; [activeDoc deactivateEditors]; if ([self isInTool] == NO) { [archiver encodeClassName: @"GormCustomView" intoClassName: @"GormTestCustomView"]; // substitute classes from palettes. en = [substituteClasses keyEnumerator]; while((subClassName = [en nextObject]) != nil) { NSString *realClassName = [substituteClasses objectForKey: subClassName]; if([realClassName isEqualToString: @"NSTableView"] || [realClassName isEqualToString: @"NSOutlineView"] || [realClassName isEqualToString: @"NSBrowser"]) { continue; } [archiver encodeClassName: subClassName intoClassName: realClassName]; } } // do not allow custom classes during testing. [GSClassSwapper setIsInInterfaceBuilder: YES]; [archiver encodeRootObject: activeDoc]; data = RETAIN([archiver archiverData]); // Released below... [activeDoc reactivateEditors]; RELEASE(archiver); [GSClassSwapper setIsInInterfaceBuilder: NO]; // signal the start of testing... [notifCenter postNotificationName: IBWillBeginTestingInterfaceNotification object: self]; if ([_selectionOwner conformsToProtocol: @protocol(IBEditors)] == YES) { [_selectionOwner makeSelectionVisible: NO]; } defaults = [NSUserDefaults standardUserDefaults]; _menuLocations = [[defaults objectForKey: @"NSMenuLocations"] copy]; [defaults removeObjectForKey: @"NSMenuLocations"]; _servicesMenu = [NSApp servicesMenu]; _testContainer = [NSUnarchiver unarchiveObjectWithData: data]; if (_testContainer != nil) { NSMutableDictionary *nameTable = [_testContainer nameTable]; NSMenu *aMenu = [nameTable objectForKey: @"NSMenu"]; _mainMenu = [NSApp mainMenu]; // save the menu before testing... [[NSApp mainMenu] close]; [NSApp setMainMenu: aMenu]; // initialize the context. RETAIN(_testContainer); _topObjects = [_testContainer topLevelObjects]; [nameTable removeObjectForKey: @"NSServicesMenu"]; [nameTable removeObjectForKey: @"NSWindowsMenu"]; [_testContainer awakeWithContext: nil]; [NSApp setDelegate: savedDelegate]; // makes sure the delegate isn't reset. /* * If the model didn't have a main menu, create one, * otherwise, ensure that 'quit' ends testing mode. */ SEL endSelector = NULL; endSelector = @selector(deferredEndTesting:); if ([self isInTool]) { endSelector = @selector(endTestingNow:); } if (aMenu == nil) { NSMenu *testMenu; testMenu = [[NSMenu alloc] initWithTitle: _(@"Test Menu (Gorm)")]; [testMenu addItemWithTitle: _(@"Quit Test") action: endSelector keyEquivalent: @"q"]; [NSApp setMainMenu: testMenu]; // released, when the menu is reset in endTesting. } else { NSMenu *testMenu = [NSApp mainMenu]; NSString *newTitle = [[testMenu title] stringByAppendingString: @" (Gorm)"]; NSArray *items = findAll(testMenu); NSEnumerator *en = [items objectEnumerator]; id item; BOOL found = NO; while((item = [en nextObject]) != nil) { if([item isKindOfClass: [NSMenuItem class]]) { SEL action = [item action]; if(sel_isEqual(action, @selector(terminate:))) { found = YES; [item setTitle: _(@"Quit Test")]; [item setTarget: self]; [item setAction: endSelector]; } } } // releast the items... RELEASE(items); // set the menu up so that it's easy to tell we're testing and how to quit. [testMenu setTitle: newTitle]; if(found == NO) { [testMenu addItemWithTitle: _(@"Quit Test") action: endSelector keyEquivalent: @"q"]; } } [modelMenu close]; // so we don't get the warning... [NSApp setServicesMenu: nil]; [[NSApp mainMenu] display]; en = [[NSApp windows] objectEnumerator]; while((obj = [en nextObject]) != nil) { if([obj isVisible]) { [obj makeKeyAndOrderFront: self]; } } // we're now in testing mode. [notifCenter postNotificationName: IBDidBeginTestingInterfaceNotification object: self]; [NSApp unhide: self]; } RELEASE(data); } NS_HANDLER { // reset the application after the error. NSLog(@"Problem while testing interface: %@", [localException reason]); NSRunAlertPanel(_(@"Problem While Testing Interface"), [NSString stringWithFormat: @"Make sure connections are to appropriate objects.\n" @"Exception: %@", [localException reason]], _(@"OK"), nil, nil); [self endTesting: self]; } NS_ENDHANDLER; } } - (IBAction) setName: (id)sender { GormSetNameController *panel; int returnPanel; NSTextField *textField; NSArray *selectionArray = [_selectionOwner selection]; id obj = [selectionArray objectAtIndex: 0]; NSString *name; if([(GormDocument *)[self activeDocument] isTopLevelObject: obj]) { panel = [[GormSetNameController alloc] init]; returnPanel = [panel runAsModal]; textField = [panel textField]; if (returnPanel == NSAlertDefaultReturn) { name = [[textField stringValue] stringByTrimmingSpaces]; if (name != nil && [name isEqual: @""] == NO) { [[self activeDocument] setName: name forObject: obj]; } } RELEASE(panel); } } - (IBAction) guideline: (id) sender { [[NSNotificationCenter defaultCenter] postNotificationName: GormToggleGuidelineNotification object:nil]; if ( [_guideLineMenuItem tag] == 0 ) { [_guideLineMenuItem setTitle:_(@"Turn GuideLine On")]; [_guideLineMenuItem setTag:1]; } else if ( [_guideLineMenuItem tag] == 1) { [_guideLineMenuItem setTitle:_(@"Turn GuideLine Off")]; [_guideLineMenuItem setTag:0]; } } - (IBAction) orderFrontFontPanel: (id) sender { NSFontPanel *fontPanel = [NSFontPanel sharedFontPanel]; GormFontViewController *gfvc = [GormFontViewController sharedGormFontViewController]; [fontPanel setAccessoryView: [gfvc view]]; [[NSFontManager sharedFontManager] orderFrontFontPanel: self]; } /** Testing methods... */ - (IBAction) endTestingNow: (id)sender { [NSApp terminate: self]; } - (IBAction) deferredEndTesting: (id) sender { [[NSRunLoop currentRunLoop] performSelector: @selector(endTesting:) target: self argument: nil order: 5000 modes: [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSModalPanelRunLoopMode, NSEventTrackingRunLoopMode, nil]]; } - (IBAction) endTesting: (id)sender { if (_isTesting) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSUserDefaults *defaults; NSEnumerator *e; id val; [nc postNotificationName: IBWillEndTestingInterfaceNotification object: self]; /* * Make sure windows will go away when the container is destroyed. */ e = [_topObjects objectEnumerator]; while ((val = [e nextObject]) != nil) { if ([val isKindOfClass: [NSWindow class]] == YES) { [val close]; } } /* * Make sure any peripheral windows: font panels, etc. which are brought * up by the interface being tested are also closed. */ e = [[NSApp windows] objectEnumerator]; while ((val = [e nextObject]) != nil) { if ([_testingWindows containsObject: val] == NO && [val isKindOfClass: [NSWindow class]] && [val isVisible]) { [val orderOut: self]; } } // prevent saving of this, if the _menuLocations have not previously been set. if(_menuLocations != nil) { defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: _menuLocations forKey: @"NSMenuLocations"]; DESTROY(_menuLocations); } // Restore windows and menus... [NSApp setMainMenu: _mainMenu]; [NSApp setApplicationIconImage: _gormImage]; [[NSApp mainMenu] display]; RELEASE(_dockTile); e = [_testingWindows objectEnumerator]; while ((val = [e nextObject]) != nil) { [val orderFront: self]; } NS_DURING { [NSApp setServicesMenu: _servicesMenu]; } NS_HANDLER { NSDebugLog(@"Exception while setting services menu"); } NS_ENDHANDLER _isTesting = NO; if ([_selectionOwner conformsToProtocol: @protocol(IBEditors)] == YES) { [_selectionOwner makeSelectionVisible: YES]; } [nc postNotificationName: IBDidEndTestingInterfaceNotification object: self]; DESTROY(_testingWindows); // deallocate RELEASE(_testContainer); } } // end of menu actions... - (void) handleNotification: (NSNotification*)notification { NSString *name = [notification name]; id obj = [notification object]; if ([name isEqual: IBSelectionChangedNotification]) { /* * If we are connecting - stop it - a change in selection must mean * that the connection process has ended. */ if ([self isConnecting] == YES) { [self stopConnecting]; } [_selectionOwner makeSelectionVisible: NO]; _selectionOwner = obj; [[self inspectorsManager] updateSelection]; } else if ([name isEqual: IBWillCloseDocumentNotification]) { _selectionOwner = nil; } else if ([name isEqual: @"GormAddClassNotification"]) { id obj = [notification object]; [self addClass: obj]; } else if ([name isEqual: @"GormDeleteClassNotification"]) { id obj = [notification object]; [self deleteClass: obj]; } else if ([name isEqual: @"GormParseClassNotification"]) { NSString *pathToClass = (NSString *)[notification object]; GormClassManager *cm = [(GormDocument *)[self activeDocument] classManager]; [cm parseHeader: pathToClass]; } } - (void) awakeFromNib { // set the menu... _mainMenu = (NSMenu *)_gormMenu; } - (GormInspectorsManager*) inspectorsManager { if (_inspectorsManager == nil) { _inspectorsManager = (GormInspectorsManager *)[GormInspectorsManager sharedInspectorManager]; } return _inspectorsManager; } - (BOOL) isConnecting { return _isConnecting; } - (BOOL) isTestingInterface { return _isTesting; } - (void) setTestingInterface: (BOOL)testing { _isTesting = testing; } - (NSImage*) linkImage { return _linkImage; } - (GormPalettesManager*) palettesManager { if (_palettesManager == nil) { _palettesManager = [[GormPalettesManager alloc] init]; } return _palettesManager; } - (GormPluginManager*) pluginManager { if (_pluginManager == nil) { _pluginManager = [[GormPluginManager alloc] init]; } return _pluginManager; } - (id) selectionOwner { return (id)_selectionOwner; } - (id) selectedObject { return [[_selectionOwner selection] lastObject]; } - (id) documentForObject: (id)object { NSEnumerator *en = [[[GormDocumentController sharedDocumentController] documents] objectEnumerator]; id doc = nil; id result = nil; while((doc = [en nextObject]) != nil) { if([doc containsObject: object]) { result = doc; break; } } return result; } - (void) startConnecting { if (_isConnecting == YES) { return; } if (_connectSource == nil) { return; } if (_connectDestination && [[self activeDocument] containsObject: _connectDestination] == NO) { NSLog(@"Oops - _connectDestination not in active document"); return; } if ([[self activeDocument] containsObject: _connectSource] == NO) { NSLog(@"Oops - _connectSource not in active document"); return; } _isConnecting = YES; [[self inspectorsManager] updateSelection]; } - (void) stopConnecting { [self displayConnectionBetween: nil and: nil]; _isConnecting = NO; _connectSource = nil; _connectDestination = nil; } - (NSMenu*) classMenu { return _classMenu; } // Methods to support external apps adding and deleting // classes from the current document... - (void) addClass: (NSDictionary *) dict { GormDocument *doc = (GormDocument *)[self activeDocument]; GormClassManager *cm = [doc classManager]; NSArray *outlets = [dict objectForKey: @"outlets"]; NSArray *actions = [dict objectForKey: @"actions"]; NSString *className = [dict objectForKey: @"className"]; NSString *superClassName = [dict objectForKey: @"superClassName"]; // If the class is known, delete it before proceeding. if([cm isKnownClass: className]) { [cm removeClassNamed: className]; } // Add the class to the class manager. [cm addClassNamed: className withSuperClassNamed: superClassName withActions: actions withOutlets: outlets]; } - (void) deleteClass: (NSString *) className { GormDocument *doc = (GormDocument *)[self activeDocument]; GormClassManager *cm = [doc classManager]; [cm removeClassNamed: className]; } - (void) exceptionWhileLoadingModel: (NSString *)errorMessage { NSRunAlertPanel(_(@"Exception"), errorMessage, nil, nil, nil); } @end apps-gorm-gorm-1_5_0/GormCore/GormBoxEditor.h000066400000000000000000000023101475375552500211560ustar00rootroot00000000000000/* GormBoxEditor.h * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormBoxEditor_h #define INCLUDED_GormBoxEditor_h #include #include @interface GormBoxEditor : GormViewWithSubviewsEditor { GormInternalViewEditor *contentViewEditor; } - (NSArray *)destroyAndListSubviews; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormBoxEditor.m000066400000000000000000000116461475375552500211770ustar00rootroot00000000000000/* GormBoxEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" #include "GormBoxEditor.h" #include "GormInternalViewEditor.h" #include "GormViewKnobs.h" #define _EO ((NSBox *)_editedObject) @class GormWindowEditor; @implementation NSBox (IBObjectAdditions) - (NSString*) editorClassName { return @"GormBoxEditor"; } - (NSFont *) font { return [self titleFont]; } - (void) setFont: (NSFont *)aFont { [self setTitleFont: aFont]; } @end @implementation GormBoxEditor - (void) setOpened: (BOOL) flag { [super setOpened: flag]; if (flag == YES) { [document setSelectionFromEditor: contentViewEditor]; } } - (void) dealloc { RELEASE(selection); [super dealloc]; } - (BOOL) activate { if ([super activate]) { NSView *contentView = [_EO contentView]; contentViewEditor = (GormInternalViewEditor *)[document editorForObject: contentView inEditor: self create: YES]; return YES; } return NO; } - (void) deactivate { if (activated == YES) { [self deactivateSubeditors]; [super deactivate]; } } - (void) makeSelectionVisible: (BOOL) value { // not implemented here. } - (void) deleteSelection { NSInteger i = 0; NSInteger count = [selection count]; id temp = nil; for (i = count - 1; i >= 0; i--) { temp = [[selection objectAtIndex: i] editedObject]; [[selection objectAtIndex: i] detachSubviews]; [document detachObject: temp]; [[selection objectAtIndex: i] close]; [temp removeFromSuperview]; [selection removeObjectAtIndex: i]; } [self selectObjects: [NSArray array]]; } - (void) mouseDown: (NSEvent *) theEvent { BOOL onKnob = NO; // if we are on one of our own knob, then this event should be processed // by our parent (cause this is a resizing event) if ([parent respondsToSelector: @selector(selection)] && [[parent selection] containsObject: _EO]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) onKnob = YES; } if (onKnob == YES) { if (parent) return [parent mouseDown: theEvent]; else return [self noResponderFor: @selector(mouseDown:)]; } if (opened == NO) { [super mouseDown: theEvent]; return; } if ([[_EO hitTest: [theEvent locationInWindow]] isDescendantOf: contentViewEditor]) { if ([contentViewEditor isOpened] == NO) { [contentViewEditor setOpened: YES]; } [contentViewEditor mouseDown: theEvent]; } else { if ([contentViewEditor isOpened] == YES) { [contentViewEditor setOpened: NO]; } if ((NSMouseInRect([_EO convertPoint: [theEvent locationInWindow] fromView: nil], [_EO titleRect], NO) == YES) && ([theEvent clickCount] == 2)) { NSTextField *tf = [[NSTextField alloc] initWithFrame: [self convertRect: [_EO titleRect] fromView: _EO]]; NSRect frame = [tf frame]; frame.origin.x = [self bounds].origin.x + 3; frame.size.width = [self bounds].size.width - 6; frame.origin.y -= 3; frame.size.height += 4; [tf setBordered: YES]; [tf setEditable: YES]; [tf setBezeled: NO]; [tf setAlignment: NSCenterTextAlignment]; [tf setFrame: frame]; [self addSubview: tf]; [tf setStringValue: [_EO title]]; [self editTextField: tf withEvent: theEvent]; [_EO setTitle: [tf stringValue]]; [tf removeFromSuperview]; RELEASE(tf); [[NSNotificationCenter defaultCenter] postNotificationName: IBSelectionChangedNotification object: self]; } } } - (NSArray *)destroyAndListSubviews { if (contentViewEditor) { if([contentViewEditor respondsToSelector: @selector(destroyAndListSubviews)]) { return [contentViewEditor destroyAndListSubviews]; } else { return nil; } } else { return nil; } } @end apps-gorm-gorm-1_5_0/GormCore/GormClassEditor.h000066400000000000000000000047141475375552500215050ustar00rootroot00000000000000/* GormClassEditor.h * * Copyright (C) 1999, 2003, 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2003, 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormClassEditor_h #define INCLUDED_GormClassEditor_h #include #include #include @class NSString, NSArray, GormDocument, GormClassManager, NSBrowser; extern NSString *GormClassPboardType; extern NSString *GormSwitchViewPreferencesNotification; @interface GormClassEditor : NSView { GormDocument *document; GormClassManager *classManager; NSString *selectedClass; NSScrollView *scrollView; GormOutlineView *outlineView; NSBrowser *browserView; id classesView; id mainView; id viewToggle; } - (GormClassEditor*) initWithDocument: (GormDocument*)doc; + (GormClassEditor*) classEditorForDocument: (GormDocument*)doc; - (void) setSelectedClassName: (NSString*)cn; - (NSString *) selectedClassName; - (void) selectClassWithObject: (id)obj editClass: (BOOL)flag; - (void) selectClassWithObject: (id)obj; - (void) selectClass: (NSString *)className editClass: (BOOL)flag; - (void) selectClass: (NSString *)className; - (BOOL) currentSelectionIsClass; - (void) editClass; // - (void) createSubclass; - (void) addAttributeToClass; - (void) deleteSelection; - (NSArray *) fileTypes; - (void) reloadData; - (BOOL) isEditing; - (id) instantiateClass: (id)sender; - (id) createSubclass: (id)sender; - (id) loadClass: (id)sender; - (id) createClassFiles: (id)sender; - (id) removeClass: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormClassEditor.m000066400000000000000000001024161475375552500215100ustar00rootroot00000000000000/* GormClassEditor.m * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormClassEditor.h" #include "GormClassManager.h" #include "GormFunctions.h" #include "GormDocument.h" #include "GormProtocol.h" #include "GormPrivate.h" NSString *GormClassPboardType = @"GormClassPboardType"; NSString *GormSwitchViewPreferencesNotification = @"GormSwitchViewPreferencesNotification"; NSImage *outlineImage = nil; NSImage *browserImage = nil; @interface GormOutlineView (PrivateMethods) - (void) _addNewActionToObject: (id)item; - (void) _addNewOutletToObject: (id)item; @end @interface GormClassEditor (PrivateMethods) - (void) browserClick: (id)sender; - (void) toggleView: (id) sender; - (void) switchViewToDefault; - (void) handleNotification: (NSNotification *)notification; @end @implementation GormClassEditor + (void) initialize { if(self == [GormClassEditor class]) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = nil; path = [bundle pathForImageResource: @"outlineView"]; outlineImage = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"browserView"]; browserImage = [[NSImage alloc] initWithContentsOfFile: path]; } } - (GormClassEditor*) initWithDocument: (GormDocument*)doc { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if([bundle loadNibNamed: @"GormClassEditor" owner: self topLevelObjects: NULL]) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSRect scrollRect = [classesView frame]; // = {{0, 0}, {340, 188}}; NSRect mainRect = NSMakeRect(20,0,scrollRect.size.width-20, scrollRect.size.height); NSColor *color = [NSColor colorWithCalibratedRed: 0.850980 green: 0.737255 blue: 0.576471 alpha: 1.0 ]; NSTableColumn *tableColumn; // setup the view... [self setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [self setFrame: [mainView frame]]; [self addSubview: mainView]; // set up the scroll view. scrollView = [[NSScrollView alloc] initWithFrame: scrollRect]; [scrollView setHasVerticalScroller: YES]; [scrollView setHasHorizontalScroller: NO]; [scrollView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [scrollView setBorderType: NSBezelBorder]; // allocate the outline view. outlineView = [[GormOutlineView alloc] init]; [outlineView setFrame: scrollRect]; [outlineView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [scrollView setDocumentView: outlineView]; // [outlineView sizeToFit]; RELEASE(outlineView); // weak connections... document = doc; classManager = [doc classManager]; // set up the outline view... [outlineView setDataSource: self]; [outlineView setDelegate: self]; [outlineView setAutoresizesAllColumnsToFit: YES]; [outlineView setAllowsColumnResizing: NO]; [outlineView setDrawsGrid: NO]; [outlineView setIndentationMarkerFollowsCell: YES]; [outlineView setAutoresizesOutlineColumn: YES]; [outlineView setIndentationPerLevel: 10]; [outlineView setAttributeOffset: 30]; [outlineView setRowHeight: 18]; [outlineView setMenu: [(id)[NSApp delegate] classMenu]]; [outlineView setBackgroundColor: color]; // add the table columns... tableColumn = [(NSTableColumn *)[NSTableColumn alloc] initWithIdentifier: @"classes"]; [[tableColumn headerCell] setStringValue: _(@"Classes")]; [tableColumn setMinWidth: 190]; [tableColumn setResizable: YES]; [tableColumn setEditable: YES]; [outlineView addTableColumn: tableColumn]; [outlineView setOutlineTableColumn: tableColumn]; RELEASE(tableColumn); tableColumn = [(NSTableColumn *)[NSTableColumn alloc] initWithIdentifier: @"outlets"]; [[tableColumn headerCell] setStringValue: _(@"Outlet")]; [tableColumn setWidth: 50]; [tableColumn setResizable: NO]; [tableColumn setEditable: NO]; [outlineView addTableColumn: tableColumn]; [outlineView setOutletColumn: tableColumn]; RELEASE(tableColumn); tableColumn = [(NSTableColumn *)[NSTableColumn alloc] initWithIdentifier: @"actions"]; [[tableColumn headerCell] setStringValue: _(@"Action")]; [tableColumn setWidth: 50]; [tableColumn setResizable: NO]; [tableColumn setEditable: NO]; [outlineView addTableColumn: tableColumn]; [outlineView setActionColumn: tableColumn]; RELEASE(tableColumn); // expand all of the items in the classesView... // [outlineView expandItem: @"NSObject"]; [outlineView setFrame: scrollRect]; // allocate the NSBrowser view. browserView = [[NSBrowser alloc] initWithFrame: mainRect]; [browserView setRefusesFirstResponder:YES]; [browserView setAutoresizingMask: NSViewWidthSizable | NSViewMinYMargin]; [browserView setTitled:NO]; [browserView setMaxVisibleColumns:3]; [browserView setSeparatesColumns:NO]; [browserView setAllowsMultipleSelection:YES]; [browserView setDelegate:self]; [browserView setTarget:self]; [browserView setAction: @selector(browserClick:)]; // [browserView setDoubleAction: nil]; // @selector(doubleClick:)]; [browserView setRefusesFirstResponder:YES]; [browserView loadColumnZero]; // observe certain notifications... [nc addObserver: self selector: @selector(handleNotification:) name: GormSwitchViewPreferencesNotification object: nil]; [nc addObserver: self selector: @selector(handleNotification:) name: GormDidAddClassNotification object: nil]; // kludge to prevent it from having resize issues. [classesView setContentView: scrollView]; [classesView sizeToFit]; // switch... [self switchViewToDefault]; } else { return nil; } } return self; } + (GormClassEditor*) classEditorForDocument: (GormDocument*)doc { return AUTORELEASE([(GormClassEditor *)[self alloc] initWithDocument: doc]); } - (void) toggleView: (id) sender { id contentView = [classesView contentView]; if(contentView == browserView) { NSRect rect = [classesView frame]; [classesView setContentView: scrollView]; [outlineView setFrame: rect]; [outlineView sizeToFit]; [viewToggle setImage: browserImage]; } else if(contentView == scrollView) { [classesView setContentView: browserView]; [viewToggle setImage: outlineImage]; } [self setSelectedClassName: selectedClass]; } - (void) switchViewToDefault { NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; NSString *viewType = [ud stringForKey: @"ClassViewType"]; if([viewType isEqual: @"Outline"] || viewType == nil) { NSRect rect = [classesView frame]; [classesView setContentView: scrollView]; [outlineView setFrame: rect]; [outlineView sizeToFit]; [viewToggle setImage: browserImage]; } else if([viewType isEqual: @"Browser"]) { [classesView setContentView: browserView]; [viewToggle setImage: outlineImage]; } [self setSelectedClassName: selectedClass]; } - (void) handleNotification: (NSNotification *)notification { if([[notification name] isEqualToString: GormSwitchViewPreferencesNotification]) { [self switchViewToDefault]; } } - (void) browserClick: (id)sender { NSString *className = [[sender selectedCell] stringValue]; ASSIGN(selectedClass, className); [document setSelectionFromEditor: (id)self]; } - (void) dealloc { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc removeObserver: self]; RELEASE(scrollView); RELEASE(browserView); RELEASE(selectedClass); [super dealloc]; } - (void) setSelectedClassName: (NSString*)cn { [self selectClass: cn]; } - (NSString *)selectedClassName { id className = nil; NS_DURING { if([classesView contentView] == scrollView) { NSInteger row = [outlineView selectedRow]; if ( row == -1 ) { row = 0; } className = [outlineView itemAtRow: row]; if ([className isKindOfClass: [GormOutletActionHolder class]]) { className = [outlineView itemBeingEdited]; } } else if([classesView contentView] == browserView) { className = [[browserView selectedCell] stringValue]; } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; return className; } - (void) selectClass: (NSString *)className { [self selectClass: className editClass: YES]; } // class selection... - (void) selectClass: (NSString *)className editClass: (BOOL)flag { NS_DURING { NSString *currentClass = nil; NSArray *classes, *subclasses; NSMutableArray *subClassesArray = [NSMutableArray array]; NSEnumerator *en; int row = 0; NSInteger col = 0; if ( ( className != nil ) && ( [className isEqual: @"CustomView"] == NO ) && ( [className isEqual: @"GormSound"] == NO ) && ( [className isEqual: @"GormImage"] == NO ) && ( [outlineView isEditing] == NO ) ) { classes = [classManager allSuperClassesOf: className]; en = [classes objectEnumerator]; // open the items... while ((currentClass = [en nextObject]) != nil) { [outlineView expandItem: currentClass]; } // select the item in the outline view... row = [outlineView rowForItem: className]; if (row != -1) { [outlineView selectRow: row byExtendingSelection: NO]; [outlineView scrollRowToVisible: row]; } // select class in browser... subClassesArray = [NSMutableArray arrayWithArray: [classManager allSuperClassesOf: className]]; if ((subClassesArray != nil && [subClassesArray count] != 0) || [classManager isRootClass: className] == YES) { [subClassesArray addObject: className]; // include in the list. // Get the super class position in the browser. Passing "nil" to subClassesOf causes it // to get all of the root classes. col = 0; row = [[classManager subClassesOf: nil] indexOfObject: [subClassesArray objectAtIndex: 0]]; // reset the enumerator... currentClass = nil; [browserView reloadColumn:col]; // if row is not NSNotFound, then we found something. if(row != -1) { [browserView selectRow: row inColumn: col]; en = [subClassesArray objectEnumerator]; [en nextObject]; // skip the first one. while((currentClass = [en nextObject]) != nil) { NSString *prevClass = [[browserView selectedCellInColumn: col] stringValue]; subclasses = [classManager subClassesOf: prevClass]; row = [subclasses indexOfObject: currentClass]; col++; [browserView selectRow:row inColumn:col]; } } ASSIGN(selectedClass, className); if(flag) { // set the editor... [document setSelectionFromEditor: (id)self]; } } } } NS_HANDLER { NSDebugLog(@"%@",[localException reason]); } NS_ENDHANDLER; } - (void) selectClassWithObject: (id)obj { [self selectClassWithObject: obj editClass: YES]; } - (void) selectClassWithObject: (id)object editClass: (BOOL)flag { id obj = object; NSString *customClass = nil; // if it's a scrollview focus on it's contents. if([obj isKindOfClass: [NSScrollView class]]) { id newobj = nil; newobj = [obj documentView]; if(newobj != nil) { obj = newobj; } } // check for a custom class. customClass = [classManager customClassForObject: obj]; if(customClass != nil) { [self selectClass: customClass editClass: flag]; } else if ([obj respondsToSelector: @selector(className)]) { [self selectClass: [obj className] editClass: flag]; } } - (BOOL) currentSelectionIsClass { BOOL result = NO; if([classesView contentView] == scrollView) { NSInteger i = [outlineView selectedRow]; if (i >= 0 && i <= ([outlineView numberOfRows] - 1)) { NS_DURING { id object = [outlineView itemAtRow: i]; if([object isKindOfClass: [NSString class]]) { result = YES; } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; } } else if([classesView contentView] == browserView) { result = YES; } return result; } - (void) editClass { int row = [outlineView selectedRow]; if (row >= 0) { ASSIGN(selectedClass, [self selectedClassName]); [document setSelectionFromEditor: (id)self]; } } //--- IBSelectionOwners protocol --- - (NSUInteger) selectionCount { return ([outlineView selectedRow] == -1)?0:1; } - (NSArray*) selection { // when asked for a selection, it returns a class proxy if (selectedClass != nil) { NSArray *array; GormClassProxy *classProxy; NSString *sc = [NSString stringWithString: selectedClass]; classProxy = [[GormClassProxy alloc] initWithClassName: sc]; array = [NSArray arrayWithObject: classProxy]; RELEASE(classProxy); return array; } else { return [NSArray array]; } } - (void) drawSelection { } - (void) makeSelectionVisible: (BOOL)flag { } - (void) selectObjects: (NSArray*)objects { id obj = [objects objectAtIndex: 0]; [self selectClassWithObject: obj]; } - (void) deleteSelection { id anitem; NSInteger i = [outlineView selectedRow]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; // if no selection, then return. if (i == -1) { return; } // get the item, and catch the exception, if there's a problem. if([classesView contentView] == outlineView) { NS_DURING { anitem = [outlineView itemAtRow: i]; } NS_HANDLER { anitem = nil; } NS_ENDHANDLER; } else { anitem = [[browserView selectedCell] stringValue]; } if(anitem == nil) return; if ([anitem isKindOfClass: [GormOutletActionHolder class]]) { id itemBeingEdited = [outlineView itemBeingEdited]; NSString *name = [anitem getName]; // if the class being edited is a custom class or a category, // then allow the deletion... if ([classManager isCustomClass: itemBeingEdited] || [classManager isAction: name onCategoryForClassNamed: itemBeingEdited]) { if ([outlineView editType] == Actions) { // if this action is an action on the class, not it's superclass // allow the deletion... if ([classManager isAction: name ofClass: itemBeingEdited]) { BOOL removed = [document removeConnectionsWithLabel: name forClassNamed: itemBeingEdited isAction: YES]; if (removed) { [classManager removeAction: name fromClassNamed: itemBeingEdited]; [outlineView removeItemAtRow: i]; [nc postNotificationName: GormDidModifyClassNotification object: classManager]; } } } else if ([outlineView editType] == Outlets) { // if this outlet is an outlet on the class, not it's superclass // allow the deletion... if ([classManager isOutlet: name ofClass: itemBeingEdited]) { BOOL removed = [document removeConnectionsWithLabel: name forClassNamed: itemBeingEdited isAction: NO]; if (removed) { [classManager removeOutlet: name fromClassNamed: itemBeingEdited]; [outlineView removeItemAtRow: i]; [nc postNotificationName: GormDidModifyClassNotification object: classManager]; } } } } } else { NSArray *subclasses = [classManager subClassesOf: anitem]; // if the class has no subclasses, then delete. if ([subclasses count] == 0) { // if the class being edited is a custom class, then allow the deletion... if ([classManager isCustomClass: anitem]) { BOOL removed = [document removeConnectionsForClassNamed: anitem]; if (removed) { [self copySelection]; [document removeAllInstancesOfClass: anitem]; [classManager removeClassNamed: anitem]; [self reloadData]; [nc postNotificationName: GormDidModifyClassNotification object: classManager]; ASSIGN(selectedClass, (id)nil); // don't keep the class we're pointing to. } } } else { NSString *message = [NSString stringWithFormat: _(@"The class %@ has subclasses which must be removed"), anitem]; NSRunAlertPanel(_(@"Problem removing class"), message, nil, nil, nil); } } } - (void) copySelection { if(selectedClass != nil) { if([selectedClass isEqual: @"FirstResponder"] == NO) { NSPasteboard *pb = [NSPasteboard generalPasteboard]; NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [classManager dictionaryForClassNamed: selectedClass], selectedClass, nil]; id classPlist = [[dict description] propertyList]; if(classPlist != nil) { [pb declareTypes: [NSArray arrayWithObject: GormClassPboardType] owner: self]; [pb setPropertyList: classPlist forType: GormClassPboardType]; } } } } - (void) pasteInSelection { if(selectedClass != nil) { if([selectedClass isEqual: @"FirstResponder"] == NO) { NSPasteboard *pb = [NSPasteboard generalPasteboard]; NSArray *types = [pb types]; if([types containsObject: GormClassPboardType]) { id classPlist = [pb propertyListForType: GormClassPboardType]; NSDictionary *classesDict = [NSDictionary dictionaryWithDictionary: classPlist]; id name = nil; NSEnumerator *en = [classesDict keyEnumerator]; while((name = [en nextObject]) != nil) { NSDictionary *classDict = [classesDict objectForKey: name]; NSString *className = [classManager uniqueClassNameFrom: name]; BOOL added = [classManager addClassNamed: className withSuperClassNamed: selectedClass withActions: [classDict objectForKey: @"Actions"] withOutlets: [classDict objectForKey: @"Outlets"]]; if(!added) { NSString *message = [NSString stringWithFormat: @"Addition of %@ with superclass %@ failed.", className, selectedClass]; NSRunAlertPanel(_(@"Problem pasting class"), message, nil, nil, nil); } } } } else { NSRunAlertPanel(_(@"Problem pasting class"), _(@"FirstResponder cannot have subclasses."), nil, nil, nil); } } } - (void) addAttributeToClass { id edited = [outlineView itemBeingEdited]; if ([outlineView isEditing] == YES) { if ([outlineView editType] == Actions) { [outlineView _addNewActionToObject: edited]; } if ([outlineView editType] == Outlets) { if([classManager isCustomClass: edited]) { [outlineView _addNewOutletToObject: edited]; } } } } - (void) reloadData { [outlineView reloadData]; [browserView loadColumnZero]; } - (BOOL) isEditing { return [outlineView isEditing]; } /* * Dragging source protocol implementation */ - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f { // no image. } // IBEditor protocol - (BOOL) acceptsTypeFromArray: (NSArray*)types { return [types containsObject: NSFilenamesPboardType]; } - (BOOL) activate { return YES; } - (id) initWithObject: (id)anObject inDocument: (id/**/)aDocument { return [self initWithDocument: aDocument]; } - (void) close { // does nothing. } - (void) closeSubeditors { // does nothing. } - (void) deactivate { // does nothing. } - (id /**/) document { return document; } - (id) editedObject { return selectedClass; } - (void) orderFront { [[self window] orderFront: self]; } - (id) openSubeditorForObject: (id)object { return nil; } - (void) resetObject: (id)anObject { [outlineView reset]; [outlineView expandItem: anObject]; [outlineView collapseItem: anObject collapseChildren: YES]; } - (BOOL) wantsSelection { return NO; } - (void) validateEditing { // does nothing. } - (NSWindow *) window { return [super window]; } - (NSArray *) fileTypes { return [NSArray arrayWithObject: @"h"]; } /** * Create a subclass from the selected subclass... */ - (id) createSubclass: (id)sender { if (![outlineView isEditing]) { NSString *itemSelected = [self selectedClassName]; if(itemSelected != nil) { NSString *newClassName; newClassName = [classManager addClassWithSuperClassName: itemSelected]; if(newClassName != nil) { NSInteger i = 0; if([classesView contentView] == scrollView) { [outlineView reloadData]; [outlineView expandItem: itemSelected]; i = [outlineView rowForItem: newClassName]; [outlineView selectRow: i byExtendingSelection: NO]; [outlineView scrollRowToVisible: i]; } else if([classesView contentView] == browserView) { [self selectClass: newClassName editClass: NO]; } } else { // inform the user of this error. NSRunAlertPanel(_(@"Cannot instantiate"), _(@"FirstResponder cannot be instantiated."), nil, nil, nil); } } } return self; } /** * Create an instance of a given class. */ - (id) instantiateClass: (id)sender { NSString *className = [self selectedClassName]; NSString *theName = nil; theName = [document instantiateClassNamed: className]; if (theName == nil) { return nil; } return self; } /** * Remove a class from the classes view */ - (id) removeClass: (id)sender { [self deleteSelection]; return self; } /** * Parse a header into the classes view. */ - (id) loadClass: (id)sender { NSArray *fileTypes = [NSArray arrayWithObjects: @"h", @"H", @"m", @"mm", nil]; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; int result; [oPanel setAllowsMultipleSelection: NO]; [oPanel setCanChooseFiles: YES]; [oPanel setCanChooseDirectories: NO]; result = [oPanel runModalForDirectory: nil file: nil types: fileTypes]; if (result == NSOKButton) { NSString *filename = [oPanel filename]; NS_DURING { if(![classManager parseHeader: filename]) { NSString *file = [filename lastPathComponent]; NSString *message = [NSString stringWithFormat: _(@"Unable to parse class in %@"),file]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } else { return self; } } NS_HANDLER { NSString *message = [localException reason]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } NS_ENDHANDLER; } return nil; } /** * Create the class files for the selected class. */ - (id) createClassFiles: (id)sender { NSSavePanel *sp; NSString *className = [self selectedClassName]; int result; sp = [NSSavePanel savePanel]; [sp setRequiredFileType: @"m"]; [sp setTitle: _(@"Save source file as...")]; if ([document fileName] == nil) { result = [sp runModalForDirectory: NSHomeDirectory() file: [className stringByAppendingPathExtension: @"m"]]; } else { result = [sp runModalForDirectory: [[document fileName] stringByDeletingLastPathComponent] file: [className stringByAppendingPathExtension: @"m"]]; } if (result == NSOKButton) { NSString *sourceName = [sp filename]; NSString *headerName; [sp setRequiredFileType: @"h"]; [sp setTitle: _(@"Save header file as...")]; result = [sp runModalForDirectory: [sourceName stringByDeletingLastPathComponent] file: [[[sourceName lastPathComponent] stringByDeletingPathExtension] stringByAppendingString: @".h"]]; if (result == NSOKButton) { headerName = [sp filename]; NSDebugLog(@"Saving %@", className); if (![classManager makeSourceAndHeaderFilesForClass: className withName: sourceName and: headerName]) { NSRunAlertPanel(_(@"Alert"), _(@"Could not create the class's file"), nil, nil, nil); } return self; } } return nil; } - (void)controlTextDidChange:(NSNotification *)aNotification { id object = [aNotification object]; NSString *className = [classManager findClassByName: [object stringValue]]; [self selectClass: className]; } @end @implementation GormClassEditor (NSOutlineViewDataSource) // --- NSOutlineView dataSource --- - (id) outlineView: (NSOutlineView *)anOutlineView objectValueForTableColumn: (NSTableColumn *)aTableColumn byItem: item { id identifier = [aTableColumn identifier]; id className = item; if([item isKindOfClass: [GormOutletActionHolder class]]) return item; if ([identifier isEqualToString: @"classes"]) { return className; } else if ([identifier isEqualToString: @"outlets"]) { return [NSString stringWithFormat: @"%"PRIuPTR, [[classManager allOutletsForClassNamed: className] count]]; } else if ([identifier isEqualToString: @"actions"]) { return [NSString stringWithFormat: @"%"PRIuPTR, [[classManager allActionsForClassNamed: className] count]]; } return @""; } - (void) outlineView: (NSOutlineView *)anOutlineView setObjectValue: (id)anObject forTableColumn: (NSTableColumn *)aTableColumn byItem: (id)item { GormOutlineView *gov = (GormOutlineView *)anOutlineView; // ignore object values which come in as nil... if(anObject == nil) return; if ([item isKindOfClass: [GormOutletActionHolder class]]) { if (![anObject isEqualToString: @""] && ![anObject isEqualToString: [item getName]]) { NSString *name = [item getName]; // retain the name and add the action/outlet... if ([gov editType] == Actions) { NSString *formattedAction = formatAction( (NSString *)anObject ); if (![classManager isAction: formattedAction ofClass: [gov itemBeingEdited]]) { BOOL removed; removed = [document removeConnectionsWithLabel: name forClassNamed: [gov itemBeingEdited] isAction: YES]; if (removed) { [classManager replaceAction: name withAction: formattedAction forClassNamed: [gov itemBeingEdited]]; [(GormOutletActionHolder *)item setName: formattedAction]; } } else { NSString *message; message = [NSString stringWithFormat: _(@"The class %@ already has an action named %@"), [gov itemBeingEdited], formattedAction]; NSRunAlertPanel(_(@"Problem Adding Action"), message, nil, nil, nil); } } else if ([gov editType] == Outlets) { NSString *formattedOutlet = formatOutlet( (NSString *)anObject ); if (![classManager isOutlet: formattedOutlet ofClass: [gov itemBeingEdited]]) { BOOL removed; removed = [document removeConnectionsWithLabel: name forClassNamed: [gov itemBeingEdited] isAction: NO]; if (removed) { [classManager replaceOutlet: name withOutlet: formattedOutlet forClassNamed: [gov itemBeingEdited]]; [(GormOutletActionHolder *)item setName: formattedOutlet]; } } else { NSString *message; message = [NSString stringWithFormat: _(@"The class %@ already has an outlet named %@"), [gov itemBeingEdited], formattedOutlet]; NSRunAlertPanel(_(@"Problem Adding Outlet"), message, nil, nil, nil); } } } } else { if((![anObject isEqualToString: @""]) && (![anObject isEqualToString:item])) { BOOL rename; rename = [document renameConnectionsForClassNamed: item toName: anObject]; if (rename) { NSInteger row = 0; [classManager renameClassNamed: item newName: anObject]; [gov reloadData]; row = [gov rowForItem: anObject]; // make sure that item is collapsed... [gov expandItem: anObject]; [gov collapseItem: anObject]; // scroll to the item.. [gov scrollRowToVisible: row]; [gov selectRow: row]; } } } [gov setNeedsDisplay: YES]; } - (NSInteger) outlineView: (NSOutlineView *)anOutlineView numberOfChildrenOfItem: (id)item { NSArray *subclasses = [classManager subClassesOf: item]; return [subclasses count]; } - (BOOL) outlineView: (NSOutlineView *)anOutlineView isItemExpandable: (id)item { NSArray *subclasses = nil; if (item == nil) return YES; subclasses = [classManager subClassesOf: item]; if ([subclasses count] > 0) return YES; return NO; } - (id) outlineView: (NSOutlineView *)anOutlineView child: (NSInteger)index ofItem: (id)item { NSArray *subclasses = [classManager subClassesOf: item]; return [subclasses objectAtIndex: index]; } // GormOutlineView data source methods... - (NSArray *)outlineView: (NSOutlineView *)anOutlineView actionsForItem: (id)item { NSArray *actions = [classManager allActionsForClassNamed: item]; return actions; } - (NSArray *)outlineView: (NSOutlineView *)anOutlineView outletsForItem: (id)item { NSArray *outlets = [classManager allOutletsForClassNamed: item]; return outlets; } - (NSString *)outlineView: (NSOutlineView *)anOutlineView addNewActionForClass: (id)item { // removed the restriction, since it's now possible to add // actions for kit classes. return [classManager addNewActionToClassNamed: item]; } - (NSString *)outlineView: (NSOutlineView *)anOutlineView addNewOutletForClass: (id)item { GormOutlineView *gov = (GormOutlineView *)anOutlineView; if (![classManager isCustomClass: [gov itemBeingEdited]]) { return nil; } if([item isEqualToString: @"FirstResponder"]) return nil; return [classManager addNewOutletToClassNamed: item]; } // Delegate methods - (BOOL) outlineView: (NSOutlineView *)outline shouldEditTableColumn: (NSTableColumn *)tableColumn item: (id)item { BOOL result = NO; GormOutlineView *gov = (GormOutlineView *)outline; NSDebugLog(@"in the delegate %@", [tableColumn identifier]); if (tableColumn == [gov outlineTableColumn]) { NSDebugLog(@"outline table col"); if (![item isKindOfClass: [GormOutletActionHolder class]] && ![item isEqualToString: @"FirstResponder"]) { result = [classManager isCustomClass: item]; [self editClass]; } else { id itemBeingEdited = [gov itemBeingEdited]; if ([classManager isCustomClass: itemBeingEdited]) { if ([gov editType] == Actions) { result = [classManager isAction: [item getName] ofClass: itemBeingEdited]; } else if ([gov editType] == Outlets) { result = [classManager isOutlet: [item getName] ofClass: itemBeingEdited]; } } else if ([classManager isCategoryForClass: itemBeingEdited]) { if ([gov editType] == Actions) { result = [classManager isAction: [item getName] ofClass: itemBeingEdited]; } } } } return result; } - (void) outlineViewSelectionDidChange: (NSNotification *)notification { id object = [notification object]; NSInteger row = [object selectedRow]; if(row != -1) { NS_DURING { id item = [object itemAtRow: [object selectedRow]]; if ([item isKindOfClass: [GormOutletActionHolder class]] == NO && [classesView contentView] == scrollView) { [self editClass]; } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; } } @end // end of data source @implementation GormClassEditor (NSBrowserDelegate) - (void) browser:(NSBrowser *)sender createRowsForColumn: (NSInteger)column inMatrix: (NSMatrix *)matrix { NSArray *classes = nil; NSEnumerator *en = nil; NSString *className = nil; NSInteger i = 0; if (sender != browserView || !matrix || ![matrix isKindOfClass:[NSMatrix class]]) { return; } if(column == 0) { classes = [classManager subClassesOf: nil]; } else { className = [[sender selectedCellInColumn: column - 1] stringValue]; classes = [classManager subClassesOf: className]; } en = [classes objectEnumerator]; for(i = 0; ((className = [en nextObject]) != nil); i++) { id cell; NSArray *sub = [classManager subClassesOf: className]; [matrix insertRow:i]; cell = [matrix cellAtRow:i column:0]; [cell setStringValue: className]; [cell setLeaf: ([sub count] == 0)]; } } @end apps-gorm-gorm-1_5_0/GormCore/GormClassInspector.h000066400000000000000000000040421475375552500222170ustar00rootroot00000000000000/** GormClassInspector allow user to select custom classes Copyright (C) 2002 Free Software Foundation, Inc. Author: Gregory John Casamento Date: September 2002 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All Rights reserved */ #include #include @class GormClassManager; @interface GormClassInspector : IBInspector { // outlets id _actionTable; id _addAction; id _addOutlet; id _classField; id _outletTable; id _parentClass; id _removeAction; id _removeOutlet; id _selectClass; id _search; id _searchText; id _tabView; // internal vars NSString *_currentClass; id _theobject; id _actionData; id _outletData; id _parentClassData; // class manager.. GormClassManager *_classManager; } - (void) addAction: (id)sender; - (void) removeAction: (id)sender; - (void) addOutlet: (id)sender; - (void) removeOutlet: (id)sender; - (void) select: (id)sender; - (void) searchForClass: (id)sender; - (void) selectClass: (id)sender; - (NSString *) _currentClass; - (void) _refreshView; - (void) handleNotification: (NSNotification *)notification; - (void) changeClassName: (id)sender; - (void) selectAction: (id)sender; - (void) selectOutlet: (id)sender; @end apps-gorm-gorm-1_5_0/GormCore/GormClassInspector.m000066400000000000000000000551431475375552500222340ustar00rootroot00000000000000/** GormClassInspector allow user to select custom classes Copyright (C) 2003 Free Software Foundation, Inc. Author: Gregory John Casamento Date: March 2003 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All rights reserved */ #include #include #include "GormClassInspector.h" #include "GormClassManager.h" #include "GormDocument.h" #include "GormFunctions.h" #include "GormPrivate.h" #include "GormProtocol.h" NSNotificationCenter *nc = nil; // interfaces @interface GormDocument (GormClassInspectorAdditions) - (void) collapseClass: (NSString *)className; - (void) reloadClasses; @end // the data source classes for each of the tables... @interface GormOutletDataSource : NSObject { id inspector; } - (void) setInspector: (id)ins; @end @interface GormActionDataSource : NSObject { id inspector; } - (void) setInspector: (id)ins; @end @interface GormClassesDataSource : NSObject { id inspector; } - (void) setInspector: (id)ins; @end // implementation @implementation GormDocument (GormClassInspectorAdditions) - (void) collapseClass: (NSString *)className { NSDebugLog(@"%@",className); [classesView resetObject: className]; } - (void) reloadClasses { [classesView reloadData]; } @end @implementation GormOutletDataSource - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { NSArray *list = [[(id)[NSApp delegate] classManager] allOutletsForClassNamed: [inspector _currentClass]]; return [list count]; } - (id) tableView: (NSTableView *)tv objectValueForTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { NSArray *list = [[(id)[NSApp delegate] classManager] allOutletsForClassNamed: [inspector _currentClass]]; id value = nil; list = [list sortedArrayUsingSelector: @selector(compare:)]; if([list count] > 0) { value = [list objectAtIndex: rowIndex]; } return value; } - (void) tableView: (NSTableView *)tv setObjectValue: (id)anObject forTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { id classManager = [(id)[NSApp delegate] classManager]; NSString *currentClass = [inspector _currentClass]; NSArray *list = [classManager allOutletsForClassNamed: currentClass]; list = [list sortedArrayUsingSelector: @selector(compare:)]; NSString *name = [list objectAtIndex: rowIndex]; NSString *formattedOutlet = formatOutlet( (NSString *)anObject ); GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; if(![name isEqual: formattedOutlet]) { BOOL removed = [document removeConnectionsWithLabel: name forClassNamed: currentClass isAction: NO]; if(removed) { [classManager replaceOutlet: name withOutlet: formattedOutlet forClassNamed: currentClass]; // collapse the class in question if it's being edited and make // certain that names in the list are kept in sync. [document collapseClass: currentClass]; [document reloadClasses]; [document selectClass: currentClass editClass: NO]; } } } // set methods - (void) setInspector: (id)ins { ASSIGN(inspector, ins); } @end @implementation GormActionDataSource - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { NSArray *list = [[(id)[NSApp delegate] classManager] allActionsForClassNamed: [inspector _currentClass]]; return [list count]; } - (id) tableView: (NSTableView *)tv objectValueForTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { NSArray *list = [[(id)[NSApp delegate] classManager] allActionsForClassNamed: [inspector _currentClass]]; list = [list sortedArrayUsingSelector: @selector(compare:)]; return [list objectAtIndex: rowIndex]; } - (void) tableView: (NSTableView *)tv setObjectValue: (id)anObject forTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { id classManager = [(id)[NSApp delegate] classManager]; NSString *currentClass = [inspector _currentClass]; NSArray *list = [classManager allActionsForClassNamed: currentClass]; list = [list sortedArrayUsingSelector: @selector(compare:)]; NSString *name = [list objectAtIndex: rowIndex]; NSString *formattedAction = formatAction( (NSString *)anObject ); GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; if(![name isEqual: formattedAction]) { BOOL removed = [document removeConnectionsWithLabel: name forClassNamed: currentClass isAction: YES]; if(removed) { [classManager replaceAction: name withAction: formattedAction forClassNamed: currentClass]; // collapse the class in question if it's being edited and make // certain that names in the list are kept in sync. [document collapseClass: currentClass]; [document reloadClasses]; [document selectClass: currentClass editClass: NO]; } } } // set method - (void) setInspector: (id)ins { ASSIGN(inspector, ins); } @end @implementation GormClassesDataSource - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { NSArray *list = [[(id)[NSApp delegate] classManager] allClassNames]; return [list count]; } - (id) tableView: (NSTableView *)tv objectValueForTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { NSArray *list = [[(id)[NSApp delegate] classManager] allClassNames]; id value = nil; list = [list sortedArrayUsingSelector: @selector(compare:)]; if([list count] > 0) { value = [list objectAtIndex: rowIndex]; } return value; } - (void) tableView: (NSTableView *)tv setObjectValue: (id)anObject forTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { // cannot replace any values for this data source... } // set methods - (void) setInspector: (id)ins { ASSIGN(inspector, ins); } @end @implementation GormClassInspector + (void) initialize { if (self == [GormClassInspector class]) { nc = [NSNotificationCenter defaultCenter]; } } - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; // initialize all member variables... _actionTable = nil; _addAction = nil; _addOutlet = nil; _classField = nil; _outletTable = nil; _removeAction = nil; _removeOutlet = nil; _tabView = nil; _currentClass = nil; _actionData = nil; _outletData = nil; _parentClassData = nil; // load the gui... if (![bundle loadNibNamed: @"GormClassInspector" owner: self topLevelObjects: NULL]) { NSLog(@"Could not open gorm GormClassInspector"); return nil; } [nc addObserver: self selector: @selector(handleNotification:) name: GormDidModifyClassNotification object: nil]; } return self; } - (void) dealloc { RELEASE(_actionData); RELEASE(_outletData); RELEASE(_parentClassData); [super dealloc]; } - (void) awakeFromNib { // instantiate.. _actionData = [[GormActionDataSource alloc] init]; _outletData = [[GormOutletDataSource alloc] init]; _parentClassData = [[GormClassesDataSource alloc] init]; // initialize.. [_actionData setInspector: self]; [_outletData setInspector: self]; [_parentClassData setInspector: self]; // use.. [_actionTable setDataSource: _actionData]; [_outletTable setDataSource: _outletData]; [_parentClass setDataSource: _parentClassData]; [_parentClass setDoubleAction: @selector(selectClass:)]; [_parentClass setTarget: self]; // delegate... [_actionTable setDelegate: self]; [_outletTable setDelegate: self]; [_parentClass setDelegate: self]; } - (void) _refreshView { id addActionCell = [_addAction cell]; id removeActionCell = [_removeAction cell]; id addOutletCell = [_addOutlet cell]; id removeOutletCell = [_removeOutlet cell]; id selectClassCell = [_selectClass cell]; id searchCell = [_search cell]; BOOL isEditable = [_classManager isCustomClass: [self _currentClass]]; BOOL isFirstResponder = [[self _currentClass] isEqualToString: @"FirstResponder"]; NSArray *list = [_classManager allClassNames]; NSString *superClass = [_classManager parentOfClass: [self _currentClass]]; NSUInteger index = [list indexOfObject: superClass]; [_classField setStringValue: [self _currentClass]]; [_outletTable reloadData]; [_actionTable reloadData]; [_parentClass reloadData]; // [_outletTable deselectAll: self]; // [_actionTable deselectAll: self]; // activate for actions... [addActionCell setEnabled: YES]; [removeActionCell setEnabled: NO]; // YES]; // activate for outlet... [addOutletCell setEnabled: (isEditable && !isFirstResponder)]; [removeOutletCell setEnabled: NO]; // (isEditable && !isFirstResponder)]; // activate select class... [selectClassCell setEnabled: (isEditable && !isFirstResponder)]; [_parentClass setEnabled: (isEditable && !isFirstResponder)]; [searchCell setEnabled: (isEditable && !isFirstResponder)]; [_classField setEditable: (isEditable && !isFirstResponder)]; [_classField setBackgroundColor: ((isEditable && !isFirstResponder)?[NSColor textBackgroundColor]:[NSColor selectedTextBackgroundColor])]; // select the parent class if(index != NSNotFound && list != nil) { [_parentClass selectRow: index byExtendingSelection: NO]; [_parentClass scrollRowToVisible: index]; } } - (void) addAction: (id)sender { NS_DURING { GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; if(document != nil) { NSString *className = [self _currentClass]; NSString *newAction = [_classManager addNewActionToClassNamed: className]; NSArray *list = [_classManager allActionsForClassNamed: className]; NSInteger row = [list indexOfObject: newAction]; [document collapseClass: className]; [document reloadClasses]; [nc postNotificationName: IBInspectorDidModifyObjectNotification object: _classManager]; [_actionTable reloadData]; [_actionTable scrollRowToVisible: row]; [_actionTable selectRow: row byExtendingSelection: NO]; [document selectClass: className]; [super ok: sender]; } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; } - (void) addOutlet: (id)sender { NS_DURING { GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; if(document != nil) { NSString *className = [self _currentClass]; NSString *newOutlet = [_classManager addNewOutletToClassNamed: className]; NSArray *list = [_classManager allOutletsForClassNamed: className]; NSInteger row = [list indexOfObject: newOutlet]; [document collapseClass: className]; [document reloadClasses]; [nc postNotificationName: IBInspectorDidModifyObjectNotification object: _classManager]; [_outletTable reloadData]; [_outletTable scrollRowToVisible: row]; [_outletTable selectRow: row byExtendingSelection: NO]; [document selectClass: className]; [super ok: sender]; } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; } - (void) removeAction: (id)sender { NS_DURING { NSInteger i = [_actionTable selectedRow]; NSString *className = [self _currentClass]; NSArray *list = [_classManager allActionsForClassNamed: className]; BOOL removed = NO; BOOL isCustom = [_classManager isCustomClass: className]; NSString *name = nil; GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; if(document != nil) { // check the count... if(isCustom || [_classManager isCategoryForClass: className]) { if([list count] > 0 && i >= 0 && i < [list count]) { [_actionTable deselectAll: self]; name = [list objectAtIndex: i]; if(isCustom || [_classManager isAction: name onCategoryForClassNamed: className]) { removed = [document removeConnectionsWithLabel: name forClassNamed: _currentClass isAction: YES]; } } if(removed) { [super ok: sender]; [document collapseClass: className]; [document reloadClasses]; [_classManager removeAction: name fromClassNamed: className]; [nc postNotificationName: IBInspectorDidModifyObjectNotification object: _classManager]; [_actionTable reloadData]; [document selectClass: className]; } } } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; } - (void) removeOutlet: (id)sender { NS_DURING { NSInteger i = [_outletTable selectedRow]; NSString *className = [self _currentClass]; NSArray *list = [_classManager allOutletsForClassNamed: className]; BOOL removed = NO; NSString *name = nil; GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; if(document != nil) { // check the count... if([list count] > 0 && i >= 0 && i < [list count]) { [_outletTable deselectAll: self]; name = [list objectAtIndex: i]; removed = [document removeConnectionsWithLabel: name forClassNamed: _currentClass isAction: NO]; } if(removed) { [super ok: sender]; [document collapseClass: className]; [document reloadClasses]; [_classManager removeOutlet: name fromClassNamed: className]; [nc postNotificationName: IBInspectorDidModifyObjectNotification object: _classManager]; [_outletTable reloadData]; [document selectClass: className]; } } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; } - (void) select: (id)sender { NSLog(@"select..."); } - (void) searchForClass: (id)sender { NSArray *list = [_classManager allClassNames]; NSString *stringValue = [_searchText stringValue]; NSInteger index = [list indexOfObject: stringValue]; NSLog(@"Search... %@",[_searchText stringValue]); if(index != NSNotFound && list != nil && [stringValue isEqualToString: @"FirstResponder"] == NO) { // select the parent class [_parentClass selectRow: index byExtendingSelection: NO]; [_parentClass scrollRowToVisible: index]; } } - (void) selectClass: (id)sender { NSArray *list = [_classManager allClassNames]; NSInteger row = [_parentClass selectedRow]; NS_DURING { if(row >= 0) { NSString *newParent = [list objectAtIndex: row]; NSString *name = [self _currentClass]; GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; // if it's a custom class, let it go, if not do nothing. if(document != nil) { if([_classManager isCustomClass: name]) { NSString *title = _(@"Modifying/Reparenting Class"); NSString *msg = [NSString stringWithFormat: _(@"This action may break existing connections " @"to instances of class '%@'" @"and it's subclasses. Continue?"), name]; NSInteger retval = -1; BOOL removed = NO; [super ok: sender]; // ask the user if he/she wants to continue... retval = NSRunAlertPanel(title, msg,_(@"OK"),_(@"Cancel"), nil, nil); if (retval == NSAlertDefaultReturn) { removed = YES; } else { removed = NO; } // if removed, move the class and notify... if(removed) { NSString *oldSuper = [_classManager superClassNameForClassNamed: name]; [_classManager setSuperClassNamed: newParent forClassNamed: name]; [document refreshConnectionsForClassNamed: name]; [nc postNotificationName: IBInspectorDidModifyObjectNotification object: _classManager]; [document collapseClass: oldSuper]; [document collapseClass: name]; [document reloadClasses]; [document selectClass: name]; } } } } } NS_HANDLER { NSLog(@"%@",[localException reason]); } NS_ENDHANDLER; } - (void) changeClassName: (id)sender { NSString *name = [self _currentClass]; NSString *newName = [sender stringValue]; GormDocument *document = (GormDocument *)[(id )[NSApp delegate] activeDocument]; BOOL flag = NO; // check to see if the user wants to do this and rename the connections. flag = [document renameConnectionsForClassNamed: name toName: newName]; if(flag) { [document collapseClass: name]; [_classManager renameClassNamed: name newName: newName]; [nc postNotificationName: IBInspectorDidModifyObjectNotification object: _classManager]; [document reloadClasses]; [document selectClass: newName]; [super ok: sender]; } } - (void) selectAction: (id)sender { NSInteger row = [sender selectedRow]; NSArray *actions = [_classManager allActionsForClassNamed: _currentClass]; if(row <= [actions count]) { BOOL isCustom = [_classManager isCustomClass: _currentClass]; id cell = [_removeAction cell]; NSString *action = [actions objectAtIndex: row]; BOOL isAction = [_classManager isAction: action ofClass: _currentClass]; BOOL isActionOnCategory = [_classManager isAction: action onCategoryForClassNamed: _currentClass]; [cell setEnabled: ((isCustom && isAction) || isActionOnCategory)]; } } - (void) selectOutlet: (id)sender { NSInteger row = [sender selectedRow]; NSArray *outlets = [_classManager allOutletsForClassNamed: _currentClass]; if(row <= [outlets count]) { BOOL isCustom = [_classManager isCustomClass: _currentClass]; BOOL isFirstResponder = [_currentClass isEqualToString: @"FirstResponder"]; id cell = [_removeOutlet cell]; NSString *outlet = [outlets objectAtIndex: row]; BOOL isOutlet = [_classManager isOutlet: outlet ofClass: _currentClass]; [cell setEnabled: (isOutlet && isCustom && !isFirstResponder)]; } } - (void) clickOnClass: (id)sender { NSLog(@"Click on class %@",sender); } - (void) setObject: (id)anObject { NSInteger outletsCount = 0; NSInteger actionsCount = 0; NSTabViewItem *item = nil; if([anObject isKindOfClass: [GormClassProxy class]]) { [super setObject: anObject]; ASSIGN(_classManager, [(id)[NSApp delegate] classManager]); ASSIGN(_currentClass, [object className]); outletsCount = [[_classManager allOutletsForClassNamed: _currentClass] count]; actionsCount = [[_classManager allActionsForClassNamed: _currentClass] count]; item = [_tabView tabViewItemAtIndex: 1]; // actions; [item setLabel: [NSString stringWithFormat: @"Actions (%ld)",(long)actionsCount]]; item = [_tabView tabViewItemAtIndex: 0]; // outlets; [item setLabel: [NSString stringWithFormat: @"Outlets (%ld)",(long)outletsCount]]; [_tabView setNeedsDisplay: YES]; [self _refreshView]; } else { NSLog(@"Got %@ set to class edit inspector",anObject); } } - (NSString *) _currentClass { return AUTORELEASE([[object className] copy]); } - (void) handleNotification: (NSNotification *)notification { if([notification object] == _classManager && (id)[[NSApp delegate] activeDocument] != nil) { [self _refreshView]; } } // table delegate/data source methods... - (BOOL) tableView: (NSTableView *)tableView shouldEditTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { BOOL result = NO; if(tableView != _parentClass) { NSArray *list = nil; NSString *name = nil; NSString *className = [self _currentClass]; if(tableView == _actionTable) { list = [_classManager allActionsForClassNamed: className]; name = [list objectAtIndex: rowIndex]; } else if(tableView == _outletTable) { list = [_classManager allOutletsForClassNamed: className]; name = [list objectAtIndex: rowIndex]; } if([_classManager isCustomClass: className]) { if(tableView == _actionTable) { result = [_classManager isAction: name ofClass: className]; } else if(tableView == _outletTable) { result = [_classManager isOutlet: name ofClass: className]; } } else { result = [_classManager isAction: name onCategoryForClassNamed: className]; } } return result; } - (void) tableView: (NSTableView *)tableView willDisplayCell: (id)aCell forTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { NSString *name = [aCell stringValue]; NSString *className = [self _currentClass]; if (tableView == _parentClass) { [aCell setTextColor: [NSColor textColor]]; } else if (tableView == _actionTable) { if(([_classManager isCustomClass: className] && [_classManager isAction: name ofClass: className]) || [_classManager isAction: name onCategoryForClassNamed: className]) { [aCell setTextColor: [NSColor textColor]]; } else { [aCell setTextColor: [NSColor selectedTextColor]]; } } else if( tableView == _outletTable) { if([_classManager isCustomClass: className] && [_classManager isOutlet: name ofClass: className]) { [aCell setTextColor: [NSColor textColor]]; } else { [aCell setTextColor: [NSColor selectedTextColor]]; } } [(NSTextFieldCell *)aCell setScrollable: YES]; } - (BOOL) tableView: (NSTableView *)tv shouldSelectRow: (NSInteger)rowIndex { BOOL result = YES; if(tv == _parentClass) { NSArray *list = [_classManager allClassNames]; NSString *className = [list objectAtIndex: rowIndex]; NSString *name = [self _currentClass]; BOOL isFirstResponder = [className isEqualToString: @"FirstResponder"]; BOOL isCurrentClass = [className isEqualToString: name]; BOOL isSubClass = [_classManager isSuperclass: name linkedToClass: className]; if(isFirstResponder || isCurrentClass || isSubClass) { NSBeep(); result = NO; } } return result; } @end apps-gorm-gorm-1_5_0/GormCore/GormClassManager.h000066400000000000000000000147661475375552500216410ustar00rootroot00000000000000/* GormClassManager.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormClassManager_h #define INCLUDED_GormClassManager_h #import // The custom classes and category arrays will hold only those things which // will be persisted to the .classes file. Since the overall list of classes will // not change it seems that the only thing that we should save is the "delta" // that being the custom classes. Once loaded they can be "merged" in with the // list of base classes, in gui, to form the full list of classes. @interface GormClassManager : NSObject { NSMutableDictionary *_classInformation; NSMutableArray *_customClasses; NSMutableDictionary *_customClassMap; NSMutableArray *_categoryClasses; id _document; } - (id) initWithDocument: (id)aDocument; /* Managing actions and outlets */ - (void) addAction: (NSString *)anAction forObject: (id)anObject; - (void) addOutlet: (NSString *)anOutlet forObject: (id)anObject; - (NSArray *) allActionsForClassNamed: (NSString *)className; - (NSArray *) allActionsForObject: (id)anObject; - (NSArray *) extraActionsForObject: (id)anObject; - (NSArray *) allOutletsForClassNamed: (NSString *)className; - (NSArray *) allOutletsForObject: (id)anObject; - (NSArray *) extraOutletsForObject: (id)anObject; - (NSArray *) allClassNames; - (void) removeAction: (NSString *)anAction forObject: (id)anObject; - (void) removeOutlet: (NSString *)anOutlet forObject: (id)anObject; - (void) removeAction: (NSString *)anAction fromClassNamed: (NSString *)anObject; - (void) removeOutlet: (NSString *)anOutlet fromClassNamed: (NSString *)anObject; - (void) addOutlet: (NSString *)anOutlet forClassNamed: (NSString *)className; - (void) addAction: (NSString *)anAction forClassNamed: (NSString *)className; - (void) addActions: (NSArray *)actions forClassNamed: (NSString *)className; - (void) addOutlets: (NSArray *)outlets forClassNamed: (NSString *)className; - (NSString *) addNewActionToClassNamed: (NSString *)name; - (NSString *) addNewOutletToClassNamed: (NSString *)name; - (void) replaceAction: (NSString *)oldAction withAction: (NSString *)newAction forClassNamed: (NSString *)className; - (void) replaceOutlet: (NSString *)oldOutlet withOutlet: (NSString *)newOutlet forClassNamed: (NSString *)className; /* Managing classes and subclasses */ - (BOOL) renameClassNamed: (NSString *)oldName newName: (NSString *)name; - (void) removeClassNamed: (NSString *)className; - (NSString *) addClassWithSuperClassName: (NSString *)name; - (NSArray *) subClassesOf: (NSString *)superclass; - (NSArray *) allSubclassesOf: (NSString *)superClass; - (NSArray *) customSubClassesOf: (NSString *)superclass; - (NSArray *) allCustomSubclassesOf: (NSString *)superclass; - (NSArray *) allCustomClassNames; - (BOOL) addClassNamed: (NSString *)className withSuperClassNamed: (NSString *)superClassName withActions: (NSArray *)actions withOutlets: (NSArray *)outlets; - (BOOL) addClassNamed: (NSString *)class_name withSuperClassNamed: (NSString *)super_class_name withActions: (NSArray *)_actions withOutlets: (NSArray *)_outlets isCustom: (BOOL) isCustom; - (BOOL) setSuperClassNamed: (NSString *)superclass forClassNamed: (NSString *)subclass; - (NSString *)parentOfClass: (NSString *)aClass; - (NSString *) superClassNameForClassNamed: (NSString *)className; - (BOOL) isSuperclass: (NSString *)superclass linkedToClass: (NSString *)subclass; - (NSDictionary *) dictionaryForClassNamed: (NSString *)className; - (NSString *) uniqueClassNameFrom: (NSString *)name; - (BOOL) isRootClass: (NSString *)className; - (BOOL) outletExists: (NSString *)outlet onClassNamed: (NSString *)className; - (BOOL) actionExists: (NSString *)action onClassNamed: (NSString *)className; /* Managing custom classes */ - (BOOL) isCustomClass: (NSString *)className; - (BOOL) isNonCustomClass: (NSString *)className; - (BOOL) isCategoryForClass: (NSString *)className; - (BOOL) isKnownClass: (NSString *)className; - (BOOL) isAction: (NSString *)actionName ofClass: (NSString *)className; - (BOOL) isOutlet: (NSString *)outletName ofClass: (NSString *)className; - (NSArray *) allSuperClassesOf: (NSString *)className; - (BOOL) canInstantiateClassNamed: (NSString *)className; - (NSString *) customClassForObject: (id)object; - (NSString *) customClassForName: (NSString *)name; - (void) setCustomClass: (NSString *)className forName: (NSString *)name; - (void) removeCustomClassForName: (NSString *)name; - (NSMutableDictionary *) customClassMap; - (void) setCustomClassMap: (NSMutableDictionary *)dict; - (BOOL) isCustomClassMapEmpty; - (NSString *) nonCustomSuperClassOf: (NSString *)className; - (BOOL) isAction: (NSString *)actionName onCategoryForClassNamed: (NSString *)className; - (NSString *) classNameForObject: (id)object; - (NSString *) findClassByName: (NSString *)name; - (NSDictionary *) classInformation; - (NSDictionary *) customClassInformation; /* Parsing and creating classes */ - (BOOL) makeSourceAndHeaderFilesForClass: (NSString *)className withName: (NSString *)sourcePath and: (NSString *)headerPath; - (BOOL) parseHeader: (NSString *)headerPath; /* Loading and saving */ - (BOOL) saveToFile: (NSString *)path; - (NSData *) data; - (NSData *) nibData; - (BOOL) loadFromFile: (NSString *)path; - (BOOL) loadCustomClasses: (NSString *)path; - (BOOL) loadCustomClassesWithData: (NSData *)data; - (BOOL) loadCustomClassesWithDict: (NSDictionary *)dict; - (BOOL) loadNibFormatCustomClassesWithData: (NSData *)data; - (BOOL) loadNibFormatCustomClassesWithDict: (NSDictionary *)dict; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormClassManager.m000066400000000000000000001764261475375552500216500ustar00rootroot00000000000000/* GormClassManager.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #import #import #import "GormPrivate.h" #import "GormCustomView.h" #import "GormDocument.h" #import "GormFilesOwner.h" #import "GormPalettesManager.h" #import "GormAbstractDelegate.h" /** * Just a few definitions to start things out. To increase efficiency, * so that Gorm doesn't need to constantly derive the method list for * each class, it is necessary to cache some information. Here is the * way it works. * * Actions = All actions on that class, excluding superclass methods. * AllActions = All actions on that class including superclass methods. * ExtraActions = All actions added during this session. * * Outlets = All actions on that class, excluding superclass methods. * AllOutlets = All actions on that class including superclass methods. * ExtraOutlets = All actions added during this session. */ /** Private methods not accesible from outside */ @interface GormClassManager (Private) - (NSMutableDictionary*) classInfoForClassName: (NSString*)className; - (NSMutableDictionary*) classInfoForObject: (id)anObject; - (void) touch; - (void) convertDictionary: (NSMutableDictionary *)dict; @end @interface NSMutableArray (Private) - (void) mergeObject: (id)object; - (void) mergeObjectsFromArray: (NSArray *)array; @end @implementation NSMutableArray (Private) - (void) mergeObject: (id)object { if ([self containsObject: object] == NO) { [self addObject: object]; [self sortUsingSelector: @selector(compare:)]; } } - (void) mergeObjectsFromArray: (NSArray *)array { id obj = nil; if(array != nil) { NSEnumerator *enumerator = [array objectEnumerator]; while ((obj = [enumerator nextObject]) != nil) { [self mergeObject: obj]; } } } @end @implementation GormClassManager - (id) initWithDocument: (id)aDocument { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path; _document = aDocument; // the _document retains us, this is for convenience path = [bundle pathForResource: @"ClassInformation" ofType: @"plist"]; if (path == nil) { NSLog(@"ClassInformation.plist missing from resources"); } else { GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; NSDictionary *importedClasses = [palettesManager importedClasses]; NSEnumerator *en = [importedClasses objectEnumerator]; NSDictionary *description = nil; // load the classes, initialize the custom class array and map.. if([self loadFromFile: path]) { NSMutableDictionary *classDict = [_classInformation objectForKey: @"FirstResponder"]; NSMutableArray *firstResponderActions = [classDict objectForKey: @"Actions"]; _customClasses = [[NSMutableArray alloc] initWithCapacity: 1]; _customClassMap = [[NSMutableDictionary alloc] initWithCapacity: 10]; _categoryClasses = [[NSMutableArray alloc] initWithCapacity: 1]; // add the imported classes to the class information list... [_classInformation addEntriesFromDictionary: importedClasses]; // add all of the actions to the FirstResponder while((description = [en nextObject]) != nil) { NSArray *actions = [description objectForKey: @"Actions"]; NSEnumerator *aen = [actions objectEnumerator]; NSString *actionName = nil; // add the actions to the first responder... while((actionName = [aen nextObject]) != nil) { if(![firstResponderActions containsObject: actionName]) { [firstResponderActions addObject: [actionName copy]]; } } } // incorporate the added actions into the list and sort. [self allActionsForClassNamed: @"FirstResponder"]; } } } return self; } - (void) touch { [[NSNotificationCenter defaultCenter] postNotificationName: GormDidModifyClassNotification object: self]; [_document touch]; } - (void) convertDictionary: (NSMutableDictionary *)dict { [dict removeObjectsForKeys: [_classInformation allKeys]]; } - (NSString *) uniqueClassNameFrom: (NSString *)name { NSString *search = [NSString stringWithString: name]; NSInteger i = 1; while([_classInformation objectForKey: search]) { search = [name stringByAppendingString: [NSString stringWithFormat: @"%ld",(long)i++]]; } return search; } - (NSString *) addClassWithSuperClassName: (NSString*)name { if (([self isRootClass: name] || [_classInformation objectForKey: name] != nil) && [name isEqual: @"FirstResponder"] == NO) { NSMutableDictionary *classInfo; NSMutableArray *outlets; NSMutableArray *actions; NSString *className = [self uniqueClassNameFrom: @"NewClass"]; classInfo = [[NSMutableDictionary alloc] initWithCapacity: 3]; outlets = [[NSMutableArray alloc] initWithCapacity: 0]; actions = [[NSMutableArray alloc] initWithCapacity: 0]; [classInfo setObject: outlets forKey: @"Outlets"]; [classInfo setObject: actions forKey: @"Actions"]; [classInfo setObject: name forKey: @"Super"]; [_classInformation setObject: classInfo forKey: className]; [_customClasses addObject: className]; [self touch]; [[NSNotificationCenter defaultCenter] postNotificationName: GormDidAddClassNotification object: self]; return className; } return nil; } - (NSString *) addNewActionToClassNamed: (NSString *)name { NSArray *combined = [self allActionsForClassNamed: name]; NSString *newAction = @"newAction"; NSString *search = [newAction stringByAppendingString: @":"]; NSString *new = nil; NSInteger i = 1; while ([combined containsObject: search]) { new = [newAction stringByAppendingFormat: @"%ld", (long)i++]; search = [new stringByAppendingString: @":"]; } [self addAction: search forClassNamed: name]; return search; } - (NSString *) addNewOutletToClassNamed: (NSString *)name { NSArray *combined = [self allOutletsForClassNamed: name]; NSString *newOutlet = @"newOutlet"; NSString *new = newOutlet; NSInteger i = 1; while ([combined containsObject: new]) { new = [newOutlet stringByAppendingFormat: @"%ld", (long)i++]; } [self addOutlet: new forClassNamed: name]; return new; } - (BOOL) addClassNamed: (NSString *)className withSuperClassNamed: (NSString *)superClassName withActions: (NSArray *)actions withOutlets: (NSArray *)outlets { return [self addClassNamed: className withSuperClassNamed: superClassName withActions: actions withOutlets: outlets isCustom: YES]; } - (BOOL) addClassNamed: (NSString *)className withSuperClassNamed: (NSString *)superClassName withActions: (NSArray *)actions withOutlets: (NSArray *)outlets isCustom: (BOOL) isCustom { BOOL result = NO; NSString *classNameCopy = [NSString stringWithString: className]; NSString *superClassNameCopy = (superClassName != nil)?[NSString stringWithString: superClassName]:nil; NSMutableArray *actionsCopy = (actions != nil)?[NSMutableArray arrayWithArray: actions]:[NSMutableArray array]; NSMutableArray *outletsCopy = (outlets != nil)?[NSMutableArray arrayWithArray: outlets]:[NSMutableArray array]; // We make an autoreleased copy of all of the inputs. This prevents changes // to the original objects from reflecting here. GJC if ([self isRootClass: superClassNameCopy] || ([_classInformation objectForKey: superClassNameCopy] != nil && [superClassNameCopy isEqualToString: @"FirstResponder"] == NO)) { NSMutableDictionary *classInfo; if (![_classInformation objectForKey: classNameCopy]) { NSEnumerator *e = [actionsCopy objectEnumerator]; id action = nil; NSArray *superActions = [self allActionsForClassNamed: superClassNameCopy]; NSArray *superOutlets = [self allOutletsForClassNamed: superClassNameCopy]; [self touch]; classInfo = [[NSMutableDictionary alloc] initWithCapacity: 3]; // if an outlet/action is defined on the superclass before this // class is added, the superclass' entry takes precedence. [actionsCopy removeObjectsInArray: superActions]; [outletsCopy removeObjectsInArray: superOutlets]; [classInfo setObject: outletsCopy forKey: @"Outlets"]; [classInfo setObject: actionsCopy forKey: @"Actions"]; if(superClassNameCopy != nil) { [classInfo setObject: superClassNameCopy forKey: @"Super"]; } [_classInformation setObject: classInfo forKey: classNameCopy]; // if it's a custom class add it to the list. if(isCustom) { [_customClasses addObject: classNameCopy]; } // copy all actions from the class imported to the first responder while((action = [e nextObject])) { [self addAction: action forClassNamed: @"FirstResponder"]; } result = YES; // post the notification [[NSNotificationCenter defaultCenter] postNotificationName: GormDidAddClassNotification object: self]; } else { NSDebugLog(@"Class already exists"); result = NO; } } return result; } - (void) addAction: (NSString *)anAction forObject: (id)anObject { [self addAction: anAction forClassNamed: [anObject className]]; } - (void) addAction: (NSString *)action forClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; NSMutableArray *extraActions = [info objectForKey: @"ExtraActions"]; NSMutableArray *allActions = [info objectForKey: @"AllActions"]; NSString *anAction = [action copy]; NSArray *subClasses = [self allSubclassesOf: className]; NSEnumerator *en = [subClasses objectEnumerator]; NSString *subclassName = nil; if (action == nil || className == nil) { NSLog(@"Attempt to add nil action = %@ or className = %@ to class manager", action, className); return; } // check all if ([allActions containsObject: anAction]) { return; } if ([self isNonCustomClass: className]) { if([_categoryClasses containsObject: className] == NO) { [_categoryClasses addObject: className]; } } if (extraActions == nil) { extraActions = [[NSMutableArray alloc] initWithCapacity: 1]; [info setObject: extraActions forKey: @"ExtraActions"]; } [extraActions mergeObject: anAction]; [allActions mergeObject: anAction]; if(![className isEqualToString: @"FirstResponder"]) { [self addAction: anAction forClassNamed: @"FirstResponder"]; } while((subclassName = [en nextObject]) != nil) { NSDictionary *subInfo = [_classInformation objectForKey: subclassName]; NSMutableArray *subAll = [subInfo objectForKey: @"AllActions"]; [subAll mergeObject: anAction]; } [self touch]; } - (void) addOutlet: (NSString *)outlet forObject: (id)anObject { [self addOutlet: outlet forClassNamed: [anObject className]]; } - (void) addOutlet: (NSString *)outlet forClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; NSMutableArray *extraOutlets = [info objectForKey: @"ExtraOutlets"]; NSMutableArray *allOutlets = [info objectForKey: @"AllOutlets"]; NSString *anOutlet = [outlet copy]; NSArray *subClasses = [self allSubclassesOf: className]; NSEnumerator *en = [subClasses objectEnumerator]; NSString *subclassName = nil; // check all if ([allOutlets containsObject: anOutlet]) { return; } if (extraOutlets == nil) { extraOutlets = [[NSMutableArray alloc] initWithCapacity: 1]; [info setObject: extraOutlets forKey: @"ExtraOutlets"]; } [extraOutlets mergeObject: anOutlet]; [allOutlets mergeObject: anOutlet]; while((subclassName = [en nextObject]) != nil) { NSDictionary *subInfo = [_classInformation objectForKey: subclassName]; NSMutableArray *subAll = [subInfo objectForKey: @"AllOutlets"]; [subAll mergeObject: anOutlet]; } [self touch]; } - (void) replaceAction: (NSString *)oldAction withAction: (NSString *)aNewAction forClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; NSMutableArray *extraActions = [info objectForKey: @"ExtraActions"]; NSMutableArray *actions = [info objectForKey: @"Actions"]; NSMutableArray *allActions = [info objectForKey: @"AllActions"]; NSString *newAction = AUTORELEASE([aNewAction copy]); NSEnumerator *en = [[self subClassesOf: className] objectEnumerator]; NSString *subclassName = nil; if ([allActions containsObject: newAction] || [extraActions containsObject: newAction]) { return; } // replace the action in the appropriate places. if ([extraActions containsObject: oldAction]) { NSInteger extra_index = [extraActions indexOfObject: oldAction]; [extraActions replaceObjectAtIndex: extra_index withObject: newAction]; } if ([actions containsObject: oldAction]) { NSInteger actions_index = [actions indexOfObject: oldAction]; [actions replaceObjectAtIndex: actions_index withObject: newAction]; } if ([allActions containsObject: oldAction]) { NSInteger all_index = [allActions indexOfObject: oldAction]; [allActions replaceObjectAtIndex: all_index withObject: newAction]; } [self touch]; // add the action to all of the subclasses, in the "AllActions" section... while((subclassName = [en nextObject]) != nil) { [self replaceAction: oldAction withAction: newAction forClassNamed: subclassName]; } if(![className isEqualToString: @"FirstResponder"]) { [self replaceAction: oldAction withAction: newAction forClassNamed: @"FirstResponder"]; } } - (void) replaceOutlet: (NSString *)oldOutlet withOutlet: (NSString *)aNewOutlet forClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; NSMutableArray *extraOutlets = [info objectForKey: @"ExtraOutlets"]; NSMutableArray *outlets = [info objectForKey: @"Outlets"]; NSMutableArray *allOutlets = [info objectForKey: @"AllOutlets"]; NSString *newOutlet = AUTORELEASE([aNewOutlet copy]); NSEnumerator *en = [[self subClassesOf: className] objectEnumerator]; NSString *subclassName = nil; if ([allOutlets containsObject: newOutlet] || [extraOutlets containsObject: newOutlet]) { return; } // replace outlets in appropriate places... if ([extraOutlets containsObject: oldOutlet]) { NSInteger extraIndex = [extraOutlets indexOfObject: oldOutlet]; [extraOutlets replaceObjectAtIndex: extraIndex withObject: newOutlet]; } if ([outlets containsObject: oldOutlet]) { NSInteger outletsIndex = [outlets indexOfObject: oldOutlet]; [outlets replaceObjectAtIndex: outletsIndex withObject: newOutlet]; } if ([allOutlets containsObject: oldOutlet]) { NSInteger allIndex = [allOutlets indexOfObject: oldOutlet]; [allOutlets replaceObjectAtIndex: allIndex withObject: newOutlet]; } [self touch]; // add the action to all of the subclasses, in the "AllActions" section... while((subclassName = [en nextObject]) != nil) { [self replaceOutlet: oldOutlet withOutlet: newOutlet forClassNamed: subclassName]; } } - (void) removeAction: (NSString *)anAction forObject: (id)anObject { [self removeAction: anAction fromClassNamed: [anObject className]]; } - (void) removeAction: (NSString *)anAction fromClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; NSMutableArray *extraActions = [info objectForKey: @"ExtraActions"]; NSMutableArray *allActions = [info objectForKey: @"AllActions"]; NSEnumerator *en = [[self subClassesOf: className] objectEnumerator]; NSString *subclassName = nil; if ([extraActions containsObject: anAction] == YES || [allActions containsObject: anAction] == YES) { NSString *superName = [info objectForKey: @"Super"]; if (superName != nil) { NSArray *superActions; /* * If this action is new in this class (ie not overriding an * action in a parent) then we remove it from the list of all * actions that the object responds to. */ superActions = [self allActionsForClassNamed: superName]; if ([superActions containsObject: anAction] == NO) { NSMutableArray *array = [info objectForKey: @"AllActions"]; NSMutableArray *actions = [info objectForKey: @"Actions"]; [array removeObject: anAction]; [actions removeObject: anAction]; } } else { NSMutableArray *array = [info objectForKey: @"AllActions"]; NSMutableArray *actions = [info objectForKey: @"Actions"]; [array removeObject: anAction]; [actions removeObject: anAction]; } [extraActions removeObject: anAction]; [self touch]; } if([_categoryClasses containsObject: className] && [extraActions count] == 0) { [_categoryClasses removeObject: className]; } if(![className isEqualToString: @"FirstResponder"]) { [self removeAction: anAction fromClassNamed: @"FirstResponder"]; } while((subclassName = [en nextObject]) != nil) { [self removeAction: anAction fromClassNamed: subclassName]; } } - (void) removeOutlet: (NSString *)anOutlet forObject: (id)anObject { [self removeOutlet: anOutlet fromClassNamed: [anObject className]]; } - (void) removeOutlet: (NSString *)anOutlet fromClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; NSMutableArray *extraOutlets = [info objectForKey: @"ExtraOutlets"]; NSMutableArray *allOutlets = [info objectForKey: @"AllOutlets"]; NSEnumerator *en = [[self subClassesOf: className] objectEnumerator]; NSString *subclassName = nil; if ([extraOutlets containsObject: anOutlet] == YES || [allOutlets containsObject: anOutlet] == YES) { NSString *superName = [info objectForKey: @"Super"]; if (superName != nil) { NSArray *superOutlets; // remove the outlet from the other arrays... superOutlets = [self allOutletsForClassNamed: superName]; if ([superOutlets containsObject: anOutlet] == NO) { NSMutableArray *array = [info objectForKey: @"AllOutlets"]; NSMutableArray *actions = [info objectForKey: @"Outlets"]; [array removeObject: anOutlet]; [actions removeObject: anOutlet]; } } else { NSMutableArray *array = [info objectForKey: @"AllOutlets"]; NSMutableArray *actions = [info objectForKey: @"Outlets"]; [array removeObject: anOutlet]; [actions removeObject: anOutlet]; } [extraOutlets removeObject: anOutlet]; [self touch]; } while((subclassName = [en nextObject]) != nil) { [self removeOutlet: anOutlet fromClassNamed: subclassName]; } } - (NSArray *) allActionsForObject: (id)obj { NSString *className; NSArray *actions; Class theClass = [obj class]; NSString *customClassName = [self customClassForObject: obj]; NSDebugLog(@"** ACTIONS"); NSDebugLog(@"Object: %@",obj); NSDebugLog(@"Custom class: %@",customClassName); if (customClassName != nil) { // if the object has been mapped to a custom class, then // get the information for it. className = customClassName; } else if (theClass == [GormFirstResponder class]) { className = @"FirstResponder"; } else if (theClass == [GormFilesOwner class]) { className = [(GormFilesOwner*)obj className]; } else if ([obj isKindOfClass: [GSNibItem class]] == YES) { // this adds support for custom objects className = [obj className]; } else if ([obj isKindOfClass: [GormClassProxy class]] == YES) { // this adds support for class proxies className = [obj className]; } else if ([obj isKindOfClass: [GormCustomView class]] == YES) { // this adds support for custom views className = [obj className]; } else { className = NSStringFromClass(theClass); } if (className == nil) { // NSLog(@"attempt to get actions for non-existent class (%@)", // [obj class]); return nil; } actions = [self allActionsForClassNamed: className]; while (actions == nil && (theClass = class_getSuperclass(theClass)) != nil && theClass != [NSObject class]) { className = NSStringFromClass(theClass); actions = [self allActionsForClassNamed: className]; } NSDebugLog(@"class=%@ actions=%@",className,actions); return actions; } - (NSArray *) allActionsForClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; if (info != nil) { NSMutableArray *allActions = [info objectForKey: @"AllActions"]; if (allActions == nil) { NSString *superName = [info objectForKey: @"Super"]; NSArray *actions = [info objectForKey: @"Actions"]; NSArray *extraActions = [info objectForKey: @"ExtraActions"]; NSArray *superActions; if (superName == nil || [className isEqual: @"FirstResponder"]) { superActions = nil; } else { superActions = [self allActionsForClassNamed: superName]; } if (superActions == nil) { if (actions == nil) { allActions = [[NSMutableArray alloc] init]; } else { allActions = [actions mutableCopy]; } [allActions mergeObjectsFromArray: extraActions]; } else { allActions = [superActions mutableCopy]; [allActions mergeObjectsFromArray: actions]; [allActions mergeObjectsFromArray: extraActions]; } [info setObject: allActions forKey: @"AllActions"]; RELEASE(allActions); } return AUTORELEASE([allActions copy]); } return nil; } - (NSArray *) allCustomClassNames { // return [_customClassMap allKeys]; return _customClasses; } - (NSArray *) allClassNames { return [[_classInformation allKeys] sortedArrayUsingSelector: @selector(compare:)]; } - (NSArray *) allOutletsForObject: (id)obj { NSString *className; NSArray *outlets; Class theClass = [obj class]; NSString *customClassName = [self customClassForObject: obj]; if (customClassName != nil) { // if the object has been mapped to a custom class, then // get the information for it. className = customClassName; } else if (theClass == [GormFirstResponder class]) { return nil; } else if (theClass == [GormFilesOwner class]) { className = [(GormFilesOwner*)obj className]; } else if ([obj isKindOfClass: [GSNibItem class]] == YES) { // this adds support for custom objects className = [(id)obj className]; } else if ([obj isKindOfClass: [GormClassProxy class]] == YES) { // this adds support for class proxies className = [(id)obj className]; } else if ([obj isKindOfClass: [GormCustomView class]] == YES) { // this adds support for custom views className = [(id)obj className]; } else { className = NSStringFromClass(theClass); } if (className == nil) { NSLog(@"attempt to get outlets for non-existent class (%@)", [obj class]); return nil; } outlets = [self allOutletsForClassNamed: className]; while (outlets == nil && (theClass = class_getSuperclass(theClass)) != nil && theClass != [NSObject class]) { className = NSStringFromClass(theClass); outlets = [self allOutletsForClassNamed: className]; } return outlets; } - (NSArray *) allOutletsForClassNamed: (NSString *)className; { NSMutableDictionary *info = [_classInformation objectForKey: className]; if (info != nil) { NSMutableArray *allOutlets = [info objectForKey: @"AllOutlets"]; if (allOutlets == nil) { NSString *superName = [info objectForKey: @"Super"]; NSArray *outlets = [info objectForKey: @"Outlets"]; NSArray *extraOutlets = [info objectForKey: @"ExtraOutlets"]; NSArray *superOutlets; if (superName == nil) { superOutlets = nil; } else { superOutlets = [self allOutletsForClassNamed: superName]; } if (superOutlets == nil) { if (outlets == nil) { allOutlets = [[NSMutableArray alloc] init]; } else { allOutlets = [outlets mutableCopy]; } [allOutlets mergeObjectsFromArray: extraOutlets]; } else { allOutlets = [superOutlets mutableCopy]; [allOutlets mergeObjectsFromArray: outlets]; [allOutlets mergeObjectsFromArray: extraOutlets]; } [info setObject: allOutlets forKey: @"AllOutlets"]; RELEASE(allOutlets); } return AUTORELEASE([allOutlets copy]); } return nil; } - (NSMutableDictionary*) classInfoForClassName: (NSString *)className { NSMutableDictionary *info; info = [_classInformation objectForKey: className]; if (info == nil) { Class theClass = NSClassFromString(className); if (theClass != nil) { theClass = class_getSuperclass(theClass); if (theClass != nil && theClass != [NSObject class]) { NSString *name; NSMutableDictionary *dict; name = NSStringFromClass(theClass); dict = [self classInfoForClassName: name]; if (dict != nil) { id o; info = [[NSMutableDictionary alloc] initWithCapacity: 3]; [info setObject: name forKey: @"Super"]; o = [[self allActionsForClassNamed: name] mutableCopy]; [info setObject: o forKey: @"AllActions"]; o = [[self allOutletsForClassNamed: name] mutableCopy]; [info setObject: o forKey: @"AllOutlets"]; [_classInformation setObject: info forKey: className]; } } } } return info; } - (NSMutableDictionary*) classInfoForObject: (id)obj { NSString *className; Class theClass = [obj class]; if (theClass == [GormFilesOwner class]) { className = [(GormFilesOwner*)obj className]; } else if ([obj isKindOfClass: [GSNibItem class]] == YES) { // this adds support for custom objects className = [(id)obj className]; } else if ([obj isKindOfClass: [GormClassProxy class]] == YES) { // this adds support for class proxies className = [(id)obj className]; } else if ([obj isKindOfClass: [GormCustomView class]] == YES) { // this adds support for custom views className = [(id)obj className]; } else { className = NSStringFromClass(theClass); } if (className == nil) { NSLog(@"attempt to get outlets for non-existent class (%@)", [obj class]); return nil; } return [self classInfoForClassName: className]; } - (BOOL) actionExists: (NSString *)action onClassNamed: (NSString *)className { NSArray *actions = [self allActionsForClassNamed: className]; return [actions containsObject: action]; } - (BOOL) outletExists: (NSString *)outlet onClassNamed: (NSString *)className { NSArray *outlets = [self allOutletsForClassNamed: className]; return [outlets containsObject: outlet]; } - (void) dealloc { RELEASE(_classInformation); RELEASE(_customClassMap); [super dealloc]; } - (NSArray *) extraActionsForObject: (id)anObject { NSMutableDictionary *info = [self classInfoForObject: anObject]; return [info objectForKey: @"ExtraActions"]; } - (NSArray *) extraOutletsForObject: (id)anObject { NSMutableDictionary *info = [self classInfoForObject: anObject]; return [info objectForKey: @"ExtraOutlets"]; } - (void) allSubclassesOf: (NSString *)superclass referenceClassList: (NSArray *)classList intoArray: (NSMutableArray *)array { NSEnumerator *cen = [classList objectEnumerator]; id object = nil; while ((object = [cen nextObject])) { NSDictionary *dictForClass = [_classInformation objectForKey: object]; NSString *superClassName = [dictForClass objectForKey: @"Super"]; if ([superClassName isEqual: superclass] || (superClassName == nil && superclass == nil)) { [array addObject: object]; [self allSubclassesOf: object referenceClassList: classList intoArray: array]; } } } - (NSArray *) allSubclassesOf: (NSString *)superClass { NSMutableArray *array = [NSMutableArray array]; [self allSubclassesOf: superClass referenceClassList: [_classInformation allKeys] intoArray: array]; return [array sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)]; } - (NSArray *) allCustomSubclassesOf: (NSString *)superClass { NSMutableArray *array = [NSMutableArray array]; [self allSubclassesOf: superClass referenceClassList: _customClasses intoArray: array]; return [array sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)]; } - (NSArray *) customSubClassesOf: (NSString *)superclass { NSEnumerator *cen = [_customClasses objectEnumerator]; id object = nil; NSMutableArray *subclasses = [NSMutableArray array]; while ((object = [cen nextObject])) { NSDictionary *dictForClass = [_classInformation objectForKey: object]; if ([[dictForClass objectForKey: @"Super"] isEqual: superclass]) { [subclasses addObject: object]; } } return subclasses; } - (NSArray *) subClassesOf: (NSString *)superclass { NSArray *allClasses = [_classInformation allKeys]; NSEnumerator *cen = [allClasses objectEnumerator]; id object = nil; NSMutableArray *subclasses = [NSMutableArray array]; while ((object = [cen nextObject])) { NSDictionary *dictForClass = [_classInformation objectForKey: object]; NSString *superClassName = [dictForClass objectForKey: @"Super"]; if ([superClassName isEqual: superclass] || (superClassName == nil && superclass == nil)) { [subclasses addObject: object]; } } return [subclasses sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)]; } - (void) removeClassNamed: (NSString *)className { if ([_customClasses containsObject: className]) { NSEnumerator *en = [_customClassMap keyEnumerator]; id object = nil; id owner = nil; [_customClasses removeObject: className]; while((object = [en nextObject]) != nil) { id customClassName = [_customClassMap objectForKey: object]; if(customClassName != nil) { if([className isEqualToString: customClassName]) { NSDebugLog(@"Deleting object -> customClass association %@ -> %@",object,customClassName); [_customClassMap removeObjectForKey: object]; } } } // get the owner and reset the class name to NSApplication. owner = [_document objectForName: @"NSOwner"]; if([className isEqual: [owner className]]) { [owner setClassName: @"NSApplication"]; } } [_classInformation removeObjectForKey: className]; [self touch]; [[NSNotificationCenter defaultCenter] postNotificationName: GormDidDeleteClassNotification object: self]; } - (BOOL) renameClassNamed: (NSString *)oldName newName: (NSString *)newName { id classInfo = [_classInformation objectForKey: oldName]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSString *name = [newName copy]; NSDebugLog(@"Old name %@, new name %@",oldName,name); if (classInfo != nil && [_classInformation objectForKey: name] == nil) { NSUInteger index = 0; NSArray *subclasses = [self subClassesOf: oldName]; RETAIN(classInfo); // prevent loss of the information... [_classInformation removeObjectForKey: oldName]; [_classInformation setObject: classInfo forKey: name]; RELEASE(classInfo); // release our hold on it. if ((index = [_customClasses indexOfObject: oldName]) != NSNotFound) { NSEnumerator *en = [_customClassMap keyEnumerator]; NSEnumerator *cen = [subclasses objectEnumerator]; id sc = nil; id object = nil; NSDebugLog(@"replacing object with %@, %@",name, _customClasses); [_customClasses replaceObjectAtIndex: index withObject: name]; NSDebugLog(@"replaced object with %@, %@",name, _customClasses); // show the class map before... NSDebugLog(@"_customClassMap = %@",_customClassMap); while((object = [en nextObject]) != nil) { id customClassName = [_customClassMap objectForKey: object]; if(customClassName != nil) { if([oldName isEqualToString: customClassName]) { NSDebugLog(@"Replacing object -> customClass association %@ -> %@",object,customClassName); [_customClassMap setObject: name forKey: object]; } } } NSDebugLog(@"New _customClassMap = %@",_customClassMap); // and after // Iterate over the list of subclasses and replace their referece with the new // name. while((sc = [cen nextObject]) != nil) { [self setSuperClassNamed: name forClassNamed: sc]; } [self touch]; } else NSLog(@"customClass not found %@",oldName); [nc postNotificationName: IBClassNameChangedNotification object: self]; return YES; } else return NO; } - (NSString *)parentOfClass: (NSString *)aClass { NSDictionary *dictForClass = [_classInformation objectForKey: aClass]; return [dictForClass objectForKey: @"Super"]; } - (NSData *) nibData { NSMutableDictionary *dict = nil; NSMutableArray *classes = nil; NSEnumerator *enumerator = nil; NSMutableArray *cats = [NSMutableArray arrayWithArray: _categoryClasses]; id name = nil; // save all custom classes.... dict = [NSMutableDictionary dictionary]; [dict setObject: @"1" forKey: @"IBVersion"]; classes = [NSMutableArray array]; // build IBClasses... enumerator = [_customClasses objectEnumerator]; while ((name = [enumerator nextObject]) != nil) { NSDictionary *classInfo; NSMutableDictionary *newInfo; id obj; id extraObj; // get the info... classInfo = [_classInformation objectForKey: name]; newInfo = [[NSMutableDictionary alloc] init]; [newInfo setObject: name forKey: @"CLASS"]; // superclass... obj = [classInfo objectForKey: @"Super"]; if (obj != nil) { [newInfo setObject: obj forKey: @"SUPERCLASS"]; } // outlets... obj = [classInfo objectForKey: @"Outlets"]; extraObj = [classInfo objectForKey: @"ExtraOutlets"]; if (obj && extraObj) { obj = [obj arrayByAddingObjectsFromArray: extraObj]; } else if (extraObj) { obj = extraObj; } if (obj != nil && [obj count] > 0) { NSMutableDictionary *outletDict = [NSMutableDictionary dictionary]; NSEnumerator *oen = [obj objectEnumerator]; id outlet = nil; while((outlet = [oen nextObject]) != nil) { [outletDict setObject: @"id" forKey: outlet]; } [newInfo setObject: outletDict forKey: @"OUTLETS"]; } // actions... obj = [classInfo objectForKey: @"Actions"]; extraObj = [classInfo objectForKey: @"ExtraActions"]; if (obj && extraObj) { obj = [obj arrayByAddingObjectsFromArray: extraObj]; } else if (extraObj) { obj = extraObj; } if (obj != nil && [obj count] > 0) { NSMutableDictionary *actionDict = [NSMutableDictionary dictionary]; NSEnumerator *aen = [obj objectEnumerator]; id action = nil; while((action = [aen nextObject]) != nil) { NSString *actionName = nil; NSScanner *scanner = [NSScanner scannerWithString: action]; if ([scanner scanUpToString: @":" intoString: &actionName]) [actionDict setObject: @"id" forKey: actionName]; } [newInfo setObject: actionDict forKey: @"ACTIONS"]; } [newInfo setObject: @"ObjC" forKey: @"LANGUAGE"]; [classes addObject: newInfo]; } // Save all categories on existing, non-custom classes.... // Always save the FirstResponder.... if([cats containsObject: @"FirstResponder"] == NO) { [cats addObject: @"FirstResponder"]; } enumerator = [cats objectEnumerator]; while((name = [enumerator nextObject]) != nil) { NSDictionary *classInfo; NSMutableDictionary *newInfo; id obj; // get the info... classInfo = [_classInformation objectForKey: name]; newInfo = [NSMutableDictionary dictionary]; [newInfo setObject: name forKey: @"CLASS"]; // superclass... obj = [classInfo objectForKey: @"Super"]; if (obj != nil) { [newInfo setObject: obj forKey: @"SUPERCLASS"]; } // actions... obj = [classInfo objectForKey: @"ExtraActions"]; if (obj != nil && [obj count] > 0) { NSMutableDictionary *actionDict = [NSMutableDictionary dictionary]; NSEnumerator *aen = [obj objectEnumerator]; id action = nil; while((action = [aen nextObject]) != nil) { NSString *actionName = nil; NSScanner *scanner = [NSScanner scannerWithString: action]; if ([scanner scanUpToString: @":" intoString: &actionName]) [actionDict setObject: @"id" forKey: actionName]; } [newInfo setObject: actionDict forKey: @"ACTIONS"]; } [newInfo setObject: @"ObjC" forKey: @"LANGUAGE"]; [classes addObject: newInfo]; } [dict setObject: classes forKey: @"IBClasses"]; return [NSPropertyListSerialization dataFromPropertyList: dict format: NSPropertyListOpenStepFormat errorDescription: NULL]; } - (NSData *) data { NSMutableDictionary *ci = nil; NSEnumerator *enumerator = nil; id key = nil; // save all custom classes.... ci = [NSMutableDictionary dictionary]; enumerator = [_customClasses objectEnumerator]; while ((key = [enumerator nextObject]) != nil) { NSDictionary *classInfo; NSMutableDictionary *newInfo; id obj; id extraObj; // get the info... classInfo = [_classInformation objectForKey: key]; newInfo = [[NSMutableDictionary alloc] init]; [ci setObject: newInfo forKey: key]; // superclass... obj = [classInfo objectForKey: @"Super"]; if (obj != nil) { [newInfo setObject: obj forKey: @"Super"]; } // outlets... obj = [classInfo objectForKey: @"Outlets"]; extraObj = [classInfo objectForKey: @"ExtraOutlets"]; if (obj && extraObj) { obj = [obj arrayByAddingObjectsFromArray: extraObj]; } else if (extraObj) { obj = extraObj; } if (obj != nil) { [newInfo setObject: obj forKey: @"Outlets"]; } // actions... obj = [classInfo objectForKey: @"Actions"]; extraObj = [classInfo objectForKey: @"ExtraActions"]; if (obj && extraObj) { obj = [obj arrayByAddingObjectsFromArray: extraObj]; } else if (extraObj) { obj = extraObj; } if (obj != nil) { [newInfo setObject: obj forKey: @"Actions"]; } } // save all categories on existing, non-custom classes.... enumerator = [_categoryClasses objectEnumerator]; while((key = [enumerator nextObject]) != nil) { NSDictionary *classInfo; NSMutableDictionary *newInfo; id obj; // get the info... classInfo = [_classInformation objectForKey: key]; newInfo = [NSMutableDictionary dictionary]; [ci setObject: newInfo forKey: key]; // superclass... obj = [classInfo objectForKey: @"Super"]; if (obj != nil) { [newInfo setObject: obj forKey: @"Super"]; } // actions... obj = [classInfo objectForKey: @"ExtraActions"]; if (obj != nil) { [newInfo setObject: obj forKey: @"Actions"]; } } // add the extras... [ci setObject: @"Do NOT change this file, Gorm maintains it" forKey: @"## Comment"]; return [NSPropertyListSerialization dataFromPropertyList: ci format: NSPropertyListOpenStepFormat errorDescription: NULL]; } - (BOOL) saveToFile: (NSString *)path { return [[self data] writeToFile: path atomically: YES]; } - (BOOL) loadFromFile: (NSString *)path { NSDictionary *dict; NSEnumerator *enumerator; NSString *key; NSDebugLog(@"Load from file %@",path); dict = [NSDictionary dictionaryWithContentsOfFile: path]; if (dict == nil) { NSLog(@"Could not load classes dictionary"); return NO; } /* * Convert property-list data into a mutable structure. */ ASSIGN(_classInformation, [[NSMutableDictionary alloc] init]); // iterate over all entries.. enumerator = [dict keyEnumerator]; while ((key = [enumerator nextObject]) != nil) { NSDictionary *classInfo = [dict objectForKey: key]; NSMutableDictionary *newInfo; id obj; newInfo = [[NSMutableDictionary alloc] init]; [_classInformation setObject: newInfo forKey: key]; // superclass obj = [classInfo objectForKey: @"Super"]; if (obj != nil) { [newInfo setObject: obj forKey: @"Super"]; } // outlets obj = [classInfo objectForKey: @"Outlets"]; if (obj != nil) { obj = [obj mutableCopy]; [obj sortUsingSelector: @selector(compare:)]; [newInfo setObject: obj forKey: @"Outlets"]; RELEASE(obj); } // actions obj = [classInfo objectForKey: @"Actions"]; if (obj != nil) { obj = [obj mutableCopy]; [obj sortUsingSelector: @selector(compare:)]; [newInfo setObject: obj forKey: @"Actions"]; RELEASE(obj); } } return YES; } - (BOOL) loadNibFormatCustomClassesWithDict: (NSDictionary *)dict { NSArray *classes = [dict objectForKey: @"IBClasses"]; NSEnumerator *en = [classes objectEnumerator]; BOOL result = NO; id cls = nil; // If there are no classes to add, return gracefully. if([classes count] == 0) { return YES; } while((cls = [en nextObject]) != nil) { NSString *className = [cls objectForKey: @"CLASS"]; NSString *superClass = [cls objectForKey: @"SUPERCLASS"]; NSDictionary *actionDict = [cls objectForKey: @"ACTIONS"]; NSDictionary *outletDict = [cls objectForKey: @"OUTLETS"]; NSMutableArray *actions = [NSMutableArray array]; NSArray *outlets = [outletDict allKeys]; NSEnumerator *aen = [actionDict keyEnumerator]; id action = nil; // // Convert action format. // while((action = [aen nextObject]) != nil) { NSString *aname = [action stringByAppendingString: @":"]; [actions addObject: aname]; } // // If the class is known, add the actions/outlets, if it's // not, then add all of the information. // if([self isKnownClass: className]) { [self addActions: actions forClassNamed: className]; [self addOutlets: outlets forClassNamed: className]; result = YES; } else { result = [self addClassNamed: className withSuperClassNamed: superClass withActions: actions withOutlets: outlets]; } } return result; } - (BOOL) loadNibFormatCustomClassesWithData: (NSData *)data { NSString *dictString = AUTORELEASE([[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]); NSDictionary *dict = [dictString propertyList]; return [self loadNibFormatCustomClassesWithDict: dict]; } // this method will load the custom classes and merge them with the // Class information loaded at initialization time. - (BOOL) loadCustomClasses: (NSString *)path { NSMutableDictionary *dict; BOOL result = NO; NSDebugLog(@"Load custom classes from file %@",path); dict = [NSMutableDictionary dictionaryWithContentsOfFile: path]; if (dict == nil) { NSLog(@"Could not load custom classes dictionary"); return NO; } if (_classInformation == nil) { NSLog(@"Default classes file not loaded"); return NO; } if([path isEqualToString: @"data.classes"]) { result = [self loadCustomClassesWithDict: dict]; } else if([path isEqualToString: @"classes.nib"]) { result = [self loadNibFormatCustomClassesWithDict: dict]; } return result; } - (BOOL) loadCustomClassesWithData: (NSData *)data { NSString *dictString = AUTORELEASE([[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]); NSDictionary *dict = [dictString propertyList]; return [self loadCustomClassesWithDict: dict]; } - (BOOL) loadCustomClassesWithDict: (NSDictionary *)dict { NSEnumerator *en = nil; id key = nil; // Iterate over the set of classes, if it's in the _classInformation // list, it's a category, if it's not it's a custom class. en = [dict keyEnumerator]; while((key = [en nextObject]) != nil) { id class_dict = [dict objectForKey: key]; // Class information is always a dictionary, other information, such as // comments or version numbers, will appear as strings. if([class_dict isKindOfClass: [NSDictionary class]]) { NSMutableDictionary *classDict = (NSMutableDictionary *)class_dict; NSMutableDictionary *info = [_classInformation objectForKey: key]; if(info == nil) { [_customClasses addObject: key]; [_classInformation setObject: classDict forKey: key]; } else { NSMutableArray *actions = [classDict objectForKey: @"Actions"]; NSMutableArray *origActions = [info objectForKey: @"Actions"]; NSMutableArray *allActions = nil; // remove any duplicate actions... if(origActions != nil) { allActions = [NSMutableArray arrayWithArray: origActions]; [actions removeObjectsInArray: origActions]; [allActions addObjectsFromArray: actions]; [info setObject: allActions forKey: @"AllActions"]; } // if there are any action methods left after the process above, // add it, otherwise don't. if([actions count] > 0) { [_categoryClasses addObject: key]; [info setObject: actions forKey: @"ExtraActions"]; } } } } return YES; } - (BOOL) isCustomClass: (NSString *)className { return ([_customClasses indexOfObject: className] != NSNotFound); } - (BOOL) isNonCustomClass: (NSString *)className { return !([self isCustomClass: className]); } - (BOOL) isCategoryForClass: (NSString *)className { return ([_categoryClasses indexOfObject: className] != NSNotFound); } - (BOOL) isAction: (NSString *)actionName onCategoryForClassNamed: (NSString *)className { NSDictionary *info = [_classInformation objectForKey: className]; BOOL result = NO; if([self isCategoryForClass: className]) { if(info != nil) { NSArray *extra = [info objectForKey: @"ExtraActions"]; if(extra != nil) { result = [extra containsObject: actionName]; } } } return result; } - (BOOL) isKnownClass: (NSString *)className { return ([_classInformation objectForKey: className] != nil); } - (BOOL) setSuperClassNamed: (NSString *)superclass forClassNamed: (NSString *)subclass { NSArray *cn = [self allClassNames]; if (superclass != nil && subclass != nil && [cn containsObject: subclass] && ([cn containsObject: superclass] || [self isRootClass: superclass]) && [self isSuperclass: subclass linkedToClass: superclass] == NO) { NSMutableDictionary *info; info = [_classInformation objectForKey: subclass]; if (info != nil) { // remove actions/outlets inherited from superclasses... [info removeObjectForKey: @"AllActions"]; [info removeObjectForKey: @"AllOutlets"]; // change the parent of the class... [info setObject: superclass forKey: @"Super"]; // recalculate the actions/outlets... [self allActionsForClassNamed: subclass]; [self allOutletsForClassNamed: subclass]; // return success. return YES; } else { return NO; } } return NO; } - (NSString *) superClassNameForClassNamed: (NSString *)className { NSMutableDictionary *info = [_classInformation objectForKey: className]; NSString *superName = nil; if (info != nil) { superName = [info objectForKey: @"Super"]; } return superName; } - (BOOL) isSuperclass: (NSString *)superclass linkedToClass: (NSString *)subclass { NSString *ssclass; if (superclass == nil || subclass == nil) { return NO; } ssclass = [self superClassNameForClassNamed: subclass]; if ([superclass isEqualToString: ssclass]) { return YES; } return [self isSuperclass: superclass linkedToClass: ssclass]; } - (NSDictionary *) dictionaryForClassNamed: (NSString *)className { NSMutableDictionary *info = [NSMutableDictionary dictionaryWithDictionary: [_classInformation objectForKey: className]]; if(info != nil) { [info removeObjectForKey: @"AllActions"]; [info removeObjectForKey: @"AllOutlets"]; } return info; } /* * create .m & .h files for a class */ - (BOOL) makeSourceAndHeaderFilesForClass: (NSString *)className withName: (NSString *)sourcePath and: (NSString *)headerPath { NSMutableString *headerFile; NSMutableString *sourceFile; NSData *headerData; NSData *sourceData; NSMutableArray *outlets; NSMutableArray *actions; NSString *actionName; int i; int n; NSDictionary *classInfo = [_classInformation objectForKey: className]; headerFile = [NSMutableString stringWithCapacity: 200]; sourceFile = [NSMutableString stringWithCapacity: 200]; // add all outlets and actions for the current class to the list... outlets = [[classInfo objectForKey: @"Outlets"] mutableCopy]; [outlets addObjectsFromArray: [classInfo objectForKey: @"ExtraOutlets"]]; actions = [[classInfo objectForKey: @"Actions"] mutableCopy]; [actions addObjectsFromArray: [classInfo objectForKey: @"ExtraActions"]]; // header file comments... [headerFile appendString: @"/* All rights reserved */\n\n"]; [sourceFile appendString: @"/* All rights reserved */\n\n"]; [headerFile appendString: [NSString stringWithFormat: @"#ifndef %@_H_INCLUDE\n", className]]; [headerFile appendString: [NSString stringWithFormat: @"#define %@_H_INCLUDE\n\n", className]]; [headerFile appendString: @"#import \n\n"]; if ([[headerPath stringByDeletingLastPathComponent] isEqualToString: [sourcePath stringByDeletingLastPathComponent]]) { [sourceFile appendFormat: @"#import \"%@\"\n\n", [headerPath lastPathComponent]]; } else { [sourceFile appendFormat: @"#import \"%@\"\n\n", headerPath]; } [headerFile appendFormat: @"@interface %@ : %@\n{\n", className, [self superClassNameForClassNamed: className]]; [sourceFile appendFormat: @"@implementation %@\n\n", className]; n = [outlets count]; for (i = 0; i < n; i++) { [headerFile appendFormat: @" IBOutlet id %@;\n", [outlets objectAtIndex: i]]; } [headerFile appendFormat: @"}\n\n"]; n = [actions count]; for (i = 0; i < n; i++) { actionName = [actions objectAtIndex: i]; [headerFile appendFormat: @"- (IBAction) %@ (id)sender;\n", actionName]; [sourceFile appendFormat: @"- (IBAction) %@ (id)sender\n" @"{\n" @"}\n" @"\n" , [actions objectAtIndex: i]]; } [headerFile appendFormat: @"\n@end\n\n"]; [headerFile appendString: [NSString stringWithFormat: @"#endif // %@_H_INCLUDE\n", className]]; [sourceFile appendFormat: @"@end\n"]; headerData = [headerFile dataUsingEncoding: [NSString defaultCStringEncoding]]; sourceData = [sourceFile dataUsingEncoding: [NSString defaultCStringEncoding]]; [headerData writeToFile: headerPath atomically: NO]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GormCreateFileNotification" object: headerPath]; [sourceData writeToFile: sourcePath atomically: NO]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: @"GormCreateFileNotification" object: sourcePath]; return YES; } - (BOOL) parseHeader: (NSString *)headerPath { OCHeaderParser *ochp = [[OCHeaderParser alloc] initWithContentsOfFile: headerPath]; BOOL result = NO; if(ochp != nil) { result = [ochp parse]; if(result) { NSArray *classes = [ochp classes]; NSEnumerator *en = [classes objectEnumerator]; OCClass *cls = nil; while((cls = (OCClass *)[en nextObject]) != nil) { NSArray *methods = [cls methods]; NSArray *ivars = [cls ivars]; NSArray *properties = [cls properties]; NSString *superClass = [cls superClassName]; // == nil) ? @"NSObject":[cls superClassName]; NSString *className = [cls className]; NSEnumerator *ien = [ivars objectEnumerator]; NSEnumerator *men = [methods objectEnumerator]; NSEnumerator *pen = [properties objectEnumerator]; OCMethod *method = nil; OCIVar *ivar = nil; OCProperty *property = nil; NSMutableArray *actions = [NSMutableArray array]; NSMutableArray *outlets = [NSMutableArray array]; // skip it, if it's category... for now. TODO: make categories work... while((method = (OCMethod *)[men nextObject]) != nil) { if([method isAction]) { [actions addObject: [method name]]; } } while((ivar = (OCIVar *)[ien nextObject]) != nil) { if([ivar isOutlet]) { [outlets addObject: [ivar name]]; } } while((property = (OCProperty *)[pen nextObject]) != nil) { if([property isOutlet]) { [outlets addObject: [property name]]; } } NSLog(@"outlets = %@", outlets); if(([self isKnownClass: superClass] || superClass == nil) && [cls isCategory] == NO) { if([self isKnownClass: className]) { id delegate = (id)[NSApp delegate]; BOOL result = [delegate shouldBreakConnectionsReparsingClass: className]; if (result == YES) { // get the owner and reset the class name to NSApplication. GormFilesOwner *owner = [_document objectForName: @"NSOwner"]; NSString *ownerClassName = [owner className]; // Retain this, in case we're dealing with the NSOwner... RETAIN(ownerClassName); // delete the class.. [self removeClassNamed: className]; // re-add it. [self addClassNamed: className withSuperClassNamed: superClass withActions: actions withOutlets: outlets]; // Set the owner back to the class name, if needed. if([className isEqualToString: ownerClassName]) { [owner setClassName: className]; } // refresh the connections. [_document refreshConnectionsForClassNamed: className]; // Release the owner classname... RELEASE(ownerClassName); } } else { [self addClassNamed: className withSuperClassNamed: superClass withActions: actions withOutlets: outlets]; } } else if([cls isCategory]) { if ([self isKnownClass: className]) { [self addActions: actions forClassNamed: className]; [self addActions: outlets forClassNamed: className]; } else { [self addClassNamed: className withSuperClassNamed: @"NSObject" withActions: actions withOutlets: outlets]; } } else if(superClass != nil && [self isKnownClass: superClass] == NO) { result = NO; RELEASE(ochp); [NSException raise: NSGenericException format: @"The superclass %@ of class %@ is not known, please parse it.", superClass, className]; } } } } RELEASE(ochp); return result; } - (BOOL) isAction: (NSString *)name ofClass: (NSString *)className { BOOL result = NO; NSDictionary *classInfo = [_classInformation objectForKey: className]; if (classInfo != nil) { NSArray *array = [classInfo objectForKey: @"Actions"]; NSArray *extra_array = [classInfo objectForKey: @"ExtraActions"]; NSMutableArray *combined = [NSMutableArray array]; [combined addObjectsFromArray: array]; [combined addObjectsFromArray: extra_array]; result = ([combined indexOfObject: name] != NSNotFound); } return result; } - (BOOL) isOutlet: (NSString *)name ofClass: (NSString *)className { BOOL result = NO; NSDictionary *classInfo = [_classInformation objectForKey: className]; if (classInfo != nil) { NSArray *array = [classInfo objectForKey: @"Outlets"]; NSArray *extra_array = [classInfo objectForKey: @"ExtraOutlets"]; NSMutableArray *combined = [NSMutableArray array]; [combined addObjectsFromArray: array]; [combined addObjectsFromArray: extra_array]; result = ([combined indexOfObject: name] != NSNotFound); } return result; } // custom class support... - (NSString *) customClassForName: (NSString *)name { NSString *result = [_customClassMap objectForKey: name]; return result; } - (NSString *) customClassForObject: (id)object { NSString *name = [_document nameForObject: object]; NSString *result = [self customClassForName: name]; NSDebugLog(@"in customClassForObject: object = %@, name = %@, result = %@, _customClassMap = %@", object, name, result, _customClassMap); return result; } - (NSString *) classNameForObject: (id)object { NSString *className = [self customClassForObject: object]; if(className == nil) { className = [object className]; } return className; } - (void) setCustomClass: (NSString *)className forName: (NSString *)name { [_customClassMap setObject: className forKey: name]; } - (void) removeCustomClassForName: (NSString *)name { [_customClassMap removeObjectForKey: name]; } - (NSMutableDictionary *) customClassMap { return _customClassMap; } - (void) setCustomClassMap: (NSMutableDictionary *)dict { // copy the dictionary.. NSDebugLog(@"dictionary = %@",dict); ASSIGN(_customClassMap, [dict mutableCopy]); RETAIN(_customClassMap); // released in dealloc } - (BOOL) isCustomClassMapEmpty { return ([_customClassMap count] == 0); } - (BOOL) isRootClass: (NSString *)className { return ([self superClassNameForClassNamed: className] == nil); } - (NSString *) nonCustomSuperClassOf: (NSString *)className { NSString *result = className; if(![self isCustomClass: className] && ![self isRootClass: className]) { result = [self superClassNameForClassNamed: result]; } else { // iterate up the chain until a non-custom superclass is found... while ([self isCustomClass: result]) { NSDebugLog(@"result = %@",result); result = [self superClassNameForClassNamed: result]; } } return result; } - (NSArray *) allSuperClassesOf: (NSString *)className { NSMutableArray *classes = [NSMutableArray array]; while (![self isRootClass: className] && className != nil) { NSDictionary *dict = [self classInfoForClassName: className]; if(dict != nil) { className = [dict objectForKey: @"Super"]; if(className != nil) { [classes insertObject: className atIndex: 0]; } } else { NSLog(@"Unable to find class named (%@), check that all palettes properly export classes to Gorm.",className); break; } } return classes; } - (void) addActions: (NSArray *)actions forClassNamed: (NSString *)className { id action = nil; NSEnumerator *e = [actions objectEnumerator]; while((action = [e nextObject])) { [self addAction: action forClassNamed: className]; } } - (void) addOutlets: (NSArray *)outlets forClassNamed: (NSString *)className { id action = nil; NSEnumerator *e = [outlets objectEnumerator]; while((action = [e nextObject])) { [self addOutlet: action forClassNamed: className]; } } // There are some classes which can't be instantiated directly // in Gorm. These are they.. (GJC) - (BOOL) canInstantiateClassNamed: (NSString *)className { if([self isSuperclass: @"NSApplication" linkedToClass: className] || [className isEqualToString: @"NSApplication"]) { return NO; } else if([self isSuperclass: @"NSCell" linkedToClass: className] || [className isEqualToString: @"NSCell"]) { return NO; } else if([className isEqualToString: @"NSDocument"]) { return NO; } else if([className isEqualToString: @"NSDocumentController"]) { return NO; } else if([className isEqualToString: @"NSFontManager"]) { return NO; } else if([className isEqualToString: @"NSHelpManager"]) { return NO; } else if([className isEqualToString: @"NSImage"]) { return NO; } else if([self isSuperclass: @"NSMenuItem" linkedToClass: className] || [className isEqualToString: @"NSMenuItem"]) { return NO; } else if([className isEqualToString: @"NSResponder"]) { return NO; } else if([self isSuperclass: @"NSSound" linkedToClass: className] || [className isEqualToString: @"NSSound"]) { return NO; } else if([self isSuperclass: @"NSTableColumn" linkedToClass: className] || [className isEqualToString: @"NSTableColumn"]) { return NO; } else if([self isSuperclass: @"NSTableViewItem" linkedToClass: className] || [className isEqualToString: @"NSTableViewItem"]) { return NO; } else if([self isSuperclass: @"NSView" linkedToClass: className] || [className isEqualToString: @"NSView"]) { return NO; } else if([self isSuperclass: @"NSWindow" linkedToClass: className] || [className isEqualToString: @"NSWindow"]) { return NO; } else if([self isSuperclass: @"FirstResponder" linkedToClass: className] || [className isEqualToString: @"FirstResponder"]) { // special case, FirstResponder. return NO; } return YES; } - (NSString *) findClassByName: (NSString *)name { NSArray *classNames = [self allClassNames]; NSEnumerator *en = [classNames objectEnumerator]; NSString *className = nil; NSInteger namelen = [name length]; while((className = [en nextObject]) != nil) { NSInteger classlen = [className length]; if(namelen < classlen) { NSComparisonResult result = [className compare: name options: NSCaseInsensitiveSearch range: ((NSRange){0, namelen})]; if(result == NSOrderedSame) { break; } } else if(namelen == classlen) { if([className caseInsensitiveCompare: name] == NSOrderedSame) { break; } } } return className; } - (NSDictionary *) classInformation { return _classInformation; } - (NSDictionary *) customClassInformation { NSEnumerator *en = [_customClasses objectEnumerator]; NSMutableDictionary *result = [NSMutableDictionary dictionary]; NSString *name = nil; while ((name = [en nextObject]) != nil) { NSDictionary *o = [_classInformation objectForKey: name]; [result setObject: o forKey: name]; } return result; } #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpointer-to-int-cast" - (NSString *) description { return [NSString stringWithFormat: @"<%s: %lx> = %@", GSClassNameFromObject(self), (unsigned long)self, _customClassMap]; } #pragma GCC diagnostic pop /** Helpful for debugging */ - (NSString *) dumpClassInformation { return [_classInformation description]; } @end apps-gorm-gorm-1_5_0/GormCore/GormClassPanelController.h000066400000000000000000000024741475375552500233630ustar00rootroot00000000000000/* GormClassPanelController.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* All Rights reserved */ #include @class NSMutableArray; @interface GormClassPanelController : NSObject { id okButton; id classBrowser; id panel; id classNameForm; NSString *className; NSMutableArray *allClasses; } - (id) initWithTitle: (NSString *)title classList: (NSArray *)classes; - (void) okButton: (id)sender; - (void) browserAction: (id)sender; - (NSString *)runModal; @end apps-gorm-gorm-1_5_0/GormCore/GormClassPanelController.m000066400000000000000000000051731475375552500233670ustar00rootroot00000000000000/* GormClassPanelController.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ /* All rights reserved */ #include #include "GormClassPanelController.h" #include "GormPrivate.h" @implementation GormClassPanelController - (id) initWithTitle: (NSString *)title classList: (NSArray *)classes { self = [super init]; if(self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if ( ![bundle loadNibNamed:@"GormClassPanel" owner:self topLevelObjects: NULL] ) { NSLog(@"Can not load bundle GormClassPanel"); return nil; } } ASSIGN(allClasses, [classes mutableCopy]); [allClasses removeObject: @"FirstResponder"]; [panel setTitle: title]; [classBrowser loadColumnZero]; return self; } - (NSString *)runModal { [NSApp runModalForWindow: panel]; [panel orderOut: self]; return className; } - (void) dealloc { RELEASE(allClasses); RELEASE(className); RELEASE(panel); [super dealloc]; } - (void) okButton: (id)sender { ASSIGN(className, [[classNameForm cellAtIndex: 0] stringValue]); [NSApp stopModal]; } - (void) browserAction: (id)sender { [[classNameForm cellAtIndex: 0] setStringValue: [[classBrowser selectedCell] stringValue]]; } - (NSInteger) browser: (NSBrowser*)sender numberOfRowsInColumn: (NSInteger)column { return [allClasses count]; } - (NSString*) browser: (NSBrowser*)sender titleOfColumn: (NSInteger)column { return @"Class"; } - (void) browser: (NSBrowser*)sender willDisplayCell: (id)aCell atRow: (NSInteger)row column: (NSInteger)col { if (row >= 0 && row < [allClasses count]) { [aCell setStringValue: [allClasses objectAtIndex: row]]; [aCell setEnabled: YES]; } else { [aCell setStringValue: @""]; [aCell setEnabled: NO]; } [aCell setLeaf: YES]; } @end apps-gorm-gorm-1_5_0/GormCore/GormConnectionInspector.h000066400000000000000000000026471475375552500232620ustar00rootroot00000000000000/* GormConnectionInspector.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * Author: Gregory John Casamento * Date: 2003,2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormConnectionInspector_h #define INCLUDED_GormConnectionInspector_h #include #include @class NSBrowser, NSArray, NSMutableArray; @interface GormConnectionInspector : IBInspector { id currentConnector; NSMutableArray *connectors; NSArray *actions; NSArray *outlets; NSBrowser *newBrowser; NSBrowser *oldBrowser; } - (void) updateButtons; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormConnectionInspector.m000066400000000000000000000424011475375552500232570ustar00rootroot00000000000000/* GormInspectorsManager.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * Author: Gregory John Casamento * Date: 2003,2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" #include "GormConnectionInspector.h" @interface GormConnectionCell : NSBrowserCell { BOOL isOutletConnected; } @end @implementation GormConnectionCell : NSBrowserCell - (void) setIsOutletConnected:(BOOL)yn { isOutletConnected = yn; } - (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView *)controlView { if (isOutletConnected != NO) { NSImage *dimple_image = [NSImage imageNamed: @"common_Dimple"]; NSRect title_rect = cellFrame; NSRect imgRect; if ([self isHighlighted] != NO) { [[self highlightColorInView: controlView] setFill]; NSRectFill(cellFrame); } imgRect.size = [dimple_image size]; imgRect.origin.x = MAX(NSMaxX(title_rect) - imgRect.size.width - 4.0, 0.); imgRect.origin.y = MAX(NSMidY(title_rect) - (imgRect.size.height/2.), 0.); title_rect.size.width -= imgRect.size.width + 8; [super drawInteriorWithFrame: title_rect inView: controlView]; if (controlView != nil) { imgRect = [controlView centerScanRect: imgRect]; } [dimple_image drawInRect: imgRect fromRect: NSZeroRect operation: NSCompositeSourceOver fraction: 1.0 respectFlipped: YES hints: nil]; } else { [super drawInteriorWithFrame: cellFrame inView: controlView]; } } @end @implementation GormConnectionInspector - (id) init { if ((self = [super init]) != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if([bundle loadNibNamed: @"GormConnectionInspector" owner: self topLevelObjects: NULL] == NO) { NSLog(@"Couldn't load GormConnectionInsector"); return nil; } // Create the okay and revert buttons, programmatically, since we shouldn't // add them to the view. The wantsButtons handling code will do that. okButton = [[NSButton alloc] initWithFrame: NSMakeRect(0,0,80,20)]; [okButton setAutoresizingMask: NSViewMinXMargin]; [okButton setAction: @selector(ok:)]; [okButton setTarget: self]; [okButton setTitle: _(@"Connect")]; [okButton setEnabled: NO]; revertButton = [[NSButton alloc] initWithFrame: NSMakeRect(0,0,80,20)]; [revertButton setAutoresizingMask: NSViewMaxXMargin]; [revertButton setAction: @selector(revert:)]; [revertButton setTarget: self]; [revertButton setTitle: _(@"Revert")]; [revertButton setEnabled: NO]; } return self; } - (void) awakeFromNib { [newBrowser setCellClass: [GormConnectionCell class]]; [newBrowser setDoubleAction: @selector(ok:)]; } - (NSInteger) browser: (NSBrowser*)sender numberOfRowsInColumn: (NSInteger)column { NSInteger rows = 0; if (sender == newBrowser) { if (column == 0) { rows = [outlets count]; } else { NSString *name = [[sender selectedCellInColumn: 0] stringValue]; if ([name isEqual: @"target"]) { rows = [actions count]; } } } else { rows = [connectors count]; } return rows; } - (NSString*) browser: (NSBrowser*)sender titleOfColumn: (NSInteger)column { if (sender == newBrowser) { if (column == 0) { return @"Outlets"; } else { NSString *name = [[sender selectedCellInColumn: 0] stringValue]; if ([name isEqual: @"target"]) { return @"Actions"; } else { return @""; } } } else { return @"Connections"; } } - (void) _selectAction: (NSString *)action { /* * Ensure that the actions are displayed in column one, * and select the action for the current connection (if any). */ [newBrowser reloadColumn: 1]; if (action != nil) { [newBrowser selectRow: [actions indexOfObject: action] inColumn: 1]; } } - (void) _internalCall: (NSBrowser *)sender { unsigned numConnectors = [connectors count]; unsigned index = 0; NSBrowserCell *cell = [sender selectedCell]; NSString *title = [cell stringValue]; NSInteger col = [sender selectedColumn]; if (sender == newBrowser) { if (col == 0) { if ([title isEqual: @"target"]) { id con = nil; for (index = 0; index < numConnectors; index++) { con = [connectors objectAtIndex: index]; if ([con isKindOfClass: [NSNibControlConnector class]] == YES) { RELEASE(actions); actions = [[(id)[NSApp delegate] classManager] allActionsForObject: [con destination]]; actions = [actions sortedArrayUsingSelector: @selector(compare:)]; RETAIN(actions); break; } else { con = nil; } } if (con == nil) // && [actions containsObject: [currentConnector label]] == NO) { RELEASE(actions); actions = [[(id)[NSApp delegate] classManager] allActionsForObject: [[NSApp delegate] connectDestination]]; actions = [actions sortedArrayUsingSelector: @selector(compare:)]; RETAIN(actions); if ([actions count] > 0) { con = [[NSNibControlConnector alloc] init]; [con setSource: object]; [con setDestination: [[NSApp delegate] connectDestination]]; [con setLabel: [actions objectAtIndex: 0]]; AUTORELEASE(con); } } // if we changed the current connector, update to the new one... if (currentConnector != con) { ASSIGN(currentConnector, con); } /* * Ensure that the actions are displayed in column one, * and select the action for the current connection (if any). */ [self _selectAction: [con label]]; } else { BOOL found = NO; /* * See if there already exists a connector for this outlet. */ for (index = 0; index < numConnectors; index++) { id con = [connectors objectAtIndex: index]; if ([con label] == nil || [[con label] isEqual: title] == YES) { ASSIGN(currentConnector, con); found = YES; break; } } /* * if there was no connector, make one. */ if (found == NO) { RELEASE(currentConnector); currentConnector = [[NSNibOutletConnector alloc] init]; [currentConnector setSource: object]; [currentConnector setDestination: [[NSApp delegate] connectDestination]]; [currentConnector setLabel: title]; } } /* * Update the bottom browser. */ [oldBrowser loadColumnZero]; [oldBrowser selectRow: index inColumn: 0]; [[NSApp delegate] displayConnectionBetween: object and: [currentConnector destination]]; } else { BOOL found = NO; for (index = 0; index < numConnectors; index++) { id con = [connectors objectAtIndex: index]; if ([con isKindOfClass: [NSNibControlConnector class]] == YES) { NSString *action = [con label]; if ([action isEqual: title] == YES) { ASSIGN(currentConnector, con); found = YES; break; } } } if (found == NO) { RELEASE(currentConnector); currentConnector = [[NSNibControlConnector alloc] init]; [currentConnector setSource: object]; [currentConnector setDestination: [[NSApp delegate] connectDestination]]; [currentConnector setLabel: title]; [oldBrowser loadColumnZero]; } [oldBrowser selectRow: index inColumn: 0]; } } else { for (index = 0; index < numConnectors; index++) { id con = [connectors objectAtIndex: index]; NSString *label = [con label]; if ([title hasPrefix: label] == YES) { NSString *name; id dest = [[NSApp delegate] connectDestination]; dest = [con destination]; name = [[(id)[NSApp delegate] activeDocument] nameForObject: dest]; name = [label stringByAppendingFormat: @" (%@)", name]; if ([title isEqual: name] == YES) { NSString *path = label; ASSIGN(currentConnector, con); /* * Update the main browser to reflect selected connection */ path = [@"/" stringByAppendingString: label]; if ([con isKindOfClass: [NSNibControlConnector class]] == YES) { path = [@"/target" stringByAppendingString: path]; } [newBrowser setPath: path]; [[NSApp delegate] displayConnectionBetween: object and: [con destination]]; break; } } } } // if it's a control connection select target, if not, don't // if([currentConnector isKindOfClass: [NSNib [self updateButtons]; } - (BOOL) browser: (NSBrowser*)sender selectCellWithString: (NSString*)title inColumn: (NSInteger)col { NSMatrix *matrix = [sender matrixInColumn: col]; NSInteger rows = [matrix numberOfRows]; NSInteger i; for (i = 0; i < rows; i++) { NSBrowserCell *cell = [matrix cellAtRow: i column: 0]; if ([[cell stringValue] isEqual: title] == YES) { [matrix selectCellAtRow: i column: 0]; return YES; } } return NO; } - (void) browser: (NSBrowser*)sender willDisplayCell: (id)aCell atRow: (NSInteger)row column: (NSInteger)col { [aCell setRefusesFirstResponder: YES]; if (sender == newBrowser) { NSString *name; if (col == 0) { if (row >= 0 && row < [outlets count]) { name = [outlets objectAtIndex: row]; [aCell setStringValue: name]; if ([name isEqual: @"target"]) { [aCell setLeaf: NO]; } else { [aCell setLeaf: YES]; } [aCell setEnabled: YES]; // Draws dimple for connected outlets NSEnumerator *en = [connectors objectEnumerator]; id conn = nil; while ((conn = [en nextObject]) != nil) { if ([name isEqualToString: [conn label]]) { [aCell setIsOutletConnected: YES]; break; } } } else { [aCell setStringValue: @""]; [aCell setLeaf: YES]; [aCell setEnabled: NO]; } } else { name = [[sender selectedCellInColumn: 0] stringValue]; if ([name isEqual: @"target"] == NO) { NSDebugLog(@"cell selected in actions column without target"); } if (row >= 0 && row < [actions count]) { [aCell setStringValue: [actions objectAtIndex: row]]; [aCell setEnabled: YES]; } else { [aCell setStringValue: @""]; [aCell setEnabled: NO]; } [aCell setLeaf: YES]; } } else { if (row >= 0 && row < [connectors count]) { NSString *label; NSString *name; id dest = [[NSApp delegate] connectDestination]; label = [[connectors objectAtIndex: row] label]; dest = [[connectors objectAtIndex: row] destination]; name = [[(id)[NSApp delegate] activeDocument] nameForObject: dest]; name = [label stringByAppendingFormat: @" (%@)", name]; [aCell setStringValue: name]; [aCell setEnabled: YES]; } else { [aCell setStringValue: @""]; [aCell setEnabled: NO]; } [aCell setLeaf: YES]; } } - (void) dealloc { RELEASE(currentConnector); RELEASE(connectors); RELEASE(actions); RELEASE(outlets); RELEASE(okButton); RELEASE(revertButton); [super dealloc]; } - (void) handleNotification: (NSNotification *)notification { // got the notification... since we only subscribe to one, just do what // needs to be done. [self setObject: object]; // resets the browser... } - (void) ok: (id)sender { if([currentConnector destination] == nil || [currentConnector source] == nil) { NSRunAlertPanel(_(@"Problem making connection"), _(@"Please select a valid destination."), _(@"OK"), nil, nil, nil); return; } else if ([connectors containsObject: currentConnector] == YES) { id con = currentConnector; [[(id)[NSApp delegate] activeDocument] removeConnector: con]; [connectors removeObject: con]; [oldBrowser loadColumnZero]; } else { NSString *path; id dest; /* * Establishing a target/action type connection will automatically * remove any previous target/action connection. */ if ([currentConnector isKindOfClass: [NSNibControlConnector class]]) { NSEnumerator *enumerator = [connectors objectEnumerator]; id con; while ((con = [enumerator nextObject]) != nil) { if ([con isKindOfClass: [NSNibControlConnector class]]) { [[(id)[NSApp delegate] activeDocument] removeConnector: con]; [connectors removeObjectIdenticalTo: con]; break; } } // select the new action from the list... [self _selectAction: [currentConnector label]]; } [connectors addObject: currentConnector]; [[(id)[NSApp delegate] activeDocument] addConnector: currentConnector]; /* * When we establish a connection, we want to highlight it in * the browser so the user can see it has been done. */ dest = [currentConnector destination]; path = [[(id)[NSApp delegate] activeDocument] nameForObject: dest]; path = [[currentConnector label] stringByAppendingFormat: @" (%@)", path]; path = [@"/" stringByAppendingString: path]; [oldBrowser loadColumnZero]; [oldBrowser setPath: path]; } // Update image marker in "Outlets" browser NSString *newPath = [newBrowser path]; [newBrowser loadColumnZero]; [newBrowser setPath:newPath]; // mark as edited. [super ok: sender]; [self updateButtons]; } - (void) setObject: (id)anObject { if (anObject != nil) { NSArray *array; [super setObject: anObject]; RELEASE(connectors); /* * Create list of existing connections for selected object. */ connectors = [[NSMutableArray alloc] init]; array = [[(id)[NSApp delegate] activeDocument] connectorsForSource: object ofClass: [NSNibControlConnector class]]; [connectors addObjectsFromArray: array]; array = [[(id)[NSApp delegate] activeDocument] connectorsForSource: object ofClass: [NSNibOutletConnector class]]; [connectors addObjectsFromArray: array]; RELEASE(outlets); outlets = [[(id)[NSApp delegate] classManager] allOutletsForObject: object]; outlets = [outlets sortedArrayUsingSelector: @selector(compare:)]; RETAIN(outlets); DESTROY(actions); [oldBrowser loadColumnZero]; /* * See if we can do initial selection based on pre-existing connections. */ if ([[NSApp delegate] isConnecting] == YES) { id dest = [currentConnector destination]; unsigned row; for (row = 0; row < [connectors count]; row++) { id con = [connectors objectAtIndex: row]; if ([con destination] == dest) { ASSIGN(currentConnector, con); [oldBrowser selectRow: row inColumn: 0]; break; } } } [newBrowser loadColumnZero]; if (currentConnector == nil) { if ([connectors count] > 0) { currentConnector = RETAIN([connectors objectAtIndex: 0]); } else if ([outlets count] == 1) { [newBrowser selectRow: 0 inColumn: 0]; [newBrowser sendAction]; } } if ([currentConnector isKindOfClass: [NSNibControlConnector class]] == YES && [[NSApp delegate] isConnecting] == NO) { [newBrowser setPath: @"/target"]; [newBrowser sendAction]; } [self updateButtons]; } } - (void) updateButtons { if (currentConnector == nil) { [okButton setEnabled: NO]; } else { GormDocument *active = (GormDocument *)[(id)[NSApp delegate] activeDocument]; id src = [currentConnector source]; id dest = [currentConnector destination]; // highlight or unhiglight the connection depending on // the object being connected to. if((src == nil || src == [active firstResponder]) || ((dest == nil || dest == [active firstResponder]) && [currentConnector isKindOfClass: [NSNibOutletConnector class]] == YES)) { [okButton setEnabled: NO]; } else { [okButton setEnabled: YES]; if ([connectors containsObject: currentConnector] == YES) { [okButton setTitle: _(@"Disconnect")]; } else { [okButton setTitle: _(@"Connect")]; } } } } - (BOOL) wantsButtons { return YES; } @end apps-gorm-gorm-1_5_0/GormCore/GormControlEditor.h000066400000000000000000000020731475375552500220540ustar00rootroot00000000000000/* GormControlEditor.h * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormControlEditor_h #define INCLUDED_GormControlEditor_h #include @interface GormControlEditor : GormViewEditor @end #endif apps-gorm-gorm-1_5_0/GormCore/GormControlEditor.m000066400000000000000000000416611475375552500220670ustar00rootroot00000000000000/* GormControlEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormPrivate.h" #include "GormViewWithSubviewsEditor.h" #include "GormControlEditor.h" #include "GormPlacementInfo.h" #include "GormViewKnobs.h" #define _EO ((NSControl *)_editedObject) @class GormWindowEditor; @implementation NSControl (IBObjectAdditions) - (NSString*) editorClassName { return @"GormControlEditor"; } @end @interface GormViewEditor (Private) - (void) _displayFrameWithHint: (NSRect) frame withPlacementInfo: (GormPlacementInfo*)gpi; - (void) _initializeHintWithInfo: (GormPlacementInfo*) gpi; @end @interface GormControlEditor (IntelligentPlacement) - (void) _altDisplayFrame: (NSRect) frame withPlacementInfo: (GormPlacementInfo*)gpi; - (void) _displayFrame: (NSRect) frame withPlacementInfo: (GormPlacementInfo*) gpi; @end @implementation GormControlEditor - (void) _altDisplayFrame: (NSRect) frame withPlacementInfo: (GormPlacementInfo*)gpi { NSSize size = [self frame].size; NSSize constrainedSize; NSInteger col; NSInteger row; if (gpi->firstPass == NO) [gpi->resizingIn displayRect: gpi->oldRect]; else gpi->firstPass = NO; col = frame.size.width / size.width; row = frame.size.height / size.height; if (col < 1) col = 1; if (row < 1) row = 1; constrainedSize.width = col * size.width; constrainedSize.height = row * size.height; switch (gpi->knob) { case IBBottomLeftKnobPosition: case IBMiddleLeftKnobPosition: case IBTopLeftKnobPosition: frame.origin.x = NSMaxX(frame) - constrainedSize.width; frame.size.width = constrainedSize.width; break; case IBTopRightKnobPosition: case IBMiddleRightKnobPosition: case IBBottomRightKnobPosition: frame.size.width = constrainedSize.width; break; case IBTopMiddleKnobPosition: case IBBottomMiddleKnobPosition: case IBNoneKnobPosition: break; } switch (gpi->knob) { case IBBottomLeftKnobPosition: case IBBottomRightKnobPosition: case IBBottomMiddleKnobPosition: frame.origin.y = NSMaxY(frame) - constrainedSize.height; frame.size.height = constrainedSize.height; break; case IBTopMiddleKnobPosition: case IBTopRightKnobPosition: case IBTopLeftKnobPosition: frame.size.height = constrainedSize.height; break; case IBMiddleLeftKnobPosition: case IBMiddleRightKnobPosition: case IBNoneKnobPosition: break; } GormShowFrameWithKnob(frame, gpi->knob); gpi->lastFrame = frame; gpi->oldRect = GormExtBoundsForRect(frame); gpi->oldRect.origin.x--; gpi->oldRect.origin.y--; gpi->oldRect.size.width += 2; gpi->oldRect.size.height += 2; } - (void) _displayFrame: (NSRect) frame withPlacementInfo: (GormPlacementInfo*) gpi { NSSize minSize; if (gpi->firstPass == NO) [gpi->resizingIn displayRect: gpi->oldRect]; else gpi->firstPass = NO; minSize = [[_EO cell] cellSize]; if (frame.size.width < minSize.width) { switch (gpi->knob) { case IBBottomLeftKnobPosition: case IBMiddleLeftKnobPosition: case IBTopLeftKnobPosition: frame.origin.x = NSMaxX([self frame]) - minSize.width; frame.size.width = minSize.width; break; case IBTopRightKnobPosition: case IBMiddleRightKnobPosition: case IBBottomRightKnobPosition: frame.size.width = minSize.width; break; case IBTopMiddleKnobPosition: case IBBottomMiddleKnobPosition: case IBNoneKnobPosition: break; } } if (frame.size.height < minSize.height) { switch (gpi->knob) { case IBBottomLeftKnobPosition: case IBBottomRightKnobPosition: case IBBottomMiddleKnobPosition: frame.origin.y = NSMaxY([self frame]) - minSize.height; frame.size.height = minSize.height; break; case IBTopMiddleKnobPosition: case IBTopRightKnobPosition: case IBTopLeftKnobPosition: frame.size.height = minSize.height; break; case IBMiddleLeftKnobPosition: case IBMiddleRightKnobPosition: case IBNoneKnobPosition: break; } } GormShowFrameWithKnob(frame, gpi->knob); gpi->lastFrame = frame; gpi->oldRect = GormExtBoundsForRect(frame); gpi->oldRect.origin.x--; gpi->oldRect.origin.y--; gpi->oldRect.size.width += 2; gpi->oldRect.size.height += 2; } #undef MIN #undef MAX #define MIN(a,b) (a>b?b:a) #define MAX(a,b) (a>b?a:b) - (void) _displayFrameWithHint: (NSRect) frame withPlacementInfo: (GormPlacementInfo*)gpi { float leftOfFrame; float rightOfFrame; float topOfFrame; float bottomOfFrame; NSInteger i; NSInteger count; NSInteger lastDistance; NSInteger minimum = 10; BOOL leftEmpty = YES; BOOL rightEmpty = YES; BOOL topEmpty = YES; BOOL bottomEmpty = YES; float bestLeftPosition = 0; float bestRightPosition = 0; float bestTopPosition = 0; float bestBottomPosition = 0; float leftStart = 0; float rightStart = 0; float topStart = 0; float bottomStart = 0; float leftEnd = 0; float rightEnd = 0; float topEnd = 0; float bottomEnd = 0; NSSize minSize; NSMutableArray *bests; minSize = [[_EO cell] cellSize]; if (gpi->hintInitialized == NO) { [self _initializeHintWithInfo: gpi]; } { if (gpi->firstPass == NO) [gpi->resizingIn displayRect: gpi->oldRect]; else gpi->firstPass = NO; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastLeftRect]; [[self window] displayIfNeeded]; gpi->lastLeftRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastRightRect]; [[self window] displayIfNeeded]; gpi->lastRightRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastTopRect]; [[self window] displayIfNeeded]; gpi->lastTopRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastBottomRect]; [[self window] displayIfNeeded]; gpi->lastBottomRect = NSZeroRect; } if (frame.size.width < minSize.width) { switch (gpi->knob) { case IBBottomLeftKnobPosition: case IBMiddleLeftKnobPosition: case IBTopLeftKnobPosition: frame.origin.x = NSMaxX([self frame]) - minSize.width; frame.size.width = minSize.width; break; case IBTopRightKnobPosition: case IBMiddleRightKnobPosition: case IBBottomRightKnobPosition: frame.size.width = minSize.width; break; case IBTopMiddleKnobPosition: case IBBottomMiddleKnobPosition: case IBNoneKnobPosition: break; } } if (frame.size.height < minSize.height) { switch (gpi->knob) { case IBBottomLeftKnobPosition: case IBBottomRightKnobPosition: case IBBottomMiddleKnobPosition: frame.origin.y = NSMaxY([self frame]) - minSize.height; frame.size.height = minSize.height; break; case IBTopMiddleKnobPosition: case IBTopRightKnobPosition: case IBTopLeftKnobPosition: frame.size.height = minSize.height; break; case IBMiddleLeftKnobPosition: case IBMiddleRightKnobPosition: case IBNoneKnobPosition: break; } } leftOfFrame = NSMinX(frame); rightOfFrame = NSMaxX(frame); topOfFrame = NSMaxY(frame); bottomOfFrame = NSMinY(frame); if (gpi->knob == IBTopLeftKnobPosition || gpi->knob == IBMiddleLeftKnobPosition || gpi->knob == IBBottomLeftKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = 6; count = [gpi->leftHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->leftHints objectAtIndex: i] distanceToFrame: frame]; if ((lastDistance < minimum) && (rightOfFrame - [[gpi->leftHints objectAtIndex: i] position] >= minSize.width)) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->leftHints objectAtIndex: i]]; minimum = lastDistance; bestLeftPosition = [[gpi->leftHints objectAtIndex: i] position]; leftEmpty = NO; } else if ((lastDistance == minimum) && (leftEmpty == NO) && ([[gpi->leftHints objectAtIndex: i] position] == bestLeftPosition)) [bests addObject: [gpi->leftHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { leftStart = NSMinY([[bests objectAtIndex: 0] frame]); leftEnd = NSMaxY([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { leftStart = MIN(NSMinY([[bests objectAtIndex: i] frame]), leftStart); leftEnd = MAX(NSMaxY([[bests objectAtIndex: i] frame]), leftEnd); } leftOfFrame = bestLeftPosition; } } if (gpi->knob == IBTopRightKnobPosition || gpi->knob == IBMiddleRightKnobPosition || gpi->knob == IBBottomRightKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = 6; count = [gpi->rightHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->rightHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum && ([[gpi->rightHints objectAtIndex: i] position] - leftOfFrame >= minSize.width)) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->rightHints objectAtIndex: i]]; minimum = lastDistance; bestRightPosition = [[gpi->rightHints objectAtIndex: i] position]; rightEmpty = NO; } else if ((lastDistance == minimum) && (rightEmpty == NO) && ([[gpi->rightHints objectAtIndex: i] position] == bestRightPosition)) [bests addObject: [gpi->rightHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { rightStart = NSMinY([[bests objectAtIndex: 0] frame]); rightEnd = NSMaxY([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { rightStart = MIN(NSMinY([[bests objectAtIndex: i] frame]), rightStart); rightEnd = MAX(NSMaxY([[bests objectAtIndex: i] frame]), rightEnd); } rightOfFrame = bestRightPosition; } } if (gpi->knob == IBTopRightKnobPosition || gpi->knob == IBTopLeftKnobPosition || gpi->knob == IBTopMiddleKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = 6; count = [gpi->topHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->topHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum && ([[gpi->topHints objectAtIndex: i] position] - bottomOfFrame >= minSize.height)) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->topHints objectAtIndex: i]]; minimum = lastDistance; bestTopPosition = [[gpi->topHints objectAtIndex: i] position]; topEmpty = NO; } else if ((lastDistance == minimum) && (topEmpty == NO) && ([[gpi->topHints objectAtIndex: i] position] == bestTopPosition)) [bests addObject: [gpi->topHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { topStart = NSMinX([[bests objectAtIndex: 0] frame]); topEnd = NSMaxX([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { topStart = MIN(NSMinX([[bests objectAtIndex: i] frame]), topStart); topEnd = MAX(NSMaxX([[bests objectAtIndex: i] frame]), topEnd); } topOfFrame = bestTopPosition; } } if (gpi->knob == IBBottomRightKnobPosition || gpi->knob == IBBottomLeftKnobPosition || gpi->knob == IBBottomMiddleKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = 6; count = [gpi->bottomHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->bottomHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum && (topOfFrame - [[gpi->bottomHints objectAtIndex: i] position] >= minSize.height)) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->bottomHints objectAtIndex: i]]; minimum = lastDistance; bestBottomPosition = [[gpi->bottomHints objectAtIndex: i] position]; bottomEmpty = NO; } else if ((lastDistance == minimum) && (bottomEmpty == NO) && ([[gpi->bottomHints objectAtIndex: i] position] == bestBottomPosition)) [bests addObject: [gpi->bottomHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { bottomStart = NSMinX([[bests objectAtIndex: 0] frame]); bottomEnd = NSMaxX([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { bottomStart = MIN(NSMinX([[bests objectAtIndex: i] frame]), bottomStart); bottomEnd = MAX(NSMaxX([[bests objectAtIndex: i] frame]), bottomEnd); } bottomOfFrame = bestBottomPosition; } } gpi->hintFrame = NSMakeRect (leftOfFrame, bottomOfFrame, rightOfFrame - leftOfFrame, topOfFrame - bottomOfFrame); { [[NSColor redColor] set]; if (!leftEmpty) { leftStart = MIN(NSMinY(gpi->hintFrame), leftStart); leftEnd = MAX(NSMaxY(gpi->hintFrame), leftEnd); gpi->lastLeftRect = NSMakeRect(bestLeftPosition - 1, leftStart, 2, leftEnd - leftStart); NSRectFill(gpi->lastLeftRect); } if (!rightEmpty) { rightStart = MIN(NSMinY(gpi->hintFrame), rightStart); rightEnd = MAX(NSMaxY(gpi->hintFrame), rightEnd); gpi->lastRightRect = NSMakeRect(bestRightPosition - 1, rightStart, 2, rightEnd - rightStart); NSRectFill(gpi->lastRightRect); } if (!topEmpty) { topStart = MIN(NSMinX(gpi->hintFrame), topStart); topEnd = MAX(NSMaxX(gpi->hintFrame), topEnd); gpi->lastTopRect = NSMakeRect(topStart, bestTopPosition - 1, topEnd - topStart, 2); NSRectFill(gpi->lastTopRect); } if (!bottomEmpty) { bottomStart = MIN(NSMinX(gpi->hintFrame), bottomStart); bottomEnd = MAX(NSMaxX(gpi->hintFrame), bottomEnd); gpi->lastBottomRect = NSMakeRect(bottomStart, bestBottomPosition - 1, bottomEnd - bottomStart, 2); NSRectFill(gpi->lastBottomRect); } } GormShowFrameWithKnob(gpi->hintFrame, gpi->knob); gpi->oldRect = GormExtBoundsForRect(gpi->hintFrame); gpi->oldRect.origin.x--; gpi->oldRect.origin.y--; gpi->oldRect.size.width += 2; gpi->oldRect.size.height += 2; } - (void) updateResizingWithFrame: (NSRect) frame andEvent: (NSEvent *)theEvent andPlacementInfo: (GormPlacementInfo*) gpi { if ([theEvent modifierFlags] & NSAlternateKeyMask) [self _altDisplayFrame: frame withPlacementInfo: gpi]; else if ([theEvent modifierFlags] & NSShiftKeyMask) [self _displayFrame: frame withPlacementInfo: gpi]; else [self _displayFrameWithHint: frame withPlacementInfo: gpi]; } - (void) validateFrame: (NSRect) frame withEvent: (NSEvent *) theEvent andPlacementInfo: (GormPlacementInfo*)gpi { frame = gpi->lastFrame; if ([theEvent modifierFlags] & NSAlternateKeyMask) { NSSize cellSize = [self frame].size; id editor; NSInteger col; NSInteger row; NSMatrix *matrix; col = gpi->lastFrame.size.width / cellSize.width; row = gpi->lastFrame.size.height / cellSize.height; // let's morph into a matrix matrix = [[NSMatrix alloc] initWithFrame: gpi->lastFrame mode: NSRadioModeMatrix prototype: [_EO cell] numberOfRows: row numberOfColumns: col]; [matrix setIntercellSpacing: NSMakeSize(0, 0)]; [matrix setFrame: gpi->lastFrame]; RETAIN(self); [[self superview] addSubview: matrix]; [parent selectObjects: [NSArray arrayWithObject: self]]; [parent deleteSelection]; [document attachObject: matrix toParent: _EO]; editor = [document editorForObject: matrix inEditor: parent create: YES]; [parent selectObjects: [NSArray arrayWithObject: editor]]; RELEASE(self); } else if ([theEvent modifierFlags] & NSShiftKeyMask) { [self setFrame: frame]; } else { [super validateFrame: frame withEvent: theEvent andPlacementInfo: gpi]; } } @end @implementation NSTextField (IBObjectAdditions) - (NSString*) editorClassName { return @"GormTextFieldEditor"; } @end @interface GormTextFieldEditor : GormControlEditor @end @implementation GormTextFieldEditor - (void) mouseDown: (NSEvent*)theEvent { // double-clicked -> let's edit if (([theEvent clickCount] == 2) && [parent isOpened]) { [self editTextField: _editedObject withEvent: theEvent]; [[NSNotificationCenter defaultCenter] postNotificationName: IBSelectionChangedNotification object: parent]; } else { [super mouseDown: theEvent]; } } @end apps-gorm-gorm-1_5_0/GormCore/GormCore.h000066400000000000000000000073451475375552500201640ustar00rootroot00000000000000/* GormCore.h * * Copyright (C) 2019 Free Software Foundation, Inc. * * Author: Lars Sonchocky-Helldorf * Date: 01.11.19 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #ifndef GNUSTEP //! Project version number for GormCore. FOUNDATION_EXPORT double GormCoreVersionNumber; //! Project version string for GormCore. FOUNDATION_EXPORT const unsigned char GormCoreVersionString[]; #endif #ifndef INCLUDED_GORMCORE_H #define INCLUDED_GORMCORE_H #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #endif apps-gorm-gorm-1_5_0/GormCore/GormCustomClassInspector.h000066400000000000000000000027241475375552500234170ustar00rootroot00000000000000/** GormCustomClassInspector allow user to select custom classes Copyright (C) 2002 Free Software Foundation, Inc. Author: Gregory John Casamento Date: September 2002 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ #ifndef INCLUDED_GormCustomClassInspector_h #define INCLUDED_GormCustomClassInspector_h #include #include @class GormClassManager; @interface GormCustomClassInspector : IBInspector { id browser; id _document; GormClassManager *_classManager; NSString *_currentSelectionClassName; NSString *_parentClassName; NSUInteger _rowToSelect; } - (void) select: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormCustomClassInspector.m000066400000000000000000000264201475375552500234230ustar00rootroot00000000000000/** GormCustomClassInspector allow user to select custom classes Copyright (C) 2002 Free Software Foundation, Inc. Author: Gregory John Casamento Date: September 2002 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All rights reserved */ #include #include "GormCustomClassInspector.h" #include "GormPrivate.h" #include "GormClassManager.h" #include "GormDocument.h" #include "GormPrivate.h" #include "GormViewEditor.h" @implementation GormCustomClassInspector + (void) initialize { if (self == [GormCustomClassInspector class]) { } } - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; // initialize all member variables... _classManager = nil; _currentSelectionClassName = nil; _rowToSelect = 0; // load the gui... if (![bundle loadNibNamed: @"GormCustomClassInspector" owner: self topLevelObjects: NULL]) { NSLog(@"Could not open gorm GormCustomClassInspector"); return nil; } } return self; } - (void) _setCurrentSelectionClassName: (id)anobject { NSString *className; className = [_classManager customClassForObject: anobject]; if ([className isEqualToString: @""] || className == nil) { className = [anobject className]; } ASSIGN(_currentSelectionClassName, className); ASSIGN(_parentClassName, [anobject className]); } - (NSMutableArray *) _generateClassList { NSMutableArray *classes = [NSMutableArray arrayWithObject: _parentClassName]; NSArray *subclasses = [_classManager allSubclassesOf: _parentClassName]; NSEnumerator *en = [subclasses objectEnumerator]; NSString *className = nil; Class parentClass = NSClassFromString(_parentClassName); while((className = [en nextObject]) != nil) { if([_classManager isCustomClass: className] == YES) { NSString *superClass = [_classManager nonCustomSuperClassOf: className]; Class cls = NSClassFromString(superClass); if(cls != nil) { if([cls respondsToSelector: @selector(canSubstituteForClass:)]) { if([cls canSubstituteForClass: parentClass]) { [classes addObject: className]; } } } } else if(parentClass != nil) { Class cls = NSClassFromString(className); if(cls != nil) { if([cls respondsToSelector: @selector(canSubstituteForClass:)]) { if([cls canSubstituteForClass: parentClass]) { [classes addObject: className]; } } } } } return classes; } - (void) setObject: (id)anObject { if(anObject != nil) { NSMutableArray *classes = nil; [super setObject: anObject]; _document = [(id)[NSApp delegate] activeDocument]; _classManager = [(id)[NSApp delegate] classManager]; // get the information... NSDebugLog(@"Current selection %@", [self object]); [self _setCurrentSelectionClassName: [self object]]; // load the array... [browser loadColumnZero]; // get a list of all of the classes allowed and the class to be shown // and select the appropriate row in the inspector... classes = [self _generateClassList]; // [NSMutableArray arrayWithObject: _parentClassName]; // [classes addObjectsFromArray: [_classManager allCustomSubclassesOf: _parentClassName]]; _rowToSelect = [classes indexOfObject: _currentSelectionClassName]; _rowToSelect = (_rowToSelect != NSNotFound)?_rowToSelect:0; if(_rowToSelect != NSNotFound) { [browser selectRow: _rowToSelect inColumn: 0]; } } } - (void) awakeFromNib { [browser setTarget: self]; [browser setAction: @selector(select:)]; [browser setMaxVisibleColumns: 1]; } - (void) _replaceWithCellClassForClassName: (NSString *)name { NSString *className = name; if([[object class] respondsToSelector: @selector(cellClass)]) { if([_classManager customClassForObject: object]) { if([_classManager isCustomClass: className]) { className = [_classManager nonCustomSuperClassOf: name]; } } if(className != nil) { Class cls = NSClassFromString(className); if(cls != nil) { Class cellClass = [cls cellClass]; if(cellClass != [[object cell] class]) { id newCell = [[cellClass alloc] init]; id cell = RETAIN([object cell]); // retain the old cell for now... BOOL drawsBackground = NO; if([object respondsToSelector: @selector(drawsBackground)]) { drawsBackground = [object drawsBackground]; } // TODO: Need to find a more generic way to handle this. Perhaps using // encoding, kv-copying or @defs(...). // set the new cell.. [object setCell: newCell]; // general state... if([newCell respondsToSelector: @selector(setFont:)] && [cell respondsToSelector: @selector(font)]) { [newCell setFont: [cell font]]; } if([newCell respondsToSelector: @selector(setEnabled:)] && [cell respondsToSelector: @selector(isEnabled)]) { [newCell setEnabled: [cell isEnabled]]; } if([newCell respondsToSelector: @selector(setEditable:)] && [cell respondsToSelector: @selector(isEditable)]) { [newCell setEditable: [cell isEditable]]; } if([newCell respondsToSelector: @selector(setImportsGraphics:)] && [cell respondsToSelector: @selector(importsGraphics)]) { [newCell setImportsGraphics: [cell importsGraphics]]; } if([newCell respondsToSelector: @selector(setShowsFirstResponder:)] && [cell respondsToSelector: @selector(showsFirstResponder)]) { [newCell setShowsFirstResponder: [cell showsFirstResponder]]; } if([newCell respondsToSelector: @selector(setRefusesFirstResponder:)] && [cell respondsToSelector: @selector(refusesFirstResponder)]) { [newCell setRefusesFirstResponder: [cell refusesFirstResponder]]; } if([newCell respondsToSelector: @selector(setBordered:)] && [cell respondsToSelector: @selector(isBordered)]) { [newCell setBordered: [cell isBordered]]; } if([newCell respondsToSelector: @selector(setBezeled:)] && [cell respondsToSelector: @selector(isBezeled)]) { [newCell setBezeled: [cell isBezeled]]; } if([newCell respondsToSelector: @selector(setScrollable:)] && [cell respondsToSelector: @selector(isScrollable)]) { [newCell setScrollable: [cell isScrollable]]; } if([newCell respondsToSelector: @selector(setSelectable:)] && [cell respondsToSelector: @selector(isSelectable)]) { [newCell setSelectable: [cell isSelectable]]; } if([newCell respondsToSelector: @selector(setState:)] && [cell respondsToSelector: @selector(state)]) { [newCell setState: [cell state]]; } if([(NSCell *)cell type] == NSTextCellType) { // title... if([newCell respondsToSelector: @selector(setStringValue:)] && [cell respondsToSelector: @selector(stringValue)]) { [newCell setStringValue: [cell stringValue]]; } if([newCell respondsToSelector: @selector(setTitle:)] && [cell respondsToSelector: @selector(title)]) { [newCell setTitle: [cell title]]; } if([newCell respondsToSelector: @selector(setAlternateTitle:)] && [cell respondsToSelector: @selector(alternateTitle)]) { [newCell setAlternateTitle: [cell alternateTitle]]; } } else if([(NSCell *)cell type] == NSImageCellType) { // images... if([newCell respondsToSelector: @selector(setAlternateImage:)] && [cell respondsToSelector: @selector(alternateImage)]) { [newCell setAlternateImage: [cell alternateImage]]; } if([newCell respondsToSelector: @selector(setImage:)] && [cell respondsToSelector: @selector(image)]) { [newCell setImage: [cell image]]; } if([newCell respondsToSelector: @selector(setImagePosition:)] && [cell respondsToSelector: @selector(imagePosition)]) { [newCell setImagePosition: [cell imagePosition]]; } } // set attributes of textfield. if([object respondsToSelector: @selector(setDrawsBackground:)]) { [object setDrawsBackground: drawsBackground]; } [object setNeedsDisplay: YES]; RELEASE(cell); } } } } } - (void) select: (id)sender { NSCell *cell = [browser selectedCellInColumn: 0]; NSString *stringValue = [NSString stringWithString: [cell stringValue]]; NSString *nameForObject = [_document nameForObject: [self object]]; NSString *classForObject = [[self object] className]; GormViewEditor *gve = (GormViewEditor *)[_document editorForObject: [self object] create: NO]; NSDebugLog(@"selected = %@, class = %@",stringValue,nameForObject); /* add or remove the mapping as necessary. */ if(nameForObject != nil) { [super ok: sender]; if (![stringValue isEqualToString: classForObject]) { [_classManager setCustomClass: stringValue forName: nameForObject]; } else { [_classManager removeCustomClassForName: nameForObject]; } [gve setToolTip: [NSString stringWithFormat: @"%@,%@", nameForObject, stringValue]]; [self _replaceWithCellClassForClassName: stringValue]; } else { NSLog(@"name for object %@ returned as nil",[self object]); } } // Browser delegate - (void) browser: (NSBrowser *)sender createRowsForColumn: (NSInteger)column inMatrix: (NSMatrix *)matrix { if (_parentClassName != nil) { NSMutableArray *classes; NSEnumerator *e = nil; NSString *class = nil; NSBrowserCell *cell = nil; NSInteger i = 0; classes = [self _generateClassList]; // enumerate through the classes... e = [classes objectEnumerator]; while ((class = [e nextObject]) != nil) { if ([class isEqualToString: _currentSelectionClassName]) { _rowToSelect = i; } [matrix insertRow: i withCells: nil]; cell = [matrix cellAtRow: i column: 0]; [cell setLeaf: YES]; i++; [cell setStringValue: class]; } } } - (NSString*) browser: (NSBrowser*)sender titleOfColumn: (NSInteger)column { NSDebugLog(@"Delegate called"); return @"Class"; } - (void) browser: (NSBrowser *)sender willDisplayCell: (id)cell atRow: (NSInteger)row column: (NSInteger)column { } - (BOOL) browser: (NSBrowser *)sender isColumnValid: (NSInteger)column { return YES; } @end apps-gorm-gorm-1_5_0/GormCore/GormCustomView.h000066400000000000000000000022461475375552500213740ustar00rootroot00000000000000/* GormCustomView.h - Visual representation of a custom view placeholder * * Copyright (C) 2001 Free Software Foundation, Inc. * * Author: Adam Fedor * Date: 2001 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormCustomView_h #define INCLUDED_GormCustomView_h #include @interface GormCustomView : NSTextField { NSString *className; } - (void) setClassName: (NSString *)aName; - (NSString *) className; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormCustomView.m000066400000000000000000000173121475375552500214010ustar00rootroot00000000000000/* GormCustomView - Visual representation of a custom view placeholder * * Copyright (C) 2001 Free Software Foundation, Inc. * * Author: Adam Fedor * Date: 2001 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include #include #include @class GSCustomView; @interface CustomView : NSView @end @implementation CustomView - (id) initWithFrame: (NSRect)frame { if((self = [super initWithFrame: frame]) != nil) { // Replace the CustomView with an NSView of the same dimensions. self = (id)[[NSView alloc] initWithFrame: frame]; } return self; } @end @implementation GormCustomView - (id)initWithFrame:(NSRect)frameRect { self = [super initWithFrame: frameRect]; if(self != nil) { [self setBackgroundColor: [NSColor darkGrayColor]]; [self setTextColor: [NSColor whiteColor]]; [self setDrawsBackground: YES]; [self setAlignment: NSCenterTextAlignment]; [self setFont: [NSFont boldSystemFontOfSize: 0]]; [self setEditable: NO]; [self setSelectable: NO]; [self setClassName: @"CustomView"]; } return self; } - (void) dealloc { RELEASE(className); [super dealloc]; } - (NSString*) inspectorClassName { return @"GormFilesOwnerInspector"; } - (NSString*) classInspectorClassName { return @"GormFilesOwnerInspector"; } - (void) setClassName: (NSString *)aName { ASSIGN(className, aName); [self setStringValue: aName]; } - (NSString *) className { return className; } - (Class) bestPossibleSuperClass { Class cls = [NSView class]; GormClassManager *classManager = [(id)[NSApp delegate] classManager]; if([classManager isSuperclass: @"NSView" linkedToClass: className]) { NSString *superClass = [classManager nonCustomSuperClassOf: className]; // get the superclass if one exists... if(superClass != nil) { cls = NSClassFromString(superClass); if(cls == nil) { cls = [NSView class]; } } } return cls; } /* * This needs to be coded like a GSNibItem. How do we make sure this * tracks changes in GSNibItem coding? */ - (void) encodeWithCoder: (NSCoder*)aCoder { if([aCoder allowsKeyedCoding]) { GormClassManager *classManager = [(id)[NSApp delegate] classManager]; NSString *extension = nil; ASSIGNCOPY(extension,[classManager nonCustomSuperClassOf: className]); [aCoder encodeObject: className forKey: @"NSClassName"]; [aCoder encodeRect: [self frame] forKey: @"NSFrame"]; if(extension != nil) { [aCoder encodeObject: extension forKey: @"NSExtension"]; } if([self nextResponder] != nil) { [aCoder encodeObject: [self nextResponder] forKey: @"NSNextResponder"]; } if([self superview] != nil) { [aCoder encodeObject: [self superview] forKey: @"NSSuperview"]; } RELEASE(extension); } else { [aCoder encodeObject: [self stringValue]]; [aCoder encodeRect: _frame]; [aCoder encodeValueOfObjCType: @encode(unsigned int) at: &_autoresizingMask]; } } - (id) initWithCoder: (NSCoder*)aCoder { if([aCoder allowsKeyedCoding]) { NSCustomView *customView = [[NSCustomView alloc] initWithCoder: aCoder]; NSArray *subviews = [customView subviews]; // if the custom view has subviews.... if(subviews != nil && [subviews count] > 0) { Class cls = [self bestPossibleSuperClass]; id replacementView = [[cls alloc] initWithFrame: [customView frame]]; NSEnumerator *en = [[customView subviews] objectEnumerator]; id v = nil; [replacementView setAutoresizingMask: [customView autoresizingMask]]; while((v = [en nextObject]) != nil) { [replacementView addSubview: v]; } return replacementView; } else { [self initWithFrame: [customView frame]]; _autoresizingMask = [customView autoresizingMask]; } // get the classname... [self setClassName: [customView className]]; // _super_view = [customView superview]; // _window = [customView window]; RELEASE(customView); return self; } else { NSInteger version = [aCoder versionForClassName: NSStringFromClass([GSCustomView class])]; if (version == 1) { NSString *string; // do not decode super. We need to maintain mapping to NibItems string = [aCoder decodeObject]; _frame = [aCoder decodeRect]; [self initWithFrame: _frame]; [aCoder decodeValueOfObjCType: @encode(unsigned int) at: &_autoresizingMask]; [self setClassName: string]; return self; } else if (version == 0) { NSString *string; // do not decode super. We need to maintain mapping to NibItems string = [aCoder decodeObject]; _frame = [aCoder decodeRect]; [self initWithFrame: _frame]; [self setClassName: string]; return self; } else { NSLog(@"no initWithCoder for version"); RELEASE(self); return nil; } } return nil; } @end @interface GormTestCustomView : GSNibItem { } @end @implementation GormTestCustomView - (Class) bestPossibleSuperClass { Class cls = [NSView class]; GormClassManager *classManager = [(id)[NSApp delegate] classManager]; if([classManager isSuperclass: @"NSOpenGLView" linkedToClass: theClass] || [theClass isEqual: @"NSOpenGLView"]) { cls = [GormOpenGLView class]; } else if([classManager isSuperclass: @"NSView" linkedToClass: theClass]) { NSString *superClass = [classManager nonCustomSuperClassOf: theClass]; // get the superclass if one exists... if(superClass != nil) { cls = NSClassFromString(superClass); if(cls == nil) { cls = [NSView class]; } } } return cls; } - (id) initWithCoder: (NSCoder*)aCoder { id obj; Class cls; NSUInteger mask; GormClassManager *classManager = [(id)[NSApp delegate] classManager]; [aCoder decodeValueOfObjCType: @encode(id) at: &theClass]; theFrame = [aCoder decodeRect]; [aCoder decodeValueOfObjCType: @encode(NSUInteger) at: &mask]; cls = NSClassFromString(theClass); if([classManager isSuperclass: @"NSOpenGLView" linkedToClass: theClass] || [theClass isEqual: @"NSOpenGLView"] || cls == nil) { cls = [self bestPossibleSuperClass]; } obj = [cls allocWithZone: [self zone]]; if (theFrame.size.height > 0 && theFrame.size.width > 0) obj = [obj initWithFrame: theFrame]; else obj = [obj init]; if ([obj respondsToSelector: @selector(setAutoresizingMask:)]) { [obj setAutoresizingMask: mask]; } /* if (![self isKindOfClass: [GSCustomView class]]) { RETAIN(obj); } */ RELEASE(self); return obj; } - (void) encodeWithCoder: (NSCoder *)coder { // nothing to do. This is a class for testing custom views only. GJC } @end apps-gorm-gorm-1_5_0/GormCore/GormDefines.h000066400000000000000000000021271475375552500206420ustar00rootroot00000000000000/* GormDefines.h * * Copyright (C) 2009 Free Software Foundation, Inc. * * Author: Gregory Casamento * Date: 2009 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormDefines_h #define INCLUDED_GormDefines_h #ifndef max #define max(a,b) ((a) >= (b) ? (a):(b)) #endif #ifndef min #define min(a,b) ((a) <= (b) ? (a):(b)) #endif #endif // GormDefines apps-gorm-gorm-1_5_0/GormCore/GormDocument.h000066400000000000000000000305221475375552500210430ustar00rootroot00000000000000/* GormDocument.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormDocument_h #define INCLUDED_GormDocument_h #include #include #include #include @class GormClassManager, GormClassEditor, GormObjectProxy, GormFilesOwner, GormFilePrefsManager, GormDocumentWindow, GormObjectViewController; /* * Trivial classes for connections from objects to their editors, and from * child editors to their parents. This does nothing special, but we can * use the fact that it's a different class to search for it in the connections * array. */ @interface GormObjectToEditor : NSNibConnector @end @interface GormEditorToParent : NSNibConnector @end /* * Each document has a GormFirstResponder object that is used as a placeholder * for the first responder at any instant. */ @interface GormFirstResponder : NSObject { } @end @interface GormDocument : NSDocument { GormClassManager *classManager; GormFilesOwner *filesOwner; GormFirstResponder *firstResponder; GormObjectProxy *fontManager; NSMapTable *objToName; GormDocumentWindow *window; NSBox *selectionBox; NSScrollView *scrollView; NSScrollView *classesScrollView; NSScrollView *soundsScrollView; NSScrollView *imagesScrollView; id classesView; id objectsView; id soundsView; id imagesView; BOOL isActive; BOOL isDocumentOpen; NSMenu *savedMenu; NSMenuItem *quitItem; /* Replaced during test-mode */ NSMutableArray *savedEditors; NSMutableArray *hidden; NSMutableArray *openEditors; NSToolbar *toolbar; id lastEditor; BOOL isOlderArchive; id filePrefsView; GormFilePrefsManager *filePrefsManager; NSWindow *filePrefsWindow; NSMutableArray *resourceManagers; NSData *infoData; /* data.info contents */ NSMutableArray *images; /* temporary storage for images. */ NSMutableArray *sounds; /* temporary storage for sounds. */ NSFileWrapper *scmWrapper; // container data structures NSMutableDictionary *nameTable; NSMutableArray *connections; NSMutableSet *topLevelObjects; NSMutableSet *visibleWindows; NSMutableSet *deferredWindows; // Controllers... GormObjectViewController *objectViewController; } /* Handle notifications */ /** * Handle all notifications. Checks the value of [aNotification name] * against the set of notifications this class responds to and takes * appropriate action. */ - (void) handleNotification: (NSNotification*)aNotification; /* Document management */ /** * Returns YES, if document is active. */ - (BOOL) isActive; /** * Return YES, if anObject is visible at launch time. */ - (BOOL) objectIsVisibleAtLaunch: (id)anObject; /** * Return YES, if anObject is deferred. */ - (BOOL) objectIsDeferred: (id)anObject; /** * Retrieve all objects which have parent as thier parent. If flag is YES, * then retrieve the entire graph of objects starting with the parent. */ - (NSArray *) retrieveObjectsForParent: (id)parent recursively: (BOOL)flag; /** * Marks this document as the currently active document. The active document is * the one being edited by the user. */ - (void) setDocumentActive: (BOOL)flag; /** * Add object to the visible at launch list. */ - (void) setObject: (id)anObject isVisibleAtLaunch: (BOOL)flag; /** * Add object to the defferred list. */ - (void) setObject: (id)anObject isDeferred: (BOOL)flag; /** * The document window. */ - (NSWindow*) window; /** * Returns YES, if obj is a top level object. */ - (BOOL) isTopLevelObject: (id)obj; /** * Forces the closing of all editors in the document. */ - (void) closeAllEditors; /** * Create resource manager instances for all registered classes. */ - (void) createResourceManagers; /** * The list of all resource managers. */ - (NSArray *) resourceManagers; /** * Get the resource manager which handles the content on pboard. */ - (IBResourceManager *) resourceManagerForPasteboard: (NSPasteboard *)pboard; /** * Switch to the top level editor responsible for a given type. This allows the * document in the view to switch to the view which is appropriate for the resource * being dragged in. */ - (void) changeToTopLevelEditorAcceptingTypes: (NSArray *)types andFileType: (NSString *)fileType; /** * Switches to the view using the specified tag. * They are 0=objects, 1=images, 2=sounds, 3=classes, 4=file prefs. */ - (void) changeToViewWithTag: (int)tag; /** * returns the view using the specified tag. * They are 0=objects, 1=images, 2=sounds, 3=classes, 4=file prefs. */ - (NSView *)viewWithTag:(int)tag; /** * Returns all pasteboard types registered for with the IBResourceManager. */ - (NSArray *) allManagedPboardTypes; /** * Open the editor for anObject, with parent object. */ - (id) openEditorForObject: (id)anObject withParentObject: (id)parentObj; /* Language translation */ /** * Load a given file into the reciever using `filename'. */ - (void) importStringsFromFile: (NSString *)filename; /** * Export the strings from receiver to the file indicated by 'filename'. */ - (void) exportStringsToFile: (NSString *)filename; /* Managing classes */ /** * Shared class manager */ - (GormClassManager*) classManager; /** * Create a subclass of the selected class */ - (id) createSubclass: (id)sender; /** * Instantiate the selected class */ - (id) instantiateClass: (id)sender; /** * Instantiate the class specified by the parameter className and * returns the reference name within the document */ - (NSString *) instantiateClassNamed: (NSString *)className; /** * Generate the class files for the selected class */ - (id) createClassFiles: (id)sender; /** * Add attribute to class */ - (id) addAttributeToClass: (id)sender; /** * Remove the selected class */ - (id) remove: (id)sender; /** * Select class named className */ - (void) selectClass: (NSString *)className; /** * Select class named className and edit it if flag is YES */ - (void) selectClass: (NSString *)className editClass: (BOOL)flag; /** * Returns YES if a class is selected in the view */ - (BOOL) classIsSelected; /** * Removes all instances of class named classNamed */ - (void) removeAllInstancesOfClass: (NSString *)classNamed; /* Sound & Image support */ /** * Open a sound and load it into the document. */ - (id) openSound: (id)sender; /** * Open an image and copy it into the document. */ - (id) openImage: (id)sender; /* Connections */ /** * */ - (NSMutableArray *) connections; /** * Build our reverse mapping information and other initialisation */ - (void) rebuildObjToNameMapping; /** * Removes all connections given action or outlet with the specified label * (paramter name) class name (parameter className). */ - (BOOL) removeConnectionsWithLabel: (NSString *)name forClassNamed: (NSString *)className isAction: (BOOL)action; /** * Remove all connections to any and all instances of className. */ - (BOOL) removeConnectionsForClassNamed: (NSString *)name; /** * Rename connections connected to an instance of on class to another. */ - (BOOL) renameConnectionsForClassNamed: (NSString *)name toName: (NSString *)newName; /** * Refresh all connections to any and all instances of className. Checks if * the class has the action/outlet present and deletes it, if it doesn't. */ - (void) refreshConnectionsForClassNamed: (NSString *)className; /* class loading */ /** * Load a class into the document. */ - (id) loadClass: (id)sender; /*** services/windows menus... ***/ /** * Set the services menu. */ - (void) setServicesMenu: (NSMenu *)menu; /** * Returns the services menu for the document. */ - (NSMenu *) servicesMenu; /** * Set the font menu. */ - (void) setFontMenu: (NSMenu *)menu; /** * Returns the font menu for the document. */ - (NSMenu *) fontMenu; /** * Sets the windows menu. */ - (void) setWindowsMenu: (NSMenu *)menu; /** * Returns the menu which will be the windows menu for the document. */ - (NSMenu *) windowsMenu; /** * Sets the recent documents menu. */ - (void) setRecentDocumentsMenu: (NSMenu *)menu; /** * Returns the menu which will be the recent documents menu for the document. */ - (NSMenu *) recentDocumentsMenu; /*** first responder/font manager ***/ /** * Returns stand-in object for fontManager. */ - (id) fontManager; /** * Returns stand-in object for firstResponder */ - (id) firstResponder; /* Layout */ /** * Arrages selected objects based on the either in front of or in * back of the view stack. */ - (void) arrangeSelectedObjects: (id)sender; /** * Aligns selected objects on a given axis. */ - (void) alignSelectedObjects: (id)sender; /** * WindowAndRect:forObject: is called by Gorm to determine where it should * draw selection markup */ - (NSWindow*) windowAndRect: (NSRect*)r forObject: (id)object; /** * Save the SCM directory. */ - (void) setSCMWrapper: (NSFileWrapper *) wrapper; /** * Save the SCM directory. */ - (NSFileWrapper *) scmWrapper; /** * Images */ - (NSArray *) images; /** * Sounds */ - (NSArray *) sounds; /** * Images */ - (void) setImages: (NSArray *) imgs; /** * Sounds */ - (void) setSounds: (NSArray *) snds; /** * File's Owner */ - (GormFilesOwner *) filesOwner; /** * File preferences. */ - (GormFilePrefsManager *) filePrefsManager; /** * Windows visible at launch... */ - (NSSet *) visibleWindows; /** * Windows deferred. */ - (NSSet *) deferredWindows; /** * Set the document open flag. */ - (void) setDocumentOpen: (BOOL) flag; /** * Return the document open flag. */ - (BOOL) isDocumentOpen; /** * Set the file info for this document. */ - (void) setInfoData: (NSData *)data; /** * return the file info. */ - (NSData *) infoData; /** * Set the "older archive" flag. */ - (void) setOlderArchive: (BOOL)flag; /** * Return YES if this is an older archive. */ - (BOOL) isOlderArchive; /** * Deactivate the editors for archiving.. */ - (void) deactivateEditors; /** * Reactivate all of the editors... */ - (void) reactivateEditors; /** * Returns the name for the object... */ - (NSString*) nameForObject: (id)anObject; /** * Returns the object for name. */ - (id) objectForName: (NSString*)name; /** * Returns all names for all objects known to Gorm. */ - (NSArray *) objects; /** * Add aConnector to the set of connectors in this document. */ - (void) addConnector: (id)aConnector; /** * Returns a set containing the top level objects for this document. */ - (NSMutableSet *) topLevelObjects; /** * Returns an array of issues. If document is valid the array should be empty. */ - (NSArray *) validate; @end @interface GormDocument (MenuValidation) /** * Returns YES if the document is editing instance/objects. */ - (BOOL) isEditingObjects; /** * Returns YES if the document is editing images. */ - (BOOL) isEditingImages; /** * Returns YES if the document is editing sounds. */ - (BOOL) isEditingSounds; /** * Returns YES if the document is editing classes. */ - (BOOL) isEditingClasses; @end @interface GormDocument (Metadata) @end #endif apps-gorm-gorm-1_5_0/GormCore/GormDocument.m000066400000000000000000003155701475375552500210610ustar00rootroot00000000000000/* GormDocument.m * * This class contains Gorm specific implementation of the IBDocuments * protocol plus additional methods which are useful for managing the * contents of the document. * * Copyright (C) 1999,2002,2003,2004,2005,2020, * 2021 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2002,2003,2004,2005,2020,2021 * Author: Richard Frith-Macdonald * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #import #import #import #import "GormPrivate.h" #import "GormClassManager.h" #import "GormCustomView.h" #import "GormOutlineView.h" #import "GormFunctions.h" #import "GormFilePrefsManager.h" #import "GormViewWindow.h" #import "NSView+GormExtensions.h" #import "GormSound.h" #import "GormImage.h" #import "GormResourceManager.h" #import "GormClassEditor.h" #import "GormSoundEditor.h" #import "GormImageEditor.h" #import "GormObjectEditor.h" #import "GormWrapperBuilder.h" #import "GormWrapperLoader.h" #import "GormDocumentWindow.h" #import "GormDocumentController.h" #import "GormXLIFFDocument.h" #import "GormObjectViewController.h" @interface NSObject (GormNSCoding) @end @implementation NSObject (GormNSCoding) - (instancetype) initWithCoder: (NSCoder *)coder { return [self init]; } - (void) encodeWithCoder: (NSCoder *)coder { } @end @interface GormDisplayCell : NSButtonCell @end @implementation GormDisplayCell - (void) setShowsFirstResponder: (BOOL)flag { [super setShowsFirstResponder: NO]; // Never show ugly frame round button } @end @interface NSDocument (GormPrivate) - (NSWindow *) _docWindow; @end @implementation NSDocument (GormPrivate) - (NSWindow *) _docWindow { static Ivar iv; if (!iv) { iv = class_getInstanceVariable([NSDocument class], "_window"); NSAssert(iv, @"Unable to find _window ivar in NSDocument class"); } return object_getIvar(self, iv); } @end @implementation GormFirstResponder - (NSImage*) imageForViewer { static NSImage *image = nil; if (image == nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"GormFirstResponder"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } - (NSString*) inspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) connectInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) sizeInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) classInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) className { return @"FirstResponder"; } @end // // Implementation of trivial classes. // @implementation GormObjectToEditor @end @implementation GormEditorToParent @end @implementation GormDocument static NSImage *objectsImage = nil; static NSImage *imagesImage = nil; static NSImage *soundsImage = nil; static NSImage *classesImage = nil; static NSImage *fileImage = nil; /** * Initialize the class. */ + (void) initialize { if (self == [GormDocument class]) { NSBundle *bundle; NSString *path; bundle = [NSBundle bundleForClass: [self class]]; path = [bundle pathForImageResource: @"GormObject"]; if (path != nil) { objectsImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"GormImage"]; if (path != nil) { imagesImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"GormSound"]; if (path != nil) { soundsImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"GormClass"]; if (path != nil) { classesImage = [[NSImage alloc] initWithContentsOfFile: path]; } path = [bundle pathForImageResource: @"GormFile"]; if (path != nil) { fileImage = [[NSImage alloc] initWithContentsOfFile: path]; } // register the resource managers... [IBResourceManager registerResourceManagerClass: [IBResourceManager class]]; [IBResourceManager registerResourceManagerClass: [GormResourceManager class]]; [self setVersion: GNUSTEP_NIB_VERSION]; } } /** * Initialize the new GormDocument object. */ - (id) init { self = [super init]; if (self != nil) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; id delegate = [NSApp delegate]; // initialize... openEditors = [[NSMutableArray alloc] init]; classManager = [(GormClassManager *)[GormClassManager alloc] initWithDocument: self]; /* * NB. We must retain the map values (object names) as the nameTable * may not hold identical name objects, but merely equal strings. */ objToName = NSCreateMapTableWithZone(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 128, [self zone]); // for saving the editors when the gorm file is persisted. savedEditors = [[NSMutableArray alloc] init]; // observe certain notifications... [nc addObserver: self selector: @selector(handleNotification:) name: IBClassNameChangedNotification object: classManager]; [nc addObserver: self selector: @selector(handleNotification:) name: IBInspectorDidModifyObjectNotification object: classManager]; [nc addObserver: self selector: @selector(handleNotification:) name: GormDidModifyClassNotification object: classManager]; [nc addObserver: self selector: @selector(handleNotification:) name: GormDidAddClassNotification object: classManager]; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillBeginTestingInterfaceNotification object: nil]; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillEndTestingInterfaceNotification object: nil]; [nc addObserver: self selector: @selector(handleNotification:) name: IBResourceManagerRegistryDidChangeNotification object: nil]; // load resource managers [self createResourceManagers]; /* * Set up container data.... */ nameTable = [[NSMutableDictionary alloc] init]; connections = [[NSMutableArray alloc] init]; topLevelObjects = [[NSMutableSet alloc] init]; visibleWindows = [[NSMutableSet alloc] init]; deferredWindows = [[NSMutableSet alloc] init]; filesOwner = [[GormFilesOwner alloc] init]; [self setName: @"NSOwner" forObject: filesOwner]; firstResponder = [[GormFirstResponder alloc] init]; [self setName: @"NSFirst" forObject: firstResponder]; // preload headers... if ([defaults boolForKey: @"PreloadHeaders"]) { NSArray *headerList = [defaults arrayForKey: @"HeaderList"]; NSEnumerator *en = [headerList objectEnumerator]; id obj = nil; while ((obj = [en nextObject]) != nil) { NSString *header = (NSString *)obj; NSDebugLog(@"Preloading %@", header); NS_DURING { if(![classManager parseHeader: header]) { [delegate couldNotParseClassAtPath: header]; } } NS_HANDLER { [delegate exceptionWhileParsingClass: localException]; } NS_ENDHANDLER; } } // are we upgrading an archive? isOlderArchive = NO; // document is open... isDocumentOpen = YES; } return self; } /** * Perform any additional setup which needs to happen. */ - (void) awakeFromNib { NSRect scrollRect = {{0, 0}, {340, 188}}; NSRect mainRect = {{20, 0}, {320, 188}}; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSMenu *mainMenu = nil; NSEnumerator *en = nil; id o = nil; NSOutlineView *outlineView = [[NSOutlineView alloc] init]; // get the window and cache it... window = (GormDocumentWindow *)[self _docWindow]; [IBResourceManager registerForAllPboardTypes:window inDocument:self]; [window setDocument: self]; // set up the toolbar... toolbar = [(NSToolbar *)[NSToolbar alloc] initWithIdentifier: @"GormToolbar"]; [toolbar setAllowsUserCustomization: NO]; // [toolbar setSizeMode: NSToolbarSizeModeSmall]; [toolbar setDelegate: self]; [window setToolbar: toolbar]; RELEASE(toolbar); [toolbar setSelectedItemIdentifier: @"ObjectsItem"]; // set initial selection. // set up notifications for window. [nc addObserver: self selector: @selector(handleNotification:) name: NSWindowWillCloseNotification object: window]; [nc addObserver: self selector: @selector(handleNotification:) name: NSWindowDidBecomeKeyNotification object: window]; [nc addObserver: self selector: @selector(handleNotification:) name: NSWindowWillMiniaturizeNotification object: window]; [nc addObserver: self selector: @selector(handleNotification:) name: NSWindowDidDeminiaturizeNotification object: window]; // objects... NSScrollView *outlineScrollView = [[NSScrollView alloc] initWithFrame: scrollRect]; NSTableColumn *tbo = AUTORELEASE([[NSTableColumn alloc] initWithIdentifier: @"objects"]); NSTableColumn *tbc = AUTORELEASE([[NSTableColumn alloc] initWithIdentifier: @"destination"]); NSTableColumn *tbs = AUTORELEASE([[NSTableColumn alloc] initWithIdentifier: @"source"]); NSTableColumn *tbcl = AUTORELEASE([[NSTableColumn alloc] initWithIdentifier: @"class"]); NSTableColumn *tbv = AUTORELEASE([[NSTableColumn alloc] initWithIdentifier: @"version"]); // Titles [tbo setTitle: @"Objects"]; [tbc setTitle: @"Destination"]; [tbs setTitle: @"Source"]; [tbcl setTitle: @"Class"]; [tbv setTitle: @"Version"]; // Set up the outline view... [outlineView setDrawsGrid: NO]; [outlineView setOutlineTableColumn: tbo]; [outlineView addTableColumn: tbo]; [outlineView addTableColumn: tbcl]; [outlineView addTableColumn: tbv]; [outlineView addTableColumn: tbc]; [outlineView addTableColumn: tbs]; [outlineScrollView setHasVerticalScroller: YES]; [outlineScrollView setHasHorizontalScroller: YES]; [outlineScrollView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [outlineScrollView setBorderType: NSBezelBorder]; // Configure the scrollview... mainRect.origin = NSMakePoint(0,0); scrollView = [[NSScrollView alloc] initWithFrame: scrollRect]; [scrollView setHasVerticalScroller: YES]; [scrollView setHasHorizontalScroller: YES]; [scrollView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [scrollView setBorderType: NSBezelBorder]; objectViewController = [[GormObjectViewController alloc] initWithNibName: @"GormObjectOutlineView" bundle: [NSBundle bundleForClass: [self class]]]; [objectViewController setDocument: self]; NSDebugLog(@"objectViewController = %@, view = %@", objectViewController, [objectViewController view]); objectsView = [[GormObjectEditor alloc] initWithObject: nil inDocument: self]; [objectsView setFrame: mainRect]; [objectsView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [scrollView setDocumentView: objectsView]; RELEASE(objectsView); [objectViewController setIconView: scrollView]; RELEASE(scrollView); [outlineScrollView setDocumentView: outlineView]; [objectViewController setOutlineView: outlineScrollView]; [outlineView setDataSource: self]; [objectViewController reloadOutlineView]; RELEASE(outlineView); [[objectViewController view] setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [objectViewController resetDisplayView: scrollView]; // images... mainRect.origin = NSMakePoint(0,0); imagesScrollView = [[NSScrollView alloc] initWithFrame: scrollRect]; [imagesScrollView setHasVerticalScroller: YES]; [imagesScrollView setHasHorizontalScroller: YES]; [imagesScrollView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [imagesScrollView setBorderType: NSBezelBorder]; imagesView = [[GormImageEditor alloc] initWithObject: nil inDocument: self]; [imagesView setFrame: mainRect]; [imagesView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [imagesScrollView setDocumentView: imagesView]; RELEASE(imagesView); // sounds... mainRect.origin = NSMakePoint(0,0); soundsScrollView = [[NSScrollView alloc] initWithFrame: scrollRect]; [soundsScrollView setHasVerticalScroller: YES]; [soundsScrollView setHasHorizontalScroller: YES]; [soundsScrollView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [soundsScrollView setBorderType: NSBezelBorder]; soundsView = [[GormSoundEditor alloc] initWithObject: nil inDocument: self]; [soundsView setFrame: mainRect]; [soundsView setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable]; [soundsScrollView setDocumentView: soundsView]; RELEASE(soundsView); /* classes view */ mainRect.origin = NSMakePoint(0,0); classesView = [(GormClassEditor *)[GormClassEditor alloc] initWithDocument: self]; // [classesView setFrame: mainRect]; /* * Set the objects view as the initial view the user's see on startup. */ [selectionBox setContentView: [objectViewController view]]; //scrollView]; // add to the objects view... [objectsView addObject: filesOwner]; [objectsView addObject: firstResponder]; /* * Set image for this miniwindow. */ [window setMiniwindowImage: [(id)filesOwner imageForViewer]]; hidden = [[NSMutableArray alloc] init]; // reposition the loaded menu appropriately... mainMenu = [nameTable objectForKey: @"NSMenu"]; if(mainMenu != nil) { NSRect frame = [window frame]; NSPoint origin = frame.origin; NSRect screen = [[NSScreen mainScreen] frame]; // account for the height of the menu we're loading. origin.y = (screen.size.height - 100); // place the main menu appropriately... [[mainMenu window] setFrameTopLeftPoint: origin]; } // load the file preferences.... if(infoData != nil) { if([filePrefsManager loadFromData: infoData]) { NSInteger version = [filePrefsManager version]; NSInteger currentVersion = [GormFilePrefsManager currentVersion]; id delegate = [NSApp delegate]; if(version > currentVersion) { BOOL result = [delegate shouldLoadNewerArchive]; if (result == NO) { [self close]; } } DESTROY(infoData); } else { NSLog(@"Loading gorm without data.info file. Default settings will be assumed."); } } // load the images and sounds... en = [images objectEnumerator]; while((o = [en nextObject]) != nil) { [imagesView addObject: o]; } DESTROY(images); en = [images objectEnumerator]; while((o = [en nextObject]) != nil) { [soundsView addObject: o]; } DESTROY(sounds); // // Retain the file prefs view... // RETAIN(filePrefsView); // // All of the entries in the items array are "top level items" // which should be visible in the object's view. // en = [topLevelObjects objectEnumerator]; while((o = [en nextObject]) != nil) { [objectsView addObject: o]; } // set the file type in the prefs manager... [filePrefsManager setFileTypeName: [self fileType]]; } /** * Add aConnector to the set of connectors in this document. */ - (void) addConnector: (id)aConnector { if ([connections indexOfObjectIdenticalTo: aConnector] == NSNotFound) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc postNotificationName: IBWillAddConnectorNotification object: aConnector]; [connections addObject: aConnector]; [self touch]; // make sure the doc is marked as modified... [nc postNotificationName: IBDidAddConnectorNotification object: aConnector]; } } /** * Returns all connectors. */ - (NSArray*) allConnectors { return [NSArray arrayWithArray: connections]; } /** * Creates the proxy font manager. */ - (void) _instantiateFontManager { if (fontManager != nil) { return; } else { GSNibItem *item = nil; NSMenu *fontMenu = nil; item = [[GormObjectProxy alloc] initWithClassName: @"NSFontManager"]; [self setName: @"NSFont" forObject: item]; [self attachObject: item toParent: nil]; RELEASE(item); // set the holder in the document. fontManager = (GormObjectProxy *)item; [self changeToViewWithTag: 0]; // Add the connection to the menu from the font manager, if the NSFontMenu exists... fontMenu = [self fontMenu]; if (fontMenu != nil) { NSNibOutletConnector *con = [[NSNibOutletConnector alloc] init]; [con setSource: item]; [con setDestination: fontMenu]; [con setLabel: @"menu"]; [self addConnector: con]; } } } /** * Attach anObject to the document with aParent specifying the name. To allow * Gorm to generate the name pass in nil for aName parameter */ - (void) attachObject: (id)anObject toParent: (id)aParent withName: (NSString *)aName { NSArray *old; BOOL newObject = NO; // Modify the document whenever something is added... [self touch]; /* * Create a connector that links this object to its parent. * A nil parent is the root of the hierarchy so we use a dummy object for it. */ if (aParent == nil) { aParent = filesOwner; } old = [self connectorsForSource: anObject ofClass: [NSNibConnector class]]; if ([old count] > 0) { [[old objectAtIndex: 0] setDestination: aParent]; } else { NSNibConnector *con = [[NSNibConnector alloc] init]; [con setSource: anObject]; [con setDestination: aParent]; [self addConnector: (id)con]; RELEASE(con); } /* * Make sure that there is a name for this object. */ if ([self nameForObject: anObject] == nil) { newObject = YES; [self setName: aName forObject: anObject]; } /* * Add top-level objects to objectsView and open their editors. */ if ([anObject isKindOfClass: [NSWindow class]] || [anObject isKindOfClass: [GSNibItem class]]) { [objectsView addObject: anObject]; [topLevelObjects addObject: anObject]; if ([anObject isKindOfClass: [NSWindow class]]) { NSWindow *win = (NSWindow *)anObject; NSView *contentView = [win contentView]; NSArray *subviews = [contentView subviews]; // Turn off the release when closed flag, add the content view. [anObject setReleasedWhenClosed: NO]; [self attachObject: contentView toParent: anObject]; // Add all subviews from the window, if any. [self attachObjects: subviews toParent: win]; } [[self openEditorForObject: anObject] activate]; } /* * Determine what should be a top level object. */ else if((aParent == filesOwner || aParent == nil) && [anObject isKindOfClass: [NSMenu class]] == NO) { if([anObject isKindOfClass: [NSObject class]] && [anObject isKindOfClass: [NSView class]] == NO) { [objectsView addObject: anObject]; [topLevelObjects addObject: anObject]; } else if([anObject isKindOfClass: [NSView class]] && [anObject superview] == nil) { [objectsView addObject: anObject]; [topLevelObjects addObject: anObject]; } } /* * Check if it's a font manager. */ else if([anObject isKindOfClass: [NSFontManager class]]) { // If someone tries to attach a font manager, we must attach // the proxy instead. [self _instantiateFontManager]; } /* * Add the menu items from the popup. */ else if([anObject isKindOfClass: [NSPopUpButton class]]) { NSPopUpButton *button = (NSPopUpButton *)anObject; // add all of the items in the popup.. [self attachObjects: [button itemArray] toParent: button]; } /* * Add the menu item. */ else if([anObject isKindOfClass: [NSMenuItem class]]) { NSMenu *menu = [(NSMenuItem *)anObject submenu]; if(menu != nil) { [self attachObject: menu toParent: anObject]; } } /* * Add the current menu and any submenus. */ else if ([anObject isKindOfClass: [NSMenu class]]) { BOOL isMainMenu = NO; NSMenu *menu = (NSMenu *)anObject; // If there is no main menu and a menu gets added, it // will become the main menu. if([self objectForName: @"NSMenu"] == nil) { [self setName: @"NSMenu" forObject: menu]; [objectsView addObject: menu]; [topLevelObjects addObject: menu]; isMainMenu = YES; } else { if([[menu title] isEqual: @"Services"] && [self servicesMenu] == nil) { [self setServicesMenu: menu]; } else if([[menu title] isEqual: @"Windows"] && [self windowsMenu] == nil) { [self setWindowsMenu: menu]; } else if([[menu title] isEqual: @"Open Recent"] && [self recentDocumentsMenu] == nil) { [self setRecentDocumentsMenu: menu]; } if([[menu title] isEqual: @"Font"] && [self fontMenu] == nil) { [self setFontMenu: menu]; } // if it doesn't have a supermenu and it's owned by the file's owner, then it's a top level menu.... else if([menu supermenu] == nil && aParent == filesOwner) { [objectsView addObject: menu]; [topLevelObjects addObject: menu]; isMainMenu = NO; } } // add all of the items in the menu. [self attachObjects: [menu itemArray] toParent: menu]; // activate the editor... [[self openEditorForObject: menu] activate]; // If it's the main menu... locate it appropriately... if(isMainMenu && [self isActive]) { NSRect frame = [[self window] frame]; NSPoint origin = frame.origin; NSRect screen = [[NSScreen mainScreen] frame]; origin.y = (screen.size.height - 100); // Place the main menu appropriately... [[menu window] setFrameTopLeftPoint: origin]; } } /* * If this a scrollview, it is interesting to add its contentview. */ else if (([anObject isKindOfClass: [NSScrollView class]]) && ([(NSScrollView *)anObject documentView] != nil)) { if ([[anObject documentView] isKindOfClass: [NSTableView class]]) { id tv = [anObject documentView]; [self attachObject: tv toParent: anObject]; [self attachObjects: [tv tableColumns] toParent: tv]; } else // if ([[anObject documentView] isKindOfClass: [NSTextView class]]) { [self attachObject: [anObject documentView] toParent: anObject]; } } /* * If it's a tab view, then we want the tab items. */ else if ([anObject isKindOfClass: [NSTabView class]]) { [self attachObjects: [anObject tabViewItems] toParent: anObject]; } /* * If it's a tab view item, then we attach the view. */ else if ([anObject isKindOfClass: [NSTabViewItem class]]) { NSTabViewItem *ti = (NSTabViewItem *)anObject; id v = [ti view]; [self attachObject: v toParent: ti]; } /* * If it's a matrix, add the elements of the matrix. */ else if ([anObject isKindOfClass: [NSMatrix class]]) { // add all of the cells.... if ([[anObject cells] count] > 0) // && [anObject prototype] != nil) { [self attachObjects: [anObject cells] toParent: anObject]; } if ([anObject prototype] != nil) { [self attachObject: [anObject prototype] toParent: anObject]; } } /* * If it's a simple NSView, add it and all of it's subviews. */ else if ([anObject isKindOfClass: [NSView class]]) { NSView *view = (NSView *)anObject; // Add all subviews from the window, if any. [self attachObjects: [view subviews] toParent: view]; } /* * Add columns to document hierarchy... */ else if ([anObject isKindOfClass: [NSTableView class]]) // this should include outline view { NSTableView *tblView = (NSTableView *)anObject; NSArray *cols = [tblView tableColumns]; [self attachObjects: cols toParent: tblView]; } else if ([anObject isKindOfClass: [NSSplitView class]]) { NSSplitView *sp = (NSSplitView *)anObject; [self attachObjects: [sp subviews] toParent: sp]; } /* * Detect and add any connection the object might have. * This is done so that any palette items which have predefined connections will be * shown in the connections list. */ if([anObject respondsToSelector: @selector(action)] && [anObject respondsToSelector: @selector(target)] && newObject) { SEL sel = [anObject action]; if(sel != NULL) { NSString *label = NSStringFromSelector(sel); id source = anObject; NSNibControlConnector *con = [[NSNibControlConnector alloc] init]; id destination = [(NSControl *)anObject target]; NSArray *sourceConnections = [self connectorsForSource: source]; // if it's a menu item we want to connect it to it's parent... if([anObject isKindOfClass: [NSMenuItem class]] && [label isEqual: @"submenuAction:"]) { destination = aParent; } // if the connection needs to be made with the font manager, replace // it with our proxy object and proceed with creating the connection. if((destination == nil || destination == [NSFontManager sharedFontManager]) && [classManager isAction: label ofClass: @"NSFontManager"]) { if(!fontManager) { // initialize font manager... [self _instantiateFontManager]; } // set the destination... destination = fontManager; } // if the destination is still nil, back off to the first responder. if(destination == nil) { destination = firstResponder; } // build the connection [con setSource: source]; [con setDestination: destination]; [con setLabel: label]; // don't duplicate the connection if it already exists. // if([sourceConnections indexOfObjectIdenticalTo: con] == NSNotFound) if([sourceConnections containsObject: con] == NO) { // add it to our connections set. [self addConnector: (id)con]; } // destroy the connection in the object to // prevent any conflict. The connections are restored when the // .gorm is loaded, so there's no need for it anymore. [anObject setTarget: nil]; [anObject setAction: NULL]; // release the connection. RELEASE(con); } } /* * Attach the cell of an item to the document so that it has a name and * can be addressed. Do this last so that all other considerations are taken care * of prior to adding the cell to the document. */ if ([anObject respondsToSelector: @selector(cell)]) { [self openEditorForObject: [anObject cell] withParentObject: anObject]; [self attachObject: [anObject cell] toParent: anObject]; } } /** * Attach an object to parent object in document letting Gorm generate the name */ - (void) attachObject: (id)object toParent: (id)parent { [self attachObject: object toParent: parent withName: nil]; } /** * Attach an object to parent object in document letting Gorm generate the name * this method will add a top level object. */ - (void) attachObject: (id)object { [self attachObject: object toParent: nil withName: nil]; } /** * Attach all objects in anArray to the document with aParent. */ - (void) attachObjects: (NSArray*)anArray toParent: (id)aParent { NSEnumerator *enumerator = [anArray objectEnumerator]; NSObject *obj; while ((obj = [enumerator nextObject]) != nil) { [self attachObject: obj toParent: aParent]; } } - (void) changeToViewWithTag: (int)tag { switch (tag) { case 0: // objects { [selectionBox setContentView: [objectViewController view]]; //scrollView]; [toolbar setSelectedItemIdentifier: @"ObjectsItem"]; if (![[NSApp delegate] isConnecting]) [self setSelectionFromEditor: objectsView]; } break; case 1: // images { [selectionBox setContentView: imagesScrollView]; [toolbar setSelectedItemIdentifier: @"ImagesItem"]; [self setSelectionFromEditor: imagesView]; } break; case 2: // sounds { [selectionBox setContentView: soundsScrollView]; [toolbar setSelectedItemIdentifier: @"SoundsItem"]; [self setSelectionFromEditor: soundsView]; } break; case 3: // classes { NSArray *selection = [[(id)[NSApp delegate] selectionOwner] selection]; [selectionBox setContentView: classesView]; // if something is selected, in the object view. // show the equivalent class in the classes view. if ([selection count] > 0) { id obj = [selection objectAtIndex: 0]; [classesView selectClassWithObject: obj]; } [toolbar setSelectedItemIdentifier: @"ClassesItem"]; [self setSelectionFromEditor: classesView]; } break; case 4: // file prefs { [toolbar setSelectedItemIdentifier: @"FileItem"]; [selectionBox setContentView: filePrefsView]; } break; } } - (NSView *) viewWithTag:(int)tag { switch (tag) { case 0: // objects return objectsView; case 1: // images return imagesView; case 2: // sounds return soundsView; case 3: // classes return classesView; case 4: // file prefs return filePrefsView; default: return nil; } } - (void) changeToTopLevelEditorAcceptingTypes: (NSArray *)types andFileType: (NSString *)fileType { // NSToolbar *toolbar = [_window toolbar]; if([objectsView acceptsTypeFromArray: types] && fileType == nil) { [self changeToViewWithTag: 0]; } else if([imagesView acceptsTypeFromArray: types] && [[imagesView fileTypes] containsObject: fileType]) { [self changeToViewWithTag: 1]; } else if([soundsView acceptsTypeFromArray: types] && [[soundsView fileTypes] containsObject: fileType]) { [self changeToViewWithTag: 2]; } else if([classesView acceptsTypeFromArray: types] && [[classesView fileTypes] containsObject: fileType]) { [self changeToViewWithTag: 3]; } } /** * Change the view in the document window. */ - (void) changeView: (id)sender { [self changeToViewWithTag: [sender tag]]; } /** * The class manager. */ - (GormClassManager*) classManager { return classManager; } /** * Returns all connectors to destination. */ - (NSArray*) connectorsForDestination: (id)destination { return [self connectorsForDestination: destination ofClass: 0]; } /** * Returns all connectors to destination of class aConnectorClass. */ - (NSArray*) connectorsForDestination: (id)destination ofClass: (Class)aConnectorClass { NSMutableArray *array = [NSMutableArray arrayWithCapacity: 16]; NSEnumerator *enumerator = [connections objectEnumerator]; id c; while ((c = [enumerator nextObject]) != nil) { if ([c destination] == destination && (aConnectorClass == 0 || aConnectorClass == [c class])) { [array addObject: c]; } } return array; } /** * Returns all connectors to source. */ - (NSArray*) connectorsForSource: (id)source { return [self connectorsForSource: source ofClass: 0]; } /** * Returns all connectors to a given source where the * connectors are of aConnectorClass. */ - (NSArray*) connectorsForSource: (id)source ofClass: (Class)aConnectorClass { NSMutableArray *array = [NSMutableArray arrayWithCapacity: 16]; NSEnumerator *enumerator = [connections objectEnumerator]; id c; while ((c = [enumerator nextObject]) != nil) { if ([c source] == source && (aConnectorClass == 0 || aConnectorClass == [c class])) { [array addObject: c]; } } return array; } /** * Returns YES, if the document contains anObject. */ - (BOOL) containsObject: (id)anObject { if ([self nameForObject: anObject] == nil) { return NO; } return YES; } /** * Returns YES, if the document contains an object with aName and * parent. */ - (BOOL) containsObjectWithName: (NSString*)aName forParent: (id)parent { id obj = [nameTable objectForKey: aName]; if (obj == nil) { return NO; } return YES; } /** * Copy anObject to aPasteboard using aType. Returns YES, if * successful. */ - (BOOL) copyObject: (id)anObject type: (NSString*)aType toPasteboard: (NSPasteboard*)aPasteboard { return [self copyObjects: [NSArray arrayWithObject: anObject] type: aType toPasteboard: aPasteboard]; } /** * Copy all objects in anArray to aPasteboard using aType. Returns YES, * if successful. */ - (BOOL) copyObjects: (NSArray*)anArray type: (NSString*)aType toPasteboard: (NSPasteboard*)aPasteboard { NSEnumerator *enumerator; NSMutableSet *editorSet; id obj; NSMutableData *data; NSArchiver *archiver; /* * Remove all editors from the selected objects before archiving * and restore them afterwards. */ editorSet = [[NSMutableSet alloc] init]; enumerator = [anArray objectEnumerator]; while ((obj = [enumerator nextObject]) != nil) { id editor = [self editorForObject: obj create: NO]; if (editor != nil) { [editorSet addObject: editor]; [editor deactivate]; } // Windows are a special case. Check the content view and see if it's an active editor. /** if([obj isKindOfClass: [NSWindow class]]) { id contentView = [obj contentView]; if([contentView conformsToProtocol: @protocol(IBEditors)]) { [contentView deactivate]; [editorSet addObject: contentView]; } } */ } // encode the data data = [NSMutableData dataWithCapacity: 0]; archiver = [[NSArchiver alloc] initForWritingWithMutableData: data]; [archiver encodeClassName: @"GormCustomView" intoClassName: @"GSCustomView"]; [archiver encodeRootObject: anArray]; // reactivate enumerator = [editorSet objectEnumerator]; while ((obj = [enumerator nextObject]) != nil) { [obj activate]; } RELEASE(editorSet); [aPasteboard declareTypes: [NSArray arrayWithObject: aType] owner: self]; return [aPasteboard setData: data forType: aType]; } /** * The given pasteboard chaned ownership. */ - (void) pasteboardChangedOwner: (NSPasteboard *)sender { NSDebugLog(@"Owner changed for %@", sender); } /** * Dealloc all things owned by a GormDocument object. */ - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; ASSIGN(lastEditor, (id)nil); // [filePrefsWindow close]; // Get rid of the selection box. // [selectionBox removeFromSuperviewWithoutNeedingDisplay]; RELEASE(classManager); RELEASE(filePrefsManager); RELEASE(filePrefsView); RELEASE(hidden); if (objToName != 0) { NSFreeMapTable(objToName); } RELEASE(scrollView); RELEASE(classesView); RELEASE(soundsScrollView); RELEASE(imagesScrollView); // RELEASE(filePrefsWindow); // FIXME: Causes NIB to crash... RELEASE(resourceManagers); RELEASE(nameTable); RELEASE(connections); RELEASE(topLevelObjects); RELEASE(visibleWindows); RELEASE(deferredWindows); DESTROY(savedEditors); DESTROY(openEditors); TEST_RELEASE(scmWrapper); [super dealloc]; } /** * Pull all objects which are under the given parent, into array. */ - (void) _retrieveObjectsForParent: (id)parent intoArray: (NSMutableArray *)array recursively: (BOOL)flag { NSArray *cons = [self connectorsForDestination: parent ofClass: [NSNibConnector class]]; NSEnumerator *en = [cons objectEnumerator]; id con = nil; while((con = [en nextObject]) != nil) { id obj = [con source]; if(obj != nil) { [array addObject: obj]; if(flag) { [self _retrieveObjectsForParent: obj intoArray: array recursively: flag]; } } } } /** * Pull all of the objects which are under a given parent. Returns an * autoreleased array. */ - (NSArray *) retrieveObjectsForParent: (id)parent recursively: (BOOL)flag { NSMutableArray *result = [NSMutableArray array]; // If parent is nil, use file's owner. if(parent == nil) { parent = filesOwner; } [self _retrieveObjectsForParent: parent intoArray: result recursively: flag]; return result; } /** * Detach anObject from the document. Optionally close the editor */ - (void) detachObject: (id)anObject closeEditor: (BOOL)close_editor { if([self containsObject: anObject]) { NSString *name = RETAIN([self nameForObject: anObject]); // released at end of method... unsigned count; NSArray *objs = [self retrieveObjectsForParent: anObject recursively: NO]; id editor = [self editorForObject: anObject create: NO]; id parent = [self parentEditorForEditor: editor]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; RETAIN(anObject); // prevent release of object during notifications... [nc postNotificationName: GormWillDetachObjectFromDocumentNotification object: anObject userInfo: nil]; // close the editor... if (close_editor) { [editor close]; } if([parent respondsToSelector: @selector(selectObjects:)]) { [parent selectObjects: [NSArray array]]; } count = [connections count]; while (count-- > 0) { id con = [connections objectAtIndex: count]; if ([con destination] == anObject || [con source] == anObject) { [connections removeObjectAtIndex: count]; } } // if the font manager is being reset, zero out the instance variable. if([name isEqual: @"NSFont"]) { fontManager = nil; } if ([anObject isKindOfClass: [NSWindow class]] || [anObject isKindOfClass: [NSMenu class]] || [topLevelObjects containsObject: anObject]) { [objectsView removeObject: anObject]; } // if it's in the top level items array, remove it. if([topLevelObjects containsObject: anObject]) { [topLevelObjects removeObject: anObject]; } // eliminate it from being the windows/services menu, if it's being detached. if ([anObject isKindOfClass: [NSMenu class]]) { if([self windowsMenu] == anObject) { [self setWindowsMenu: nil]; } else if([self servicesMenu] == anObject) { [self setServicesMenu: nil]; } else if([self recentDocumentsMenu] == anObject) { [self setRecentDocumentsMenu: nil]; } } /* * Make sure this window isn't in the list of objects to be made visible * on nib loading. */ if([anObject isKindOfClass: [NSWindow class]]) { [self setObject: anObject isVisibleAtLaunch: NO]; } // some objects are given a name, some are not. The only ones we need // to worry about are those that have names. if(name != nil) { // remove from custom class map... NSDebugLog(@"Delete from custom class map -> %@",name); [classManager removeCustomClassForName: name]; if([anObject isKindOfClass: [NSScrollView class]]) { NSView *subview = [anObject documentView]; NSString *objName = [self nameForObject: subview]; NSDebugLog(@"Delete from custom class map -> %@",objName); [classManager removeCustomClassForName: objName]; } else if([anObject isKindOfClass: [NSWindow class]]) { [anObject setReleasedWhenClosed: YES]; [anObject close]; } // make certain it's not displayed, if it's being detached. if([anObject isKindOfClass: [NSView class]]) { [anObject removeFromSuperview]; } [nameTable removeObjectForKey: name]; // free... NSMapRemove(objToName, (void*)anObject); } // iterate over the list and remove any subordinate objects. [self detachObjects: objs closeEditors: close_editor]; if (close_editor) { [self setSelectionFromEditor: nil]; // clear the selection. } RELEASE(name); // retained at beginning of method... [self touch]; // set the document as modified [nc postNotificationName: GormDidDetachObjectFromDocumentNotification object: anObject userInfo: nil]; RELEASE(anObject); // release since notifications are done. } } /** * Detach object from document. */ - (void) detachObject: (id)object { [self detachObject: object closeEditor: YES]; } /** * Detach every object in anArray from the document. Optionally closing editors. */ - (void) detachObjects: (/* NSArray* */ id)anArray closeEditors: (BOOL)close_editors { NSEnumerator *enumerator = [anArray objectEnumerator]; NSObject *obj; while ((obj = [enumerator nextObject]) != nil) { [self detachObject: obj closeEditor: close_editors]; } } /** * Detach all objects in array from the document. */ - (void) detachObjects: (NSArray *)array { [self detachObjects: array closeEditors: YES]; } /** * The path to where the .gorm file is saved. */ - (NSString*) documentPath { return [self fileName]; } /** * Create a subclass of the currently selected class in the classes view. */ - (id) createSubclass: (id)sender { return [classesView createSubclass: sender]; } /** * Add an outlet/action to the classes view. */ - (id) addAttributeToClass: (id)sender { [classesView addAttributeToClass]; return self; } /** * Create an instance of a given class. */ - (id) instantiateClass: (id)sender { return [classesView instantiateClass: sender]; } /** * Instantiate the class specified by the parameter className */ - (NSString *) instantiateClassNamed: (NSString *)className { NSString *theName = nil; GSNibItem *item = nil; if([className isEqualToString: @"FirstResponder"]) { return nil; } if([classManager canInstantiateClassNamed: className] == NO) { return nil; } if([classManager isSuperclass: @"NSView" linkedToClass: className] || [className isEqualToString: @"NSView"]) { Class cls; BOOL isCustom = [classManager isCustomClass: className]; id instance; // Replace with NON custom class, since we don't have the compiled version // of the custom class available to us in Gorm. if(isCustom) { className = [classManager nonCustomSuperClassOf: className]; } // instantiate the object or it's substitute... cls = NSClassFromString(className); if([cls respondsToSelector: @selector(allocSubstitute)]) { instance = [cls allocSubstitute]; } else { instance = [cls alloc]; } // give it some initial dimensions... if([instance respondsToSelector: @selector(initWithFrame:)]) { instance = [instance initWithFrame: NSMakeRect(10,10,380,280)]; } else { instance = [instance init]; } // add it to the top level objects... [self attachObject: instance toParent: nil]; // we want to record if it's custom or not and act appropriately... if(isCustom) { theName = [self nameForObject: instance]; [classManager setCustomClass: className forName: theName]; } [self changeToViewWithTag: 0]; NSDebugLog(@"Instantiate NSView subclass %@",className); } else { item = [[GormObjectProxy alloc] initWithClassName: className]; [self attachObject: item toParent: nil]; [self changeToViewWithTag: 0]; theName = [self nameForObject: item]; } return theName; } /** * Remove a class from the classes view */ - (id) remove: (id)sender { return [classesView removeClass: sender]; } /** * Parse a header into the classes view. */ - (id) loadClass: (id)sender { return [classesView loadClass: sender]; } /** * Create the class files for the selected class. */ - (id) createClassFiles: (id)sender { return [classesView createClassFiles: sender]; } /** * Close anEditor for anObject. */ - (void) editor: (id)anEditor didCloseForObject: (id)anObject { NSArray *links; /* * If there is a link from this editor to a parent, remove it. */ links = [self connectorsForSource: anEditor ofClass: [GormEditorToParent class]]; NSAssert([links count] < 2, NSInternalInconsistencyException); if ([links count] == 1) { [connections removeObjectIdenticalTo: [links objectAtIndex: 0]]; } /* * Remove the connection linking the object to this editor */ links = [self connectorsForSource: anObject ofClass: [GormObjectToEditor class]]; NSAssert([links count] < 2, NSInternalInconsistencyException); if ([links count] == 1) { [connections removeObjectIdenticalTo: [links objectAtIndex: 0]]; } /* * Add to the master list of editors for this document */ [openEditors removeObjectIdenticalTo: anEditor]; /* * Make sure that this editor is not the selection owner. */ if ([(id)[NSApp delegate] selectionOwner] == (id)anEditor) { [self resignSelectionForEditor: anEditor]; } } /** * Returns an editor for anObject, if flag is YES, it creates a new * editor, if one doesn't currently exist. */ - (id) editorForObject: (id)anObject create: (BOOL)flag { return [self editorForObject: anObject inEditor: nil create: flag]; } /** * Returns the editor for anObject, in the editor anEditor. If flag is * YES, an editor is created if one doesn't already exist. */ - (id) editorForObject: (id)anObject inEditor: (id)anEditor create: (BOOL)flag { NSArray *links; /* * Look up the editor links for the object to see if it already has an * editor. If it does return it, otherwise create a new editor and a * link to it if the flag is set. */ links = [self connectorsForSource: anObject ofClass: [GormObjectToEditor class]]; if ([links count] == 0 && flag) { Class eClass = NSClassFromString([anObject editorClassName]); id editor; id link; editor = [[eClass alloc] initWithObject: anObject inDocument: self]; link = AUTORELEASE([[GormObjectToEditor alloc] init]); [link setSource: anObject]; [link setDestination: editor]; [connections addObject: link]; if(![openEditors containsObject: editor] && editor != nil) { [openEditors addObject: editor]; } if (anEditor == nil) { /* * By default all editors are owned by the top-level editor of * the document. */ anEditor = objectsView; } if (anEditor != editor) { /* * Link to the parent of the editor. */ link = AUTORELEASE([[GormEditorToParent alloc] init]); [link setSource: editor]; [link setDestination: anEditor]; [connections addObject: link]; } else { NSDebugLog(@"WARNING anEditor = editor"); } [editor activate]; RELEASE((NSObject *)editor); return editor; } else if ([links count] == 0) { return nil; } else { [(id)[[links lastObject] destination] activate]; return [[links lastObject] destination]; } } /** * Forces the closing of all editors in the document. */ - (void) closeAllEditors { NSEnumerator *enumerator; id con; NSMutableArray *editors = [NSMutableArray array]; // remove the editor connections from the connection array... enumerator = [connections objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { if ([con isKindOfClass: [GormObjectToEditor class]]) { [editors addObject: con]; } else if ([con isKindOfClass: [GormEditorToParent class]]) { [editors addObject: con]; } } [connections removeObjectsInArray: editors]; [editors removeAllObjects]; // Close all of the editors & get all of the objects out. // copy the array, since the close method calls editor:didCloseForObject: // and would effect the array during the execution of // makeObjectsPerformSelector:. [editors addObjectsFromArray: openEditors]; [editors makeObjectsPerformSelector: @selector(close)]; [openEditors removeAllObjects]; [editors removeAllObjects]; } static void _real_close(GormDocument *self, NSEnumerator *enumerator) { id obj; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; while ((obj = [enumerator nextObject]) != nil) { if ([obj isKindOfClass: [NSWindow class]]) { [obj setReleasedWhenClosed: YES]; [obj close]; } } // deactivate the document... [self setDocumentActive: NO]; [self closeAllEditors]; // shut down all of the editors.. [nc postNotificationName: IBWillCloseDocumentNotification object: self]; [nc removeObserver: self]; // stop listening to all notifications. } /** * Close the document and all windows associated. Mark this document as closed. */ - (void) close { isDocumentOpen = NO; _real_close(self, [nameTable objectEnumerator]); [super close]; } /** * Handle all notifications. Checks the value of [aNotification name] * against the set of notifications this class responds to and takes * appropriate action. */ - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if ([name isEqual: NSWindowWillCloseNotification] && isDocumentOpen) { _real_close(self, [nameTable objectEnumerator]); isDocumentOpen = NO; } else if ([name isEqual: NSWindowDidBecomeKeyNotification] && isDocumentOpen) { [self setDocumentActive: YES]; } else if ([name isEqual: NSWindowWillMiniaturizeNotification] && isDocumentOpen) { [self setDocumentActive: NO]; } else if ([name isEqual: NSWindowDidDeminiaturizeNotification] && isDocumentOpen) { [self setDocumentActive: YES]; } else if ([name isEqual: IBWillBeginTestingInterfaceNotification] && isDocumentOpen) { id delegate = [NSApp delegate]; if ([delegate activeDocument] == self && [delegate isInTool] == NO) { NSEnumerator *enumerator; id obj; if ([[self window] isVisible]) { [hidden addObject: [self window]]; [[self window] setExcludedFromWindowsMenu: YES]; [[self window] orderOut: self]; } if ([delegate respondsToSelector: @selector(mainMenu)]) { [[delegate mainMenu] close]; // close the menu during test... } enumerator = [nameTable objectEnumerator]; while ((obj = [enumerator nextObject]) != nil) { if ([obj isKindOfClass: [NSMenu class]]) { if ([[obj window] isVisible]) { [hidden addObject: obj]; [obj close]; } } else if ([obj isKindOfClass: [NSWindow class]]) { if ([obj isVisible]) { [hidden addObject: obj]; [obj orderOut: self]; } } } } } else if ([name isEqual: IBWillEndTestingInterfaceNotification] && isDocumentOpen) { if ([hidden count] > 0) { NSEnumerator *enumerator; id obj; [[[NSApp delegate] mainMenu] display]; // bring the menu back... enumerator = [hidden objectEnumerator]; while ((obj = [enumerator nextObject]) != nil) { if ([obj isKindOfClass: [NSMenu class]]) { [obj display]; } else if ([obj isKindOfClass: [NSWindow class]]) { [obj orderFront: self]; } } [hidden removeAllObjects]; [[self window] setExcludedFromWindowsMenu: NO]; } } else if ([name isEqual: IBClassNameChangedNotification] && isDocumentOpen) { [classesView reloadData]; [self setSelectionFromEditor: nil]; [self touch]; } else if ([name isEqual: IBInspectorDidModifyObjectNotification] && isDocumentOpen) { [classesView reloadData]; [self touch]; } else if (([name isEqual: GormDidModifyClassNotification] || [name isEqual: GormDidDeleteClassNotification]) && isDocumentOpen) { if ([classesView isEditing] == NO) { [classesView reloadData]; [self touch]; } } else if ([name isEqual: GormDidAddClassNotification] && isDocumentOpen) { NSArray *customClasses = [classManager allCustomClassNames]; NSString *newClass = [customClasses lastObject]; // go to the class which was just loaded in the classes view... [classesView reloadData]; [self changeToViewWithTag: 3]; if(newClass != nil) { [classesView selectClass: newClass]; } } else if([name isEqual: IBResourceManagerRegistryDidChangeNotification] && isDocumentOpen) { if(resourceManagers != nil) { Class cls = [aNotification object]; id mgr = [(IBResourceManager *)[cls alloc] initWithDocument: self]; [resourceManagers addObject: mgr]; [IBResourceManager registerForAllPboardTypes:window inDocument:self]; } } } /** * Returns YES, if document is active. */ - (BOOL) isActive { return isActive; } /** * Returns the name for anObject. */ - (NSString*) nameForObject: (id)anObject { return (NSString*)NSMapGet(objToName, (void*)anObject); } /** * Returns the object for name. */ - (id) objectForName: (NSString*)name { return [nameTable objectForKey: name]; } /** * Returns all objects in the document. */ - (NSArray*) objects { return [nameTable allValues]; } /** * Returns YES, if the current select on the classes view is a class. */ - (BOOL) classIsSelected { return [classesView currentSelectionIsClass]; } /** * Remove all instances of a given class. */ - (void) removeAllInstancesOfClass: (NSString *)className { NSMutableArray *removedObjects = [NSMutableArray array]; NSEnumerator *en = [[self objects] objectEnumerator]; id object = nil; // locate objects for removal while((object = [en nextObject]) != nil) { NSString *clsForObj = [classManager classNameForObject: object]; if([className isEqual: clsForObj]) { [removedObjects addObject: object]; } } // remove the objects [self detachObjects: removedObjects]; } /** * Select a class in the classes view */ - (void) selectClass: (NSString *)className { [classesView selectClass: className]; } /** * Select a class in the classes view */ - (void) selectClass: (NSString *)className editClass: (BOOL)flag { [classesView selectClass: className editClass: flag]; } /** * Build our reverse mapping information and other initialisation */ - (void) rebuildObjToNameMapping { NSEnumerator *enumerator; NSString *name; NSDebugLog(@"------ Rebuilding object to name mapping..."); NSResetMapTable(objToName); NSMapInsert(objToName, (void*)filesOwner, (void*)@"NSOwner"); NSMapInsert(objToName, (void*)firstResponder, (void*)@"NSFirst"); enumerator = [[nameTable allKeys] objectEnumerator]; while ((name = [enumerator nextObject]) != nil) { id obj = [nameTable objectForKey: name]; NSDebugLog(@"%@ --> %@",name, obj); NSMapInsert(objToName, (void*)obj, (void*)name); if (([obj isKindOfClass: [NSMenu class]] && [name isEqual: @"NSMenu"]) || [obj isKindOfClass: [NSWindow class]]) { [[self openEditorForObject: obj] activate]; } } NSDebugLog(@"------ Done rebuilding object to name mapping..."); } /** * Open the editor for anObject, with parent object. */ - (id) openEditorForObject: (id)anObject withParentObject: (id)parentObj { BOOL f = ([anObject isKindOfClass: [NSCell class]] == NO); id pe = [self editorForObject: parentObj create: NO]; id e = [self editorForObject: anObject inEditor: pe create: f]; id p = (parentObj == nil) ? [self parentEditorForEditor: e] : pe; if (p != nil && p != objectsView) { [self openEditorForObject: [p editedObject]]; } // prevent bringing front of menus before they've been properly sized. if([anObject isKindOfClass: [NSMenu class]] == NO) { [e orderFront]; [[e window] makeKeyAndOrderFront: self]; } return e; } /** * Open the editor for anObject. */ - (id) openEditorForObject: (id)anObject { return [self openEditorForObject: anObject withParentObject: nil]; } /** * Return the parent editor for anEditor. */ - (id) parentEditorForEditor: (id)anEditor { NSArray *links; GormObjectToEditor *con; links = [self connectorsForSource: anEditor ofClass: [GormEditorToParent class]]; con = [links lastObject]; return [con destination]; } /** * Return the parent of anObject. The File's Owner is the root object in the * hierarchy, if anObject's parent is the Files's Owner, this method should return * nil. */ - (id) parentOfObject: (id)anObject { NSArray *old; id con; old = [self connectorsForSource: anObject ofClass: [NSNibConnector class]]; con = [old lastObject]; if ([con destination] != filesOwner && [con destination] != firstResponder) { return [con destination]; } return nil; } /** * Paste objects of aType into the document from aPasteboard * with parent as the parent of the objects. */ - (NSArray*) pasteType: (NSString*)aType fromPasteboard: (NSPasteboard*)aPasteboard parent: (id)parent { NSData *data; NSArray *objects; NSEnumerator *enumerator; NSPoint filePoint; NSPoint screenPoint; NSUnarchiver *u; data = [aPasteboard dataForType: aType]; if (data == nil) { NSDebugLog(@"Pasteboard %@ doesn't contain data of %@", aPasteboard, aType); return nil; } u = AUTORELEASE([[NSUnarchiver alloc] initForReadingWithData: data]); [u decodeClassName: @"GSCustomView" asClassName: @"GormCustomView"]; objects = [u decodeObject]; enumerator = [objects objectEnumerator]; filePoint = [[self window] mouseLocationOutsideOfEventStream]; screenPoint = [[self window] convertBaseToScreen: filePoint]; /* * Windows and panels are a special case - for a multiple window paste, * the windows need to be positioned so they are not on top of each other. */ if ([aType isEqualToString: IBWindowPboardType]) { NSWindow *win; while ((win = [enumerator nextObject]) != nil) { [win setFrameTopLeftPoint: screenPoint]; screenPoint.x += 10; screenPoint.y -= 10; } } else if([aType isEqualToString: IBViewPboardType]) { NSEnumerator *enumerator = [objects objectEnumerator]; NSRect frame; id obj; while ((obj = [enumerator nextObject]) != nil) { // check to see if the object has a frame. If so, then // modify it. If not, simply iterate to the next object if([obj respondsToSelector: @selector(frame)] && [obj respondsToSelector: @selector(setFrame:)]) { frame = [obj frame]; frame.origin.x -= 6; frame.origin.y -= 6; [obj setFrame: frame]; RETAIN(obj); } } } // attach the objects to the parent and touch the document. [self attachObjects: objects toParent: parent]; [self touch]; return objects; } /** * Remove aConnector from the connections array and send the * notifications. */ - (void) removeConnector: (id)aConnector { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; RETAIN(aConnector); // prevent it from being dealloc'd until the notification is done. // issue pre notification.. [nc postNotificationName: IBWillRemoveConnectorNotification object: aConnector]; // mark the document as changed. [self touch]; [connections removeObjectIdenticalTo: aConnector]; // issue post notification.. [nc postNotificationName: IBDidRemoveConnectorNotification object: aConnector]; RELEASE(aConnector); // NOW we can dealloc it. } /** * The editor wants to give up the selection. Go through all the known * editors (with links in the connections array) and try to find one * that wants to take over the selection. Activate whatever editor we * find (if any). */ - (void) resignSelectionForEditor: (id)editor { NSEnumerator *enumerator = [connections objectEnumerator]; Class editClass = [GormObjectToEditor class]; id c; while ((c = [enumerator nextObject]) != nil) { if ([c class] == editClass) { id e = [c destination]; if (e != editor && [e wantsSelection]) { [e activate]; [self setSelectionFromEditor: e]; return; } } } /* * No editor available to take the selection - set a nil owner. */ [self setSelectionFromEditor: nil]; } /** * Set aName for object in the document. If aName is nil, * a name is automatically created for object. */ - (void) setName: (NSString*)aName forObject: (id)object { id oldObject = nil; NSString *oldName = nil; NSMutableDictionary *cc = [classManager customClassMap]; NSString *className = nil; if (object == nil) { NSDebugLog(@"Attempt to set name for nil object"); return; } if (aName == nil) { /* * No name given - so we must generate one unless we already have one. */ oldName = [self nameForObject: object]; if (oldName == nil) { NSString *base; unsigned i = 0; /* * Generate a sensible name for the object based on its class. */ if ([object isKindOfClass: [GSNibItem class]]) { // use the actual class name for proxies base = [(id)object className]; } else { base = NSStringFromClass([object class]); } // pare down the name, if we're generating it. if ([base hasPrefix: @"Gorm"]) { base = [base substringFromIndex: 4]; } if ([base hasPrefix: @"NS"] || [base hasPrefix: @"GS"]) { base = [base substringFromIndex: 2]; } aName = [base stringByAppendingFormat: @"(%u)", i]; while ([nameTable objectForKey: aName] != nil) { aName = [base stringByAppendingFormat: @"(%u)", ++i]; } } else { return; /* Already named ... nothing to do */ } } else // user supplied a name... { oldObject = [nameTable objectForKey: aName]; if (oldObject != nil) { NSDebugLog(@"Attempt to re-use name '%@'", aName); return; } oldName = [self nameForObject: object]; if (oldName != nil) { if ([oldName isEqual: aName]) { return; /* Already have this name ... nothing to do */ } [nameTable removeObjectForKey: oldName]; NSMapRemove(objToName, (void*)object); } } // add it to the dictionary. [nameTable setObject: object forKey: aName]; NSMapInsert(objToName, (void*)object, (void*)aName); if (oldName != nil) { RETAIN(oldName); // hold on to this temporarily... [nameTable removeObjectForKey: oldName]; } if ([objectsView containsObject: object]) { [objectsView refreshCells]; } // check the custom classes map and replace the appropriate // object, if a mapping exists. if (cc != nil) { className = [cc objectForKey: oldName]; if (className != nil) { RETAIN(className); [cc removeObjectForKey: oldName]; [cc setObject: className forKey: aName]; RELEASE(className); } } // release oldName, if we get to this point. if(oldName != nil) { RELEASE(oldName); } // touch the document... [self touch]; } /** * Add object to the visible at launch list. */ - (void) setObject: (id)anObject isVisibleAtLaunch: (BOOL)flag { if (flag) { [visibleWindows addObject: anObject]; } else { [visibleWindows removeObject: anObject]; } } /** * Return YES, if anObject is visible at launch time. */ - (BOOL) objectIsVisibleAtLaunch: (id)anObject { return [visibleWindows containsObject: anObject]; } /** * Add anObject to the deferred list. */ - (void) setObject: (id)anObject isDeferred: (BOOL)flag { if (flag) { [deferredWindows addObject: anObject]; } else { [deferredWindows removeObject: anObject]; } } /** * Return YES, if the anObject is in the deferred list. */ - (BOOL) objectIsDeferred: (id)anObject { return [deferredWindows containsObject: anObject]; } // windows / services menus... /** * Set the windows menu. */ - (void) setWindowsMenu: (NSMenu *)anObject { if(anObject != nil) { [nameTable setObject: anObject forKey: @"NSWindowsMenu"]; } else { [nameTable removeObjectForKey: @"NSWindowsMenu"]; } } /** * return the windows menu. */ - (NSMenu *) windowsMenu { return [nameTable objectForKey: @"NSWindowsMenu"]; } /** * Set the object that will be the services menu in the app. */ - (void) setServicesMenu: (NSMenu *)anObject { if(anObject != nil) { [nameTable setObject: anObject forKey: @"NSServicesMenu"]; } else { [nameTable removeObjectForKey: @"NSServicesMenu"]; } } /** * Return the object that will be the services menu. */ - (NSMenu *) servicesMenu { return [nameTable objectForKey: @"NSServicesMenu"]; } /** * Set the object that will be the font menu in the app. */ - (void) setFontMenu: (NSMenu *)anObject { if(anObject != nil) { [nameTable setObject: anObject forKey: @"NSFontMenu"]; } else { [nameTable removeObjectForKey: @"NSFontMenu"]; } } /** * Return the object that will be the services menu. */ - (NSMenu *) fontMenu { return [nameTable objectForKey: @"NSFontMenu"]; } /** * Set the menu that will be the recent documents menu in the app. */ - (void) setRecentDocumentsMenu: (NSMenu *)anObject { if(anObject != nil) { [nameTable setObject: anObject forKey: @"NSRecentDocumentsMenu"]; } else { [nameTable removeObjectForKey: @"NSRecentDocumentsMenu"]; } } /** * Return the object that will be the receent documents menu. */ - (NSMenu *) recentDocumentsMenu { return [nameTable objectForKey: @"NSRecentDocumentsMenu"]; } /** * Marks this document as the currently active document. The active document is * the one being edited by the user. */ - (void) setDocumentActive: (BOOL)flag { if (flag != isActive && isDocumentOpen) { NSEnumerator *enumerator; id obj; // stop all connection activities. [(id)[NSApp delegate] stopConnecting]; enumerator = [nameTable objectEnumerator]; if (flag) { GormDocument *document = (GormDocument*)[(id)[NSApp delegate] activeDocument]; // set the current document active and unset the old one. [document setDocumentActive: NO]; isActive = YES; // display everything. while ((obj = [enumerator nextObject]) != nil) { NSString *name = [document nameForObject: obj]; if ([obj isKindOfClass: [NSWindow class]]) { [obj orderFront: self]; } else if ([obj isKindOfClass: [NSMenu class]] && [name isEqual: @"NSMenu"]) { [obj display]; } } // // Reset the selection to the current selection held by the current // selection owner of this document when the document becomes active. // This allows the app to switch to the correct inspector when the new // document is selected. // [self setSelectionFromEditor: lastEditor]; } else { isActive = NO; while ((obj = [enumerator nextObject]) != nil) { if ([obj isKindOfClass: [NSWindow class]]) { [obj orderOut: self]; } else if ([obj isKindOfClass: [NSMenu class]] && [[self nameForObject: obj] isEqual: @"NSMenu"]) { [obj close]; } } [self setSelectionFromEditor: nil]; } } } /** * Sets the current selection from the given editor. This method * causes the inspector to refresh with the proper object. */ - (void) setSelectionFromEditor: (id)anEditor { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSDebugLog(@"setSelectionFromEditor %@", anEditor); ASSIGN(lastEditor, anEditor); [(id)[NSApp delegate] stopConnecting]; // cease any connection if ([(NSObject *)anEditor respondsToSelector: @selector(window)]) { [[anEditor window] makeKeyWindow]; [[anEditor window] makeFirstResponder: (id)anEditor]; } [nc postNotificationName: IBSelectionChangedNotification object: anEditor]; } /** * Mark the document as modified. */ - (void) touch { [objectViewController reloadOutlineView]; [self updateChangeCount: NSChangeDone]; } /** * Returns the window and the rect r for object. */ - (NSWindow*) windowAndRect: (NSRect*)r forObject: (id)object { /* * Get the window and rectangle for which link markup should be drawn. */ if ([objectsView containsObject: object]) { /* * objects that exist in the document objects view must have their link * markup drawn there, so we ask the view for the required rectangle. */ *r = [objectsView rectForObject: object]; return [objectsView window]; } else if ([object isKindOfClass: [NSMenuItem class]]) { NSArray *links; NSMenu *menu; id editor; /* * Menu items must have their markup drawn in the window of the * editor of the parent menu. */ links = [self connectorsForSource: object ofClass: [NSNibConnector class]]; menu = [[links lastObject] destination]; editor = [self editorForObject: menu create: NO]; *r = [editor rectForObject: object]; return [editor window]; } else if ([object isKindOfClass: [NSView class]]) { /* * Normal view objects just get link markup drawn on them. */ id temp = object; id editor = [self editorForObject: temp create: NO]; while ((temp != nil) && (editor == nil)) { temp = [temp superview]; editor = [self editorForObject: temp create: NO]; } if (temp == nil) { *r = [object convertRect: [object bounds] toView: nil]; } else if ([editor respondsToSelector: @selector(windowAndRect:forObject:)]) { return [editor windowAndRect: r forObject: object]; } } else if ([object isKindOfClass: [NSTableColumn class]]) { NSTableView *tv = (NSTableView *)[[(NSTableColumn*)object dataCell] controlView]; NSTableHeaderView *th = [tv headerView]; NSUInteger index; if (th == nil || tv == nil) { NSDebugLog(@"fail 1 %@ %@ %@", [(NSTableColumn*)object headerCell], th, tv); *r = NSZeroRect; return nil; } index = [[tv tableColumns] indexOfObject: object]; if (index == NSNotFound) { NSDebugLog(@"fail 2"); *r = NSZeroRect; return nil; } *r = [th convertRect: [th headerRectOfColumn: index] toView: nil]; return [th window]; } else if([object isKindOfClass: [NSCell class]]) { NSCell *cell = object; NSView *control = [cell controlView]; if ([control isKindOfClass: [NSMatrix class]]) { NSInteger row, col; NSMatrix *matrix = (NSMatrix *)control; if ([matrix getRow: &row column: &col ofCell: cell]) { NSRect cellFrame = [matrix cellFrameAtRow: row column: col]; *r = [control convertRect: cellFrame toView: nil]; return [control window]; } } } // if we get here, then it wasn't any of the above. *r = NSZeroRect; return nil; } /** * The document window. */ - (NSWindow*) window { NSWindowController *winController = [[self windowControllers] objectAtIndex: 0]; return [winController window]; } /** * Removes all connections given action or outlet with the specified label * (paramter name) class name (parameter className). */ - (BOOL) removeConnectionsWithLabel: (NSString *)name forClassNamed: (NSString *)className isAction: (BOOL)action { NSEnumerator *en = [connections objectEnumerator]; NSMutableArray *removedConnections = [NSMutableArray array]; id c = nil; BOOL removed = YES; BOOL prompted = NO; id delegate = [NSApp delegate]; // find connectors to be removed. while ((c = [en nextObject]) != nil) { id proxy = nil; NSString *proxyClass = nil; NSString *label = [c label]; if(label == nil) continue; if (action) { if (![label hasSuffix: @":"]) continue; if (![classManager isAction: label ofClass: className]) continue; proxy = [c destination]; } else { if ([label hasSuffix: @":"]) continue; if (![classManager isOutlet: label ofClass: className]) continue; proxy = [c source]; } // get the class for the current connectors object proxyClass = [proxy className]; if ([label isEqualToString: name] && ([proxyClass isEqualToString: className] || [classManager isSuperclass: className linkedToClass: proxyClass])) { removed = [delegate shouldBreakConnectionsModifyingLabel: name isAction: action prompted: prompted]; if (removed) { [removedConnections addObject: c]; break; } } } // actually remove the connections. if(removed) { en = [removedConnections objectEnumerator]; while((c = [en nextObject]) != nil) { [self removeConnector: c]; } } // done... NSDebugLog(@"Removed references to %@ on %@", name, className); return removed; } /** * Remove all connections to any and all instances of className. */ - (BOOL) removeConnectionsForClassNamed: (NSString *)className { NSEnumerator *en = nil; id c = nil; id delegate = [NSApp delegate]; BOOL removed = [delegate shouldBreakConnectionsForClassNamed: className]; // remove all. if(removed) { NSMutableArray *removedConnections = [NSMutableArray array]; // first find all of the connections... en = [connections objectEnumerator]; while ((c = [en nextObject]) != nil) { NSString *srcClass = [[c source] className]; NSString *dstClass = [[c destination] className]; if ([srcClass isEqualToString: className] || [classManager isSuperclass: className linkedToClass: srcClass] || [dstClass isEqualToString: className] || [classManager isSuperclass: className linkedToClass: dstClass]) { [removedConnections addObject: c]; } } // then remove them. en = [removedConnections objectEnumerator]; while((c = [en nextObject]) != nil) { [self removeConnector: c]; } } // done... NSDebugLog(@"Removed references to actions/outlets for objects of %@", className); return removed; } /** * Refresh all connections to any and all instances of className. Checks if * the class has the action/outlet present and deletes it, if it doesn't. */ - (void) refreshConnectionsForClassNamed: (NSString *)className { NSEnumerator *en = [connections objectEnumerator]; NSMutableArray *removedConnections = [NSMutableArray array]; id c = nil; // first find all of the connections... while ((c = [en nextObject]) != nil) { NSString *srcClass = [[c source] className]; NSString *dstClass = [[c destination] className]; NSString *label = [c label]; if ([srcClass isEqualToString: className] || [classManager isSuperclass: className linkedToClass: srcClass]) { if([c isKindOfClass: [NSNibOutletConnector class]]) { if([classManager outletExists: label onClassNamed: className] == NO) { [removedConnections addObject: c]; } } } else if([dstClass isEqualToString: className] || [classManager isSuperclass: className linkedToClass: dstClass]) { if([c isKindOfClass: [NSNibControlConnector class]]) { if([classManager actionExists: label onClassNamed: className] == NO) { [removedConnections addObject: c]; } } } } // then remove them. en = [removedConnections objectEnumerator]; while((c = [en nextObject]) != nil) { [self removeConnector: c]; } } /** * Rename connections connected to an instance of on class to another. */ - (BOOL) renameConnectionsForClassNamed: (NSString *)className toName: (NSString *)newName { NSEnumerator *en = [connections objectEnumerator]; id c = nil; id delegate = [NSApp delegate]; BOOL renamed = [delegate shouldRenameConnectionsForClassNamed: className toClassName: newName]; // remove all. if(renamed) { while ((c = [en nextObject]) != nil) { id source = [c source]; id destination = [c destination]; // check both... if ([[[c source] className] isEqualToString: className]) { [source setClassName: newName]; NSDebugLog(@"Found matching source"); } else if ([[[c destination] className] isEqualToString: className]) { [destination setClassName: newName]; NSDebugLog(@"Found matching destination"); } } } // done... NSDebugLog(@"Changed references to actions/outlets for objects of %@", className); return renamed; } /** * Print out all editors for debugging purposes. */ - (void) printAllEditors { NSMutableSet *set = [NSMutableSet setWithCapacity: 16]; NSEnumerator *enumerator = [connections objectEnumerator]; id c; while ((c = [enumerator nextObject]) != nil) { if ([GormObjectToEditor class] == [c class]) { [set addObject: [c destination]]; } } NSLog(@"all editors %@", set); } /** * Open a sound and load it into the document. */ - (id) openSound: (id)sender { NSArray *fileTypes = [NSSound soundUnfilteredFileTypes]; NSArray *filenames; NSString *filename; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; int result; int i; [oPanel setAllowsMultipleSelection: YES]; [oPanel setCanChooseFiles: YES]; [oPanel setCanChooseDirectories: NO]; result = [oPanel runModalForDirectory: nil file: nil types: fileTypes]; if (result == NSOKButton) { filenames = [oPanel filenames]; for (i=0; i<[filenames count]; i++) { filename = [filenames objectAtIndex:i]; NSDebugLog(@"Loading sound file: %@",filenames); [soundsView addObject: [GormSound soundForPath: filename]]; } return self; } return nil; } /** * Open an image and copy it into the document. */ - (id) openImage: (id)sender { NSArray *fileTypes = [NSImage imageFileTypes]; NSArray *filenames; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; NSString *filename; int result; int i; [oPanel setAllowsMultipleSelection: YES]; [oPanel setCanChooseFiles: YES]; [oPanel setCanChooseDirectories: NO]; result = [oPanel runModalForDirectory: nil file: nil types: fileTypes]; if (result == NSOKButton) { filenames = [oPanel filenames]; for (i=0; i<[filenames count]; i++) { filename = [filenames objectAtIndex:i]; NSDebugLog(@"Loading image file: %@",filename); [imagesView addObject: [GormImage imageForPath: filename]]; } return self; } return nil; } /** * Return a text description of the document. */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpointer-to-int-cast" - (NSString *) description { return [NSString stringWithFormat: @"<%s: %lx> = <>", GSClassNameFromObject(self), (unsigned long)self, nameTable, connections]; } #pragma GCC diagnostic pop /** * Returns YES, if obj is a top level object. */ - (BOOL) isTopLevelObject: (id)obj { return [topLevelObjects containsObject: obj]; } /** * Return first responder stand in. */ - (id) firstResponder { return firstResponder; } /** * Return font manager stand in. */ - (id) fontManager { return fontManager; } /** * Create resource manager instances for all registered classes. */ - (void) createResourceManagers { NSArray *resourceClasses = [IBResourceManager registeredResourceManagerClassesForFramework: nil]; NSEnumerator *en = [resourceClasses objectEnumerator]; Class cls = nil; if(resourceManagers != nil) { // refresh... DESTROY(resourceManagers); } resourceManagers = [[NSMutableArray alloc] init]; while((cls = [en nextObject]) != nil) { id mgr = AUTORELEASE([(IBResourceManager *)[cls alloc] initWithDocument: self]); [resourceManagers addObject: mgr]; } } /** * The list of all resource managers. */ - (NSArray *) resourceManagers { return resourceManagers; } /** * Get the resource manager which handles the content on pboard. */ - (IBResourceManager *) resourceManagerForPasteboard: (NSPasteboard *)pboard { NSEnumerator *en = [resourceManagers objectEnumerator]; IBResourceManager *mgr = nil, *result = nil; while((mgr = [en nextObject]) != nil) { if([mgr acceptsResourcesFromPasteboard: pboard]) { result = mgr; break; } } return result; } /** * Get all pasteboard types managed by the resource manager. */ - (NSArray *) allManagedPboardTypes { NSMutableArray *allTypes = [[NSMutableArray alloc] initWithObjects: NSFilenamesPboardType, GormLinkPboardType, nil]; NSArray *mgrs = [self resourceManagers]; NSEnumerator *en = [mgrs objectEnumerator]; IBResourceManager *mgr = nil; AUTORELEASE(allTypes); while((mgr = [en nextObject]) != nil) { NSArray *pbTypes = [mgr resourcePasteboardTypes]; [allTypes addObjectsFromArray: pbTypes]; } return allTypes; } /** * This method collects all of the objects in the document. */ - (NSMutableArray *) _collectAllObjects { NSMutableArray *allObjects = [NSMutableArray arrayWithArray: [topLevelObjects allObjects]]; NSEnumerator *en = [topLevelObjects objectEnumerator]; NSMutableArray *removeObjects = [NSMutableArray array]; id obj = nil; // collect all subviews/menus/etc. while((obj = [en nextObject]) != nil) { if([obj isKindOfClass: [NSWindow class]]) { NSMutableArray *views = [NSMutableArray array]; NSEnumerator *ven = [views objectEnumerator]; id vobj = nil; subviewsForView([(NSWindow *)obj contentView], views); [allObjects addObjectsFromArray: views]; while((vobj = [ven nextObject])) { if([vobj isKindOfClass: [GormCustomView class]]) { [removeObjects addObject: vobj]; } else if([vobj isKindOfClass: [NSMatrix class]]) { [allObjects addObjectsFromArray: [vobj cells]]; } else if([vobj isKindOfClass: [NSPopUpButton class]]) { [allObjects addObjectsFromArray: [vobj itemArray]]; } else if([vobj isKindOfClass: [NSTabView class]]) { [allObjects addObjectsFromArray: [vobj tabViewItems]]; } } } else if([obj isKindOfClass: [NSMenu class]]) { [allObjects addObjectsFromArray: findAll(obj)]; } } // take out objects which shouldn't be considered. [allObjects removeObjectsInArray: removeObjects]; return allObjects; } - (void) importStringsFromFile: (NSString *)filename { NSMutableArray *allObjects = [self _collectAllObjects]; NSDictionary *dictionary = nil; NSEnumerator *en = nil; id obj = nil; dictionary = [[NSString stringWithContentsOfFile: filename] propertyListFromStringsFileFormat]; // change to translated values. en = [allObjects objectEnumerator]; while((obj = [en nextObject]) != nil) { NSString *translation = nil; if([obj respondsToSelector: @selector(setTitle:)] && [obj respondsToSelector: @selector(title)]) { translation = [dictionary objectForKey: [obj title]]; if(translation != nil) { [obj setTitle: translation]; } } else if([obj respondsToSelector: @selector(setStringValue:)] && [obj respondsToSelector: @selector(stringValue)]) { translation = [dictionary objectForKey: [obj stringValue]]; if(translation != nil) { [obj setStringValue: translation]; } } else if([obj respondsToSelector: @selector(setLabel:)] && [obj respondsToSelector: @selector(label)]) { translation = [dictionary objectForKey: [obj label]]; if(translation != nil) { [obj setLabel: translation]; } } } } - (void) exportStringsToFile: (NSString *)filename { NSMutableArray *allObjects = [self _collectAllObjects]; NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; NSEnumerator *en = [allObjects objectEnumerator]; id obj = nil; BOOL touched = NO; // change to translated values. while((obj = [en nextObject]) != nil) { NSString *string = nil; if([obj respondsToSelector: @selector(setTitle:)] && [obj respondsToSelector: @selector(title)]) { string = [obj title]; } else if([obj respondsToSelector: @selector(setStringValue:)] && [obj respondsToSelector: @selector(stringValue)]) { string = [obj stringValue]; } else if([obj respondsToSelector: @selector(setLabel:)] && [obj respondsToSelector: @selector(label)]) { string = [obj label]; } if(string != nil) { [dictionary setObject: string forKey: string]; touched = YES; } } if(touched) { NSString *stringToWrite = @"/* TRANSLATORS: Make sure to quote all translated strings if\n" @" they contain spaces or non-ASCII characters. */\n\n"; stringToWrite = [stringToWrite stringByAppendingString: [dictionary descriptionInStringsFileFormat]]; [stringToWrite writeToFile: filename atomically: YES]; } } /** * Arrange views in front or in back of one another. */ - (void) arrangeSelectedObjects: (id)sender { NSArray *selection = [[(id)[NSApp delegate] selectionOwner] selection]; NSInteger tag = [sender tag]; NSEnumerator *en = [selection objectEnumerator]; id v = nil; while((v = [en nextObject]) != nil) { if([v isKindOfClass: [NSView class]]) { id editor = [self editorForObject: v create: NO]; if([editor respondsToSelector: @selector(superview)]) { id superview = [editor superview]; if(tag == 0) // bring to front... { [superview moveViewToFront: editor]; } else if(tag == 1) // send to back { [superview moveViewToBack: editor]; } [superview setNeedsDisplay: YES]; } } } } /** * Align objects to center, left, right, top, bottom. */ - (void) alignSelectedObjects: (id)sender { NSArray *selection = [[(id)[NSApp delegate] selectionOwner] selection]; NSInteger tag = [sender tag]; NSEnumerator *en = [selection objectEnumerator]; id v = nil; id prev = nil; // Mark the document modified. [self touch]; // Iterate over all in the selection and align them... while((v = [en nextObject]) != nil) { if([v isKindOfClass: [NSView class]]) { id editor = [self editorForObject: v create: NO]; if(prev != nil) { NSRect r = [prev frame]; NSRect e = [editor frame]; if(tag == 0) // center vertically { float center = (r.origin.x + (r.size.width / 2)); e.origin.x = (center - (e.size.width / 2)); } else if(tag == 1) // center horizontally { float center = (r.origin.y + (r.size.height / 2)); e.origin.y = (center - (e.size.height / 2)); } else if(tag == 2) // align left { e.origin.x = r.origin.x; } else if(tag == 3) // align right { float right = (r.origin.x + r.size.width); e.origin.x = (right - e.size.width); } else if(tag == 4) // align top { float top = (r.origin.y + r.size.height); e.origin.y = (top - e.size.height); } else if(tag == 5) // align bottom { e.origin.y = r.origin.y; } [editor setFrame: e]; [[editor superview] setNeedsDisplay: YES]; } prev = editor; } } } /** * The window nib for the document class... */ - (NSString *) windowNibName { return @"GormDocument"; } /** * Call the builder and create the file wrapper to save the appropriate format. */ - (NSFileWrapper *)fileWrapperRepresentationOfType: (NSString *)type { id builder = [[GormWrapperBuilderFactory sharedWrapperBuilderFactory] wrapperBuilderForType: type]; NSFileWrapper *result = nil; id delegate = [NSApp delegate]; /* * Warn the user, if we are about to upgrade the package. */ if(isOlderArchive && [filePrefsManager isLatest]) { BOOL result = [delegate shouldUpgradeOlderArchive]; if (result == YES) { // we're saving anyway... set to new value. isOlderArchive = NO; } else { return nil; } } /* * Notify the world that we are saving... */ [[NSNotificationCenter defaultCenter] postNotificationName: IBWillSaveDocumentNotification object: self]; // build the archive... [self deactivateEditors]; result = [builder buildFileWrapperWithDocument: self]; [self reactivateEditors]; if(result) { /* * This is the last thing we should do... */ [[NSNotificationCenter defaultCenter] postNotificationName: IBDidSaveDocumentNotification object: self]; } return result; } - (BOOL)loadFileWrapperRepresentation: (NSFileWrapper *)wrapper ofType: (NSString *)type { id loader = [[GormWrapperLoaderFactory sharedWrapperLoaderFactory] wrapperLoaderForType: type]; BOOL result = [loader loadFileWrapper: wrapper withDocument: self]; if(result) { // this is the last thing we should do... [[NSNotificationCenter defaultCenter] postNotificationName: IBDidOpenDocumentNotification object: self]; // make sure that the newly loaded document does not // mark itself as modified. [self updateChangeCount: NSChangeCleared]; } return result; } - (BOOL) keepBackupFile { return ([[NSUserDefaults standardUserDefaults] integerForKey: @"BackupFile"] == 1); } - (NSString *)displayName { if ([self fileName] != nil) { return [[self fileName] lastPathComponent]; } else { return [super displayName]; } } /** * All of the objects and corresponding names. */ - (NSMutableDictionary *) nameTable { return nameTable; } /** * All of the connections... */ - (NSMutableArray *) connections { return connections; } /** * All top level objects. */ - (NSMutableSet *) topLevelObjects { return topLevelObjects; } /** * All windows marked, visible at launch. */ - (NSSet *) visibleWindows { return visibleWindows; } /** * All windows marked, deferred. */ - (NSSet *) deferredWindows { return deferredWindows; } - (NSFileWrapper *) scmWrapper { return scmWrapper; } - (void) setSCMWrapper: (NSFileWrapper *)wrapper { ASSIGN(scmWrapper, wrapper); } /** * Images */ - (NSArray *) images { return [imagesView objects]; } /** * Sounds */ - (NSArray *) sounds { return [soundsView objects]; } /** * Sounds */ - (void) setSounds: (NSArray *)snds { ASSIGN(sounds,[snds mutableCopy]); } /** * Images */ - (void) setImages: (NSArray *)imgs { ASSIGN(images,[imgs mutableCopy]); } /** * File's owner... */ - (GormFilesOwner *) filesOwner { return filesOwner; } /** * Gorm file prefs manager. */ - (GormFilePrefsManager *) filePrefsManager { return filePrefsManager; } - (void) setDocumentOpen: (BOOL) flag { isDocumentOpen = flag; } - (BOOL) isDocumentOpen { return isDocumentOpen; } - (void) setInfoData: (NSData *)data { ASSIGN(infoData, data); } - (NSData *) infoData { return infoData; } - (void) setOlderArchive: (BOOL)flag { isOlderArchive = flag; } - (BOOL) isOlderArchive { return isOlderArchive; } // // Encoding is here for testing the interface. This allows // Gorm to encode the interface and then run it like a regular // app. It needs to act like a container in order to do this. // - (void) encodeWithCoder: (NSCoder *)coder { [coder encodeObject: topLevelObjects]; [coder encodeObject: nameTable]; [coder encodeObject: visibleWindows]; [coder encodeObject: connections]; } - (id) initWithCoder: (NSCoder *)coder { ASSIGN(topLevelObjects, [coder decodeObject]); ASSIGN(nameTable, [coder decodeObject]); ASSIGN(visibleWindows, [coder decodeObject]); ASSIGN(connections, [coder decodeObject]); return self; } - (void) awakeWithContext: (NSDictionary *)context { NSEnumerator *en = [connections objectEnumerator]; id o = nil; while((o = [en nextObject]) != nil) { id val = nil; if ([o destination] == firstResponder) { val = nil; } else { val = [nameTable objectForKey: [o destination]]; } if ([[o label] isEqualToString: @"terminate:"]) { [o setLabel: @"deferredEndTesting:"]; } [o setDestination: val]; [o establishConnection]; } en = [visibleWindows objectEnumerator]; o = nil; while((o = [en nextObject]) != nil) { [o orderFront: self]; } } /* End of testInterface support code */ /** * Deactivate the editors for archiving.. */ - (void) deactivateEditors { NSEnumerator *enumerator; id con; /* * Map all connector sources and destinations to their name strings. * Deactivate editors so they won't be archived. */ enumerator = [connections objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { if ([con isKindOfClass: [GormObjectToEditor class]]) { [savedEditors addObject: con]; [[con destination] deactivate]; } else if ([con isKindOfClass: [GormEditorToParent class]]) { [savedEditors addObject: con]; } } [connections removeObjectsInArray: savedEditors]; } /** * Reactivate all of the editors... */ - (void) reactivateEditors { NSEnumerator *enumerator; id con; /* * Restore editor links and reactivate the editors. */ [connections addObjectsFromArray: savedEditors]; enumerator = [savedEditors objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { if ([[con source] isKindOfClass: [NSView class]] == NO) [(id)[con destination] activate]; } [savedEditors removeAllObjects]; } - (void) setFileType: (NSString *)type { [super setFileType: type]; [filePrefsManager setFileTypeName: type]; } - (BOOL) revertToContentsOfURL: (NSURL *)url ofType: (NSString *)type error: (NSError **)error { GormDocumentController *dc = [NSDocumentController sharedDocumentController]; // [dc performSelector:@selector(openDocumentWithContentsOfURL:) withObject:url afterDelay:2]; [self close]; [dc openDocumentWithContentsOfURL:url]; return YES; } //// PRIVATE METHODS... - (NSString *) classForObject: (id)obj { return [classManager classNameForObject: obj]; } - (NSArray *) actionsOfClass: (NSString *)className { return [classManager allActionsForClassNamed: className]; } - (NSArray *) outletsOfClass: (NSString *)className { return [classManager allOutletsForClassNamed: className]; } //// Document Validation - (NSArray *) validate { NSMutableArray *results = [NSMutableArray array]; NSEnumerator *en = [topLevelObjects objectEnumerator]; id o = nil; NSLog(@"Validating topLevelObjects: %@", topLevelObjects); while ((o = [en nextObject]) != nil) { // check the type of o... if ([o isKindOfClass: [NSWindow class]] || [o isKindOfClass: [NSMenu class]] || [o isKindOfClass: [NSView class]] || [o isKindOfClass: [GormObjectProxy class]]) { continue; } else { NSString *className = NSStringFromClass([o class]); NSString *error = [NSString stringWithFormat: @"%@ has an invalid class of type %@", o, className]; [results addObject: error]; } } return results; } @end @implementation GormDocument (MenuValidation) - (BOOL) isEditingObjects { return ([selectionBox contentView] == scrollView); } - (BOOL) isEditingImages { return ([selectionBox contentView] == imagesScrollView); } - (BOOL) isEditingSounds { return ([selectionBox contentView] == soundsScrollView); } - (BOOL) isEditingClasses { return ([selectionBox contentView] == classesView); } @end @implementation GormDocument (NSToolbarDelegate) - (NSToolbarItem*)toolbar: (NSToolbar*)toolbar itemForItemIdentifier: (NSString*)itemIdentifier willBeInsertedIntoToolbar: (BOOL)flag { NSToolbarItem *toolbarItem = AUTORELEASE([[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier]); if([itemIdentifier isEqual: @"ObjectsItem"]) { [toolbarItem setLabel: @"Objects"]; [toolbarItem setImage: objectsImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(changeView:)]; [toolbarItem setTag: 0]; } else if([itemIdentifier isEqual: @"ImagesItem"]) { [toolbarItem setLabel: @"Images"]; [toolbarItem setImage: imagesImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(changeView:)]; [toolbarItem setTag: 1]; } else if([itemIdentifier isEqual: @"SoundsItem"]) { [toolbarItem setLabel: @"Sounds"]; [toolbarItem setImage: soundsImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(changeView:)]; [toolbarItem setTag: 2]; } else if([itemIdentifier isEqual: @"ClassesItem"]) { [toolbarItem setLabel: @"Classes"]; [toolbarItem setImage: classesImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(changeView:)]; [toolbarItem setTag: 3]; } else if([itemIdentifier isEqual: @"FileItem"]) { [toolbarItem setLabel: @"File"]; [toolbarItem setImage: fileImage]; [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(changeView:)]; [toolbarItem setTag: 4]; } return toolbarItem; } - (NSArray*) toolbarAllowedItemIdentifiers: (NSToolbar*)toolbar { return [NSArray arrayWithObjects: @"ObjectsItem", @"ImagesItem", @"SoundsItem", @"ClassesItem", @"FileItem", nil]; } - (NSArray*) toolbarDefaultItemIdentifiers: (NSToolbar*)toolbar { return [NSArray arrayWithObjects: @"ObjectsItem", @"ImagesItem", @"SoundsItem", @"ClassesItem", @"FileItem", nil]; } - (NSArray*) toolbarSelectableItemIdentifiers: (NSToolbar*)toolbar { return [NSArray arrayWithObjects: @"ObjectsItem", @"ImagesItem", @"SoundsItem", @"ClassesItem", @"FileItem", nil]; } @end @implementation GormDocument (Metadata) // Core methods.. - (id) outlineView: (NSOutlineView *)ov child: (NSInteger)index ofItem: (id)item { id result = nil; if ([objectViewController editor] == NO) [self deactivateEditors]; NSDebugLog(@"index = %ld, item = %@", index, item); if (item == nil) { result = [[topLevelObjects allObjects] objectAtIndex: index]; } else if ([item isKindOfClass: [NSWindow class]]) { result = [item contentView]; } else if ([item isKindOfClass: [NSView class]]) { result = [[item subviews] objectAtIndex: index]; } else if ([item isKindOfClass: [NSMenu class]]) { result = [item itemAtIndex: index]; } else if ([item isKindOfClass: [NSMenuItem class]]) { result = [item submenu]; } NSDebugLog(@"result = %@", result); if ([objectViewController editor] == NO) [self reactivateEditors]; return result; } - (BOOL) outlineView: (NSOutlineView *)ov isItemExpandable: (id)item { BOOL f = NO; if ([objectViewController editor] == NO) [self deactivateEditors]; if (item == nil) { f = [topLevelObjects count] > 0; } else if ([item isKindOfClass: [NSWindow class]]) { f = [item contentView] != nil; } else if ([item isKindOfClass: [NSView class]]) { f = [[item subviews] count] > 0; } else if ([item isKindOfClass: [NSMenu class]]) { f = [item numberOfItems] > 0; } else if ([item isKindOfClass: [NSMenuItem class]]) { f = [item hasSubmenu]; } if ([objectViewController editor] == NO) [self reactivateEditors]; NSDebugLog(@"f = %d",f); return f; } - (NSInteger) outlineView: (NSOutlineView *)ov numberOfChildrenOfItem: (id)item { NSInteger c = 0; if ([objectViewController editor] == NO) [self deactivateEditors]; if (item == nil) { c = [topLevelObjects count]; } else if ([item isKindOfClass: [NSWindow class]]) { c = 1; // We are only counting the contentView... } else if ([item isKindOfClass: [NSView class]]) { c = [[item subviews] count]; } else if ([item isKindOfClass: [NSMenu class]]) { c = [item numberOfItems]; } else if ([item isKindOfClass: [NSMenuItem class]]) { c = 1; // one submenu... } if ([objectViewController editor] == NO) [self reactivateEditors]; NSDebugLog(@"c = %ld", c); return c; } - (id) outlineView: (NSOutlineView *)ov objectValueForTableColumn: (NSTableColumn *)tableColumn byItem: (id)item { id value = nil; NSString *className = [classManager classNameForObject: item]; NSString *name = [self nameForObject: item]; NSUInteger version = 0; if ([objectViewController editor] == NO) [self deactivateEditors]; if ([[tableColumn identifier] isEqualToString: @"objects"]) { NSString *title = @""; if ([item respondsToSelector: @selector(title)]) { title = [item title]; value = [NSString stringWithFormat: @"%@ : %@", (title != nil && ![title isEqualToString: @""]) ? title : @"*Untitled*", (name != nil) ? name : @"*Unnamed*"]; } else { value = [NSString stringWithFormat: @"%@", (name != nil)?name:@"*Unnamed*"]; } } else if ([[tableColumn identifier] isEqualToString: @"class"]) { value = className; } else if ([[tableColumn identifier] isEqualToString: @"version"]) { value = [NSNumber numberWithInteger: version]; } else if ([[tableColumn identifier] isEqualToString: @"destination"]) { NSArray *c = [self connectorsForDestination: item]; value = [NSNumber numberWithInteger: [c count]]; } else if ([[tableColumn identifier] isEqualToString: @"source"]) { NSArray *c = [self connectorsForSource: item]; value = [NSNumber numberWithInteger: [c count]]; } if ([objectViewController editor] == NO) [self reactivateEditors]; return value; } // Other methods... - (BOOL) outlineView: (NSOutlineView *)ov acceptDrop: (id)info item: (id)item childIndex: (NSInteger)index { return NO; } - (id) outlineView: (NSOutlineView *)ov itemForPersistentObject: (id)obj { return nil; } - (id) outlineView: (NSOutlineView *)ov persistentObjectForItem: (id)item { return nil; } - (NSArray *) outlineView: (NSOutlineView *)ov namesOfPromisedFilesDroppedAtDestination: (NSURL *)dropDestination forDraggedItems: (NSArray *)items { return nil; } - (void) outlineView: (NSOutlineView *)ov setObjectValue: (id)value forTableColumn: (NSTableColumn *)tc byItem: (id)item { } - (void) outlineView: (NSOutlineView *)ov sortDescriptorsDidChange: (NSArray *)oldDescriptors { } - (void) outlineView: (NSOutlineView *)ov writeItems: (NSArray *)items toPasteboard: (NSPasteboard *)pb { } - (NSDragOperation) outlineView: (NSOutlineView *)ov validateDrop: (id)info proposedItem: (id)item proposedChildIndex: (NSInteger)index { return 0; } @end apps-gorm-gorm-1_5_0/GormCore/GormDocumentController.h000066400000000000000000000027651475375552500231170ustar00rootroot00000000000000/* GormDocumentController.m * * This class contains Gorm specific implementation of the IBDocuments * protocol plus additional methods which are useful for managing the * contents of the document. * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormDocumentController_h #define INCLUDED_GormDocumentController_h #include typedef enum { GormApplication = 0, GormEmpty = 1, GormInspector = 2, GormPalette = 3 } GormDocumentType; @interface GormDocumentController : NSDocumentController { } - (void) buildDocumentForType: (GormDocumentType)documentType; - (id) openDocumentWithContentsOfURL:(NSURL *)url; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormDocumentController.m000066400000000000000000000124271475375552500231200ustar00rootroot00000000000000/* GormDocumentController.m * * This class is a subclass of the NSDocumentController * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" @implementation GormDocumentController - (id) currentDocument { NSArray *documents = [self documents]; unsigned i = [documents count]; id result = nil; if (i > 0) { while (i-- > 0) { id doc = [documents objectAtIndex: i]; if ([doc isActive] == YES) { result = doc; break; } } } return result; } - (void) buildDocumentForType: (GormDocumentType)documentType { GormDocument *doc = nil; NSDebugLog(@"In gorm document controller..."); doc = (GormDocument *)[[self documents] lastObject]; // get the latest document... switch (documentType) { case GormApplication: { NSMenu *aMenu; NSWindow *aWindow; NSRect frame = [[NSScreen mainScreen] frame]; unsigned style = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask; if ([NSMenu respondsToSelector: @selector(allocSubstitute)]) { aMenu = [[NSMenu allocSubstitute] init]; } else { aMenu = [[NSMenu alloc] init]; } if ([NSWindow respondsToSelector: @selector(allocSubstitute)]) { aWindow = [[NSWindow allocSubstitute] initWithContentRect: NSMakeRect(0,0,600, 400) styleMask: style backing: NSBackingStoreBuffered defer: NO]; } else { aWindow = [[NSWindow alloc] initWithContentRect: NSMakeRect(0,0,600, 400) styleMask: style backing: NSBackingStoreBuffered defer: NO]; } [aWindow setFrameTopLeftPoint: NSMakePoint(230, frame.size.height-100)]; [aWindow setTitle: _(@"My Window")]; [doc setName: @"My Window" forObject: aWindow]; [doc attachObject: aWindow toParent: nil]; [doc setObject: aWindow isVisibleAtLaunch: YES]; [aMenu setTitle: _(@"Main Menu")]; [aMenu addItemWithTitle: _(@"Hide") action: @selector(hide:) keyEquivalent: @"h"]; [aMenu addItemWithTitle: _(@"Quit") action: @selector(terminate:) keyEquivalent: @"q"]; // the first menu attached becomes the main menu. [doc attachObject: aMenu toParent: nil]; } break; case GormInspector: { NSPanel *aWindow; NSRect frame = [[NSScreen mainScreen] frame]; unsigned style = NSTitledWindowMask | NSClosableWindowMask; if ([NSPanel respondsToSelector: @selector(allocSubstitute)]) { aWindow = [[NSPanel allocSubstitute] initWithContentRect: NSMakeRect(0,0, IVW, IVH) styleMask: style backing: NSBackingStoreBuffered defer: NO]; } else { aWindow = [[NSPanel alloc] initWithContentRect: NSMakeRect(0,0, IVW, IVH) styleMask: style backing: NSBackingStoreBuffered defer: NO]; } [aWindow setFrameTopLeftPoint: NSMakePoint(230, frame.size.height-100)]; [aWindow setTitle: _(@"Inspector Window")]; [doc setName: @"InspectorWin" forObject: aWindow]; [doc attachObject: aWindow toParent: nil]; } break; case GormPalette: { NSPanel *aWindow; NSRect frame = [[NSScreen mainScreen] frame]; unsigned style = NSTitledWindowMask | NSClosableWindowMask; if ([NSPanel respondsToSelector: @selector(allocSubstitute)]) { aWindow = [[NSPanel allocSubstitute] initWithContentRect: NSMakeRect(0,0,272,160) styleMask: style backing: NSBackingStoreBuffered defer: NO]; } else { aWindow = [[NSPanel alloc] initWithContentRect: NSMakeRect(0,0,272,160) styleMask: style backing: NSBackingStoreBuffered defer: NO]; } [aWindow setFrameTopLeftPoint: NSMakePoint(230, frame.size.height-100)]; [aWindow setTitle: _(@"Palette Window")]; [doc setName: @"PaletteWin" forObject: aWindow]; [doc attachObject: aWindow toParent: nil]; } break; case GormEmpty: { // nothing to do... } break; default: { NSLog(@"Unknown document type..."); } } // set the filetype and touch the document. [doc setFileType: @"GSGormFileType"]; } - (void) newDocument: (id)sender { GormDocumentType documentType = GormApplication; if([sender respondsToSelector: @selector(tag)]) { documentType = (GormDocumentType)[sender tag]; } [super newDocument: sender]; [self buildDocumentForType: documentType]; } - (id) openDocumentWithContentsOfURL:(NSURL *)url { return [self openDocumentWithContentsOfURL:url display:YES]; } @end apps-gorm-gorm-1_5_0/GormCore/GormDocumentWindow.h000066400000000000000000000022341475375552500222320ustar00rootroot00000000000000#ifndef __INCLUDED_GormDocumentWindow_h /* GormDocumentWindow.h * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Matt Rice * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include @interface GormDocumentWindow : NSWindow { id _document; IBResourceManager *dragMgr; } - (void) setDocument:(id)document; @end #define __INCLUDED_GormDocumentWindow_h #endif apps-gorm-gorm-1_5_0/GormCore/GormDocumentWindow.m000066400000000000000000000047151475375552500222450ustar00rootroot00000000000000/* GormDocumentWindow.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Matt Rice * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormDocumentWindow.h" #include "GormPrivate.h" @implementation GormDocumentWindow /* - (BOOL) canBecomeMainWindow { return NO; } */ - (void) setDocument:(id)document { _document = document; } - (NSDragOperation)draggingEntered:(id )sender; { NSPasteboard *pb = [sender draggingPasteboard]; NSUInteger mask = [sender draggingSourceOperationMask]; NSUInteger oper = NSDragOperationNone; dragMgr = [_document resourceManagerForPasteboard:pb]; if (dragMgr) { if (mask & NSDragOperationCopy) { oper = NSDragOperationCopy; } else if (mask & NSDragOperationLink) { oper = NSDragOperationLink; } else if (mask & NSDragOperationMove) { oper = NSDragOperationMove; } else if (mask & NSDragOperationGeneric) { oper = NSDragOperationGeneric; } else if (mask & NSDragOperationPrivate) { oper = NSDragOperationPrivate; } } return oper; } - (void)draggingExited:(id )sender; { dragMgr = nil; } - (BOOL)prepareForDragOperation:(id )sender; { return !(dragMgr == nil); } - (BOOL)performDragOperation:(id )sender; { [dragMgr addResourcesFromPasteboard:[sender draggingPasteboard]]; return !(dragMgr == nil); } - (void)concludeDragOperation:(id )sender; { dragMgr = nil; } - (void)draggingEnded: (id )sender; { dragMgr = nil; } - (void) awakeFromNib { [self setAcceptsMouseMovedEvents: YES]; } @end apps-gorm-gorm-1_5_0/GormCore/GormFilePrefsManager.h000066400000000000000000000043051475375552500224370ustar00rootroot00000000000000/* All Rights reserved */ #include @interface GormFilePrefsManager : NSObject { id showIncompatibilities; id targetVersion; id gormAppVersion; id archiveType; id iwindow; id itable; id fileType; // encoded ivars... NSInteger version; NSString *targetVersionName; NSString *archiveTypeName; // version profiles... NSDictionary *versionProfiles; NSDictionary *currentProfile; } /** * Show incompatibilities in the panel. */ - (void) showIncompatibilities: (id)sender; /** * Action called when the target version pulldown is selected. */ - (void) selectTargetVersion: (id)sender; /** * Action called when the archive type pulldown is selected. */ - (void) selectArchiveType: (id)sender; /** * Loads the encoded file info. */ - (BOOL) loadFromData: (NSData *)data; /** * Loads the encoded file info. */ - (BOOL) loadFromFile: (NSString *)path; /** * Saves the encoded file info. */ - (NSData *) data; /** * Saves the encoded file info. */ - (NSData *) nibDataWithOpenItems: (NSArray *)openItems; /** * Saves the encoded file info. */ - (BOOL) saveToFile: (NSString *)path; /** * Loads the profile. */ - (void) loadProfile: (NSString *)version; // accessors... /** * Gorm Version of the current archive. */ - (int) version; /** * Which version of the gui library, by name. */ - (NSString *)targetVersionName; /** * Which achive type, by name. */ - (NSString *)archiveTypeName; /** * Are we set to the latest version? Returns YES, if so. */ - (BOOL) isLatest; // set class versions /** * Sets the version of the classes. */ - (void) setClassVersions; /** * Restores the versions to the most current. */ - (void) restoreClassVersions; /** * Returns the version of the class in the current profile. */ - (int) versionOfClass: (NSString *)className; // file type... /** * File type name... */ - (void) setFileTypeName: (NSString *)ft; /** * return file type. */ - (NSString *) fileTypeName; /** * The current Gorm version. */ + (int) currentVersion; /** * Current profile for the current model file. */ - (NSDictionary *) currentProfile; /** * Version information for the model file. */ - (NSDictionary *) versionProfiles; @end apps-gorm-gorm-1_5_0/GormCore/GormFilePrefsManager.m000066400000000000000000000227211475375552500224460ustar00rootroot00000000000000/** GormFilePrefsManager Sets the information about the .gorm file's version. This allows a file to be saved as an older version of the .gorm format so that older releases can still use .gorm files created by people who have the latest GNUstep and Gorm version. Copyright (C) 2003 Free Software Foundation, Inc. Author: Gregory John Casamento Date: July 2003. This file is part of the GNUstep GUI Library. 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 3 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* All rights reserved */ #include #include #include #include #include #include "GormFilePrefsManager.h" #include "GormFunctions.h" #include "GormDocument.h" NSString *formatVersion(NSInteger version) { NSInteger bit16 = 65536; NSInteger bit8 = 256; NSInteger maj = 0; NSInteger min = 0; NSInteger pch = 0; NSInteger v = version; // pull the version fromt the number maj = (int)((float)v / (float)bit16); v -= (bit16 * maj); min = (int)((float)v / (float)bit8); v -= (bit8 * min); pch = v; return [NSString stringWithFormat: @"%ld.%ld.%ld / %ld",(long)maj,(long)min,(long)pch,(long)version]; } @implementation GormFilePrefsManager // initializers... - (id) init { if((self = [super init]) != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForResource: @"VersionProfiles" ofType: @"plist"]; versionProfiles = RETAIN([[NSString stringWithContentsOfFile: path] propertyList]); } return self; } - (void) dealloc { NSDebugLog(@"Deallocating..."); [iwindow performClose: self]; RELEASE(iwindow); RELEASE(versionProfiles); [super dealloc]; } + (int) currentVersion { return appVersion(1, 5, 0); } - (void) awakeFromNib { version = [GormFilePrefsManager currentVersion]; [gormAppVersion setStringValue: formatVersion(version)]; ASSIGN(targetVersionName, [[targetVersion selectedItem] title]); ASSIGN(archiveTypeName, [[archiveType selectedItem] title]); [self selectTargetVersion: targetVersion]; } // set class versions - (void) setClassVersions { NSEnumerator *en = [currentProfile keyEnumerator]; id className = nil; NSDebugLog(@"set the class versions to the profile selected... %@",targetVersionName); while((className = [en nextObject]) != nil) { Class cls = NSClassFromString(className); NSDictionary *info = [currentProfile objectForKey: className]; NSInteger v = [[info objectForKey: @"version"] intValue]; NSDebugLog(@"Setting version %ld for class %@",(long)v,className); [cls setVersion: v]; } } - (void) restoreClassVersions { NSDictionary *latestVersion = [versionProfiles objectForKey: @"Latest Version"]; NSEnumerator *en = [latestVersion keyEnumerator]; id className = nil; // The "Latest Version" key must always exist. NSDebugLog(@"restore the class versions to the latest version..."); while((className = [en nextObject]) != nil) { Class cls = NSClassFromString(className); NSDictionary *info = [latestVersion objectForKey: className]; NSInteger v = [[info objectForKey: @"version"] intValue]; NSDebugLog(@"Setting version %ld for class %@",(long)v,className); [cls setVersion: v]; } } // class profile - (void) loadProfile: (NSString *)profileName { NSDebugLog(@"Loading profile %@",profileName); currentProfile = [versionProfiles objectForKey: targetVersionName]; } // actions... - (void) showIncompatibilities: (id)sender { [itable reloadData]; [iwindow orderFront: self]; [iwindow center]; } - (void) selectTargetVersion: (id)sender { ASSIGN(targetVersionName, [[sender selectedItem] title]); [self loadProfile: targetVersionName]; [itable reloadData]; } - (void) selectArchiveType: (id)sender { ASSIGN(archiveTypeName, [[sender selectedItem] title]); NSDebugLog(@"Set Archive type... %@",sender); } // Loading and saving the file. - (BOOL) saveToFile: (NSString *)path { return [[self data] writeToFile: path atomically: YES]; } // Loading and saving the file. - (NSData *) data { // upon saving, update to the latest. version = [GormFilePrefsManager currentVersion]; [gormAppVersion setStringValue: formatVersion(version)]; // return the data... return [NSArchiver archivedDataWithRootObject: self]; } - (NSData *) nibDataWithOpenItems: (NSArray *)openItems { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; NSRect docLocation = [[(GormDocument *)[(id)[NSApp delegate] activeDocument] window] frame]; NSRect screenRect = [[NSScreen mainScreen] frame]; NSString *stringRect = [NSString stringWithFormat: @"%d %d %d %d %d %d %d %d", (int)docLocation.origin.x, (int)docLocation.origin.y, (int)docLocation.size.width, (int)docLocation.size.height, (int)screenRect.origin.x, (int)screenRect.origin.y, (int)screenRect.size.width, (int)screenRect.size.height]; // upon saving, update to the latest. version = [GormFilePrefsManager currentVersion]; [gormAppVersion setStringValue: formatVersion(version)]; [dict setObject: stringRect forKey: @"IBDocumentLocation"]; [dict setObject: @"437.0" forKey: @"IBFramework Version"]; [dict setObject: @"8I127" forKey: @"IBSystem Version"]; [dict setObject: [NSNumber numberWithBool: YES] forKey: @"IBUsesTextArchiving"]; // for now. [dict setObject: openItems forKey: @"IBOpenItems"]; return [NSPropertyListSerialization dataFromPropertyList: dict format: NSPropertyListXMLFormat_v1_0 errorDescription: NULL]; } - (int) versionOfClass: (NSString *)className { NSInteger result = -1; NSDictionary *clsProfile = [currentProfile objectForKey: className]; if(clsProfile != nil) { NSString *versionString = [clsProfile objectForKey: @"version"]; if(versionString != nil) { result = [versionString intValue]; } } return result; } /** * Current profile for the current model file. */ - (NSDictionary *) currentProfile; { return currentProfile; } /** * Version information for the model file. */ - (NSDictionary *) versionProfiles; { return versionProfiles; } - (BOOL) loadFromFile: (NSString *)path { return [self loadFromData: [NSData dataWithContentsOfFile: path]]; } - (BOOL) loadFromData: (NSData *)data { BOOL result = YES; NS_DURING { GormFilePrefsManager *object = (GormFilePrefsManager *) [NSUnarchiver unarchiveObjectWithData: data]; [gormAppVersion setStringValue: formatVersion([object version])]; version = [object version]; [targetVersion selectItemWithTitle: [object targetVersionName]]; ASSIGN(targetVersionName,[object targetVersionName]); [archiveType selectItemWithTitle: [object archiveTypeName]]; ASSIGN(archiveTypeName, [object archiveTypeName]); [self selectTargetVersion: targetVersion]; result = YES; } NS_HANDLER { NSLog(@"Problem loading info file: %@",[localException reason]); result = NO; } NS_ENDHANDLER; return result; } // encoding... - (void) encodeWithCoder: (NSCoder *)coder { [coder encodeValueOfObjCType: @encode(int) at: &version]; [coder encodeObject: targetVersionName]; [coder encodeObject: archiveTypeName]; } - (id) initWithCoder: (NSCoder *)coder { if((self = [super init]) != nil) { [coder decodeValueOfObjCType: @encode(int) at: &version]; targetVersionName = [coder decodeObject]; archiveTypeName = [coder decodeObject]; } return self; } // accessors - (int) version { return version; } - (NSString *)targetVersionName { return targetVersionName; } - (NSString *)archiveTypeName { return archiveTypeName; } - (BOOL) isLatest { return ([targetVersionName isEqual: @"Latest Version"]); } - (void) setFileTypeName: (NSString *)ft { [fileType setStringValue: ft]; } - (NSString *) fileTypeName { return [fileType stringValue]; } // Data Source - (NSInteger) numberOfRowsInTableView: (NSTableView *)aTableView { return [currentProfile count]; } - (id) tableView: (NSTableView *)aTableView objectValueForTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { id obj = nil; if([[aTableColumn identifier] isEqual: @"item"]) { obj = [NSString stringWithFormat: @"#%ld",(long int)rowIndex+1]; } else if([[aTableColumn identifier] isEqual: @"description"]) { NSArray *keys = [currentProfile allKeys]; NSString *key = [keys objectAtIndex: rowIndex]; NSDictionary *info = [currentProfile objectForKey: key]; obj = [info objectForKey: @"comment"]; } return obj; } - (void) tableView: (NSTableView *)aTableView setObjectValue: (id)anObject forTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { } @end apps-gorm-gorm-1_5_0/GormCore/GormFilesOwner.h000066400000000000000000000031271475375552500213430ustar00rootroot00000000000000/* GormFilesOwner.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormFilesOwner_h #define INCLUDED_GormFilesOwner_h #include #include @class NSMutableArray, NSBrowser, NSString; /* * Each document has a GormFilesOwner object that is used as a placeholder * for the owner of the document. */ @interface GormFilesOwner : NSObject { NSString *className; } - (NSString*) className; - (void) setClassName: (NSString*)aName; @end @interface GormFilesOwnerInspector : IBInspector { NSBrowser *browser; NSMutableArray *classes; BOOL hasConnections; } - (void) takeClassFrom: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormFilesOwner.m000066400000000000000000000156761475375552500213640ustar00rootroot00000000000000/* GormFilesOwner.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" #include "GormCustomView.h" // @class GormCustomView; @implementation GormFilesOwner - (NSString*) className { return className; } - (void) dealloc { RELEASE(className); [super dealloc]; } - (NSImage*) imageForViewer { static NSImage *image = nil; if (image == nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"GormFilesOwner"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } - (id) init { self = [super init]; [self setClassName: @"NSApplication"]; return self; } - (NSString*) inspectorClassName { return @"GormFilesOwnerInspector"; } - (NSString*) classInspectorClassName { return @"GormFilesOwnerInspector"; } - (void) setClassName: (NSString*)aName { ASSIGN(className, aName); } - (void) encodeWithCoder: (NSCoder *)coder { if([coder allowsKeyedCoding]) { [coder encodeObject: className forKey: @"NSClassName"]; } } /* - (id) initWithCoder: (NSCoder *)coder { [NSException raise: NSInvalidArgumentException format: @"Keyed coding not implemented for %@.", NSStringFromClass([self class])]; return nil; // never reached, but keeps gcc happy. } */ @end @implementation GormFilesOwnerInspector - (NSInteger) browser: (NSBrowser*)sender numberOfRowsInColumn: (NSInteger)column { return [classes count]; } - (NSString*) browser: (NSBrowser*)sender titleOfColumn: (NSInteger)column { return @"Class"; } - (void) browser: (NSBrowser*)sender willDisplayCell: (id)aCell atRow: (NSInteger)row column: (NSInteger)col { if (row >= 0 && row < [classes count]) { [aCell setStringValue: [classes objectAtIndex: row]]; [aCell setEnabled: YES]; } else { [aCell setStringValue: @""]; [aCell setEnabled: NO]; } [aCell setLeaf: YES]; } - (void) dealloc { RELEASE(classes); [super dealloc]; } - (void) _classAdded: (NSNotification *)notification { [self setObject: object]; } - (void) _classDeleted: (NSNotification *)notification { [self setObject: object]; } - (id) init { self = [super init]; if (self != nil) { NSView *contents; NSRect rect; NSRect browserRect; rect = NSMakeRect(0, 0, IVW, IVH); window = [[NSWindow alloc] initWithContentRect: rect styleMask: NSBorderlessWindowMask backing: NSBackingStoreRetained defer: NO]; contents = [window contentView]; browserRect = NSMakeRect(31,56,203,299); browser = [[NSBrowser alloc] initWithFrame: browserRect]; [browser setAutoresizingMask: NSViewWidthSizable|NSViewHeightSizable]; [browser setMaxVisibleColumns: 1]; [browser setAllowsMultipleSelection: NO]; [browser setHasHorizontalScroller: NO]; [browser setDelegate: self]; [browser setTarget: self]; [browser setAction: @selector(takeClassFrom:)]; [contents addSubview: browser]; RELEASE(browser); // add observers for relavent notifications. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_classAdded:) name: GormDidAddClassNotification object: [(id)[NSApp delegate] classManager]]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(_classDeleted:) name: GormDidDeleteClassNotification object: [(id)[NSApp delegate] classManager]]; } return self; } - (void) setObject: (id)anObject { // filter the classes to view only when a custom view is selected. if([anObject isKindOfClass: [GormCustomView class]]) { ASSIGN(classes, AUTORELEASE([[[(id)[NSApp delegate] classManager] allSubclassesOf: @"NSView"] mutableCopy])); } else { ASSIGN(classes, AUTORELEASE([[[(id)[NSApp delegate] classManager] allClassNames] mutableCopy])); } // remove the first responder, since we don't want the user to choose this. [classes removeObject: @"FirstResponder"]; if (anObject != nil) { NSArray *array; NSUInteger pos; ASSIGN(object, anObject); hasConnections = NO; /* * Create list of existing connections for selected object. */ array = [[(id)[NSApp delegate] activeDocument] connectorsForSource: object ofClass: [NSNibOutletConnector class]]; if ([array count] > 0) hasConnections = YES; array = [[(id)[NSApp delegate] activeDocument] connectorsForDestination: object ofClass: [NSNibControlConnector class]]; if ([array count] > 0) hasConnections = YES; [browser loadColumnZero]; pos = [classes indexOfObject: [object className]]; if (pos != NSNotFound) { [browser selectRow: pos inColumn: 0]; } } } - (void) takeClassFrom: (id)sender { NSString *title = [[browser selectedCell] stringValue]; NSDebugLog(@"Selected %d, %@", (int)[browser selectedRowInColumn: 0], title); if (hasConnections > 0 && [title isEqual: [object className]] == NO) { if (NSRunAlertPanel(nil, _(@"This operation will break existing connection"), _(@"OK"), _(@"Cancel"), nil) != NSAlertDefaultReturn) { unsigned pos = [classes indexOfObject: [object className]]; [browser selectRow: pos inColumn: 0]; return; } else { NSArray *array; id doc = [(id)[NSApp delegate] activeDocument]; unsigned i; array = [doc connectorsForSource: object ofClass: [NSNibOutletConnector class]]; for (i = 0; i < [array count]; i++) { id con = [array objectAtIndex: i]; [doc removeConnector: con]; } array = [doc connectorsForDestination: object ofClass: [NSNibControlConnector class]]; for (i = 0; i < [array count]; i++) { id con = [array objectAtIndex: i]; [doc removeConnector: con]; } hasConnections = NO; } } [super ok: sender]; [object setClassName: title]; } @end apps-gorm-gorm-1_5_0/GormCore/GormFontViewController.h000066400000000000000000000005301475375552500230660ustar00rootroot00000000000000/* All Rights reserved */ #include @interface GormFontViewController : NSObject { id fontSelector; id view; id encodeButton; } + (GormFontViewController *) sharedGormFontViewController; - (NSFont *) convertFont: (NSFont *)oldFont; - (void) selectFont: (id)sender; - (id) view; // - (void) changeFont: (id)sender; @end apps-gorm-gorm-1_5_0/GormCore/GormFontViewController.m000066400000000000000000000056051475375552500231030ustar00rootroot00000000000000/* All rights reserved */ #include #include "GormFontViewController.h" static GormFontViewController *gorm_font_cont = nil; @implementation GormFontViewController + (GormFontViewController *) sharedGormFontViewController { if (gorm_font_cont == nil) { gorm_font_cont = [[self alloc] init]; } return gorm_font_cont; } - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; // load the gui... if (![bundle loadNibNamed: @"GormFontView" owner: self topLevelObjects: NULL]) { NSLog(@"Could not open gorm GormFontView"); return nil; } [[NSFontManager sharedFontManager] setDelegate: self]; } return self; } - (NSFont *) convertFont: (NSFont *)aFont { float size; NSFont *font; // If aFont isn't nil and the button is off then set the size // to the size of the passed in font. size = (aFont && [encodeButton state] == NSOffState) ? [aFont pointSize] : 0.0; switch([fontSelector indexOfSelectedItem]) { default: case 0: // selected font font = (aFont) ? aFont : [[NSFontManager sharedFontManager] selectedFont]; if (!font) font = [NSFont userFontOfSize: size]; break; case 1: // bold system font font = [NSFont boldSystemFontOfSize: size]; break; case 2: // system font font = [NSFont systemFontOfSize: size]; break; case 3: // user fixed font font = [NSFont userFixedPitchFontOfSize: size]; break; case 4: // user font font = [NSFont userFontOfSize: size]; break; case 5: // title bar font font = [NSFont titleBarFontOfSize: size]; break; case 6: // menu font font = [NSFont menuFontOfSize: size]; break; case 7: // message font font = [NSFont messageFontOfSize: size]; break; case 8: // palette font font = [NSFont paletteFontOfSize: size]; break; case 9: // tooltops font font = [NSFont toolTipsFontOfSize: size]; break; case 10: // control content font font = [NSFont controlContentFontOfSize: size]; break; case 11: font = [NSFont labelFontOfSize: size]; break; } return font; } - (void) selectFont: (id)sender { NSFontManager *fontManager = [NSFontManager sharedFontManager]; NSFont *font; font = [self convertFont: nil]; [fontManager setSelectedFont: font isMultiple: NO]; if ([fontSelector indexOfSelectedItem] == 0) { [encodeButton setEnabled: NO]; [encodeButton setState: NSOffState]; } else { [encodeButton setEnabled: YES]; [encodeButton setState: NSOffState]; } } - (id) view { return view; } - (void) mouseDragged: (NSEvent *)event { // here to make certain we don't crash.. } - (void) flagsChanged: (NSEvent *)event { // here to make certain we don't crash.. } @end apps-gorm-gorm-1_5_0/GormCore/GormFunctions.h000066400000000000000000000047001475375552500212340ustar00rootroot00000000000000/* GormFunctions.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormFunctions_h #define INCLUDED_GormFunctions_h #import #import // find all subitems for the given items... void findAllWithArray(id item, NSMutableArray *array); // find all sub items for the selections... NSArray* findAllSubmenus(NSArray *array); // find all items in the menu... NSArray* findAll(NSMenu *menu); // all subviews for the view provided void subviewsForView(NSView *view, NSMutableArray *array); // all subviews NSArray *allSubviews(NSView *view); // cut the file label to the appropriate length... NSString *cutFileLabelText(NSString *filename, id label, NSInteger length); // get the cell size for all editors NSSize defaultCellSize(); // color from string NSColor *colorFromDict(NSDictionary *colorString); // color to string NSDictionary *colorToDict(NSColor *color); // get the list of images... NSArray *systemImagesList(); // get the list of images... NSArray *systemSoundsList(); // compute the gorm version int appVersion(long a, long b, long c); // prompt for a class name. Used mainly for gmodel loading... NSString *promptForClassName(NSString *title, NSArray *classes); // format an identifier.. NSString *identifierString(NSString *str); // format an action.. NSString *formatAction(NSString *action); // format an outlet NSString *formatOutlet(NSString *outlet); // get information about class. NSArray *_GSObjCMethodNamesForClass(Class class, BOOL collect); NSArray *_GSObjCVariableNames(Class class, BOOL collect); NSRect minimalContainerFrame(NSArray *views); #endif apps-gorm-gorm-1_5_0/GormCore/GormFunctions.m000066400000000000000000000234151475375552500212450ustar00rootroot00000000000000/* GormFunctions.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormFunctions.h" #include "GormViewEditor.h" #include "GormClassPanelController.h" // find all subitems for the given items... void findAllWithArray(id item, NSMutableArray *array) { [array addObject: item]; if([item isKindOfClass: [NSMenuItem class]]) { if([item hasSubmenu]) { NSMenu *submenu = [item submenu]; NSArray *items = [submenu itemArray]; NSEnumerator *e = [items objectEnumerator]; id i = nil; [array addObject: submenu]; while((i = [e nextObject]) != nil) { findAllWithArray(i, array); } } } } // find all sub items for the selections... NSArray* findAllSubmenus(NSArray *array) { NSEnumerator *e = [array objectEnumerator]; id i = nil; NSMutableArray *results = [[NSMutableArray alloc] init]; while((i = [e nextObject]) != nil) { findAllWithArray(i, results); } return results; } NSArray* findAll(NSMenu *menu) { NSArray *items = [menu itemArray]; return findAllSubmenus(items); } void subviewsForView(NSView *view, NSMutableArray *array) { if(view != nil) { NSArray *subviews = [view subviews]; NSEnumerator *en = [subviews objectEnumerator]; NSView *aView = nil; // if it's not me and it's not and editor, include it in the list of // things to be deleted from the document. if(![view isKindOfClass: [GormViewEditor class]]) { [array addObject: view]; } while((aView = [en nextObject]) != nil) { subviewsForView( aView, array ); } } } NSArray *allSubviews(NSView *view) { NSMutableArray *views = [NSMutableArray array]; subviewsForView( view, views ); [views removeObject: view]; return views; } // cut the text... code taken from GWorkspace, by Enrico Sersale static inline NSString *cutText(NSString *filename, id label, NSInteger lenght) { NSString *cutname = nil; NSString *reststr = nil; NSString *dots; NSFont *labfont; NSDictionary *attr; float w, cw, dotslenght; NSInteger i; cw = 0; labfont = [label font]; attr = [NSDictionary dictionaryWithObjectsAndKeys: labfont, NSFontAttributeName, nil]; dots = @"..."; dotslenght = [dots sizeWithAttributes: attr].width; w = [filename sizeWithAttributes: attr].width; if (w > lenght) { i = 0; while (cw <= (lenght - dotslenght)) { if (i == [filename cStringLength]) { break; } cutname = [filename substringToIndex: i]; reststr = [filename substringFromIndex: i]; cw = [cutname sizeWithAttributes: attr].width; i++; } if ([cutname isEqual: filename] == NO) { if ([reststr cStringLength] <= 3) { return filename; } else { cutname = [cutname stringByAppendingString: dots]; } } else { return filename; } } else { return filename; } return cutname; } NSString *cutFileLabelText(NSString *filename, id label, NSInteger length) { if (length > 0) { return cutText(filename, label, length); } return filename; } NSSize defaultCellSize() { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSInteger width = [defaults integerForKey: @"CellSizeWidth"]; NSSize size = NSMakeSize(width, 72); return size; } NSColor *colorFromDict(NSDictionary *dict) { if(dict != nil) { return [NSColor colorWithCalibratedRed: [[dict objectForKey: @"red"] floatValue] green: [[dict objectForKey: @"green"] floatValue] blue: [[dict objectForKey: @"blue"] floatValue] alpha: [[dict objectForKey: @"alpha"] floatValue]]; } return nil; } NSDictionary *colorToDict(NSColor *color) { if(color != nil) { NSMutableDictionary *dict = [NSMutableDictionary dictionary]; CGFloat red, green, blue, alpha; NSNumber *fred = nil; NSNumber *fgreen = nil; NSNumber *fblue = nil; NSNumber *falpha = nil; [color getRed: &red green: &green blue: &blue alpha: &alpha]; fred = [NSNumber numberWithFloat: red]; fgreen = [NSNumber numberWithFloat: green]; fblue = [NSNumber numberWithFloat: blue]; falpha = [NSNumber numberWithFloat: alpha]; [dict setObject: fred forKey: @"red"]; [dict setObject: fgreen forKey: @"green"]; [dict setObject: fblue forKey: @"blue"]; [dict setObject: falpha forKey: @"alpha"]; return dict; } return nil; } NSArray *systemImagesList() { NSString *lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSSystemDomainMask, YES) lastObject]; NSString *path = [lib stringByAppendingPathComponent: @"Images"]; NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath: path]; NSEnumerator *en = [contents objectEnumerator]; NSMutableArray *result = [NSMutableArray array]; id obj; NSArray *fileTypes = [NSImage imageFileTypes]; while((obj = [en nextObject]) != nil) { if([fileTypes containsObject: [obj pathExtension]]) { NSString *pathString = [path stringByAppendingPathComponent: obj]; [result addObject: pathString]; } } return result; } NSArray *systemSoundsList() { NSString *lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSSystemDomainMask, YES) lastObject]; NSString *path = [lib stringByAppendingPathComponent: @"Sounds"]; NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath: path]; NSEnumerator *en = [contents objectEnumerator]; NSMutableArray *result = [NSMutableArray array]; id obj; NSArray *fileTypes = [NSSound soundUnfilteredFileTypes]; while((obj = [en nextObject]) != nil) { if([fileTypes containsObject: [obj pathExtension]]) { NSString *pathString = [path stringByAppendingPathComponent: obj]; [result addObject: pathString]; } } return result; } int appVersion(long a, long b, long c) { return (((a) << 16)+((b) << 8) + (c)); } NSString *promptForClassName(NSString *title, NSArray *classes) { GormClassPanelController *cpc = AUTORELEASE([[GormClassPanelController alloc] initWithTitle: title classList: classes]); return [cpc runModal]; } NSString *identifierString(NSString *str) { NSCharacterSet *illegal = [[NSCharacterSet characterSetWithCharactersInString: @"_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"] invertedSet]; NSCharacterSet *numeric = [NSCharacterSet characterSetWithCharactersInString: @"0123456789"]; NSCharacterSet *white = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSRange r; NSMutableString *result; if (str == nil) { return nil; } result = [NSMutableString stringWithString: str]; r = [result rangeOfCharacterFromSet: illegal]; while (r.length > 0) { [result deleteCharactersInRange: r]; r = [result rangeOfCharacterFromSet: illegal]; } r = [result rangeOfCharacterFromSet: numeric]; while (r.length > 0 && r.location == 0) { [result deleteCharactersInRange: r]; r = [result rangeOfCharacterFromSet: numeric]; } r = [result rangeOfCharacterFromSet: white]; while (r.length > 0 && r.location == 0) { [result deleteCharactersInRange: r]; r = [result rangeOfCharacterFromSet: white]; } // check the result's length. if([result length] == 0) { result = [@"dummyIdentifier" mutableCopy]; } return result; } NSString *formatAction(NSString *action) { NSString *temp = identifierString(action); NSString *identifier = [temp stringByAppendingString: @":"]; return identifier; } NSString *formatOutlet(NSString *outlet) { NSString *identifier = identifierString(outlet); return identifier; } /** * This method returns an array listing the names of all the * instance methods available to obj, whether they * belong to the class of obj or one of its superclasses.
* If obj is a class, this returns the class methods.
* Returns nil if obj is nil. */ NSArray *_GSObjCMethodNamesForClass(Class class, BOOL collect) { if (class == nil) { return nil; } return GSObjCMethodNames((id)&class, collect); } /** * This method returns an array listing the names of all the * instance variables present in the instance obj, whether they * belong to the class of obj or one of its superclasses.
* Returns nil if obj is nil. */ NSArray *_GSObjCVariableNames(Class class, BOOL collect) { if (class == nil) { return nil; } return GSObjCVariableNames((id)&class, collect); } NSRect minimalContainerFrame(NSArray *views) { NSEnumerator *en = [views objectEnumerator]; id o = nil; float w = 0.0; float h = 0.0; while((o = [en nextObject]) != nil) { NSRect frame = [o frame]; float nw = frame.origin.x + frame.size.width; float nh = frame.origin.y + frame.size.height; if(nw > w) w = nw; if(nh > h) h = nh; } return NSMakeRect(0,0,w,h); } apps-gorm-gorm-1_5_0/GormCore/GormGeneralPref.h000066400000000000000000000010371475375552500214560ustar00rootroot00000000000000#ifndef INCLUDED_GormGeneralPref_h #define INCLUDED_GormGeneralPref_h #include #include @interface GormGeneralPref : NSObject { id window; id backupButton; id interfaceMatrix; id checkConsistency; id _view; } /** * View to be shown. */ - (NSView *) view; /** * Should create a backup file. */ - (void) backupAction: (id)sender; /** * Show the classes view as a browser or an outline. */ - (void) classesAction: (id)sender; - (void) consistencyAction: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormGeneralPref.m000066400000000000000000000063351475375552500214710ustar00rootroot00000000000000/* GormGeneralPref.m * * Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003, 2004, 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormGeneralPref.h" static NSString *BACKUPFILE=@"BackupFile"; static NSString *INTTYPE=@"ClassViewType"; static NSString *REPAIRFILE=@"GormRepairFileOnLoad"; @implementation GormGeneralPref - (id) init { _view = nil; self = [super init]; if ( ! [NSBundle loadNibNamed:@"GormPrefGeneral" owner:self] ) { NSLog(@"Can not load bundle GormPrefGeneral"); return nil; } _view = [[window contentView] retain]; //Defaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *intType = [defaults stringForKey: INTTYPE]; [backupButton setState: [defaults integerForKey: BACKUPFILE]]; // [checkConsistency setState: ([defaults boolForKey: REPAIRFILE]?NSOnState:NSOffState)]; // set the interface matrix... if([intType isEqual: @"Outline"]) { [interfaceMatrix setState: NSOnState atRow: 0 column: 0]; [interfaceMatrix setState: NSOffState atRow: 1 column: 0]; } else if([intType isEqual: @"Browser"]) { [interfaceMatrix setState: NSOffState atRow: 0 column: 0]; [interfaceMatrix setState: NSOnState atRow: 1 column: 0]; } } return self; } - (void) dealloc { TEST_RELEASE(_view); [super dealloc]; } - (NSView *) view { return _view; } - (void) backupAction: (id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setInteger:[backupButton state] forKey:BACKUPFILE]; } - (void) classesAction: (id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; if([[interfaceMatrix cellAtRow: 0 column: 0] state] == NSOnState) { [defaults setObject: @"Outline" forKey: INTTYPE]; } else if([[interfaceMatrix cellAtRow: 1 column: 0] state] == NSOnState) { [defaults setObject: @"Browser" forKey: INTTYPE]; } // let the world know it's changed. // [nc postNotificationName: GormSwitchViewPreferencesNotification // object: nil]; } - (void) consistencyAction: (id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool: (([checkConsistency state] == NSOnState)?YES:NO) forKey: REPAIRFILE]; } @end apps-gorm-gorm-1_5_0/GormCore/GormGenericEditor.h000066400000000000000000000055311475375552500220120ustar00rootroot00000000000000/* GormGenericEditor.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2003, 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormGenericEditor_h #define INCLUDED_GormGenericEditor_h #include #include #include @interface GormGenericEditor : NSMatrix { NSMutableArray *objects; id document; id selected; NSPasteboard *dragPb; NSString *dragType; BOOL closed; BOOL activated; IBResourceManager *resourceManager; } // class methods... + (id) editorForDocument: (id)aDocument; + (void) setEditor: (id)editor forDocument: (id)aDocument; // selection methods... - (void) selectObjects: (NSArray*)objects; - (BOOL) wantsSelection; - (void) copySelection; - (void) deleteSelection; - (void) pasteInSelection; - (void) refreshCells; - (void) closeSubeditors; - (NSWindow*) window; - (void) addObject: (id)anObject; - (void) refreshCells; - (void) removeObject: (id)anObject; - (BOOL) activate; - (id) initWithObject: (id)anObject inDocument: (id)aDocument; - (void) close; - (void) closeSubeditors; - (BOOL) containsObject: (id)anObject; - (void) copySelection; - (void) deleteSelection; - (id) document; - (id) editedObject; - (id) openSubeditorForObject: (id)anObject; - (void) orderFront; - (void) pasteInSelection; - (NSRect) rectForObject: (id)anObject; - (NSArray *) objects; - (BOOL) isOpened; - (NSArray *) fileTypes; @end // private methods... @interface GormGenericEditor (PrivateMethods) - (void) willCloseDocument: (NSNotification *) aNotification; - (void) groupSelectionInScrollView; - (void) groupSelectionInSplitView; - (void) groupSelectionInBox; - (void) groupSelectionInView; - (void) groupSelectionInMatrix; - (void) ungroup; - (void) setEditor: (id)anEditor forDocument: (id)doc; - (id) changeSelection: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormGenericEditor.m000066400000000000000000000175171475375552500220260ustar00rootroot00000000000000/* GormGenericEditor.m * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Author: Gregory John Casamento * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include "GormGenericEditor.h" @implementation GormGenericEditor + (id) editorForDocument: (id)aDocument { // does nothing here, the subclass must define this. return nil; } - (id) editorForDocument: (id)aDocument { return [[self class] editorForDocument: aDocument]; } + (void) setEditor: (id)editor forDocument: (id)aDocument { // does nothing, defined by subclass. } - (void) setEditor: (id)editor forDocument: (id)aDocument { [[self class] setEditor: editor forDocument: aDocument]; } - (BOOL) acceptsFirstMouse: (NSEvent*)theEvent { return YES; /* Ensure we get initial mouse down event. */ } - (BOOL) activate { activated = YES; [[self window] makeKeyAndOrderFront: self]; return YES; } - (void) addObject: (id)anObject { if (anObject != nil && [objects indexOfObjectIdenticalTo: anObject] == NSNotFound) { [objects addObject: anObject]; [self refreshCells]; } } - (void) mouseDown: (NSEvent*)theEvent { if ([theEvent modifierFlags] & NSControlKeyMask) { NSPoint loc = [theEvent locationInWindow]; NSInteger r = 0, c = 0; int pos = 0; id obj = nil; loc = [self convertPoint: loc fromView: nil]; [self getRow: &r column: &c forPoint: loc]; pos = r * [self numberOfColumns] + c; if (pos >= 0 && pos < [objects count]) { obj = [objects objectAtIndex: pos]; } if (obj != nil && obj != selected) { [self selectObjects: [NSArray arrayWithObject: obj]]; [self makeSelectionVisible: YES]; } } [super mouseDown: theEvent]; } - (id) changeSelection: (id)sender { int row = [self selectedRow]; int col = [self selectedColumn]; int index = row * [self numberOfColumns] + col; id obj = nil; if (index >= 0 && index < [objects count]) { obj = [objects objectAtIndex: index]; [self selectObjects: [NSArray arrayWithObject: obj]]; } return obj; } - (BOOL) containsObject: (id)object { if ([objects indexOfObjectIdenticalTo: object] == NSNotFound) return NO; return YES; } - (void) willCloseDocument: (NSNotification *)aNotification { document = nil; } - (void) close { if(closed == NO) { closed = YES; [document editor: self didCloseForObject: [self editedObject]]; [self deactivate]; [self closeSubeditors]; } } // Stubbed out methods... Since this is an abstract class, some methods need to be // provided so that compilation will occur cleanly and to give a warning if called. - (void) closeSubeditors { } - (void) resetObject: (id)object { } - (id) initWithObject: (id)anObject inDocument: (id)aDocument { if((self = [super init]) != nil) { /* don't retain the document... */ document = aDocument; closed = NO; activated = NO; resourceManager = nil; /* since we don't retain the document handle its close notifications */ [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(willCloseDocument:) name: IBWillCloseDocumentNotification object: document]; } return self; } - (BOOL) acceptsTypeFromArray: (NSArray*)types { return NO; } - (void) makeSelectionVisible: (BOOL)flag { } - (void) deactivate { activated = NO; } - (void) copySelection { } - (void) pasteInSelection { } // end of stubbed methods... - (void) dealloc { if(closed == NO) [self close]; // The resource manager is a weak connection and is not retained, // no need to release it here. RELEASE(objects); // Remove self from any and all notifications. [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc]; } - (void) deleteSelection { if (selected != nil) { [document detachObject: selected]; [objects removeObjectIdenticalTo: selected]; [self selectObjects: [NSArray array]]; [self refreshCells]; } } - (id) document { return document; } - (id) editedObject { return selected; } - (id) openSubeditorForObject: (id)anObject { return nil; } - (void) orderFront { [[self window] orderFront: self]; } /* * Return the rectangle in which an objects image will be displayed. * (use window coordinates) */ - (NSRect) rectForObject: (id)anObject { NSUInteger pos = [objects indexOfObjectIdenticalTo: anObject]; NSRect rect; int r; int c; if (pos == NSNotFound) return NSZeroRect; r = pos / [self numberOfColumns]; c = pos % [self numberOfColumns]; rect = [self cellFrameAtRow: r column: c]; /* * Adjust to image area. */ rect.size.height -= 15; rect = [self convertRect: rect toView: nil]; return rect; } - (void) refreshCells { NSUInteger count = [objects count]; NSUInteger index = 0; int cols = 0; int rows = 0; int width = 0; if ([self superview]) width = [[self superview] bounds].size.width; while (width >= 72) { width -= (72 + 8); cols++; } if (cols == 0) { cols = 1; } rows = count / cols; if (rows == 0 || rows * cols != count) { rows++; } [self renewRows: rows columns: cols]; for (index = 0; index < count; index++) { id obj = [objects objectAtIndex: index]; NSButtonCell *but = [self cellAtRow: index/cols column: index%cols]; [but setImage: [obj imageForViewer]]; [but setTitle: [document nameForObject: obj]]; [but setShowsStateBy: NSChangeGrayCellMask]; [but setHighlightsBy: NSChangeGrayCellMask]; } while (index < rows * cols) { NSButtonCell *but = [self cellAtRow: index/cols column: index%cols]; [but setImage: nil]; [but setTitle: @""]; [but setShowsStateBy: NSNoCellMask]; [but setHighlightsBy: NSNoCellMask]; index++; } [self setIntercellSpacing: NSMakeSize(8,8)]; [self sizeToCells]; [self setNeedsDisplay: YES]; } - (void) removeObject: (id)anObject { NSUInteger pos; pos = [objects indexOfObjectIdenticalTo: anObject]; if (pos == NSNotFound) { return; } [objects removeObjectAtIndex: pos]; [self refreshCells]; } - (void) resizeWithOldSuperviewSize: (NSSize)oldSize { [self refreshCells]; } - (NSArray*) selection { if (selected == nil) return [NSArray array]; else return [NSArray arrayWithObject: selected]; } - (NSUInteger) selectionCount { return (selected == nil) ? 0 : 1; } - (BOOL) wantsSelection { return NO; } - (NSWindow*) window { return [super window]; } - (void) selectObjects: (NSArray*)anArray { id obj = [anArray lastObject]; selected = obj; [document setSelectionFromEditor: self]; [self makeSelectionVisible: YES]; } - (NSArray *) objects { return objects; } - (BOOL) isOpened { return (closed == NO); } // stubs for protocol methods not implemented in this editor. - (void) validateEditing { // does nothing. } - (void) drawSelection { // does nothing. } - (NSArray *)fileTypes { return nil; } @end apps-gorm-gorm-1_5_0/GormCore/GormGuidelinePref.h000066400000000000000000000026541475375552500220140ustar00rootroot00000000000000/* GormGuidelinePref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2003, 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormGuidelinePref_h #define INCLUDED_GormGuidelinePref_h #include #include @class NSWindow; @interface GormGuidelinePref : NSObject { NSWindow *window; id _view; id spacingSlider; id currentSpacing; id halfSpacing; id colorWell; } /** * View to show in prefs panel. */ - (NSView *) view; /** * Called when the guidline preferences are changed. */ - (void)ok: (id)sender; /** * Reset to defaults. */ - (void)reset: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormGuidelinePref.m000066400000000000000000000033001475375552500220060ustar00rootroot00000000000000 #include #include #include #include "GormGuidelinePref.h" @implementation GormGuidelinePref - (id) init { if((self = [super init]) != nil) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; int spacing = [defaults integerForKey: @"GuideSpacing"]; NSColor *aColor = colorFromDict([defaults objectForKey: @"GuideColor"]); // default the color to something, if nothing is returned. if(aColor == nil) { aColor = [NSColor redColor]; } if ( [NSBundle loadNibNamed:@"GormPrefGuideline" owner:self] == NO ) { NSLog(@"Can not load bundle GormPrefGuideline"); return nil; } [colorWell setColor: aColor]; [spacingSlider setIntValue: spacing]; [currentSpacing setIntValue: spacing]; [halfSpacing setIntValue: spacing/2]; _view = [[window contentView] retain]; } return self; } - (void) dealloc { TEST_RELEASE(_view); [super dealloc]; } -(NSView *) view { return _view; } - (void) ok: (id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if(sender == spacingSlider) { int spacing = [spacingSlider intValue]; [currentSpacing setIntValue: spacing]; [halfSpacing setIntValue: spacing/2]; [defaults setInteger: spacing forKey: @"GuideSpacing"]; } else if(sender == colorWell) { NSColor *color = [colorWell color]; [defaults setObject: colorToDict(color) forKey: @"GuideColor"]; } } - (void) reset: (id)sender { [spacingSlider setIntValue: 10]; [colorWell setColor: [NSColor redColor]]; [self ok: spacingSlider]; [self ok: colorWell]; } @end apps-gorm-gorm-1_5_0/GormCore/GormHeadersPref.h000066400000000000000000000011041475375552500214470ustar00rootroot00000000000000#ifndef INCLUDED_GormHeadersPref_h #define INCLUDED_GormHeadersPref_h #include #include @interface GormHeadersPref : NSObject { id preloadButton; id table; id addButton; id removeButton; id window; id _view; NSMutableArray *headers; } /** * View to show in prefs panel. */ - (NSView *) view; /** * Add a header. */ - (void) addAction: (id)sender; /** * Remove a header. */ - (void) removeAction: (id)sender; /** * Called when the "preload" switch is set. */ - (void) preloadAction: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormHeadersPref.m000066400000000000000000000055461475375552500214720ustar00rootroot00000000000000 #include #include #include "GormHeadersPref.h" // data source... @interface HeaderDataSource : NSObject @end @implementation HeaderDataSource - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *list = [defaults objectForKey: @"HeaderList"]; return [list count]; } - (id) tableView: (NSTableView *)tv objectValueForTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *list = [defaults objectForKey: @"HeaderList"]; id value = nil; // NSFontAttributeName if([list count] > 0) { value = [[list objectAtIndex: rowIndex] lastPathComponent]; } return value; } @end @implementation GormHeadersPref - (id) init { _view = nil; self = [super init]; if ( ! [NSBundle loadNibNamed:@"GormPrefHeaders" owner:self] ) { NSLog(@"Can not load bundle GormPrefHeaders"); return nil; } _view = [[window contentView] retain]; return self; } - (void) dealloc { TEST_RELEASE(_view); [super dealloc]; } -(NSView *) view { return _view; } - (void) addAction: (id)sender { NSArray *fileTypes = [NSArray arrayWithObjects: @"h", @"H", nil]; NSOpenPanel *openPanel = [NSOpenPanel openPanel]; int result; [openPanel setAllowsMultipleSelection: YES]; [openPanel setCanChooseFiles: YES]; [openPanel setCanChooseDirectories: NO]; result = [openPanel runModalForDirectory: nil file: nil types: fileTypes]; if (result == NSOKButton) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *list = [defaults objectForKey: @"HeaderList"]; [list addObjectsFromArray: [openPanel filenames]]; [defaults setObject: list forKey: @"HeaderList"]; [table reloadData]; } } - (void) removeAction: (id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *list = [defaults objectForKey: @"HeaderList"]; int row = [table selectedRow]; if(row >= 0) { NSString *stringValue = [list objectAtIndex: row]; if(stringValue != nil) { [list removeObject: stringValue]; [table reloadData]; } } } - (void) preloadAction: (id)sender { if (sender != preloadButton) { return; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool: ([preloadButton state] == NSOnState?YES:NO) forKey:@"PreloadHeaders"]; } } - (BOOL) tableView: (NSTableView *)tableView shouldEditTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { BOOL result = NO; return result; } - (BOOL) tableView: (NSTableView *)tv shouldSelectRow: (NSInteger)rowIndex { BOOL result = YES; return result; } @end apps-gorm-gorm-1_5_0/GormCore/GormHelpInspector.h000066400000000000000000000002511475375552500220400ustar00rootroot00000000000000/* All Rights reserved */ #include #include @interface GormHelpInspector : IBInspector { id toolTip; } @end apps-gorm-gorm-1_5_0/GormCore/GormHelpInspector.m000066400000000000000000000036241475375552500220540ustar00rootroot00000000000000/* All rights reserved */ #include #include #include "GormHelpInspector.h" @implementation GormHelpInspector - (id) init { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if ([super init] == nil) { return nil; } if ([bundle loadNibNamed: @"GormHelpInspector" owner: self topLevelObjects: NULL] == NO) { NSLog(@"Could not gorm GormHelpInspector"); return nil; } return self; } - (void) ok: (id)sender { id document = [(id)[NSApp delegate] activeDocument]; NSArray *cons = [document connectorsForDestination: object ofClass: [NSIBHelpConnector class]]; NSIBHelpConnector *con = nil; if([cons count] > 0) { NSEnumerator *en = [cons objectEnumerator]; NSString *val = [sender stringValue]; if([val isEqualToString: @""] == NO) { while((con = [en nextObject]) != nil) { [con setMarker: [sender stringValue]]; } } else { while((con = [en nextObject]) != nil) { [document removeConnector: con]; } } } else { con = [[NSIBHelpConnector alloc] init]; [con setFile: @"NSToolTipHelpKey"]; [con setMarker: [sender stringValue]]; [con setDestination: object]; [document addConnector: con]; } [super ok: sender]; } - (void) revert: (id)sender { id document = [(id)[NSApp delegate] activeDocument]; NSArray *cons = [document connectorsForDestination: object ofClass: [NSIBHelpConnector class]]; if([cons count] > 0) { NSIBHelpConnector *con = [cons objectAtIndex: 0]; NSString *val = [con marker]; [toolTip setStringValue: val]; } else { [toolTip setStringValue: @""]; } [super revert: sender]; } -(void) controlTextDidChange:(NSNotification *)aNotification { [self ok: [aNotification object]]; } @end apps-gorm-gorm-1_5_0/GormCore/GormImage.h000066400000000000000000000044251475375552500203120ustar00rootroot00000000000000/** GormImage This class is a placeholder for a real image. Copyright (C) 2001 Free Software Foundation, Inc. Author: Gregory John Casamento Date: Dec 2004 This file is part of the GNUstep GUI Library. 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 3 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. */ #ifndef INCLUDED_GormImage_h #define INCLUDED_GormImage_h #include #include @class NSString, NSImage; @interface GormImage : GormResource { NSImage *image; NSImage *smallImage; } /** * Initialize with image data located at path. */ + (GormImage *) imageForPath: (NSString *)path; /** * Initialize with image data located at path. Mark it as in the * wrapper depending on the value of flag. */ + (GormImage *) imageForPath: (NSString *)path inWrapper: (BOOL)flag; /** * Initialize with image data. Mark it as in the * wrapper depending on the value of flag. */ + (GormImage*)imageForData: (NSData *)aData withFileName: (NSString *)aName inWrapper: (BOOL)flag; /** * A thumbnail of the image. */ - (NSImage *)image; /** * The full sized image. */ - (NSImage *)normalImage; @end /* * A category which will allow us to set whether or not * an image is archived by reference, or directly. */ @interface NSImage (GormNSImageAddition) /** * Set to YES, if the image should be archived by name only, NO otherwise. */ - (void) setArchiveByName: (BOOL) archiveByName; /** * Returns YES, if the image should be archived by name only, NO otherwise. */ - (BOOL) archiveByName; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormImage.m000066400000000000000000000102031475375552500203060ustar00rootroot00000000000000/* GormImageEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormImage.h" // implementation of category on NSImage. @implementation NSImage (GormNSImageAddition) - (void) setArchiveByName: (BOOL) archiveByName { _flags.archiveByName = archiveByName; } - (BOOL) archiveByName { return _flags.archiveByName; } @end // image proxy object... @implementation GormImage + (GormImage*)imageForPath: (NSString *)aPath { return [GormImage imageForPath: aPath inWrapper: NO]; } + (GormImage*)imageForPath: (NSString *)aPath inWrapper: (BOOL)flag { return AUTORELEASE([[GormImage alloc] initWithPath: aPath inWrapper: flag]); } + (GormImage*)imageForData: (NSData *)aData withFileName: (NSString *)aName inWrapper: (BOOL)flag { return AUTORELEASE([[GormImage alloc] initWithData: aData withFileName: aName inWrapper: flag]); } - (void) _resizeSmallImage { NSSize originalSize; CGFloat ratioH; CGFloat ratioW; originalSize = [smallImage size]; ratioW = originalSize.width / 70; ratioH = originalSize.height / 55; if (ratioH > 1 || ratioW > 1) { [smallImage setScalesWhenResized: YES]; if (ratioH > ratioW) { [smallImage setSize: NSMakeSize(originalSize.width / ratioH, 55)]; } else { [smallImage setSize: NSMakeSize(70, originalSize.height / ratioW)]; } } } - (id) initWithData: (NSData *)aData withFileName: (NSString *)aName inWrapper: (BOOL)flag { if ((self = [super initWithData: aData withFileName: aName inWrapper: flag]) != nil) { // FIXME: Why not make one a copy of the other? image = [[NSImage alloc] initWithData: aData]; smallImage = [[NSImage alloc] initWithData: aData]; if (smallImage == nil) { RELEASE(self); return nil; } [image setName: aName]; // FIXME: Not needed [image setArchiveByName: NO]; [smallImage setArchiveByName: NO]; [self _resizeSmallImage]; } return self; } - (id) initWithName: (NSString *)aName path: (NSString *)aPath inWrapper: (BOOL)flag { if ((self = [super initWithName: aName path: aPath inWrapper: flag]) != nil) { image = [[NSImage alloc] initByReferencingFile: aPath]; smallImage = [[NSImage alloc] initWithContentsOfFile: aPath]; if (smallImage == nil) { RELEASE(self); return nil; } [image setName: aName]; [image setArchiveByName: NO]; [smallImage setArchiveByName: NO]; [self _resizeSmallImage]; } return self; } - (void) dealloc { RELEASE(image); RELEASE(smallImage); [super dealloc]; } - (NSImage *) normalImage { return image; } - (NSImage *) image { return smallImage; } - (void) setSystemResource: (BOOL)flag { [super setSystemResource: flag]; [image setArchiveByName: flag]; [smallImage setArchiveByName: flag]; } @end @implementation GormImage (IBObjectAdditions) - (NSString *)inspectorClassName { return @"GormImageInspector"; } - (NSString *) classInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString *) connectInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString *) objectNameForInspectorTitle { return @"Image"; } - (NSImage *) imageForViewer { return [self image]; } @end apps-gorm-gorm-1_5_0/GormCore/GormImageEditor.h000066400000000000000000000022221475375552500214520ustar00rootroot00000000000000/* GormImageEditor.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2003, 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormImageEditor_h #define INCLUDED_GormImageEditor_h #include "GormResourceEditor.h" @interface GormImageEditor : GormResourceEditor // + (GormImageEditor*) editorForDocument: (id)aDocument; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormImageEditor.m000066400000000000000000000070051475375552500214630ustar00rootroot00000000000000/* GormImageEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormImageEditor.h" #include "GormProtocol.h" #include "GormFunctions.h" #include "GormPalettesManager.h" #include "GormImage.h" @implementation GormImageEditor static NSMapTable *docMap = 0; + (void) initialize { if (self == [GormImageEditor class]) { docMap = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks, NSNonRetainedObjectMapValueCallBacks, 2); } } + (GormImageEditor*) editorForDocument: (id)aDocument { id editor = NSMapGet(docMap, (void*)aDocument); if (editor == nil) { editor = [[self alloc] initWithObject: nil inDocument: aDocument]; AUTORELEASE(editor); } return editor; } - (NSArray *) fileTypes { return [NSImage imageFileTypes]; } - (NSArray *)pbTypes { return [NSArray arrayWithObject: GormImagePboardType]; } - (NSString *) resourceType { return @"image"; } - (id) placeHolderWithPath: (NSString *)string { return [GormImage imageForPath: string]; } - (void) addSystemResources { NSMutableArray *list = [NSMutableArray array]; NSEnumerator *en; id obj; GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; // add all of the system objects... [list addObjectsFromArray: systemImagesList()]; [list addObjectsFromArray: [palettesManager importedImages]]; en = [list objectEnumerator]; while((obj = [en nextObject]) != nil) { GormImage *image = [GormImage imageForPath: obj]; [image setSystemResource: YES]; [self addObject: image]; } } /* * Initialisation - register to receive DnD with our own types. */ - (id) initWithObject: (id)anObject inDocument: (id)aDocument { id old = NSMapGet(docMap, (void*)aDocument); if (old != nil) { RELEASE(self); self = RETAIN(old); [self addObject: anObject]; return self; } if ((self = [super initWithObject: anObject inDocument: aDocument]) != nil) { NSMapInsert(docMap, (void*)aDocument, (void*)self); } return self; } - (void) dealloc { if(closed == NO) [self close]; // It is not necessary to call super dealloc here. // images are cached throughout the lifetime of the app. // Once loaded, they are in the cache permanently and // are release on app termination. // RELEASE(objects); NSDebugLog(@"Released image editor..."); // GSNOSUPERDEALLOC; [super dealloc]; } - (void) willCloseDocument: (NSNotification *)aNotification { NSMapRemove(docMap,document); [super willCloseDocument: aNotification]; } - (void) close { [super close]; NSMapRemove(docMap,document); } @end apps-gorm-gorm-1_5_0/GormCore/GormImageInspector.h000066400000000000000000000003441475375552500221750ustar00rootroot00000000000000/* All Rights reserved */ #include #include @interface GormImageInspector : IBInspector { id name; id imageView; id width; id height; id _currentImage; } @end apps-gorm-gorm-1_5_0/GormCore/GormImageInspector.m000066400000000000000000000026201475375552500222010ustar00rootroot00000000000000/* All rights reserved */ #include #include "GormImageInspector.h" #include "GormPrivate.h" #include "GormImage.h" @implementation GormImageInspector + (void) initialize { if (self == [GormImageInspector class]) { } } - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; // load the gui... if (![bundle loadNibNamed: @"GormImageInspector" owner: self topLevelObjects: NULL]) { NSLog(@"Could not open gorm GormImageInspector"); return nil; } else { [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNotification:) name: IBSelectionChangedNotification object: nil]; } } return self; } - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc]; } - (void) handleNotification: (NSNotification*)aNotification { } - (void) setObject: (id)anObject { NSImage *image = [anObject normalImage]; NSSize size = [image size]; [super setObject: anObject]; [imageView setImageAlignment: NSImageAlignCenter]; [imageView setImageFrameStyle: NSImageFrameGrayBezel]; [imageView setImageScaling: NSScaleNone]; [imageView setImage: [anObject image]]; [name setStringValue: [image name]]; [width setDoubleValue: size.width]; [height setDoubleValue: size.height]; } @end apps-gorm-gorm-1_5_0/GormCore/GormInspectorsManager.h000066400000000000000000000034141475375552500227110ustar00rootroot00000000000000/* GormInspectorsManager.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormInspectorsManager_h #define INCLUDED_GormInspectorsManager_h #include #include @class NSPanel; @class NSMutableDictionary; @class NSPopUpButton; @class NSView; @class NSBox; @class IBInspector; @interface GormInspectorsManager : IBInspectorManager { IBOutlet NSPanel *panel; NSMutableDictionary *cache; IBOutlet NSPopUpButton *popup; IBOutlet NSBox *selectionView; IBOutlet NSBox *inspectorView; NSView *buttonView; NSString *oldInspector; IBOutlet IBInspector *inspector; int current; BOOL hiddenDuringTest; NSRect origFrame; } - (NSPanel*) panel; - (void) setClassInspector; - (void) setCurrentInspector: (id)anObject; - (void) updateSelection; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormInspectorsManager.m000066400000000000000000000306541475375552500227240ustar00rootroot00000000000000/* GormInspectorsManager.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormPrivate.h" #include "GormImage.h" #include "GormSound.h" #define NUM_DEFAULT_INSPECTORS 5 @interface GormDummyInspector : IBInspector { NSButton *button; } - (NSString *)title; @end @implementation GormDummyInspector - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if([bundle loadNibNamed: @"GormDummyInspector" owner: self topLevelObjects: NULL]) { [button setStringValue: [self title]]; } } return self; } - (NSString *)title { return nil; } @end; /* * The GormEmptyInspector is a placeholder for an empty selection. */ @interface GormEmptyInspector : GormDummyInspector @end @implementation GormEmptyInspector - (NSString *)title { return _(@"Empty Selection"); } @end /* * The GormMultipleInspector is a placeholder for a multiple selection. */ @interface GormMultipleInspector : GormDummyInspector @end @implementation GormMultipleInspector - (NSString *)title { return _(@"Multiple Selection"); } @end /* * The GormNotApplicableInspector is a uitility for odd objects. */ @interface GormNotApplicableInspector : GormDummyInspector @end @implementation GormNotApplicableInspector - (NSString *)title { return _(@"Not Applicable"); } @end @implementation GormInspectorsManager - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE(oldInspector); RELEASE(cache); RELEASE(panel); [super dealloc]; } - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if ([name isEqual: IBWillBeginTestingInterfaceNotification] == YES) { if ([panel isVisible] == YES) { hiddenDuringTest = YES; [panel orderOut: self]; } } else if ([name isEqual: IBWillEndTestingInterfaceNotification] == YES) { if (hiddenDuringTest == YES) { hiddenDuringTest = NO; [panel orderFront: self]; } } } - (id) init { if((self = [super init]) != nil) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; if([NSBundle loadNibNamed: @"GormInspectorPanel" owner: self]) { // initialized the cache... cache = [[NSMutableDictionary alloc] init]; // set the name under which this panel saves it's dimensions. [panel setFrameUsingName: @"Inspector"]; [panel setFrameAutosaveName: @"Inspector"]; // reset current tag indicator. current = -1; inspector = [[GormEmptyInspector alloc] init]; [cache setObject: inspector forKey: @"GormEmptyInspector"]; RELEASE(inspector); inspector = [[GormMultipleInspector alloc] init]; [cache setObject: inspector forKey: @"GormMultipleInspector"]; DESTROY(inspector); [self setCurrentInspector: 0]; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillBeginTestingInterfaceNotification object: nil]; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillEndTestingInterfaceNotification object: nil]; } } return self; } - (NSPanel*) panel { return panel; } - (void) updateSelection { if ([[NSApp delegate] isConnecting] == YES) { [popup selectItemAtIndex: 1]; [popup setNeedsDisplay: YES]; [panel makeKeyAndOrderFront: self]; current = 1; } else if (current >= [popup numberOfItems]) { current = 1; } [self setCurrentInspector: self]; } - (void) setClassInspector { current = 4; [self setCurrentInspector: self]; } - (void) _addDefaultModes { // remove all items... clear out current state [modes removeAllObjects]; currentMode = nil; // Attributes inspector... [self addInspectorModeWithIdentifier: @"AttributesInspector" forObject: selectedObject localizedLabel: _(@"Attributes") inspectorClassName: [selectedObject inspectorClassName] ordering: 0.0]; // Connection inspector... [self addInspectorModeWithIdentifier: @"ConnectionInspector" forObject: selectedObject localizedLabel: _(@"Connections") inspectorClassName: [selectedObject connectInspectorClassName] ordering: 1.0]; // Size inspector... [self addInspectorModeWithIdentifier: @"SizeInspector" forObject: selectedObject localizedLabel: _(@"Size") inspectorClassName: [selectedObject sizeInspectorClassName] ordering: 2.0]; // Help inspector... [self addInspectorModeWithIdentifier: @"HelpInspector" forObject: selectedObject localizedLabel: _(@"Help") inspectorClassName: [selectedObject helpInspectorClassName] ordering: 3.0]; // Custom class inspector... [self addInspectorModeWithIdentifier: @"CustomClassInspector" forObject: selectedObject localizedLabel: _(@"Custom Class") inspectorClassName: [selectedObject classInspectorClassName] ordering: 4.0]; } - (void) _refreshPopUp { NSEnumerator *en = [modes objectEnumerator]; NSInteger index = 0; id obj = nil; [[popup menu] setMenuChangedMessagesEnabled: NO]; [popup removeAllItems]; while((obj = [en nextObject]) != nil) { NSInteger tag = index + 1; NSMenuItem *item; [popup addItemWithTitle: [obj localizedLabel]]; item = (NSMenuItem *)[popup itemAtIndex: index]; [item setTarget: self]; [item setAction: @selector(setCurrentInspector:)]; [item setKeyEquivalent: [NSString stringWithFormat: @"%ld",(long)tag]]; [item setTag: tag]; index++; } [[popup menu] setMenuChangedMessagesEnabled: YES]; } - (void) setCurrentInspector: (id)anObj { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSArray *selection = [[(id)[NSApp delegate] selectionOwner] selection]; unsigned count = [selection count]; id obj = [selection lastObject]; id document = [(id)[NSApp delegate] activeDocument]; NSView *newView = nil; NSView *oldView = nil; NSString *newInspector = nil; NSInteger tag = 0; if (anObj != self) { tag = [anObj tag]; current = ((tag > 0)?(tag - 1):tag); } // reset current under certain conditions. if(current < 0) { current = 0; } NSDebugLog(@"current %i",current); // refresh object. selectedObject = obj; // remove any items beyond the original items on the list.. [self _addDefaultModes]; // inform the world that the object is about to be inspected. [nc postNotificationName: IBWillInspectObjectNotification object: obj]; // set key equivalent [self _refreshPopUp]; if([modes count] == NUM_DEFAULT_INSPECTORS) { if(current > (NUM_DEFAULT_INSPECTORS - 1)) { current = 0; } } if (count == 0) { newInspector = @"GormEmptyInspector"; } else if (count > 1) { newInspector = @"GormMultipleInspector"; } else { currentMode = [modes objectAtIndex: current]; newInspector = [currentMode inspectorClassName]; } /* * Set panel title for the type of object being inspected. */ if (selectedObject == nil) { [panel setTitle: _(@"Inspector")]; } else if([selectedObject isKindOfClass: [GormClassProxy class]]) { [panel setTitle: [NSString stringWithFormat: @"Class Edit Inspector:%@", [selectedObject className]]]; } else { NSString *newTitle = [selectedObject objectNameForInspectorTitle]; NSString *objName = [document nameForObject: selectedObject]; [panel setTitle: [NSString stringWithFormat:_(@"%@ (%@) Inspector"), newTitle,objName]]; } if (newInspector == nil) { newInspector = @"GormNotApplicableInspector"; } if ([oldInspector isEqual: newInspector] == NO) { id prevInspector = nil; /* * Return the inspector view to its original window and release the old * inspector. */ if(inspector != nil) { [[inspector okButton] removeFromSuperview]; [[inspector revertButton] removeFromSuperview]; } ASSIGN(oldInspector, newInspector); prevInspector = inspector; inspector = [cache objectForKey: newInspector]; if (inspector == nil) { Class c = NSClassFromString(newInspector); inspector = [[c alloc] init]; /* Try to gracefully handle an inspector creation error */ while (inspector == nil && (obj = [obj superclass]) && current == 0) { NSDebugLog(@"Error loading %@ inspector", newInspector); newInspector = [obj inspectorClassName]; inspector = [[NSClassFromString(newInspector) alloc] init]; } [cache setObject: inspector forKey: newInspector]; RELEASE(inspector); } oldView = [inspectorView contentView]; newView = [[inspector window] contentView]; if (newView != nil && newView != oldView) { id initialResponder = [[inspector window] initialFirstResponder]; NSView *outer = [panel contentView]; NSRect rect = [panel frame]; /* We should compute the delta between the heights of the old inspector view and the new one. The delta will be used to compute the size of the inspector panel. Is is needed because subsequent changes of object selection lead to the cluttered inspector's UI otherwise. */ CGFloat delta = [newView frame].size.height - [oldView frame].size.height; rect.size.height += delta; if (delta > 0) { rect.origin.y = [panel frame].origin.y - delta; [panel setFrame: rect display: YES]; } rect.size.width = [panel minSize].width; [panel setMinSize: rect.size]; rect = [outer bounds]; /* Set initialFirstResponder */ if (buttonView != nil) { [buttonView removeFromSuperview]; buttonView = nil; } rect.size.height = [newView frame].size.height; if ([inspector wantsButtons] == YES) { NSRect buttonsRect; NSRect bRect = NSMakeRect(0, 0, 60, 20); NSButton *ok; NSButton *revert; rect.size.height = [selectionView frame].origin.y; buttonsRect = NSMakeRect(0,0,rect.size.width,IVB); rect.origin.y += IVB; rect.size.height -= (IVB + 3); buttonView = [[NSView alloc] initWithFrame: buttonsRect]; [buttonView setAutoresizingMask: NSViewWidthSizable]; [outer addSubview: buttonView]; RELEASE(buttonView); ok = [inspector okButton]; if (ok != nil) { bRect = [ok frame]; bRect.origin.y = 10; bRect.origin.x = buttonsRect.size.width-10-bRect.size.width; [ok setFrame: bRect]; [buttonView addSubview: ok]; } revert = [inspector revertButton]; if (revert != nil) { bRect = [revert frame]; bRect.origin.y = 10; bRect.origin.x = 10; [revert setFrame: bRect]; [buttonView addSubview: revert]; } } else { rect.size.height = [newView frame].size.height; [buttonView removeFromSuperview]; } /* * Make the inspector view the correct size for the viewable panel, * and set the frame size for the new contents before adding them. */ // [inspectorView setFrame: rect]; // rect.origin = NSZeroPoint; // [newView setFrame: rect]; RETAIN(oldView); [inspectorView setContentView: newView]; [[prevInspector window] setContentView: oldView]; [outer setNeedsDisplay: YES]; RELEASE(oldView); /* Set the default First responder to the new View */ if ( initialResponder ) { [panel setInitialFirstResponder:initialResponder]; } } } // reset the popup.. [popup selectItemAtIndex: current]; // inspect the object. [inspector setObject: [currentMode object]]; } @end apps-gorm-gorm-1_5_0/GormCore/GormInternalViewEditor.h000066400000000000000000000022651475375552500230460ustar00rootroot00000000000000/* GormInternalViewEditor.h * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormInternalViewEditor_h #define INCLUDED_GormInternalViewEditor_h #include @interface GormInternalViewEditor: GormViewWithContentViewEditor { } - (NSArray*) destroyAndListSubviews; - (void) changeFont: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormInternalViewEditor.m000066400000000000000000000443221475375552500230530ustar00rootroot00000000000000/* GormInternalViewEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" #include "GormInternalViewEditor.h" #include "GormFontViewController.h" #include "GormViewKnobs.h" #include "GormDefines.h" @class GormEditorToParent; static NSImage *verticalImage; static NSImage *horizontalImage; @implementation NSView (IBObjectAdditions) - (NSString*) editorClassName { // using NSBox gets rid of compiler warning, should be safe for all classes. if ([self superview] && (([[self superview] respondsToSelector: @selector(contentView)] && [(NSBox *)[self superview] contentView] == self) || [[self superview] isKindOfClass: [NSTabView class]] || [[[self superview] window] contentView] == self || [[self superview] isKindOfClass: [NSClipView class]])) { return @"GormInternalViewEditor"; } else if ([self class] == [NSView class]) { return @"GormStandaloneViewEditor"; } else { return @"GormViewWithSubviewsEditor"; } } - (NSImage*) imageForViewer { static NSImage *image = nil; if (image == nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"GormView"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } - (NSString*) sizeInspectorClassName { return @"GormViewSizeInspector"; } - (NSString*) customClassInspector { return @"GormCustomClassInspector"; } @end @implementation GormInternalViewEditor + (void)initialize { horizontalImage = nil; verticalImage = nil; } - (void) dealloc { RELEASE(selection); [super dealloc]; } - (BOOL) activate { if (activated == NO) { NSEnumerator *enumerator; NSView *sub; id superview = [_editedObject superview]; [self setFrame: [_editedObject frame]]; [self setBounds: [self frame]]; if ([superview isKindOfClass: [NSBox class]]) { NSBox *boxSuperview = (NSBox *) superview; [boxSuperview setContentView: self]; } else if ([superview isKindOfClass: [NSTabView class]]) { NSTabView *tabSuperview = (NSTabView *) superview; [tabSuperview removeSubview: [[tabSuperview selectedTabViewItem] view]]; [[tabSuperview selectedTabViewItem] setView: self]; [tabSuperview addSubview: self]; [self setFrame: [tabSuperview contentRect]]; [self setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; } else if ([[superview window] contentView] == _editedObject) { [[superview window] setContentView: self]; } else if ([superview isKindOfClass: [NSClipView class]]) { [superview setDocumentView: self]; } [self addSubview: _editedObject]; [_editedObject setPostsFrameChangedNotifications: YES]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(editedObjectFrameDidChange:) name: NSViewFrameDidChangeNotification object: _editedObject]; [self setPostsFrameChangedNotifications: YES]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(frameDidChange:) name: NSViewFrameDidChangeNotification object: self]; parent = (GormViewWithSubviewsEditor *)[document parentEditorForEditor: self]; if ([parent isKindOfClass: [GormViewEditor class]]) [parent setNeedsDisplay: YES]; else [self setNeedsDisplay: YES]; activated = YES; enumerator = [[NSArray arrayWithArray: [_editedObject subviews]] objectEnumerator]; while ((sub = [enumerator nextObject]) != nil) { if ([sub isKindOfClass: [GormViewEditor class]] == NO) { [document editorForObject: sub inEditor: self create: YES]; } } return YES; } return NO; } - (void) deactivate { if (activated == YES) { id superview = [self superview]; // NSView *superview = [self superview]; [self deactivateSubeditors]; if ([superview isKindOfClass: [NSBox class]]) { NSBox *boxSuperview = (NSBox *) superview; [self removeSubview: _editedObject]; [boxSuperview setContentView: _editedObject]; } else if ([superview isKindOfClass: [NSTabView class]]) { NSTabView *tabSuperview = (NSTabView *) superview; [tabSuperview removeSubview: self]; [[tabSuperview selectedTabViewItem] setView: _editedObject]; [tabSuperview addSubview: [[tabSuperview selectedTabViewItem] view]]; [[[tabSuperview selectedTabViewItem] view] setFrame: [tabSuperview contentRect]]; } else if ([[superview window] contentView] == self) { [self removeSubview: _editedObject]; [[superview window] setContentView: _editedObject]; } else if ([superview isKindOfClass: [NSClipView class]]) { [superview setDocumentView: _editedObject]; } [[NSNotificationCenter defaultCenter] removeObserver: self]; } activated = NO; } - (id) initWithObject: (id)anObject inDocument: (id)aDocument { NSMutableArray *types = [NSMutableArray arrayWithObjects: IBViewPboardType, GormLinkPboardType, nil]; opened = NO; openedSubeditor = nil; if ((self = [super initWithObject: anObject inDocument: aDocument]) == nil) return nil; selection = [[NSMutableArray alloc] initWithCapacity: 5]; [self registerForDraggedTypes: types]; if (horizontalImage == nil) { NSCachedImageRep *rep; horizontalImage = [[NSImage allocWithZone:(NSZone *)[(NSObject *)self zone]] initWithSize: NSMakeSize(3000, 2)]; rep = [[NSCachedImageRep allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize:NSMakeSize(3000, 2) depth:[NSWindow defaultDepthLimit] separate:YES alpha:YES]; [horizontalImage addRepresentation: rep]; RELEASE(rep); verticalImage = [[NSImage allocWithZone:(NSZone *)[(NSObject *)self zone]] initWithSize: NSMakeSize(2, 3000)]; rep = [[NSCachedImageRep allocWithZone: (NSZone *)[(NSObject *)self zone]] initWithSize:NSMakeSize(2, 3000) depth:[NSWindow defaultDepthLimit] separate:YES alpha:YES]; [verticalImage addRepresentation: rep]; RELEASE(rep); } return self; } - (void) makeSelectionVisible: (BOOL) value { } - (NSArray*) selection { NSInteger i; NSInteger count = [selection count]; NSMutableArray *result = [NSMutableArray arrayWithCapacity: count]; if (count != 0) { for (i = 0; i < count; i++) { [result addObject: [[selection objectAtIndex: i] editedObject]]; } } else { return [parent selection]; } return result; } - (void) deleteSelection { NSInteger i; NSArray *sel = [selection copy]; NSInteger count = [sel count]; for (i = count - 1; i >= 0; i--) { id ed = [sel objectAtIndex: i]; id temp = [ed editedObject]; [ed detachSubviews]; [document detachObject: temp]; } } - (void) mouseDown: (NSEvent *) theEvent { BOOL onKnob = NO; if ([parent respondsToSelector: @selector(selection)] && [[parent selection] containsObject: _editedObject]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) onKnob = YES; } if (onKnob == YES) { if (parent) return [parent mouseDown: theEvent]; else return [self noResponderFor: @selector(mouseDown:)]; } if ([parent isOpened] == NO) { NSDebugLog(@"md %@ calling my parent %@", self, parent); [parent mouseDown: theEvent]; return; } // are we on the knob of a selected view ? { NSInteger count = [selection count]; NSInteger i; GormViewEditor *knobView = nil; IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint; for ( i = 0; i < count; i++ ) { mouseDownPoint = [[[selection objectAtIndex: i] superview] convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([[selection objectAtIndex: i] frame], mouseDownPoint); if (knob != IBNoneKnobPosition) { knobView = [selection objectAtIndex: i]; [self selectObjects: [NSMutableArray arrayWithObject: knobView]]; // we should set knobView as the only view selected break; } } if ( openedSubeditor != nil ) { mouseDownPoint = [[openedSubeditor superview] convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([openedSubeditor frame], mouseDownPoint); if (knob != IBNoneKnobPosition) { knobView = openedSubeditor; // we should take back the selection // we should select openedSubeditor only [self selectObjects: [NSMutableArray arrayWithObject: knobView]]; [[self window] disableFlushWindow]; [self display]; [[self window] enableFlushWindow]; [[self window] flushWindow]; } } if (knobView != nil) { [self handleMouseOnKnob: knob ofView: knobView withEvent: theEvent]; [self setNeedsDisplay: YES]; return; } } { GormViewEditor *editorView; // get the view we are on { NSPoint mouseDownPoint; NSView *result = nil; GormViewEditor *theParent = nil; mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; result = [_editedObject hitTest: mouseDownPoint]; // we should get a result which is a direct subeditor { id temp = result; if ([temp isKindOfClass: [GormViewEditor class]]) theParent = [(GormViewEditor *)temp parent]; while ((temp != nil) && (theParent != self) && (temp != self)) { temp = [temp superview]; while (![temp isKindOfClass: [GormViewEditor class]]) { temp = [temp superview]; } theParent = [(GormViewEditor *)temp parent]; } if (temp != nil) { result = temp; } else { NSDebugLog(@"WARNING -- strange case"); result = self; } } if ([result isKindOfClass: [GormViewEditor class]]) { } else { result = nil; } // this is the direct subeditor the mouse was clicked on // (or self) editorView = (GormViewEditor *)result; } if (([theEvent clickCount] == 2) && [editorView isKindOfClass: [GormViewWithSubviewsEditor class]] && ([(id)editorView canBeOpened] == YES) && (editorView != self)) // Let's open a subeditor { [(GormViewWithSubviewsEditor *) editorView setOpened: YES]; [self silentlyResetSelection]; openedSubeditor = (GormViewWithSubviewsEditor *) editorView; [self setNeedsDisplay: YES]; return; } if (editorView != self) { [self handleMouseOnView: editorView withEvent: theEvent]; } else // editorView == self { NSEvent *e; unsigned eventMask; NSDate *future = [NSDate distantFuture]; NSRect oldRect = NSZeroRect; NSPoint p, oldp; NSRect r = NSZeroRect; float x, y, w, h; oldp = [self convertPoint: [theEvent locationInWindow] fromView: nil]; eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask; if (!([theEvent modifierFlags] & NSShiftKeyMask)) [self selectObjects: [NSMutableArray array]]; [[self window] disableFlushWindow]; [self setNeedsDisplay: YES]; [self displayIfNeeded]; [[self window] enableFlushWindow]; [[self window] flushWindowIfNeeded]; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; [self lockFocus]; while ([e type] != NSLeftMouseUp) { p = [self convertPoint: [e locationInWindow] fromView: nil]; x = (p.x >= oldp.x) ? oldp.x : p.x; y = (p.y >= oldp.y) ? oldp.y : p.y; w = max(p.x, oldp.x) - min(p.x, oldp.x); w = (w == 0) ? 1 : w; h = max(p.y, oldp.y) - min(p.y, oldp.y); h = (h == 0) ? 1 : h; r = NSMakeRect(x, y, w, h); if (NSEqualRects(oldRect, NSZeroRect) == NO) { [verticalImage compositeToPoint: NSMakePoint(NSMinX(oldRect), NSMinY(oldRect)) fromRect: NSMakeRect(0.0, 0.0, 1.0, oldRect.size.height) operation: NSCompositeCopy]; [verticalImage compositeToPoint: NSMakePoint(NSMaxX(oldRect)-1, NSMinY(oldRect)) fromRect: NSMakeRect(1.0, 0.0, 1.0, oldRect.size.height) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(oldRect), NSMinY(oldRect)) fromRect: NSMakeRect(0.0, 0.0, oldRect.size.width, 1.0) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(oldRect), NSMaxY(oldRect)-1) fromRect: NSMakeRect(0.0, 1.0, oldRect.size.width, 1.0) operation: NSCompositeCopy]; } { NSRect wr; wr = [self convertRect: r toView: nil]; [verticalImage lockFocus]; NSCopyBits([[self window] gState], NSMakeRect(NSMinX(wr), NSMinY(wr), 1.0, r.size.height), NSMakePoint(0.0, 0.0)); NSCopyBits([[self window] gState], NSMakeRect(NSMaxX(wr)-1, NSMinY(wr), 1.0, r.size.height), NSMakePoint(1.0, 0.0)); [verticalImage unlockFocus]; [horizontalImage lockFocus]; NSCopyBits([[self window] gState], NSMakeRect(NSMinX(wr), NSMinY(wr), r.size.width, 1.0), NSMakePoint(0.0, 0.0)); NSCopyBits([[self window] gState], NSMakeRect(NSMinX(wr), NSMaxY(wr)-1, r.size.width, 1.0), NSMakePoint(0.0, 1.0)); [horizontalImage unlockFocus]; } [[NSColor darkGrayColor] set]; NSFrameRect(r); oldRect = r; [[self window] enableFlushWindow]; [[self window] flushWindow]; [[self window] disableFlushWindow]; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; } if (NSEqualRects(r, NSZeroRect) == NO) { [verticalImage compositeToPoint: NSMakePoint(NSMinX(r), NSMinY(r)) fromRect: NSMakeRect(0.0, 0.0, 1.0, r.size.height) operation: NSCompositeCopy]; [verticalImage compositeToPoint: NSMakePoint(NSMaxX(r)-1, NSMinY(r)) fromRect: NSMakeRect(1.0, 0.0, 1.0, r.size.height) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(r), NSMinY(r)) fromRect: NSMakeRect(0.0, 0.0, r.size.width, 1.0) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(r), NSMaxY(r)-1) fromRect: NSMakeRect(0.0, 1.0, r.size.width, 1.0) operation: NSCompositeCopy]; } { NSMutableArray *array; NSEnumerator *enumerator; NSView *subview; if ([theEvent modifierFlags] & NSShiftKeyMask) array = [NSMutableArray arrayWithArray: selection]; else array = [NSMutableArray arrayWithCapacity: 8]; enumerator = [[_editedObject subviews] objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { if ((NSIntersectsRect(r, [subview frame]) == YES) && [subview isKindOfClass: [GormViewEditor class]]) { [array addObject: subview]; } } if ([array count] > 0) { [self selectObjects: array]; } [self displayIfNeeded]; [self unlockFocus]; [[self window] enableFlushWindow]; [[self window] flushWindow]; } } } } - (void) pasteInSelection { [self pasteInView: _editedObject]; } @class GormBoxEditor; @class GormSplitViewEditor; - (NSArray *)destroyAndListSubviews { NSEnumerator *enumerator = [[_editedObject subviews] objectEnumerator]; GormViewEditor *subview; NSMutableArray *newSelection = [NSMutableArray array]; [[parent parent] makeSubeditorResign]; while ((subview = [enumerator nextObject]) != nil) { id v; NSRect frame; v = [subview editedObject]; frame = [v frame]; frame = [[parent parent] convertRect: frame fromView: _editedObject]; [subview deactivate]; [v setFrame: frame]; [newSelection addObject: v]; } [parent close]; return newSelection; } - (void) deleteSelection: (id) sender { [self deleteSelection]; } - (void) changeFont: (id)sender { NSEnumerator *enumerator = [[self selection] objectEnumerator]; id anObject; NSFont *newFont; NSUInteger count = 0; NSDebugLog(@"In %@ changing font for %@",[self className],[self selection]); while ((anObject = [enumerator nextObject])) { if([anObject respondsToSelector: @selector(setTitleFont:)] && [anObject respondsToSelector: @selector(setTextFont:)]) { count++; newFont = [sender convertFont: [anObject font]]; newFont = [[GormFontViewController sharedGormFontViewController] convertFont: newFont]; [anObject setTitleFont: newFont]; [anObject setTextFont: newFont]; } else if ([anObject respondsToSelector: @selector(font)] && [anObject respondsToSelector: @selector(setFont:)]) { count++; newFont = [sender convertFont: [anObject font]]; newFont = [[GormFontViewController sharedGormFontViewController] convertFont: newFont]; [anObject setFont: newFont]; } } // if the font was changed, mark us as altered... if(count > 0) { [[self document] touch]; } return; } @end apps-gorm-gorm-1_5_0/GormCore/GormMatrixEditor.h000066400000000000000000000022341475375552500216770ustar00rootroot00000000000000/* GormMatrixEditor.h - Editor for matrices. * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: Aug 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormMatrixEditor_h #define INCLUDED_GormMatrixEditor_h #include @interface GormMatrixEditor : GormViewWithSubviewsEditor { NSCell* selected; NSInteger selectedRow; NSInteger selectedCol; } @end #endif apps-gorm-gorm-1_5_0/GormCore/GormMatrixEditor.m000066400000000000000000000503021475375552500217030ustar00rootroot00000000000000/* GormMatrixEditor.m - Editor for matrices. * * Copyright (C) 2001 Free Software Foundation, Inc. * * Authors: Adam Fedor * Pierre-Yves Rivaille * Date: Sep 2001 * Aug 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" #include "GormImage.h" #include "GormViewEditor.h" #include "GormMatrixEditor.h" #include "GormViewWithSubviewsEditor.h" #include "GormPlacementInfo.h" #include "GormFontViewController.h" #include "GormViewKnobs.h" #define _EO ((NSMatrix*)_editedObject) @interface GormViewEditor (Private) - (void) _displayFrame: (NSRect) frame withPlacementInfo: (GormPlacementInfo*)gpi; @end @implementation NSMatrix (IBObjectAdditions) - (NSString*) editorClassName { return @"GormMatrixEditor"; } @end @interface NSForm (GormAdditions) - (CGFloat) titleWidth; @end @implementation NSForm (GormAdditions) - (CGFloat)titleWidth { NSInteger i, count = [self numberOfRows]; float new_title_width = 0; float candidate_title_width = 0; // Compute max of title width in the cells for (i = 0; i < count; i++) { candidate_title_width = [_cells[i][0] titleWidth]; if (candidate_title_width > new_title_width) new_title_width = candidate_title_width; } return new_title_width; } @end @implementation GormMatrixEditor - (void) copySelection { if (selected != nil) { [document copyObjects: [self selection] type: IBViewPboardType toPasteboard: [NSPasteboard generalPasteboard]]; } } - (void) deleteSelection { NSDebugLog(@"Cannot delete Matrix cell\n"); } static BOOL done_editing; - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if ([name isEqual: NSControlTextDidEndEditingNotification] == YES) { done_editing = YES; } else NSLog(@"GormMatrixEditor got unhandled notification %@", name); } /* * Initialisation */ - (id) initWithObject: (id)anObject inDocument: (id)aDocument { NSMutableArray *draggedTypes = [NSMutableArray array]; opened = NO; selected = nil; selectedCol = -1; selectedRow = -1; _displaySelection = YES; self = [super initWithObject: anObject inDocument: aDocument]; // dragged types... [draggedTypes addObject: GormImagePboardType]; [draggedTypes addObject: GormLinkPboardType]; [draggedTypes addObject: GormSoundPboardType]; // register... [self registerForDraggedTypes: draggedTypes]; return self; } /* Called when we double-click on a text/editable cell or form. Overlay a text field so the user can edit the title. */ - (void) editTitleWithEvent: (NSEvent *)theEvent { NSInteger row, col; unsigned eventMask; id edit_view; BOOL isForm; NSRect frame; NSTextField *editField; NSDate *future = [NSDate distantFuture]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; isForm = [_EO isKindOfClass: [NSForm class]]; if (isForm == NO && [selected type] != NSTextCellType) return; // get the superview we are to edit from. edit_view = [_EO superview]; [_EO getRow: &row column: &col ofCell: selected]; frame = [_EO cellFrameAtRow: row column: col]; frame.origin.x += NSMinX([_EO frame]); if (isForm) frame.size.width = [(NSForm *)_EO titleWidth]; else frame = [selected titleRectForBounds: frame]; if ([_EO isFlipped]) { frame.origin.y = NSMaxY([_EO frame]) - NSMaxY(frame); } else { frame.origin.y = NSMinY([_EO frame]) + NSMinY(frame); } /* Now create an edit field and allow the user to edit the text */ editField = [[NSTextField alloc] initWithFrame: frame]; [editField setEditable: YES]; [editField setSelectable: YES]; [editField setBezeled: NO]; [editField setEnabled: YES]; if (isForm) [editField setStringValue: [(NSFormCell *)selected title]]; else [editField setStringValue: [selected stringValue]]; [edit_view addSubview: editField]; // [edit_view displayRect: frame]; [edit_view display]; [[edit_view window] flushWindow]; [nc addObserver: self selector: @selector(handleNotification:) name: NSControlTextDidEndEditingNotification object: nil]; /* Do some modal editing */ [editField selectText: self]; eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask | NSKeyDownMask | NSKeyUpMask | NSFlagsChangedMask; done_editing = NO; while (!done_editing) { NSEvent *e; NSEventType eType; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; switch (eType) { case NSLeftMouseDown: { NSPoint dp = [edit_view convertPoint: [e locationInWindow] fromView: nil]; if (NSMouseInRect(dp, frame, NO) == NO) { done_editing = YES; break; } } [[editField currentEditor] mouseDown: e]; break; case NSLeftMouseUp: [[editField currentEditor] mouseUp: e]; break; case NSLeftMouseDragged: [[editField currentEditor] mouseDragged: e]; break; case NSKeyDown: [[editField currentEditor] keyDown: e]; break; case NSKeyUp: [[editField currentEditor] keyUp: e]; break; case NSFlagsChanged: [[editField currentEditor] flagsChanged: e]; break; default: NSLog(@"Internal Error: Unhandled event during editing: %@", e); break; } } [nc removeObserver: self name: NSControlTextDidEndEditingNotification object: nil]; [self makeSelectionVisible: NO]; if (isForm) { /* Set the new title and resize the form to match the titles */ CGFloat oldTitleWidth, titleWidth; NSRect oldFrame; oldTitleWidth = [(NSForm *)_EO titleWidth]; [(NSFormCell *)selected setTitle: [editField stringValue]]; [(NSForm *)_EO calcSize]; titleWidth = [(NSForm *)_EO titleWidth]; oldFrame = frame = [_EO frame]; frame.origin.x -= (titleWidth - oldTitleWidth); frame.size.width += (titleWidth - oldTitleWidth); [(NSForm *)_EO setEntryWidth: NSWidth(frame)]; [(NSForm *)_EO setFrame: frame]; frame = NSUnionRect(frame, oldFrame); } else [selected setStringValue: [editField stringValue]]; [edit_view removeSubview: editField]; [edit_view displayRect: frame]; [self makeSelectionVisible: YES]; RELEASE(editField); } - (BOOL) canBeOpened { return YES; } - (void) setOpened: (BOOL) value { if (value) { opened = YES; } else { opened = NO; selected = nil; selectedCol = -1; selectedRow = -1; } } - (void) mouseDown: (NSEvent *)theEvent { BOOL onKnob = NO; { if ([[parent selection] containsObject: _EO]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) onKnob = YES; } if (onKnob == YES) { if (_next_responder) return [_next_responder mouseDown: theEvent]; else return [self noResponderFor: @selector(mouseDown:)]; } } if (opened == NO) { [super mouseDown: theEvent]; return; } { NSInteger row, col; NSPoint mouseDownPoint = [_EO convertPoint: [theEvent locationInWindow] fromView: nil]; if ([_EO getRow: &row column: &col forPoint: mouseDownPoint] == YES) { selectedRow = row; selectedCol = col; selected = [_EO cellAtRow: row column: col]; [document setSelectionFromEditor: self]; if (selected != nil && ([theEvent clickCount] == 2) ) { [self editTitleWithEvent: theEvent]; return; } [self setNeedsDisplay: YES]; } else { selected = nil; selectedRow = -1; selectedCol = -1; [document setSelectionFromEditor: self]; } } } - (void) makeSelectionVisible: (BOOL)flag { if (selected != nil) { NSInteger row, col; if ([_EO getRow: &row column: &col ofCell: selected]) { NSRect frame = [_EO cellFrameAtRow: row column: col]; if (flag == YES) [_EO selectCellAtRow: row column: col]; [_EO lockFocus]; [[NSColor controlShadowColor] set]; NSHighlightRect(frame); [_EO unlockFocus]; } } else { [_EO deselectAllCells]; } [_EO display]; [[_EO window] flushWindow]; } - (void) selectObjects: (NSArray*)anArray { id obj = [anArray lastObject]; [self makeSelectionVisible: NO]; selected = obj; [document setSelectionFromEditor: self]; [self makeSelectionVisible: YES]; } - (NSArray*) selection { if (selected == nil) return [NSArray arrayWithObject: _EO]; else return [NSArray arrayWithObject: selected]; } - (BOOL) acceptsTypeFromArray: (NSArray*)types { return ([types containsObject: IBObjectPboardType] || [types containsObject: GormImagePboardType]); } - (void) postDraw: (NSRect) rect { if (_displaySelection) { if ((selectedRow != -1) && (selectedCol != -1)) { NSDebugLog(@"highlighting %@", NSStringFromRect([_EO cellFrameAtRow: selectedRow column: selectedCol])); [[NSColor blackColor] set]; NSHighlightRect([_EO convertRect: [_EO cellFrameAtRow: selectedRow column: selectedCol] toView: self]); } } } - (NSRect) _constrainedFrame: (NSRect) frame withEvent: (NSEvent *)theEvent andKnob: (IBKnobPosition) knob { NSInteger width; NSInteger height; if ([theEvent modifierFlags] & NSAlternateKeyMask) { NSInteger rows = [_EO numberOfRows]; NSInteger cols = [_EO numberOfColumns]; NSSize interSize = [_EO intercellSpacing]; NSInteger colWidth = ([_EO frame].size.width - (cols - 1) * interSize.width) / cols; NSInteger rowHeight = ([_EO frame].size.height - (rows - 1) * interSize.height) / rows; NSInteger widthIncrement = colWidth + interSize.width; NSInteger heightIncrement = rowHeight + interSize.height; if (frame.size.width < colWidth) { width = colWidth; rows = 1; } else { width = frame.size.width - [_EO frame].size.width; rows = width / widthIncrement; width = rows * widthIncrement + [_EO frame].size.width; } if (frame.size.height < rowHeight) { height = rowHeight; cols = 1; } else { height = frame.size.height - [_EO frame].size.height; cols = height / heightIncrement; height = cols * heightIncrement + [_EO frame].size.height; } } else if ([theEvent modifierFlags] & NSControlKeyMask) { NSInteger rows = [_EO numberOfRows]; NSInteger cols = [_EO numberOfColumns]; NSSize cellSize = [_EO cellSize]; height = width = 0; if (cols > 1) width = ( frame.size.width - cellSize.width * cols) / (cols - 1); if (rows > 1) height = ( frame.size.height - cellSize.height * rows ) / (rows - 1); width *= (cols - 1); width += cellSize.width * cols; height *= (rows - 1); height += cellSize.height * rows; } else { NSInteger rows = [_EO numberOfRows]; NSInteger cols = [_EO numberOfColumns]; NSSize interSize = [_EO intercellSpacing]; width = ( frame.size.width - interSize.width * (cols - 1) ) / cols; width *= cols; width += (interSize.width * (cols - 1)); height = ( frame.size.height - interSize.height * (rows - 1) ) / rows; height *= rows; height += (interSize.height * (rows - 1)); } switch (knob) { case IBBottomLeftKnobPosition: case IBMiddleLeftKnobPosition: case IBTopLeftKnobPosition: frame.origin.x = NSMaxX(frame) - width; frame.size.width = width; break; case IBTopRightKnobPosition: case IBMiddleRightKnobPosition: case IBBottomRightKnobPosition: frame.size.width = width; break; case IBTopMiddleKnobPosition: case IBBottomMiddleKnobPosition: case IBNoneKnobPosition: break; } switch (knob) { case IBBottomLeftKnobPosition: case IBBottomRightKnobPosition: case IBBottomMiddleKnobPosition: frame.origin.y = NSMaxY(frame) - height; frame.size.height = height; break; case IBTopMiddleKnobPosition: case IBTopRightKnobPosition: case IBTopLeftKnobPosition: frame.size.height = height; break; case IBMiddleLeftKnobPosition: case IBMiddleRightKnobPosition: case IBNoneKnobPosition: break; } return frame; } - (void) updateResizingWithFrame: (NSRect) frame andEvent: (NSEvent *)theEvent andPlacementInfo: (GormPlacementInfo*) gpi { gpi->lastFrame = [self _constrainedFrame: frame withEvent: theEvent andKnob: gpi->knob]; [self _displayFrame: gpi->lastFrame withPlacementInfo: gpi]; } - (void) validateFrame: (NSRect) frame withEvent: (NSEvent *) theEvent andPlacementInfo: (GormPlacementInfo*)gpi { frame = gpi->lastFrame; if ([theEvent modifierFlags] & (NSControlKeyMask | NSShiftKeyMask)) { NSInteger rows = [_EO numberOfRows]; NSInteger cols = [_EO numberOfColumns]; NSSize interSize = [_EO intercellSpacing]; NSInteger colWidth = ([_EO frame].size.width - (cols - 1) * interSize.width) / cols; NSInteger rowHeight = ([_EO frame].size.height - (rows - 1) * interSize.height) / rows; NSInteger widthIncrement = colWidth + interSize.width; NSInteger heightIncrement = rowHeight + interSize.height; NSInteger newCols = (frame.size.width - [_EO frame].size.width) / widthIncrement; NSInteger newRows = (frame.size.height - [_EO frame].size.height) / heightIncrement; NSInteger i, j; if (newCols > 0) { for (j = cols; j < cols + newCols; j++) { [_EO addColumn]; for (i = 0; i < rows; i++) { [document attachObject: [_EO cellAtRow: i column: j] toParent: _EO]; } } } else if (newCols < 0) { for (j = cols - 1; j >= cols - newCols; j--) { for (i = 0; i < rows; i++) { [document detachObject: [_EO cellAtRow: i column: j]]; } [_EO removeColumn: j]; } } if (newRows > 0) { for (i = rows; i < rows + newRows; i++) { [_EO addRow]; for (j = 0; j < cols + newCols; j++) { [document attachObject: [_EO cellAtRow: i column: j] toParent: _EO]; } } } else if (newRows < 0) { for (i = rows - 1; i >= rows + newRows; i--) { for (j = 0; j < cols + newCols; j++) { [document detachObject: [_EO cellAtRow: i column: j]]; } [_EO removeRow: i]; } } [_EO setFrame: frame]; } else if ([theEvent modifierFlags] & NSControlKeyMask) { NSInteger width; NSInteger height; NSInteger rows = [_EO numberOfRows]; NSInteger cols = [_EO numberOfColumns]; NSSize cellSize = [_EO cellSize]; [self setFrame: frame]; height = width = 0; if (cols > 1) width = ( frame.size.width - cellSize.width * cols) / (cols - 1); if (rows > 1) height = ( frame.size.height - cellSize.height * rows ) / (rows - 1); [_EO setIntercellSpacing: NSMakeSize(width, height)]; } else { NSInteger width; NSInteger height; NSInteger rows = [_EO numberOfRows]; NSInteger cols = [_EO numberOfColumns]; NSSize interSize = [_EO intercellSpacing]; [self setFrame: frame]; width = ( frame.size.width - interSize.width * (cols - 1) ) / cols; height = ( frame.size.height - interSize.height * (rows - 1) ) / rows; [_EO setCellSize: NSMakeSize(width, height)]; } } - (void) changeFont: (id)sender { NSEnumerator *enumerator = [[self selection] objectEnumerator]; id anObject; NSFont *newFont; NSDebugLog(@"In %@ changing font for %@",[self className],[self selection]); while ((anObject = [enumerator nextObject])) { if([anObject respondsToSelector: @selector(setTitleFont:)] && [anObject respondsToSelector: @selector(setTextFont:)]) { newFont = [sender convertFont: [anObject font]]; newFont = [[GormFontViewController sharedGormFontViewController] convertFont: newFont]; [anObject setTitleFont: newFont]; [anObject setTextFont: newFont]; } else if ([anObject respondsToSelector: @selector(font)] && [anObject respondsToSelector: @selector(setFont:)]) { newFont = [sender convertFont: [anObject font]]; newFont = [[GormFontViewController sharedGormFontViewController] convertFont: newFont]; [anObject setFont: newFont]; } } return; } - (id) connectTargetAtPoint: (NSPoint)mouseLoc { NSInteger row, col; if ([_EO getRow: &row column: &col forPoint: mouseLoc] == YES) { /* If a matrix has small intercell spacing (less than 1 pixel), it becomes impossible to make connections to the whole matrix, since -getRow:column:forPoint: returns YES for every location within the matrix's bounds. Therefore, we accept connection to matrix cells only if the mouse is strictly inside the cell. */ NSRect cellFrame = [_EO cellFrameAtRow: row column: col]; if (mouseLoc.x != NSMinX(cellFrame) && mouseLoc.x != NSMaxX(cellFrame) && mouseLoc.y != NSMinY(cellFrame) && mouseLoc.y != NSMaxY(cellFrame)) { return [_EO cellAtRow: row column: col]; } } return _EO; } - (NSDragOperation) draggingEntered: (id)sender { NSPasteboard *dragPb; NSArray *types; id delegate = [NSApp delegate]; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { NSPoint loc = [sender draggingLocation]; NSPoint mouseDownPoint = [_EO convertPoint: loc fromView: nil]; [delegate displayConnectionBetween: [delegate connectSource] and: [self connectTargetAtPoint: mouseDownPoint]]; return NSDragOperationLink; } return [super draggingEntered: sender]; } - (BOOL) performDragOperation: (id)sender { NSPasteboard *dragPb; NSArray *types; NSPoint dropPoint = [sender draggedImageLocation]; NSPoint mouseDownPoint = [_EO convertPoint: dropPoint fromView: nil]; id delegate = [NSApp delegate]; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType]) { [delegate displayConnectionBetween: [delegate connectSource] and: [self connectTargetAtPoint: mouseDownPoint]]; [delegate startConnecting]; } else if ([types containsObject: GormImagePboardType] == YES || [types containsObject: GormSoundPboardType] == YES) { NSInteger row, col; if ([_EO getRow: &row column: &col forPoint: mouseDownPoint] == YES) { id object = [_EO cellAtRow: row column: col]; if ([types containsObject: GormImagePboardType] == YES) { NSString *name = [dragPb stringForType: GormImagePboardType]; NSImage *image = [NSImage imageNamed: name]; [image setArchiveByName: NO]; if ([object respondsToSelector: @selector(setSound:)]) { [object setImage: image]; } else { return NO; } return YES; } else if ([types containsObject: GormSoundPboardType] == YES) { NSString *name; name = [dragPb stringForType: GormSoundPboardType]; if ([object respondsToSelector: @selector(setSound:)]) { [object setSound: [NSSound soundNamed: name]]; } else { return NO; } return YES; } } } return NO; } @end apps-gorm-gorm-1_5_0/GormCore/GormNSPanel.h000066400000000000000000000026041475375552500205650ustar00rootroot00000000000000/* GormNSPanel.h Copyright (C) 2003 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2003 Adapted from GormNSWindow.h This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormNSPanel_h #define INCLUDED_GormNSPanel_h #include @interface GormNSPanel : NSPanel { unsigned _gormStyleMask; BOOL _gormReleasedWhenClosed; NSUInteger autoPositionMask; } - (void) _setStyleMask: (unsigned int)newStyleMask; - (unsigned int) _styleMask; - (void) _setReleasedWhenClosed: (BOOL) flag; - (BOOL) _isReleasedWhenClosed; - (unsigned int) autoPositionMask; - (void) setAutoPositionMask: (unsigned int)mask; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormNSPanel.m000066400000000000000000000073561475375552500206030ustar00rootroot00000000000000/* GormNSPanel.m Copyright (C) 2003 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2003 (Adapted from GormNSWindow.m) This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNSPanel.h" // the default style mask we start with. static NSUInteger defaultStyleMask = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask; @implementation GormNSPanel - (void)encodeWithCoder: (NSCoder*) aCoder { unsigned oldStyleMask; // save the old values... oldStyleMask = _styleMask; // set the values we wish to save.. after save restore. _styleMask = _gormStyleMask; [self setReleasedWhenClosed: _gormReleasedWhenClosed]; [super encodeWithCoder: aCoder]; _styleMask = oldStyleMask; [self setReleasedWhenClosed: NO]; } - (id) initWithCoder: (NSCoder *)coder { self = [super initWithCoder: coder]; if (self == nil) { return nil; } // preserve the setting and set the actual window to NO. _gormReleasedWhenClosed = [self isReleasedWhenClosed]; [self setReleasedWhenClosed: NO]; return self; } - (id) initWithContentRect: (NSRect)contentRect styleMask: (NSUInteger)aStyle backing: (NSBackingStoreType)bufferingType defer: (BOOL)flag { _gormStyleMask = aStyle; self = [super initWithContentRect: contentRect styleMask: defaultStyleMask backing: bufferingType defer: flag]; if(self != nil) { // Don't release when the window is closed, a window being edited may // be periodically opened and closed. [self setReleasedWhenClosed: NO]; // remove the default icon... [self setMiniwindowImage: nil]; // set the default position mask; autoPositionMask = GSWindowMaxXMargin | GSWindowMaxYMargin; } return self; } - (void) _setStyleMask: (unsigned int) newStyleMask { _gormStyleMask = newStyleMask; } - (unsigned int) _styleMask { return _gormStyleMask; } - (NSString *) className { return @"NSPanel"; } - (void) _setReleasedWhenClosed: (BOOL) flag { _gormReleasedWhenClosed = flag; } - (BOOL) _isReleasedWhenClosed { return _gormReleasedWhenClosed; } - (unsigned int) autoPositionMask { return autoPositionMask; } - (void) setAutoPositionMask: (unsigned int)mask { autoPositionMask = mask; } - (void) orderWindow: (NSWindowOrderingMode)place relativeTo: (NSInteger)otherWin { id document = [(id)[NSApp delegate] documentForObject: self]; [super orderWindow: place relativeTo: otherWin]; if([[NSApp delegate] isConnecting] == NO) { id editor = [document editorForObject: self create: NO]; // select myself. if([editor respondsToSelector: @selector(selectObjects:)]) { [editor selectObjects: [NSArray arrayWithObject: self]]; } [document setSelectionFromEditor: editor]; [editor makeSelectionVisible: YES]; } } - (void) saveFrameUsingName: (NSString*)name { // do nothing... } @end apps-gorm-gorm-1_5_0/GormCore/GormNSSplitViewInspector.h000066400000000000000000000003021475375552500233340ustar00rootroot00000000000000/* All Rights reserved */ #include #include @interface GormNSSplitViewInspector : IBInspector { id orientation; id divider; } @end apps-gorm-gorm-1_5_0/GormCore/GormNSSplitViewInspector.m000066400000000000000000000032021475375552500233430ustar00rootroot00000000000000/* All rights reserved */ #include #include "GormNSSplitViewInspector.h" @implementation NSSplitView (IBObjectAdditions) - (NSString *) inspectorClassName { return @"GormNSSplitViewInspector"; } - (NSString*) editorClassName { return @"GormSplitViewEditor"; } @end @implementation GormNSSplitViewInspector - init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if ([bundle loadNibNamed: @"GormNSSplitViewInspector" owner: self topLevelObjects: NULL] == NO) { NSLog(@"Could not open gorm GormNSSplitViewInspector"); NSLog(@"self %@", self); return nil; } } return self; } - (void)awakeFromNib { } - (void) _getValuesFromObject { BOOL state = [(NSSplitView *)object isVertical]; NSUInteger dividerStyle = [(NSSplitView *)object dividerStyle]; // get the values from the object if(state == NO) { [orientation selectCellAtRow: 0 column: 0]; } else { [orientation selectCellAtRow: 1 column: 0]; } [divider selectItemWithTag: dividerStyle]; } - (void) setObject: (id)anObject { [super setObject: anObject]; [self _getValuesFromObject]; } - (void) ok: (id)sender { id cell = nil; BOOL state = NO; NSUInteger styleTag = 0; // horizontal switch.. if it's active/inactive we // know what the selection is. [super ok: sender]; cell = [orientation cellAtRow: 0 column: 0]; state = ([cell state] == NSOnState)?NO:YES; styleTag = [divider selectedTag]; [object setVertical: state]; [object adjustSubviews]; [object setDividerStyle: styleTag]; } @end apps-gorm-gorm-1_5_0/GormCore/GormNSWindow.h000066400000000000000000000025451475375552500210010ustar00rootroot00000000000000/* GormWindow.h Copyright (C) 2001 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormNSWindow_h #define INCLUDED_GormNSWindow_h #include @interface GormNSWindow : NSWindow { unsigned _gormStyleMask; BOOL _gormReleasedWhenClosed; NSUInteger autoPositionMask; } - (void) _setStyleMask: (unsigned int)newStyleMask; - (unsigned int) _styleMask; - (void) _setReleasedWhenClosed: (BOOL) flag; - (BOOL) _isReleasedWhenClosed; - (unsigned int) autoPositionMask; - (void) setAutoPositionMask: (unsigned int)mask; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormNSWindow.m000066400000000000000000000075371475375552500210140ustar00rootroot00000000000000/* GormWindow.m Copyright (C) 2001 Free Software Foundation, Inc. Author: Pierre-Yves Rivaille Date: 2001 This file is part of GNUstep. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNSWindow.h" // the default style mask we start with. static NSUInteger defaultStyleMask = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask; @implementation GormNSWindow - (void) encodeWithCoder: (NSCoder*)aCoder { unsigned oldStyleMask; // save the old values... oldStyleMask = _styleMask; // set the values we wish to save.. after save restore. _styleMask = _gormStyleMask; [self setReleasedWhenClosed: _gormReleasedWhenClosed]; [super encodeWithCoder: aCoder]; _styleMask = oldStyleMask; [self setReleasedWhenClosed: NO]; } - (id) initWithCoder: (NSCoder *)coder { self = [super initWithCoder: coder]; if (self == nil) { return nil; } // preserve the setting and set the actual window to NO. _gormReleasedWhenClosed = [self isReleasedWhenClosed]; [self setReleasedWhenClosed: NO]; return self; } - (id) initWithContentRect: (NSRect)contentRect styleMask: (NSUInteger)aStyle backing: (NSBackingStoreType)bufferingType defer: (BOOL)flag { _gormStyleMask = aStyle; self = [super initWithContentRect: contentRect styleMask: defaultStyleMask backing: bufferingType defer: NO]; // always no, because this isn't recorded here... if(self != nil) { // Don't release when the window is closed, a window being edited may // be periodically opened and closed. [self setReleasedWhenClosed: NO]; // remove the default icon... [self setMiniwindowImage: nil]; // set the default position mask; autoPositionMask = GSWindowMaxXMargin | GSWindowMinYMargin; } return self; } - (void) _setStyleMask: (unsigned int)newStyleMask { _gormStyleMask = newStyleMask; } - (unsigned int) _styleMask { return _gormStyleMask; } - (BOOL) canBecomeMainWindow { return NO; } - (BOOL) canBecomeKeyWindow { return YES; } - (NSString *) className { return @"NSWindow"; } - (void) _setReleasedWhenClosed: (BOOL) flag { _gormReleasedWhenClosed = flag; } - (BOOL) _isReleasedWhenClosed { return _gormReleasedWhenClosed; } - (unsigned int) autoPositionMask { return autoPositionMask; } - (void) setAutoPositionMask: (unsigned int)mask { autoPositionMask = mask; } - (void) orderWindow: (NSWindowOrderingMode)place relativeTo: (NSInteger)otherWin { id document = [(id)[NSApp delegate] documentForObject: self]; [super orderWindow: place relativeTo: otherWin]; if([[NSApp delegate] isConnecting] == NO) { id editor = [document editorForObject: self create: NO]; // select myself. if([editor respondsToSelector: @selector(selectObjects:)]) { [editor selectObjects: [NSArray arrayWithObject: self]]; } [document setSelectionFromEditor: editor]; [editor makeSelectionVisible: YES]; } } - (void) saveFrameUsingName: (NSString*)name { // do nothing... } @end apps-gorm-gorm-1_5_0/GormCore/GormObjectEditor.h000066400000000000000000000034361475375552500216460ustar00rootroot00000000000000/* GormObjectEditor.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2003, 2004, 2024 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormObjectEditor_h #define INCLUDED_GormObjectEditor_h #import "GormGenericEditor.h" @interface NSObject (GormObjectAdditions) - (NSImage *) imageForViewer; - (NSString *) inspectorClassName; - (NSString *) connectInspectorClassName; - (NSString *) sizeInspectorClassName; - (NSString *) helpInspectorClassName; - (NSString *) classInspectorClassName; - (NSString *) editorClassName; @end @interface GormObjectEditor : GormGenericEditor + (void) setEditor: (id)editor forDocument: (id)aDocument; - (void) draggedImage: (NSImage *)i endedAt: (NSPoint)p deposited: (BOOL)f; - (NSDragOperation) draggingSourceOperationMaskForLocal: (BOOL)flag; - (BOOL) acceptsTypeFromArray: (NSArray *)types; - (void) makeSelectionVisible: (BOOL)flag; - (void) resetObject: (id)anObject; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormObjectEditor.m000066400000000000000000000342251475375552500216530ustar00rootroot00000000000000/* GormObjectEditor.m * * Copyright (C) 1999,2002,2003,2004,2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2002,2003,2004,2005 * Author: Richard Frith-Macdonald * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #import #import "GormPrivate.h" #import "GormObjectEditor.h" #import "GormFunctions.h" #import "GormDocument.h" #import "GormClassManager.h" #import "GormAbstractDelegate.h" @implementation NSObject (GormObjectAdditions) /* * Method to return the image that should be used to display objects within * the matrix containing the objects in a document. */ - (NSImage*) imageForViewer { static NSImage *image = nil; GormAbstractDelegate *delegate = (GormAbstractDelegate *)[NSApp delegate]; if (image == nil && [delegate isInTool] == NO) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"GormUnknown"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } - (NSString*) inspectorClassName { return @"GormObjectInspector"; } - (NSString*) connectInspectorClassName { return @"GormConnectionInspector"; } - (NSString*) sizeInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) helpInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) classInspectorClassName { return @"GormCustomClassInspector"; } - (NSString*) editorClassName { return @"GormObjectEditor"; } @end @implementation NSView (GormObjectAdditions) - (NSString*) helpInspectorClassName { return @"GormHelpInspector"; } @end @implementation GormObjectEditor static NSMapTable *docMap = 0; + (void) initialize { if (self == [GormObjectEditor class]) { docMap = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks, NSNonRetainedObjectMapValueCallBacks, 2); } } + (id) editorForDocument: (id)aDocument { id editor = NSMapGet(docMap, (void*)aDocument); if (editor == nil) { editor = [[self alloc] initWithObject: nil inDocument: aDocument]; AUTORELEASE(editor); } return editor; } + (void) setEditor: (id)editor forDocument: (id)aDocument { NSMapInsert(docMap, (void*)aDocument, (void*)editor); } - (BOOL) acceptsTypeFromArray: (NSArray*)types { return ([[(GormDocument *)document allManagedPboardTypes] firstObjectCommonWithArray: types] != nil); } - (void) pasteInSelection { NSPasteboard *pb = [NSPasteboard generalPasteboard]; NSString *type = [[(GormDocument *)document allManagedPboardTypes] firstObjectCommonWithArray: [pb types]]; if(type != nil) { // paste the object in. [document pasteType: type fromPasteboard: pb parent: nil]; } } - (void) copySelection { NSArray *sel = [self selection]; if([sel count] > 0) { NSString *type = nil; id obj = [sel objectAtIndex: 0]; if([obj isKindOfClass: [NSWindow class]]) { type = IBWindowPboardType; } else if([obj isKindOfClass: [NSView class]]) { type = IBViewPboardType; } else { type = IBObjectPboardType; } [document copyObjects: sel type: type toPasteboard: [NSPasteboard generalPasteboard]]; } } - (void) deleteSelection { if (selected != nil && [[document nameForObject: selected] isEqualToString: @"NSOwner"] == NO && [[document nameForObject: selected] isEqualToString: @"NSFirst"] == NO) { if ([selected isKindOfClass: [NSMenu class]] && [[document nameForObject: selected] isEqual: @"NSMenu"] == YES) { NSString *title = _(@"Removing Main Menu"); NSString *msg = _(@"Are you sure you want to do this?"); NSInteger retval = NSRunAlertPanel(title, msg,_(@"OK"),_(@"Cancel"), nil, nil); // if the user *really* wants to delete the menu, do it. if(retval != NSAlertDefaultReturn) return; } [document detachObject: selected]; if ([selected isKindOfClass: [NSWindow class]] == YES) { NSArray *subviews = allSubviews([(NSWindow *)selected contentView]); [document detachObjects: subviews]; [selected close]; } if ([selected isKindOfClass: [NSMenu class]] == YES) { NSArray *items = findAll( selected ); NSEnumerator *en = [items objectEnumerator]; id obj = nil; while((obj = [en nextObject]) != nil) { [document detachObject: obj]; } } [objects removeObjectIdenticalTo: selected]; [self selectObjects: [NSArray array]]; [self refreshCells]; } } /* * Dragging source protocol implementation */ - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f { } - (NSDragOperation) draggingEntered: (id)sender { NSArray *pbTypes = nil; // Get the resource manager first, if nil don't bother calling the rest... dragPb = [sender draggingPasteboard]; pbTypes = [dragPb types]; if ([pbTypes containsObject: GormLinkPboardType] == YES) { dragType = GormLinkPboardType; } else { dragType = nil; } return [self draggingUpdated: sender]; } - (NSDragOperation) draggingUpdated: (id)sender { if (dragType == GormLinkPboardType) { NSPoint loc = [sender draggingLocation]; NSInteger r, c; int pos; id obj = nil; id delegate = [NSApp delegate]; loc = [self convertPoint: loc fromView: nil]; [self getRow: &r column: &c forPoint: loc]; pos = r * [self numberOfColumns] + c; if (pos >= 0 && pos < [objects count]) { obj = [objects objectAtIndex: pos]; } if (obj == [delegate connectSource]) { return NSDragOperationNone; /* Can't drag an object onto itsself */ } [delegate displayConnectionBetween: [delegate connectSource] and: obj]; if (obj != nil) { return NSDragOperationLink; } return NSDragOperationNone; } return NSDragOperationNone; } /** * Used for autoscrolling when you connect IBActions. * FIXME: Maybye there is a better way to do it. */ - (void)draggingExited:(id < NSDraggingInfo >)sender { if (dragType == GormLinkPboardType) { NSRect documentVisibleRect; NSRect documentRect; NSPoint loc = [sender draggingLocation]; loc = [self convertPoint:loc fromView:nil]; documentVisibleRect = [(NSClipView *)[self superview] documentVisibleRect]; documentRect = [(NSClipView *)[self superview] documentRect]; /* Down */ if ( (loc.y >= documentVisibleRect.size.height) && ( ! NSEqualRects(documentVisibleRect,documentRect) ) ) { loc.x = 0; loc.y = documentRect.origin.y + [self cellSize].height; [(NSClipView*) [self superview] scrollToPoint:loc]; } /* up */ else if ( (loc.y + 10 >= documentVisibleRect.origin.y ) && ( ! NSEqualRects(documentVisibleRect,documentRect) ) ) { loc.x = 0; loc.y = documentRect.origin.y - [self cellSize].height; [(NSClipView*) [self superview] scrollToPoint:loc]; } } } - (NSDragOperation) draggingSourceOperationMaskForLocal: (BOOL)flag { return NSDragOperationLink; } - (void) drawSelection { } - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if([name isEqual: GormResizeCellNotification]) { NSDebugLog(@"Received notification"); [self setCellSize: defaultCellSize()]; } } /* * Initialisation - register to receive DnD with our own types. */ - (id) initWithObject: (id)anObject inDocument: (id)aDocument { id old = NSMapGet(docMap, (void*)aDocument); if (old != nil) { RELEASE(self); self = RETAIN(old); [self addObject: anObject]; return self; } self = [super initWithObject: anObject inDocument: aDocument]; if (self != nil) { NSButtonCell *proto; NSColor *color = [NSColor colorWithCalibratedRed: 0.850980 green: 0.737255 blue: 0.576471 alpha: 0.0 ]; document = aDocument; [self registerForDraggedTypes:[NSArray arrayWithObject:GormLinkPboardType]]; [self setAutosizesCells: NO]; [self setCellSize: defaultCellSize()]; [self setIntercellSpacing: NSMakeSize(8,8)]; [self setAutoresizingMask: NSViewMinYMargin|NSViewWidthSizable]; [self setMode: NSRadioModeMatrix]; /* * Send mouse click actions to self, so we can handle selection. */ [self setAction: @selector(changeSelection:)]; [self setDoubleAction: @selector(raiseSelection:)]; [self setTarget: self]; // set the background color. [self setBackgroundColor: color]; objects = [[NSMutableArray alloc] init]; proto = [[NSButtonCell alloc] init]; [proto setBordered: NO]; [proto setAlignment: NSCenterTextAlignment]; [proto setImagePosition: NSImageAbove]; [proto setSelectable: NO]; [proto setEditable: NO]; [self setPrototype: proto]; RELEASE(proto); [self setEditor: self forDocument: aDocument]; [self addObject: anObject]; // set up the notification... [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNotification:) name: GormResizeCellNotification object: nil]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNotification:) name: IBResourceManagerRegistryDidChangeNotification object: nil]; } return self; } - (void) willCloseDocument: (NSNotification *)aNotification { NSMapRemove(docMap,document); [super willCloseDocument: aNotification]; } - (void) close { [super close]; [[NSNotificationCenter defaultCenter] removeObserver: self]; NSMapRemove(docMap,document); } - (void) makeSelectionVisible: (BOOL)flag { if (flag == YES && selected != nil) { unsigned pos = [objects indexOfObjectIdenticalTo: selected]; int r = pos / [self numberOfColumns]; int c = pos % [self numberOfColumns]; [self selectCellAtRow: r column: c]; } else { [self deselectAllCells]; } [self displayIfNeeded]; [[self window] flushWindow]; } - (void) mouseDown: (NSEvent*)theEvent { if ([theEvent modifierFlags] & NSControlKeyMask) { NSPoint loc = [theEvent locationInWindow]; NSString *name; NSInteger r = 0, c = 0; int pos = 0; id obj = nil; loc = [self convertPoint: loc fromView: nil]; [self getRow: &r column: &c forPoint: loc]; pos = r * [self numberOfColumns] + c; if (pos >= 0 && pos < [objects count]) { obj = [objects objectAtIndex: pos]; } if (obj != nil && obj != selected) { [self selectObjects: [NSArray arrayWithObject: obj]]; [self makeSelectionVisible: YES]; } name = [document nameForObject: obj]; if ([name isEqualToString: @"NSFirst"] == NO && name != nil) { NSPasteboard *pb; pb = [NSPasteboard pasteboardWithName: NSDragPboard]; [pb declareTypes: [NSArray arrayWithObject: GormLinkPboardType] owner: self]; [pb setString: name forType: GormLinkPboardType]; [[NSApp delegate] displayConnectionBetween: obj and: nil]; [[NSApp delegate] startConnecting]; [self dragImage: [[NSApp delegate] linkImage] at: loc offset: NSZeroSize event: theEvent pasteboard: pb source: self slideBack: YES]; [self makeSelectionVisible: YES]; return; } } [super mouseDown: theEvent]; } - (BOOL) performDragOperation: (id)sender { if (dragType == GormLinkPboardType) { NSPoint loc = [sender draggingLocation]; NSInteger r, c; int pos; id obj = nil; loc = [self convertPoint: loc fromView: nil]; [self getRow: &r column: &c forPoint: loc]; pos = r * [self numberOfColumns] + c; if (pos >= 0 && pos < [objects count]) { obj = [objects objectAtIndex: pos]; } if (obj == nil) { return NO; } else { [[NSApp delegate] displayConnectionBetween: [NSApp connectSource] and: obj]; [[NSApp delegate] startConnecting]; return YES; } } else { NSLog(@"Drop with unrecognized type!"); return NO; } } - (BOOL) prepareForDragOperation: (id)sender { /* * Tell the source that we will accept the drop if we can. */ if (dragType == GormLinkPboardType) { NSPoint loc = [sender draggingLocation]; NSInteger r, c; int pos; id obj = nil; loc = [self convertPoint: loc fromView: nil]; [self getRow: &r column: &c forPoint: loc]; pos = r * [self numberOfColumns] + c; if (pos >= 0 && pos < [objects count]) { obj = [objects objectAtIndex: pos]; } if (obj != nil) { return YES; } } return NO; } - (id) raiseSelection: (id)sender { id obj = [self changeSelection: sender]; id e; if(obj != nil) { e = [document editorForObject: obj create: YES]; [e orderFront]; [e resetObject: obj]; } return self; } - (void) resetObject: (id)anObject { NSString *name = [document nameForObject: anObject]; GormInspectorsManager *mgr = [(id)[NSApp delegate] inspectorsManager]; if ([name isEqual: @"NSOwner"] == YES) { [mgr setClassInspector]; } if ([name isEqual: @"NSFirst"] == YES) { [mgr setClassInspector]; } } - (void) addObject:(id)anObject { [super addObject:anObject]; /* we need to do this for palettes which can drop top level objects */ [(GormDocument *)document changeToViewWithTag:0]; } @end apps-gorm-gorm-1_5_0/GormCore/GormObjectInspector.h000066400000000000000000000032551475375552500223650ustar00rootroot00000000000000/* GormObjectInspector.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormObjectInspector_h #define INCLUDED_GormObjectInspector_h #include "GormPrivate.h" #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-variable" static NSString *typeId = @"Object"; static NSString *typeChar = @"Character or Boolean"; static NSString *typeUChar = @"Unsigned character/bool"; static NSString *typeInt = @"Integer"; static NSString *typeUInt = @"Unsigned integer"; static NSString *typeFloat = @"Float"; static NSString *typeDouble = @"Double"; #pragma GCC diagnostic pop @interface GormObjectInspector : IBInspector { NSBrowser *browser; NSMutableArray *sets; NSMutableDictionary *gets; NSMutableDictionary *types; NSButton *label; NSTextField *value; BOOL isString; } - (void) update: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormObjectInspector.m000066400000000000000000000235411475375552500223720ustar00rootroot00000000000000/* GormObjectInspector.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include "GormObjectInspector.h" @implementation GormObjectInspector - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if([bundle loadNibNamed: @"GormObjectInspector" owner: self topLevelObjects: NULL] == NO) { NSLog(@"Couldn't load GormObjectInsector"); return nil; } sets = [[NSMutableArray alloc] init]; gets = [[NSMutableDictionary alloc] init]; types = [[NSMutableDictionary alloc] init]; [okButton setEnabled: NO]; revertButton = nil; } return self; } - (NSInteger) browser: (NSBrowser*)sender numberOfRowsInColumn: (NSInteger)column { return [sets count]; } - (BOOL) browser: (NSBrowser*)sender selectCellWithString: (NSString*)title inColumn: (NSInteger)col { [self update: self]; return YES; } - (NSString*) browser: (NSBrowser*)sender titleOfColumn: (NSInteger)col { return @"Attribute setters"; } - (void) browser: (NSBrowser*)sender willDisplayCell: (id)aCell atRow: (NSInteger)row column: (NSInteger)col { if (row >= 0 && row < [sets count]) { [aCell setStringValue: [sets objectAtIndex: row]]; [aCell setEnabled: YES]; } else { [aCell setStringValue: @""]; [aCell setEnabled: NO]; } [aCell setLeaf: YES]; } - (void) dealloc { RELEASE(gets); RELEASE(sets); RELEASE(types); [super dealloc]; } - (void) ok: (id)sender { NSString *name = [[browser selectedCell] stringValue]; NSUInteger pos; if (name == nil || (pos = [sets indexOfObject: name]) == NSNotFound) { [label setTitle: _(@"No Type")]; [value setStringValue: @""]; [okButton setEnabled: NO]; } else { SEL set = NSSelectorFromString(name); NSString *type = [types objectForKey: name]; [super ok: sender]; if (type == typeChar) { char v = [value intValue]; void (*imp)(id,SEL,char); imp = (void (*)(id,SEL,char))[object methodForSelector: set]; (*imp)(object, set, v); } else if (type == typeUChar) { unsigned char v = [value intValue]; void (*imp)(id,SEL,unsigned char); imp = (void (*)(id,SEL,unsigned char))[object methodForSelector: set]; (*imp)(object, set, v); } else if (type == typeInt) { int v = [value intValue]; void (*imp)(id,SEL,int); imp = (void (*)(id,SEL,int))[object methodForSelector: set]; (*imp)(object, set, v); } else if (type == typeUInt) { unsigned int v = [value intValue]; void (*imp)(id,SEL,unsigned int); imp = (void (*)(id,SEL,unsigned int))[object methodForSelector: set]; (*imp)(object, set, v); } else if (type == typeFloat) { float v = [value floatValue]; void (*imp)(id,SEL,float); imp = (void (*)(id,SEL,float))[object methodForSelector: set]; (*imp)(object, set, v); } else if (type == typeDouble) { float v = [value doubleValue]; void (*imp)(id,SEL,double); imp = (void (*)(id,SEL,double))[object methodForSelector: set]; (*imp)(object, set, v); } else { id v = [value stringValue]; IMP imp = [object methodForSelector: set]; if (isString == YES) { (*imp)(object, set, v); } else { int result; v = [v stringByTrimmingSpaces]; result = NSRunAlertPanel(_(@"Settings"), [NSString stringWithFormat: _(@"Set object using '%@' as"), v], _(@"Object name"),_( @"String"), _(@"Class name")); if (result == NSAlertAlternateReturn) { (*imp)(object, set, v); } else if (result == NSAlertOtherReturn) { Class c = NSClassFromString(v); if (c != 0) { (*imp)(object, set, [[c alloc] init]); } } else { id o = [[(id)[NSApp delegate] activeDocument] objectForName: v]; if (o != nil) { (*imp)(object, set, o); } } } } [self update: self]; } } - (void) setObject: (id)anObject { if (anObject != nil && anObject != object) { Class c = [anObject class]; ASSIGN(object, anObject); [sets removeAllObjects]; [gets removeAllObjects]; [types removeAllObjects]; while (c != nil && c != [NSObject class]) { unsigned int count; Method *methods = class_copyMethodList(c, &count); int i; for (i = 0; i < count; i++) { SEL sSel = method_getName(methods[i]); NSString *set = NSStringFromSelector(sSel); /* * We are interested in methods that set values - they have * a 'set' prefic and a colon as the last character. * we ignore duplicates from superclasses. */ if ([set hasPrefix: @"set"] == YES && [set rangeOfString: @":"].location == [set length] - 1 && [sets containsObject: set] == NO) { char tmp[[set cStringLength]+1]; const char *tInfo = method_getTypeEncoding(methods[i]); NSString *type = nil; NSString *get; SEL gSel; /* * see if we can find an appropriate method to get the * current value for an attribute we want to set. */ [set getCString: tmp]; tmp[3] = tolower(tmp[3]); tmp[strlen(tmp)-1] = '\0'; get = [NSString stringWithCString: &tmp[3]]; gSel = NSSelectorFromString(get); if (gSel == 0 || [object respondsToSelector: gSel] == NO) { get = nil; } /* * Skip the return type and the receiver and * selector specifications to the first (only) arg. */ tInfo = objc_skip_typespec(tInfo); if (*tInfo == '+') { tInfo++; } while (isdigit(*tInfo)) { tInfo++; } tInfo = objc_skip_argspec(tInfo); tInfo = objc_skip_argspec(tInfo); /* * Now find arguments whose types we can reasonably * deal with. */ switch (*tInfo) { case _C_ID: type = typeId; break; case _C_CHR: type = typeChar; break; case _C_UCHR: type = typeUChar; break; case _C_INT: type = typeInt; break; case _C_UINT: type = typeUInt; break; case _C_FLT: type = typeFloat; break; case _C_DBL: type = typeDouble; break; default: type = nil; break; } if (type != nil) { [sets addObject: set]; if (get != nil) { [gets setObject: get forKey: set]; } [types setObject: type forKey: set]; } } } free(methods); c = [c superclass]; } [sets sortUsingSelector: @selector(compare:)]; [browser loadColumnZero]; [self update: self]; } } - (void) update: (id)sender { NSString *name = [[browser selectedCell] stringValue]; NSUInteger pos; isString = NO; if (name == nil || (pos = [sets indexOfObject: name]) == NSNotFound) { [label setTitle: _(@"No Type")]; [value setStringValue: @""]; [okButton setEnabled: NO]; } else if ([gets objectForKey: name] != nil) { SEL get = NSSelectorFromString([gets objectForKey: name]); NSString *type = [types objectForKey: name]; [label setTitle: type]; if (type == typeChar) { char v; char (*imp)(); imp = (char (*)())[object methodForSelector: get]; v = (*imp)(object, get); [value setStringValue: [NSString stringWithFormat: @"%d", v]]; } else if (type == typeUChar) { unsigned char v; unsigned char (*imp)(); imp = (unsigned char (*)())[object methodForSelector: get]; v = (*imp)(object, get); [value setStringValue: [NSString stringWithFormat: @"%d", v]]; } else if (type == typeInt) { int v; int (*imp)(); imp = (int (*)())[object methodForSelector: get]; v = (*imp)(object, get); [value setStringValue: [NSString stringWithFormat: @"%d", v]]; } else if (type == typeUInt) { unsigned v; unsigned (*imp)(); imp = (unsigned (*)()) [object methodForSelector: get]; v = (*imp)(object, get); [value setStringValue: [NSString stringWithFormat: @"%u", v]]; } else if (type == typeFloat) { float v; float (*imp)(); imp = (float (*)())[object methodForSelector: get]; v = (*imp)(object, get); [value setStringValue: [NSString stringWithFormat: @"%f", v]]; } else if (type == typeDouble) { double v; double (*imp)(); imp = (double (*)())[object methodForSelector: get]; v = (*imp)(object, get); [value setStringValue: [NSString stringWithFormat: @"%g", v]]; } else { id v; IMP imp = [object methodForSelector: get]; v = (*imp)(object, get); if (v != nil && [v isKindOfClass: [NSString class]] == YES) { isString = YES; /* Existing value is a string. */ } [value setStringValue: [v description]]; } [okButton setEnabled: YES]; } else { [label setTitle: [NSString stringWithFormat: _(@"%@ - value unknown"), [types objectForKey: name]]]; [value setStringValue: @""]; [okButton setEnabled: YES]; } } - (BOOL) wantsButtons { return YES; } @end apps-gorm-gorm-1_5_0/GormCore/GormObjectViewController.h000066400000000000000000000016341475375552500233740ustar00rootroot00000000000000/* All rights reserved */ #ifndef GormObjectViewController_H_INCLUDE #define GormObjectViewController_H_INCLUDE #import @class GormDocument; @interface GormObjectViewController : NSViewController { IBOutlet id displayView; IBOutlet id iconButton; IBOutlet id outlineButton; IBOutlet id editorButton; // Document GormDocument *_document; id _iconView; id _outlineView; // Editor flag BOOL _editor; } - (GormDocument *) document; - (void) setDocument: (GormDocument *)document; - (id) iconView; - (void) setIconView: (id)iconView; - (id) outlineView; - (void) setOutlineView: (id)outlineView; - (BOOL) editor; - (void) setEditor: (BOOL)f; - (void) resetDisplayView: (NSView *)view; - (void) reloadOutlineView; - (IBAction) iconView: (id)sender; - (IBAction) outlineView: (id)sender; - (IBAction) editorButton: (id)sender; @end #endif // GormObjectViewController_H_INCLUDE apps-gorm-gorm-1_5_0/GormCore/GormObjectViewController.m000066400000000000000000000033451475375552500234020ustar00rootroot00000000000000/* All rights reserved */ #import "GormObjectViewController.h" #import "GormDocument.h" #import "GormObjectEditor.h" @implementation GormObjectViewController - (instancetype) init { self = [super init]; if (self != nil) { _document = nil; _iconView = nil; _outlineView = nil; _editor = NO; } return self; } - (void) dealloc { RELEASE(_document); RELEASE(_iconView); RELEASE(_outlineView); [super dealloc]; } - (GormDocument *) document { return _document; } - (void) setDocument: (GormDocument *)document { ASSIGN(_document, document); } - (id) iconView { return _iconView; } - (void) setIconView: (id)iconView { ASSIGN(_iconView, iconView); } - (id) outlineView { return _outlineView; } - (void) setOutlineView: (id)outlineView { ASSIGN(_outlineView, outlineView); } - (BOOL) editor { return _editor; } - (void) setEditor: (BOOL)f { _editor = f; } - (IBAction) iconView: (id)sender { NSDebugLog(@"Called %@", NSStringFromSelector(_cmd)); [self resetDisplayView: _iconView]; } - (IBAction) outlineView: (id)sender { NSDebugLog(@"Called %@", NSStringFromSelector(_cmd)); [_document deactivateEditors]; [[_outlineView documentView] reloadData]; [_document reactivateEditors]; [self resetDisplayView: _outlineView]; } - (IBAction) editorButton: (id)sender { _editor = !_editor; [[_outlineView documentView] reloadData]; } - (void) resetDisplayView: (NSView *)view { [displayView setContentView: view]; NSDebugLog(@"displayView = %@", view); } - (void) reloadOutlineView { if (_editor == NO) { [_document deactivateEditors]; } [[_outlineView documentView] reloadData]; if (_editor == NO) { [_document reactivateEditors]; } } @end apps-gorm-gorm-1_5_0/GormCore/GormOpenGLView.h000066400000000000000000000022671475375552500212510ustar00rootroot00000000000000/* GormOpenGLView.h - Demo view for show when displaying a NSOpenGLView during * testing only. * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormOpenGLView_h #define INCLUDED_GormOpenGLView_h #include @class NSTimer; @interface GormOpenGLView : NSView { float rtri; NSTimer *timer; } @end #endif apps-gorm-gorm-1_5_0/GormCore/GormOpenGLView.m000066400000000000000000000035051475375552500212520ustar00rootroot00000000000000/* GormOpenGLView.h - Demo view for show when displaying a NSOpenGLView during * testing only. * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include // #include // #include @implementation GormOpenGLView - (id) initWithFrame: (NSRect)rect { if((self = [super initWithFrame: rect]) != nil) { /* rtri = 0.0f; timer = [NSTimer scheduledTimerWithTimeInterval: 0.05 target: self selector: @selector(oneStep) userInfo: nil repeats: YES]; */ } return self; } - (void) dealloc { // [timer invalidate]; [super dealloc]; } - (void) oneStep { // rotate. // rtri -= 0.2f; rtri = 0.5f; [self setNeedsDisplay: YES]; } - (void) drawRect: (NSRect)rect { // do nothing for now... [[NSColor blackColor] set]; PSrectfill(NSMinX(rect), NSMinY(rect), NSWidth(rect), NSHeight(rect)); } @end apps-gorm-gorm-1_5_0/GormCore/GormOutlineView.h000066400000000000000000000063561475375552500215470ustar00rootroot00000000000000/* GormOutlineView.h The outline class. Copyright (C) 2001 Free Software Foundation, Inc. Author: Gregory John Casamento Date: July 2002 This file is part of the GNUstep GUI Library. 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 3 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. */ #ifndef INCLUDED_GormOutlineView_h #define INCLUDED_GormOutlineView_h #include #include @class NSTableColumn; @class NSMenuItem; typedef enum {None, Outlets, Actions} GSAttributeType; @interface GormOutlineView : NSOutlineView { float _attributeOffset; BOOL _isEditing; id _itemBeingEdited; NSTableColumn *_actionColumn; NSTableColumn *_outletColumn; GSAttributeType _edittype; NSMenuItem *_menuItem; } // Instance methods - (float)attributeOffset; - (void)setAttributeOffset: (float)offset; - (id) itemBeingEdited; - (void) setItemBeingEdited: (id)item; - (BOOL) isEditing; - (void) setIsEditing: (BOOL)flag; - (NSTableColumn *)actionColumn; - (void) setActionColumn: (NSTableColumn *)ac; - (NSTableColumn *)outletColumn; - (void) setOutletColumn: (NSTableColumn *)oc; - (NSMenuItem *)menuItem; - (void) setMenuItem: (NSMenuItem *)item; - (GSAttributeType)editType; - (void) removeItemAtRow: (int)row; - (void) reset; - (void) selectRow: (int)rowIndex; @end /* interface of GormOutlineView */ // informal protocol to define necessary methods on // GormOutlineView's data source to make information // about the class which was selected... @interface NSObject (GormOutlineViewDataSource) - (NSArray *) outlineView: (GormOutlineView *)ov actionsForItem: (id)item; - (NSArray *) outlineView: (GormOutlineView *)ov outletsForItem: (id)item; - (void)outlineView: (NSOutlineView *)anOutlineView addAction: (NSString *)action forClass: (id)item; - (void)outlineView: (NSOutlineView *)anOutlineView addOutlet: (NSString *)outlet forClass: (id)item; - (NSString *)outlineView: (NSOutlineView *)anOutlineView addNewActionForClass: (id)item; - (NSString *)outlineView: (NSOutlineView *)anOutlineView addNewOutletForClass: (id)item; @end @interface NSObject (GormOutlineViewDelegate) - (BOOL) outlineView: (GormOutlineView *)ov shouldDeleteItem: (id)item; @end // a class to hold the outlet/actions so that the // draw row method will know how to render them on // the display... @interface GormOutletActionHolder : NSObject { NSString *_name; } - initWithName: (NSString *)name; - (NSString *)getName; - (void)setName: (NSString *)name; @end #endif /* _GNUstep_H_GormOutlineView */ apps-gorm-gorm-1_5_0/GormCore/GormOutlineView.m000066400000000000000000000502001475375552500215370ustar00rootroot00000000000000/** GormOutlineView The NSOutlineView subclass in gorm which handles outlet/action editing Copyright (C) 2001 Free Software Foundation, Inc. Author: Gregory John Casamento Date: July 2002 This file is part of the GNUstep GUI Library. 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 3 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. */ #include #include #include "GormOutlineView.h" static NSNotificationCenter *nc = nil; static const NSInteger current_version = 1; // Cache the arrow images... static NSImage *collapsed = nil; static NSImage *expanded = nil; static NSImage *unexpandable = nil; static NSImage *action = nil; static NSImage *outlet = nil; static NSImage *actionSelected = nil; static NSImage *outletSelected = nil; // some common colors which will be used to indicate state in the outline // view. static NSColor *salmonColor = nil; static NSColor *darkSalmonColor = nil; static NSColor *lightGreyBlueColor = nil; static NSColor *darkGreyBlueColor = nil; @implementation GormOutletActionHolder - init { [super init]; _name = nil; return self; } - initWithName: (NSString *)name { [self init]; ASSIGN(_name,name); return self; } - (NSString *)getName { return _name; } - (void)setName: (NSString *)name { ASSIGN(_name,name); } @end @implementation GormOutlineView // Initialize the class when it is loaded + (void) initialize { if (self == [GormOutlineView class]) { NSBundle *bundle = [NSBundle bundleForClass: self]; NSString *path = nil; // initialize images [self setVersion: current_version]; nc = [NSNotificationCenter defaultCenter]; collapsed = [NSImage imageNamed: @"common_outlineCollapsed"]; expanded = [NSImage imageNamed: @"common_outlineExpanded"]; unexpandable = [NSImage imageNamed: @"common_outlineUnexpandable"]; path = [bundle pathForImageResource: @"GormAction"]; action = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormOutlet"]; outlet = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormActionSelected"]; actionSelected = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormOutletSelected"]; outletSelected = [[NSImage alloc] initWithContentsOfFile: path]; // initialize colors salmonColor = RETAIN([NSColor colorWithCalibratedRed: 0.850980 green: 0.737255 blue: 0.576471 alpha: 1.0 ]); darkSalmonColor = RETAIN([NSColor colorWithCalibratedRed: 0.568627 green: 0.494118 blue: 0.384314 alpha: 1.0 ]); lightGreyBlueColor = RETAIN([NSColor colorWithCalibratedRed: 0.450980 green: 0.450980 blue: 0.521569 alpha: 1.0 ]); darkGreyBlueColor = RETAIN([NSColor colorWithCalibratedRed: 0.333333 green: 0.333333 blue: 0.384314 alpha: 1.0 ]); } } - (void) _handleDoubleClick: (id)sender { NSDebugLog(@"Double clicked"); } - init { if((self = [super init]) != nil) { _actionColumn = nil; _outletColumn = nil; _isEditing = NO; _attributeOffset = 0.0; _edittype = None; _menuItem = nil; [self setDoubleAction: @selector(_handleDoubleClick:)]; [self setTarget: self]; } return self; } - (void) collapseItem: (id)item collapseChildren: (BOOL)collapseChildren; { if (!_isEditing) { // [self deselectAll: self]; [super collapseItem: item collapseChildren: collapseChildren]; } } - (void) expandItem: (id)item expandChildren: (BOOL)expandChildren { if (!_isEditing) { // [self deselectAll: self]; [super expandItem: item expandChildren: expandChildren]; } } - (BOOL) _isOutletOrActionOfItemBeingEdited: (NSString *)name { NSArray *array = nil; array = [_dataSource outlineView: self actionsForItem: _itemBeingEdited]; if ([array containsObject: name]) return YES; array = [_dataSource outlineView: self outletsForItem: _itemBeingEdited]; if ([array containsObject: name]) return YES; return NO; } - (void) _addNewActionToObject: (id)item { NSUInteger insertionPoint = 0; NSString *name = nil; GormOutletActionHolder *holder = [[GormOutletActionHolder alloc] init]; name = [_dataSource outlineView: self addNewActionForClass: _itemBeingEdited]; if (name != nil) { _numberOfRows += 1; [holder setName: name]; insertionPoint = [_items indexOfObject: item]; [_items insertObject: holder atIndex: insertionPoint + 1]; [self setNeedsDisplay: YES]; [self noteNumberOfRowsChanged]; } } - (void) _addNewOutletToObject: (id)item { NSUInteger insertionPoint = 0; GormOutletActionHolder *holder = [[GormOutletActionHolder alloc] init]; NSString *name = nil; _numberOfRows += 1; name = [_dataSource outlineView: self addNewOutletForClass: _itemBeingEdited]; if (name != nil) { [holder setName: name]; insertionPoint = [_items indexOfObject: item]; [_items insertObject: holder atIndex: insertionPoint + 1]; [self setNeedsDisplay: YES]; [self noteNumberOfRowsChanged]; } } - (void) removeItemAtRow: (int)row { [_items removeObjectAtIndex: row]; _numberOfRows -= 1; [self setNeedsDisplay: YES]; [self noteNumberOfRowsChanged]; } - (void)_openActions: (id)item { NSInteger numchildren = 0; NSInteger i = 0; NSUInteger insertionPoint = 0; id object = nil; id sitem = (item == nil)?((id)[NSNull null]):((id)item); object = [_dataSource outlineView: self actionsForItem: sitem]; numchildren = [object count]; _numberOfRows += numchildren; // open the item... if (item != nil) { [self setItemBeingEdited: item]; [self setIsEditing: YES]; } insertionPoint = [_items indexOfObject: item]; if (insertionPoint == NSNotFound) { insertionPoint = 0; } else { insertionPoint++; } [self setNeedsDisplay: YES]; for (i = numchildren - 1; i >= 0; i--) { id child = [object objectAtIndex: i]; // Add all of the children... GormOutletActionHolder *holder; holder = [[GormOutletActionHolder alloc] initWithName: child]; [_items insertObject: holder atIndex: insertionPoint]; } [self noteNumberOfRowsChanged]; } - (void) _openOutlets: (id)item { NSInteger numchildren = 0; NSInteger i = 0; NSInteger insertionPoint = 0; id object = nil; id sitem = (item == nil)?((id)[NSNull null]):((id)item); object = [_dataSource outlineView: self outletsForItem: sitem]; numchildren = [object count]; _numberOfRows += numchildren; // open the item... if (item != nil) { [self setItemBeingEdited: item]; [self setIsEditing: YES]; } insertionPoint = [_items indexOfObject: item]; if (insertionPoint == NSNotFound) { insertionPoint = 0; } else { insertionPoint++; } [self setNeedsDisplay: YES]; for (i = numchildren - 1; i >= 0; i--) { id child = [object objectAtIndex: i]; // Add all of the children... GormOutletActionHolder *holder; holder = [[GormOutletActionHolder alloc] initWithName: child]; [_items insertObject: holder atIndex: insertionPoint]; } [self noteNumberOfRowsChanged]; } - (void) drawRow: (NSInteger)rowIndex clipRect: (NSRect)aRect { NSInteger startingColumn; NSInteger endingColumn; NSTableColumn *tb; NSRect drawingRect; NSCell *cell; NSCell *imageCell = nil; NSRect imageRect; NSInteger i; float x_pos; if (_dataSource == nil) { return; } /* Using columnAtPoint: here would make it called twice per row per drawn rect - so we avoid it and do it natively */ if (rowIndex >= _numberOfRows) { return; } /* Determine starting column as fast as possible */ x_pos = NSMinX (aRect); i = 0; while ((x_pos > _columnOrigins[i]) && (i < _numberOfColumns)) { i++; } startingColumn = (i - 1); if (startingColumn == -1) startingColumn = 0; /* Determine ending column as fast as possible */ x_pos = NSMaxX (aRect); // Nota Bene: we do *not* reset i while ((x_pos > _columnOrigins[i]) && (i < _numberOfColumns)) { i++; } endingColumn = (i - 1); if (endingColumn == -1) endingColumn = _numberOfColumns - 1; /* Draw the row between startingColumn and endingColumn */ for (i = startingColumn; i <= endingColumn; i++) { if (i != _editedColumn || rowIndex != _editedRow) { id item = [self itemAtRow: rowIndex]; id value = nil, valueforcell = nil; BOOL isOutletAction = NO; tb = [_tableColumns objectAtIndex: i]; cell = [tb dataCellForRow: rowIndex]; value = [_dataSource outlineView: self objectValueForTableColumn: tb byItem: item]; if ([value isKindOfClass: [GormOutletActionHolder class]]) { valueforcell = [value getName]; isOutletAction = YES; } else { valueforcell = value; isOutletAction = NO; } if ([_delegate respondsToSelector: @selector(outlineView:willDisplayCell:forTableColumn:item:)]) { [_delegate outlineView: self willDisplayCell: cell forTableColumn: tb item: item]; } [cell setObjectValue: valueforcell]; drawingRect = [self frameOfCellAtColumn: i row: rowIndex]; if (isOutletAction) { drawingRect.origin.x += _attributeOffset; drawingRect.size.width -= _attributeOffset; } if (tb == _outlineTableColumn && !isOutletAction) { NSImage *image = nil; NSInteger level = 0; float indentationFactor = 0.0; // display the correct arrow... if ([self isItemExpanded: item]) { image = expanded; } else { image = collapsed; } if (![self isExpandable: item]) { image = unexpandable; } level = [self levelForItem: item]; indentationFactor = _indentationPerLevel * level; imageCell = [[NSCell alloc] initImageCell: image]; if (_indentationMarkerFollowsCell) { imageRect.origin.x = drawingRect.origin.x + indentationFactor; imageRect.origin.y = drawingRect.origin.y; } else { imageRect.origin.x = drawingRect.origin.x; imageRect.origin.y = drawingRect.origin.y; } imageRect.size.width = [image size].width; imageRect.size.height = [image size].height; [imageCell drawWithFrame: imageRect inView: self]; drawingRect.origin.x += indentationFactor + [image size].width + 5; drawingRect.size.width -= indentationFactor + [image size].width + 5; // [cell drawWithFrame: drawingRect inView: self]; } else if ((tb == _actionColumn || tb == _outletColumn) && isOutletAction == NO) { NSImage *image = nil; if (item == _itemBeingEdited && tb == _actionColumn && _edittype == Actions) image = actionSelected; else if (item == _itemBeingEdited && tb == _outletColumn && _edittype == Outlets) image = outletSelected; else image = (tb == _actionColumn)?action:outlet; // Prepare image cell... imageCell = [[NSCell alloc] initImageCell: image]; imageRect.origin.x = drawingRect.origin.x; imageRect.origin.y = drawingRect.origin.y; imageRect.size.width = [image size].width; imageRect.size.height = [image size].height; [imageCell drawWithFrame: imageRect inView: self]; // Adjust drawing rect of cell being displayed... drawingRect.origin.x += [image size].width + 5; drawingRect.size.width -= [image size].width + 5; // [cell drawWithFrame: drawingRect inView: self]; } if (((tb != _outletColumn || tb != _actionColumn) && !isOutletAction) || (tb == _outlineTableColumn)) { [cell drawWithFrame: drawingRect inView: self]; } } } } - (void) reset { [self setItemBeingEdited: nil]; [self setIsEditing: NO]; [self setBackgroundColor: salmonColor]; [self reloadData]; } - (void) mouseDown: (NSEvent *)theEvent { NSPoint location = [theEvent locationInWindow]; NSTableColumn *tb; NSImage *image = nil; id _clickedItem = nil; BOOL isActionOrOutlet = NO; location = [self convertPoint: location fromView: nil]; _clickedRow = [self rowAtPoint: location]; _clickedColumn = [self columnAtPoint: location]; _clickedItem = [self itemAtRow: _clickedRow]; isActionOrOutlet = [_clickedItem isKindOfClass: [GormOutletActionHolder class]]; tb = [_tableColumns objectAtIndex: _clickedColumn]; if (tb == _actionColumn) { image = action; } else if (tb == _outletColumn) { image = outlet; } if ((tb == _actionColumn || tb == _outletColumn) && !_isEditing) { NSInteger position = 0; position += _columnOrigins[_clickedColumn] + 5; if (location.x >= position && location.x <= position + [image size].width + 5) { [self setItemBeingEdited: _clickedItem]; [self setIsEditing: YES]; // [self setBackgroundColor: darkSalmonColor]; // for later if (tb == _actionColumn) { _edittype = Actions; [self _openActions: _clickedItem]; } else if (tb == _outletColumn) { _edittype = Outlets; [self _openOutlets: _clickedItem]; } } [super mouseDown: theEvent]; } else if (_isEditing && !isActionOrOutlet) { if (_clickedItem != [self itemBeingEdited] && !isActionOrOutlet) { [self reset]; } else if (tb == _actionColumn) { if (_edittype != Actions) { [self reset]; _edittype = Actions; [self _openActions: _clickedItem]; } } else /* tb == _outletColumn */ { if (_edittype != Outlets) { [self reset]; _edittype = Outlets; [self _openOutlets: _clickedItem]; } } } else { [super mouseDown: theEvent]; } } // additional methods for subclass - (void) setAttributeOffset: (float)offset { _attributeOffset = offset; } - (float) attributeOffset { return _attributeOffset; } - (void) setItemBeingEdited: (id)item { _itemBeingEdited = item; } - (id) itemBeingEdited { return _itemBeingEdited; } - (void) setIsEditing: (BOOL)flag { _isEditing = flag; } - (BOOL) isEditing { return _isEditing; } - (void)setActionColumn: (NSTableColumn *)ac { ASSIGN(_actionColumn,ac); } - (NSTableColumn *)actionColumn { return _actionColumn; } - (void)setOutletColumn: (NSTableColumn *)oc { ASSIGN(_outletColumn,oc); } - (NSTableColumn *)outletColumn { return _outletColumn; } - (void)setMenuItem: (NSMenuItem *)item { ASSIGN(_menuItem, item); } - (NSMenuItem *)menuItem { return _menuItem; } - (GSAttributeType)editType { return _edittype; } - (void) editColumn: (NSInteger) columnIndex row: (NSInteger) rowIndex withEvent: (NSEvent *) theEvent select: (BOOL) flag { NSText *t; NSTableColumn *tb; NSRect drawingRect, imageRect; unsigned length = 0; id item = nil; NSInteger level = 0; float indentationFactor = 0.0; NSImage *image = nil; NSCell *imageCell = nil; id value = nil; BOOL isOutletOrAction = NO; // We refuse to edit cells if the delegate can not accept results // of editing. if (_dataSource_editable == NO) { return; } [self scrollRowToVisible: rowIndex]; [self scrollColumnToVisible: columnIndex]; if (rowIndex < 0 || rowIndex >= _numberOfRows || columnIndex < 0 || columnIndex >= _numberOfColumns) { [NSException raise: NSInvalidArgumentException format: @"Row/column out of index in edit"]; } if (_textObject != nil) { [self validateEditing]; [self abortEditing]; } // Now (_textObject == nil) t = [_window fieldEditor: YES forObject: self]; if ([t superview] != nil) { if ([t resignFirstResponder] == NO) { return; } } _editedRow = rowIndex; _editedColumn = columnIndex; item = [self itemAtRow: _editedRow]; // Prepare the cell tb = [_tableColumns objectAtIndex: columnIndex]; // NB: need to be released when no longer used _editedCell = [[tb dataCellForRow: rowIndex] copy]; value = [_dataSource outlineView: self objectValueForTableColumn: tb byItem: item]; if ([value isKindOfClass: [GormOutletActionHolder class]]) { isOutletOrAction = YES; value = [value getName]; } [_editedCell setEditable: YES]; [_editedCell setObjectValue: value]; // We really want the correct background color! if ([_editedCell respondsToSelector: @selector(setBackgroundColor:)]) { [(NSTextFieldCell *)_editedCell setBackgroundColor: _backgroundColor]; } else { [t setBackgroundColor: _backgroundColor]; } // But of course the delegate can mess it up if it wants if (_del_responds) { [_delegate outlineView: self willDisplayCell: _editedCell forTableColumn: tb item: [self itemAtRow: rowIndex]]; } /* Please note the important point - calling stringValue normally causes the _editedCell to call the validateEditing method of its control view ... which happens to be this object :-) but we don't want any spurious validateEditing to be performed before the actual editing is started (otherwise you easily end up with the table view picking up the string stored in the field editor, which is likely to be the string resulting from the last edit somewhere else ... getting into the bug that when you TAB from one cell to another one, the string is copied!), so we must call stringValue when _textObject is still nil. */ if (flag) { length = [[_editedCell stringValue] length]; } _textObject = [_editedCell setUpFieldEditorAttributes: t]; // determine which image to use... if ([self isItemExpanded: item]) { image = expanded; } else { image = collapsed; } if (![self isExpandable: item]) { image = unexpandable; } // move the drawing rect over like in the drawRow routine... level = [self levelForItem: item]; indentationFactor = _indentationPerLevel * level; drawingRect = [self frameOfCellAtColumn: columnIndex row: rowIndex]; if (isOutletOrAction) { drawingRect.origin.x += _attributeOffset; drawingRect.size.width -= _attributeOffset; } else { drawingRect.origin.x += indentationFactor + 5 + [image size].width; drawingRect.size.width -= indentationFactor + 5 + [image size].width; } // create the image cell.. imageCell = [[NSCell alloc] initImageCell: image]; if (_indentationMarkerFollowsCell) { imageRect.origin.x = drawingRect.origin.x + indentationFactor; imageRect.origin.y = drawingRect.origin.y; } else { imageRect.origin.x = drawingRect.origin.x; imageRect.origin.y = drawingRect.origin.y; } // draw... imageRect.size.width = [image size].width; imageRect.size.height = [image size].height; [imageCell drawWithFrame: imageRect inView: self]; if (flag) { [_editedCell selectWithFrame: drawingRect inView: self editor: _textObject delegate: self start: 0 length: length]; } else { [_editedCell editWithFrame: drawingRect inView: self editor: _textObject delegate: self event: theEvent]; } return; } - (void) selectRow: (int)rowIndex { [self setNeedsDisplayInRect: [self rectOfRow: rowIndex]]; [_selectedRows addIndex: rowIndex]; _selectedRow = rowIndex; } @end /* implementation of GormOutlineView */ apps-gorm-gorm-1_5_0/GormCore/GormPalettesManager.h000066400000000000000000000042441475375552500223430ustar00rootroot00000000000000/* GormPalettesManager.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Author: Richard Frith-Macdonald * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormPalettesManager_h #define INCLUDED_GormPalettesManager_h #include @class NSMutableArray, NSMutableDictionary, NSDictionary, NSArray, NSBundle; @class NSPanel, NSMatrix, NSView; @interface GormPalettesManager : NSObject { NSPanel *panel; NSMatrix *selectionView; NSView *dragView; NSMutableArray *bundles; NSMutableArray *palettes; int current; BOOL hiddenDuringTest; NSMutableDictionary *importedClasses; NSMutableArray *importedImages; NSMutableArray *importedSounds; NSMutableDictionary *substituteClasses; } // methods for loading and display the palette panels - (BOOL) loadPalette: (NSString*)path; - (id) openPalette: (id) sender; - (NSPanel*) panel; - (void) setCurrentPalette: (id)anObject; // methods for importing stuff from palettes - (void) importClasses: (NSArray *)classes withDictionary: (NSDictionary *)dict; - (NSDictionary *) importedClasses; - (void) importImages: (NSArray *)images withBundle: (NSBundle *) bundle; - (NSArray *) importedImages; - (void) importSounds: (NSArray *)sounds withBundle: (NSBundle *) bundle; - (NSArray *) importedSounds; - (NSDictionary *) substituteClasses; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPalettesManager.m000066400000000000000000000556601475375552500223600ustar00rootroot00000000000000/* GormPalettesManager.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormPrivate.h" #include "GormFunctions.h" #define BUILTIN_PALETTES @"BuiltinPalettes" #define USER_PALETTES @"UserPalettes" @interface GormPalettePanel : NSPanel @end @implementation GormPalettePanel @end @interface GormPaletteView : NSView { NSPasteboard *dragPb; } - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f; - (NSDragOperation) draggingSourceOperationMaskForLocal: (BOOL)flag; @end @implementation GormPaletteView static NSImage *dragImage = nil; + (void) initialize { if (self == [GormPaletteView class]) { // nothing to do... } } - (BOOL) acceptsFirstMouse: (NSEvent*)theEvent { return YES; /* Ensure we get initial mouse down event. */ } /* * Initialisation - register to receive DnD with our own types. */ - (id) initWithFrame: (NSRect)aFrame { self = [super initWithFrame: aFrame]; if (self != nil) { [self registerForDraggedTypes: [NSArray arrayWithObjects: IBCellPboardType, IBMenuPboardType, IBMenuCellPboardType, IBObjectPboardType, IBViewPboardType, IBWindowPboardType, IBFormatterPboardType,nil]]; [self setAutoresizingMask: NSViewMinXMargin|NSViewMinYMargin|NSViewMaxXMargin|NSViewMaxYMargin]; } return self; } - (void) dealloc { DESTROY(dragPb); [super dealloc]; } - (void) resizeWithOldSuperviewSize: (NSSize)oldSize { NSSize newSize = [[self superview] frame].size; NSRect frame = [self frame]; frame.origin.x -= floorf((oldSize.width - newSize.width) / 2); frame.origin.y -= floorf((oldSize.height - newSize.height) / 2); [self setFrameOrigin: frame.origin]; } /* * Dragging source protocol implementation */ - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f { NSString *type = [[dragPb types] lastObject]; /* * Windows and Menus are an exception to the normal DnD mechanism - * we create them if they are dropped anywhere except back in the \ * pallettes view ie. if they are dragged, but the drop fails. */ if (f == NO && ([type isEqual: IBWindowPboardType] == YES || [type isEqual: IBMenuPboardType] == YES)) { id active = [(id)[NSApp delegate] activeDocument]; if (active != nil) { [active pasteType: type fromPasteboard: dragPb parent: nil]; } } } - (NSDragOperation) draggingSourceOperationMaskForLocal: (BOOL)flag { return NSDragOperationCopy; } /* * Dragging destination protocol implementation * * We actually don't handle anything being dropped on the palette, * but we pretend to accept drops from ourself, so that the drag * session quietly terminates - and it looks like the drop has * been successful - this stops windows being created when they are * dropped back on the palette (a window is normally created if the * dnd drop is refused). */ - (NSDragOperation) draggingEntered: (id)sender { return NSDragOperationCopy; } - (BOOL) performDragOperation: (id)sender { return YES; } - (BOOL) prepareForDragOperation: (id)sender { return YES; } /* * Intercepting events in the view and handling them */ - (NSView*) hitTest: (NSPoint)loc { /* * Stop the subviews receiving events - we grab them all. */ if ([super hitTest: loc] != nil) return self; return nil; } - (void) mouseDown: (NSEvent*)theEvent { NSPoint dragPoint = [theEvent locationInWindow]; NSWindow *w = [self window]; NSView *view; GormDocument *active = (GormDocument *)[(id)[NSApp delegate] activeDocument]; NSRect rect; NSString *type; id obj; NSPasteboard *pb; NSImageRep *rep; NSMenu *menu; if ([self superview] != nil) { dragPoint = [[self superview] convertPoint: dragPoint fromView: nil]; } view = [super hitTest: dragPoint]; if (view == self || view == nil) { return; // No subview to drag. } /* Make sure we're dragging the proper control and not a subview of a control (like the contentView of an NSBox) */ while (view != nil && [view superview] != self) view = [view superview]; // this will always get the correct coordinates... rect = [[view superview] convertRect: [view frame] toView: nil]; if (active == nil) { NSRunAlertPanel (nil, _(@"No document is currently active"), _(@"OK"), nil, nil); return; } RELEASE(dragImage); dragImage = [[NSImage alloc] init]; [dragImage setSize: rect.size]; rep = [[NSCachedImageRep alloc] initWithSize: rect.size depth: [w depthLimit] separate: YES alpha: [w alphaValue]>0.0 ? YES : NO]; [dragImage addRepresentation: rep]; RELEASE(rep); /* Copy the contents of the clicked view from our window into the * cached image representation. * NB. We use lockFocusOnRepresentation: for this because it sets * up cached image representation information in the image, and if * that's not done before our copy, the image will overwrite our * copied data when asked to draw the representation. */ [dragImage lockFocusOnRepresentation: rep]; NSCopyBits([w gState], rect, NSZeroPoint); [dragImage unlockFocus]; type = [IBPalette typeForView: view]; obj = [IBPalette objectForView: view]; pb = [NSPasteboard pasteboardWithName: NSDragPboard]; ASSIGN(dragPb, pb); [active copyObject: obj type: type toPasteboard: pb]; NSDebugLog(@"type: %@, obj: %@,", type, obj); menu = [active objectForName: @"NSMenu"]; [self dragImage: dragImage at: [view frame].origin offset: NSMakeSize(0,0) event: theEvent pasteboard: pb source: self slideBack: ([type isEqual: IBWindowPboardType] || ([type isEqual: IBMenuPboardType] && menu == nil)) ? NO : YES]; // Temporary fix for the art backend. This is harmless, and // shouldn't effect users of xlib, but it's necessary for now // so that users can work. [self setNeedsDisplay: YES]; } @end @implementation GormPalettesManager - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE(panel); RELEASE(bundles); RELEASE(palettes); RELEASE(importedClasses); RELEASE(importedImages); RELEASE(importedSounds); RELEASE(substituteClasses); [super dealloc]; } - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if ([name isEqual: IBWillBeginTestingInterfaceNotification] == YES) { if ([panel isVisible] == YES) { hiddenDuringTest = YES; [panel orderOut: self]; } } else if ([name isEqual: IBWillEndTestingInterfaceNotification] == YES) { if (hiddenDuringTest == YES) { hiddenDuringTest = NO; [panel orderFront: self]; } } } - (id) init { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSScrollView *scrollView; NSArray *array; NSRect contentRect = {{0, 0}, {272, 266}}; NSRect selectionRect = {{0, 0}, {52, 52}}; NSRect scrollRect = {{-2, 192}, {276, 76}}; NSRect dragRect = {{0, 0}, {272, 200}}; unsigned int style = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *userPalettes = [defaults arrayForKey: USER_PALETTES]; NSEnumerator *en = nil; NSString *paletteName = nil; panel = [[GormPalettePanel alloc] initWithContentRect: contentRect styleMask: style backing: NSBackingStoreRetained defer: NO]; [panel setTitle: _(@"Palettes")]; [panel setMinSize: [panel frame].size]; // allocate arrays and dictionaries. bundles = [[NSMutableArray alloc] init]; palettes = [[NSMutableArray alloc] init]; importedClasses = [[NSMutableDictionary alloc] init]; importedImages = [[NSMutableArray alloc] init]; importedSounds = [[NSMutableArray alloc] init]; substituteClasses = [[NSMutableDictionary alloc] init]; scrollView = [[NSScrollView alloc] initWithFrame: scrollRect]; [scrollView setHasHorizontalScroller: YES]; [scrollView setHasVerticalScroller: NO]; [scrollView setAutoresizingMask: NSViewMinYMargin | NSViewWidthSizable]; [scrollView setBorderType: NSGrooveBorder]; [[scrollView horizontalScroller] setArrowsPosition: NSScrollerArrowsNone]; [scrollView setAutohidesScrollers: YES]; selectionView = [[NSMatrix alloc] initWithFrame: selectionRect mode: NSRadioModeMatrix cellClass: [NSButtonCell class] numberOfRows: 1 numberOfColumns: 0]; [selectionView setTarget: self]; [selectionView setAction: @selector(setCurrentPalette:)]; [selectionView setCellSize: NSMakeSize(52,52)]; [selectionView setIntercellSpacing: NSMakeSize(15, 0)]; [scrollView setDocumentView: selectionView]; RELEASE(selectionView); [[panel contentView] addSubview: scrollView]; RELEASE(scrollView); dragView = [[GormPaletteView alloc] initWithFrame: dragRect]; [dragView setAutoresizingMask: 0]; [[panel contentView] addSubview: dragView]; RELEASE(dragView); [panel setFrameUsingName: @"Palettes"]; [panel setFrameAutosaveName: @"Palettes"]; current = -1; // Load the palettes... array = [[NSBundle mainBundle] pathsForResourcesOfType: @"palette" inDirectory: nil]; array = [array sortedArrayUsingSelector: @selector(compare:)]; en = [array objectEnumerator]; while ((paletteName = [en nextObject]) != nil) { NSDebugLog(@"Built-in palette name = %@", paletteName); [self loadPalette: paletteName]; } // if we have any user palettes load them as well. en = [userPalettes objectEnumerator]; while ((paletteName = [en nextObject]) != nil) { NSDebugLog(@"User palette name = %@", paletteName); [self loadPalette: paletteName]; } /* * Select initial palette - this should be the standard controls palette. */ [selectionView selectCellAtRow: 0 column: 2]; [self setCurrentPalette: selectionView]; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillBeginTestingInterfaceNotification object: nil]; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillEndTestingInterfaceNotification object: nil]; return self; } - (BOOL) bundlePathIsLoaded: (NSString *)path { int col = 0; NSBundle *bundle; for (col = 0; col < [bundles count]; col++) { bundle = [bundles objectAtIndex: col]; if ([path isEqualToString: [bundle bundlePath]] == YES) { return YES; } } return NO; } - (BOOL) loadPalette: (NSString*)path { NSBundle *bundle; NSWindow *window; Class paletteClass; NSDictionary *paletteInfo; NSString *className; NSArray *exportClasses; NSArray *exportSounds; NSArray *exportImages; NSDictionary *subClasses; IBPalette *palette; NSButtonCell *cell; int col; if([self bundlePathIsLoaded: path]) { NSRunAlertPanel (nil, _(@"Palette has already been loaded"), _(@"OK"), nil, nil); return NO; } bundle = [NSBundle bundleWithPath: path]; if (bundle == nil) { NSRunAlertPanel(nil, _(@"Could not load Palette"), _(@"OK"), nil, nil); return NO; } path = [bundle pathForResource: @"palette" ofType: @"table"]; if (path == nil) { NSRunAlertPanel(nil, _(@"File 'palette.table' missing"), _(@"OK"), nil, nil); return NO; } // attempt to load the palette table in either the strings or plist format. NS_DURING { paletteInfo = [[NSString stringWithContentsOfFile: path] propertyList]; if (paletteInfo == nil) { paletteInfo = [[NSString stringWithContentsOfFile: path] propertyListFromStringsFileFormat]; if(paletteInfo == nil) { NSRunAlertPanel(_(@"Problem Loading Palette"), _(@"Failed to load 'palette.table' using strings or property list format."), _(@"OK"), nil, nil); return NO; } } } NS_HANDLER { NSString *message = [NSString stringWithFormat: _(@"Encountered exception %@ attempting to load 'palette.table'."), [localException reason]]; NSRunAlertPanel(_(@"Problem Loading Palette"), message, _(@"OK"), nil, nil); return NO; } NS_ENDHANDLER className = [paletteInfo objectForKey: @"Class"]; if (className == nil) { NSRunAlertPanel(nil, _(@"No palette class in 'palette.table'"), _(@"OK"), nil, nil); return NO; } paletteClass = [bundle classNamed: className]; if (paletteClass == 0) { NSRunAlertPanel (nil, _(@"Could not load palette class"), _(@"OK"), nil, nil); return NO; } palette = [[paletteClass alloc] init]; if ([palette isKindOfClass: [IBPalette class]] == NO) { NSRunAlertPanel (nil, _(@"Palette contains wrong type of class"), _(@"OK"), nil, nil); RELEASE(palette); return NO; } // add to the bundles list... [bundles addObject: bundle]; exportClasses = [paletteInfo objectForKey: @"ExportClasses"]; if(exportClasses != nil) { [self importClasses: exportClasses withDictionary: nil]; } exportImages = [paletteInfo objectForKey: @"ExportImages"]; if(exportImages != nil) { [self importImages: exportImages withBundle: bundle]; } exportSounds = [paletteInfo objectForKey: @"ExportSounds"]; if(exportSounds != nil) { [self importSounds: exportSounds withBundle: bundle]; } subClasses = [paletteInfo objectForKey: @"SubstituteClasses"]; if(subClasses != nil) { [substituteClasses addEntriesFromDictionary: subClasses]; } [palette finishInstantiate]; window = [palette originalWindow]; [window setExcludedFromWindowsMenu: YES]; // Resize the window appropriately so that we don't have issues // with scrolling. // if([window styleMask] & NSBorderlessWindowMask) // { // [window setFrame: NSMakeRect(0,0,272,160) display: NO]; // } // else // { // [window setFrame: NSMakeRect(0,0,272,224) display: NO]; // } [palettes addObject: palette]; [selectionView addColumn]; [[palette paletteIcon] setBackgroundColor: [selectionView backgroundColor]]; col = [selectionView numberOfColumns] - 1; cell = [selectionView cellAtRow: 0 column: col]; [cell setButtonType: NSOnOffButton]; [cell setRefusesFirstResponder: YES]; [cell setImage: [palette paletteIcon]]; [selectionView sizeToCells]; [selectionView selectCellAtRow: 0 column: col]; [self setCurrentPalette: selectionView]; RELEASE(palette); return YES; } - (id) openPalette: (id) sender { NSArray *fileTypes = [NSArray arrayWithObject: @"palette"]; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; int result; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *userPalettes = [defaults arrayForKey: USER_PALETTES]; NSMutableArray *newUserPalettes = (userPalettes == nil)?[NSMutableArray array]:[NSMutableArray arrayWithArray: userPalettes]; [oPanel setAllowsMultipleSelection: YES]; [oPanel setCanChooseFiles: YES]; [oPanel setCanChooseDirectories: NO]; result = [oPanel runModalForDirectory: NSHomeDirectory() file: nil types: fileTypes]; if (result == NSOKButton) { NSArray *filesToOpen = [oPanel filenames]; unsigned count = [filesToOpen count]; unsigned i; for (i = 0; i < count; i++) { NSString *aFile = [filesToOpen objectAtIndex: i]; if([self bundlePathIsLoaded: aFile] == YES && [userPalettes containsObject: aFile] == NO) { // This is done here so that, if we try to reload a palette // that has previously been deleted during this session that // the palette manager won't fail, but it will simply add // the palette back in. If this returns NO, then we should // flag a problem otherwise it's successful if the palette is // already in the bundles array. This is to address bug#15989. [newUserPalettes addObject: aFile]; } else if([self loadPalette: aFile] == NO) { return nil; } else { [newUserPalettes addObject: aFile]; } } // reset the defaults to include the new palette. [defaults setObject: newUserPalettes forKey: USER_PALETTES]; return self; } return nil; } - (NSPanel*) panel { return panel; } - (void) setCurrentPalette: (id)anObj { NSView *wv; NSView *sv; NSEnumerator *enumerator; if (current >= 0) { /* * Move the views in the drag view back to the content view of the * window they originally came from. */ wv = [[[palettes objectAtIndex: current] originalWindow] contentView]; enumerator = [[dragView subviews] objectEnumerator]; while ((sv = [enumerator nextObject]) != nil) { RETAIN(sv); [sv removeFromSuperview]; [wv addSubview: sv]; RELEASE(sv); } } current = [anObj selectedColumn]; if (current >= 0 && current < [palettes count]) { id palette = [palettes objectAtIndex: current]; /* * Set the window title to reflect the palette selection. */ [panel setTitle: [[palette originalWindow] title]]; /* * Move the views from their original window into our drag view. * Resize our drag view to the right size fitrst. */ wv = [[palette originalWindow] contentView]; if (wv) [dragView setFrameSize: [wv frame].size]; enumerator = [[wv subviews] objectEnumerator]; while ((sv = [enumerator nextObject]) != nil) { RETAIN(sv); [sv removeFromSuperview]; [dragView addSubview: sv]; RELEASE(sv); } } else { NSDebugLog(@"Bad palette selection - %d", (int)[anObj selectedColumn]); current = -1; } [dragView setNeedsDisplay: YES]; } - (NSMutableArray *) actionsForClass: (Class) cls { NSArray *methodArray = _GSObjCMethodNamesForClass(cls, NO); NSEnumerator *en = [methodArray objectEnumerator]; NSMethodSignature *actionSig = [NSMethodSignature signatureWithObjCTypes: "v12@0:4@8"]; NSMutableArray *actionsArray = [NSMutableArray array]; NSString *methodName = nil; NSRange setRange = NSMakeRange(0,3); while((methodName = [en nextObject]) != nil) { SEL sel = NSSelectorFromString(methodName); NSMethodSignature *signature = [cls instanceMethodSignatureForSelector: sel]; if([signature numberOfArguments] == 3) { if([actionSig isEqual: signature] && NSEqualRanges([methodName rangeOfString: @"set"], setRange) == NO && [methodName isEqual: @"encodeWithCoder:"] == NO && [methodName isEqual: @"mouseDown:"] == NO) { [actionsArray addObject: methodName]; } } } return actionsArray; } - (NSMutableArray *) outletsForClass: (Class) cls { NSArray *methodArray = _GSObjCMethodNamesForClass(cls, NO); NSEnumerator *en = [methodArray objectEnumerator]; NSMethodSignature *outletSig = [NSMethodSignature signatureWithObjCTypes: "v12@0:4@8"]; NSMutableArray *outletsArray = [NSMutableArray array]; NSString *methodName = nil; NSRange setRange = NSMakeRange(0,3); while((methodName = [en nextObject]) != nil) { SEL sel = NSSelectorFromString(methodName); NSMethodSignature *signature = [cls instanceMethodSignatureForSelector: sel]; if([signature numberOfArguments] == 3) { if([outletSig isEqual: signature] && NSEqualRanges([methodName rangeOfString: @"set"], setRange) == YES && [methodName isEqual: @"encodeWithCoder:"] == NO && [methodName isEqual: @"mouseDown:"] == NO) { NSRange range = NSMakeRange(3,([methodName length] - 4)); NSString *outletMethod = [[methodName substringWithRange: range] lowercaseString]; if([methodArray containsObject: outletMethod]) { [outletsArray addObject: outletMethod]; } } } } return outletsArray; } - (void) importClasses: (NSArray *)classes withDictionary: (NSDictionary *)dict { NSEnumerator *en = [classes objectEnumerator]; id className = nil; NSMutableDictionary *masterDict = [NSMutableDictionary dictionary]; // import the classes. while((className = [en nextObject]) != nil) { NSMutableDictionary *classDict = [NSMutableDictionary dictionary]; Class cls = NSClassFromString(className); Class supercls = [cls superclass]; NSString *superClassName = NSStringFromClass(supercls); NSMutableArray *actions = [self actionsForClass: cls]; NSMutableArray *outlets = [self outletsForClass: cls]; // if the superclass is defined, set it. if not, don't since // this might be a palette which adds a root class. if(superClassName != nil) { [classDict setObject: superClassName forKey: @"Super"]; } // set the action/outlet keys if(actions != nil) { [classDict setObject: actions forKey: @"Actions"]; } if(outlets != nil) { [classDict setObject: outlets forKey: @"Outlets"]; } [masterDict setObject: classDict forKey: className]; } // override any elements needed, if it's present. if(dict != nil) { [masterDict addEntriesFromDictionary: dict]; } // add the classes to the dictionary... [importedClasses addEntriesFromDictionary: masterDict]; } - (NSDictionary *) importedClasses { return importedClasses; } - (void) importImages: (NSArray *)images withBundle: (NSBundle *) bundle { NSEnumerator *en = [images objectEnumerator]; id name = nil; NSMutableArray *paths = [NSMutableArray array]; while((name = [en nextObject]) != nil) { NSString *path = [bundle pathForImageResource: name]; [paths addObject: path]; } [importedImages addObjectsFromArray: paths]; } - (NSArray *) importedImages { return importedImages; } - (void) importSounds: (NSArray *)sounds withBundle: (NSBundle *) bundle { NSEnumerator *en = [sounds objectEnumerator]; id name = nil; NSMutableArray *paths = [NSMutableArray array]; while((name = [en nextObject]) != nil) { NSString *path = [bundle pathForSoundResource: name]; [paths addObject: path]; } [importedSounds addObjectsFromArray: paths]; } - (NSArray *) importedSounds { return importedSounds; } - (NSDictionary *) substituteClasses { return substituteClasses; } @end apps-gorm-gorm-1_5_0/GormCore/GormPalettesPref.h000066400000000000000000000007501475375552500216630ustar00rootroot00000000000000#ifndef INCLUDED_GormPalettesPref_h #define INCLUDED_GormPalettesPref_h #include #include @interface GormPalettesPref : NSObject { id table; id addButton; id removeButton; id window; id _view; } /** * View to be shown in the preferences panel. */ - (NSView *) view; /** * Add a palette to the list. */ - (void) addAction: (id)sender; /** * Remove a palette from the list. */ - (void) removeAction: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPalettesPref.m000066400000000000000000000060131475375552500216660ustar00rootroot00000000000000#/* GormPalettesPref.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormPalettesPref.h" @class NSTableView; // data source... @interface PaletteDataSource : NSObject @end @implementation PaletteDataSource - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *list = [defaults objectForKey: @"UserPalettes"]; return [list count]; } - (id) tableView: (NSTableView *)tv objectValueForTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *list = [defaults objectForKey: @"UserPalettes"]; id value = nil; if([list count] > 0) { value = [[list objectAtIndex: rowIndex] lastPathComponent]; } return value; } @end @implementation GormPalettesPref - (id) init { _view = nil; self = [super init]; if ( ! [NSBundle loadNibNamed:@"GormPrefPalettes" owner:self] ) { NSLog(@"Can not load bundle GormPrefPalettes"); return nil; } _view = [[(NSWindow *)window contentView] retain]; return self; } - (void) dealloc { TEST_RELEASE(_view); [super dealloc]; } -(NSView *) view { return _view; } - (void) addAction: (id)sender { [[(id)[NSApp delegate] palettesManager] openPalette: self]; [table reloadData]; } - (void) removeAction: (id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *list = [defaults objectForKey: @"UserPalettes"]; int row = [table selectedRow]; if(row >= 0) { NSString *stringValue = [list objectAtIndex: row]; if(stringValue != nil) { [list removeObject: stringValue]; [defaults setObject: list forKey: @"UserPalettes"]; [table reloadData]; } } } - (BOOL) tableView: (NSTableView *)tableView shouldEditTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { BOOL result = NO; return result; } - (BOOL) tableView: (NSTableView *)tv shouldSelectRow: (NSInteger)rowIndex { BOOL result = YES; return result; } @end apps-gorm-gorm-1_5_0/GormCore/GormPlacementInfo.h000066400000000000000000000040601475375552500220070ustar00rootroot00000000000000/* GormPlacementInfo.h * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormPlacementInfo_h #define INCLUDED_GormPlacementInfo_h #include #include @class NSView, NSMutableArray; @interface GormPlacementInfo : NSObject { @public NSView *resizingIn; NSRect oldRect; BOOL firstPass; BOOL hintInitialized; NSMutableArray *leftHints; NSMutableArray *rightHints; NSMutableArray *topHints; NSMutableArray *bottomHints; NSRect lastLeftRect; NSRect lastRightRect; NSRect lastTopRect; NSRect lastBottomRect; NSRect hintFrame; NSRect lastFrame; IBKnobPosition knob; } @end typedef enum _GormHintBorder { Top, Bottom, Left, Right } GormHintBorder; @interface GormPlacementHint : NSObject { GormHintBorder _border; float _position; float _start; float _end; NSRect _frame; } - (id) initWithBorder: (GormHintBorder) border position: (float) position validityStart: (float) start validityEnd: (float) end frame: (NSRect) frame; - (NSRect) rectWithHalfDistance: (int) halfDistance; - (int) distanceToFrame: (NSRect) frame; - (float) position; - (float) start; - (float) end; - (NSRect) frame; - (GormHintBorder) border; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPlugin.h000066400000000000000000000022231475375552500205200ustar00rootroot00000000000000/* GormNibModule.m * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2007 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #ifndef GORM_GORMPLUGIN #define GORM_GORMPLUGIN #include @class NSString, NSArray; @interface GormPlugin : IBPlugin - (void) registerDocumentTypeName: (NSString *)name humanReadableName: (NSString *)hrName forExtensions: (NSArray *)extensions; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPlugin.m000066400000000000000000000051431475375552500205310ustar00rootroot00000000000000/* GormNibModule.m * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2007 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #include #include #include #include @interface NSDocumentController (GormPrivate) - (NSArray *) types; - (void) setTypes: (NSArray *)types; - (BOOL) containsDocumentTypeName: (NSString *)tname; @end static Ivar types_ivar(void) { static Ivar iv; if (iv == NULL) { iv = class_getInstanceVariable([NSDocumentController class], "_types"); NSCAssert(iv, @"Unable to find _types instance variable of NSDocumentController"); } return iv; } @implementation NSDocumentController (GormPrivate) - (NSArray *) types { return object_getIvar(self, types_ivar()); } - (void) setTypes: (NSArray *)types { object_setIvar(self, types_ivar(), types); } - (BOOL) containsDocumentTypeName: (NSString *)tname { NSEnumerator *en = [object_getIvar(self, types_ivar()) objectEnumerator]; id obj = nil; while ((obj = [en nextObject]) != nil) { NSString *name = [obj objectForKey: @"NSName"]; if([tname isEqualToString: name]) { return YES; } } return NO; } @end @implementation GormPlugin - (void) registerDocumentTypeName: (NSString *)name humanReadableName: (NSString *)hrName forExtensions: (NSArray *)extensions { NSDocumentController *controller = [GormDocumentController sharedDocumentController]; NSMutableArray *types = [[controller types] mutableCopy]; if([controller containsDocumentTypeName: name] == NO) { NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: name, @"NSName", hrName, @"NSHumanReadableName", extensions, @"NSUnixExtensions", nil]; [types addObject: dict]; [controller setTypes: types]; } } @end apps-gorm-gorm-1_5_0/GormCore/GormPluginManager.h000066400000000000000000000027731475375552500220250ustar00rootroot00000000000000/* GormPluginManager.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Author: Richard Frith-Macdonald * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormPluginManager_h #define INCLUDED_GormPluginManager_h #include @class NSMutableArray, NSMutableDictionary, NSDictionary, NSArray, NSBundle; @class NSPanel, NSMatrix, NSView; @interface GormPluginManager : NSObject { NSMutableArray *bundles; NSMutableDictionary *pluginsDict; NSMutableArray *plugins; NSMutableArray *pluginNames; } // methods for loading and display the palette panels - (BOOL) loadPlugin: (NSString*)path; - (id) openPlugin: (id) sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPluginManager.m000066400000000000000000000130161475375552500220220ustar00rootroot00000000000000/* GormPluginManager.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2004, 2008 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormPrivate.h" #include "GormFunctions.h" #include "GormPluginManager.h" #define BUILTIN_PLUGINS @"BuiltinPlugins" #define USER_PLUGINS @"UserPlugins" @implementation GormPluginManager - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE(bundles); RELEASE(plugins); RELEASE(pluginsDict); [super dealloc]; } - (id) init { NSArray *array; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *userPlugins = [defaults arrayForKey: USER_PLUGINS]; NSBundle *bundle = [NSBundle bundleForClass: [self class]]; self = [super init]; if (self == nil) { return nil; } // // Initialize dictionary // pluginsDict = [[NSMutableDictionary alloc] init]; plugins = [[NSMutableArray alloc] init]; pluginNames = [[NSMutableArray alloc] init]; array = [bundle pathsForResourcesOfType: @"plugin" inDirectory: nil]; if ([array count] > 0) { unsigned index; array = [array sortedArrayUsingSelector: @selector(compare:)]; for (index = 0; index < [array count]; index++) { [self loadPlugin: [array objectAtIndex: index]]; } } // if we have any user plugins load them as well. if(userPlugins != nil) { NSEnumerator *en = [userPlugins objectEnumerator]; id pluginName = nil; while((pluginName = [en nextObject]) != nil) { [self loadPlugin: pluginName]; } } return self; } - (BOOL) bundlePathIsLoaded: (NSString *)path { int col = 0; NSBundle *bundle; for (col = 0; col < [bundles count]; col++) { bundle = [bundles objectAtIndex: col]; if ([path isEqualToString: [bundle bundlePath]] == YES) { return YES; } } return NO; } - (BOOL) loadPlugin: (NSString*)path { NSBundle *bundle; NSString *className; IBPlugin *plugin; Class pluginClass; if([self bundlePathIsLoaded: path]) { NSRunAlertPanel (nil, _(@"Plugin has already been loaded"), _(@"OK"), nil, nil); return NO; } bundle = [NSBundle bundleWithPath: path]; if (bundle == nil) { NSRunAlertPanel(nil, _(@"Could not load Plugin"), _(@"OK"), nil, nil); return NO; } className = [[bundle infoDictionary] objectForKey: @"NSPrincipalClass"]; if (className == nil) { NSRunAlertPanel(nil, _(@"No plugin class in plist"), _(@"OK"), nil, nil); return NO; } pluginClass = [bundle classNamed: className]; if (pluginClass == 0) { NSRunAlertPanel (nil, _(@"Could not load plugin class"), _(@"OK"), nil, nil); return NO; } plugin = [[pluginClass alloc] init]; if ([plugin isKindOfClass: [IBPlugin class]] == NO) { NSRunAlertPanel (nil, _(@"Plugin contains wrong type of class"), _(@"OK"), nil, nil); RELEASE(plugin); return NO; } // add to the bundles list... [bundles addObject: bundle]; [plugin didLoad]; // manage plugin data. [pluginsDict setObject: plugin forKey: className]; [plugins addObject: plugin]; [pluginNames addObject: className]; RELEASE(plugin); return YES; } - (id) openPlugin: (id) sender { NSArray *fileTypes = [NSArray arrayWithObject: @"plugin"]; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; int result; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *userPlugins = [defaults arrayForKey: USER_PLUGINS]; NSMutableArray *newUserPlugins = (userPlugins == nil)?[NSMutableArray array]:[NSMutableArray arrayWithArray: userPlugins]; [oPanel setAllowsMultipleSelection: YES]; [oPanel setCanChooseFiles: YES]; [oPanel setCanChooseDirectories: NO]; result = [oPanel runModalForDirectory: NSHomeDirectory() file: nil types: fileTypes]; if (result == NSOKButton) { NSArray *filesToOpen = [oPanel filenames]; unsigned count = [filesToOpen count]; unsigned i; for (i = 0; i < count; i++) { NSString *aFile = [filesToOpen objectAtIndex: i]; if([self bundlePathIsLoaded: aFile] == YES && [userPlugins containsObject: aFile] == NO) { [newUserPlugins addObject: aFile]; } else if([self loadPlugin: aFile] == NO) { return nil; } else { [newUserPlugins addObject: aFile]; } } // reset the defaults to include the new plugin. [defaults setObject: newUserPlugins forKey: USER_PLUGINS]; return self; } return nil; } @end apps-gorm-gorm-1_5_0/GormCore/GormPluginsPref.h000066400000000000000000000007451475375552500215270ustar00rootroot00000000000000#ifndef INCLUDED_GormPluginsPref_h #define INCLUDED_GormPluginsPref_h #include #include @interface GormPluginsPref : NSObject { id table; id addButton; id removeButton; id window; id _view; } /** * View to be shown in the preferences panel. */ - (NSView *) view; /** * Add a palette to the list. */ - (void) addAction: (id)sender; /** * Remove a palette from the list. */ - (void) removeAction: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPluginsPref.m000066400000000000000000000057751475375552500215440ustar00rootroot00000000000000#/* GormPluginsPref.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormPluginsPref.h" @class NSTableView; // data source... @interface PluginDataSource : NSObject @end @implementation PluginDataSource - (NSInteger) numberOfRowsInTableView: (NSTableView *)tv { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *list = [defaults objectForKey: @"UserPlugins"]; return [list count]; } - (id) tableView: (NSTableView *)tv objectValueForTableColumn: (NSTableColumn *)tc row: (NSInteger)rowIndex { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *list = [defaults objectForKey: @"UserPlugins"]; id value = nil; if([list count] > 0) { value = [[list objectAtIndex: rowIndex] lastPathComponent]; } return value; } @end @implementation GormPluginsPref - (id) init { _view = nil; self = [super init]; if ( ! [NSBundle loadNibNamed:@"GormPrefPlugins" owner:self] ) { NSLog(@"Can not load bundle GormPrefPlugins"); return nil; } _view = [[(NSWindow *)window contentView] retain]; return self; } - (void) dealloc { TEST_RELEASE(_view); [super dealloc]; } -(NSView *) view { return _view; } - (void) addAction: (id)sender { [[(id)[NSApp delegate] pluginManager] openPlugin: self]; [table reloadData]; } - (void) removeAction: (id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *list = [defaults objectForKey: @"UserPlugins"]; int row = [table selectedRow]; if(row >= 0) { NSString *stringValue = [list objectAtIndex: row]; if(stringValue != nil) { [list removeObject: stringValue]; [defaults setObject: list forKey: @"UserPlugins"]; [table reloadData]; } } } - (BOOL) tableView: (NSTableView *)tableView shouldEditTableColumn: (NSTableColumn *)aTableColumn row: (NSInteger)rowIndex { BOOL result = NO; return result; } - (BOOL) tableView: (NSTableView *)tv shouldSelectRow: (NSInteger)rowIndex { BOOL result = YES; return result; } @end apps-gorm-gorm-1_5_0/GormCore/GormPrefController.h000066400000000000000000000027441475375552500222320ustar00rootroot00000000000000/* GormShelfPref.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory Casamento * Date: February 2004 * * This class is heavily based on work done by Enrico Sersale * on ShelfPref.m for GWorkspace. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef INCLUDED_GormPrefController_h #define INCLUDED_GormPrefController_h #include #include @interface GormPrefController : NSObject { id panel; id popup; id prefBox; id _generalView; id _headersView; id _shelfView; id _colorsView; id _palettesView; id _pluginsView; id _guidelineView; } /** * Called when the popup is used to select a pref panel. */ - (void) popupAction: (id)sender; /** * Return the preferences panel. */ - (id) panel; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPrefController.m000066400000000000000000000036601475375552500222350ustar00rootroot00000000000000#include #include "GormPrefController.h" #include "GormGeneralPref.h" #include "GormHeadersPref.h" #include "GormShelfPref.h" #include "GormPalettesPref.h" #include "GormPluginsPref.h" #include "GormGuidelinePref.h" @implementation GormPrefController - (id) init { self = [super init]; if (self != nil) { if(![NSBundle loadNibNamed: @"GormPreferences" owner: self]) { return nil; } } return self; } - (void) awakeFromNib { _generalView = [[GormGeneralPref alloc] init]; _headersView = [[GormHeadersPref alloc] init]; _shelfView = [[GormShelfPref alloc] init]; _palettesView = [[GormPalettesPref alloc] init]; _pluginsView = [[GormPluginsPref alloc] init]; _guidelineView = [[GormGuidelinePref alloc] init]; [prefBox setContentView:[_generalView view]]; [[self panel] setFrameUsingName: @"Preferences"]; [[self panel] setFrameAutosaveName: @"Preferences"]; [[self panel] center]; } - (void) popupAction: (id)sender { int tag = -1; if ( sender != popup ) return; tag = [[sender selectedItem] tag]; switch(tag) { case 0: [prefBox setContentView: [_generalView view]]; break; case 1: [prefBox setContentView: [_headersView view]]; break; case 2: [prefBox setContentView: [_shelfView view]]; break; case 4: [prefBox setContentView: [_palettesView view]]; break; case 5: [prefBox setContentView: [_guidelineView view]]; break; case 6: [prefBox setContentView: [_pluginsView view]]; break; default: NSLog(@"Error Default (GormPrefController.m) : - (void) popupAction: (id)sender, no match for tag %d",tag); break; } } - (void) dealloc { RELEASE(_generalView); RELEASE(_headersView); RELEASE(_shelfView); RELEASE(_colorsView); RELEASE(_palettesView); RELEASE(_pluginsView); RELEASE(panel); [super dealloc]; } - (id) panel { return panel; } @end apps-gorm-gorm-1_5_0/GormCore/GormPrefs.h000066400000000000000000000027111475375552500203430ustar00rootroot00000000000000/* GormPrefs.h * * Copyright (C) 2019 Free Software Foundation, Inc. * * Author: Lars Sonchocky-Helldorf * Date: 01.11.19 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #ifndef GNUSTEP //! Project version number for GormPrefs. FOUNDATION_EXPORT double GormPrefsVersionNumber; //! Project version string for GormPrefs. FOUNDATION_EXPORT const unsigned char GormPrefsVersionString[]; #endif #ifndef INCLUDED_GORMPREFS_H #define INCLUDED_GORMPREFS_H #include #include #include #include #include #include #include #endif apps-gorm-gorm-1_5_0/GormCore/GormPrivate.h000066400000000000000000000100341475375552500206730ustar00rootroot00000000000000/* GormPrivate.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormPrivate_h #define INCLUDED_GormPrivate_h #include #include #include #include #include #include #include #include #include #include #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wattributes" extern NSString *GormLinkPboardType; extern NSString *GormToggleGuidelineNotification; extern NSString *GormDidModifyClassNotification; extern NSString *GormDidAddClassNotification; extern NSString *GormDidDeleteClassNotification; extern NSString *GormWillDetachObjectFromDocumentNotification; extern NSString *GormDidDetachObjectFromDocumentNotification; extern NSString *GormResizeCellNotification; #pragma GCC diagnostic pop @class GormDocument; @class GormInspectorsManager; @class GormPalettesManager; // templates @interface GSNibItem (GormAdditions) - (id) initWithClassName: (NSString*)className; - (id) initWithClassName: (NSString*)className frame: (NSRect)frame; - (NSString*) className; @end @interface GSClassSwapper (GormCustomClassAdditions) + (void) setIsInInterfaceBuilder: (BOOL)flag; - (BOOL) isInInterfaceBuilder; @end @interface NSClassSwapper (GormCustomClassAdditions) + (void) setIsInInterfaceBuilder: (BOOL)flag; - (BOOL) isInInterfaceBuilder; @end @interface GormObjectProxy : GSNibItem /* * Use a GormObjectProxy in Gorm, but encode a GSNibItem in the archive. * This is done so that we can provide our own decoding method * (GSNibItem tries to morph into the actual class) */ - (void) setClassName: (NSString *)className; @end @interface GormClassProxy : NSObject { NSString *name; NSInteger t; } - initWithClassName: (NSString*)n; - (NSString*) className; - (NSString*) inspectorClassName; - (NSString*) connectInspectorClassName; - (NSString*) sizeInspectorClassName; @end /* * NSDateFormatter and NSNumberFormatter extensions * for Gorm Formatters used in the Data Palette */ @interface NSDateFormatter (GormAdditions) + (int) formatCount; + (NSString *) formatAtIndex: (int)index; + (NSInteger) indexOfFormat: (NSString *) format; + (NSString *) defaultFormat; + (id) defaultFormatValue; @end @interface NSNumberFormatter (GormAdditions) + (int) formatCount; + (NSString *) formatAtIndex: (int)index; + (NSString *) positiveFormatAtIndex: (int)index; + (NSString *) zeroFormatAtIndex: (int)index; + (NSString *) negativeFormatAtIndex: (int)index; + (NSDecimalNumber *) positiveValueAtIndex: (int)index; + (NSDecimalNumber *) negativeValueAtIndex: (int)index; + (NSInteger) indexOfFormat: (NSString *)format; + (NSString *) defaultFormat; + (id) defaultFormatValue; - (NSString *) zeroFormat; @end @interface NSObject (GormAdditions) - (id) allocSubstitute; - (NSImage *) imageForViewer; @end @interface IBResourceManager (GormAdditions) + (void) registerForAllPboardTypes: (id)editor inDocument: (id)document; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormPrivate.m000066400000000000000000000162021475375552500207030ustar00rootroot00000000000000/* GormPrivate.m * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Author: Gregory John Casamento * Date: 1999, 2003, 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ // for templates... #include #include #include #include "GormPrivate.h" #include "GormFontViewController.h" #include "GormSetNameController.h" NSString *GormToggleGuidelineNotification = @"GormToggleGuidelineNotification"; NSString *GormDidModifyClassNotification = @"GormDidModifyClassNotification"; NSString *GormDidAddClassNotification = @"GormDidAddClassNotification"; NSString *GormDidDeleteClassNotification = @"GormDidDeleteClassNotification"; NSString *GormWillDetachObjectFromDocumentNotification = @"GormWillDetachObjectFromDocumentNotification"; NSString *GormDidDetachObjectFromDocumentNotification = @"GormDidDetachObjectFromDocumentNotification"; NSString *GormResizeCellNotification = @"GormResizeCellNotification"; // Private, and soon to be deprecated, notification string... NSString *GSInternalNibItemAddedNotification = @"_GSInternalNibItemAddedNotification"; // Define this as "NO" initially. We only want to turn this on while loading or testing. static BOOL _isInInterfaceBuilder = NO; @class InfoPanel; // we had this include for grouping/ungrouping selectors #include "GormViewWithContentViewEditor.h" @implementation GSNibItem (GormAdditions) - (id) initWithClassName: (NSString*)className frame: (NSRect)frame { if((self = [super init]) != nil) { theClass = [className copy]; theFrame = frame; } return self; } - (id) initWithClassName: (NSString*)className { return [self initWithClassName: className frame: NSMakeRect(0,0,0,0)]; } - (NSString*) className { return theClass; } @end @interface NSObject (GormPrivate) + (BOOL) canSubstituteForClass: (Class)origClass; @end @implementation NSObject (GormPrivate) + (BOOL) canSubstituteForClass: (Class)origClass { if(self == origClass) { return YES; } else if([self isSubclassOfClass: origClass]) { Class cls = self; while(cls != nil && cls != origClass) { if(GSGetMethod(cls, @selector(initWithCoder:), YES, NO) != NULL && GSGetMethod(cls, @selector(encodeWithCoder:), YES, NO) != NULL) { return NO; } cls = GSObjCSuper(cls); // get super class } return YES; } return NO; } @end @implementation GormObjectProxy /* * Perhaps this would be better to have a dummy initProxyWithCoder * in GSNibItem class, so that we are not dependent on actual coding * order of the ivars ? */ - (id) initWithCoder: (NSCoder*)aCoder { if([aCoder allowsKeyedCoding]) { ASSIGN(theClass, [aCoder decodeObjectForKey: @"NSClassName"]); theFrame = NSZeroRect; return self; } else { NSUInteger version = [aCoder versionForClassName: NSStringFromClass([GSNibItem class])]; NSInteger cv = [aCoder versionForClassName: NSStringFromClass([GSNibContainer class])]; if (version == NSNotFound) { NSLog(@"no GSNibItem"); version = [aCoder versionForClassName: NSStringFromClass([GormObjectProxy class])]; } // add to the top level items during unarchiving, if the container is old. if (cv == 0) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc postNotificationName: GSInternalNibItemAddedNotification object: self]; } if (version == 0) { // do not decode super (it would try to morph into theClass ! ) [aCoder decodeValueOfObjCType: @encode(id) at: &theClass]; theFrame = [aCoder decodeRect]; RETAIN(theClass); // release in dealloc of GSNibItem... return self; } else if (version == 1) { // do not decode super (it would try to morph into theClass ! ) [aCoder decodeValueOfObjCType: @encode(id) at: &theClass]; theFrame = [aCoder decodeRect]; [aCoder decodeValueOfObjCType: @encode(unsigned int) at: &autoresizingMask]; RETAIN(theClass); // release in dealloc of GSNibItem... return self; } else { NSLog(@"no initWithCoder for version %d", (int)version); RELEASE(self); return nil; } } return nil; } - (void) encodeWithCoder: (NSCoder *)coder { if([coder allowsKeyedCoding]) { [coder encodeObject: theClass forKey: @"NSClassName"]; } else { [super encodeWithCoder: coder]; } } - (NSString*) inspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) classInspectorClassName { return @"GormNotApplicableInspector"; } - (void) setClassName: (NSString *)className { ASSIGNCOPY(theClass, className); } - (NSImage *) imageForViewer { NSImage *image = [super imageForViewer]; if([theClass isEqual: @"NSFontManager"]) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *path = [bundle pathForImageResource: @"GormFontManager"]; image = [[NSImage alloc] initWithContentsOfFile: path]; } return image; } - (NSString *) description { NSString *desc = [super description]; return [NSString stringWithFormat: @"<%@, className = %@>", desc, theClass]; } @end // define the class proxy... @implementation GormClassProxy - (id) initWithClassName: (NSString *)n { self = [super init]; if (self != nil) { if([n isKindOfClass: [NSString class]]) { // create a copy. ASSIGNCOPY(name, n); } else { NSLog(@"Attempt to add a class proxy with className = %@",n); } } return self; } - (void) dealloc { RELEASE(name); [super dealloc]; } - (NSString*) className { return name; } - (NSString*) inspectorClassName { return @"GormClassInspector"; } - (NSString*) classInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) connectInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString*) sizeInspectorClassName { return @"GormNotApplicableInspector"; } @end // custom class additions... @implementation GSClassSwapper (GormCustomClassAdditions) + (void) setIsInInterfaceBuilder: (BOOL)flag { _isInInterfaceBuilder = flag; } - (BOOL) isInInterfaceBuilder { return _isInInterfaceBuilder; } @end @implementation IBResourceManager (GormAdditions) + (void) registerForAllPboardTypes: (id)editor inDocument: (id)doc { NSArray *allTypes = [doc allManagedPboardTypes]; [editor registerForDraggedTypes: allTypes]; } @end apps-gorm-gorm-1_5_0/GormCore/GormProtocol.h000066400000000000000000000044221475375552500210660ustar00rootroot00000000000000/* GormProtocol.h * * Copyright (C) 1999, 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormProtocol_h #define INCLUDED_GormProtocol_h #include @class GormClassManager; @class GormInspectorsManager; @class GormPalettesManager; @class GormPluginManager; @class NSMenu; @class NSString; @protocol GormAppDelegate // Connections - (id) connectSource; - (id) connectDestination; - (void) displayConnectionBetween: (id)source and: (id)destination; - (BOOL) isConnecting; - (void) stopConnecting; - (GormPalettesManager*) palettesManager; - (GormInspectorsManager*) inspectorsManager; - (GormPluginManager*) pluginManager; // added for classes support - (GormClassManager*) classManager; - (NSMenu*) classMenu; // Check if we are in the app or the tool - (BOOL) isInTool; // Delegate methods to handle issues that may occur - (BOOL) shouldUpgradeOlderArchive; - (BOOL) shouldLoadNewerArchive; - (BOOL) shouldBreakConnectionsForClassNamed: (NSString *)className; - (BOOL) shouldRenameConnectionsForClassNamed: (NSString *)className toClassName: (NSString *)newName; - (BOOL) shouldBreakConnectionsModifyingLabel: (NSString *)name isAction: (BOOL)action prompted: (BOOL)prompted; - (void) couldNotParseClassAtPath: (NSString *)path; - (void) exceptionWhileParsingClass: (NSException *)localException; - (BOOL) shouldBreakConnectionsReparsingClass: (NSString *)className; - (void) exceptionWhileLoadingModel: (NSString *)errorMessage; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormResource.h000066400000000000000000000046531475375552500210620ustar00rootroot00000000000000/** GormResource This class is a placeholder for a real resource. Copyright (C) 2005 Free Software Foundation, Inc. Author: Gregory John Casamento Date: Mar 2005 This file is part of the GNUstep GUI Library. 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 3 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. */ #ifndef INCLUDED_GormResource_h #define INCLUDED_GormResource_h #include #include @class NSString, NSData; @interface GormResource : NSObject { NSString *name; NSString *fileName; NSString *fileType; BOOL isLocalized; NSString *language; NSString *path; id project; BOOL isSystemResource; BOOL isInWrapper; NSData *data; } // factory methods + (GormResource *) resourceForPath: (NSString *)path; + (GormResource *) resourceForPath: (NSString *)path inWrapper: (BOOL)flag; // initialization methods - (id) initWithPath: (NSString *)aPath; - (id) initWithPath: (NSString *)aPath inWrapper: (BOOL)flag; - (id) initWithName: (NSString *)aName path: (NSString *)aPath; - (id) initWithName: (NSString *)aName path: (NSString *)aPath inWrapper: (BOOL)flag; - (id) initWithData: (NSData *)aData withFileName: (NSString *)aFileName inWrapper: (BOOL)flag; // instances methods - (void) setName: (NSString *)aName; - (NSString *) name; - (void) setSystemResource: (BOOL)flag; - (BOOL) isSystemResource; - (void) setInWrapper: (BOOL)flag; - (BOOL) isInWrapper; - (void) setData: (NSData *)data; - (NSData *) data; - (BOOL) isEqual: (id)object; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormResource.m000066400000000000000000000075141475375552500210660ustar00rootroot00000000000000/* GormResource.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormResource.h" // resource proxy object... @implementation GormResource + (GormResource*)resourceForPath: (NSString *)aPath { return [GormResource resourceForPath: aPath inWrapper: NO]; } + (GormResource*)resourceForPath: (NSString *)aPath inWrapper: (BOOL)flag { return AUTORELEASE([[GormResource alloc] initWithPath: aPath inWrapper: flag]); } - (id) initWithPath: (NSString *)aPath { return [self initWithPath: aPath inWrapper: NO]; } - (id) initWithPath: (NSString *)aPath inWrapper: (BOOL)flag { NSString *aName = [[aPath lastPathComponent] stringByDeletingPathExtension]; return [self initWithName: aName path: aPath inWrapper: flag]; } - (id) initWithData: (NSData *)aData withFileName: (NSString *)aFileName inWrapper: (BOOL)flag { if((self = [self init])) { path = nil; ASSIGN(fileName, aFileName); ASSIGN(name, [fileName stringByDeletingPathExtension]); ASSIGN(fileType, [fileName pathExtension]); ASSIGN(data, aData); language = nil; isLocalized = NO; isSystemResource = NO; isInWrapper = flag; project = nil; } return self; } - (id) initWithName: (NSString *)aName path: (NSString *)aPath { return [self initWithName: aName path: aPath inWrapper: NO]; } /** * Designated initializer. */ - (id) initWithName: (NSString *)aName path: (NSString *)aPath inWrapper: (BOOL)flag { if((self = [super init])) { ASSIGN(path, aPath); ASSIGN(name, aName); ASSIGN(fileName, [aPath lastPathComponent]); ASSIGN(fileType, [fileName pathExtension]); language = nil; isLocalized = NO; isSystemResource = NO; isInWrapper = flag; project = nil; } return self; } - (void) dealloc { RELEASE(name); RELEASE(path); RELEASE(fileName); RELEASE(fileType); RELEASE(data); [super dealloc]; } - (void) setName: (NSString *)aName { ASSIGN(name, aName); } - (NSString *) name { return name; } - (void) setPath: (NSString *)aPath { ASSIGN(path, aPath); } - (void) setSystemResource: (BOOL)flag { isSystemResource = flag; } - (BOOL) isSystemResource { return isSystemResource; } - (void) setInWrapper: (BOOL)flag { isInWrapper = flag; } - (BOOL) isInWrapper { return isInWrapper; } - (void) setData: (NSData *)aData { ASSIGN(data, aData); } - (NSData *) data { return data; } - (BOOL) isEqual: (id)object { BOOL result = NO; if(object == self) result = YES; else if([object isKindOfClass: [self class]] == NO) result = NO; else if([[self name] isEqual: [(GormResource *)object name]]) result = YES; return result; } // IBProjectFiles methods. - (NSString *) fileName { return fileName; } - (NSString *) fileType { return fileType; } - (BOOL) isLocalized { return isLocalized; } - (NSString *) language { return language; } - (NSString *) path { return path; } - (id) project { return project; } @end apps-gorm-gorm-1_5_0/GormCore/GormResourceEditor.h000066400000000000000000000025451475375552500222270ustar00rootroot00000000000000/* GormResourceEditor.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormResourceEditor_h #define INCLUDED_GormResourceEditor_h #include "GormGenericEditor.h" @interface GormResourceEditor : GormGenericEditor - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f; - (unsigned int) draggingSourceOperationMaskForLocal: (BOOL)flag; - (void) refreshCells; - (id) placeHolderWithPath: (NSString *)path; - (NSArray *) pbTypes; - (NSString *) resourceType; - (void) addSystemResources; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormResourceEditor.m000066400000000000000000000233261475375552500222340ustar00rootroot00000000000000/* GormResourceEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormDocument.h" #include "GormPrivate.h" #include "GormResourceEditor.h" #include "GormFunctions.h" #include "GormPalettesManager.h" #include "GormResource.h" @interface NSMatrix (GormResourceEditorPrivate) - (BOOL **) _selectedCells; - (id **) _cells; - (void) _setSelectedCell: (id)c; @end @implementation NSMatrix (GormResourceEditorPrivate) - (BOOL **) _selectedCells { return _selectedCells; } - (id **) _cells { return _cells; } - (void) _setSelectedCell: (id)c { _selectedCell = c; } @end @implementation GormResourceEditor - (BOOL) acceptsTypeFromArray: (NSArray*)types { return [types containsObject: NSFilenamesPboardType]; } - (NSArray *) fileTypes { return nil; } - (NSArray *) pbTypes { return nil; } /* * Dragging source protocol implementation */ - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f { } - (unsigned int) draggingSourceOperationMaskForLocal: (BOOL)flag { return NSDragOperationCopy; } - (id) placeHolderWithPath: (NSString *)string { return nil; } - (void) drawSelection { } - (id) document { return document; } - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if([name isEqual: GormResizeCellNotification]) { NSDebugLog(@"Received notification"); [self setCellSize: defaultCellSize()]; } } - (void) addSystemResources { // NSMutableArray *list = [NSMutableArray array]; // do nothing... this is the parent class. } /* * Initialisation */ - (id) initWithObject: (id)anObject inDocument: (id)aDocument { if ((self = [super initWithObject: anObject inDocument: aDocument]) != nil) { NSButtonCell *proto; [self setAutosizesCells: NO]; [self setCellSize: NSMakeSize(72,72)]; [self setIntercellSpacing: NSMakeSize(8,8)]; [self setAutoresizingMask: NSViewMinYMargin|NSViewWidthSizable]; [self setMode: NSRadioModeMatrix]; /* * Send mouse click actions to self, so we can handle selection. */ [self setAction: @selector(changeSelection:)]; [self setDoubleAction: @selector(raiseSelection:)]; [self setTarget: self]; objects = [[NSMutableArray alloc] init]; proto = [[NSButtonCell alloc] init]; [proto setBordered: NO]; [proto setAlignment: NSCenterTextAlignment]; [proto setImagePosition: NSImageAbove]; [proto setSelectable: NO]; [proto setEditable: NO]; [self setPrototype: proto]; RELEASE(proto); // do not insert it if it's nil. if(anObject != nil) { [self addObject: anObject]; } // add any initial objects [self addSystemResources]; // set up the notification... [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleNotification:) name: GormResizeCellNotification object: nil]; } return self; } - (void) close { [super close]; [[NSNotificationCenter defaultCenter] removeObserver: self]; } - (NSString *) resourceType { return @"resource"; } - (void) addObject: (id)anObject { if([objects containsObject: anObject] == NO) { [super addObject: anObject]; } else { NSString *type = [self resourceType]; NSString *msg = [NSString stringWithFormat: _(@"Problem adding %@"), type]; NSRunAlertPanel(msg, _(@"A resource with the same name exists, remove it first."), _(@"OK"), nil, nil); } } - (void) makeSelectionVisible: (BOOL)flag { if (flag == YES && selected != nil) { unsigned pos = [objects indexOfObjectIdenticalTo: selected]; int r = pos / [self numberOfColumns]; int c = pos % [self numberOfColumns]; [self selectCellAtRow: r column: c]; } else { [self deselectAllCells]; } [self displayIfNeeded]; [[self window] flushWindow]; } - (void) mouseDown: (NSEvent*)theEvent { NSInteger row, column; NSInteger newRow, newColumn; unsigned eventMask = NSLeftMouseUpMask | NSLeftMouseDownMask | NSMouseMovedMask | NSLeftMouseDraggedMask | NSPeriodicMask; NSPoint lastLocation = [theEvent locationInWindow]; NSEvent* lastEvent = theEvent; NSPoint initialLocation; BOOL **selectedCells = [self _selectedCells]; id selectedCell = [self selectedCell]; /* * Pathological case -- ignore mouse down */ if ((_numRows == 0) || (_numCols == 0)) { [super mouseDown: theEvent]; return; } lastLocation = [self convertPoint: lastLocation fromView: nil]; initialLocation = lastLocation; // If mouse down was on a selectable cell, start editing/selecting. if ([self getRow: &row column: &column forPoint: lastLocation]) { if ([_cells[row][column] isEnabled]) { if ((_mode == NSRadioModeMatrix) && _selectedCell != nil) { [selectedCell setState: NSOffState]; [self drawCellAtRow: _selectedRow column: _selectedColumn]; selectedCells[_selectedRow][_selectedColumn] = NO; selectedCell = nil; _selectedRow = _selectedColumn = -1; } [_cells[row][column] setState: NSOnState]; [self drawCellAtRow: row column: column]; [_window flushWindow]; selectedCells[row][column] = YES; [self _setSelectedCell: _cells[row][column]]; _selectedRow = row; _selectedColumn = column; } } else { return; } lastEvent = [NSApp nextEventMatchingMask: eventMask untilDate: [NSDate distantFuture] inMode: NSEventTrackingRunLoopMode dequeue: YES]; lastLocation = [self convertPoint: [lastEvent locationInWindow] fromView: nil]; while ([lastEvent type] != NSLeftMouseUp) { if((![self getRow: &newRow column: &newColumn forPoint: lastLocation]) || (row != newRow) || (column != newColumn) || ((lastLocation.x - initialLocation.x) * (lastLocation.x - initialLocation.x) + (lastLocation.y - initialLocation.y) * (lastLocation.y - initialLocation.y) >= 25)) { NSPasteboard *pb; NSInteger pos; pos = row * [self numberOfColumns] + column; // don't allow the user to drag empty resources. if(pos < [objects count]) { pb = [NSPasteboard pasteboardWithName: NSDragPboard]; [pb declareTypes: [self pbTypes] owner: self]; [pb setString: [(GormResource *)[objects objectAtIndex: pos] name] forType: [[self pbTypes] objectAtIndex: 0]]; [self dragImage: [[objects objectAtIndex: pos] imageForViewer] at: lastLocation offset: NSZeroSize event: theEvent pasteboard: pb source: self slideBack: YES]; } return; } lastEvent = [NSApp nextEventMatchingMask: eventMask untilDate: [NSDate distantFuture] inMode: NSEventTrackingRunLoopMode dequeue: YES]; lastLocation = [self convertPoint: [lastEvent locationInWindow] fromView: nil]; } [self changeSelection: self]; } - (void) pasteInSelection { } - (void) deleteSelection { if(![selected isSystemResource]) { if([selected isInWrapper]) { NSFileManager *mgr = [NSFileManager defaultManager]; NSString *path = [selected path]; BOOL removed = [mgr removeFileAtPath: path handler: nil]; if(!removed) { NSString *msg = [NSString stringWithFormat: @"Could not delete file %@", path]; NSLog(@"%@",msg); } } [super deleteSelection]; } } - (id) raiseSelection: (id)sender { id obj = [self changeSelection: sender]; id e; e = [document editorForObject: obj create: YES]; [e orderFront]; [e resetObject: obj]; return self; } - (void) refreshCells { unsigned count = [objects count]; unsigned index; int cols = 0; int rows; int width; // return if the superview is not available. if(![self superview]) { return; } width = [[self superview] bounds].size.width; while (width >= 72) { width -= (72 + 8); cols++; } if (cols == 0) { cols = 1; } rows = count / cols; if (rows == 0 || rows * cols != count) { rows++; } [self renewRows: rows columns: cols]; for (index = 0; index < count; index++) { id obj = [objects objectAtIndex: index]; NSButtonCell *but = [self cellAtRow: index/cols column: index%cols]; NSString *name = [(GormResource *)obj name]; [but setImage: [obj imageForViewer]]; [but setTitle: name]; [but setShowsStateBy: NSChangeGrayCellMask]; [but setHighlightsBy: NSChangeGrayCellMask]; } while (index < rows * cols) { NSButtonCell *but = [self cellAtRow: index/cols column: index%cols]; [but setImage: nil]; [but setTitle: @""]; [but setShowsStateBy: NSNoCellMask]; [but setHighlightsBy: NSNoCellMask]; index++; } [self setIntercellSpacing: NSMakeSize(8,8)]; [self sizeToCells]; [self setNeedsDisplay: YES]; } @end apps-gorm-gorm-1_5_0/GormCore/GormResourceManager.h000066400000000000000000000021421475375552500223440ustar00rootroot00000000000000/* GormViewResourceManager.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GORMVIEWRESOURCEMANAGER_H #define INCLUDED_GORMVIEWRESOURCEMANAGER_H #include @interface GormResourceManager : IBResourceManager @end #endif apps-gorm-gorm-1_5_0/GormCore/GormResourceManager.m000066400000000000000000000121751475375552500223600ustar00rootroot00000000000000/* GormViewResourceManager.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormSound.h" #include "GormImage.h" #include "GormClassManager.h" #include "GormResourceManager.h" #include "GormGenericEditor.h" #include "GormDocument.h" #include "GormObjectEditor.h" @implementation GormResourceManager - (NSArray *) resourcePasteboardTypes { return [NSArray arrayWithObjects: IBWindowPboardType, IBViewPboardType, IBMenuPboardType, NSFilenamesPboardType, GormLinkPboardType, nil]; } - (BOOL) acceptsResourcesFromPasteboard:(NSPasteboard *)pb { NSArray *types = [pb types]; NSArray *acceptedTypes = [self resourcePasteboardTypes]; BOOL flag = YES; NSInteger i; NSInteger c = [types count]; if (c == 0) return NO; flag = ([acceptedTypes firstObjectCommonWithArray:types] != nil); for (i = 0; flag && i < c; i++) { id type = [types objectAtIndex:i]; if ([type isEqual:NSFilenamesPboardType]) { NSArray *files = [pb propertyListForType:type]; NSArray *acceptedFiles = [self resourceFileTypes]; NSInteger j, d; if (!files) { files = [NSUnarchiver unarchiveObjectWithData: [pb dataForType: NSFilenamesPboardType]]; } for (j = 0, d = [files count]; j < d; j++) { NSString *ext = [[files objectAtIndex:j] pathExtension]; flag = [acceptedFiles containsObject:ext]; } } else if ([type isEqual:GormLinkPboardType]) { [(GormDocument *)document changeToViewWithTag:0]; return NO; } } return flag; } - (void) addResourcesFromPasteboard:(NSPasteboard *)pb { NSArray *types = [pb types]; NSArray *soundTypes = [NSSound soundUnfilteredFileTypes]; NSArray *imageTypes = [NSImage imageFileTypes]; NSInteger i; NSInteger c = [types count]; BOOL found = NO; for (i = 0; i < c; i++) { id type = [types objectAtIndex:i]; if ([type isEqual:NSFilenamesPboardType]) { NSInteger j, d; NSArray *files = [pb propertyListForType:type]; found = YES; if (!files) { files = [NSUnarchiver unarchiveObjectWithData: [pb dataForType: NSFilenamesPboardType]]; } for (j = 0, d = [files count]; j < d; j++) { NSString *file = [files objectAtIndex:j]; NSString *ext = [file pathExtension]; if ([ext isEqual:@"h"]) { GormDocument *doc = (GormDocument *)document; GormClassManager *classManager = [doc classManager]; NS_DURING { if (![classManager parseHeader: file]) { NSString *fileName = [file lastPathComponent]; NSString *message; message = [NSString stringWithFormat: _(@"Unable to parse class in %@"), fileName]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } [doc changeToViewWithTag:3]; } NS_HANDLER { NSString *message = [localException reason]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } NS_ENDHANDLER; } else if ([imageTypes containsObject:ext]) { GormDocument *doc = (GormDocument *)document; [(GormGenericEditor *)[doc viewWithTag:1] addObject:[GormImage imageForPath:file]]; [doc changeToViewWithTag:1]; } else if ([soundTypes containsObject:ext]) { GormDocument *doc = (GormDocument *)document; [(GormGenericEditor *)[doc viewWithTag:2] addObject:[GormSound soundForPath:file]]; [doc changeToViewWithTag:2]; } } } } if (!found) { [super addResourcesFromPasteboard:pb]; } } - (NSArray *) resourceFileTypes { NSArray *types = [NSSound soundUnfilteredFileTypes]; types = [types arrayByAddingObjectsFromArray:[NSImage imageFileTypes]]; types = [types arrayByAddingObject:@"h"]; return types; } @end apps-gorm-gorm-1_5_0/GormCore/GormScrollViewAttributesInspector.h000066400000000000000000000031061475375552500253120ustar00rootroot00000000000000/** GormScrollViewAttributesInspector allow user to edit attributes of a scroll view Copyright (C) 2003 Free Software Foundation, Inc. Author: Gregory John Casamento Date: June 2003 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All Rights reserved */ #include #include @interface GormScrollViewAttributesInspector : IBInspector { id pageContext; id lineAmount; id color; id verticalScroll; id horizontalScroll; id verticalRuler; id horizontalRuler; id borderMatrix; } - (void) colorSelected: (id)sender; - (void) verticalSelected: (id)sender; - (void) horizontalSelected: (id)sender; - (void) verticalRuler: (id)sender; - (void) horizontalRuler: (id)sender; - (void) borderSelected: (id)sender; @end apps-gorm-gorm-1_5_0/GormCore/GormScrollViewAttributesInspector.m000066400000000000000000000060121475375552500253160ustar00rootroot00000000000000/** GormScrollViewAttributesInspector allow user to edit attributes of a scroll view Copyright (C) 2003 Free Software Foundation, Inc. Author: Gregory John Casamento Date: June 2003 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All rights reserved */ #include #include "GormScrollViewAttributesInspector.h" @implementation GormScrollViewAttributesInspector - init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if ([bundle loadNibNamed: @"GormScrollViewAttributesInspector" owner: self topLevelObjects: NULL] == NO) { NSLog(@"Could not open gorm GormScrollViewAttributesInspector"); NSLog(@"self %@", self); return nil; } } return self; } - (void) _getValuesFromObject { [color setColor: [object backgroundColor]]; [horizontalScroll setState: [object hasHorizontalScroller]?NSOnState:NSOffState]; [verticalScroll setState: [object hasVerticalScroller]?NSOnState:NSOffState]; [horizontalRuler setState: [object hasHorizontalRuler]?NSOnState:NSOffState]; [verticalRuler setState: [object hasVerticalRuler]?NSOnState:NSOffState]; } - (void) setObject: (id)anObject { [super setObject: anObject]; [self _getValuesFromObject]; } - (void) colorSelected: (id)sender { /* insert your code here */ [super ok: sender]; [object setBackgroundColor: [color color]]; } - (void) verticalSelected: (id)sender { /* insert your code here */ [super ok: sender]; [object setHasVerticalScroller: ([verticalScroll state] == NSOnState)]; } - (void) horizontalSelected: (id)sender { /* insert your code here */ [super ok: sender]; [object setHasHorizontalScroller: ([horizontalScroll state] == NSOnState)]; } - (void) verticalRuler: (id)sender { /* insert your code here */ [super ok: sender]; [object setHasVerticalRuler: ([verticalRuler state] == NSOnState)]; } - (void) horizontalRuler: (id)sender { /* insert your code here */ [super ok: sender]; [object setHasHorizontalRuler: ([horizontalRuler state] == NSOnState)]; } - (void) borderSelected: (id)sender { /* insert your code here */ [super ok: sender]; [object setBorderType: [[borderMatrix selectedCell] tag]]; } @end apps-gorm-gorm-1_5_0/GormCore/GormScrollViewEditor.m000066400000000000000000000127711475375552500225400ustar00rootroot00000000000000/* GormScrollViewEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Author: Gregory John Casamento * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" #include "GormBoxEditor.h" #include "GormViewKnobs.h" @implementation NSScrollView (IBObjectAdditions) - (NSString *) inspectorClassName { return @"GormScrollViewAttributesInspector"; } - (NSString*) editorClassName { return @"GormScrollViewEditor"; } @end #define _EO ((NSScrollView *)_editedObject) @interface GormScrollViewEditor : GormViewWithSubviewsEditor { GormInternalViewEditor *documentViewEditor; } @end @implementation GormScrollViewEditor - (void) setOpened: (BOOL) flag { [super setOpened: flag]; if (flag == YES) { [document setSelectionFromEditor: documentViewEditor]; } } - (BOOL) activate { if ([super activate]) { NSView *documentView = [_EO documentView]; NSDebugLog(@"documentView %@", documentView); documentViewEditor = (GormInternalViewEditor *)[document editorForObject: documentView inEditor: self create: YES]; return YES; } return NO; } - (void) deactivate { if (activated == YES) { [self deactivateSubeditors]; [super deactivate]; } } - (void) close { [self setOpened: NO]; [super close]; } - (void) mouseDown: (NSEvent *) theEvent { BOOL onKnob = NO; if ([parent respondsToSelector: @selector(selection)] && [[parent selection] containsObject: _EO]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) { onKnob = YES; } } if (onKnob == YES) { if (parent) { return [parent mouseDown: theEvent]; } else { return [self noResponderFor: @selector(mouseDown:)]; } } // Open the scrollview, if it's not opened... if (opened == NO) { [super mouseDown: theEvent]; // return; } if ([[_EO hitTest: [theEvent locationInWindow]] isDescendantOf: documentViewEditor]) { if (([self isOpened] == YES) && ([documentViewEditor isOpened] == NO)) { [documentViewEditor setOpened: YES]; } if ([documentViewEditor isOpened]) { [documentViewEditor mouseDown: theEvent]; } } else { NSView *v = [_EO hitTest: [theEvent locationInWindow]]; id r = [v nextResponder]; if([v respondsToSelector: @selector(setNextResponder:)]) { // this is done to prevent a responder loop. [v setNextResponder: nil]; [v mouseDown: theEvent]; [v setNextResponder: r]; } else { [v mouseDown: theEvent]; } } opened = NO; } - (void) dealloc { RELEASE(selection); [super dealloc]; } - (id) initWithObject: (id)anObject inDocument: (id)aDocument { opened = NO; openedSubeditor = nil; if ((self = [super initWithObject: anObject inDocument: aDocument]) == nil) { return nil; } selection = [[NSMutableArray alloc] initWithCapacity: 5]; [self registerForDraggedTypes: [NSArray arrayWithObjects: IBViewPboardType, GormLinkPboardType, IBFormatterPboardType, nil]]; return self; } - (NSArray *)destroyAndListSubviews { id documentView = [_EO documentView]; NSArray *subviews = [documentView subviews]; NSMutableArray *newSelection = [NSMutableArray array]; if([documentView conformsToProtocol: @protocol(IBEditors)] == YES) { id internalView = [subviews objectAtIndex: 0]; NSEnumerator *enumerator = [[internalView subviews] objectEnumerator]; GormViewEditor *subview; if([[documentView editedObject] isKindOfClass: [NSTextView class]]) return newSelection; [parent makeSubeditorResign]; while ((subview = [enumerator nextObject]) != nil) { id v; NSRect frame; v = [subview editedObject]; frame = [v frame]; frame = [parent convertRect: frame fromView: _EO]; [subview deactivate]; [v setFrame: frame]; [newSelection addObject: v]; } } else { NSRect frame = [documentView frame]; if([documentView isKindOfClass: [NSTextView class]]) return newSelection; // In this case the view editor is the documentView and // we need to add the internal view back into the superview frame = [parent convertRect: frame fromView: _EO]; [documentView setFrame: frame]; [newSelection addObject: documentView]; [_EO setDocumentView: nil]; } [self close]; return newSelection; } @end apps-gorm-gorm-1_5_0/GormCore/GormServer.h000066400000000000000000000020531475375552500205310ustar00rootroot00000000000000/* GormServer.h * * Copyright (C) 2010 Free Software Foundation, Inc. * * Author: Gregory Casamento * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormServer_h #define INCLUDED_GormServer_h @protocol GormServer - (void) addClass: (NSDictionary *)dict; - (void) deleteClass: (NSString *)className; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormSetNameController.h000066400000000000000000000010221475375552500226560ustar00rootroot00000000000000// Author: Andrew E. Ruder // Copyright (C) 2003 by Free Software Foundation, Inc @class GormSetNameController; #ifndef GORM_SET_NAME_CONTROLLER_H #define GORM_SET_NAME_CONTROLLER_H #include @class NSButton, NSPanel, NSTextField; @interface GormSetNameController : NSObject { NSPanel *window; NSTextField *textField; NSButton *okButton; NSButton *cancelButton; } - (NSInteger)runAsModal; - (NSTextField *) textField; - (void) cancelHit: (id)sender; - (void) okHit: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormSetNameController.m000066400000000000000000000016111475375552500226670ustar00rootroot00000000000000// Author: Andrew E. Ruder // Copyright (C) 2003 by Free Software Foundation, Inc #include #include "GormSetNameController.h" @implementation GormSetNameController : NSObject - (NSInteger)runAsModal { NSInteger result; if (!window) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if (![bundle loadNibNamed: @"GormSetName" owner: self topLevelObjects: NULL]) { return NSAlertAlternateReturn; } } [window makeKeyAndOrderFront: nil]; [window makeFirstResponder: textField]; result = [NSApp runModalForWindow: window]; return result; } - (NSTextField *) textField { return textField; } - (void) cancelHit: (id)sender { [window close]; [NSApp stopModalWithCode: NSAlertAlternateReturn]; } - (void) okHit: (id)sender { [window close]; [NSApp stopModalWithCode: NSAlertDefaultReturn]; } @end apps-gorm-gorm-1_5_0/GormCore/GormShelfPref.h000066400000000000000000000045701475375552500211470ustar00rootroot00000000000000/* GormShelfPref.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory Casamento * Date: February 2004 * * Author: Enrico Sersale * Date: August 2001 * * This class is heavily based on work done by Enrico Sersale * on ShelfPref.h for GWorkspace. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GORMSHELFPREF_H #define GORMSHELFPREF_H #include #include typedef enum { leftarrow, rightarrow } ArrowPosition; @class NSEvent; @class NSNotification; @interface ArrResizer : NSView { NSImage *arrow; ArrowPosition position; id controller; } - (id)initForController:(id)acontroller withPosition:(ArrowPosition)pos; - (ArrowPosition)position; @end @interface GormShelfPref : NSObject { IBOutlet id win; IBOutlet id prefbox; IBOutlet id iconbox; IBOutlet id imView; IBOutlet id leftResBox; IBOutlet id rightResBox; IBOutlet id nameField; IBOutlet id setButt; ArrResizer *leftResizer; ArrResizer *rightResizer; NSString *fname; int cellsWidth; } /** * Sets the frame for the resize arrows. */ - (void)tile; /** * Called when the selection is changed. */ - (void)selectionChanged:(NSNotification *)n; /** * Invoked when the resizer widgets are moved. */ - (void)startMouseEvent:(NSEvent *)event onResizer:(ArrResizer *)resizer; /** * Programmatically set a width. */ - (void)setNewWidth:(int)w; /** * Set the resizer back to the default width. */ - (IBAction)setDefaultWidth:(id)sender; /** * The view to display in the prefs panel. */ - (NSView *)view; /** * Return the current width. */ - (int) shelfCellsWidth; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormShelfPref.m000066400000000000000000000164531475375552500211570ustar00rootroot00000000000000/* GormShelfPref.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory Casamento * Date: February 2004 * * Author: Enrico Sersale * Date: August 2001 * * This class is heavily based on work done by Enrico Sersale * on ShelfPref.m for GWorkspace. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include "GormShelfPref.h" #define BOX_W 197 #define NAME_OR_Y 5 #define NAME_W 16 #define NAME_MARGIN 6 #ifndef max #define max(a,b) ((a) > (b) ? (a):(b)) #endif #ifndef min #define min(a,b) ((a) < (b) ? (a):(b)) #endif static NSString *nibName = @"GormShelfPref"; @implementation ArrResizer - (void)dealloc { RELEASE (arrow); [super dealloc]; } - (id)initForController:(id)acontroller withPosition:(ArrowPosition)pos { self = [super init]; [self setFrame: NSMakeRect(0, 0, 16, 16)]; position = pos; controller = acontroller; if (position == leftarrow) { ASSIGN (arrow, [NSImage imageNamed: @"LeftArr.tiff"]); } else { ASSIGN (arrow, [NSImage imageNamed: @"RightArr.tiff"]); } return self; } - (ArrowPosition)position { return position; } - (void)mouseDown:(NSEvent *)e { [controller startMouseEvent: e onResizer: self]; } - (void)drawRect:(NSRect)rect { [super drawRect: rect]; [arrow compositeToPoint: NSZeroPoint operation: NSCompositeSourceOver]; } @end @implementation GormShelfPref - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; TEST_RELEASE (prefbox); RELEASE (leftResizer); RELEASE (rightResizer); RELEASE (fname); [super dealloc]; } - (id)init { self = [super init]; if ((self = [super init]) != nil) { if ([NSBundle loadNibNamed: nibName owner: self] == NO) { NSLog(@"failed to load %@!", nibName); } else { int orx; RETAIN (prefbox); RELEASE (win); [imView setImageScaling: NSScaleProportionally]; // set up the info... [imView setImage: [NSImage imageNamed: @"GormObject.tiff"]]; ASSIGN(fname, @"GormSampleObjectName"); cellsWidth = [self shelfCellsWidth]; orx = (int)((BOX_W - cellsWidth) / 2); leftResizer = [[ArrResizer alloc] initForController: self withPosition: leftarrow]; [leftResizer setFrame: NSMakeRect(0, 0, NAME_W, NAME_W)]; [(NSBox *)leftResBox setContentView: leftResizer]; [leftResBox setFrame: NSMakeRect(orx - NAME_W, NAME_OR_Y, NAME_W, NAME_W)]; rightResizer = [[ArrResizer alloc] initForController: self withPosition: rightarrow]; [rightResizer setFrame: NSMakeRect(0, 0, NAME_W, NAME_W)]; [(NSBox *)rightResBox setContentView: rightResizer]; [rightResBox setFrame: NSMakeRect(orx + cellsWidth, NAME_OR_Y, NAME_W, NAME_W)]; [nameField setFrame: NSMakeRect(orx, NAME_OR_Y, cellsWidth, NAME_W)]; [nameField setStringValue: cutFileLabelText(fname, nameField, cellsWidth -NAME_MARGIN)]; /* Internationalization */ [setButt setTitle: _(@"Default")]; [iconbox setTitle: _(@"Title Width")]; } } return self; } - (NSView *)view { return ((NSView *)prefbox); } - (void)selectionChanged:(NSNotification *)n { /* NSArray *selPaths = [gw selectedPaths]; int count = [selPaths count]; NSString *fpath = [selPaths objectAtIndex: 0]; NSString *defApp; NSString *type; ASSIGN (fname, [fpath lastPathComponent]); [imView setImage: @"GormObject.tiff"]; cellsWidth = [self shelfCellsWidth]; [self tile]; */ } - (int) shelfCellsWidth { // return the current cell width; return [[NSUserDefaults standardUserDefaults] integerForKey: @"CellSizeWidth"]; } - (void)tile { int orx = (int)((BOX_W - cellsWidth) / 2); [nameField setFrame: NSMakeRect(orx, NAME_OR_Y, cellsWidth, NAME_W)]; [nameField setStringValue: cutFileLabelText(fname, nameField, cellsWidth -NAME_MARGIN)]; [leftResBox setFrame: NSMakeRect(orx - NAME_W, NAME_OR_Y, NAME_W, NAME_W)]; [rightResBox setFrame: NSMakeRect(orx + cellsWidth, NAME_OR_Y, NAME_W, NAME_W)]; [iconbox setNeedsDisplay: YES]; } - (void)startMouseEvent:(NSEvent *)event onResizer:(ArrResizer *)resizer { NSApplication *app = [NSApplication sharedApplication]; NSDate *farAway = [NSDate distantFuture]; ArrowPosition pos = [resizer position]; int orx = (int)[prefbox convertPoint: [event locationInWindow] fromView: nil].x; NSView *resbox1 = (pos == leftarrow) ? leftResBox : rightResBox; NSView *resbox2 = (pos == leftarrow) ? rightResBox : leftResBox; unsigned int eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask; NSEvent *e; [prefbox lockFocus]; [[NSRunLoop currentRunLoop] limitDateForMode: NSEventTrackingRunLoopMode]; e = [app nextEventMatchingMask: eventMask untilDate: farAway inMode: NSEventTrackingRunLoopMode dequeue: YES]; while ([e type] != NSLeftMouseUp) { int x = (int)[prefbox convertPoint: [e locationInWindow] fromView: nil].x; int diff = x - orx; int orx1 = (int)[resbox1 frame].origin.x; int orx2 = (int)[resbox2 frame].origin.x; if ((max(orx1 + diff, orx2 - diff) - min(orx1 + diff, orx2 - diff)) < 160 && (max(orx1 + diff, orx2 - diff) - min(orx1 + diff, orx2 - diff)) > 70) { int fieldwdt = max(orx1 + diff, orx2 - diff) - min(orx1 + diff, orx2 - diff) - NAME_W; int nameforx = (int)((BOX_W - fieldwdt) / 2); [resbox1 setFrameOrigin: NSMakePoint(orx1 + diff, NAME_OR_Y)]; [resbox2 setFrameOrigin: NSMakePoint(orx2 - diff, NAME_OR_Y)]; [nameField setFrame: NSMakeRect(nameforx, NAME_OR_Y, fieldwdt, NAME_W)]; [nameField setStringValue: cutFileLabelText(fname, nameField, fieldwdt -NAME_MARGIN)]; [iconbox setNeedsDisplay: YES]; orx = x; } e = [app nextEventMatchingMask: eventMask untilDate: farAway inMode: NSEventTrackingRunLoopMode dequeue: YES]; } [prefbox unlockFocus]; [self setNewWidth: (int)[nameField frame].size.width]; [setButt setEnabled: YES]; } - (void) _postNotification { NSDebugLog(@"Notify the app that the size has changed...."); [[NSNotificationCenter defaultCenter] postNotificationName: GormResizeCellNotification object: self]; } - (void)setNewWidth:(int)w { // set the new default... [[NSUserDefaults standardUserDefaults] setInteger: w forKey: @"CellSizeWidth"]; [self _postNotification]; } - (void)setDefaultWidth:(id)sender { // set some default width... cellsWidth = 72; [[NSUserDefaults standardUserDefaults] setInteger: cellsWidth forKey: @"CellSizeWidth"]; [self tile]; [setButt setEnabled: NO]; [self _postNotification]; } @end apps-gorm-gorm-1_5_0/GormCore/GormSound.h000066400000000000000000000031551475375552500203570ustar00rootroot00000000000000/** GormSound A place holder for a sound. Copyright (C) 2001 Free Software Foundation, Inc. Author: Gregory John Casamento Date: Dec 2004 This file is part of the GNUstep GUI Library. 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 3 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. */ #ifndef INCLUDED_GormSound_h #define INCLUDED_GormSound_h #include #include @class NSString; @interface GormSound : GormResource /** * Creates a GormSound object using the file at path. */ + (GormSound*) soundForPath: (NSString *)path; /** * Creates a GormSound object using the file at path, and marks it as * inside or outside of the .gorm/.nib wrapper. */ + (GormSound*) soundForPath: (NSString *)path inWrapper: (BOOL)flag; + (GormSound*) soundForData: (NSData *)aData withFileName: (NSString *)aName inWrapper: (BOOL)flag; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormSound.m000066400000000000000000000055301475375552500203630ustar00rootroot00000000000000/* GormSound.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: Dec 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormSound.h" // sound proxy object... @implementation GormSound + (GormSound*) soundForPath: (NSString *)aPath { return [GormSound soundForPath: aPath inWrapper: NO]; } + (GormSound*) soundForPath: (NSString *)aPath inWrapper: (BOOL)flag { return AUTORELEASE([[GormSound alloc] initWithPath: aPath inWrapper: flag]); } + (GormSound*)soundForData: (NSData *)aData withFileName: (NSString *)aName inWrapper: (BOOL)flag { return AUTORELEASE([[GormSound alloc] initWithData: aData withFileName: aName inWrapper: flag]); } - (id) initWithData: (NSData *)aData withFileName: (NSString *)aName inWrapper: (BOOL)flag { if((self = [super initWithData: aData withFileName: aName inWrapper: flag])) { // ASSIGN(sound, AUTORELEASE([[NSImage alloc] initWithData: aData])); } return self; } - (id) initWithName: (NSString *)aName path: (NSString *)aPath inWrapper: (BOOL)flag { if((self = [super initWithName: aName path: aPath inWrapper: flag]) != nil) { NSSound *sound = [[NSSound alloc] initWithContentsOfFile: aPath byReference: YES]; [(NSSound *)sound setName: aName]; // cache the sound under the given name. } return self; } @end @implementation GormSound (IBObjectAdditions) - (NSString *)inspectorClassName { return @"GormSoundInspector"; } - (NSString *) classInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString *) connectInspectorClassName { return @"GormNotApplicableInspector"; } - (NSString *) objectNameForInspectorTitle { return @"Sound"; } - (NSImage *) imageForViewer { static NSImage *image = nil; if (image == nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; NSString *bpath = [bundle pathForImageResource: @"GormSound"]; image = [[NSImage alloc] initWithContentsOfFile: bpath]; } return image; } @end apps-gorm-gorm-1_5_0/GormCore/GormSoundEditor.h000066400000000000000000000022221475375552500215200ustar00rootroot00000000000000/* GormSoundEditor.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2003, 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormSoundEditor_h #define INCLUDED_GormSoundEditor_h #include "GormResourceEditor.h" @interface GormSoundEditor : GormResourceEditor // + (GormSoundEditor*) editorForDocument: (id)aDocument; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormSoundEditor.m000066400000000000000000000062321475375552500215320ustar00rootroot00000000000000/* GormSoundEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormSoundEditor.h" #include "GormProtocol.h" #include "GormFunctions.h" #include "GormPalettesManager.h" #include "GormSound.h" @implementation GormSoundEditor static NSMapTable *docMap = 0; + (void) initialize { if (self == [GormSoundEditor class]) { docMap = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks, NSNonRetainedObjectMapValueCallBacks, 2); } } + (GormSoundEditor*) editorForDocument: (id)aDocument { id editor = NSMapGet(docMap, (void*)aDocument); if (editor == nil) { editor = [[self alloc] initWithObject: nil inDocument: aDocument]; AUTORELEASE(editor); } return editor; } - (NSArray *) fileTypes { return [NSSound soundUnfilteredFileTypes]; } - (NSArray *)pbTypes { return [NSArray arrayWithObject: GormSoundPboardType]; } - (NSString *) resourceType { return @"sound"; } - (id) placeHolderWithPath: (NSString *)string { return [GormSound soundForPath: string]; } - (void) addSystemResources { NSMutableArray *list = [NSMutableArray array]; NSEnumerator *en; id obj; GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; // add all of the system objects... [list addObjectsFromArray: systemSoundsList()]; [list addObjectsFromArray: [palettesManager importedSounds]]; en = [list objectEnumerator]; while((obj = [en nextObject]) != nil) { GormSound *sound = [GormSound soundForPath: obj]; [sound setSystemResource: YES]; [self addObject: sound]; } } /* * Initialisation - register to receive DnD with our own types. */ - (id) initWithObject: (id)anObject inDocument: (id)aDocument { id old = NSMapGet(docMap, (void*)aDocument); if (old != nil) { RELEASE(self); self = RETAIN(old); [self addObject: anObject]; return self; } if ((self = [super initWithObject: anObject inDocument: aDocument]) != nil) { NSMapInsert(docMap, (void*)aDocument, (void*)self); } return self; } - (void) willCloseDocument: (NSNotification *)aNotification { NSMapRemove(docMap,document); [super willCloseDocument: aNotification]; } - (void) close { [super close]; NSMapRemove(docMap,document); } @end apps-gorm-gorm-1_5_0/GormCore/GormSoundInspector.h000066400000000000000000000026411475375552500222450ustar00rootroot00000000000000/** GormSoundInspector allow user to inspect sound files in Gorm Copyright (C) 2002 Free Software Foundation, Inc. Author: Gregory John Casamento Date: September 2002 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ #ifndef INCLUDED_GormSoundInspector_h #define INCLUDED_GormSoundInspector_h #include #include @class GormClassManager; @class GormSoundView; @interface GormSoundInspector : IBInspector { GormSoundView *soundView; } - (void) stop: (id)sender; - (void) play: (id)sender; - (void) pause: (id)sender; - (void) record: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormSoundInspector.m000066400000000000000000000051001475375552500222430ustar00rootroot00000000000000/** GormSoundInspector allow user to select custom classes Copyright (C) 2002 Free Software Foundation, Inc. Author: Gregory John Casamento Date: September 2002 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All rights reserved */ #include #include "GormSoundInspector.h" #include "GormPrivate.h" #include "GormClassManager.h" #include "GormDocument.h" #include "GormPrivate.h" #include "GormSoundView.h" #include "GormSound.h" @implementation GormSoundInspector + (void) initialize { if (self == [GormSoundInspector class]) { // TBD } } - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; // load the gui... if (![bundle loadNibNamed: @"GormSoundInspector" owner: self topLevelObjects: NULL]) { NSLog(@"Could not open gorm GormSoundInspector"); return nil; } } return self; } - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; [super dealloc]; } - (void) setObject: (id)anObject { // if its not nil, load it... if(anObject != nil) { if([anObject isKindOfClass: [GormSound class]]) { id snd; NSDebugLog(@"Sound inspector notified: %@",anObject); snd = AUTORELEASE([[NSSound alloc] initWithContentsOfFile: [anObject path] byReference: YES]); [super setObject: snd]; [soundView setSound: snd]; NSDebugLog(@"Loaded sound"); } } } - (void) stop: (id)sender { NSDebugLog(@"Stop"); [(NSSound *)object stop]; } - (void) play: (id)sender { NSDebugLog(@"Play"); [(NSSound *)object play]; } - (void) pause: (id)sender { NSDebugLog(@"Pause"); [(NSSound *)object pause]; } - (void) record: (id)sender { NSDebugLog(@"Record"); // [object record]; } @end apps-gorm-gorm-1_5_0/GormCore/GormSoundView.h000066400000000000000000000022341475375552500212070ustar00rootroot00000000000000/** GormSoundView Visualizes a sound. Copyright (C) 2004 Free Software Foundation, Inc. Author: Gregory John Casamento Date: May 2004 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All Rights reserved */ #include @interface GormSoundView : NSView { NSSound *_sound; } - (void)setSound: (NSSound *)sound; - (NSSound *)sound; @end apps-gorm-gorm-1_5_0/GormCore/GormSoundView.m000066400000000000000000000051741475375552500212220ustar00rootroot00000000000000/** GormSoundView Visualizes a sound. Copyright (C) 2004 Free Software Foundation, Inc. Author: Gregory John Casamento Date: May 2004 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 3 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. */ /* All rights reserved */ #include #include #include "GormSoundView.h" // add a data method to the NSSound class... @interface NSSound (SoundView) - (NSData *)data; @end @implementation NSSound (SoundView) - (NSData *)data { return _data; } @end /* static float findMax(NSData *data) { float max = 0.0; NSInteger index = 0; float *array = (float *)[data bytes]; NSInteger len = [data length]; // find the maximum... for(index = 0; index < len; index++) { float d = array[index]; if(d > max) { max = d; } } return max; } */ @implementation GormSoundView - (void) setSound: (NSSound *)sound { NSLog(@"Set sound..."); ASSIGN(_sound,sound); [self setNeedsDisplay: YES]; } - (NSSound *)sound { return _sound; } /* - (void) drawRect: (NSRect)aRect { float w = aRect.size.width; float h = aRect.size.height; float offset = (h/2); NSData *soundData = [_sound data]; float *data = 0; float x1 = 0, x2 = 0, y1 = offset, y2 = offset; float max = findMax(soundData); float multiplier = h/max; NSInteger length = [soundData length]; NSInteger index = 0; NSInteger step = (length/(int)w); [super drawRect: aRect]; PSsetrgbcolor(1.0,0,0); // red data = (float *)[soundData bytes]; if( length > 2 ) { x1 = (data[0] * multiplier); y1 = offset; for(index = step; index < w; index+=step) { NSInteger i = (int)index; float d = data[i]; // calc new position... x2 = d * multiplier; y2 = index + offset; PSmoveto(x1,y1); PSlineto(x2,y2); // move to old vars... x1 = x2; y1 = y2; } } } */ @end apps-gorm-gorm-1_5_0/GormCore/GormSplitViewEditor.h000066400000000000000000000022111475375552500223540ustar00rootroot00000000000000/* GormSplitViewEditor.h - Editor for splitviews. * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: Aug 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormSplitViewEditor_h #define INCLUDED_GormSplitViewEditor_h #include @interface GormSplitViewEditor : GormViewWithSubviewsEditor { } - (NSArray *)destroyAndListSubviews; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormSplitViewEditor.m000066400000000000000000000216641475375552500223760ustar00rootroot00000000000000/* GormSplitViewEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "GormPrivate.h" #include "GormSplitViewEditor.h" #include "GormInternalViewEditor.h" #include "GormBoxEditor.h" #include "GormViewKnobs.h" #define _EO ((NSSplitView *)_editedObject) @implementation GormSplitViewEditor - (id) initWithObject: (id) anObject inDocument: (id) aDocument { opened = NO; _displaySelection = YES; self = [super initWithObject: anObject inDocument: aDocument]; [self registerForDraggedTypes: [NSArray arrayWithObjects: IBViewPboardType, GormLinkPboardType, IBFormatterPboardType, nil]]; return self; } - (BOOL) activate { if ([super activate]) { NSEnumerator *enumerator; NSView *sub; NSDebugLog(@"activating %@ GormSplitViewEditor %@", self, _EO); [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(splitViewDidResizeSubviews:) name: NSSplitViewDidResizeSubviewsNotification object: _EO]; enumerator = [[NSArray arrayWithArray: [_EO subviews]] objectEnumerator]; while ((sub = [enumerator nextObject]) != nil) { NSDebugLog(@"ac %@ editorForObject: %@", self, sub); if ([sub isKindOfClass: [GormViewEditor class]] == NO) { NSDebugLog(@"ac %@ yes", self); [document editorForObject: sub inEditor: self create: YES]; } } return YES; } return NO; } - (void) deactivate { if (activated == YES) { [self deactivateSubeditors]; openedSubeditor = nil; [[NSNotificationCenter defaultCenter] removeObserver: self]; [super deactivate]; } } - (void) validateFrame: (NSRect) frame withEvent: (NSEvent *) theEvent andPlacementInfo: (GormPlacementInfo *) gpi { [super validateFrame: frame withEvent: theEvent andPlacementInfo: gpi]; [_EO adjustSubviews]; } - (BOOL) acceptsTypeFromArray: (NSArray*)types { if ([super acceptsTypeFromArray: types]) { return YES; } else { return [types containsObject: IBViewPboardType]; } } - (NSDragOperation) draggingEntered: (id)sender { NSPasteboard *dragPb; NSArray *types; id delegate = [NSApp delegate]; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { [delegate displayConnectionBetween: [delegate connectSource] and: _EO]; return NSDragOperationLink; } else if ([types containsObject: IBViewPboardType] == YES) { return NSDragOperationCopy; } else { return NSDragOperationNone; } } - (BOOL) prepareForDragOperation: (id)sender { NSPasteboard *dragPb; NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { return YES; } else if ([types containsObject: IBViewPboardType] == YES) { return YES; } else { return NO; } } - (NSDragOperation) draggingUpdated: (id)sender { NSPasteboard *dragPb; NSArray *types; id delegate = [NSApp delegate]; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { [delegate displayConnectionBetween: [delegate connectSource] and: _EO]; return NSDragOperationLink; } else if ([types containsObject: IBViewPboardType] == YES) { return NSDragOperationCopy; } else { return NSDragOperationNone; } } - (BOOL) performDragOperation: (id)sender { NSPasteboard *dragPb; NSArray *types; id delegate = [NSApp delegate]; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType]) { [delegate displayConnectionBetween: [delegate connectSource] and: _EO]; [delegate startConnecting]; } else if ([types containsObject: IBViewPboardType] == YES) { NSArray *views; NSEnumerator *enumerator; NSView *sub; views = [document pasteType: IBViewPboardType fromPasteboard: dragPb parent: _EO]; enumerator = [views objectEnumerator]; while ((sub = [enumerator nextObject]) != nil) { [_EO addSubview: sub]; [document editorForObject: sub inEditor: self create: YES]; } [_EO adjustSubviews]; [_EO setNeedsDisplay: YES]; } return YES; } - (void) mouseDown: (NSEvent *) theEvent { BOOL onKnob = NO; NSView *clickedSubview; { if ([parent respondsToSelector: @selector(selection)] && [[parent selection] containsObject: _EO]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) onKnob = YES; } if (onKnob == YES) { if (parent) return [parent mouseDown: theEvent]; else return [self noResponderFor: @selector(mouseDown:)]; } } if (opened == NO) { [super mouseDown: theEvent]; return; } { NSInteger i; NSArray *subs = [_EO subviews]; NSInteger count = [subs count]; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; clickedSubview = [_EO hitTest: mouseDownPoint]; for ( i = 0; i < count; i++ ) { if ([clickedSubview isDescendantOf: [subs objectAtIndex: i]]) { break; } } if (i < count) clickedSubview = [subs objectAtIndex: i]; else { clickedSubview = nil; } } if (clickedSubview == nil) { if (openedSubeditor) [openedSubeditor deactivate]; [_EO mouseDown: theEvent]; } else { [self selectObjects: [NSArray arrayWithObject: clickedSubview]]; [self setNeedsDisplay: YES]; if ([theEvent clickCount] == 2 && [clickedSubview isKindOfClass: [GormViewWithSubviewsEditor class]] && ([(GormViewWithSubviewsEditor *) clickedSubview canBeOpened] == YES) && (clickedSubview != self)) { if ((openedSubeditor != (GormViewWithSubviewsEditor *)clickedSubview) && openedSubeditor) [openedSubeditor deactivate]; [self setOpenedSubeditor: (GormViewWithSubviewsEditor *)clickedSubview]; if ([(GormViewWithSubviewsEditor *) clickedSubview isOpened] == NO) [(GormViewWithSubviewsEditor *)clickedSubview setOpened: YES]; [clickedSubview mouseDown: theEvent]; } } } - (void) splitViewDidResizeSubviews: (NSNotification *)aNotification { [self setNeedsDisplay: YES]; } - (void) ungroup { NSView *toUngroup; if ([selection count] != 1) return; toUngroup = [selection objectAtIndex: 0]; if ([toUngroup isKindOfClass: [GormBoxEditor class]] || [toUngroup isKindOfClass: [GormSplitViewEditor class]]) { id contentView = toUngroup; NSMutableArray *newSelection = [NSMutableArray array]; NSArray *views; NSInteger i; views = [contentView destroyAndListSubviews]; for (i = 0; i < [views count]; i++) { [_editedObject addSubview: [views objectAtIndex: i]]; [newSelection addObject: [document editorForObject: [views objectAtIndex: i] inEditor: self create: YES]]; } [[contentView editedObject] removeFromSuperview]; [_EO adjustSubviews]; [self setNeedsDisplay: YES]; } } - (NSArray *)destroyAndListSubviews { NSEnumerator *enumerator = [[_EO subviews] objectEnumerator]; GormViewEditor *subview; NSMutableArray *newSelection = [NSMutableArray array]; [parent makeSubeditorResign]; while ((subview = [enumerator nextObject]) != nil) { id v; NSRect frame; v = [subview editedObject]; frame = [v frame]; frame = [parent convertRect: frame fromView: _EO]; [subview deactivate]; [v setFrame: frame]; [newSelection addObject: v]; } [self close]; [document detachObject: self]; return newSelection; } @end apps-gorm-gorm-1_5_0/GormCore/GormStandaloneViewEditor.h000066400000000000000000000022111475375552500233510ustar00rootroot00000000000000/* GormStandaloneViewEditor.h * * Copyright (C) 2009 Free Software Foundation, Inc. * * Author: Gregory Casamento * Date: 2009 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormStandaloneViewEditor_h #define INCLUDED_GormStandaloneViewEditor_h #include @interface GormStandaloneViewEditor : GormViewWithContentViewEditor @end #endif apps-gorm-gorm-1_5_0/GormCore/GormStandaloneViewEditor.m000066400000000000000000000231361475375552500233670ustar00rootroot00000000000000/* GormStandaloneViewEditor.m * * Copyright (C) 2009 Free Software Foundation, Inc. * * Author: Gregory Casamento * Date: 2009 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include static NSImage *verticalImage; static NSImage *horizontalImage; @class GormEditorToParent; @implementation GormStandaloneViewEditor - (void) mouseDown: (NSEvent *) theEvent { BOOL onKnob = NO; if ([parent respondsToSelector: @selector(selection)] && [[parent selection] containsObject: _editedObject]) { IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([self bounds], mouseDownPoint); if (knob != IBNoneKnobPosition) onKnob = YES; } if (onKnob == YES) { if (parent) return [parent mouseDown: theEvent]; else return [self noResponderFor: @selector(mouseDown:)]; } if ([parent isOpened] == NO) { NSDebugLog(@"md %@ calling my parent %@", self, parent); [parent mouseDown: theEvent]; return; } // are we on the knob of a selected view ? { NSInteger count = [selection count]; NSInteger i; GormViewEditor *knobView = nil; IBKnobPosition knob = IBNoneKnobPosition; NSPoint mouseDownPoint; for ( i = 0; i < count; i++ ) { mouseDownPoint = [[[selection objectAtIndex: i] superview] convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([[selection objectAtIndex: i] frame], mouseDownPoint); if (knob != IBNoneKnobPosition) { knobView = [selection objectAtIndex: i]; [self selectObjects: [NSMutableArray arrayWithObject: knobView]]; // we should set knobView as the only view selected break; } } if ( openedSubeditor != nil ) { mouseDownPoint = [[openedSubeditor superview] convertPoint: [theEvent locationInWindow] fromView: nil]; knob = GormKnobHitInRect([openedSubeditor frame], mouseDownPoint); if (knob != IBNoneKnobPosition) { knobView = openedSubeditor; // we should take back the selection // we should select openedSubeditor only [self selectObjects: [NSMutableArray arrayWithObject: knobView]]; [[self window] disableFlushWindow]; [self display]; [[self window] enableFlushWindow]; [[self window] flushWindow]; } } if (knobView != nil) { [self handleMouseOnKnob: knob ofView: knobView withEvent: theEvent]; [self setNeedsDisplay: YES]; return; } } // get the view we are on { GormViewEditor *editorView; { NSPoint mouseDownPoint; NSView *result = nil; GormViewEditor *theParent = nil; mouseDownPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil]; result = [_editedObject hitTest: mouseDownPoint]; // we should get a result which is a direct subeditor { id temp = result; if ([temp isKindOfClass: [GormViewEditor class]]) theParent = [(GormViewEditor *)temp parent]; while ((temp != nil) && (theParent != self) && (temp != self)) { temp = [temp superview]; while (![temp isKindOfClass: [GormViewEditor class]]) { temp = [temp superview]; } theParent = [(GormViewEditor *)temp parent]; } if (temp != nil) { result = temp; } else { NSDebugLog(@"WARNING -- strange case"); result = self; } } if ([result isKindOfClass: [GormViewEditor class]]) { } else { result = nil; } // this is the direct subeditor the mouse was clicked on // (or self) editorView = (GormViewEditor *)result; } if (([theEvent clickCount] == 2) && [editorView isKindOfClass: [GormViewWithSubviewsEditor class]] && ([(id)editorView canBeOpened] == YES) && (editorView != self)) // Let's open a subeditor { [(GormViewWithSubviewsEditor *) editorView setOpened: YES]; [self silentlyResetSelection]; openedSubeditor = (GormViewWithSubviewsEditor *) editorView; [self setNeedsDisplay: YES]; return; } if (editorView != self) { [self handleMouseOnView: editorView withEvent: theEvent]; } else // editorView == self { NSEvent *e; unsigned eventMask; NSDate *future = [NSDate distantFuture]; NSRect oldRect = NSZeroRect; NSPoint p, oldp; NSRect r = NSZeroRect; float x, y, w, h; oldp = [self convertPoint: [theEvent locationInWindow] fromView: nil]; eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask; if (!([theEvent modifierFlags] & NSShiftKeyMask)) [self selectObjects: [NSMutableArray array]]; [[self window] disableFlushWindow]; [self setNeedsDisplay: YES]; [self displayIfNeeded]; [[self window] enableFlushWindow]; [[self window] flushWindowIfNeeded]; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; [self lockFocus]; while ([e type] != NSLeftMouseUp) { p = [self convertPoint: [e locationInWindow] fromView: nil]; x = (p.x >= oldp.x) ? oldp.x : p.x; y = (p.y >= oldp.y) ? oldp.y : p.y; w = max(p.x, oldp.x) - min(p.x, oldp.x); w = (w == 0) ? 1 : w; h = max(p.y, oldp.y) - min(p.y, oldp.y); h = (h == 0) ? 1 : h; r = NSMakeRect(x, y, w, h); if (NSEqualRects(oldRect, NSZeroRect) == NO) { [verticalImage compositeToPoint: NSMakePoint(NSMinX(oldRect), NSMinY(oldRect)) fromRect: NSMakeRect(0.0, 0.0, 1.0, oldRect.size.height) operation: NSCompositeCopy]; [verticalImage compositeToPoint: NSMakePoint(NSMaxX(oldRect)-1, NSMinY(oldRect)) fromRect: NSMakeRect(1.0, 0.0, 1.0, oldRect.size.height) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(oldRect), NSMinY(oldRect)) fromRect: NSMakeRect(0.0, 0.0, oldRect.size.width, 1.0) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(oldRect), NSMaxY(oldRect)-1) fromRect: NSMakeRect(0.0, 1.0, oldRect.size.width, 1.0) operation: NSCompositeCopy]; } { NSRect wr; wr = [self convertRect: r toView: nil]; [verticalImage lockFocus]; NSCopyBits([[self window] gState], NSMakeRect(NSMinX(wr), NSMinY(wr), 1.0, r.size.height), NSMakePoint(0.0, 0.0)); NSCopyBits([[self window] gState], NSMakeRect(NSMaxX(wr)-1, NSMinY(wr), 1.0, r.size.height), NSMakePoint(1.0, 0.0)); [verticalImage unlockFocus]; [horizontalImage lockFocus]; NSCopyBits([[self window] gState], NSMakeRect(NSMinX(wr), NSMinY(wr), r.size.width, 1.0), NSMakePoint(0.0, 0.0)); NSCopyBits([[self window] gState], NSMakeRect(NSMinX(wr), NSMaxY(wr)-1, r.size.width, 1.0), NSMakePoint(0.0, 1.0)); [horizontalImage unlockFocus]; } [[NSColor darkGrayColor] set]; NSFrameRect(r); oldRect = r; [[self window] enableFlushWindow]; [[self window] flushWindow]; [[self window] disableFlushWindow]; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; } if (NSEqualRects(r, NSZeroRect) == NO) { [verticalImage compositeToPoint: NSMakePoint(NSMinX(r), NSMinY(r)) fromRect: NSMakeRect(0.0, 0.0, 1.0, r.size.height) operation: NSCompositeCopy]; [verticalImage compositeToPoint: NSMakePoint(NSMaxX(r)-1, NSMinY(r)) fromRect: NSMakeRect(1.0, 0.0, 1.0, r.size.height) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(r), NSMinY(r)) fromRect: NSMakeRect(0.0, 0.0, r.size.width, 1.0) operation: NSCompositeCopy]; [horizontalImage compositeToPoint: NSMakePoint(NSMinX(r), NSMaxY(r)-1) fromRect: NSMakeRect(0.0, 1.0, r.size.width, 1.0) operation: NSCompositeCopy]; } { NSMutableArray *array; NSEnumerator *enumerator; NSView *subview; if ([theEvent modifierFlags] & NSShiftKeyMask) array = [NSMutableArray arrayWithArray: selection]; else array = [NSMutableArray arrayWithCapacity: 8]; enumerator = [[_editedObject subviews] objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { if ((NSIntersectsRect(r, [subview frame]) == YES) && [subview isKindOfClass: [GormViewEditor class]]) { [array addObject: subview]; } } if ([array count] > 0) { [self selectObjects: array]; } [self displayIfNeeded]; [self unlockFocus]; [[self window] enableFlushWindow]; [[self window] flushWindow]; } } } } @end apps-gorm-gorm-1_5_0/GormCore/GormViewEditor.h000066400000000000000000000050531475375552500213470ustar00rootroot00000000000000/* GormViewEditor.h * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #ifndef INCLUDED_GormViewEditor_h #define INCLUDED_GormViewEditor_h @class GormViewWithSubviewsEditor; @class GormPlacementInfo; @class GormViewWindow; @interface GormViewEditor : NSView { id document; id _editedObject; BOOL activated; BOOL closed; GormViewWithSubviewsEditor *parent; GormViewWindow *viewWindow; } - (BOOL) activate; - (id) initWithObject: (id)anObject inDocument: (id)aDocument; - (void) close; - (void) deactivate; - (id) document; - (id) editedObject; - (void) detachSubviews; - (void) postDraw: (NSRect) rect; - (id) parent; - (NSArray *) selection; - (void) makeSelectionVisible: (BOOL) value; - (BOOL) isOpened; - (BOOL) canBeOpened; - (void) setOpened: (BOOL) value; - (void) frameDidChange: (id) sender; @end @interface GormViewEditor (EditingAdditions) - (NSEvent *) editTextField: view withEvent: (NSEvent *)theEvent; @end @interface GormViewEditor (IntelligentPlacement) - (GormPlacementInfo *) initializeResizingInFrame: (NSView *)view withKnob: (IBKnobPosition) knob; - (void) updateResizingWithFrame: (NSRect) frame andEvent: (NSEvent *)theEvent andPlacementInfo: (GormPlacementInfo*) gpi; - (void) validateFrame: (NSRect) frame withEvent: (NSEvent *) theEvent andPlacementInfo: (GormPlacementInfo*)gpi; @end @interface GormViewEditor (WindowAndRect) /* * Pull the window object and it's rect. */ - (NSWindow *)windowAndRect: (NSRect *)prect forObject: (id) object; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormViewEditor.m000066400000000000000000001273541475375552500213650ustar00rootroot00000000000000/* GormViewEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormGenericEditor.h" #include "GormViewEditor.h" #include "GormViewWithSubviewsEditor.h" #include "GormPlacementInfo.h" #include "GormFunctions.h" #include "GormViewWindow.h" #include "GormViewKnobs.h" #include "GormClassManager.h" #include "GormDocument.h" #include #include @implementation GormPlacementInfo @end @implementation GormPlacementHint - (float) position { return _position; } - (float) start { return _start; } - (float) end { return _end; } - (NSRect) frame { return _frame; } - (GormHintBorder) border { return _border; } - (NSString *) description { switch (_border) { case Left: return [NSString stringWithFormat: @"Left %f (%f-%f)", _position, _start, _end]; case Right: return [NSString stringWithFormat: @"Right %f (%f-%f)", _position, _start, _end]; case Top: return [NSString stringWithFormat: @"Top %f (%f-%f)", _position, _start, _end]; default: return [NSString stringWithFormat: @"Bottom %f (%f-%f)", _position, _start, _end]; } } - (id) initWithBorder: (GormHintBorder) border position: (float) position validityStart: (float) start validityEnd: (float) end frame: (NSRect) frame { _border = border; _start = start; _end = end; _position = position; _frame = frame; return self; } - (NSRect) rectWithHalfDistance: (int) halfHeight { switch (_border) { case Top: case Bottom: return NSMakeRect(_start, _position - halfHeight, _end - _start, 2 * halfHeight); case Left: case Right: return NSMakeRect(_position - halfHeight, _start, 2 * halfHeight, _end - _start); default: return NSZeroRect; } } - (int) distanceToFrame: (NSRect) frame { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSInteger guideSpacing = [userDefaults integerForKey: @"GuideSpacing"]; NSInteger halfSpacing = guideSpacing / 2; NSRect rect = [self rectWithHalfDistance: (halfSpacing + 1)]; if (NSIntersectsRect(frame, rect) == NO) return guideSpacing; switch (_border) { case Top: return (int) fabs (_position - NSMaxY(frame)); case Bottom: return (int) fabs (_position - NSMinY(frame)); case Left: return (int) fabs (_position - NSMinX(frame)); case Right: return (int) fabs (_position - NSMaxX(frame)); default: return guideSpacing; } } @end static BOOL currently_displaying = NO; @implementation GormViewEditor - (void) encodeWithCoder: (NSCoder*)aCoder { [NSException raise: NSInternalInconsistencyException format: @"Cannot encode a GormViewEditor."]; } - (id) initWithCoder: (NSCoder*)aCoder { [NSException raise: NSInternalInconsistencyException format: @"Cannot decode a GormViewEditor."]; return nil; } - (id) document { return document; } - (id) editedObject { return _editedObject; } - (BOOL) activate { if (activated == NO) { NSView *superview; NSString *name = [document nameForObject: _editedObject]; GormClassManager *cm = [(GormDocument *)document classManager]; // if the view window is not nil, it's a standalone view... if(viewWindow != nil) { if([viewWindow view] != _editedObject) { [viewWindow setView: _editedObject]; } } superview = [_editedObject superview]; [self setFrame: [_editedObject frame]]; [self setBounds: [self frame]]; [superview replaceSubview: _editedObject with: self]; [self setAutoresizingMask: NSViewMaxXMargin | NSViewMinYMargin]; // we want autoresizing for standalone views... if(viewWindow == nil) { [self setAutoresizesSubviews: NO]; [_editedObject setPostsFrameChangedNotifications: YES]; } else { [self setAutoresizesSubviews: YES]; } [self addSubview: _editedObject]; [self setToolTip: [NSString stringWithFormat: @"%@,%@", name, [cm classNameForObject: _editedObject]]]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(editedObjectFrameDidChange:) name: NSViewFrameDidChangeNotification object: _editedObject]; [self setPostsFrameChangedNotifications: YES]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(frameDidChange:) name: NSViewFrameDidChangeNotification object: self]; parent = (GormViewWithSubviewsEditor *)[document parentEditorForEditor: self]; if ([parent isKindOfClass: [GormViewEditor class]]) { [parent setNeedsDisplay: YES]; } else { [self setNeedsDisplay: YES]; } activated = YES; return activated; } return NO; } - (id) parent { return parent; } - (void) detachSubviews { NSArray *subviews = allSubviews([self editedObject]); [document detachObjects: subviews]; } - (void) close { if (closed == NO) { [self deactivate]; if(viewWindow != nil) { [viewWindow close]; } [document editor: self didCloseForObject: _editedObject]; closed = YES; } else { NSDebugLog(@"%@ close but already closed", self); } } - (void) deactivate { if (activated == YES) { NSView *superview = [self superview]; [self removeSubview: _editedObject]; [superview replaceSubview: self with: _editedObject]; [[NSNotificationCenter defaultCenter] removeObserver: self]; // make sure the view isn't in the window after deactivation. if(viewWindow != nil) { [_editedObject removeFromSuperview]; // WithoutNeedingDisplay]; [viewWindow orderOut: self]; } activated = NO; } } - (void) dealloc { if (closed == NO) [self close]; [super dealloc]; } - (id) initWithObject: (id)anObject inDocument: (id)aDocument { NSMutableArray *draggedTypes; ASSIGN(_editedObject, (NSView*)anObject); if ((self = [super initWithFrame: [_editedObject frame]]) != nil) { // we do not retain the document... document = aDocument; draggedTypes = [NSMutableArray arrayWithObject: GormLinkPboardType]; // in addition to the link, any other types accepted by dragging delegates. [draggedTypes addObjectsFromArray: [NSView acceptedViewResourcePasteboardTypes]]; [self registerForDraggedTypes: draggedTypes]; activated = NO; closed = NO; // if this window is nil when the editor is created, we know it's a // standalone view. if([anObject window] == nil && [anObject superview] == nil) { NSDebugLog(@"#### Stand alone view: %@",_editedObject); [document attachObject: _editedObject toParent: nil]; // [document openEditorForObject: _editedObject]; viewWindow = [[GormViewWindow alloc] initWithView: _editedObject]; } } return self; } - (void) editedObjectFrameDidChange: (id) sender { NSArray *allViews = allSubviews(self); NSEnumerator *en = [allViews objectEnumerator]; id v = nil; // Set all views under this view to not post changes... while((v = [en nextObject]) != nil) { [v setPostsFrameChangedNotifications:NO]; [v setPostsBoundsChangedNotifications:NO]; } // Set the frame and the bounds... [self setFrame: [_editedObject frame]]; [self setBounds: [_editedObject frame]]; // Reset all views to post changes as expected... en = [allViews objectEnumerator]; while((v = [en nextObject]) != nil) { [v setPostsFrameChangedNotifications:YES]; [v setPostsBoundsChangedNotifications:YES]; } } - (void) frameDidChange: (id) sender { [self setBounds: [self frame]]; [_editedObject setFrame: [self frame]]; } - (GormPlacementInfo *) initializeResizingInFrame: (NSView *)view withKnob: (IBKnobPosition) knob { GormPlacementInfo *gip; gip = [[GormPlacementInfo alloc] init]; gip->resizingIn = view; gip->firstPass = YES; gip->hintInitialized = NO; gip->leftHints = nil; gip->rightHints = nil; gip->topHints = nil; gip->bottomHints = nil; gip->knob = knob; return gip; } - (void) _displayFrame: (NSRect) frame withPlacementInfo: (GormPlacementInfo*) gpi { if (gpi->firstPass == NO) [gpi->resizingIn displayRect: gpi->oldRect]; else gpi->firstPass = NO; GormShowFrameWithKnob(frame, gpi->knob); gpi->oldRect = GormExtBoundsForRect(frame); gpi->oldRect.origin.x--; gpi->oldRect.origin.y--; gpi->oldRect.size.width += 2; gpi->oldRect.size.height += 2; } - (void) _initializeHintWithInfo: (GormPlacementInfo*) gpi { NSInteger i; NSArray *subviews = [[self superview] subviews]; NSInteger count = [subviews count]; NSView *v; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSInteger guideSpacing = [userDefaults integerForKey: @"GuideSpacing"]; NSInteger halfSpacing = guideSpacing / 2; gpi->lastLeftRect = NSZeroRect; gpi->lastRightRect = NSZeroRect; gpi->lastTopRect = NSZeroRect; gpi->lastBottomRect = NSZeroRect; gpi->hintInitialized = YES; gpi->leftHints = [[NSMutableArray alloc] initWithCapacity: 2 * count]; gpi->rightHints = [[NSMutableArray alloc] initWithCapacity: 2 * count]; gpi->topHints = [[NSMutableArray alloc] initWithCapacity: 2 * count]; gpi->bottomHints = [[NSMutableArray alloc] initWithCapacity: 2 * count]; [gpi->leftHints addObject: [[GormPlacementHint alloc] initWithBorder: Left position: NSMinX([[self superview] bounds]) validityStart: NSMinY([[self superview] bounds]) validityEnd: NSMaxY([[self superview] bounds]) frame: [[self superview] bounds]]]; [gpi->leftHints addObject: [[GormPlacementHint alloc] initWithBorder: Left position: NSMinX([[self superview] bounds]) + guideSpacing validityStart: NSMinY([[self superview] bounds]) validityEnd: NSMaxY([[self superview] bounds]) frame: [[self superview] bounds]]]; [gpi->rightHints addObject: [[GormPlacementHint alloc] initWithBorder: Right position: NSMaxX([[self superview] bounds]) validityStart: NSMinY([[self superview] bounds]) validityEnd: NSMaxY([[self superview] bounds]) frame: [[self superview] bounds]]]; [gpi->rightHints addObject: [[GormPlacementHint alloc] initWithBorder: Right position: NSMaxX([[self superview] bounds]) - guideSpacing validityStart: NSMinY([[self superview] bounds]) validityEnd: NSMaxY([[self superview] bounds]) frame: [[self superview] bounds]]]; [gpi->topHints addObject: [[GormPlacementHint alloc] initWithBorder: Top position: NSMaxY([[self superview] bounds]) validityStart: NSMinX([[self superview] bounds]) validityEnd: NSMaxX([[self superview] bounds]) frame: [[self superview] bounds]]]; [gpi->topHints addObject: [[GormPlacementHint alloc] initWithBorder: Top position: NSMaxY([[self superview] bounds]) - guideSpacing validityStart: NSMinX([[self superview] bounds]) validityEnd: NSMaxX([[self superview] bounds]) frame: [[self superview] bounds]]]; [gpi->bottomHints addObject: [[GormPlacementHint alloc] initWithBorder: Bottom position: NSMinY([[self superview] bounds]) validityStart: NSMinX([[self superview] bounds]) validityEnd: NSMaxX([[self superview] bounds]) frame: [[self superview] bounds]]]; [gpi->bottomHints addObject: [[GormPlacementHint alloc] initWithBorder: Bottom position: NSMinY([[self superview] bounds]) + guideSpacing validityStart: NSMinX([[self superview] bounds]) validityEnd: NSMaxX([[self superview] bounds]) frame: [[self superview] bounds]]]; for ( i = 0; i < count; i++ ) { v = [subviews objectAtIndex: i]; if (v == self) continue; [gpi->leftHints addObject: [[GormPlacementHint alloc] initWithBorder: Left position: NSMinX([v frame]) validityStart: NSMinY([[self superview] bounds]) validityEnd: NSMaxY([[self superview] bounds]) frame: [v frame]]]; [gpi->leftHints addObject: [[GormPlacementHint alloc] initWithBorder: Left position: NSMaxX([v frame]) validityStart: NSMinY([v frame]) validityEnd: NSMaxY([v frame]) frame: [v frame]]]; [gpi->leftHints addObject: [[GormPlacementHint alloc] initWithBorder: Left position: NSMaxX([v frame]) + halfSpacing validityStart: NSMinY([v frame]) - guideSpacing validityEnd: NSMaxY([v frame]) + guideSpacing frame: [v frame]]]; [gpi->rightHints addObject: [[GormPlacementHint alloc] initWithBorder: Right position: NSMaxX([v frame]) validityStart: NSMinY([[self superview] bounds]) validityEnd: NSMaxY([[self superview] bounds]) frame: [v frame]]]; [gpi->rightHints addObject: [[GormPlacementHint alloc] initWithBorder: Right position: NSMinX([v frame]) validityStart: NSMinY([v frame]) validityEnd: NSMaxY([v frame]) frame: [v frame]]]; [gpi->rightHints addObject: [[GormPlacementHint alloc] initWithBorder: Right position: NSMinX([v frame]) - halfSpacing validityStart: NSMinY([v frame]) - guideSpacing validityEnd: NSMaxY([v frame]) + guideSpacing frame: [v frame]]]; [gpi->topHints addObject: [[GormPlacementHint alloc] initWithBorder: Top position: NSMaxY([v frame]) validityStart: NSMinX([[self superview] bounds]) validityEnd: NSMaxX([[self superview] bounds]) frame: [v frame]]]; [gpi->topHints addObject: [[GormPlacementHint alloc] initWithBorder: Top position: NSMinY([v frame]) validityStart: NSMinX([v frame]) validityEnd: NSMaxX([v frame]) frame: [v frame]]]; [gpi->topHints addObject: [[GormPlacementHint alloc] initWithBorder: Top position: NSMinY([v frame]) - halfSpacing validityStart: NSMinX([v frame]) - guideSpacing validityEnd: NSMaxX([v frame]) + guideSpacing frame: [v frame]]]; [gpi->bottomHints addObject: [[GormPlacementHint alloc] initWithBorder: Bottom position: NSMinY([v frame]) validityStart: NSMinX([[self superview] bounds]) validityEnd: NSMaxX([[self superview] bounds]) frame: [v frame]]]; [gpi->bottomHints addObject: [[GormPlacementHint alloc] initWithBorder: Bottom position: NSMaxY([v frame]) validityStart: NSMinX([v frame]) validityEnd: NSMaxX([v frame]) frame: [v frame]]]; [gpi->bottomHints addObject: [[GormPlacementHint alloc] initWithBorder: Bottom position: NSMaxY([v frame]) + halfSpacing validityStart: NSMinX([v frame]) - guideSpacing validityEnd: NSMaxX([v frame]) + guideSpacing frame: [v frame]]]; } } #undef MIN #undef MAX #define MIN(a,b) (a>b?b:a) #define MAX(a,b) (a>b?a:b) - (void) _displayFrameWithHint: (NSRect) frame withPlacementInfo: (GormPlacementInfo*)gpi { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSInteger guideSpacing = [userDefaults integerForKey: @"GuideSpacing"]; NSInteger halfSpacing = guideSpacing / 2; float leftOfFrame = NSMinX(frame); float rightOfFrame = NSMaxX(frame); float topOfFrame = NSMaxY(frame); float bottomOfFrame = NSMinY(frame); NSInteger i; NSInteger count; NSInteger lastDistance; NSInteger minimum = guideSpacing; BOOL leftEmpty = YES; BOOL rightEmpty = YES; BOOL topEmpty = YES; BOOL bottomEmpty = YES; float bestLeftPosition = 0; float bestRightPosition = 0; float bestTopPosition = 0; float bestBottomPosition = 0; float leftStart = 0; float rightStart = 0; float topStart = 0; float bottomStart = 0; float leftEnd = 0; float rightEnd = 0; float topEnd = 0; float bottomEnd = 0; NSMutableArray *bests; if (gpi->hintInitialized == NO) { [self _initializeHintWithInfo: gpi]; } { if (gpi->firstPass == NO) [gpi->resizingIn displayRect: gpi->oldRect]; else gpi->firstPass = NO; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastLeftRect]; [[self window] displayIfNeeded]; gpi->lastLeftRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastRightRect]; [[self window] displayIfNeeded]; gpi->lastRightRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastTopRect]; [[self window] displayIfNeeded]; gpi->lastTopRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastBottomRect]; [[self window] displayIfNeeded]; gpi->lastBottomRect = NSZeroRect; } if (gpi->knob == IBTopLeftKnobPosition || gpi->knob == IBMiddleLeftKnobPosition || gpi->knob == IBBottomLeftKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = (halfSpacing + 1); count = [gpi->leftHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->leftHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->leftHints objectAtIndex: i]]; minimum = lastDistance; bestLeftPosition = [[gpi->leftHints objectAtIndex: i] position]; leftEmpty = NO; } else if ((lastDistance == minimum) && (leftEmpty == NO) && ([[gpi->leftHints objectAtIndex: i] position] == bestLeftPosition)) [bests addObject: [gpi->leftHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { leftStart = NSMinY([[bests objectAtIndex: 0] frame]); leftEnd = NSMaxY([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { leftStart = MIN(NSMinY([[bests objectAtIndex: i] frame]), leftStart); leftEnd = MAX(NSMaxY([[bests objectAtIndex: i] frame]), leftEnd); } leftOfFrame = bestLeftPosition; } } if (gpi->knob == IBTopRightKnobPosition || gpi->knob == IBMiddleRightKnobPosition || gpi->knob == IBBottomRightKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = (halfSpacing + 1); count = [gpi->rightHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->rightHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->rightHints objectAtIndex: i]]; minimum = lastDistance; bestRightPosition = [[gpi->rightHints objectAtIndex: i] position]; rightEmpty = NO; } else if ((lastDistance == minimum) && (rightEmpty == NO) && ([[gpi->rightHints objectAtIndex: i] position] == bestRightPosition)) [bests addObject: [gpi->rightHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { rightStart = NSMinY([[bests objectAtIndex: 0] frame]); rightEnd = NSMaxY([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { rightStart = MIN(NSMinY([[bests objectAtIndex: i] frame]), rightStart); rightEnd = MAX(NSMaxY([[bests objectAtIndex: i] frame]), rightEnd); } rightOfFrame = bestRightPosition; } } if (gpi->knob == IBTopRightKnobPosition || gpi->knob == IBTopLeftKnobPosition || gpi->knob == IBTopMiddleKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = (halfSpacing + 1); count = [gpi->topHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->topHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->topHints objectAtIndex: i]]; minimum = lastDistance; bestTopPosition = [[gpi->topHints objectAtIndex: i] position]; topEmpty = NO; } else if ((lastDistance == minimum) && (topEmpty == NO) && ([[gpi->topHints objectAtIndex: i] position] == bestTopPosition)) [bests addObject: [gpi->topHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { topStart = NSMinX([[bests objectAtIndex: 0] frame]); topEnd = NSMaxX([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { topStart = MIN(NSMinX([[bests objectAtIndex: i] frame]), topStart); topEnd = MAX(NSMaxX([[bests objectAtIndex: i] frame]), topEnd); } topOfFrame = bestTopPosition; } } if (gpi->knob == IBBottomRightKnobPosition || gpi->knob == IBBottomLeftKnobPosition || gpi->knob == IBBottomMiddleKnobPosition) { bests = [NSMutableArray arrayWithCapacity: 4]; minimum = (halfSpacing + 1); count = [gpi->bottomHints count]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->bottomHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { bests = [NSMutableArray arrayWithCapacity: 4]; [bests addObject: [gpi->bottomHints objectAtIndex: i]]; minimum = lastDistance; bestBottomPosition = [[gpi->bottomHints objectAtIndex: i] position]; bottomEmpty = NO; } else if ((lastDistance == minimum) && (bottomEmpty == NO) && ([[gpi->bottomHints objectAtIndex: i] position] == bestBottomPosition)) [bests addObject: [gpi->bottomHints objectAtIndex: i]]; } count = [bests count]; if (count >= 1) { bottomStart = NSMinX([[bests objectAtIndex: 0] frame]); bottomEnd = NSMaxX([[bests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { bottomStart = MIN(NSMinX([[bests objectAtIndex: i] frame]), bottomStart); bottomEnd = MAX(NSMaxX([[bests objectAtIndex: i] frame]), bottomEnd); } bottomOfFrame = bestBottomPosition; } } gpi->hintFrame = NSMakeRect (leftOfFrame, bottomOfFrame, rightOfFrame - leftOfFrame, topOfFrame - bottomOfFrame); { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSColor *aColor = colorFromDict([defaults objectForKey: @"GuideColor"]); // default to the right color... if(aColor == nil) { aColor = [NSColor redColor]; } [aColor set]; if (!leftEmpty) { leftStart = MIN(NSMinY(gpi->hintFrame), leftStart); leftEnd = MAX(NSMaxY(gpi->hintFrame), leftEnd); gpi->lastLeftRect = NSMakeRect(bestLeftPosition - 1, leftStart, 2, leftEnd - leftStart); NSRectFill(gpi->lastLeftRect); } if (!rightEmpty) { rightStart = MIN(NSMinY(gpi->hintFrame), rightStart); rightEnd = MAX(NSMaxY(gpi->hintFrame), rightEnd); gpi->lastRightRect = NSMakeRect(bestRightPosition - 1, rightStart, 2, rightEnd - rightStart); NSRectFill(gpi->lastRightRect); } if (!topEmpty) { topStart = MIN(NSMinX(gpi->hintFrame), topStart); topEnd = MAX(NSMaxX(gpi->hintFrame), topEnd); gpi->lastTopRect = NSMakeRect(topStart, bestTopPosition - 1, topEnd - topStart, 2); NSRectFill(gpi->lastTopRect); } if (!bottomEmpty) { bottomStart = MIN(NSMinX(gpi->hintFrame), bottomStart); bottomEnd = MAX(NSMaxX(gpi->hintFrame), bottomEnd); gpi->lastBottomRect = NSMakeRect(bottomStart, bestBottomPosition - 1, bottomEnd - bottomStart, 2); NSRectFill(gpi->lastBottomRect); } } GormShowFrameWithKnob(gpi->hintFrame, gpi->knob); gpi->oldRect = GormExtBoundsForRect(gpi->hintFrame); gpi->oldRect.origin.x--; gpi->oldRect.origin.y--; gpi->oldRect.size.width += 2; gpi->oldRect.size.height += 2; } - (void) updateResizingWithFrame: (NSRect) frame andEvent: (NSEvent *)theEvent andPlacementInfo: (GormPlacementInfo*) gpi { if ([theEvent modifierFlags] & NSShiftKeyMask) { [self _displayFrame: frame withPlacementInfo: gpi]; } else [self _displayFrameWithHint: frame withPlacementInfo: gpi]; } - (void) validateFrame: (NSRect) frame withEvent: (NSEvent *) theEvent andPlacementInfo: (GormPlacementInfo*)gpi { if (gpi->leftHints) { RELEASE(gpi->leftHints); RELEASE(gpi->rightHints); [self setFrame: gpi->hintFrame]; } else { [self setFrame: frame]; } } - (NSRect) _displayMovingFrameWithHint: (NSRect) frame andPlacementInfo: (GormPlacementInfo*)gpi { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSInteger guideSpacing = [userDefaults integerForKey: @"GuideSpacing"]; NSInteger halfSpacing = guideSpacing / 2; float leftOfFrame = NSMinX(frame); float rightOfFrame = NSMaxX(frame); float topOfFrame = NSMaxY(frame); float bottomOfFrame = NSMinY(frame); float widthOfFrame = frame.size.width; float heightOfFrame = frame.size.height; NSInteger i; NSInteger count; NSInteger lastDistance; NSInteger minimum = guideSpacing; BOOL leftEmpty = YES; BOOL rightEmpty = YES; BOOL topEmpty = YES; BOOL bottomEmpty = YES; float leftStart = 0; float rightStart = 0; float topStart = 0; float bottomStart = 0; float leftEnd = 0; float rightEnd = 0; float topEnd = 0; float bottomEnd = 0; if (gpi->hintInitialized == NO) { [self _initializeHintWithInfo: gpi]; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastLeftRect]; [[self window] displayIfNeeded]; gpi->lastLeftRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastRightRect]; [[self window] displayIfNeeded]; gpi->lastRightRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastTopRect]; [[self window] displayIfNeeded]; gpi->lastTopRect = NSZeroRect; } { [gpi->resizingIn setNeedsDisplayInRect: gpi->lastBottomRect]; [[self window] displayIfNeeded]; gpi->lastBottomRect = NSZeroRect; } { BOOL empty = YES; float bestPosition = 0; NSMutableArray *leftBests; NSMutableArray *rightBests; minimum = (halfSpacing + 1); count = [gpi->leftHints count]; leftBests = [NSMutableArray arrayWithCapacity: 4]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->leftHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { leftBests = [NSMutableArray arrayWithCapacity: 4]; [leftBests addObject: [gpi->leftHints objectAtIndex: i]]; minimum = lastDistance; bestPosition = [[gpi->leftHints objectAtIndex: i] position]; empty = NO; } else if ((lastDistance == minimum) && (empty == NO) && ([[gpi->leftHints objectAtIndex: i] position] == bestPosition)) [leftBests addObject: [gpi->leftHints objectAtIndex: i]]; } count = [gpi->rightHints count]; rightBests = [NSMutableArray arrayWithCapacity: 4]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->rightHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { rightBests = [NSMutableArray arrayWithCapacity: 4]; leftBests = [NSMutableArray arrayWithCapacity: 4]; [rightBests addObject: [gpi->rightHints objectAtIndex: i]]; minimum = lastDistance; bestPosition = [[gpi->rightHints objectAtIndex: i] position] - widthOfFrame; empty = NO; } else if ((lastDistance == minimum) && (empty == NO) && ([[gpi->rightHints objectAtIndex: i] position] - bestPosition == widthOfFrame)) [rightBests addObject: [gpi->rightHints objectAtIndex: i]]; } count = [leftBests count]; if (count >= 1) { float position; leftEmpty = NO; position = [[leftBests objectAtIndex: 0] position]; leftStart = NSMinY([[leftBests objectAtIndex: 0] frame]); leftEnd = NSMaxY([[leftBests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { leftStart = MIN(NSMinY([[leftBests objectAtIndex: i] frame]), leftStart); leftEnd = MAX(NSMaxY([[leftBests objectAtIndex: i] frame]), leftEnd); } leftOfFrame = position; rightOfFrame = position + widthOfFrame; } count = [rightBests count]; if (count >= 1) { float position; rightEmpty = NO; position = [[rightBests objectAtIndex: 0] position]; rightStart = NSMinY([[rightBests objectAtIndex: 0] frame]); rightEnd = NSMaxY([[rightBests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { rightStart = MIN(NSMinY([[rightBests objectAtIndex: i] frame]), rightStart); rightEnd = MAX(NSMaxY([[rightBests objectAtIndex: i] frame]), rightEnd); } rightOfFrame = position; leftOfFrame = position - widthOfFrame; } } { BOOL empty = YES; float bestPosition = 0; NSMutableArray *bottomBests; NSMutableArray *topBests; minimum = (halfSpacing + 1); count = [gpi->bottomHints count]; bottomBests = [NSMutableArray arrayWithCapacity: 4]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->bottomHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { bottomBests = [NSMutableArray arrayWithCapacity: 4]; [bottomBests addObject: [gpi->bottomHints objectAtIndex: i]]; minimum = lastDistance; bestPosition = [[gpi->bottomHints objectAtIndex: i] position]; empty = NO; } else if ((lastDistance == minimum) && (empty == NO) && ([[gpi->bottomHints objectAtIndex: i] position] == bestPosition)) [bottomBests addObject: [gpi->bottomHints objectAtIndex: i]]; } count = [gpi->topHints count]; topBests = [NSMutableArray arrayWithCapacity: 4]; for ( i = 0; i < count; i++ ) { lastDistance = [[gpi->topHints objectAtIndex: i] distanceToFrame: frame]; if (lastDistance < minimum) { topBests = [NSMutableArray arrayWithCapacity: 4]; bottomBests = [NSMutableArray arrayWithCapacity: 4]; [topBests addObject: [gpi->topHints objectAtIndex: i]]; minimum = lastDistance; bestPosition = [[gpi->topHints objectAtIndex: i] position] - heightOfFrame; empty = NO; } else if (lastDistance == minimum && (empty == NO) && ([[gpi->topHints objectAtIndex: i] position] - bestPosition == heightOfFrame)) [topBests addObject: [gpi->topHints objectAtIndex: i]]; } count = [bottomBests count]; if (count >= 1) { float position; bottomEmpty = NO; position = [[bottomBests objectAtIndex: 0] position]; bottomStart = NSMinX([[bottomBests objectAtIndex: 0] frame]); bottomEnd = NSMaxX([[bottomBests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { bottomStart = MIN(NSMinX([[bottomBests objectAtIndex: i] frame]), bottomStart); bottomEnd = MAX(NSMaxX([[bottomBests objectAtIndex: i] frame]), bottomEnd); } bottomOfFrame = position; topOfFrame = position + heightOfFrame; } count = [topBests count]; if (count >= 1) { float position; topEmpty = NO; position = [[topBests objectAtIndex: 0] position]; topStart = NSMinX([[topBests objectAtIndex: 0] frame]); topEnd = NSMaxX([[topBests objectAtIndex: 0] frame]); for ( i = 1; i < count; i++ ) { topStart = MIN(NSMinX([[topBests objectAtIndex: i] frame]), topStart); topEnd = MAX(NSMaxX([[topBests objectAtIndex: i] frame]), topEnd); } topOfFrame = position; bottomOfFrame = position - heightOfFrame; } } gpi->hintFrame = NSMakeRect (leftOfFrame, bottomOfFrame, rightOfFrame - leftOfFrame, topOfFrame - bottomOfFrame); { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSColor *aColor = colorFromDict([defaults objectForKey: @"GuideColor"]); // default to the right color... if(aColor == nil) { aColor = [NSColor redColor]; } [aColor set]; if (!leftEmpty) { leftStart = MIN(NSMinY(gpi->hintFrame), leftStart); leftEnd = MAX(NSMaxY(gpi->hintFrame), leftEnd); gpi->lastLeftRect = NSMakeRect(leftOfFrame - 1, leftStart, 2, leftEnd - leftStart); NSRectFill(gpi->lastLeftRect); } if (!rightEmpty) { rightStart = MIN(NSMinY(gpi->hintFrame), rightStart); rightEnd = MAX(NSMaxY(gpi->hintFrame), rightEnd); gpi->lastRightRect = NSMakeRect(rightOfFrame - 1, rightStart, 2, rightEnd - rightStart); NSRectFill(gpi->lastRightRect); } if (!topEmpty) { topStart = MIN(NSMinX(gpi->hintFrame), topStart); topEnd = MAX(NSMaxX(gpi->hintFrame), topEnd); gpi->lastTopRect = NSMakeRect(topStart, topOfFrame - 1, topEnd - topStart, 2); NSRectFill(gpi->lastTopRect); } if (!bottomEmpty) { bottomStart = MIN(NSMinX(gpi->hintFrame), bottomStart); bottomEnd = MAX(NSMaxX(gpi->hintFrame), bottomEnd); gpi->lastBottomRect = NSMakeRect(bottomStart, bottomOfFrame - 1, bottomEnd - bottomStart, 2); NSRectFill(gpi->lastBottomRect); } } return gpi->hintFrame; } - (NSView *)hitTest: (NSPoint)loc { id result; result = [super hitTest: loc]; if ((result != nil) && [result isKindOfClass: [GormViewEditor class]]) { return result; } else if (result != nil) { return self; } return nil; } - (NSWindow*) windowAndRect: (NSRect *)rect forObject: (id) anObject { if (anObject != _editedObject) { return nil; } else { *rect = [_editedObject convertRect:[_editedObject visibleRect] toView: nil]; return _window; } } - (void) startConnectingObject: (id) anObject withEvent: (NSEvent *)theEvent { NSPasteboard *pb; NSString *name = [document nameForObject: anObject]; NSPoint dragPoint = [theEvent locationInWindow]; id delegate = [NSApp delegate]; if(name != nil) { pb = [NSPasteboard pasteboardWithName: NSDragPboard]; [pb declareTypes: [NSArray arrayWithObject: GormLinkPboardType] owner: self]; [pb setString: name forType: GormLinkPboardType]; [delegate displayConnectionBetween: anObject and: nil]; [delegate startConnecting]; [self dragImage: [delegate linkImage] at: dragPoint offset: NSZeroSize event: theEvent pasteboard: pb source: self slideBack: YES]; } } - (NSDragOperation) draggingEntered: (id)sender { NSPasteboard *dragPb; NSArray *types; id delegate = [NSApp delegate]; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { [delegate displayConnectionBetween: [delegate connectSource] and: _editedObject]; return NSDragOperationLink; } else if ([types firstObjectCommonWithArray: [NSView acceptedViewResourcePasteboardTypes]] != nil) { return NSDragOperationCopy; } else { return NSDragOperationNone; } } - (NSDragOperation) draggingUpdated: (id)sender { return [self draggingEntered: sender]; } - (void) draggingExited: (id)sender { NSPasteboard *dragPb; NSArray *types; id delegate = [NSApp delegate]; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { [delegate displayConnectionBetween: [delegate connectSource] and: nil]; } } - (void) mouseDown: (NSEvent*)theEvent { if ([theEvent modifierFlags] & NSControlKeyMask) // start a action/outlet connection { // first we need to select ourself // to do so we need to find our first ancestor that can handle a selection NSView *view = [self superview]; while ((view != nil) && ([view respondsToSelector: @selector(selectObjects:)] == NO)) { view = [view superview]; } if (view != nil) [(id)view selectObjects: [NSArray arrayWithObject: self]]; // now we can start the connection process [self startConnectingObject: _editedObject withEvent: theEvent]; } else // just send the event to our parent { if (parent) { // TODO: We should find a better test than this, but it will do // for now... if([parent isKindOfClass: [GormGenericEditor class]] == NO) { [parent mouseDown: theEvent]; } } else return [self noResponderFor: @selector(mouseDown:)]; } } - (id) _selectDelegate: (id)sender { NSEnumerator *en = [[NSView registeredViewResourceDraggingDelegates] objectEnumerator]; id delegate = nil; id selectedDelegate = nil; NSPasteboard *pb = [sender draggingPasteboard]; NSPoint point = [sender draggingLocation]; while((delegate = [en nextObject]) != nil) { if([delegate respondsToSelector: @selector(acceptsViewResourceFromPasteboard:forObject:atPoint:)]) { if([delegate acceptsViewResourceFromPasteboard: pb forObject: _editedObject atPoint: point]) { selectedDelegate = delegate; break; } } } return selectedDelegate; } - (BOOL) prepareForDragOperation: (id)sender { NSPasteboard *dragPb; NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { return YES; } else if ([types firstObjectCommonWithArray: [NSView acceptedViewResourcePasteboardTypes]] != nil) { return YES; } else { return NO; } } - (BOOL) performDragOperation: (id)sender { NSPasteboard *dragPb; NSArray *types; NSPoint point = [sender draggingLocation]; id delegate = [NSApp delegate]; id viewDelegate = nil; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType]) { [delegate displayConnectionBetween: [delegate connectSource] and: _editedObject]; [delegate startConnecting]; } else if ((viewDelegate = [self _selectDelegate: sender]) != nil) { if([viewDelegate respondsToSelector: @selector(shouldDrawConnectionFrame)]) { if([viewDelegate shouldDrawConnectionFrame]) { [delegate displayConnectionBetween: [delegate connectSource] and: _editedObject]; } } if([viewDelegate respondsToSelector: @selector(depositViewResourceFromPasteboard:onObject:atPoint:)]) { [viewDelegate depositViewResourceFromPasteboard: dragPb onObject: _editedObject atPoint: point]; // refresh the selection... [document setSelectionFromEditor: self]; // return success. return YES; } } return NO; } - (NSDragOperation) draggingSourceOperationMaskForLocal: (BOOL) flag { return NSDragOperationLink; } - (BOOL) wantsSelection { return YES; } - (void) resetObject: (id)anObject { NS_DURING { // display the view, if it's standalone. if(viewWindow != nil) { [viewWindow orderFront: self]; } } NS_HANDLER { NSLog(@"Exception while trying to display standalone view: %@",[localException reason]); } NS_ENDHANDLER } - (void) orderFront { [[self window] orderFront: self]; } - (NSWindow *) window { return [super window]; } /* * Drawing additions */ - (void) postDraw: (NSRect) rect { if (parent != nil) { if ([parent respondsToSelector: @selector(postDrawForView:)]) { [parent performSelector: @selector(postDrawForView:) withObject: self]; } } } - (void) drawRect: (NSRect) rect { if (currently_displaying == NO) { [[self window] disableFlushWindow]; currently_displaying = YES; [super drawRect: rect]; [self lockFocus]; [self postDraw: rect]; [self unlockFocus]; [[self window] enableFlushWindow]; [[self window] flushWindow]; currently_displaying = NO; } else { [super drawRect: rect]; [self lockFocus]; [self postDraw: rect]; [self unlockFocus]; } } - (BOOL) acceptsTypeFromArray: (NSArray*)types { return NO; } - (NSArray*) selection { NSMutableArray *result = [NSMutableArray arrayWithCapacity: 1]; // add self to the result... if ([self respondsToSelector: @selector(editedObject)]) [result addObject: [self editedObject]]; else [result addObject: self]; return result; } - (void) makeSelectionVisible: (BOOL) value { } - (BOOL) canBeOpened { return NO; } - (BOOL) isOpened { return NO; } - (void) setOpened: (BOOL) value { if (value == YES) { [document setSelectionFromEditor: self]; } else { [self setNeedsDisplay: YES]; } } // stubs for the remainder of the IBEditors protocol not implemented in this class. - (void) deleteSelection { // NSLog(@"deleteSelection should be defined in a subclass"); } - (void) validateEditing { // NSLog(@"validateEditing should be defined in a subclass"); } - (void) pasteInSelection { // NSLog(@"deleteSelection should be defined in a subclass"); } - (id) openSubeditorForObject: (id) object { return nil; } - (void) closeSubeditors { // NSLog(@"closeSubeditors should be defined in a subclass"); } @end @implementation GormViewEditor (ResponderAdditions) - (BOOL) acceptsFirstMouse: (NSEvent*)theEvent { return YES; } - (BOOL) acceptsFirstResponder { return NO; } @end static BOOL done_editing; @implementation GormViewEditor (EditingAdditions) - (void) handleNotification: (NSNotification*)aNotification { NSString *name = [aNotification name]; if ([name isEqual: NSControlTextDidEndEditingNotification] == YES) { done_editing = YES; [[self document] touch]; } } /* Edit a textfield. If it's not already editable, make it so, then edit it */ - (NSEvent *) editTextField: view withEvent: (NSEvent *)theEvent { unsigned eventMask; BOOL wasEditable; BOOL didDrawBackground; NSTextField *editField; NSRect frame; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; NSDate *future = [NSDate distantFuture]; NSEvent *e; editField = view; frame = [editField frame]; wasEditable = [editField isEditable]; [editField setEditable: YES]; didDrawBackground = [editField drawsBackground]; [editField setDrawsBackground: YES]; [nc addObserver: self selector: @selector(handleNotification:) name: NSControlTextDidEndEditingNotification object: nil]; /* Do some modal editing */ [editField selectText: self]; eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask | NSKeyDownMask | NSKeyUpMask | NSFlagsChangedMask; done_editing = NO; while (!done_editing) { NSEventType eType; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; switch (eType) { case NSLeftMouseDown: { NSPoint dp = [self convertPoint: [e locationInWindow] fromView: nil]; if (NSMouseInRect(dp, frame, NO) == NO) { done_editing = YES; break; } } [[editField currentEditor] mouseDown: e]; break; case NSLeftMouseUp: [[editField currentEditor] mouseUp: e]; break; case NSLeftMouseDragged: [[editField currentEditor] mouseDragged: e]; break; case NSKeyDown: [[editField currentEditor] keyDown: e]; break; case NSKeyUp: [[editField currentEditor] keyUp: e]; break; case NSFlagsChanged: [[editField currentEditor] flagsChanged: e]; break; default: NSLog(@"Internal Error: Unhandled event during editing: %@", e); break; } } [editField setEditable: wasEditable]; [editField setDrawsBackground: didDrawBackground]; [nc removeObserver: self name: NSControlTextDidEndEditingNotification object: nil]; [[editField currentEditor] resignFirstResponder]; [self setNeedsDisplay: YES]; return e; } @end apps-gorm-gorm-1_5_0/GormCore/GormViewKnobs.h000066400000000000000000000026421475375552500211760ustar00rootroot00000000000000/* GormViewKnobs.h Copyright (C) 1999 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2004 This file is part of the GNUstep Interface Modeller Application. 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 3 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. */ #ifndef INCLUDED_GormViewKnobs_h #define INCLUDED_GormViewKnobs_h #include #include #include void GormShowFastKnobFills(void); void GormShowFrameWithKnob(NSRect aRect, IBKnobPosition aKnob); void GormDrawKnobsForRect(NSRect aRect); void GormDrawOpenKnobsForRect(NSRect aRect); IBKnobPosition GormKnobHitInRect(NSRect aFrame, NSPoint p); NSRect GormExtBoundsForRect(NSRect aRect); #endif apps-gorm-gorm-1_5_0/GormCore/GormViewKnobs.m000066400000000000000000000243101475375552500211770ustar00rootroot00000000000000/* GormViewKnobs.m Copyright (C) 1999 Free Software Foundation, Inc. Author: Gerrit van Dyk Date: 1999 Modified and extended by: Richard Frith-Macdonald This file is part of the GNUstep Interface Modeller Application. 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 3 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. */ #include "GormViewKnobs.h" #include static NSInteger KNOB_WIDTH = 0.0; static NSInteger KNOB_HEIGHT = 0.0; #define MINSIZE 5.0 static NSRect *blackRectList = NULL; static int blackRectSize = 0; static int blackRectCount = 0; static NSRect *fgcolorRectList= NULL; static int fgcolorRectSize = 0; static int fgcolorRectCount= 0; static void _fastKnobFill(NSRect aRect,BOOL isBlack); static void _drawKnobsForRect(NSRect aRect,BOOL isBlack); static void calcKnobSize(void) { NSString *value; float w = 2.0; float h = 2.0; value = [[NSUserDefaults standardUserDefaults] objectForKey: @"KnobWidth"]; if (value != nil) { w = floor([value floatValue] / 2.0); } value = [[NSUserDefaults standardUserDefaults] objectForKey: @"KnobHeight"]; if (value != nil) { h = floor([value floatValue] / 2.0); } w = MAX(w, 1.0); h = MAX(h, 1.0); KNOB_WIDTH = w * 2.0 + 1.0; // Size must be odd */ KNOB_HEIGHT = h * 2.0 + 1.0; } void GormShowFastKnobFills(void) { if (blackRectCount) { [[NSColor blackColor] set]; NSRectFillList(blackRectList, blackRectCount); } if (fgcolorRectCount) { [[NSColor redColor] set]; NSRectFillList(fgcolorRectList, fgcolorRectCount); } blackRectCount = 0; fgcolorRectCount = 0; } static void _showLitKnobForRect(NSRect frame, IBKnobPosition aKnob) { float dx, dy; BOOL oddx, oddy; NSRect r; if (!KNOB_WIDTH) { calcKnobSize(); } dx = NSWidth(frame) / 2.0; dy = NSHeight(frame) / 2.0; oddx = (floor(dx) != dx); oddy = (floor(dy) != dy); frame.size.width = KNOB_WIDTH; frame.size.height = KNOB_HEIGHT; frame.origin.x -= ((KNOB_WIDTH - 1.0) / 2.0); frame.origin.y -= ((KNOB_HEIGHT - 1.0) / 2.0); // Initialize r to keep the compiler happy r = frame; if (aKnob == IBBottomLeftKnobPosition) r = frame; frame.origin.y += dy; if (oddy) frame.origin.y -= 0.5; if (aKnob == IBMiddleLeftKnobPosition) r = frame; frame.origin.y += dy; if (oddy) frame.origin.y += 0.5; if (aKnob == IBTopLeftKnobPosition) r = frame; frame.origin.x += dx; if (oddx) frame.origin.x -= 0.5; if (aKnob == IBTopMiddleKnobPosition) r = frame; frame.origin.x += dx; if (oddx) frame.origin.x += 0.5; if (aKnob == IBTopRightKnobPosition) r = frame; frame.origin.y -= dy; if (oddy) frame.origin.y -= 0.5; if (aKnob == IBMiddleRightKnobPosition) r = frame; frame.origin.y -= dy; if (oddy) frame.origin.y += 0.5; if (aKnob == IBBottomRightKnobPosition) r = frame; frame.origin.x -= dx; if (oddx) frame.origin.x += 0.5; if (aKnob == IBBottomMiddleKnobPosition) r = frame; r.origin.x += 1.0; r.origin.y -= 1.0; [[NSColor blackColor] set]; [NSBezierPath fillRect: r]; r.origin.x -= 1.0; r.origin.y += 1.0; [[NSColor whiteColor] set]; [NSBezierPath fillRect: r]; } void GormShowFrameWithKnob(NSRect aRect, IBKnobPosition aKnob) { NSRect r = aRect; /* * We draw a wire-frame around the rectangle. */ r.origin.x -= 0.5; r.origin.y -= 0.5; r.size.width += 1.0; r.size.height += 1.0; [[NSColor blackColor] set]; [NSBezierPath strokeRect: r]; if (aKnob != IBNoneKnobPosition) { /* * NB. we use the internal rectangle for calculating the knob position. */ _showLitKnobForRect(aRect, aKnob); } } void GormDrawKnobsForRect(NSRect aRect) { NSRect r; r.origin.x = floor(NSMinX(aRect)); r.origin.y = floor(NSMinY(aRect)); r.size.width = floor(NSMaxX(aRect) + 0.99) - NSMinX(r); r.size.height = floor(NSMaxY(aRect) + 0.99) - NSMinY(r); r.origin.x += 1.0; r.origin.y -= 1.0; _drawKnobsForRect(r, YES); r.origin.x = floor(NSMinX(aRect)); r.origin.y = floor(NSMinY(aRect)); r.size.width = floor(NSMaxX(aRect) + 0.99) - NSMinX(r); r.size.height = floor(NSMaxY(aRect) + 0.99) - NSMinY(r); _drawKnobsForRect(r, NO); } /* Draw these around an NSBox whose contents are being edited. */ void GormDrawOpenKnobsForRect(NSRect aRect) { NSRect r; r.origin.x = floor(NSMinX(aRect)); r.origin.y = floor(NSMinY(aRect)); r.size.width = floor(NSMaxX(aRect) + 0.99) - NSMinX(r); r.size.height = floor(NSMaxY(aRect) + 0.99) - NSMinY(r); _drawKnobsForRect(r, YES); } IBKnobPosition GormKnobHitInRect(NSRect aFrame, NSPoint p) { NSRect eb; NSRect knob; float dx, dy; BOOL oddx, oddy; eb = GormExtBoundsForRect(aFrame); if (!NSMouseInRect(p, eb, NO)) { return IBNoneKnobPosition; } knob = aFrame; dx = NSWidth(knob) / 2.0; dy = NSHeight(knob) / 2.0; oddx = (floor(dx) != dx); oddy = (floor(dy) != dy); knob.size.width = KNOB_WIDTH; knob.size.height = KNOB_HEIGHT; knob.origin.x -= ((KNOB_WIDTH - 1.0) / 2.0); knob.origin.y -= ((KNOB_HEIGHT - 1.0) / 2.0); if (NSMouseInRect(p, knob, NO)) { return(IBBottomLeftKnobPosition); } knob.origin.y += dy; if (oddy) { knob.origin.y -= 0.5; } if (NSMouseInRect(p, knob, NO)) { return(IBMiddleLeftKnobPosition); } knob.origin.y += dy; if (oddy) { knob.origin.y += 0.5; } if (NSMouseInRect(p, knob, NO)) { return(IBTopLeftKnobPosition); } knob.origin.x += dx; if (oddx) { knob.origin.x -= 0.5; } if (NSMouseInRect(p, knob, NO)) { return(IBTopMiddleKnobPosition); } knob.origin.x += dx; if (oddx) { knob.origin.x += 0.5; } if (NSMouseInRect(p, knob, NO)) { return(IBTopRightKnobPosition); } knob.origin.y -= dy; if (oddy) { knob.origin.y -= 0.5; } if (NSMouseInRect(p, knob, NO)) { return(IBMiddleRightKnobPosition); } knob.origin.y -= dy; if (oddy) { knob.origin.y += 0.5; } if (NSMouseInRect(p, knob, NO)) { return(IBBottomRightKnobPosition); } knob.origin.x -= dx; if (oddx) { knob.origin.x += 0.5; } if (NSMouseInRect(p, knob, NO)) { return(IBBottomMiddleKnobPosition); } return IBNoneKnobPosition; } NSRect GormExtBoundsForRect(NSRect aRect) { NSRect returnRect; if (NSWidth(aRect) < 0.0) { returnRect.origin.x = NSMaxX(aRect); returnRect.size.width = - NSWidth(aRect); } else { returnRect.origin.x = NSMinX(aRect); returnRect.size.width = NSWidth(aRect); } if (aRect.size.height < 0.0) { returnRect.origin.y = NSMaxY(aRect); returnRect.size.height = - NSHeight(aRect); } else { returnRect.origin.y = NSMinY(aRect); returnRect.size.height = NSHeight(aRect); } returnRect.size.width = MAX(1.0, NSWidth(returnRect)); returnRect.size.height = MAX(1.0, NSHeight(returnRect)); returnRect = NSInsetRect(returnRect, - ((KNOB_WIDTH - 1.0) + 1.0), - ((KNOB_HEIGHT - 1.0) + 1.0)); return NSIntegralRect(returnRect); } static void _fastKnobFill(NSRect aRect, BOOL isBlack) { if (isBlack) { if (!blackRectList) { blackRectSize = 16; blackRectList = NSZoneMalloc(NSDefaultMallocZone(), blackRectSize * sizeof(NSRect)); } else { if (blackRectCount >= blackRectSize) { while (blackRectCount >= blackRectSize) { blackRectSize <<= 1; } blackRectList = NSZoneRealloc(NSDefaultMallocZone(), blackRectList, blackRectSize * sizeof(NSRect)); } } blackRectList[blackRectCount++] = aRect; } else { if (!fgcolorRectList) { fgcolorRectSize = 16; fgcolorRectList = NSZoneMalloc(NSDefaultMallocZone(), fgcolorRectSize * sizeof(NSRect)); } else { if (fgcolorRectCount >= fgcolorRectSize) { while (fgcolorRectCount >= fgcolorRectSize) { fgcolorRectSize <<= 1; } fgcolorRectList = NSZoneRealloc(NSDefaultMallocZone(), fgcolorRectList, fgcolorRectSize * sizeof(NSRect)); } } fgcolorRectList[fgcolorRectCount++] = aRect; } } static void _drawKnobsForRect(NSRect knob, BOOL isBlack) { float dx, dy; BOOL oddx, oddy; if (!KNOB_WIDTH) { calcKnobSize(); } dx = NSWidth(knob) / 2.0; dy = NSHeight(knob) / 2.0; oddx = (floor(dx) != dx); oddy = (floor(dy) != dy); knob.size.width = KNOB_WIDTH; knob.size.height = KNOB_HEIGHT; knob.origin.x -= ((KNOB_WIDTH - 1.0) / 2.0); knob.origin.y -= ((KNOB_HEIGHT - 1.0) / 2.0); _fastKnobFill(knob, isBlack); knob.origin.y += dy; if (oddy) { knob.origin.y -= 0.5; } _fastKnobFill(knob, isBlack); knob.origin.y += dy; if (oddy) { knob.origin.y += 0.5; } _fastKnobFill(knob, isBlack); knob.origin.x += dx; if (oddx) { knob.origin.x -= 0.5; } _fastKnobFill(knob, isBlack); knob.origin.x += dx; if (oddx) { knob.origin.x += 0.5; } _fastKnobFill(knob, isBlack); knob.origin.y -= dy; if (oddy) { knob.origin.y -= 0.5; } _fastKnobFill(knob, isBlack); knob.origin.y -= dy; if (oddy) { knob.origin.y += 0.5; } _fastKnobFill(knob, isBlack); knob.origin.x -= dx; if (oddx) { knob.origin.x += 0.5; } _fastKnobFill(knob, isBlack); } apps-gorm-gorm-1_5_0/GormCore/GormViewSizeInspector.h000066400000000000000000000025711475375552500227240ustar00rootroot00000000000000/* GormViewSizeInspector.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * Author: Gregory John Casamento * Separated out into header. * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormViewSizeInspector_h #define INCLUDED_GormViewSizeInspector_h #include @class NSButton, NSForm; @interface GormViewSizeInspector : IBInspector { NSButton *top; NSButton *bottom; NSButton *left; NSButton *right; NSButton *width; NSButton *height; NSForm *sizeForm; } @end #endif apps-gorm-gorm-1_5_0/GormCore/GormViewSizeInspector.m000066400000000000000000000174251475375552500227350ustar00rootroot00000000000000/* GormViewSizeInspector.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormPrivate.h" #include "GormViewKnobs.h" #include "GormViewSizeInspector.h" #include "GormViewWindow.h" @implementation GormViewSizeInspector NSImage *eHCoil = nil; NSImage *eVCoil = nil; NSImage *eHLine = nil; NSImage *eVLine = nil; NSImage *mHCoil = nil; NSImage *mVCoil = nil; NSImage *mHLine = nil; NSImage *mVLine = nil; + (void) initialize { if (self == [GormViewSizeInspector class]) { NSBundle *bundle = [NSBundle bundleForClass: self]; NSString *path; path = [bundle pathForImageResource: @"GormEHCoil"]; eHCoil = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormEVCoil"]; eVCoil = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormEHLine"]; eHLine = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormEVLine"]; eVLine = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormMHCoil"]; mHCoil = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormMVCoil"]; mVCoil = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormMHLine"]; mHLine = [[NSImage alloc] initWithContentsOfFile: path]; path = [bundle pathForImageResource: @"GormMVLine"]; mVLine = [[NSImage alloc] initWithContentsOfFile: path]; } } - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE(window); [super dealloc]; } - (id) init { self = [super init]; if (self != nil) { NSBundle *bundle = [NSBundle bundleForClass: [self class]]; if ([bundle loadNibNamed: @"GormViewSizeInspector" owner: self topLevelObjects: NULL] == NO) { NSLog(@"Could not open gorm GormViewSizeInspector"); NSLog(@"self %@", self); return nil; } // set the tags... [top setTag: NSViewMaxYMargin]; [bottom setTag: NSViewMinYMargin]; [right setTag: NSViewMaxXMargin]; [left setTag: NSViewMinXMargin]; [width setTag: NSViewWidthSizable]; [height setTag: NSViewHeightSizable]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(viewFrameChangeNotification:) name: NSViewFrameDidChangeNotification object: nil]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(controlTextDidEndEditing:) name: NSControlTextDidEndEditingNotification object: nil]; } return self; } - (void) _setValuesFromControl: control { if (control == sizeForm) { id document = [(id)[NSApp delegate] activeDocument]; NSRect rect; // Update the document as edited... [document touch]; rect = NSMakeRect([[control cellAtIndex: 0] floatValue], [[control cellAtIndex: 1] floatValue], [[control cellAtIndex: 2] floatValue], [[control cellAtIndex: 3] floatValue]); if (NSEqualRects(rect, [object frame]) == NO) { NSRect oldFrame = [object frame]; [object setFrame: rect]; [object display]; if ([object superview]) [[object superview] displayRect: GormExtBoundsForRect(oldFrame)]; [[object superview] lockFocus]; GormDrawKnobsForRect([object frame]); GormShowFastKnobFills(); [[object superview] unlockFocus]; [[object window] flushWindow]; } } } - (void) _getValuesFromObject: anObject { NSRect frame; if (anObject != object) return; [sizeForm setEnabled: YES]; // stop editing so that the new values can be populated. [sizeForm abortEditing]; frame = [anObject frame]; [[sizeForm cellAtIndex: 0] setFloatValue: NSMinX(frame)]; [[sizeForm cellAtIndex: 1] setFloatValue: NSMinY(frame)]; [[sizeForm cellAtIndex: 2] setFloatValue: NSWidth(frame)]; [[sizeForm cellAtIndex: 3] setFloatValue: NSHeight(frame)]; } - (void) controlTextDidEndEditing: (NSNotification*)aNotification { id notifier = [aNotification object]; [super ok: notifier]; [self _setValuesFromControl: notifier]; } - (void) viewFrameChangeNotification: (NSNotification*)aNotification { id notifier = [aNotification object]; [self _getValuesFromObject: notifier]; } - (void) setAutosize: (id)sender { unsigned mask = [sender tag]; id document = [(id)[NSApp delegate] activeDocument]; [document touch]; if ([sender state] == NSOnState) { mask = [object autoresizingMask] | mask; } else { mask = [object autoresizingMask] & ~mask; } [object setAutoresizingMask: mask]; } - (void) setObject: (id)anObject { if ((object != nil) && (anObject != object)) [object setPostsFrameChangedNotifications: NO]; if (anObject != nil && anObject != object) { NSRect frame; unsigned mask = [anObject autoresizingMask]; ASSIGN(object, anObject); if (mask & NSViewMaxYMargin) [top setState: NSOnState]; else [top setState: NSOffState]; if (mask & NSViewMinYMargin) [bottom setState: NSOnState]; else [bottom setState: NSOffState]; if (mask & NSViewMaxXMargin) [right setState: NSOnState]; else [right setState: NSOffState]; if (mask & NSViewMinXMargin) [left setState: NSOnState]; else [left setState: NSOffState]; if (mask & NSViewWidthSizable) [width setState: NSOnState]; else [width setState: NSOffState]; if (mask & NSViewHeightSizable) [height setState: NSOnState]; else [height setState: NSOffState]; frame = [anObject frame]; [[sizeForm cellAtIndex: 0] setFloatValue: NSMinX(frame)]; [[sizeForm cellAtIndex: 1] setFloatValue: NSMinY(frame)]; [[sizeForm cellAtIndex: 2] setFloatValue: NSWidth(frame)]; [[sizeForm cellAtIndex: 3] setFloatValue: NSHeight(frame)]; [anObject setPostsFrameChangedNotifications: YES]; /* if([[anObject window] isKindOfClass: [GormViewWindow class]] || [anObject window] == nil) { [[sizeForm cellAtIndex: 0] setEnabled: NO]; [[sizeForm cellAtIndex: 1] setEnabled: NO]; [[sizeForm cellAtIndex: 2] setEnabled: NO]; [[sizeForm cellAtIndex: 3] setEnabled: NO]; [[sizeForm cellAtIndex: 0] setEditable: NO]; [[sizeForm cellAtIndex: 1] setEditable: NO]; [[sizeForm cellAtIndex: 2] setEditable: NO]; [[sizeForm cellAtIndex: 3] setEditable: NO]; } else */ { [[sizeForm cellAtIndex: 0] setEnabled: YES]; [[sizeForm cellAtIndex: 1] setEnabled: YES]; [[sizeForm cellAtIndex: 2] setEnabled: YES]; [[sizeForm cellAtIndex: 3] setEnabled: YES]; [[sizeForm cellAtIndex: 0] setEditable: YES]; [[sizeForm cellAtIndex: 1] setEditable: YES]; [[sizeForm cellAtIndex: 2] setEditable: YES]; [[sizeForm cellAtIndex: 3] setEditable: YES]; } } } @end apps-gorm-gorm-1_5_0/GormCore/GormViewWindow.h000066400000000000000000000022241475375552500213650ustar00rootroot00000000000000/* GormViewWindow.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormViewWindow_h #define INCLUDED_GormViewWindow_h #include @interface GormViewWindow : NSWindow { NSView *_view; } - (id) initWithView: (NSView *)view; - (NSView *)view; - (void) setView: (NSView *)view; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormViewWindow.m000066400000000000000000000120521475375552500213720ustar00rootroot00000000000000/* GormViewWindow.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormViewWindow.h" #include "GormFunctions.h" @interface GormViewWindowDelegate : NSObject { NSView *_view; } - (id) initWithView: (NSView *)view; - (void) initialResize; @end @implementation GormViewWindowDelegate - (id) initWithView: (NSView *)view; { if((self = [super init]) != nil) { _view = view; [self initialResize]; } return self; } - (void) initialResize { NSWindow *window = [_view window]; NSRect windowFrame = [window frame]; // if the view is uninitialized, // it's new... give it size. if(NSIsEmptyRect([_view frame])) { NSArray *subs = [_view subviews]; NSRect newFrame; if([subs count] > 0) { newFrame = minimalContainerFrame(subs); newFrame.size.height += 70; newFrame.size.width += 40; [window setFrame: newFrame display: YES]; [_view setPostsFrameChangedNotifications: YES]; } else { newFrame = windowFrame; newFrame.origin.x = 10; newFrame.origin.y = 20; newFrame.size.height -= 70; newFrame.size.width -= 20; } [_view setPostsFrameChangedNotifications: NO]; [_view setFrame: newFrame]; [_view setPostsFrameChangedNotifications: YES]; } else // otherwise take size from it. { NSRect newFrame = [_view frame]; newFrame.origin.x = windowFrame.origin.x+10; newFrame.origin.y = windowFrame.origin.y+20; newFrame.size.height += 100; newFrame.size.width += 20; [_view setPostsFrameChangedNotifications: NO]; [_view setFrame: newFrame]; [_view setPostsFrameChangedNotifications: YES]; [window setFrame: newFrame display: YES]; } [window center]; } - (void) windowDidResize: (NSNotification *)notification { NSWindow *window = [_view window]; NSRect windowFrame = [window frame]; NSRect newFrame = windowFrame; NSRect viewFrame = [_view frame]; newFrame.origin.x = 10; newFrame.origin.y = 20; newFrame.size.height -= 70; newFrame.size.width -= 20; if(NSIsEmptyRect(viewFrame)) { [_view setPostsFrameChangedNotifications: NO]; [_view setFrame: newFrame]; [_view setPostsFrameChangedNotifications: YES]; } else { [_view setFrame: newFrame]; [_view setNeedsDisplay: YES]; } } @end @implementation GormViewWindow - (id) initWithView: (NSView *)view { if((self = [super init]) != nil) { NSString *className = NSStringFromClass([view class]); NSString *objectName = [[(id)[NSApp delegate] activeDocument] nameForObject: view]; NSString *title = [NSString stringWithFormat: @"Standalone View Window: (%@, %@)", className, objectName]; NSColor *color = [NSColor lightGrayColor]; [self setTitle: title]; [self setFrame: NSMakeRect(0,0,400,300) display: YES]; [self setBackgroundColor: color]; [self setReleasedWhenClosed: NO]; [self setView: view]; } return self; } - (void) setView: (NSView *)view { if(_view != nil) { [_view removeFromSuperviewWithoutNeedingDisplay]; } _view = view; [[self contentView] addSubview: _view]; RELEASE([self delegate]); [self setDelegate: [[GormViewWindowDelegate alloc] initWithView: _view]]; } - (NSView *) view { return _view; } - (void) activateEditorForView { id editor = [[(id)[NSApp delegate] activeDocument] editorForObject: _view create: YES]; // NSArray *subviews = [_view subviews]; // NSEnumerator *en = [subviews objectEnumerator]; // id sub = nil; // activate the parent and all subview editors... [(id)editor activate]; /* while((sub = [en nextObject]) != nil) { editor = [[(id)[NSApp delegate] activeDocument] editorForObject: sub create: YES]; [editor activate]; } */ } - (void) encodeWithCoder: (NSCoder *)coder { [NSException raise: NSInternalInconsistencyException format: @"Cannot encode a GormViewWindow"]; } - (void) orderFront: (id)sender { [super orderFront: sender]; [self activateEditorForView]; } - (void) dealloc { RELEASE([self delegate]); [self setDelegate: nil]; [super dealloc]; } @end apps-gorm-gorm-1_5_0/GormCore/GormViewWithContentViewEditor.h000066400000000000000000000027071475375552500243740ustar00rootroot00000000000000/* GormViewWithContentViewEditor.h * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormViewWithContentViewEditor_h #define INCLUDED_GormViewWithContentViewEditor_h #include @class GormInternalViewEditor; @interface GormViewWithContentViewEditor : GormViewWithSubviewsEditor { GormInternalViewEditor *contentViewEditor; } - (void) postDrawForView: (GormViewEditor *) viewEditor; - (void) groupSelectionInSplitView; - (void) groupSelectionInBox; - (void) groupSelectionInMatrix; - (void) groupSelectionInView; - (void) ungroup; - (void) pasteInView: (NSView *)view; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormViewWithContentViewEditor.m000066400000000000000000000452421475375552500244020ustar00rootroot00000000000000/* GormViewWithContentViewEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormPrivate.h" #include "GormViewWithContentViewEditor.h" #include "GormPlacementInfo.h" #include "GormSplitViewEditor.h" #include "GormViewKnobs.h" #include "GormInternalViewEditor.h" @interface GormViewEditor (Private) - (NSRect) _displayMovingFrameWithHint: (NSRect) frame andPlacementInfo: (GormPlacementInfo *)gpi; @end @implementation GormViewWithContentViewEditor - (id) initWithObject: (id) anObject inDocument: (id)aDocument { _displaySelection = YES; //GuideLine [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(guideline:) name: GormToggleGuidelineNotification object:nil]; _followGuideLine = YES; self = [super initWithObject: anObject inDocument: aDocument]; return self; } -(void) guideline:(NSNotification *)notification { if ( _followGuideLine ) _followGuideLine = NO; else _followGuideLine = YES; } - (void) moveSelectionByX: (float)x andY: (float)y { NSInteger i; NSInteger count = [selection count]; for (i = 0; i < count; i++) { id v = [selection objectAtIndex: i]; NSRect f = [v frame]; f.origin.x += x; f.origin.y += y; [v setFrameOrigin: f.origin]; } } - (void) resizeSelectionByX: (float)x andY: (float)y { NSInteger i; NSInteger count = [selection count]; for (i = 0; i < count; i++) { id v = [selection objectAtIndex: i]; NSRect f = [v frame]; f.size.width += x; f.size.height += y; [v setFrameSize: f.size]; } } - (void) keyDown: (NSEvent *)theEvent { NSString *characters = [theEvent characters]; unichar character = 0; float moveBy = 1.0; if ([characters length] > 0) { character = [characters characterAtIndex: 0]; } if (([theEvent modifierFlags] & NSShiftKeyMask) == NSShiftKeyMask) { if (([theEvent modifierFlags] & NSAlternateKeyMask) == NSAlternateKeyMask) { moveBy = 10.0; } if ([selection count] == 1) { switch (character) { case NSUpArrowFunctionKey: [self resizeSelectionByX: 0 andY: 1*moveBy]; [self setNeedsDisplay: YES]; return; case NSDownArrowFunctionKey: [self resizeSelectionByX: 0 andY: -1*moveBy]; [self setNeedsDisplay: YES]; return; case NSLeftArrowFunctionKey: [self resizeSelectionByX: -1*moveBy andY: 0]; [self setNeedsDisplay: YES]; return; case NSRightArrowFunctionKey: [self resizeSelectionByX: 1*moveBy andY: 0]; [self setNeedsDisplay: YES]; return; } } } else { if (([theEvent modifierFlags] & NSAlternateKeyMask) == NSAlternateKeyMask) { moveBy = 10.0; } if ([selection count] > 0) { switch (character) { case NSUpArrowFunctionKey: [self moveSelectionByX: 0 andY: 1*moveBy]; [self setNeedsDisplay: YES]; return; case NSDownArrowFunctionKey: [self moveSelectionByX: 0 andY: -1*moveBy]; [self setNeedsDisplay: YES]; return; case NSLeftArrowFunctionKey: [self moveSelectionByX: -1*moveBy andY: 0]; [self setNeedsDisplay: YES]; return; case NSRightArrowFunctionKey: [self moveSelectionByX: 1*moveBy andY: 0]; [self setNeedsDisplay: YES]; return; } } } [super keyDown: theEvent]; } - (BOOL) acceptsTypeFromArray: (NSArray*)types { if ([super acceptsTypeFromArray: types]) { return YES; } else { return [types containsObject: IBViewPboardType]; } } - (void) postDrawForView: (GormViewEditor *) viewEditor { if (_displaySelection == NO) { return; } if (((id)openedSubeditor == (id)viewEditor) && (openedSubeditor != nil) && ![openedSubeditor isKindOfClass: [GormInternalViewEditor class]]) { GormDrawOpenKnobsForRect([viewEditor bounds]); GormShowFastKnobFills(); } else if ([selection containsObject: viewEditor]) { GormDrawKnobsForRect([viewEditor bounds]); GormShowFastKnobFills(); } } - (void) postDraw: (NSRect) rect { [super postDraw: rect]; if (openedSubeditor && ![openedSubeditor isKindOfClass: [GormInternalViewEditor class]]) { GormDrawOpenKnobsForRect( [self convertRect: [openedSubeditor bounds] fromView: openedSubeditor]); GormShowFastKnobFills(); } else if (_displaySelection) { NSInteger i; NSInteger count = [selection count]; for ( i = 0; i < count ; i++ ) { GormDrawKnobsForRect([self convertRect: [[selection objectAtIndex: i] bounds] fromView: [selection objectAtIndex: i]]); GormShowFastKnobFills(); } } } #undef MAX #undef MIN #define MAX(A,B) ((A)>(B)?(A):(B)) #define MIN(A,B) ((A)<(B)?(A):(B)) NSComparisonResult _sortViews(id view1, id view2, void *context) { BOOL isVertical = *((BOOL *)context); NSInteger order = NSOrderedSame; NSRect rect1 = [[view1 editedObject] frame]; NSRect rect2 = [[view2 editedObject] frame]; if(!isVertical) { float y1 = rect1.origin.y; float y2 = rect2.origin.y; if(y1 == y2) order = NSOrderedSame; else order = (y1 > y2)?NSOrderedAscending:NSOrderedDescending; } else { float x1 = rect1.origin.x; float x2 = rect2.origin.x; if(x1 == x2) order = NSOrderedSame; else order = (x1 < x2)?NSOrderedAscending:NSOrderedDescending; } return order; } - (NSArray *) _sortByPosition: (NSArray *)subviews isVertical: (BOOL)isVertical { NSMutableArray *array = [subviews mutableCopy]; NSArray *result = [array sortedArrayUsingFunction: _sortViews context: &isVertical]; return result; } - (BOOL) _shouldBeVertical: (NSArray *)subviews { BOOL vertical = NO; NSEnumerator *enumerator = [subviews objectEnumerator]; GormViewEditor *editor = nil; NSRect prevRect = NSZeroRect; NSRect currRect = NSZeroRect; NSInteger count = 0; // iterate over the list of views... while((editor = [enumerator nextObject]) != nil) { NSView *subview = [editor editedObject]; currRect = [subview frame]; if(!NSEqualRects(prevRect,NSZeroRect)) { float x1 = prevRect.origin.x, // pull these for convenience. x2 = currRect.origin.x, y1 = prevRect.origin.y, y2 = currRect.origin.y, h1 = prevRect.size.height, w1 = prevRect.size.width; if((x1 < x2 || x1 > x2) && ((y2 >= y1 && y2 <= (y1 + h1)) || (y2 <= y1 && y2 >= (y1 - h1)))) { count++; } if((y1 < y2 || y1 > y2) && ((x2 >= x1 && x2 <= (x1 + w1)) || (x2 <= x1 && x2 >= (x1 - w1)))) { count--; } } prevRect = currRect; } NSDebugLog(@"The vote is %ld",(long int)count); if(count >= 0) vertical = YES; else vertical = NO; // return the result... return vertical; } - (void) groupSelectionInSplitView { NSEnumerator *enumerator = nil; GormViewEditor *subview = nil; NSSplitView *splitView = nil; NSRect rect = NSZeroRect; GormViewEditor *editor = nil; NSView *superview = nil; NSArray *sortedviews = nil; BOOL vertical = NO; if ([selection count] < 2) { return; } enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { superview = [subview superview]; rect = NSUnionRect(rect, [subview frame]); [subview deactivate]; } splitView = [[NSSplitView alloc] initWithFrame: rect]; [document attachObject: splitView toParent: _editedObject]; [superview addSubview: splitView]; // positionally determine orientation vertical = [self _shouldBeVertical: selection]; sortedviews = [self _sortByPosition: selection isVertical: vertical]; [splitView setVertical: vertical]; enumerator = [sortedviews objectEnumerator]; editor = (GormViewEditor *)[document editorForObject: splitView inEditor: self create: YES]; while ((subview = [enumerator nextObject]) != nil) { id eO = [subview editedObject]; [splitView addSubview: [subview editedObject]]; [document attachObject: [subview editedObject] toParent: splitView]; [subview close]; [document editorForObject: eO inEditor: editor create: YES]; } [self selectObjects: [NSArray arrayWithObject: editor]]; } - (void) groupSelectionInBox { NSEnumerator *enumerator = nil; GormViewEditor *subview = nil; NSBox *box = nil; NSRect rect = NSZeroRect; GormViewEditor *editor = nil; NSView *superview = nil; if ([selection count] < 1) { return; } enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { superview = [subview superview]; rect = NSUnionRect(rect, [subview frame]); [subview deactivate]; } box = [[NSBox alloc] initWithFrame: NSZeroRect]; [box setFrameFromContentFrame: rect]; [document attachObject: box toParent: _editedObject]; [superview addSubview: box]; enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { NSPoint frameOrigin; [box addSubview: [subview editedObject]]; frameOrigin = [[subview editedObject] frame].origin; frameOrigin.x -= rect.origin.x; frameOrigin.y -= rect.origin.y; [[subview editedObject] setFrameOrigin: frameOrigin]; [document attachObject: [subview editedObject] toParent: box]; [subview close]; } editor = (GormViewEditor *)[document editorForObject: box inEditor: self create: YES]; [self selectObjects: [NSArray arrayWithObject: editor]]; } - (void) groupSelectionInView { NSEnumerator *enumerator = nil; GormViewEditor *subview = nil; NSView *view = nil; NSRect rect = NSZeroRect; GormViewEditor *editor = nil; NSView *superview = nil; if ([selection count] < 1) { return; } enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { superview = [subview superview]; rect = NSUnionRect(rect, [subview frame]); [subview deactivate]; } view = [[NSView alloc] initWithFrame: NSZeroRect]; [view setFrame: rect]; [superview addSubview: view]; [document attachObject: view toParent: _editedObject]; enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { NSPoint frameOrigin; [view addSubview: [subview editedObject]]; frameOrigin = [[subview editedObject] frame].origin; frameOrigin.x -= rect.origin.x; frameOrigin.y -= rect.origin.y; [[subview editedObject] setFrameOrigin: frameOrigin]; [document attachObject: [subview editedObject] toParent: view]; [subview close]; } editor = (GormViewEditor *)[document editorForObject: view inEditor: self create: YES]; [self selectObjects: [NSArray arrayWithObject: editor]]; } - (void) groupSelectionInMatrix { GormViewEditor *editor = nil; NSMatrix *matrix = nil; if ([selection count] < 1) { return; } // For an NSMatrix there can only be one prototype cell. if ([selection count] == 1) { GormViewEditor *s = [selection objectAtIndex: 0]; id editedObject = [s editedObject]; NSCell *cell = [editedObject cell]; NSRect rect = [editedObject frame]; NSView *superview = [s superview]; // Create the matrix matrix = [[NSMatrix alloc] initWithFrame: rect mode: NSRadioModeMatrix prototype: cell numberOfRows: 1 numberOfColumns: 1]; rect = NSUnionRect(rect, [s frame]); [s deactivate]; NSLog(@"editedObject = %@,\n\nsuperview = %@,\n\nmatrix = %@",editedObject, superview, matrix); [matrix setPrototype: cell]; NSLog(@"cell = %@", cell); NSLog(@"prototype = %@", [matrix prototype]); [editedObject removeFromSuperview]; [document attachObject: matrix toParent: _editedObject]; [superview addSubview: matrix]; } editor = (GormViewEditor *)[document editorForObject: matrix inEditor: self create: YES]; [self selectObjects: [NSArray arrayWithObject: editor]]; } - (void) groupSelectionInScrollView { NSEnumerator *enumerator = nil; GormViewEditor *subview = nil; NSView *view = nil; NSScrollView *scrollView = nil; NSRect rect = NSZeroRect; GormViewEditor *editor = nil; NSView *superview = nil; if ([selection count] < 1) { return; } // if there is more than one view we must join them together. if([selection count] > 1) { // deactivate the editor for each subview. enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { superview = [subview superview]; rect = NSUnionRect(rect, [subview frame]); [subview deactivate]; } // create the containing view. view = [[NSView alloc] initWithFrame: NSMakeRect(0, 0, rect.size.width, rect.size.height)]; // create scroll view now. scrollView = [[NSScrollView alloc] initWithFrame: rect]; [scrollView setHasHorizontalScroller: YES]; [scrollView setHasVerticalScroller: YES]; [scrollView setBorderType: NSBezelBorder]; // attach the scroll view... [document attachObject: scrollView toParent: _editedObject]; [superview addSubview: scrollView]; [scrollView setDocumentView: view]; // add the views. enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { NSPoint frameOrigin; [view addSubview: [subview editedObject]]; frameOrigin = [[subview editedObject] frame].origin; frameOrigin.x -= rect.origin.x; frameOrigin.y -= rect.origin.y; [[subview editedObject] setFrameOrigin: frameOrigin]; [document attachObject: [subview editedObject] toParent: scrollView]; [subview close]; } } else if([selection count] == 1) { NSPoint frameOrigin; id v = nil; // since we have one view, it will be used as the document view. subview = [selection objectAtIndex: 0]; superview = [subview superview]; rect = NSUnionRect(rect, [subview frame]); [subview deactivate]; // create scroll view now. scrollView = [[NSScrollView alloc] initWithFrame: rect]; [scrollView setHasHorizontalScroller: YES]; [scrollView setHasVerticalScroller: YES]; [scrollView setBorderType: NSBezelBorder]; // attach the scroll view... [document attachObject: scrollView toParent: _editedObject]; [superview addSubview: scrollView]; // add the view v = [subview editedObject]; [scrollView setDocumentView: v]; // set the origin.. frameOrigin = [v frame].origin; frameOrigin.x -= rect.origin.x; frameOrigin.y -= rect.origin.y; [v setFrameOrigin: frameOrigin]; [subview close]; } editor = (GormViewEditor *)[document editorForObject: scrollView inEditor: self create: YES]; [self selectObjects: [NSArray arrayWithObject: editor]]; } @class GormBoxEditor; @class GormSplitViewEditor; @class GormScrollViewEditor; - (void) _addViewToDocument: (NSView *)view { NSView *par = [view superview]; if([par isKindOfClass: [GormViewEditor class]]) { par = [(GormViewEditor *)par editedObject]; } [document attachObject: view toParent: par]; } - (void) ungroup { NSView *toUngroup; if ([selection count] != 1) return; NSDebugLog(@"ungroup called"); toUngroup = [selection objectAtIndex: 0]; NSDebugLog(@"toUngroup = %@",[toUngroup description]); if ([toUngroup respondsToSelector: @selector(destroyAndListSubviews)]) { id contentView = toUngroup; id eo = [contentView editedObject]; NSMutableArray *newSelection = [NSMutableArray array]; NSArray *views; NSInteger i; views = [contentView destroyAndListSubviews]; for (i = 0; i < [views count]; i++) { id v = [views objectAtIndex: i]; [_editedObject addSubview: v]; [self _addViewToDocument: v]; [newSelection addObject: [document editorForObject: v inEditor: self create: YES]]; } [contentView close]; [self selectObjects: newSelection]; [document detachObject: eo]; [eo removeFromSuperview]; } } - (void) pasteInView: (NSView *)view { NSPasteboard *pb = [NSPasteboard generalPasteboard]; NSMutableArray *array = [NSMutableArray array]; NSArray *views; NSEnumerator *enumerator; NSView *sub; /* * Ask the document to get the copied views from the pasteboard and add * them to it's collection of known objects. */ views = [document pasteType: IBViewPboardType fromPasteboard: pb parent: _editedObject]; /* * Now make all the views subviews of ourself. */ enumerator = [views objectEnumerator]; while ((sub = [enumerator nextObject]) != nil) { if ([sub isKindOfClass: [NSView class]] == YES) { // // Correct the frame if it is outside of the containing view. // this prevents issues where the subview is placed outside the // viewable region of the superview. // if(NSContainsRect([view frame], [sub frame]) == NO) { NSRect newFrame = [sub frame]; newFrame.origin.x = 0; newFrame.origin.y = 0; [sub setFrame: newFrame]; } [view addSubview: sub]; [self _addViewToDocument: sub]; [array addObject: [document editorForObject: sub inEditor: self create: YES]]; } } [self selectObjects: array]; } @end apps-gorm-gorm-1_5_0/GormCore/GormViewWithSubviewsEditor.h000066400000000000000000000036231475375552500237340ustar00rootroot00000000000000/* GormViewWithSubviewsEditor.h * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormViewWithSubviewsEditor_h #define INCLUDED_GormViewWithSubviewsEditor_h #include @interface GormViewWithSubviewsEditor : GormViewEditor { BOOL _displaySelection; GormViewWithSubviewsEditor *openedSubeditor; NSMutableArray *selection; BOOL opened; BOOL _followGuideLine; } /* * Handle mouse click on knob. */ - (void) handleMouseOnKnob: (IBKnobPosition) knob ofView: (GormViewEditor *) view withEvent: (NSEvent *) theEvent; /* * Handle mouse click on view. */ - (void) handleMouseOnView: (GormViewEditor *) view withEvent: (NSEvent *) theEvent; - (void) setOpenedSubeditor: (GormViewWithSubviewsEditor *) newEditor; - (void) openParentEditor; - (void) makeSubeditorResign; - (void) silentlyResetSelection; - (void) selectObjects: (NSArray *) objects; - (void) copySelection; /* * Close subeditors of this editor. */ - (void) closeSubeditors; - (void) deactivateSubeditors; - (void) changeFont: (id)sender; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormViewWithSubviewsEditor.m000066400000000000000000000647421475375552500237520ustar00rootroot00000000000000/* GormViewWithSubviewsEditor.m * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Pierre-Yves Rivaille * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include @class GormEditorToParent; @interface GormViewEditor (Private) - (NSRect) _displayMovingFrameWithHint: (NSRect) frame andPlacementInfo: (GormPlacementInfo *)gpi; @end @implementation GormViewWithSubviewsEditor - (id) initWithObject: (id)anObject inDocument: (id)aDocument { opened = NO; openedSubeditor = nil; if ((self = [super initWithObject: anObject inDocument: aDocument]) == nil) { return nil; } selection = [[NSMutableArray alloc] initWithCapacity: 5]; [self registerForDraggedTypes: [NSArray arrayWithObjects: IBViewPboardType, GormLinkPboardType, IBFormatterPboardType, nil]]; return self; } - (void) close { if (closed == NO) { [self deactivate]; [self closeSubeditors]; [document editor: self didCloseForObject: _editedObject]; closed = YES; } else { NSDebugLog(@"%@ close but already closed", self); } } - (void) deactivateSubeditors { NSArray *subeditorConnections = [NSArray arrayWithArray: [document connectorsForDestination: self ofClass: [GormEditorToParent class]]]; NSInteger count = [subeditorConnections count]; NSInteger i = 0; for ( i = 0; i < count; i ++ ) { [[[subeditorConnections objectAtIndex: i] source] deactivate]; } } - (void) closeSubeditors { NSArray *subeditorConnections = [NSArray arrayWithArray: [document connectorsForDestination: self ofClass: [GormEditorToParent class]]]; NSInteger count = [subeditorConnections count]; NSInteger i = 0; for ( i = 0; i < count; i ++ ) { [[[subeditorConnections objectAtIndex: i] source] close]; } } - (BOOL) canBeOpened { return YES; } - (BOOL) isOpened { return opened; } - (void) setOpened: (BOOL) value { opened = value; if (value == YES) { [self silentlyResetSelection]; // [document setSelectionFromEditor: self]; } else { if (openedSubeditor != nil) { [self makeSubeditorResign]; [self silentlyResetSelection]; } else { [self silentlyResetSelection]; } [self setNeedsDisplay: YES]; } } /* * */ - (void) openParentEditor { if ([parent respondsToSelector: @selector(setOpenedSubeditor:)]) { [parent setOpenedSubeditor: self]; } } - (void) setOpenedSubeditor: (GormViewWithSubviewsEditor *) newEditor { [self silentlyResetSelection]; if (opened == NO) { [self openParentEditor]; } opened = YES; if (newEditor != openedSubeditor) { [self makeSubeditorResign]; } openedSubeditor = newEditor; [self setNeedsDisplay: YES]; } /* * take the selection from the subeditors */ - (void) makeSubeditorResign { if (openedSubeditor != nil) { [openedSubeditor makeSubeditorResign]; [openedSubeditor setOpened: NO]; openedSubeditor = nil; } } - (void) makeSelectionVisible: (BOOL) value { } - (void) changeFont: (id)sender { NSEnumerator *enumerator = [[self selection] objectEnumerator]; id anObject; NSFont *newFont; while ((anObject = [enumerator nextObject])) { if ([anObject respondsToSelector: @selector(font)] && [anObject respondsToSelector: @selector(setFont:)]) { newFont = [sender convertFont: [anObject font]]; newFont = [[GormFontViewController sharedGormFontViewController] convertFont: newFont]; [anObject setFont: newFont]; } } return; } - (NSArray*) selection { NSInteger i; NSInteger count = [selection count]; NSMutableArray *result = [NSMutableArray arrayWithCapacity: count]; if (count != 0) { for (i = 0; i < count; i++) { if ([[selection objectAtIndex: i] respondsToSelector: @selector(editedObject)]) [result addObject: [[selection objectAtIndex: i] editedObject]]; else [result addObject: [selection objectAtIndex: i]]; } } else { if ([self respondsToSelector: @selector(editedObject)]) [result addObject: [self editedObject]]; else [result addObject: self]; } return result; } - (void) selectObjects: (NSArray *) objects { NSInteger i; NSInteger count = [objects count]; TEST_RELEASE(selection); selection = [[NSMutableArray alloc] initWithCapacity: [objects count]]; for (i = 0; i < count; i++) { [selection addObject: [objects objectAtIndex: i]]; } [self makeSubeditorResign]; opened = YES; [self openParentEditor]; [document setSelectionFromEditor: self]; [self setNeedsDisplay: YES]; } - (void) silentlyResetSelection { TEST_RELEASE(selection); selection = [[NSMutableArray alloc] initWithCapacity: 5]; } - (void) copySelection { if ([selection count] > 0) { [document copyObjects: [self selection] type: IBViewPboardType toPasteboard: [NSPasteboard generalPasteboard]]; } } - (BOOL) acceptsFirstResponder { return YES; } - (void) drawSelection { // doesn nothing. } - (NSUInteger) selectionCount { return [selection count]; } - (NSDragOperation) draggingEntered: (id)sender { NSRect rect = [_editedObject bounds]; NSPoint loc = [sender draggingLocation]; NSPasteboard *dragPb; NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; loc = [_editedObject convertPoint: loc fromView: nil]; if ([types containsObject: GormLinkPboardType] == YES) { return [super draggingEntered: sender]; } if (NSMouseInRect(loc, [_editedObject bounds], NO) == NO) { return NSDragOperationNone; } else { rect.origin.x += 3; rect.origin.y += 2; rect.size.width -= 5; rect.size.height -= 5; [_editedObject lockFocus]; [[NSColor darkGrayColor] set]; NSFrameRectWithWidth(rect, 2); [_editedObject unlockFocus]; [[self window] flushWindow]; return NSDragOperationCopy; } } - (void) draggingExited: (id)sender { NSPasteboard *dragPb; NSArray *types; NSRect rect; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: GormLinkPboardType] == YES) { [super draggingExited: sender]; return; } rect = [_editedObject bounds]; rect.origin.x += 3; rect.origin.y += 2; rect.size.width -= 5; rect.size.height -= 5; rect.origin.x --; rect.size.width ++; rect.size.height ++; [[self window] disableFlushWindow]; [self displayRect: [_editedObject convertRect: rect toView: self]]; [[self window] enableFlushWindow]; [[self window] flushWindow]; } - (NSDragOperation) draggingUpdated: (id)sender { NSPoint loc = [sender draggingLocation]; NSRect rect = [_editedObject bounds]; NSPasteboard *dragPb; NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; loc = [_editedObject convertPoint: loc fromView: nil]; if ([types containsObject: GormLinkPboardType] == YES) { return [super draggingUpdated: sender]; } rect.origin.x += 3; rect.origin.y += 2; rect.size.width -= 5; rect.size.height -= 5; if (NSMouseInRect(loc, [_editedObject bounds], NO) == NO) { [[self window] disableFlushWindow]; rect.origin.x --; rect.size.width ++; rect.size.height ++; [self displayRect: [_editedObject convertRect: rect toView: self]]; [[self window] enableFlushWindow]; [[self window] flushWindow]; return NSDragOperationNone; } else { [_editedObject lockFocus]; [[NSColor darkGrayColor] set]; NSFrameRectWithWidth(rect, 2); [_editedObject unlockFocus]; [[self window] flushWindow]; return NSDragOperationCopy; } } - (BOOL) prepareForDragOperation: (id)sender { NSString *dragType; NSArray *types; NSPasteboard *dragPb; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: IBViewPboardType] == YES) { dragType = IBViewPboardType; } else if ([types containsObject: GormLinkPboardType] == YES) { dragType = GormLinkPboardType; return [super prepareForDragOperation: sender]; } else { dragType = nil; } if (dragType == IBViewPboardType) { /* * We can accept views dropped anywhere. */ NSPoint loc = [sender draggingLocation]; loc = [_editedObject convertPoint: loc fromView: nil]; if (NSMouseInRect(loc, [_editedObject bounds], NO) == NO) { return NO; } return YES; } return NO; } - (BOOL) performDragOperation: (id)sender { NSString *dragType; NSPasteboard *dragPb; NSArray *types; dragPb = [sender draggingPasteboard]; types = [dragPb types]; if ([types containsObject: IBViewPboardType] == YES) { dragType = IBViewPboardType; } else if ([types containsObject: GormLinkPboardType] == YES) { dragType = GormLinkPboardType; } else { dragType = nil; } if (dragType == IBViewPboardType) { NSPoint loc = [sender draggingLocation]; NSArray *views; NSEnumerator *enumerator; NSView *sub; /* * Ask the document to get the dragged views from the pasteboard and add * them to it's collection of known objects. */ views = [document pasteType: IBViewPboardType fromPasteboard: dragPb parent: _editedObject]; /* * Now make all the views subviews of ourself, setting their origin to * be the point at which they were dropped (converted from window * coordinates to our own coordinates). */ loc = [_editedObject convertPoint: loc fromView: nil]; if (NSMouseInRect(loc, [_editedObject bounds], NO) == NO) { // Dropped outside our view frame NSLog(@"Dropped outside current edit view"); dragType = nil; return NO; } enumerator = [views objectEnumerator]; while ((sub = [enumerator nextObject]) != nil) { NSRect rect = [sub frame]; rect.origin = [_editedObject convertPoint: [sender draggedImageLocation] fromView: nil]; rect.origin.x = (int) rect.origin.x; rect.origin.y = (int) rect.origin.y; rect.size.width = (int) rect.size.width; rect.size.height = (int) rect.size.height; [sub setFrame: rect]; [_editedObject addSubview: sub]; { id editor; editor = [document editorForObject: sub inEditor: self create: YES]; [self selectObjects: [NSArray arrayWithObject: editor]]; } } } return YES; } - (void) handleMouseOnKnob: (IBKnobPosition) knob ofView: (GormViewEditor *) view withEvent: (NSEvent *) theEvent { NSPoint mouseDownPoint = [[view superview] convertPoint: [theEvent locationInWindow] fromView: nil]; NSDate *future = [NSDate distantFuture]; BOOL acceptsMouseMoved; unsigned eventMask; NSEvent *e; NSEventType eType; NSRect r = [view frame]; NSPoint maxMouse; NSPoint minMouse; NSRect firstRect = [view frame]; NSRect lastRect = [view frame]; NSPoint lastPoint = mouseDownPoint; NSPoint point = mouseDownPoint; NSView *superview; GormPlacementInfo *gpi; eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask | NSMouseMovedMask | NSPeriodicMask; // Save window state info. acceptsMouseMoved = [[self window] acceptsMouseMovedEvents]; [[self window] setAcceptsMouseMovedEvents: YES]; superview = [view superview]; [superview lockFocus]; _displaySelection = NO; /* * Get size limits for resizing or moving and calculate maximum * and minimum mouse positions that won't cause us to exceed * those limits. */ { NSSize max = [view maximumSizeFromKnobPosition: knob]; NSSize min = [view minimumSizeFromKnobPosition: knob]; r = [superview frame]; minMouse = NSMakePoint(NSMinX(r), NSMinY(r)); maxMouse = NSMakePoint(NSMaxX(r), NSMaxY(r)); r = [view frame]; switch (knob) { case IBBottomLeftKnobPosition: maxMouse.x = NSMaxX(r) - min.width; minMouse.x = NSMaxX(r) - max.width; maxMouse.y = NSMaxY(r) - min.height; minMouse.y = NSMaxY(r) - max.height; break; case IBMiddleLeftKnobPosition: maxMouse.x = NSMaxX(r) - min.width; minMouse.x = NSMaxX(r) - max.width; break; case IBTopLeftKnobPosition: maxMouse.x = NSMaxX(r) - min.width; minMouse.x = NSMaxX(r) - max.width; maxMouse.y = NSMinY(r) + max.height; minMouse.y = NSMinY(r) + min.height; break; case IBTopMiddleKnobPosition: maxMouse.y = NSMinY(r) + max.height; minMouse.y = NSMinY(r) + min.height; break; case IBTopRightKnobPosition: maxMouse.x = NSMinX(r) + max.width; minMouse.x = NSMinX(r) + min.width; maxMouse.y = NSMinY(r) + max.height; minMouse.y = NSMinY(r) + min.height; break; case IBMiddleRightKnobPosition: maxMouse.x = NSMinX(r) + max.width; minMouse.x = NSMinX(r) + min.width; break; case IBBottomRightKnobPosition: maxMouse.x = NSMinX(r) + max.width; minMouse.x = NSMinX(r) + min.width; maxMouse.y = NSMaxY(r) - min.height; minMouse.y = NSMaxY(r) - max.height; break; case IBBottomMiddleKnobPosition: maxMouse.y = NSMaxY(r) - min.height; minMouse.y = NSMaxY(r) - max.height; break; case IBNoneKnobPosition: break; /* NOT REACHED */ } } /* Set the arrows cursor in case it might be something else */ [[NSCursor arrowCursor] push]; /* * Track mouse movements until left mouse up. * While we keep track of all mouse movements, we only act on a * movement when a periodic event arives (every 20th of a second) * in order to avoid excessive amounts of drawing. */ [NSEvent startPeriodicEventsAfterDelay: 0.1 withPeriod: 0.05]; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; if ([view respondsToSelector: @selector(initializeResizingInFrame:withKnob:)]) { gpi = [(id)view initializeResizingInFrame: superview withKnob: knob]; } else { gpi = nil; } while (eType != NSLeftMouseUp) { if (eType != NSPeriodic) { point = [superview convertPoint: [e locationInWindow] fromView: nil]; /* if (edit_view != self) point = _constrainPointToBounds(point, [edit_view bounds]); */ } else if (NSEqualPoints(point, lastPoint) == NO) { [[self window] disableFlushWindow]; { float xDiff; float yDiff; if (point.x < minMouse.x) point.x = minMouse.x; if (point.y < minMouse.y) point.y = minMouse.y; if (point.x > maxMouse.x) point.x = maxMouse.x; if (point.y > maxMouse.y) point.y = maxMouse.y; xDiff = point.x - lastPoint.x; yDiff = point.y - lastPoint.y; lastPoint = point; { r = GormExtBoundsForRect(r/*constrainRect*/); r.origin.x--; r.origin.y--; r.size.width += 2; r.size.height += 2; // [superview displayRect: r]; r = lastRect; switch (knob) { case IBBottomLeftKnobPosition: r.origin.x += xDiff; r.origin.y += yDiff; r.size.width -= xDiff; r.size.height -= yDiff; break; case IBMiddleLeftKnobPosition: r.origin.x += xDiff; r.size.width -= xDiff; break; case IBTopLeftKnobPosition: r.origin.x += xDiff; r.size.width -= xDiff; r.size.height += yDiff; break; case IBTopMiddleKnobPosition: r.size.height += yDiff; break; case IBTopRightKnobPosition: r.size.width += xDiff; r.size.height += yDiff; break; case IBMiddleRightKnobPosition: r.size.width += xDiff; break; case IBBottomRightKnobPosition: r.origin.y += yDiff; r.size.width += xDiff; r.size.height -= yDiff; break; case IBBottomMiddleKnobPosition: r.origin.y += yDiff; r.size.height -= yDiff; break; case IBNoneKnobPosition: break; /* NOT REACHED */ } lastRect = r; if ([view respondsToSelector: @selector(updateResizingWithFrame:andEvent:andPlacementInfo:)]) { [view updateResizingWithFrame: r andEvent: theEvent andPlacementInfo: gpi]; } } /* * Flush any drawing performed for this event. */ [[self window] enableFlushWindow]; [[self window] flushWindow]; } } e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; } [NSEvent stopPeriodicEvents]; [NSCursor pop]; /* Typically after a view has been dragged in a window, NSWindow sends a spurious moustEntered event. Sending the mouseUp event back to the NSWindow resets the NSWindow's idea of the last mouse point so it doesn't think that the mouse has entered the view (since it was always there, it's just that the view moved). */ [[self window] postEvent: e atStart: NO]; { NSRect redrawRect = NSZeroRect; /* * This was a subview resize, so we must clean up by removing * the highlighted knob and the wireframe around the view. */ [view updateResizingWithFrame: r andEvent: theEvent andPlacementInfo: gpi]; [view validateFrame: r withEvent: theEvent andPlacementInfo: gpi]; r = GormExtBoundsForRect(lastRect); r.origin.x--; r.origin.y--; r.size.width += 2; r.size.height += 2; /* * If this was a simple resize, we must redraw the union of * the original frame, and the final frame, and the area * where we were drawing the wireframe and handles. */ redrawRect = NSUnionRect(r, redrawRect); redrawRect = NSUnionRect(firstRect, redrawRect); } if (NSEqualPoints(point, mouseDownPoint) == NO) { /* * A subview was moved or resized, so we must mark the * doucment as edited. */ [document touch]; } [superview unlockFocus]; _displaySelection = YES; [self setNeedsDisplay: YES]; /* * Restore state to what it was on entry. */ [[self window] setAcceptsMouseMovedEvents: acceptsMouseMoved]; } - (void) handleMouseOnView: (GormViewEditor *) view withEvent: (NSEvent *) theEvent { NSPoint mouseDownPoint = [[view superview] convertPoint: [theEvent locationInWindow] fromView: nil]; NSDate *future = [NSDate distantFuture]; NSView *subview; BOOL acceptsMouseMoved; BOOL dragStarted = NO; unsigned eventMask; NSEvent *e; NSEventType eType; NSRect r; NSPoint maxMouse; NSPoint minMouse; NSPoint lastPoint = mouseDownPoint; NSPoint point = mouseDownPoint; NSView *superview; NSEnumerator *enumerator; NSRect oldMovingFrame; NSRect suggestedFrame; GormPlacementInfo *gpi = nil; BOOL shouldUpdateSelection = YES; BOOL mouseDidMove = NO; eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask | NSMouseMovedMask | NSPeriodicMask; // Save window state info. acceptsMouseMoved = [[self window] acceptsMouseMovedEvents]; [[self window] setAcceptsMouseMovedEvents: YES]; if (view == nil) { return; } if ([theEvent modifierFlags] & NSShiftKeyMask) { if ([selection containsObject: view]) { NSMutableArray *newSelection = [selection mutableCopy]; [newSelection removeObjectIdenticalTo: view]; [self selectObjects: newSelection]; RELEASE(newSelection); return; } else { NSArray *newSelection; newSelection = [selection arrayByAddingObject: view]; [self selectObjects: newSelection]; } shouldUpdateSelection = NO; } else { if ([selection containsObject: view]) { if ([selection count] == 1) shouldUpdateSelection = NO; } else { shouldUpdateSelection = NO; [self selectObjects: [NSArray arrayWithObject: view]]; } } superview = [view superview]; [superview lockFocus]; { NSRect vf = [view frame]; NSRect sf = [superview bounds]; NSPoint tr = NSMakePoint(NSMaxX(vf), NSMaxY(vf)); NSPoint bl = NSMakePoint(NSMinX(vf), NSMinY(vf)); enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { if (subview != view) { float tmp; vf = [subview frame]; tmp = NSMaxX(vf); if (tmp > tr.x) tr.x = tmp; tmp = NSMaxY(vf); if (tmp > tr.y) tr.y = tmp; tmp = NSMinX(vf); if (tmp < bl.x) bl.x = tmp; tmp = NSMinY(vf); if (tmp < bl.y) bl.y = tmp; } } minMouse.x = point.x - bl.x; minMouse.y = point.y - bl.y; maxMouse.x = NSMaxX(sf) - tr.x + point.x; maxMouse.y = NSMaxY(sf) - tr.y + point.y; } if ([selection count] == 1) { oldMovingFrame = [[selection objectAtIndex: 0] frame]; gpi = [[selection objectAtIndex: 0] initializeResizingInFrame: [self superview] withKnob: IBNoneKnobPosition]; suggestedFrame = oldMovingFrame; } // Set the arrows cursor in case it might be something else [[NSCursor arrowCursor] push]; // Track mouse movements until left mouse up. // While we keep track of all mouse movements, we only act on a // movement when a periodic event arives (every 20th of a second) // in order to avoid excessive amounts of drawing. [NSEvent startPeriodicEventsAfterDelay: 0.1 withPeriod: 0.05]; e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; { while ((eType != NSLeftMouseUp) && !mouseDidMove) { if (eType != NSPeriodic) { point = [superview convertPoint: [e locationInWindow] fromView: nil]; if (NSEqualPoints(mouseDownPoint, point) == NO) mouseDidMove = YES; } e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; } } while (eType != NSLeftMouseUp) { if (eType != NSPeriodic) { point = [superview convertPoint: [e locationInWindow] fromView: nil]; } else if (NSEqualPoints(point, lastPoint) == NO) { [[self window] disableFlushWindow]; { float xDiff; float yDiff; if (point.x < minMouse.x) point.x = minMouse.x; if (point.y < minMouse.y) point.y = minMouse.y; if (point.x > maxMouse.x) point.x = maxMouse.x; if (point.y > maxMouse.y) point.y = maxMouse.y; xDiff = point.x - lastPoint.x; yDiff = point.y - lastPoint.y; lastPoint = point; if (dragStarted == NO) { // Remove selection knobs before moving selection. dragStarted = YES; _displaySelection = NO; [self setNeedsDisplay: YES]; } if ([selection count] == 1) { id obj = [selection objectAtIndex: 0]; if([obj isKindOfClass: [NSView class]]) { [[selection objectAtIndex: 0] setFrameOrigin: NSMakePoint(NSMaxX([self bounds]), NSMaxY([self bounds]))]; [superview display]; r = oldMovingFrame; r.origin.x += xDiff; r.origin.y += yDiff; r.origin.x = (int) r.origin.x; r.origin.y = (int) r.origin.y; r.size.width = (int) r.size.width; r.size.height = (int) r.size.height; oldMovingFrame = r; //case guideLine if ( _followGuideLine ) { suggestedFrame = [obj _displayMovingFrameWithHint: r andPlacementInfo: gpi]; } else { suggestedFrame = NSMakeRect (NSMinX(r), NSMinY(r), NSMaxX(r) - NSMinX(r), NSMaxY(r) - NSMinY(r)); } [obj setFrame: suggestedFrame]; [obj setNeedsDisplay: YES]; } } else { enumerator = [selection objectEnumerator]; while ((subview = [enumerator nextObject]) != nil) { NSRect oldFrame = [subview frame]; r = oldFrame; r.origin.x += xDiff; r.origin.y += yDiff; r.origin.x = (int) r.origin.x; r.origin.y = (int) r.origin.y; r.size.width = (int) r.size.width; r.size.height = (int) r.size.height; [subview setFrame: r]; [superview setNeedsDisplayInRect: oldFrame]; [subview setNeedsDisplay: YES]; } } /* * Flush any drawing performed for this event. */ [[self window] displayIfNeeded]; [[self window] enableFlushWindow]; [[self window] flushWindow]; } } e = [NSApp nextEventMatchingMask: eventMask untilDate: future inMode: NSEventTrackingRunLoopMode dequeue: YES]; eType = [e type]; } _displaySelection = YES; if ([selection count] == 1) [[selection objectAtIndex: 0] setFrame: suggestedFrame]; if (mouseDidMove == NO && shouldUpdateSelection == YES) { [self selectObjects: [NSArray arrayWithObject: view]]; } [self setNeedsDisplay: YES]; [NSEvent stopPeriodicEvents]; [NSCursor pop]; /* Typically after a view has been dragged in a window, NSWindow sends a spurious mouseEntered event. Sending the mouseUp event back to the NSWindow resets the NSWindow's idea of the last mouse point so it doesn't think that the mouse has entered the view (since it was always there, it's just that the view moved). */ [[self window] postEvent: e atStart: NO]; if (NSEqualPoints(point, mouseDownPoint) == NO) { // A subview was moved or resized, so we must mark the doucment as edited. [document touch]; } [superview unlockFocus]; // Restore window state to what it was when entering the method. [[self window] setAcceptsMouseMovedEvents: acceptsMouseMoved]; } @end apps-gorm-gorm-1_5_0/GormCore/GormWindowEditor.h000066400000000000000000000054771475375552500217160ustar00rootroot00000000000000/* GormWindowEditor.h * * Copyright (C) 1999,2004,2005 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * Author: Gregory John Casamento * Date: 2004,2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormWindowEditor_h #define INCLUDED_GormWindowEditor_h #include #include @class NSMutableArray, NSString, NSView, NSPasteboard; @interface GormWindowEditor : GormViewWithContentViewEditor { NSView *edit_view; NSMutableArray *subeditors; BOOL isLinkSource; NSPasteboard *dragPb; NSString *dragType; } /** * Returns YES, if the reciever accepts any of the pasteboard items in types. */ - (BOOL) acceptsTypeFromArray: (NSArray*)types; /** * Activates the editor */ - (BOOL) activate; /** * Instantiate with anObject in the document aDocument. */ - (id) initWithObject: (id)anObject inDocument: (id)aDocument; /** * Change the font. */ - (void) changeFont: (id) sender; /** * Close the editor. This will also call the deactivate method. */ - (void) close; /** * Close any and all editors which are subordinate to this one. */ - (void) closeSubeditors; /** * Deactivate the editor. */ - (void) deactivate; /** * Delete the current selection. */ - (void) deleteSelection; /** * Return the document which the object the receiver is edited is located in. */ - (id) document; /** * Call with success or failure of the drag operation. */ - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f; /** * Returns NSDragOperationNone. */ - (NSUInteger) draggingSourceOperationMaskForLocal: (BOOL)flag; /** * Make current selection visible. */ - (void) makeSelectionVisible: (BOOL)flag; - (id) openSubeditorForObject: (id)anObject; /** * Order the edited window to the front. */ - (void) orderFront; /** * Paste from pasteboard. */ - (void) pasteInSelection; /** * Reset object, redisplays the window. */ - (void) resetObject: (id)anObject; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormWindowEditor.m000066400000000000000000000170061475375552500217120ustar00rootroot00000000000000/* GormWindowEditor.m * * Copyright (C) 1999,2004,2005 Free Software Foundation, Inc. * * Author: Richard Frith-Macdonald * Date: 1999 * Author: Gregory John Casamento * Date: 2004,2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "GormPrivate.h" #include "GormViewWithContentViewEditor.h" #include "GormInternalViewEditor.h" #include "GormViewKnobs.h" #include "GormWindowEditor.h" #include #define _EO ((NSWindow *)_editedObject) /* * Default implementations of methods used for updating a view by * direct action through an editor. */ @implementation NSView (IBViewAdditions) - (BOOL) acceptsColor: (NSColor*)color atPoint: (NSPoint)point { return NO; /* Can the view accept a color drag-and-drop? */ } - (BOOL) allowsAltDragging { return NO; /* Can the view be dragged into a matrix? */ } - (void) depositColor: (NSColor*)color atPoint: (NSPoint)point { /* Handle color drop in view. */ } - (NSSize) maximumSizeFromKnobPosition: (IBKnobPosition)knobPosition { NSView *s = [self superview]; NSRect r = (s != nil) ? [s bounds] : [self bounds]; return r.size; /* maximum resize permitted */ } - (NSSize) minimumSizeFromKnobPosition: (IBKnobPosition)position { return NSMakeSize(5, 5); /* Minimum resize permitted */ } - (void) placeView: (NSRect)newFrame { [self setFrame: newFrame]; /* View changed by editor. */ } @end @interface NSWindow (GormWindowEditorAdditions) - (void) unsetInitialFirstResponder; @end @implementation NSWindow (GormWindowEditorAdditions) /* * The setFirstResponder method is used in this editor to allow it to * respond to messages forwarded to the window appropriately. * Unfortunately, once it's set to something, it cannot be set to nil. * This method allows us to set it to nil, thus preventing a memory leak. */ - (void) unsetInitialFirstResponder { if(_firstResponder == _initialFirstResponder) { _firstResponder = nil; } _initialFirstResponder = nil; } @end @implementation GormWindowEditor - (id) initWithObject: (id)anObject inDocument: (id)aDocument { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; if ((self = [super initWithFrame: NSZeroRect]) == nil) return nil; [nc addObserver: self selector: @selector(handleNotification:) name: IBWillCloseDocumentNotification object: aDocument]; _displaySelection = YES; ASSIGN(_editedObject, anObject); // we don't retain the document... document = aDocument; [self registerForDraggedTypes: [NSArray arrayWithObjects: GormLinkPboardType, IBViewPboardType, nil]]; selection = [[NSMutableArray alloc] init]; subeditors = [[NSMutableArray alloc] init]; activated = NO; closed = NO; [self activate]; return self; } - (void) dealloc { if (closed == NO) [self close]; RELEASE(selection); RELEASE(subeditors); [super dealloc]; } - (BOOL) acceptsFirstMouse: (NSEvent*)theEvent { NSDebugLog(@"acceptsFirstMouse"); return YES; } - (BOOL) acceptsFirstResponder { NSDebugLog(@"acceptsFirstResponder"); return YES; } - (void) encodeWithCoder: (NSCoder*)aCoder { [NSException raise: NSInternalInconsistencyException format: @"Argh - encoding window editor"]; } - (BOOL) acceptsTypeFromArray: (NSArray*)types { /* * A window editor can accept views pasted in to the window. */ return [types containsObject: IBViewPboardType]; } - (BOOL) activate { if (activated == NO) { NSView *contentView = [_EO contentView]; contentViewEditor = (GormInternalViewEditor *)[document editorForObject: contentView inEditor: self create: YES]; [_EO setInitialFirstResponder: self]; [self setOpened: YES]; activated = YES; return YES; } return NO; } - (void) deactivate { if (activated == YES) { [contentViewEditor deactivate]; [_EO unsetInitialFirstResponder]; activated = NO; } return; } - (void) changeFont: (id)sender { NSDebugLog(@"changeFont"); } - (void) close { NSAssert(closed == NO, NSInternalInconsistencyException); closed = YES; [[NSNotificationCenter defaultCenter] removeObserver: self]; [self makeSelectionVisible: NO]; if ([(id)[NSApp delegate] selectionOwner] == self) { [document resignSelectionForEditor: self]; } [self closeSubeditors]; [self deactivate]; [document editor: self didCloseForObject: _EO]; } - (void) closeSubeditors { while ([subeditors count] > 0) { id sub = [subeditors lastObject]; [sub close]; [subeditors removeObjectIdenticalTo: sub]; } } - (void) copySelection { NSLog(@"copySelection"); } - (void) deleteSelection { NSLog(@"deleteSelection"); } - (void) drawSelection { NSDebugLog(@"drawSelection"); } - (id) document { return document; } - (void) makeSelectionVisible: (BOOL)flag { if (flag == NO) { if ([selection count] > 0) { NSEnumerator *enumerator = [selection objectEnumerator]; NSView *view; [[self window] disableFlushWindow]; while ((view = [enumerator nextObject]) != nil) { NSRect rect = GormExtBoundsForRect([view frame]); [edit_view displayRect: rect]; } [[self window] enableFlushWindow]; [[self window] flushWindowIfNeeded]; } } else { [self drawSelection]; [[self window] flushWindow]; } } - (id) openSubeditorForObject: (id)anObject { NSDebugLog(@"openSubeditorForObject"); return nil; } - (void) orderFront { [_EO orderFront: self]; } - (void) pasteInSelection { NSLog(@"pasteInSelection"); } - (BOOL) performDragOperation: (id)sender { NSDebugLog(@"performDragOperation"); return NO; } - (BOOL) prepareForDragOperation: (id)sender { return NO; } - (void) resetObject: (id)anObject { [[self window] makeKeyAndOrderFront: self]; } - (id) selectAllItems: (id)sender { NSDebugLog(@"selectAllItems"); return nil; } - (NSUInteger) selectionCount { NSDebugLog(@"selectionCount"); return 0; } - (void) validateEditing { NSDebugLog(@"validateEditing"); } /* * Dragging source protocol implementation */ - (void) draggedImage: (NSImage*)i endedAt: (NSPoint)p deposited: (BOOL)f { /* * Notification that a drag failed/succeeded. */ NSDebugLog(@"draggedImage"); if(f == NO) { NSRunAlertPanel(nil, _(@"Window drag failed."), _(@"OK"), nil, nil); } } - (NSUInteger) draggingSourceOperationMaskForLocal: (BOOL)flag { NSDebugLog(@"draggingSourceOperationMaskForLocal"); return NSDragOperationNone; } - (NSDragOperation) draggingEntered: (id)sender { return NSDragOperationNone; } - (NSDragOperation) draggingUpdated: (id)sender { return NSDragOperationNone; } @end apps-gorm-gorm-1_5_0/GormCore/GormWindowTemplate.h000066400000000000000000000022511475375552500222260ustar00rootroot00000000000000/* GormWindowTemplate * * Copyright (C) 2009 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2009 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include @interface NSWindowTemplate (Private) - (void) setBaseWindowClass: (Class) clz; @end @interface GormWindowTemplate : NSWindowTemplate { BOOL _tempFlag; } @end apps-gorm-gorm-1_5_0/GormCore/GormWindowTemplate.m000066400000000000000000000032051475375552500222330ustar00rootroot00000000000000/* GormWindowTemplate * * Copyright (C) 2009 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2009 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include "GormWindowTemplate.h" #include "GormNSWindow.h" #include "GormNSPanel.h" // @class GormNSWindow; // @class GormNSPanel; @interface NSWindow (Private) - (void) _setReleasedWhenClosed: (BOOL)flags; @end @implementation NSWindowTemplate (Private) - (void) setBaseWindowClass: (Class) clz { _baseWindowClass = clz; } @end @implementation GormWindowTemplate - (id) nibInstantiate { id object = [super nibInstantiate]; BOOL flag = [object isReleasedWhenClosed]; [object setReleasedWhenClosed: NO]; [object _setReleasedWhenClosed: flag]; return object; } - (Class) baseWindowClass { if([_windowClass isEqualToString:@"NSPanel"]) { return [GormNSPanel class]; } return [GormNSWindow class]; } @end apps-gorm-gorm-1_5_0/GormCore/GormWrapperBuilder.h000066400000000000000000000033121475375552500222110ustar00rootroot00000000000000/* GormWrapperBuilder * * This class is a subclass of the NSDocumentController * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormWrapperBuilder_h #define INCLUDED_GormWrapperBuilder_h #include @class NSFileWrapper, GormDocument, NSString, NSMutableDictionary; @protocol GormWrapperBuilder - (NSMutableDictionary *) buildFileWrapperDictionaryWithDocument: (GormDocument *)document; - (NSFileWrapper *) buildFileWrapperWithDocument: (GormDocument *)document; @end @interface GormWrapperBuilder : NSObject { GormDocument *document; } + (NSString *) fileType; @end @interface GormWrapperBuilderFactory : NSObject + (GormWrapperBuilderFactory *) sharedWrapperBuilderFactory; + (void) registerWrapperBuilderClass: (Class) aClass; - (id) wrapperBuilderForType: (NSString *) type; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormWrapperBuilder.m000066400000000000000000000113131475375552500222160ustar00rootroot00000000000000/* GormWrapperBuilder * * These classes handle loading different formats into the * document's data structures. * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include #include #include static NSMutableDictionary *_wrapperBuilderMap = nil; static GormWrapperBuilderFactory *_sharedWrapperBuilderFactory = nil; @implementation GormWrapperBuilder + (NSString *) fileType { [self subclassResponsibility: _cmd]; return nil; } - (NSFileWrapper *) buildFileWrapperWithDocument: (GormDocument *)doc { NSFileWrapper *result = nil; NSDictionary *wrappers = [self buildFileWrapperDictionaryWithDocument: doc]; if(wrappers != nil) { result = [[NSFileWrapper alloc] initDirectoryWithFileWrappers: wrappers]; } return result; } - (NSMutableDictionary *) buildFileWrapperDictionaryWithDocument: (GormDocument *)doc { NSMutableDictionary *fileWrappers = [NSMutableDictionary dictionary]; NSFileWrapper *scmDirWrapper = nil; NSArray *resources; id object; NSEnumerator *en; // Assign document and don't retain... document = doc; // // Add the SCM wrapper to the wrapper, if it's present. // scmDirWrapper = [document scmWrapper]; if(scmDirWrapper != nil) { NSString *name = [[scmDirWrapper filename] lastPathComponent]; [fileWrappers setObject: scmDirWrapper forKey: name]; } // // Copy resources into the new folder... // Gorm doesn't copy these into the folder right away since the folder may // not yet exist. This allows the user to add/delete resources as they see fit // but only those which they end up with will actually be put into the wrapper // when the model/document is saved. // resources = [[document sounds] arrayByAddingObjectsFromArray: [document images]]; object = nil; en = [resources objectEnumerator]; while ((object = [en nextObject]) != nil) { if([object isSystemResource] == NO) { NSString *path = [object path]; NSString *resName = nil; NSData *resData = nil; NSFileWrapper *fileWrapper = nil; if([object isInWrapper]) { resName = [object fileName]; resData = [object data]; } else { resName = [path lastPathComponent]; resData = [NSData dataWithContentsOfFile: path]; [object setData: resData]; [object setInWrapper: YES]; } fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: resData]; [fileWrappers setObject: fileWrapper forKey: resName]; RELEASE(fileWrapper); } } return fileWrappers; } @end @implementation GormWrapperBuilderFactory + (void) initialize { NSArray *classes = GSObjCAllSubclassesOfClass([GormWrapperBuilder class]); NSEnumerator *en = [classes objectEnumerator]; Class cls = nil; while((cls = [en nextObject]) != nil) { [self registerWrapperBuilderClass: cls]; } } + (void) registerWrapperBuilderClass: (Class)aClass { if(_wrapperBuilderMap == nil) { _wrapperBuilderMap = [[NSMutableDictionary alloc] initWithCapacity: 5]; } [_wrapperBuilderMap setObject: aClass forKey: (NSString *)[aClass fileType]]; } + (GormWrapperBuilderFactory *) sharedWrapperBuilderFactory { if(_sharedWrapperBuilderFactory == nil) { _sharedWrapperBuilderFactory = [[self alloc] init]; } return _sharedWrapperBuilderFactory; } - (id) init { if((self = [super init]) != nil) { if(_sharedWrapperBuilderFactory == nil) { _sharedWrapperBuilderFactory = self; } } return self; } - (id) wrapperBuilderForType: (NSString *) type { Class cls = [_wrapperBuilderMap objectForKey: type]; id obj = AUTORELEASE([[cls alloc] init]); return obj; } @end apps-gorm-gorm-1_5_0/GormCore/GormWrapperLoader.h000066400000000000000000000032261475375552500220350ustar00rootroot00000000000000/* GormWrapperLoader * * This class is a subclass of the NSDocumentController * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_GormWrapperLoader_h #define INCLUDED_GormWrapperLoader_h #include @class NSFileWrapper, GormDocument, NSString; @protocol GormWrapperLoader - (BOOL) loadFileWrapper: (NSFileWrapper *)wrapper withDocument: (GormDocument *)document; @end @interface GormWrapperLoader : NSObject { GormDocument *document; } + (NSString *) fileType; - (void) saveSCMDirectory: (NSDictionary *) fileWrappers; @end @interface GormWrapperLoaderFactory : NSObject + (GormWrapperLoaderFactory *) sharedWrapperLoaderFactory; + (void) registerWrapperLoaderClass: (Class) aClass; - (id) wrapperLoaderForType: (NSString *) type; @end #endif apps-gorm-gorm-1_5_0/GormCore/GormWrapperLoader.m000066400000000000000000000113311475375552500220360ustar00rootroot00000000000000/* GormWrapperLoader * * These classes handle loading different formats into the * document's data structures. * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include #include #include static NSMutableDictionary *_wrapperLoaderMap = nil; static GormWrapperLoaderFactory *_sharedWrapperLoaderFactory = nil; @implementation GormWrapperLoader + (NSString *) fileType { [self subclassResponsibility: _cmd]; return nil; } - (void) saveSCMDirectory: (NSDictionary *) fileWrappers { [document setSCMWrapper: [fileWrappers objectForKey: @".svn"]]; if([document scmWrapper] == nil) { [document setSCMWrapper: [fileWrappers objectForKey: @"CVS"]]; } } - (BOOL) loadFileWrapper: (NSFileWrapper *)wrapper withDocument: (GormDocument *)doc { NS_DURING { NSMutableArray *images = [NSMutableArray array]; NSMutableArray *sounds = [NSMutableArray array]; NSArray *imageFileTypes = [NSImage imageFileTypes]; NSArray *soundFileTypes = [NSSound soundUnfilteredFileTypes]; document = doc; // don't retain... if ([wrapper isDirectory]) { NSDictionary *fileWrappers = nil; NSString *key = nil; NSEnumerator *enumerator = nil; key = nil; fileWrappers = [wrapper fileWrappers]; [self saveSCMDirectory: fileWrappers]; enumerator = [fileWrappers keyEnumerator]; while((key = [enumerator nextObject]) != nil) { NSFileWrapper *fw = [fileWrappers objectForKey: key]; // // Images with .info can be loaded, but we have a file // called data.info which is metadata for Gorm. Don't load it. // if ( [key isEqualToString: @"data.info"] == YES ) { continue; } if([fw isRegularFile]) { NSData *fileData = [fw regularFileContents]; if ([imageFileTypes containsObject: [key pathExtension]]) { [images addObject: [GormImage imageForData: fileData withFileName: key inWrapper: YES]]; } else if ([soundFileTypes containsObject: [key pathExtension]]) { [sounds addObject: [GormSound soundForData: fileData withFileName: key inWrapper: YES]]; } } } } else if ([wrapper isRegularFile]) // handle wrappers which are just plain files... { } else { NSLog(@"Unsupported wrapper type"); } // fill in the images and sounds arrays... [document setSounds: sounds]; [document setImages: images]; } NS_HANDLER { return NO; } NS_ENDHANDLER; return YES; } @end @implementation GormWrapperLoaderFactory + (void) initialize { NSArray *classes = GSObjCAllSubclassesOfClass([GormWrapperLoader class]); NSEnumerator *en = [classes objectEnumerator]; Class cls = nil; while((cls = [en nextObject]) != nil) { [self registerWrapperLoaderClass: cls]; } } + (void) registerWrapperLoaderClass: (Class)aClass { if(_wrapperLoaderMap == nil) { _wrapperLoaderMap = [[NSMutableDictionary alloc] initWithCapacity: 5]; } [_wrapperLoaderMap setObject: aClass forKey: (NSString *)[aClass fileType]]; } + (GormWrapperLoaderFactory *) sharedWrapperLoaderFactory { if(_sharedWrapperLoaderFactory == nil) { _sharedWrapperLoaderFactory = [[self alloc] init]; } return _sharedWrapperLoaderFactory; } - (id) init { if((self = [super init]) != nil) { if(_sharedWrapperLoaderFactory == nil) { _sharedWrapperLoaderFactory = self; } } return self; } - (id) wrapperLoaderForType: (NSString *) type { Class cls = [_wrapperLoaderMap objectForKey: type]; id obj = AUTORELEASE([[cls alloc] init]); return obj; } @end apps-gorm-gorm-1_5_0/GormCore/GormXLIFFDocument.h000066400000000000000000000041161475375552500216340ustar00rootroot00000000000000/* GormXLIFFDocument.h * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef GormXLIFFDocument_H_INCLUDE #define GormXLIFFDocument_H_INCLUDE #import @class NSMutableDictionary; @class NSString; @class NSXMLDocument; @class GormDocument; @interface GormXLIFFDocument : NSObject { GormDocument *_gormDocument; NSString *_objectId; NSString *_targetString; NSString *_sourceString; NSMutableDictionary *_translationDictionary; BOOL _source; BOOL _target; } /** * Returns an autoreleased GormXLIFFDocument object; */ + (instancetype) xliffWithGormDocument: (GormDocument *)doc; /** * Initialize with GormDocument object to parse the XML from or into. */ - (instancetype) initWithGormDocument: (GormDocument *)doc; /** * Exports XLIFF file for CAT. This method starts the process and calls * another method that recurses through the objects in the model and pulls * any translatable elements. */ - (BOOL) exportXLIFFDocumentWithName: (NSString *)name withSourceLanguage: (NSString *)slang andTargetLanguage: (NSString *)tlang; /** * Import XLIFF Document withthe name filename */ - (BOOL) importXLIFFDocumentWithName: (NSString *)filename; @end #endif // GormXLIFFDocument_H_INCLUDE apps-gorm-gorm-1_5_0/GormCore/GormXLIFFDocument.m000066400000000000000000000316641475375552500216510ustar00rootroot00000000000000/* GormXLIFFDocument.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #import #import #import #import #import #import #import #import #import #import "GormDocument.h" #import "GormDocumentController.h" #import "GormFilePrefsManager.h" #import "GormProtocol.h" #import "GormPrivate.h" #import "GormXLIFFDocument.h" @implementation GormXLIFFDocument /** * Returns an autoreleast GormXLIFFDocument object; */ + (instancetype) xliffWithGormDocument: (GormDocument *)doc { return AUTORELEASE([[self alloc] initWithGormDocument: doc]); } /** * Initialize with GormDocument object to parse the XML from or into. */ - (instancetype) initWithGormDocument: (GormDocument *)doc { self = [super init]; if (self != nil) { ASSIGN(_gormDocument, doc); _objectId = nil; _source = NO; _target = NO; _sourceString = nil; _targetString = nil; _translationDictionary = [[NSMutableDictionary alloc] init]; } return self; } - (void) dealloc { DESTROY(_gormDocument); _objectId = nil; _sourceString = nil; _targetString = nil; DESTROY(_translationDictionary); [super dealloc]; } - (void) _collectObjectsFromObject: (id)obj withNode: (NSXMLElement *)node { NSString *name = [_gormDocument nameForObject: obj]; if (name != nil) { NSString *className = NSStringFromClass([obj class]); NSXMLElement *group = [NSXMLNode elementWithName: @"group"]; NSXMLNode *attr = [NSXMLNode attributeWithName: @"ib:object-id" stringValue: name]; [group addAttribute: attr]; if ([obj isKindOfClass: [GormObjectProxy class]] || [obj respondsToSelector: @selector(className)]) { className = [obj className]; } attr = [NSXMLNode attributeWithName: @"ib:class" stringValue: className]; [group addAttribute: attr]; [node addChild: group]; // If the object responds to "title" get that and add it to the XML if ([obj respondsToSelector: @selector(title)]) { NSString *title = [obj title]; if (title != nil) { NSXMLElement *transunit = [NSXMLNode elementWithName: @"trans-unit"]; NSString *objId = [NSString stringWithFormat: @"%@.title", name]; attr = [NSXMLNode attributeWithName: @"ib:key-path-category" stringValue: @"string"]; [transunit addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"ib:key-path" stringValue: @"title"]; [transunit addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"id" stringValue: objId]; [transunit addAttribute: attr]; [group addChild: transunit]; NSXMLElement *source = [NSXMLNode elementWithName: @"source"]; [source setStringValue: title]; [transunit addChild: source]; } } // For each different class, recurse through the structure as needed. if ([obj isKindOfClass: [NSMenu class]] || [obj isKindOfClass: [NSPopUpButton class]]) { NSArray *items = [obj itemArray]; NSEnumerator *en = [items objectEnumerator]; id item = nil; while ((item = [en nextObject]) != nil) { [self _collectObjectsFromObject: item withNode: group]; } } else if ([obj isKindOfClass: [NSMenuItem class]]) { NSMenu *sm = [obj submenu]; if (sm != nil) { [self _collectObjectsFromObject: sm withNode: group]; } } else if ([obj isKindOfClass: [NSWindow class]]) { [self _collectObjectsFromObject: [obj contentView] withNode: group]; } else if ([obj isKindOfClass: [NSView class]]) { NSArray *subviews = [obj subviews]; NSEnumerator *en = [subviews objectEnumerator]; id v = nil; while ((v = [en nextObject]) != nil) { [self _collectObjectsFromObject: v withNode: group]; } } } } - (void) _buildXLIFFDocumentWithParentNode: (NSXMLElement *)parentNode { NSEnumerator *en = [[_gormDocument topLevelObjects] objectEnumerator]; id o = nil; [_gormDocument deactivateEditors]; while ((o = [en nextObject]) != nil) { [self _collectObjectsFromObject: o withNode: parentNode]; } [_gormDocument reactivateEditors]; } /** * Exports XLIFF file for CAT. This method starts the process and calls * another method that recurses through the objects in the model and pulls * any translatable elements. */ - (BOOL) exportXLIFFDocumentWithName: (NSString *)name withSourceLanguage: (NSString *)slang andTargetLanguage: (NSString *)tlang { BOOL result = NO; id delegate = [NSApp delegate]; if (slang != nil) { NSString *toolId = @"gnu.gnustep.Gorm"; NSString *toolName = @"Gorm"; NSString *toolVersion = [NSString stringWithFormat: @"%d", [GormFilePrefsManager currentVersion]]; if ([delegate isInTool]) { toolName = @"gormtool"; toolId = @"gnu.gnustep.gormtool"; } // Build root element... NSXMLElement *rootElement = [NSXMLNode elementWithName: @"xliff"]; NSXMLNode *attr = [NSXMLNode attributeWithName: @"xmlns" stringValue: @"urn:oasis:names:tc:xliff:document:1.2"]; [rootElement addAttribute: attr]; NSXMLNode *xsi_ns = [NSXMLNode namespaceWithName: @"xsi" stringValue: @"http://www.w3.org/2001/XMLSchema-instance"]; [rootElement addNamespace: xsi_ns]; NSXMLNode *ib_ns = [NSXMLNode namespaceWithName: @"ib" stringValue: @"com.apple.InterfaceBuilder3"]; [rootElement addNamespace: ib_ns]; attr = [NSXMLNode attributeWithName: @"version" stringValue: @"1.2"]; [rootElement addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"xsi:schemaLocation" stringValue: @"urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd"]; [rootElement addAttribute: attr]; // Build header... NSXMLElement *header = [NSXMLNode elementWithName: @"header"]; NSXMLElement *tool = [NSXMLNode elementWithName: @"tool"]; attr = [NSXMLNode attributeWithName: @"tool-id" stringValue: toolId]; [tool addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"tool-name" stringValue: toolName]; [tool addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"tool-version" stringValue: toolVersion]; [tool addAttribute: attr]; [header addChild: tool]; // Build "file" element... NSString *filename = [[_gormDocument fileName] lastPathComponent]; NSXMLElement *file = [NSXMLNode elementWithName: @"file"]; GormDocumentController *dc = [GormDocumentController sharedDocumentController]; NSString *type = [dc typeFromFileExtension: [filename pathExtension]]; attr = [NSXMLNode attributeWithName: @"original" stringValue: filename]; [file addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"datatype" stringValue: type]; // we will have the plugin return a datatype... [file addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"tool-id" stringValue: toolId]; [file addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"source-language" stringValue: slang]; [file addAttribute: attr]; if (tlang != nil) { attr = [NSXMLNode attributeWithName: @"target-language" stringValue: tlang]; [file addAttribute: attr]; } [rootElement addChild: file]; // Set up document... NSXMLDocument *xliffDocument = [NSXMLNode documentWithRootElement: rootElement]; [file addChild: header]; NSXMLElement *body = [NSXMLNode elementWithName: @"body"]; NSXMLElement *group = [NSXMLNode elementWithName: @"group"]; attr = [NSXMLNode attributeWithName: @"ib_member-type" stringValue: @"objects"]; // not sure why generates ib_1 when using a colon [group addAttribute: attr]; [body addChild: group]; // add body to document... [file addChild: body]; // Recursively build the XLIFF document from the GormDocument... [self _buildXLIFFDocumentWithParentNode: group]; NSData *data = [xliffDocument XMLDataWithOptions: NSXMLNodePrettyPrint | NSXMLNodeCompactEmptyElement ]; NSString *xmlString = [[NSString alloc] initWithBytes: [data bytes] length: [data length] encoding: NSUTF8StringEncoding]; NSString *fixedString = [xmlString stringByReplacingOccurrencesOfString: @"ib_member-type" withString: @"ib:member-type"]; // "fixedString" corrects a rather confusing problem where adding the // ib:member-type attribute, for some reason causes the NSXMLNode to // create a repeated declaration of the "ib" namespace. I don't understand // why this is happening, but this fixes it in the output for now. AUTORELEASE(xmlString); result = [fixedString writeToFile: name atomically: YES]; } else { NSLog(@"Source language not specified"); } return result; } - (void) parserDidStartDocument: (NSXMLParser *)parser { NSDebugLog(@"start of document"); } - (void) parser: (NSXMLParser *)parser didStartElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName attributes: (NSDictionary *)attrs { NSDebugLog(@"start element %@", elementName); if ([elementName isEqualToString: @"trans-unit"]) { NSString *objId = [attrs objectForKey: @"id"]; _objectId = objId; } else if ([elementName isEqualToString: @"source"]) { _source = YES; } else if ([elementName isEqualToString: @"target"]) { _target = YES; } } - (void) parser: (NSXMLParser *)parser foundCharacters: (NSString *)string { if (_objectId != nil) { if (_source) { NSDebugLog(@"Found source string %@, current id = %@", string, _objectId); } if (_target) { [_translationDictionary setObject: string forKey: _objectId]; NSDebugLog(@"Found target string %@, current id = %@", string, _objectId); } } } - (void) parser: (NSXMLParser *)parser didEndElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName { NSDebugLog(@"end element %@", elementName); if ([elementName isEqualToString: @"trans-unit"]) { _objectId = nil; } else if ([elementName isEqualToString: @"source"]) { _source = NO; } else if ([elementName isEqualToString: @"target"]) { _target = NO; } } - (void) parserDidEndDocument: (NSXMLParser *)parser { NSDebugLog(@"end of document"); } /** * Import XLIFF Document withthe name filename */ - (BOOL) importXLIFFDocumentWithName: (NSString *)filename { NSData *xmlData = [NSData dataWithContentsOfFile: filename]; NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData: xmlData]; BOOL result = NO; [xmlParser setDelegate: self]; [xmlParser parse]; if ([_translationDictionary count] > 0) { NSEnumerator *en = [_translationDictionary keyEnumerator]; NSString *oid = nil; while ((oid = [en nextObject]) != nil) { NSString *target = [_translationDictionary objectForKey: oid]; NSArray *c = [oid componentsSeparatedByString: @"."]; if ([c count] == 2) { NSString *nm = [c objectAtIndex: 0]; NSString *kp = [c objectAtIndex: 1]; id o = nil; NSString *capName = [kp capitalizedString]; NSString *selName = [NSString stringWithFormat: @"set%@:", capName]; SEL _sel = NSSelectorFromString(selName); NSDebugLog(@"computed selector name = %@", selName); // Pull the object that we want to translate and apply the target translation... o = [_gormDocument objectForName: nm]; if ([o respondsToSelector: _sel]) { NSDebugLog(@"performing %@, with object: %@", selName, target); [o performSelector: _sel withObject: target]; } } NSDebugLog(@"target = %@, oid = %@", target, oid); } result = YES; } else { NSLog(@"Document contains no target translation elements"); } RELEASE(xmlParser); return result; } @end apps-gorm-gorm-1_5_0/GormCore/Images/000077500000000000000000000000001475375552500174725ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/Images/GormAction.tiff000066400000000000000000000017121475375552500224070ustar00rootroot00000000000000II*$0006{{{$0006λTTT $ZZZYYY'''0{{{999+++0)))00ggg-GGGDDDHiii㙙___!!!RRRPVVVmmmSSS&&&777 GPPP;;;:::777***555>>> $-0000 0    @(Rgorm_Action.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/Images/GormActionSelected.tiff000066400000000000000000000017721475375552500240660ustar00rootroot00000000000000II*$888'''***...6 ///???NNNLLL<<<444===$6 DDDUUUbbbeee $***666UUUUUUUUUUUUWWWrrr 0+++CCCUUUUUUUUUUUUUUU0&&&OOOUUUggg0555VVVUUUUUUUUUUUUUUUbbb0^^^[[[UUUUUUUUUUUUUUU-mmmjjjUUUUUUXXX,,,HzzzfffVVVUUUUUUUUUUUU\\\yyy999P⒒sss^^^aaayyy888G{{{$-+++000000000...0###0   A@(R/home/heron/gnustep/dev-apps/Gorm/Images/GormActionSelected.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/Images/GormClass.tiff000066400000000000000000000223021475375552500222350ustar00rootroot00000000000000II*$\Un1BA@?>=<;:5*{^Yn3DA=5110//.--2562{'s`YnAB>3+'#"#""""! "$*/22s$lb[nCD;-&$$####"""!!! !#(-.l!d6G&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`+ (nc\nF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ldZUD=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ( $nc\nE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcSM6A%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQN GnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\V=9b[nD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[KF6@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwLq[io5|LG73G5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw;rW7zJE61F4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mS<)yHC4 0E2$$$$##mx`PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwBb}R,xPJ3 0E/$$$###mw^PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?1 .D/$$####dFld”PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=0 -C.$####" `Yi͜PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw.YDB+t@;. +C0####""!vmfǘPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw+T@> }s>9B2####""!{\mqYPwPwPwPwPwPwPwPwPwPwPwPwPw=v[K>~|r<817###"""!fCl[PwPwPwPwPwPwPwPwPwPwPwPwPw2aJD6~~}ne:6; 6f _;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=HC/4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62: 5a[9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51-)?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8GA^X7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /-)?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .-)?)|3% #)+48)}F<4., ~}|{tQK2 /f^+ (?5.! xo8~}|yg^8 4& # * '?3+ rj3}|yja<8SM0" ( %?1*!nf1~}wjb?;TN-)xEB>$& $?/+"ja/~~sTN=8UO-)TPUC3% #?-*!e],|{pSM;7* 'c_YUNB4$j!c)$aY*uc[FA:6h_phc\TMC6$" ?c\&z#~]V(zukc[LGB>KE-)c_\WRPPM;  C\Vw$ov"ov~VO'~|yod]RMGCA=MG-)VUQNLIDCD4)-)H95RLjcjckdc\d]KFo g]VZSWQNHHCPJ> 9-)i=<<;;<>5*%"2/1./,- *, )* ') &' %& $? :#########" 00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormCopyImage.tiff000066400000000000000000000006401475375552500230460ustar00rootroot00000000000000II*#Ǯ 0xT" B-Fc0R:br =#cRrK/d)46NeI}5g40=iTe6OjP<)K+UJr)P$ungͪ)i[kn\7>\ox+W boPM-jcUDyZG1`UAJ/Y4^Uifej(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormEHCoil.tiff000066400000000000000000000100201475375552500222650ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPggPPPPPPggPPPggPPPPPPPPPPPPPPPPPPPPPPPPy""yy""yy""yPPPPPP   PPPPPPU}}UU}}UU}}UPPP8PPP8PPP8888PPPPPPPPP88PPP8888}}UPPPU}}UU}}U PPP  y""yPPPy""yy""y g""""gPPPPPPPPPPPPPPPPPPgggg2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEHCoil.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormEHLine.tiff000066400000000000000000000100201475375552500222660ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEHLine.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormEVCoil.tiff000066400000000000000000000100201475375552500223030ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPUPPPyyPPP}88}PPPg PPP gPPP""PPPPPP""PPP g}88}yyPPPg PPPUUPPP"PPPPPPPPPPPPPPPPPPPPPPPP"PPPg UUPPPyyPPP}88}PPP gPPPPPP""PPP"" g}88}yyPPPg UUPPP"PPP"UUPPPgyyPPP}88}PPP gPPPPPP""PPP""g g}88}yyPPPUUPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEVCoil.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormEVLine.tiff000066400000000000000000000100201475375552500223040ustar00rootroot00000000000000II*PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP2 E@(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormEVLine.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormFile.tiff000066400000000000000000006230541475375552500220620ustar00rootroot00000000000000II*00  ?,$RZ(1 b2nJRS/home/heron/Development/gnustep/apps-gorm/Images/GormFile.tiffHHGIMP 2.10.82020:07:12 01:33:34  ,&S& (/LB`q/EQ~ -5RC`pau` " ,3QEcsfww3KX /;h2I\B`xPv 0) -5QGdtdyeU{ahX )` !/7THevl~qnkphir^&9H"/7SJhxi}|s|yknaTzef4Ma  *%4=_Lk{n텱}tutsqutjU}]lDc}>FMJfw`pxwvuutrq{ro|]U|rLp '  <"1>j0FYB`xNqSx_w_wwy{yvuutsrqrihffRytS} E#BGiRxX]bnwsxxrrqoqjhiltuZoY$.h!G_|~y}s}~spos|ls|ke~`cb)cx ,6px}}ollllllllllllrwuuiiT!LCl{}mlllllllllllllrt{{yr]b7Xi #X}}{lllllllllllllllruhgVUhS 9Dc|x}|xsqlkklllljkl_]jru`XXWVT`_/L]8Rgjvqolkkklkkk```]]sfZXWV\hcS?g{,AR]|qomlkkkkkkk````[o\XXeiaULy!4A5 ,7hYz{mlkkkkikk`````hhtik\SKtKkZy)3zBV}yzlkkjif\k```hhttkkQFmEgVxjt-DV Ryq~xxmlkkkkkk```hhttkk_wF^p^zmrk`U|8Rg Hinqvwvvmlkkkkk}ekhhttkk_w_w_w_wU}Kp=\r,BS+7` 99Ukpdvutt{bahctkk_w_w_w)>Mhbvttsrqq~reerykkk(3b^kmusqqpomljiggelzxiT2L\zK:U~whqqpommkjhhsvcKr$8B G Nse]tponmlkij~sa>^p&-x0 & FeRzHjbqomlktlX2JY U  $P V:0EQ}nl||kOv%7@ B3hyb@_q!'p) Mrzr\2IV W &8BqQu$4><%MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____MsMsMsMsMs^^^^^gggggg_____-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<-KZ-KZ-KZ-KZ-KZdddddkkkkkkllllluuuuuÀÀÀÀÀjjjjj-DK-DK-DK-DK-DK-<-<-<-<-<-<NzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:JNzNzNzNzNzbbbbbkkkkkkqqqqqxxxxxLjLjLjLjLjǐʐʐʐʐʉƉƉƉƉƒʒʒʒʒʒwwwwwV~V~V~V~V~NsNsNsNsNsNsRxRxRxRxRxU|U|U|U|U|YYYYYY%:J%:J%:J%:J%:J3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um3DU3DU3DU3DU3DUeeeeennnnnnpppppyyyyyŽˎˎˎˎˎ˓̓̓̓̓̉ljljljljdžƆƆƆƆƆƍɍɍɍɍɌȌȌȌȌȀ€€€€€‰ʼnʼnʼnʼneeeeeU{U{U{U{U{U{aaaaahhhhhXXXXXX:Um:Um:Um:Um:Um@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDf@@@@@@@@@@@@UuUuUuUuUudddddoooooottttt~~~~~Ŏˎˎˎˎˎ˗ϗϗϗϗϦզզզզՉȉȉȉȉȉȍɍɍɍɍɔ̔̔̔̔̄ńńńńńqqqqqnnnnnkkkkkk‚‚‚‚ppppphhhhhhiiiiirrrrr^^^^^^DfDfDfDfDfDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKpDUfDUfDUfDUfDUfhhhhhrrrrrruuuuu~~~~~Ŕϔϔϔϔϔϛћћћћюˎˎˎˎ||||||sssss|||||šϚϚϚϚϚϋȋȋȋȋȉljljljljǃăăăăăāÁÁÁÁyyyyykkkkkknnnnn‚‚‚‚aaaaaaTzTzTzTzTzeeeeeffffffKpKpKpKpKp++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     ++U++U++U++U++U"3"3"3"3"3"3OsOsOsOsOscccccqqqqqqvvvvvʅʅʅʅʓϓϓϓϓϓϛққққҔϔϔϔϔ}}}}}}tttttuuuuuttttttsssssqqqqq͖͖͖͖͖ͅŅŅŅŅłĂĂĂĂČȌȌȌȌȌȇŇŇŇŇŃÃÃÃÃuuuuuuttttt…………jjjjjjU}U}U}U}U}]]]]]llllllQwQwQwQwQw     $$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A$$I$$I$$I$$I$$IVbkVbkVbkVbkVbkiiiiioooooowwwwwǀǀǀǀǖЖЖЖЖЖОԞԞԞԞԒΒΒΒΒ΀ƀƀƀƀƀxxxxxwwwwwvvvvvvuuuuuuuuuuttttttrrrrrqqqqqāāāāāĔ̔̔̔̔̒˒˒˒˒ˌnjnjnjnjnjDžąąąąċƋƋƋƋ{{{{{{rrrrrooooo||||||]]]]]U|U|U|U|U|rrrrrrS{S{S{S{S{!4A!4A!4A!4A!4A9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\9^q9^q9^q9^q9^qHoHoHoHoHoHoRvRvRvRvRvRxRxRxRxRxU|U|U|U|U|U|U|U|U|U|U|TyTyTyTyTy_w_w_w_w_w_w_w_w_w_w_w͙͡͡͡͡љљљљљѝӝӝӝӝӖЖЖЖЖЀǀǀǀǀǀwwwwwyyyyy{{{{{{yyyyyvvvvvuuuuuuuuuuutttttssssssrrrrrqqqqqrrrrrr̕̕̕̕̕˕˕˕˕ˈňňňňňŌnjnjnjnjiiiiiihhhhhffffffffffRyRyRyRyRyttttttUUUUU0J\0J\0J\0J\0J\IlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqIlIlIlIlIlIlU~U~U~U~U~XXXXXZZZZZZ]]]]]bbbbbnnnnnnwwwww͡͡͡͡͡͡͡͡͡͡sssssxxxxxxǃǃǃǃNJˊˊˊˊ˫ګګګګګ۳۳۳۳۳ۑ̑̑̑̑xxxxxrrrrrrrrrrrqqqqqooooooNJNJNJNJǎȎȎȎȎȍȍȍȍȍȍqqqqqjjjjjhhhhhhiiiiilllllttttttuuuuuZZZZZooooooYYYYY;Xq;Xq;Xq;Xq;XqAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhAawAawAawAawAawAaw_____|||||~~~~~~yyyyyƒȃȃȃȃȚҚҚҚҚҚҝӝӝӝӝӔϔϔϔϔ}}}}}}sssss}}}}}~~~~~~蚼ϚϚϚϚϚssssspppppoooooosssssȏȏȏȏ||||||lllllsssss||||||kkkkkeeeeee~~~~~`````ccccccbbbbbGhGhGhGhGhaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmaaaaappppppxxxxxȄȄȄȄȔϔϔϔϔϔϟԟԟԟԟԕЕЕЕЕ~~~~~~zzzzz{{{{{{{{{{{yyyyyœœœœզզզզձٱٱٱٱٱٻ޻޻޻޻|||||nnnnnnmmmmmƋƋƋƋƂ‚‚‚‚‚‚|||||yyyyyyzzzzzmmmmmccccccnnnnnooooo\\\\\\jjjjjLmLmLmLmLmY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQwY|Y|Y|Y|Y|xxxxxx¢բբբբՑΑΑΑΑ΁ǁǁǁǁǁyyyyyzzzzz{{{{{{{{{{{|||||||||||Ź߹߹߹߹گگگگڄƄƄƄƄƄssssspppppooooooˑˑˑˑ~~~~~~lllllzzzzzÄÄÄÄÄÀĉĉĉĉĉăwwwwwccccccaaaaazzzzz^^^^^^iiiiiQwQwQwQwQw"3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'."3"3"3"3"3rrrrrrҚҚҚҚ|||||zzzzzzzzzzz{{{{{{{{{{{||||||||||ŰܰܰܰܰܰݶݶݶݶssssssrrrrrooooooooooolllllŇŇŇŇxxxxxkkkkkĉĉĉĉĉĎƎƎƎƎƀzzzzzz{{{{{wwwwwggggggaaaaammmmmiiiiii_____U{U{U{U{U{'.'.'.'.'.'.ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\ffffff̍̍̍̍̊ˊˊˊˊzzzzzz{{{{{{{{{{|||||||||||œϓϓϓϓ{{{{{{rrrrrpppppnnnnnnlllllkkkkkʒʒʒʒʒʰְְְְkkkkkyyyyy}}}}}yyyyyy|||||vvvvvffffff``````````uuuuuuZZZZZRyRyRyRyRy2G\2G\2G\2G\2G\2G\E]qE]qE]qE]qE]qE]q{{{{{ĝԝԝԝԝyyyyyy{{{{{|||||||||||}}}}}ΗΗΗΗΗrrrrrooooommmmmmlllllkkkkkkkkkkkծծծծՃjjjjjjĊĊĊĊĄ}}}}}qqqqq``````_____]]]]]rrrrrrcccccR|R|R|R|R|\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\s333333333333oooooӜӜӜӜ}}}}}}{{{{{|||||}}}}}}ŏΏΏΏΏpppppooooommmmmmkkkkkkkkkkkkkkkk}}}}}ӫӫӫӫhhhhhh~~~~~~mmmmmcccccaaaaaakkkkkwwwwwqqqqqquuuuuXXXXX>\s>\s>\s>\s>\s>\sbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkbbbbbˈˈˈˈˑΑΑΑΑΑ|||||}}}}}}}}}}}}}}}}nnnnnmmmmmmkkkkkkkkkkkkkkkkkkkkkհհհհlllllllllllvvvvvvkkkkkyyyyywwwwwwrrrrrsssssssssssttttt_____EkEkEkEkEkEkC[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####C[jC[jC[jC[jC[jzzzzzԝԝԝԝԝ|||||}}}}}}}}}}}kkkkklllllllllllkkkkkkkkkkkkkkkkkkkkkĔĔĔĔlllllllllll~~~~~~vvvvvrrrrrrrrrrryyyyyvvvvveeeeeejjjjjlllllO~O~O~O~O~O~#####oooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:Znoooooӛӛӛӛӛ}}}}}}}}}}}ffffffllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrrrrrrrrrrr‡‡‡‡mmmmmmiiiiioooooYYYYYY:Zn:Zn:Zn:Zn:ZnZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~ZZZZZˈˈˈˈˈ˓ϓϓϓϓ}}}}}}}}}}}ʜʜʜʜkkkkkllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȐȐȐȐȇ‡‡‡‡†zzzzzmmmmmeeeeeeggggg]]]]]hhhhhhO~O~O~O~O~Gd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^oGd{Gd{Gd{Gd{Gd{xxxxxx¡աաաա}}}}}}}}}}}ΦΦΦΦΓƓƓƓƓƓooooolllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrȏȏȏȏȄ‡‡‡‡‡wwwwwuuuuuuuuuuuɑɑɑɑiiiiiiiiiiiVVVVV9^o9^o9^o9^o9^o5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 5Pc5Pc5Pc5Pc5Pcllllllїїїї{{{{{}}}}}}ΣΣΣΣΈňňňňmmmmmmllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllrrrrrrttttt{{{{{{{{{{{yyyyyǍǍǍǍǍNJŊŊŊŊrrrrr]]]]]]bbbbbM{M{M{M{M{ 3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^3I_3I_3I_3I_3I_]]]]]]ɆɆɆɆɖіііі}}}}}}{{{{{llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll͡͡͡͡͡llllllllllllllllrrrrruuuuuɑɑɑɑɑɍƍƍƍƍƆ††††hhhhhhgggggVVVVVUUUUUUhhhhhUUUUU1L^1L^1L^1L^1L^1L^$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIv$7I$7I$7I$7I$7IPtPtPtPtPtPtxxxxxԠԠԠԠ}}}}}}ũةةةة|||||xxxxxxsssssqqqqqllllllkkkkkkkkkklllllllllllllllllllllljjjjjkkkkk͡͡͡͡͡lllll_____]]]]]]jjjjjrrrrruuuuuu`````XXXXXXXXXXXWWWWWVVVVVTTTTTT`````_____IvIvIvIvIvIvNrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5NrNrNrNrNrNrjjjjjҙҙҙҙ҃ȃȃȃȃȃȄȄȄȄȄ폵ʏʏʏʏvvvvvvqqqqqooooollllllkkkkkkkkkkkkkkkklllllkkkkkkkkkkkkkkkk͡͡͡͡````````````````]]]]]]]]]]]sssssffffffZZZZZXXXXXWWWWWWVVVVV\\\\\hhhhhhcccccTTTTTL|L|L|L|L|L|,5,5,5,5,5MrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcMrMrMrMrMrMr]]]]]ǁǁǁǁǚҚҚҚҚҚ|||||ijݳݳݳݳׯׯׯׯqqqqqqooooommmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡``````````````````````[[[[[ooooo\\\\\\XXXXXXXXXXeeeeeeiiiiiaaaaaUUUUUULyLyLyLyLy2Oc2Oc2Oc2Oc2OcJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkJlJlJlJlJlJlYYYYYzzzzzԞԞԞԞԞ{{{{{Àƀƀƀƀ㒵ɒɒɒɒɒmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkiiiiikkkkkkkkkkk͡͡͡͡```````````````````````````hhhhhhhhhhttttttiiiiikkkkk\\\\\\SSSSSKtKtKtKtKtKkKkKkKkKkKkZyZyZyZyZy8Vk8Vk8Vk8Vk8VkBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGlBaxBaxBaxBaxBaxBaxXXXXXyyyyy͑͑͑͑͑ͅȅȅȅȅzzzzzˍˍˍˍˍ㙹˙˙˙˙˙lllllkkkkkkkkkkkjjjjjiiiiiffffff\\\\\kkkkk͡͡͡͡͡͡͡͡͡͡````````````````hhhhhhhhhhhttttttttttkkkkkkkkkkkQQQQQFmFmFmFmFmFmEgEgEgEgEgVxVxVxVxVxjjjjjjtttttGlGlGlGlGl):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKn):J):J):J):J):J):JWWWWWqqqqq~~~~~~ŕϕϕϕϕxxxxxxxxxxxʌʌʌʌٳٳٳٳٳيNJNJNJNJmmmmmllllllkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk͡͡͡͡````````````````hhhhhhhhhhhtttttttttttkkkkkkkkkk_w_w_w_w_w_wXvXvXvXvXv^z^z^z^z^zmmmmmmrrrrrkkkkk``````V~V~V~V~V~KnKnKnKnKnSzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-SzSzSzSzSznnnnnqqqqqqћћћћvvvvvwwwwwwvvvvvŃŃŃŃžӤӤӤӤvvvvvvmmmmmlllllkkkkkkkkkkkkkkkkkkkkkkkkkkk}}}}}ϧϧϧϧϧϝʝʝʝʝeeeeekkkkkkhhhhhhhhhhtttttttttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wWWWWWQyQyQyQyQyQyJoJoJoJoJo@az@az@az@az@az8Pf8Pf8Pf8Pf8Pf8Pf%8H%8H%8H%8H%8H$-$-$-$-$-OvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wOvOvOvOvOvpppppddddddʋʋʋʋʃƃƃƃƃvvvvvvuuuuuttttttttttt̓̓̓̓̿߿߿߿߿ززززؚ͚͚͚͚͏ǏǏǏǏǏnjƌƌƌƌƐǐǐǐǐǟ͟͟͟͟͟ͱԱԱԱԱԩЩЩЩЩ{{{{{{bbbbbaaaaahhhhhhccccctttttkkkkkkkkkkk_w_w_w_w_w_w_w_w_w_w_w_w_w_w_w_wJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkJpJpJpJpJphhhhhbbbbbbvvvvvΖΖΖΖtttttttttttsssssrrrrrrqqqqqqqqqq~~~~~~ɒɒɒɒɤѤѤѤѤѪӪӪӪӪӪӧѧѧѧѧќ̜̜̜̜̈ÈÈÈÈÈrrrrreeeeeeeeeeerrrrryyyyykkkkkkkkkkkkkkkkIhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     IhIhIhIhIh^^^^^kkkkkkmmmmm͓͓͓͓uuuuuusssssqqqqqqqqqqqpppppooooommmmmmllllljjjjjiiiiiiggggggggggeeeeeelllllzzzzzxxxxxxiiiiiYYYYYCg|Cg|Cg|Cg|Cg|Cg|0;0;0;0;0;     >\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK>\w>\w>\w>\w>\wVVVVVwwwwwwhhhhhDŽDŽDŽDŽǁāāāāāqqqqqqqqqqppppppooooommmmmmmmmmmkkkkkjjjjjhhhhhhhhhhhsssssvvvvvdddddWWWWWW=_p=_p=_p=_p=_p ( ( ( ( ( @` @` @` @` @` @`-KK-KK-KK-KK-KK8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW8Xh8Xh8Xh8Xh8XhU}U}U}U}U}eeeeee]]]]]tttttˏˏˏˏˏpppppooooonnnnnnmmmmmlllllkkkkkkiiiiijjjjj~~~~~~sssssccccccOxOxOxOxOx5Q`5Q`5Q`5Q`5Q`      /CW/CW/CW/CW/CW+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU+@+@+@+@+@U{U{U{U{U{U~U~U~U~U~U~NtNtNtNtNtfffffʐʐʐʐʐqqqqqooooommmmmmlllllkkkkkttttttllllll_____KnKnKnKnKn!09!09!09!09!09!092@U2@U2@U2@U2@U2@U+GU+GU+GU+GU+GU+GU3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@U3Mc3Mc3Mc3Mc3Mc$2A$2A$2A$2A$2A$2ATyTyTyTyTy}}}}}}‚ÂÂÂÂnnnnnllllll|||||ʼnʼnʼnʼn||||||lllll[[[[[BaqBaqBaqBaqBaqBaq'.'.'.'.'.++U++U++U++U++U++U3@Y3@Y3@Y3@Y3@Y+@U+@U+@U+@U+@UFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YFdsFdsFdsFdsFdsnnnnnnɐɐɐɐɄÄÄÄÄÊŊŊŊŊŊyyyyyfffffU~U~U~U~U~U~2KY2KY2KY2KY2KY3333333333UUUUUUUUUUUUUUU&@Y&@Y&@Y&@Y&@Y&@YddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CddddddzzzzzrrrrrddddddLoLoLoLoLo&;C&;C&;C&;C&;CV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`sV~V~V~V~V~V~`````C`sC`sC`sC`sC`s                              apps-gorm-gorm-1_5_0/GormCore/Images/GormFilesOwner.tiff000066400000000000000000000223021475375552500232450ustar00rootroot00000000000000II*$җٗԔБʍʼnzeeeƖܛ2-)('&',yvh`[`" 'ܛ5.'$#""! !#&'ep[n/0&$##""!! %ayYvQKPӝ7*$$###""!  "qSnIEH;)%$$##"" #z^H\+"5%$$$"&?vdjhinrv_+4SaG_͗3=*$$#'Rga_XZ^^pf)'6-{bB_:6:309ݜ/%!-3'^fVPwPwPwPwPwPwPwQxU}ey}A0"vJ8I  E@M+%$#&FlWPwPwPwPwPwPwPwPwPwPwQyxm,~V7R(%U ($$#(]QyPwPwPwPwPwPwPwPwPwPwPw[z<X4UB.@ 'ő-%$$&DfS|PwPwPwPwPwPwPwPwPwPwPwPwPuV'jbC,A:($$$8p{U}PwPwPwPwPwPwPwPwPwPwPwPwPwOvVwo<sjE)BNݓ&$##@iU~PwPwPwPwPwPwPwPwPwPwPwPwPwPwBbF#tkD'ASّ&$##EaR{PwPwPwPwPwPwPwPwPwPwPwPwPwPwEf|Q*sj@"=SՍ%###B`S{PwPwPwPwPwPwPwPwPwPwPwPwPwPwBbM*pg:7Sщ%#"":Qv%!! 3`twPuPwPwPwPwPwPwPwPwPwPwA~aC#}{xn.+5 0 & #3q(! +pW|OpNtPwPwPwPwPwPwJj][lA&~}{~t_W $ iԪi# 1k[xLjGiKoPwLrEf@|_c[qA/}|{uk.+ " 0dܣc!"+6xD|QH\qHw=:/}{t+ (! B>a`'##4# ~|yg_  cQbY#}*}uja+ (i5q%q:,bkUNx'}yo1.& #' * $ / 9 ;$ (./,)s k  8&I1D.D.7VOwG{u$wm,*% !2 - 3 9 IV 0.64#"!"f!#yI1D.D.D.C.@3{JcoCjp22Cf:M]4OV.NP*JE%@H#B?:<7908*d8UOLKPZ]i#o%o&b!1 qD?M(EX}PwPwPwWSS7N4N4N4N4M4L3L2J2J1E4@8=<:=7;473804/4-/-,,(*z)v'r&q&r&q&r&q&p&o&b!1 8HCT'gPwPwPwPwS72!2!2!2!2!2!1!1!0 0 /.-,*{)v'r&o%j#d"a ]YVTQNMKJIHH0 UGAT&yiPwPwPwPwS7e"e"e"e"e"d"c"b!a!`!^ \ZYVSPNLIFDA?= ; : 8 7 6 5 5 4 4 "  p: 6I#+^{UynP+)&&#bl!/d"b!b!a!` ^\ZXUROMKR%a.*'&#[<:6 5 4 4 3 3 "  @ 'оE~eS'2=3!!"gb b!a!`!_ ][ZXUROLM}%V/#5:-!"P05 5 4 3 3 3 "  i; 3 /K!#.*Nh]~aX-uR/*'&z$T]YWTQNLf5+*`d]}eX {kC$4 3 3 2 2 !  e8 5 0U ./vyPwPwPwZzD"-)&$"!y T^#VTQMKw!K)E]PwPwPwZz%yR<4 3 2 2 2 ! sI:ZSw,:aPwPwPwPv~X3*,HT;%#s PUSPMKy N'gPwPwPwPwPv7zWC3 3 2 2 2 ! W?E@T)2cPwPwPwRvT*9`PwPwPwudzaBROLJuJ%SPwPwPwPwRv.}rQ>3 2 2 2 2 !  e;1@;Q)$}_QuOvPuhn|@(\PwPwPwPwfu~'|YE6 4 2 0 Z=#+ez~PuNuSvhn|qg> 0" ! ! ! ! X8#( %5 ".odbtylh~6,&xnPwPwPwPwbz|/xD ?5ji~er|q_6|SLU&"3ul %%BPwPwPwPwjl~!|q@ ;3 /K!"aY"JExtkrhKD{r#xXQsLqY|u<yh_,(OJxnulh_A <xF }u&0%tj9 4"mc{aY)&  DMHTMOHH A%"qN 00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormFirstResponder.tiff000066400000000000000000000223021475375552500241410ustar00rootroot00000000000000II*$??? yyy +++ ? +++ %%%666 ?```EEE888jjj ?```?'''''' XXXXXX888 O\\\zzz,,,AAAjjj888III/333@@@n?555AAA _ccc/// //// #@@@...q jjj===999 _===www???FFFoooKKKJJJ jjj[[[=== O|||555PPPPPPiii###~}}}Ե *PPP///~?jjj---===OOO}}}MMMMMM nzzzxxxԭ *0|||jjj? _NNNMMMzzz㭭 *8555jjj/```MMMmmmΈ *eeeCCCjjjfffpppGGGqqqޕnnn *```?555555~MMMEEECCC 4FjjjVVVޫ_ .o:jy`ߩklJ$"2zCuqqrDm  w2p@d2_OCׯUiimggew|kDh@;SQKJIHGFPmjoLGW74)$""! !&+ib-*C=;5432104=En[EK]vcm0:'$##""!  (/543110/..JoooqxGBbwiFe32$$$##"!! #,Gwjl~q2-4>|^ooooNAZzbnquPqB62%$$#"M3.wq]]]]gM4+,kooo`AFe` NIW-=)$# ~YabX[^f) :$t!m]}]]]]e0+*lawoomX@B~tebfBc  9' 2=*iWPwPwPwPwPwPwY|L4-~^Qi]]]][K*)k=koozG@FcbpKmQ C>K6%$##qPwPwPwPwPwPwPwPwPwQx~Ud^f]]]][*)h0ej|Q@>)'^  **$$#]WPwPwPwPwPwPwPwPwPwPwVu$ulWgi]]]]O))i(dUH@?Z-V =%$$`PwPwPwPwPwPwPwPwPwPwPwMsI{Q@X]]]Vt?)(o(iE@?b2]b* =$$#aPwPwPwPwPwPwPwPwPwPwPwPw{T~K%J]]Z}X+(&}j,d:xc/^20 E7  :$##KWPwPwPwPwPwPwPwPwPwPwPwPw_hr"}I#IXzWrU1('e!_   9##"'[PwPwPwPwPwPwPwPwPwPwPwPwwT!zIEH<+)(|%s.,9##"ZPwPwPwPwPwPwPwPwPwPwPwKpFxRM2*)(~%uJE;0$"! ig{PwPwPwPwPwPwPwPwPwPwPwFsa7}ulaZ/)(p$h52\L$ WQo)"!!XxPwPwPwPwPwPwPwPwPwGkC~|XQa[g%`VQ40N9. 2!! 8SsOuPwPwPwPwPwPwEfuL{(~|vC>    u#m$ *i]xFhHlPwKpCdKgaA(|z`Y)& .!!0?gEmG<3~{sjE@  ?;_+(}~sKE G  ;7_)z$~vmNI+(K6 .+O%u"}kbLF  ]Q;- A<{ rwm ~td]OI. +  gUMI9  00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormFontManager.tiff000066400000000000000000000225361475375552500234020ustar00rootroot00000000000000II*$ $)%*&*'*'*(*(*)*)***********************)*)*(*(*'*'*%) nI/uKƃT؎\cfgijkkdbbcccbbaadhhgfe`a> ]1 0 dI1a@)d@ahjklzOnI.\=&]=&]=']=']=']=&\=&\<&]='lG-X8qIِ]ge`gA2 ƂThjkk_?)  #\='ƃTe`gC  $4 =}PgijkO4"M>>>>>>>>>@_Y;%֍[`gC |PfhijN4!< ,_=ߔ_gB {PfghiM3!5  iE-tՍZfB zOefghL3 5M3!V|OۘeB yNdefgL2 5-7]<}S5 xMcdefK1 5  ? vLbbdeJ1 5 mvLaabdI1 5)tKߔ``abI1 5  rJܒ^ޓ_``H0 5 U8$d\='o qHِ]ے^ݒ^ޓ_G/5"(lEc?#m; oH֎[؏\ِ]ڑ^E.58%C~QeB$(nGӌZԍ[֎[׏\C-5 lG.ƃUeA#1lEЊYҋZӌZԍZ^>(0 5#['/(/(/(/'/'/'/+4:&GfD,}sI͈WdA"1jD͈XΉXЊYъYmGa?b@a>b?b@b?a>`>_>c?pHϼ|PɆV͈Xc@"1iDʆV̇W͈W͈XyNrIrIrIrIsJrIrIrHrHuKÁS͈ẆWʆVa?" 1gCDŽUȅUɅVʆWnI/D-D,D,D,D,D,D,D,C,J1`?(];|PDŽU`>! 1fAĂTƃTƄUDŽU^?(-..///...2!C,mG-pHÁS_=  1e@RSÂTĂT=( rJ0ٹzO^<  1c@ʿ~QRR€R<(Y.........3>)irJ\;  1b?ʼ}P}Q~Q~Q;'5#1gBՉ[: 1`>ʹ{O{O|P}P:'5 T8$y^?( 1_=ʷyNzOzO{O:&5  q-^<ʴxMxNxNyN9&5:x\;ʲvLvLwLwM8%5 "[;ʰtKuKuKuL7%5Z:ʭsJsJtKtK7$5Y9ʫqIrIrJsJ6$5X9ʩpHpHpHqH5#5W8ʧnGoGoGoH4"5V7ʥmFnGnGnG5#5 X8УlFlFmFmFM3! 7  (#9.KV8$c@kEkEkElEX8Q6":&q'@ . &   D-piE-yO4ƆX9ܖb@hBiChCiDiDiDc?[:T6sL1mH.T7# 3D-{nI/tM1uM2uM1uM2uM2wN3wN3wO3xO3xO3xO3wN2wO2xO2`>( Z  U               00$ J$8%@$N%V%(R/home/heron/Development/gnustep/dev-apps/Gorm/Images/GormFontManager.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/Images/GormImage.tiff000066400000000000000000000223021475375552500222120ustar00rootroot00000000000000II*$WUUUUUUUUUWUUUUUUUUUrrrUUUUUUUUUUUU999UUU51,<833/')&)0;hr|aUUUUUUUUUUUUrrrUUU999UUUrrrUUU999rrr7<`9?`5;W-4M.(C)$'5YwaUUUUUUUUUUUU999UUUUUUUUUUUUUUU;Cd=DdV*0Q.0P.+A".16jaUUUUUUUUUUUU999999UUUUUUUUU999UUUUUU14@I?C<5542//'3$"5+8PkaUUUUUUUUUMB9SH<[Q@[Q>bZA[SCRL?OK;JF7GF;DE;DC7FI=VPBgaM`eHlwaaUUUUUUUUUUUUUUU +'85$C>*NI5ID1SN;RP;YXEZYJIJ=}~zjX]RaUUUUUUUUUUUUUUUEA&gKJ?aUUUUUUUUUUUUUUU999rrrrrrUUU999rrrUUUrrrrrrUUU+##$=6)aUUUUUUUUUUUUrrrUUUUUUUUU       -+GI+qwLFI*  #&!aUUUUUU999UUUrrrUUU999UUU999uzWyzcĵzzxQOMKE@ArGwxOVD"HF/YV4a`pyCGM>DI@=OBFQRV^TQ]IK[OXYNQ_.)2O]EufOʲpq@B8a77E?AP47G6;K:=PADUBEU\_nDMVJN]DEQ347CE4{bSʵsia11E>?T68NDH`?BU;>O>AQPSbJS\KO^NO[569RU>kY9/4%aUUUUUUXZ\MQTOTYFNS7:M8;LEHXLO^GPYLP_MNY88;VYDrfH>?%aUUUUUUGHQJLVCGS@FR8;N8;LADT?BQDMVGKZMNY::==>03'  aUUUUUUUUUUUUUUU999UUUrrr999UUUUUUUUUUUUAFW@DR?BN?AM>?P-2=?GSZbu_lxOV_egjJFF)! .aUUUUUUUUUUUU999rrrUUUUUUUUUUUUUUUUUUbl|HP_9=K79F:;K5$0ZH \!aUUUUUUUUUUUU999rrrUUUUUUUUUUUUUUU999999rrrz36@02>*(-/12MZiWl[rlSrq\@C4;6*!9-g*b*]%aUUUUUUUUUX!aUUUUUUUUU+++5aqqqqqq+++- aUUUqqq222OOOqqqqqqqqqqqqOOO+++UUUUUU0aUUUqqqqqqqqqOOOOOOqqqqqqqqqqqq+++- aUUUUUUUUUqqqOOOqqqqqqOOO222OOOqqqqqqOOOOOO+++aqqqOOO+++aUUUTUUUmmm|||TUUUUUUUUUTTTTTTTTTTTTTTTTTTTjWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormMHCoil.tiff000066400000000000000000000160741475375552500223140ustar00rootroot00000000000000II* PPPggggggPPPggggggPPPy""yy""yy""yPPPy""yy""yy""y   PPP   U}}UU}}UU}}UPPPU}}UU}}UU}}U888888PPP888888PPPPPP888888888888}}UU}}UU}}UPPPU}}UU}}UU}}U   PPP   y""yy""yy""yPPPy""yy""yy""yPPP PPPPPPPPPPPPPPPPPPPPPPPPPPP  PPPPPPg""""gPPPg""""gPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPggPPPggPPPPPPggggPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP[ E@,4(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormMHCoil.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormMHLine.tiff000066400000000000000000000160741475375552500223150ustar00rootroot00000000000000II* PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP[ E@,4(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormMHLine.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormMVCoil.tiff000066400000000000000000000161141475375552500223250ustar00rootroot00000000000000II* MMMPPPPPPPPPPPPUPPPyyPPP}88}PPPg g"""" g}88}yyPPPg UUPPP"PPP"PPPg UUPPPyyPPP}88} g"""" gPPP}88}PPPyyPPPg UUPPP""UUgyy}88} g""""g g}88}yyPPPUUPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPUUyy}88}g g""PPP""PPP gPPP}88}yyPPPg UUPPP"PPP"PPPg UUPPPyyPPP}88} g"""" g}88}PPPgyyPPP"UUPPP"PPPg UUPPPyyPPP}88} g""""PPPg gPPP}88}PPPyyPPPUUPPPPPPPPPPPPPPPPPPPPP[ E,@4<D(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormMVCoil.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormMVLine.tiff000066400000000000000000000161141475375552500223260ustar00rootroot00000000000000II* PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP[ E,@4<D(R/home/heron/Development/gnustep/dev-apps/gorm/Images/GormMVLine.tiffHHapps-gorm-gorm-1_5_0/GormCore/Images/GormMenu.tiff000066400000000000000000000225341475375552500221030ustar00rootroot00000000000000II*$)))8VWVLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLEGEcdcLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMNMded >>> qqqBBB???777:9:QPQ777>>>ooo???wwwIII555---GFG%%%222GGG sss|||UUUlll>>>ihiMLMrsrnon"""### #$#FFF ^_^yyyeeeutuusujij{y{eee{y{eeeVWVmmmhhhvtv}|}eeeyxytqtbabjijonoxvxZXZgeg|z|a`aeee`a`^^^xxxeeeonohghzyzeee{y{tsteeeUVUklk|{|]^]xxxeee}|}tsteeezxz{z{eee~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~TUT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~jjjjjj~wuwxvx~}~eeecacigiqpqzxzZYZmlmwuwjhjUSUusuvuveee~~~abaTTTZ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z XXX{y{dcdvuv~wuw}{}XXXrpr~|{|}tstXXX}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}FFF_^_XXXonosqs^]^kikhfh}wvwXXXUUUOOOXXXxwxxvx}|}XXXjijzyzutuvuvXXXbabZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZKKK010ded00$ G$6%@$L%T%(R/home/heron/Development/gnustep/dev-apps/Gorm/Images/GormMenuDrag.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/Images/GormObject.tiff000066400000000000000000000223021475375552500223760ustar00rootroot00000000000000II*$\Un1BA@?>=<;:5*{^Yn3DA=5110//.--2562{'s`YnAB>3+'#"#""""! "$*/22s$lb[nCD;-&$$####"""!!! !#(-.l!d6G&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`+ (nc\nF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ldZUD=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ( $nc\nE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcSM6A%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQN GnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\V=9b[nD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[KF6@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwLq[io5|LG73G5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPwPwPw;rW7zJE61F4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mS<)yHC4 0E2$$$$##mx`PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwBb}R,xPJ3 0E/$$$###mw^PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?1 .D/$$####dFld”PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=0 -C.$####" `Yi͜PwPwPwPwPwPwPwPwPwPwPwPwPwPw.YDB+t@;. +C0####""!vmPwPwPwPwPwPwPwPwPwPwPwPwPw+T@> }s>9B2####""!{PwPwPwPwPwPwPwPwPwPwPwPw=v[K>~|r<817###"""!fClPwPwPwPwPwPwPw2aJD6~~}ne:6; 6f _;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=HC/4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62: 5a[9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51-)?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8GA^X7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /-)?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .-)?)|3% #)+48)}F<4., ~}|{tQK2 /f^+ (?5.! xo8~}|yg^8 4& # * '?3+ rj3}|yja<8SM0" ( %?1*!nf1~}wjb?;TN-)xEB>$& $?/+"ja/~~sTN=8UO-)TPUC3% #?-*!e],|{pSM;7* 'c_YUNB4$j!c)$aY*uc[FA:6h_phc\TMC6$" ?c\&z#~]V(zukc[LGB>KE-)c_\WRPPM;  C\Vw$ov"ov~VO'~|yod]RMGCA=MG-)VUQNLIDCD4)-)H95RLjcjckdc\d]KFo g]VZSWQNHHCPJ> 9-)i=<<;;<>5*%"2/1./,- *, )* ') &' %& $? :#########" 00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormOutlet.tiff000066400000000000000000000017121475375552500224460ustar00rootroot00000000000000II*$0006{{{$0006λTTT $ZZZYYY'''0{{{999+++0)))00ggg-GGGDDDHiii㙙___!!!RRRPVVVmmmSSS&&&777 GPPP;;;:::777***555>>> $-0000 0    @(Rgorm_Outlet.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/Images/GormOutletSelected.tiff000066400000000000000000000017721475375552500241250ustar00rootroot00000000000000II*$888'''***...6 ///???NNNLLL<<<444===$6 DDDTTTUUUUUUUUUUUUUUUbbbeee $***666TTTUUUUUUUUUUUUUUUUUUWWWrrr 0+++CCCUUUUUUUUUUUUUUUUUU0&&&OOOUUUUUUUUUUUUUUUUUUggg0555VVVUUUUUUUUUUUUUUUUUUbbb0^^^[[[UUUUUUUUUUUUUUUUUU-mmmjjjUUUUUUUUUUUUUUUUUUUUUXXX,,,HzzzfffVVVUUUUUUUUUUUU\\\yyy999P⒒sss^^^aaayyy888G{{{$-+++000000000...0###0   A@(R/home/heron/gnustep/dev-apps/Gorm/Images/GormOutletSelected.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/Images/GormSound.tiff000066400000000000000000000223021475375552500222600ustar00rootroot00000000000000II*$SX%3"SX%%SX%SX%SX3"""%SX%SX""SXSX%%%SX""%33%SX"SXSX%%%SX3"%3"%SXSX%SXSX%%%SX%%""%SXSX%%%%SX%%SXSX%%SXSX%%SX%%%SX%%%SX%SX%%%%SX%%%%SX%%%%%SX%%%SX%%%""""%%%%%%%SX%%SX%SX%SX%%SX%%%%%%%%%%%%%%SXSXSXSXSX%%SX%%SX%%%SX%%SX%%SX%SX%SXSXSXSXSXSXSXSXSXSX%%%%%%SXSX%%SX%%SX%SX%%%%%%%SX%%SXSX%%%%%%%SX%%%SX%%%%%SXSX%%%SXSX%%SXSX% 00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormUnknown.tiff000066400000000000000000000223021475375552500226270ustar00rootroot00000000000000II*$\Un1BA@?>=<;:5*{^Yn3DA=5110//.--2562{'s`YnAB>3+'#"#""""! "$*/22s$lb[nCD;-&$$####"""!!! !#(-.l!d6G&}T6%%$$#!_Hiyd•YPwPwPwPwPwPwPwV[dÕtHz ne=V.f`+ (nc\nF/$${q=Y6$#ldgoإPwPwPwPwPwPwPwPwPwPwPwPwPw\g$~ x&}T.ldZUD=%%%$zpTGfIozZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwR{YsAwTC|aZ( $nc\nE-%%%$$$&}'}yPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwT}I jcSM6A%%%%$$#.!nZPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwU~G{qWQN GnH2%%%$$$$#zXn֤PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwOvtc&~\V=9b[nD-%%$$$$!kcwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwFh1!b[KF6@'%$$$$#a{{cPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwImy[.ofNHG7%$$$$$#zeYPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwLq[io5|LG73G5$$$$$$"vmsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw;rW7zJE61F4$$$$## UOqݩPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mS<)yHC4 0E2$$$$##mx`PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwBb}R,xPJ3 0E/$$$###mw^PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwA~`~P,wD?1 .D/$$####dFld”PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw8mSH,uB=0 -C.$####" `Yi͜PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw.YDB+t@;. +C0####""!vmfǘPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw+T@> }s>9B2####""!{\mqYPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw=v[K>~|r<817###"""!fCl[PwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw2aJD6~~}ne:6; 6f _;'#"""!! {^~RzPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwEgTJ^=%}}z\T95?.""""!!!xpWPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw&J8F/~}||rB=HC/4"""!!!!jBoPxPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw/\GF8~}|{lc62: 5a[9&"!!!! "Z|tMsPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPw:pVMAV>!~}|{xUN51-)?<."!!! %h\vIlMrPwPwPwPwPwPwPwPwPwPwPwPwPwEg/[E}C~>,~}|{zvl<8GA^X7%!! &~BVklGjPwPwPwPwPwPwPwPwPwPwPw:qWRF[F?)}|{zxPJ3 /-)?:,!! #,nUx;rW>z]BcAaPwPwPw=w[)~|{zzpMG1 .-)?)|3% #)+48)}F<4., ~}|{tQK2 /f^+ (?5.! xo8~}|yg^8 4& # * '?3+ rj3}|yja<8SM0" ( %?1*!nf1~}wjb?;TN-)xEB>$& $?/+"ja/~~sTN=8UO-)TPUC3% #?-*!e],|{pSM;7* 'c_YUNB4$j!c)$aY*uc[FA:6h_phc\TMC6$" ?c\&z#~]V(zukc[LGB>KE-)c_\WRPPM;  C\Vw$ov"ov~VO'~|yod]RMGCA=MG-)VUQNLIDCD4)-)H95RLjcjckdc\d]KFo g]VZSWQNHHCPJ> 9-)i=<<;;<>5*%"2/1./,- *, )* ') &' %& $? :#########" 00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/GormView.tiff000066400000000000000000000226041475375552500221070ustar00rootroot00000000000000II*$vbvbvbvbvbvbvbvbvbvbvbvbvbvbvb999rrrUUU999UUUUUUUUUUUUUUUUUUUUUrrrUUUUUUrrr999UUUUUUUUUrrrUUUUUUUUU999999UUUUUU999999UUUrrr999UUUUUUUUUUUUUUU999rrrUUUUUUrrr999UUUUUU00$ C$B2%@$t%|%(R/home/heron/Development/gnustep/dev-apps/Gorm/Images/GormView.tiffCreated By Gregory Casamento released under the terms of the GPL.HHapps-gorm-gorm-1_5_0/GormCore/Images/GormWindow.tiff000066400000000000000000000223021475375552500224370ustar00rootroot00000000000000II*$O?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????+++???+++O???UUUUUU888888++++++UUU+++O???UUU+++UUUUUUUUUUUUUUUqqqUUUqqqUUUUUUUUUUUU+++O???UUUUUUqqqUUU888UUUUUUqqqqqq++++++UUU+++O???UUUUUUUUUUUU888UUUUUUUUUUUU+++O???+++O++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 00$$$$(R ' 'apps-gorm-gorm-1_5_0/GormCore/Images/browserView.tiff000066400000000000000000000051321475375552500226630ustar00rootroot00000000000000II*   F 4 @ J R (R/home/heron/Development/gnustep/dev-apps/gorm/Images/browserView.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/Images/editor.tiff000066400000000000000000000067321475375552500216420ustar00rootroot00000000000000MM* P8$ BaPd6DbQ8V-FcQv(c8"I$*K%9;*L&9I=P )rDNzPATz&ORSibKZ*RC"Vi\j& =?`խh s^{d#m$/drY (=RSs H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmapps-gorm-gorm-1_5_0/GormCore/Images/iconView.tiff000066400000000000000000000070241475375552500221320ustar00rootroot00000000000000MM* P8$ BaPd6DbQ8k)D0 7FcV%$ILfQ'L R9\=D39oTN$44"kWlV'rp.Vˮ,xFc^qX='زWL9dڱvmh[MPr8 cUom.} o\>'  (=RSćs H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmapps-gorm-gorm-1_5_0/GormCore/Images/outlineView.tiff000066400000000000000000000051321475375552500226570ustar00rootroot00000000000000II*   F 4 @ J R (R/home/heron/Development/gnustep/dev-apps/gorm/Images/outlineView.tiffCreated with The GIMPHHapps-gorm-gorm-1_5_0/GormCore/NSCell+GormAdditions.h000066400000000000000000000025351475375552500223220ustar00rootroot00000000000000/* NSCell+GormAdditions.h * * Copyright (C) 1999, 2003, 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2003, 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_NSCellGormAdditions_h #define INCLUDED_NSCellGormAdditions_h #include @class NSText; @interface NSCell (GormAdditions) /** * This methods is comes directly from NSCell.m * The only additions is [textObject setUsesFontPanel: NO] * We do this because we want to have control over the font * panel changes. */ - (NSText *)setUpFieldEditorAttributes:(NSText *)textObject; @end #endif apps-gorm-gorm-1_5_0/GormCore/NSCell+GormAdditions.m000066400000000000000000000043371475375552500223310ustar00rootroot00000000000000/* NSCell+GormAdditions.h * * Copyright (C) 1999, 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "NSCell+GormAdditions.h" @implementation NSCell (GormAdditions) // This is category-smashing... #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wobjc-protocol-method-implementation" /* * this methods is directly coming from NSCell.m * The only additions is [textObject setUsesFontPanel: NO] * We do this because we want to have control over the font panel changes */ - (NSText *)setUpFieldEditorAttributes:(NSText *)textObject { [textObject setUsesFontPanel: NO]; [textObject setTextColor: [self textColor]]; if (_cell.contents_is_attributed_string == NO) { /* TODO: Manage scrollable attribute */ [textObject setFont: _font]; [textObject setAlignment: _cell.text_align]; } else { /* TODO: What do we do if we are an attributed string. Think about what happens when the user ends editing. Allows editing text attributes... Formatter. */ } [textObject setEditable: _cell.is_editable]; [textObject setSelectable: _cell.is_selectable || _cell.is_editable]; [textObject setRichText: _cell.is_rich_text]; [textObject setImportsGraphics: _cell.imports_graphics]; [textObject setSelectedRange: NSMakeRange(0, 0)]; return textObject; } #pragma GCC diagnostic pop @end apps-gorm-gorm-1_5_0/GormCore/NSColorWell+GormExtensions.h000066400000000000000000000023211475375552500235570ustar00rootroot00000000000000/* NSColor+GormExtensions.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_NSColorWell_GormExtensions_h #define INCLUDED_NSColorWell_GormExtensions_h #include @interface NSColorWell (GormExtensions) /** * Changes the color without sending the action associated with it. */ - (void) setColorWithoutAction: (NSColor *)color; @end #endif apps-gorm-gorm-1_5_0/GormCore/NSColorWell+GormExtensions.m000066400000000000000000000025521475375552500235720ustar00rootroot00000000000000/* NSColor+GormExtensions.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "NSColorWell+GormExtensions.h" @implementation NSColorWell (GormExtensions) /** * Changes the color without sending the action associated with it. */ - (void) setColorWithoutAction: (NSColor *)color { ASSIGN(_the_color, color); if ([self isActive]) { NSColorPanel *colorPanel = [NSColorPanel sharedColorPanel]; [colorPanel setColor: _the_color]; } [self setNeedsDisplay: YES]; } @end apps-gorm-gorm-1_5_0/GormCore/NSFontManager+GormExtensions.h000066400000000000000000000025421475375552500240630ustar00rootroot00000000000000/* NSFontManager+GormExtensions.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_NSFontManager_GormExtensions_h #define INCLUDED_NSFontManager_GormExtensions_h #include @interface NSFontManager (GormExtensions) /** * Override for sendAction in NSFontManager. This method calls the action on the * last edited object if the attempt to send the action to the first responder is * unsuccessful. This allows the font to be more easily set. */ - (BOOL) sendAction; @end #endif apps-gorm-gorm-1_5_0/GormCore/NSFontManager+GormExtensions.m000066400000000000000000000045161475375552500240730ustar00rootroot00000000000000/* NSFontManager+GormExtensions.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "NSFontManager+GormExtensions.h" #include "GormDocument.h" @interface GormDocument (FontManagerMethod) - (id) lastEditor; @end @implementation GormDocument (FontManagerMethod) /** * Get the last editor selected by the document. */ - (id) lastEditor { return lastEditor; } @end @implementation NSFontManager (GormExtensions) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wobjc-protocol-method-implementation" /** * Override for sendAction in NSFontManager. This method calls the action on the * last edited object if the attempt to send the action to the first responder is * unsuccessful. This allows the font to be more easily set. */ - (BOOL) sendAction { NSApplication *theApp = [NSApplication sharedApplication]; BOOL result = NO; if (_action) result = [theApp sendAction: _action to: nil from: self]; if(result == NO) { id object = [(GormDocument *)[(id)[NSApp delegate] activeDocument] lastEditor]; NS_DURING { if(object != nil) { if([object respondsToSelector: _action]) { [object performSelector: _action withObject: self]; result = YES; } } } NS_HANDLER { NSDebugLog(@"Couldn't set font on %@: %@", object, [localException reason]); result = NO; // just to be sure. } NS_ENDHANDLER } return result; } #pragma GCC diagnostic pop @end apps-gorm-gorm-1_5_0/GormCore/NSView+GormExtensions.h000066400000000000000000000033001475375552500225650ustar00rootroot00000000000000/* NSView+GormExtensions.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_NSView_GormExtensions_h #define INCLUDED_NSView_GormExtensions_h #include @class NSArray; @interface NSView (GormExtensions) /** * All superviews of the receiver. */ - (NSArray *) superviews; /** * Returns YES if the receiver has an instance of the Class cls * as a superview. */ - (BOOL) hasSuperviewKindOfClass: (Class)cls; /** * Move the subview sv in reciever to the end of the reciever's * display list. This has the effect of making it appear in front * of the other views. */ - (void) moveViewToFront: (NSView *)sv; /** * Move the subview sv in reciever to the beginning of the reciever's * display list. This has the effect of making it appear in back * of the other views. */ - (void) moveViewToBack: (NSView *)sv; @end #endif apps-gorm-gorm-1_5_0/GormCore/NSView+GormExtensions.m000066400000000000000000000115601475375552500226010ustar00rootroot00000000000000/* NSView+GormExtensions.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "NSView+GormExtensions.h" static Ivar subviews_ivar(void) { static Ivar iv; if (iv == NULL) { iv = class_getInstanceVariable([NSView class], "_sub_views"); NSCAssert(iv, @"Unable to get NSView's _sub_views instance variable"); } return iv; } @implementation NSView (GormExtensions) /** * All superviews of this view */ - (NSArray *) superviews { NSMutableArray *result = [NSMutableArray array]; NSView *currentView = nil; for(currentView = self; currentView != nil; currentView = [currentView superview]) { [result addObject: currentView]; } return result; } /** * Checks for a superview of a give class. */ - (BOOL) hasSuperviewKindOfClass: (Class)cls { NSEnumerator *en = [[self superviews] objectEnumerator]; NSView *v = nil; BOOL result = NO; while(((v = [en nextObject]) != nil) && result == NO) { result = [v isKindOfClass: cls]; } return result; } /** * Moves the specified subview to the end of the list, so it's displayed * in front of the other views. */ - (void) moveViewToFront: (NSView *)sv { NSDebugLog(@"move to front %@", sv); NSMutableArray *sub_views = object_getIvar(self, subviews_ivar()); if([sub_views containsObject: sv]) { RETAIN(sv); // make sure it doesn't deallocate the view. [sub_views removeObject: sv]; [sub_views addObject: sv]; // add it to the end. RELEASE(sv); } } /** * Moves the specified subview to the beginning of the list, so it's * displayed behind all of the other views. */ - (void) moveViewToBack: (NSView *)sv { NSDebugLog(@"move to back %@", sv); NSMutableArray *sub_views = object_getIvar(self, subviews_ivar()); if([sub_views containsObject: sv]) { RETAIN(sv); // make sure it doesn't deallocate the view. [sub_views removeObject: sv]; if([sub_views count] > 0) { [sub_views insertObject: sv atIndex: 0]; // add it to the end. } else { [sub_views addObject: sv]; } RELEASE(sv); } } @end /** * Registry of delegates. This allows the implementation of the protocol * to select from the list of delegates to determine which one should be called. */ static NSMutableArray *_registeredViewResourceDraggingDelegates = nil; /** * IBViewResourceDraggingDelegates implementation. These methods * make it possible to declare types in palettes and dynamically select the * appropriate delegate to handle the addition of an object to the document. */ @implementation NSView (IBViewResourceDraggingDelegates) /** * Types accepted by the view. */ + (NSArray *) acceptedViewResourcePasteboardTypes { NSMutableArray *result = nil; if([_registeredViewResourceDraggingDelegates count] > 0) { NSEnumerator *en = [_registeredViewResourceDraggingDelegates objectEnumerator]; id delegate = nil; result = [NSMutableArray array]; while((delegate = [en nextObject]) != nil) { if([delegate respondsToSelector: @selector(viewResourcePasteboardTypes)]) { [result addObjectsFromArray: [delegate viewResourcePasteboardTypes]]; } } } return result; } /** * Return the list of registered delegates. */ + (NSArray *) registeredViewResourceDraggingDelegates { return _registeredViewResourceDraggingDelegates; } /** * Register a delegate. */ + (void) registerViewResourceDraggingDelegate: (id)delegate { if(_registeredViewResourceDraggingDelegates == nil) { _registeredViewResourceDraggingDelegates = [[NSMutableArray alloc] init]; } [_registeredViewResourceDraggingDelegates addObject: delegate]; } /** * Remove a previously registered delegate. */ + (void) unregisterViewResourceDraggingDelegate: (id)delegate { if(_registeredViewResourceDraggingDelegates != nil) { [_registeredViewResourceDraggingDelegates removeObject: delegate]; } } @end apps-gorm-gorm-1_5_0/GormCore/README.md000066400000000000000000000006131475375552500175440ustar00rootroot00000000000000# GormCore framework This framework is the heart of the Gorm application. It contains all of the classes needed to interact with a Gorm file. The Gorm application uses it, obviously, and it is also used by gormtool to provide access to certain features from the command line. This framework allows Gorm features to be used in other applications either directly or through the use of Plugins. apps-gorm-gorm-1_5_0/GormCore/Resources/000077500000000000000000000000001475375552500202375ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormCore/Resources/ClassInformation.plist000066400000000000000000000323461475375552500245770ustar00rootroot00000000000000{ FirstResponder = { Actions = ( "activateContextHelpMode:", "alignCenter:", "alignJustified:", "alignLeft:", "alignRight:", "arrangeInFront:", "cancel:", "capitalizeWord:", "centerSelectionInVisibleArea:", "changeColor:", "changeFont:", "checkSpelling:", "clearRecentDocuments:", "close:", "complete:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "deleteBackward:", "deleteForward:", "deleteToBeginningOfLine:", "deleteToBeginningOfParagraph:", "deleteToEndOfLine:", "deleteToEndOfParagraph:", "deleteToMark:", "deleteWordBackward:", "deleteWordForward:", "deminiaturize:", "deselectAll:", "fax:", "hide:", "hideOtherApplications:", "indent:", "loosenKerning:", "lowerBaseline:", "lowercaseWord:", "makeKeyAndOrderFront:", "miniaturize:", "miniaturizeAll:", "moveBackward:", "moveBackwardAndModifySelection:", "moveDown:", "moveDownAndModifySelection:", "moveForward:", "moveForwardAndModifySelection:", "moveLeft:", "moveRight:", "moveToBeginningOfDocument:", "moveToBeginningOfLine:", "moveToBeginningOfParagraph:", "moveToEndOfDocument:", "moveToEndOfLine:", "moveToEndOfParagraph:", "moveUp:", "moveUpAndModifySelection:", "moveWordBackward:", "moveWordBackwardAndModifySelection:", "moveWordForward:", "moveWordForwardAndModifySelection:", "newDocument:", "ok:", "open:", "openDocument:", "orderBack:", "orderFront:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "orderOut:", "pageDown:", "pageUp:", "paste:", "pasteAsPlainText:", "pasteAsRichText:", "pasteFont:", "pasteRuler:", "performClose:", "performFindPanelAction:", "performMiniaturize:", "performZoom:", "print:", "printDocument:", "raiseBaseline:", "redo:", "revertDocumentToSaved:", "runPageLayout:", "runToolbarCustomizationPalette:", "saveAllDocuments:", "saveDocument:", "saveDocumentAs:", "saveDocumentTo:", "scrollLineDown:", "scrollLineUp:", "scrollPageDown:", "scrollPageUp:", "scrollViaScroller:", "selectAll:", "selectLine:", "selectNextKeyView:", "selectParagraph:", "selectPreviousKeyView:", "selectText:", "selectToMark:", "selectWord:", "showContextHelp:", "showGuessPanel:", "showHelp:", "showWindow:", "stop:", "subscript:", "superscript:", "swapWithMark:", "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:", "terminate:", "tightenKerning:", "toggle:", "toggleContinuousSpellChecking:", "toggleRuler:", "toggleToolbarShown:", "toggleTraditionalCharacterShape:", "transpose:", "transposeWords:", "turnOffKerning:", "turnOffLigatures:", "underline:", "undo:", "unhide:", "unhideAllApplications:", "unscript:", "uppercaseWord:", "useAllLigatures:", "useStandardKerning:", "useStandardLigatures:", "yank:", "zoom:" ); Super = NSObject; }; IBInspector = { Actions = ("ok:", "revert:", "touch:"); Outlets = (window, okButton, revertButton); Super = NSObject; }; IBPalette = {Actions = (); Outlets = (originalWindow); Super = NSObject; }; NSActionCell = {Super = NSCell; }; NSApplication = { Actions = ( "arrangeInFront:", "hide:", "hideOtherApplications:", "miniaturizeAll:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "runPageLayout:", "stop:", "terminate:", "unhide:", "unhideAllApplications:" ); Outlets = (delegate); Super = NSResponder; }; NSArray = {Super = NSObject; }; NSBox = {Super = NSView; }; NSBrowser = { Actions = ("doClick:", "doDoubleClick:", "selectAll:"); Outlets = (delegate); Super = NSControl; }; NSBrowserCell = {Super = NSCell; }; NSButton = {Actions = ("performClick:"); Super = NSControl; }; NSButtonCell = {Actions = ("performClick:"); Super = NSActionCell; }; NSCStringText = {Actions = ("clear:", "selectText:"); Super = NSText; }; NSCell = { Actions = ( "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeStringValueFrom:" ); Super = NSObject; }; NSColorWell = {Actions = ("takeColorFrom:"); Super = NSControl; }; NSComboBox = {Outlets = (dataSource); Super = NSTextField; }; NSControl = { Actions = ( "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:" ); Outlets = (target); Super = NSView; }; NSCursor = {Super = NSObject; }; NSDateFormatter = {Super = NSFormatter; }; NSDictionary = {Super = NSObject; }; NSDocument = { Actions = ( "printDocument:", "revertDocumentToSaved:", "runPageLayout:", "saveDocument:", "saveDocumentAs:", "saveDocumentTo:" ); Outlets = ("_window"); Super = NSObject; }; NSDocumentController = { Actions = ("clearRecentDocuments:", "newDocument:", "openDocument:", "saveAllDocuments:"); Super = NSObject; }; NSDrawer = { Actions = ("close:", "open:", "toggle:"); Outlets = (delegate, contentView, parentWindow); Super = NSResponder; }; NSFontManager = { Actions = ( "addFontTrait:", "modifyFont:", "modifyFontViaPanel:", "orderFrontFontPanel:", "removeFontTrait:" ); Outlets = (menu); Super = NSObject; }; NSForm = {Super = NSMatrix; }; NSFormCell = {Super = NSActionCell; }; NSFormatter = {Super = NSObject; }; NSHelpManager = {Actions = ("activateContextHelpMode:", "showHelp:"); Super = NSObject; }; NSImage = {Super = NSObject; }; NSImageCell = {Super = NSCell; }; NSImageView = {Super = NSControl; }; NSMatrix = { Actions = ("selectAll:", "selectText:"); Outlets = (delegate); Super = NSControl; }; NSMenu = {Actions = ("submenuAction:"); Super = NSObject; }; NSMenuItem = {Outlets = (target); Super = NSObject; }; NSMenuItemCell = {Super = NSButtonCell; }; NSMutableArray = {Super = NSArray; }; NSMutableDictionary = {Super = NSDictionary; }; NSNumberFormatter = {Super = NSFormatter; }; NSObject = {}; NSOpenGLView = {Super = NSView; }; NSOutlineView = {Super = NSTableView; }; NSPanel = {Super = NSWindow; }; NSPopUpButton = {Super = NSButton; }; NSPopUpButtonCell = {Super = NSMenuItemCell; }; NSProgressIndicator = {Actions = ("animate:", "startAnimation:", "stopAnimation:"); Super = NSView; }; NSResponder = {Outlets = (menu); Super = NSObject; }; NSRulerView = {Super = NSView; }; NSScrollView = {Super = NSView; }; NSScroller = {Super = NSControl; }; NSSearchField = {Super = NSTextField; }; NSSearchFieldCell = {Super = NSTextFieldCell; }; NSSecureTextField = {Super = NSTextField; }; NSSecureTextFieldCell = {Super = NSTextFieldCell; }; NSSlider = {Super = NSControl; }; NSSliderCell = {Super = NSActionCell; }; NSSplitView = { Outlets = (delegate); Super = NSView; }; NSStepper = {Super = NSControl; }; NSStepperCell = {Super = NSActionCell; }; NSTabView = { Actions = ( "selectFirstTabViewItem:", "selectLastTabViewItem:", "selectNextTabViewItem:", "selectPreviousTabViewItem:", "takeSelectedTabViewItemFromSender:" ); Outlets = (delegate); Super = NSView; }; NSTableColumn = {Super = NSObject; }; NSTableHeaderCell = {Super = NSTextFieldCell; }; NSTableHeaderView = {Super = NSView; }; NSTableView = { Actions = ("deselectAll:", "selectAll:"); Outlets = (dataSource, delegate); Super = NSControl; }; NSText = { Actions = ( "alignCenter:", "alignLeft:", "alignRight:", "changeFont:", "changeSpelling:", "checkSpelling:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "ignoreSpelling:", "paste:", "pasteFont:", "pasteRuler:", "selectAll:", "showGuessPanel:", "subscript:", "superscript:", "toggleRuler:", "underline:", "unscript:" ); Outlets = (delegate); Super = NSView; }; NSTextField = {Actions = ("selectText:"); Outlets = (delegate); Super = NSControl; }; NSTextFieldCell = {Super = NSActionCell; }; NSTextView = { Actions = ( "alignJustified:", "changeColor:", "deleteBackwards:", "insertBacktab:", "insertNewLine:", "insertParagraphSeparator:", "insertTab:", "loosenKerning:", "lowerBaseline:", "moveBackward:", "moveDown:", "moveForward:", "moveLeft:", "moveRight:", "moveUp:", "pasteAsPlainText:", "pasteAsRichText:", "raiseBaseline:", "tightenKerning:", "toggleContinuousSpellChecking:", "toggleTraditionalCharacterShape:", "turnOffKerning:", "turnOffLigatures:", "useAllLigatures:", "useDefaultBaseline:", "useDefaultKerning:", "useDefaultLigatures:", "useStandardBaseline:", "useStandardKerning:", "useStandardLigatures:" ); Super = NSText; }; NSView = {Actions = ("fax:", "print:"); Outlets = (nextKeyView); Super = NSResponder; }; NSViewController = { Actions = (); Outlets = (view); Super = NSResponder; }; NSWindow = { Actions = ( "deminiaturize:", "fax:", "makeKeyAndOrderFront:", "miniaturize:", "orderBack:", "orderFront:", "orderOut:", "performClose:", "performMiniaturize:", "performZoom:", "print:", "runToolbarCustomizationPalette:", "selectNextKeyView:", "selectPreviousKeyView:", "toggleToolbarShown:", "zoom:" ); Outlets = (delegate, initialFirstResponder, windowController); Super = NSResponder; }; NSWindowController = { Actions = ("showWindow:"); Outlets = (document, window); Super = NSResponder; }; NSController = { Actions = (); Outlets = (); Super = NSObject; }; NSObjectController = { Actions = (); Outlets = (content); Super = NSController; }; NSArrayController = { Actions = ("selectNext:","selectPrevious:","insert:"); Outlets = (arrangedObjects); Super = NSObjectController; }; NSDictionaryController = { Actions = (); Outlets = (); Super = NSArrayController; }; } apps-gorm-gorm-1_5_0/GormCore/Resources/VersionProfiles.plist000066400000000000000000000041701475375552500244470ustar00rootroot00000000000000{ "GNUstep gui-0.9.3" = { GSNibContainer = { comment = "Will not properly store any non-UI objects which have been dragged into the objects view."; version = 0; }; NSTextFieldCell = { comment = "Will store the old default settings in the action mask field."; version = 1; }; GSWindowTemplate = { comment = "Will not store autoposition mask information."; version = 0; }; NSButtonCell = { comment = "NSEvent masks are not compatible with Mac OS X."; version = 0; }; }; "GNUstep gui-0.9.5" = { GSNibContainer = { comment = "Not compatible with GNUstep gui-0.9.3 or earlier."; version = 1; }; NSTextFieldCell = { comment = "Change the default behavior defined in the action mask, this will not be useable under older versions."; version = 2; }; GSWindowTemplate = { comment = "Will not store autoposition mask information."; version = 0; }; NSButtonCell = { comment = "NSEvent masks are not compatible with Mac OS X."; version = 1; }; }; "GNUstep gui-0.10.3" = { GSNibContainer = { comment = "Not compatible with GNUstep gui-0.9.5 or earlier."; version = 1; }; NSTextFieldCell = { comment = "Change the default behavior defined in the action mask, this will not be useable under older versions."; version = 2; }; GSWindowTemplate = { comment = "New attribute to store auto-position mask. Not compatible with 0.9.5 or earlier."; version = 1; }; NSButtonCell = { comment = "NSEvent masks are not compatible with Mac OS X."; version = 2; }; }; "Latest Version" = { GSNibContainer = { comment = "Not compatible with GNUstep gui-0.10.3 or earlier."; version = 2; }; NSTextFieldCell = { comment = "Change the default behavior defined in the action mask, this will not be useable under older versions."; version = 2; }; GSWindowTemplate = { comment = "New attribute to store auto-position mask. Not compatible with 0.9.5 or earlier."; version = 1; }; NSButtonCell = { comment = "Not compatible with GNUstep gui-0.10.3 or earlier."; version = 3; }; }; }apps-gorm-gorm-1_5_0/GormObjCHeaderParser/000077500000000000000000000000001475375552500205005ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormObjCHeaderParser/GNUmakefile000066400000000000000000000020751475375552500225560ustar00rootroot00000000000000# # GNUmakefile # Written by Gregory John Casamento # PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # SUBPROJECTS = \ Tests # # Library # LIBRARY_VAR=GMOBJCHEADERPARSER LIBRARY_NAME=GormObjCHeaderParser GormObjCHeaderParser_HEADER_FILES_DIR=. ADDITIONAL_INCLUDE_DIRS = -I.. # # Additional libraries # GormObjCHeaderParser_LIBRARIES_DEPEND_UPON += -lgnustep-gui -l$(FOUNDATION_LIBRARY_NAME) # # Header files # GormObjCHeaderParser_HEADER_FILES= \ GormObjCHeaderParser.h \ NSScanner+OCHeaderParser.h \ OCClass.h \ OCHeaderParser.h \ OCIVar.h \ OCIVarDecl.h \ OCMethod.h \ OCProperty.h \ ParserFunctions.h # # Class files # GormObjCHeaderParser_OBJC_FILES= \ NSScanner+OCHeaderParser.m \ OCClass.m \ OCHeaderParser.m \ OCIVar.m \ OCIVarDecl.m \ OCMethod.m \ OCProperty.m \ ParserFunctions.m # # C files # GormObjCHeaderParser_C_FILES= HEADERS_INSTALL = $(GormObjCHeaderParser_HEADER_FILES) -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/library.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/GormObjCHeaderParser/GormObjCHeaderParser.h000066400000000000000000000031771475375552500246110ustar00rootroot00000000000000/* GormObjCHeaderParser.h * * Copyright (C) 2019 Free Software Foundation, Inc. * * Author: Lars Sonchocky-Helldorf * Date: 01.11.19 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #ifndef GNUSTEP //! Project version number for GormObjCHeaderParser. FOUNDATION_EXPORT double GormObjCHeaderParserVersionNumber; //! Project version string for GormObjCHeaderParser. FOUNDATION_EXPORT const unsigned char GormObjCHeaderParserVersionString[]; #endif #ifndef INCLUDED_GORMOBJCHEADERPARSER_H #define INCLUDED_GORMOBJCHEADERPARSER_H #include #include #include #include #include #include #include #include #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/NSScanner+OCHeaderParser.h000066400000000000000000000025411475375552500252700ustar00rootroot00000000000000/* NSScanner+OCHeaderParser.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #ifndef INCLUDED_NSScanner_OCHeaderParser_h #define INCLUDED_NSScanner_OCHeaderParser_h @class NSString, NSCharacterSet; @interface NSScanner (OCHeaderParser) - (void) scanUpToAndIncludingString: (NSString *)string intoString: (NSString **)buffer; - (void) scanUpToAndIncludingCharactersFromSet: (NSCharacterSet *)set intoString: (NSString **)buffer; @end #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/NSScanner+OCHeaderParser.m000066400000000000000000000033771475375552500253050ustar00rootroot00000000000000/* NSScanner+OCHeaderParser.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include @implementation NSScanner (OCHeaderParser) - (void) scanUpToAndIncludingString: (NSString *)string intoString: (NSString **)buffer { NSString *buffer2 = nil; [self scanUpToString: string intoString: buffer]; [self scanString: string intoString: &buffer2]; if(buffer != NULL) { if(*buffer != NULL) { *buffer = [*buffer stringByAppendingString: buffer2]; } } } - (void) scanUpToAndIncludingCharactersFromSet: (NSCharacterSet *)set intoString: (NSString **)buffer { NSString *buffer2 = nil; [self scanUpToCharactersFromSet: set intoString: buffer]; [self scanCharactersFromSet: set intoString: &buffer2]; if(buffer != NULL) { if(*buffer != NULL) { *buffer = [*buffer stringByAppendingString: buffer2]; } } } @end apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCClass.h000066400000000000000000000034351475375552500221450ustar00rootroot00000000000000/* OCHeaderParser.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #ifndef INCLUDED_OCClass_h #define INCLUDED_OCClass_h @class NSMutableArray, NSString; @interface OCClass : NSObject { NSMutableArray *_ivars; NSMutableArray *_methods; NSMutableArray *_protocols; NSMutableArray *_properties; NSString *_className; NSString *_superClassName; NSString *_classString; BOOL _isCategory; } - (id) initWithString: (NSString *)string; - (NSArray *) methods; - (void) addMethod: (NSString *)name isAction: (BOOL)flag; - (NSArray *) ivars; - (void) addIVar: (NSString *)name isOutlet: (BOOL)flag; - (NSString *) className; - (void) setClassName: (NSString *)name; - (NSString *) superClassName; - (void) setSuperClassName: (NSString *)name; - (BOOL) isCategory; - (void) setIsCategory: (BOOL)flag; - (NSArray *) properties; - (void) parse; @end #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCClass.m000066400000000000000000000200611475375552500221440ustar00rootroot00000000000000/* OCClass.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include "GormObjCHeaderParser/OCClass.h" #include "GormObjCHeaderParser/OCMethod.h" #include "GormObjCHeaderParser/OCProperty.h" #include "GormObjCHeaderParser/OCIVar.h" #include "GormObjCHeaderParser/OCIVarDecl.h" #include "GormObjCHeaderParser/NSScanner+OCHeaderParser.h" #include "GormObjCHeaderParser/ParserFunctions.h" @implementation OCClass - (id) initWithString: (NSString *)string { if ((self = [super init]) != nil) { _methods = [[NSMutableArray alloc] init]; _ivars = [[NSMutableArray alloc] init]; _properties = [[NSMutableArray alloc] init]; _protocols = [[NSMutableArray alloc] init]; _superClassName = nil; ASSIGN(_classString, string); } return self; } - (void) dealloc { RELEASE(_methods); RELEASE(_ivars); RELEASE(_properties); RELEASE(_protocols); RELEASE(_classString); RELEASE(_className); RELEASE(_superClassName); [super dealloc]; } - (NSArray *) methods { return _methods; } - (void) addMethod: (NSString *)name isAction: (BOOL) flag { OCMethod *method = AUTORELEASE([[OCMethod alloc] init]); [method setName: name]; [method setIsAction: flag]; [_methods addObject: method]; } - (NSArray *) ivars { return _ivars; } - (void) addIVar: (NSString *)name isOutlet: (BOOL) flag { OCIVar *ivar = AUTORELEASE([[OCIVar alloc] init]); [ivar setName: name]; [ivar setIsOutlet: flag]; [_ivars addObject: ivar]; } - (NSString *) className { return _className; } - (void) setClassName: (NSString *)name { ASSIGN(_className, name); } - (NSString *) superClassName { return _superClassName; } - (void) setSuperClassName: (NSString *)name { ASSIGN(_superClassName,name); } - (BOOL) isCategory { return _isCategory; } - (void) setIsCategory: (BOOL)flag { _isCategory = flag; } - (NSArray *) properties { return _properties; } - (void) _strip { NSScanner *stripScanner = [NSScanner scannerWithString: _classString]; NSString *resultString = @""; NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; while(![stripScanner isAtEnd]) { NSString *string = nil; [stripScanner scanUpToCharactersFromSet: wsnl intoString: &string]; resultString = [resultString stringByAppendingString: string]; if (![stripScanner isAtEnd]) { resultString = [resultString stringByAppendingString: @" "]; } } ASSIGN(_classString, resultString); } - (void) parse { NSScanner *scanner = nil; NSScanner *iscan = nil; NSString *interfaceLine = nil; NSString *methodsString = nil; NSString *ivarsString = nil; NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSCharacterSet *pmcs = [NSCharacterSet characterSetWithCharactersInString: @"+-"]; // get the interface line... look ahead... [self _strip]; NSDebugLog(@"_classString = %@", _classString); scanner = [NSScanner scannerWithString: _classString]; if (lookAhead(_classString, @"@implementation")) { NSString *cn = nil; [scanner scanUpToAndIncludingString: @"@implementation" intoString: NULL]; [scanner scanUpToCharactersFromSet: wsnl intoString: &cn]; _className = [cn stringByTrimmingCharactersInSet: wsnl]; RETAIN(_className); NSDebugLog(@"_className = %@", _className); } else { if (lookAhead(_classString, @"{")) { [scanner scanUpToString: @"@interface" intoString: NULL]; [scanner scanUpToString: @"{" intoString: &interfaceLine]; iscan = [NSScanner scannerWithString: interfaceLine]; // reset scanner... } else // if there is no "{", then there are no ivars... { [scanner scanUpToString: @"@interface" intoString: NULL]; [scanner scanUpToCharactersFromSet: pmcs intoString: &interfaceLine]; iscan = [NSScanner scannerWithString: interfaceLine]; // reset scanner... } // look ahead... if (lookAhead(interfaceLine, @":")) { NSString *cn = nil, *scn = nil; [iscan scanUpToAndIncludingString: @"@interface" intoString: NULL]; [iscan scanUpToString: @":" intoString: &cn]; _className = [cn stringByTrimmingCharactersInSet: wsnl]; RETAIN(_className); [iscan scanString: @":" intoString: NULL]; [iscan scanUpToCharactersFromSet: wsnl intoString: &scn]; [self setSuperClassName: [scn stringByTrimmingCharactersInSet: wsnl]]; } else // category... { NSString *cn = nil; [iscan scanUpToAndIncludingString: @"@interface" intoString: NULL]; [iscan scanUpToCharactersFromSet: wsnl intoString: &cn]; _className = [cn stringByTrimmingCharactersInSet: wsnl]; RETAIN(_className); // check to see if it's a category on an existing interface... if (lookAhead(interfaceLine,@"(")) { _isCategory = YES; } } if (_isCategory == NO) { NSScanner *ivarScan = nil; // put the ivars into a a string... [scanner scanUpToAndIncludingString: @"{" intoString: NULL]; [scanner scanUpToString: @"}" intoString: &ivarsString]; [scanner scanString: @"}" intoString: NULL]; if (ivarsString != nil) { // scan each ivar... ivarScan = [NSScanner scannerWithString: ivarsString]; while(![ivarScan isAtEnd]) { NSString *ivarLine = nil; OCIVarDecl *ivarDecl = nil; [ivarScan scanUpToString: @";" intoString: &ivarLine]; [ivarScan scanString: @";" intoString: NULL]; ivarDecl = AUTORELEASE([[OCIVarDecl alloc] initWithString: ivarLine]); [ivarDecl parse]; [_ivars addObjectsFromArray: [ivarDecl ivars]]; } } } else { NSString *cn = nil; NSScanner *cs = [NSScanner scannerWithString: _classString]; [cs scanUpToAndIncludingString: @"@interface" intoString: NULL]; [cs scanUpToCharactersFromSet: wsnl intoString: &cn]; _className = [cn stringByTrimmingCharactersInSet: wsnl]; RETAIN(_className); NSDebugLog(@"_className = %@", _className); } // put the methods into a string... if (ivarsString != nil) { [scanner scanUpToString: @"@end" intoString: &methodsString]; } else // { scanner = [NSScanner scannerWithString: _classString]; [scanner scanUpToAndIncludingString: interfaceLine intoString: NULL]; [scanner scanUpToString: @"@end" intoString: &methodsString]; } } if (_classString != nil) { NSScanner *propertiesScan = [NSScanner scannerWithString: _classString]; while ([propertiesScan isAtEnd] == NO) { NSString *propertiesLine = nil; OCProperty *property = nil; [propertiesScan scanUpToString: @";" intoString: &propertiesLine]; [propertiesScan scanString: @";" intoString: NULL]; property = AUTORELEASE([[OCProperty alloc] initWithString: propertiesLine]); [property parse]; [_properties addObject: property]; } } // scan each method... if (methodsString != nil) { NSScanner *methodScan = [NSScanner scannerWithString: methodsString]; while ([methodScan isAtEnd] == NO) { NSString *methodLine = nil; OCMethod *method = nil; [methodScan scanUpToString: @";" intoString: &methodLine]; [methodScan scanString: @";" intoString: NULL]; method = AUTORELEASE([[OCMethod alloc] initWithString: methodLine]); [method parse]; [_methods addObject: method]; } } } @end apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCHeaderParser.h000066400000000000000000000023261475375552500234430ustar00rootroot00000000000000/* OCHeaderParser.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #ifndef INCLUDED_OCHeaderParser_h #define INCLUDED_OCHeaderParser_h @class NSMutableArray, NSString; @interface OCHeaderParser : NSObject { NSMutableArray *classes; NSString *fileData; } - (id) initWithContentsOfFile: (NSString *)file; - (NSMutableArray *)classes; - (BOOL) parse; @end #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCHeaderParser.m000066400000000000000000000125321475375552500234500ustar00rootroot00000000000000/* OCHeaderParser.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include @implementation OCHeaderParser +(void) initialize { if(self == [OCHeaderParser class]) { // } } - (id) initWithContentsOfFile: (NSString *)file { if((self = [super init]) != nil) { fileData = [NSString stringWithContentsOfFile: file]; classes = [[NSMutableArray alloc] init]; RETAIN(fileData); } return self; } - (void) dealloc { RELEASE(classes); RELEASE(fileData); [super dealloc]; } - (NSMutableArray *)classes { return classes; } - (void) _stripComments { NSScanner *scanner = [NSScanner scannerWithString: fileData]; NSString *resultString = @""; NSString *finalString = @""; // strip all of the one line comments out... [scanner setCharactersToBeSkipped: nil]; while(![scanner isAtEnd]) { NSString *tempString = nil; [scanner scanUpToString: @"//" intoString: &tempString]; [scanner scanUpToString: @"\n" intoString: NULL]; resultString = [resultString stringByAppendingString: tempString]; } // strip all of the multiline comments out... scanner = [NSScanner scannerWithString: resultString]; [scanner setCharactersToBeSkipped: nil]; while(![scanner isAtEnd]) { NSString *tempString = nil; [scanner scanUpToString: @"/*" intoString: &tempString]; [scanner scanUpToAndIncludingString: @"*/" intoString: NULL]; finalString = [finalString stringByAppendingString: tempString]; } // make this our new fileData... ASSIGN(fileData, finalString); } - (void) _stripPreProcessor { NSScanner *scanner = [NSScanner scannerWithString: fileData]; NSString *resultString = @""; // [NSString stringWithString: @""]; // strip all of the one line comments out... [scanner setCharactersToBeSkipped: nil]; while(![scanner isAtEnd]) { NSString *tempString = @""; [scanner scanUpToString: @"#" intoString: &tempString]; [scanner scanUpToAndIncludingString: @"\n" intoString: NULL]; resultString = [resultString stringByAppendingString: tempString]; } // make this our new fileData... ASSIGN(fileData,resultString); } - (void) _stripRedundantStatements { NSScanner *scanner = [NSScanner scannerWithString: fileData]; NSString *resultString = @""; // [NSString stringWithString: @""]; // strip all of the one line comments out... [scanner setCharactersToBeSkipped: nil]; while(![scanner isAtEnd]) { NSString *tempString = nil, *aString = nil; // [scanner scanUpToString: @";" intoString: &tempString]; // [scanner scanString: @";" intoString: &tempString2]; [scanner scanUpToAndIncludingString: @";" intoString: &tempString]; // Scan any redundant ";" characters into aString... once it // returns nil we know we're done. do { aString = nil; [scanner scanString: @";" intoString: &aString]; } while([aString isEqualToString:@";"]); [scanner scanUpToAndIncludingString: @"\n" intoString: NULL]; resultString = [resultString stringByAppendingString: tempString]; } // make this our new fileData... ASSIGN(fileData,resultString); } - (void) _preProcessFile { [self _stripComments]; [self _stripPreProcessor]; [self _stripRedundantStatements]; } - (BOOL) _processClasses { NSScanner *scanner = [NSScanner scannerWithString: fileData]; BOOL result = YES; NS_DURING { // get all of the classes... while(![scanner isAtEnd]) { NSString *classString = nil; OCClass *cls = nil; [scanner scanUpToString: @"@interface" intoString: NULL]; [scanner scanUpToAndIncludingString: @"@end" intoString: &classString]; if(classString != nil && [classString length] != 0) { cls = [[OCClass alloc] initWithString: classString]; [cls parse]; [classes addObject: cls]; RELEASE(cls); } } // if we got zero classes, return NO. if([classes count] == 0) { result = NO; } } NS_HANDLER { NSLog(@"%@",localException); result = NO; } NS_ENDHANDLER return result; } - (BOOL) parse { BOOL result = NO; [self _preProcessFile]; NS_DURING { // parse the header here... result = [self _processClasses]; } NS_HANDLER { // exception while processing... NSLog(@"%@",localException); result = NO; } NS_ENDHANDLER return result; } @end apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCIVar.h000066400000000000000000000024761475375552500217450ustar00rootroot00000000000000/* OCHeaderParser.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #ifndef INCLUDED_OCIVar_h #define INCLUDED_OCIVar_h @class NSMutableArray, NSString; @interface OCIVar : NSObject { NSString *name; BOOL isOutlet; NSString *ivarString; } - (id) initWithString: (NSString *)string; - (NSString *)name; - (void) setName: (NSString *)aName; - (BOOL) isOutlet; - (void) setIsOutlet: (BOOL)flag; - (void) parse; @end #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCIVar.m000066400000000000000000000077051475375552500217520ustar00rootroot00000000000000/* OCHeaderParser.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include @implementation OCIVar - (id) initWithString: (NSString *)string { if((self = [super init]) != nil) { ASSIGN(ivarString, [string copy]); } return self; } - (void) dealloc { RELEASE(ivarString); RELEASE(name); [super dealloc]; } - (NSString *) name { return name; } - (void) setName: (NSString *)aName { ASSIGN(name,aName); } - (BOOL) isOutlet { return isOutlet; } - (void) setIsOutlet: (BOOL)flag { isOutlet = flag; } - (void) _strip { NSString *replacementString = [ivarString stringByReplacingOccurrencesOfString:@"*" withString:@" "]; NSScanner *stripScanner = [NSScanner scannerWithString: replacementString]; NSString *resultString = @""; NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; // [stripScanner setCharactersToBeSkipped: [NSCharacterSet characterSetWithCharactersInString: @"*"]]; // string whitespace while(![stripScanner isAtEnd]) { NSString *string = nil; [stripScanner scanUpToCharactersFromSet: wsnl intoString: &string]; resultString = [resultString stringByAppendingString: string]; if(![stripScanner isAtEnd]) { resultString = [resultString stringByAppendingString: @" "]; } } ASSIGN(ivarString, resultString); } - (void) parse { NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSScanner *scanner = nil; NSString *tempName = nil; [self _strip]; scanner = [NSScanner scannerWithString: ivarString]; [scanner setCharactersToBeSkipped: [NSCharacterSet characterSetWithCharactersInString: @"*"]]; if(lookAhead(ivarString,@"IBOutlet")) { [scanner scanUpToAndIncludingString: @"IBOutlet" intoString: NULL]; // return type [scanner scanCharactersFromSet: wsnl intoString: NULL]; [scanner scanUpToCharactersFromSet: wsnl intoString: NULL]; // typespec... [scanner scanCharactersFromSet: wsnl intoString: NULL]; [scanner scanUpToCharactersFromSet: wsnl intoString: &tempName]; // variable name... [self setIsOutlet: YES]; } else if(lookAheadForToken(ivarString, @"id")) { [scanner scanUpToCharactersFromSet: wsnl intoString: NULL]; // id [scanner scanCharactersFromSet: wsnl intoString: NULL]; [scanner scanUpToCharactersFromSet: wsnl intoString: &tempName]; // id [self setIsOutlet: YES]; } else // for everything else... { [scanner scanUpToCharactersFromSet: wsnl intoString: NULL]; [scanner scanCharactersFromSet: wsnl intoString: NULL]; [scanner scanUpToCharactersFromSet: wsnl intoString: &tempName]; } // fix name... scanner = [NSScanner scannerWithString: tempName]; [scanner setCharactersToBeSkipped: [NSCharacterSet characterSetWithCharactersInString: @"*"]]; // [scanner scanUpToCharactersFromSet: wsnl intoString: &name]; name = [tempName stringByTrimmingCharactersInSet: wsnl]; RETAIN(name); } @end apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCIVarDecl.h000066400000000000000000000022741475375552500225310ustar00rootroot00000000000000/* OCHeaderParser.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #ifndef INCLUDED_OCIVarDecl_h #define INCLUDED_OCIVarDecl_h @class NSMutableArray, NSString; @interface OCIVarDecl : NSObject { NSString *ivarString; NSMutableArray *ivars; } - (id) initWithString: (NSString *)string; - (NSArray *) ivars; - (void) parse; @end #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCIVarDecl.m000066400000000000000000000110321475375552500225260ustar00rootroot00000000000000/* OCIVarDecl.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include #include #include @implementation OCIVarDecl - (id) initWithString: (NSString *)string { if((self = [super init]) != nil) { ASSIGN(ivarString, string); ivars = [[NSMutableArray alloc] init]; } else { RELEASE(self); } return self; } - (NSArray *)ivars { return ivars; } - (void) dealloc { RELEASE(ivarString); RELEASE(ivars); [super dealloc]; } - (void) _strip { NSString *replacementString = [ivarString stringByReplacingOccurrencesOfString:@"*" withString:@" "]; NSScanner *stripScanner = [NSScanner scannerWithString: replacementString]; NSString *resultString = nil; NSString *tempString = @""; NSString *tempString2 = @""; NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSString *typeName = @""; NSString *varName = @""; while(![stripScanner isAtEnd]) { NSString *string = nil; [stripScanner scanUpToCharactersFromSet: wsnl intoString: &string]; tempString = [tempString stringByAppendingString: string]; if(![stripScanner isAtEnd]) { tempString = [tempString stringByAppendingString: @" "]; } } if(lookAhead(tempString, @"*")) { stripScanner = [NSScanner scannerWithString: tempString]; while(![stripScanner isAtEnd]) { NSString *string = nil, *string2 = nil; [stripScanner scanUpToString: @"*" intoString: &string]; [stripScanner scanString: @"*" intoString: NULL]; [stripScanner scanUpToCharactersFromSet: wsnl intoString: &string2]; tempString2 = [tempString2 stringByAppendingString: string]; tempString2 = [tempString2 stringByAppendingString: string2]; } } else { tempString2 = tempString; } // strip protocol qualifiers if(lookAhead(tempString2,@"<")) { stripScanner = [NSScanner scannerWithString: tempString2]; [stripScanner scanUpToString: @"<" intoString: &typeName]; [stripScanner scanUpToAndIncludingString: @">" intoString: NULL]; [stripScanner scanUpToCharactersFromSet: wsnl intoString: &varName]; resultString = [[typeName stringByAppendingString: @" "] stringByAppendingString: varName]; } else { resultString = tempString2; } ASSIGN(ivarString, resultString); } - (void) parse { NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; [self _strip]; if(lookAhead(ivarString,@",")) { OCIVar *ivar = nil; NSScanner *scanner = [NSScanner scannerWithString: ivarString]; NSString *tempIvar = nil; BOOL isOutlet = NO; // scan the first one in... [scanner scanUpToString: @"," intoString: &tempIvar]; [scanner scanString: @"," intoString: NULL]; ivar = AUTORELEASE([[OCIVar alloc] initWithString: tempIvar]); [ivar parse]; [ivars addObject: ivar]; isOutlet = [ivar isOutlet]; while(![scanner isAtEnd]) { NSString *name = nil; OCIVar *newIvar = nil; [scanner scanCharactersFromSet: wsnl intoString: NULL]; [scanner scanUpToString: @"," intoString: &name]; [scanner scanString: @"," intoString: NULL]; [scanner scanCharactersFromSet: wsnl intoString: NULL]; newIvar = AUTORELEASE([[OCIVar alloc] initWithString: nil]); [newIvar setName: name]; [newIvar setIsOutlet: isOutlet]; [ivars addObject: newIvar]; } } else // for everything else... { OCIVar *ivar = AUTORELEASE([[OCIVar alloc] initWithString: ivarString]); [ivar parse]; [ivars addObject: ivar]; } } @end apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCMethod.h000066400000000000000000000026471475375552500223240ustar00rootroot00000000000000/* OCMethod.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #ifndef INCLUDED_OCMethod_h #define INCLUDED_OCMethod_h @class NSMutableArray, NSString; @interface OCMethod : NSObject { NSString *name; NSString *methodString; BOOL isAction; BOOL isClassMethod; } - (id) initWithString: (NSString *)string; - (NSString *)name; - (void) setName: (NSString *)aName; - (BOOL) isAction; - (void) setIsAction: (BOOL)flag; - (BOOL) isClassMethod; - (void) setIsClassMethod: (BOOL) flag; - (void) parse; @end #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCMethod.m000066400000000000000000000140011475375552500223140ustar00rootroot00000000000000/* OCHeaderParser.m * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999, 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include @implementation OCMethod - (id) initWithString: (NSString *)string { if((self = [super init]) != nil) { ASSIGN(methodString, string); } return self; } - (void) dealloc { RELEASE(methodString); RELEASE(name); [super dealloc]; } - (NSString *) name { return name; } - (void) setName: (NSString *)aName { ASSIGN(name,aName); } - (BOOL) isAction { return isAction; } - (void) setIsAction: (BOOL)flag { isAction = flag; } - (BOOL) isClassMethod { return isClassMethod; } - (void) setIsClassMethod: (BOOL) flag { isClassMethod = flag; } - (void) _strip { NSScanner *stripScanner = [NSScanner scannerWithString: methodString]; NSString *resultString = @""; // [NSString stringWithString: @""]; NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; while(![stripScanner isAtEnd]) { NSString *string = nil; [stripScanner scanUpToCharactersFromSet: wsnl intoString: &string]; resultString = [resultString stringByAppendingString: string]; if(![stripScanner isAtEnd]) { resultString = [resultString stringByAppendingString: @" "]; } } ASSIGN(methodString, resultString); } /** * Parse the method. */ - (void) parse { NSRange notFound = NSMakeRange(NSNotFound,0); NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSScanner *scanner = nil; NSString *tempSelector = nil; NSString *selectorPart = nil; NSString *returnPart = nil; NSString *argPart = nil; NSRange range; [self _strip]; scanner = [NSScanner scannerWithString: methodString]; // stringByTrimmingCharactersInSet: wsnl]]; isClassMethod = ([methodString compare: @"+" options: NSLiteralSearch range: NSMakeRange(0,1)] == NSOrderedSame); if(isClassMethod) { [scanner scanString: @"+" intoString: NULL]; [scanner scanCharactersFromSet: wsnl intoString: NULL]; } else { [scanner scanString: @"-" intoString: NULL]; [scanner scanCharactersFromSet: wsnl intoString: NULL]; } if(NSEqualRanges((range = [methodString rangeOfString: @":"]),notFound) == NO && isClassMethod == NO) { [scanner scanUpToAndIncludingString: @":" intoString: &tempSelector]; argPart = [methodString substringFromIndex: (range.location + 1)]; // the rest of the line... if(NSEqualRanges([tempSelector rangeOfString: @"("],notFound) == NO) { NSScanner *selScanner = [NSScanner scannerWithString: tempSelector]; [selScanner scanUpToAndIncludingString: @"(" intoString: NULL]; [selScanner scanUpToString: @")" intoString: &returnPart]; [selScanner scanString: @")" intoString: NULL]; [selScanner scanUpToAndIncludingString: @":" intoString: &selectorPart]; if([returnPart isEqual: @"IBAction"] || [returnPart isEqual: @"id"] || [returnPart isEqual: @"void"]) { BOOL noMoreArgs = NSEqualRanges([argPart rangeOfString: @":"],notFound); if(NSEqualRanges([argPart rangeOfString: @"("],notFound) == NO && noMoreArgs) { NSString *argType = nil; NSScanner *argScanner = [NSScanner scannerWithString: argPart]; [argScanner scanUpToAndIncludingString: @"(" intoString: NULL]; [argScanner scanUpToString: @")" intoString: &argType]; [argScanner scanString: @")" intoString: NULL]; if([argType isEqual: @"id"]) { isAction = YES; } } else if(noMoreArgs) { isAction = YES; } else { selectorPart = [selectorPart stringByAppendingString: argPart]; } } ASSIGN(name, [selectorPart stringByTrimmingCharactersInSet: wsnl]); } else // No return type specified. The default is id, so we must treat it as a potential action... { BOOL noMoreArgs = NSEqualRanges([argPart rangeOfString: @":"],notFound); NSScanner *selScanner = [NSScanner scannerWithString: tempSelector]; [selScanner scanUpToAndIncludingString: @":" intoString: &selectorPart]; if(NSEqualRanges([argPart rangeOfString: @"("],notFound) == NO && noMoreArgs) { NSString *argType = nil; NSScanner *argScanner = [NSScanner scannerWithString: argPart]; [argScanner scanUpToAndIncludingString: @"(" intoString: NULL]; [argScanner scanUpToString: @")" intoString: &argType]; [argScanner scanString: @")" intoString: NULL]; if([argType isEqual: @"id"]) { isAction = YES; } } else if(noMoreArgs) { isAction = YES; } else { selectorPart = [selectorPart stringByAppendingString: argPart]; } ASSIGN(name, [selectorPart stringByTrimmingCharactersInSet: wsnl]); } } else { [scanner scanUpToCharactersFromSet: wsnl intoString: &tempSelector]; if(NSEqualRanges([tempSelector rangeOfString: @"("],notFound) == NO) { NSScanner *selScanner = [NSScanner scannerWithString: tempSelector]; [selScanner scanUpToAndIncludingString: @")" intoString: NULL]; [selScanner scanUpToCharactersFromSet: wsnl intoString: &selectorPart]; ASSIGN(name, [selectorPart stringByTrimmingCharactersInSet: wsnl]); } } } @end apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCProperty.h000066400000000000000000000022771475375552500227270ustar00rootroot00000000000000/* Definition of class OCProperty Copyright (C) 2024 Free Software Foundation, Inc. By: Gregory John Casamento Date: 27-12-2024 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 USA. */ #ifndef _OCProperty_h_INCLUDE #define _OCProperty_h_INCLUDE #import "OCIVar.h" #import #if defined(__cplusplus) extern "C" { #endif GS_EXPORT_CLASS @interface OCProperty : OCIVar @end #if defined(__cplusplus) } #endif #endif /* _OCProperty_h_INCLUDE */ apps-gorm-gorm-1_5_0/GormObjCHeaderParser/OCProperty.m000066400000000000000000000017311475375552500227260ustar00rootroot00000000000000/* Implementation of class OCProperty Copyright (C) 2024 Free Software Foundation, Inc. By: Gregory John Casamento Date: 27-12-2024 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 USA. */ #import "OCProperty.h" @implementation OCProperty @end apps-gorm-gorm-1_5_0/GormObjCHeaderParser/ParserFunctions.h000066400000000000000000000021771475375552500240050ustar00rootroot00000000000000/* ParserFunctions.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: Jan 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef INCLUDED_ParserFunctions_h #define INCLUDED_ParserFunctions_h #include BOOL lookAhead(NSString *stringToScan, NSString *stringToFind); BOOL lookAheadForToken(NSString *stringToScan, NSString *stringToFind); #endif apps-gorm-gorm-1_5_0/GormObjCHeaderParser/ParserFunctions.m000066400000000000000000000034201475375552500240020ustar00rootroot00000000000000/* ParserFunctions.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: Jan 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include "ParserFunctions.h" BOOL lookAhead(NSString *stringToScan, NSString *stringToFind) { NSRange range; return (NSEqualRanges((range = [stringToScan rangeOfString: stringToFind]), NSMakeRange(NSNotFound,0)) == NO); } BOOL lookAheadForToken(NSString *stringToScan, NSString *stringToFind) { NSScanner *scanner = [NSScanner scannerWithString: stringToScan]; NSString *resultString = @""; [scanner setCharactersToBeSkipped: nil]; [scanner scanString: stringToFind intoString: &resultString]; if([resultString isEqualToString: stringToFind]) { NSString *postTokenString = @""; NSCharacterSet *wsnl = [NSCharacterSet whitespaceAndNewlineCharacterSet]; [scanner scanCharactersFromSet: wsnl intoString: &postTokenString]; if([postTokenString length] == 0) { return NO; } return YES; } return NO; } apps-gorm-gorm-1_5_0/GormObjCHeaderParser/README.md000066400000000000000000000004171475375552500217610ustar00rootroot00000000000000# GormObjCHeaderParser library This library is a basic recursive descent parser that handles ObjC syntax to allow Gorm to pull in information about a class from it's header file. It is separated out into a library so that other applications or tools can make use of it. apps-gorm-gorm-1_5_0/GormObjCHeaderParser/Tests/000077500000000000000000000000001475375552500216025ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormObjCHeaderParser/Tests/GNUmakefile000066400000000000000000000044501475375552500236570ustar00rootroot00000000000000# # Tests Makefile for GNUstep GUI Library. # # Copyright (C) 2011 Free Software Foundation, Inc. # # Written by: Richard Frith-Macdonald # # This file is part of the GNUstep GUI Library. # # This library 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 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 # 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., 51 Franklin Street, Fifth Floor, # Boston, MA 02111 USA # ifeq ($(GNUSTEP_MAKEFILES),) GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null) ifeq ($(GNUSTEP_MAKEFILES),) $(warning ) $(warning Unable to obtain GNUSTEP_MAKEFILES setting from gnustep-config!) $(warning Perhaps gnustep-make is not properly installed,) $(warning so gnustep-config is not in your PATH.) $(warning ) $(warning Your PATH is currently $(PATH)) $(warning ) endif endif ifeq ($(GNUSTEP_MAKEFILES),) $(error You need to set GNUSTEP_MAKEFILES before running this!) endif include $(GNUSTEP_MAKEFILES)/common.make TOP_DIR := $(shell dirname $(CURDIR)) all:: @(echo If you want to run the gorm-objcheaderparser testsuite, please type \'make check\') check:: (\ ADDITIONAL_INCLUDE_DIRS="-I$(TOP_DIR)/Headers -I$(TOP_DIR)/Source/$(GNUSTEP_TARGET_DIR) -I$(TOP_DIR)/Headers/Additions";\ ADDITIONAL_LIB_DIRS="-L$(TOP_DIR)/Source/$(GNUSTEP_OBJ_DIR)";\ LD_LIBRARY_PATH="$(TOP_DIR)/Source/$(GNUSTEP_OBJ_DIR):${LD_LIBRARY_PATH}";\ PATH="$(TOP_DIR)/Tools/$(GNUSTEP_OBJ_DIR):${PATH}";\ export GNUSTEP_LOCAL_ADDITIONAL_MAKEFILES;\ export ADDITIONAL_INCLUDE_DIRS;\ export ADDITIONAL_LIB_DIRS;\ export LD_LIBRARY_PATH;\ export PATH;\ env;\ if [ "$(DEBUG)" = "" ]; then \ gnustep-tests parser;\ else \ gnustep-tests --debug parser;\ fi; \ ) clean:: -gnustep-tests --clean include $(GNUSTEP_MAKEFILES)/rules.make apps-gorm-gorm-1_5_0/GormObjCHeaderParser/Tests/parser/000077500000000000000000000000001475375552500230765ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormObjCHeaderParser/Tests/parser/README.md000066400000000000000000000000001475375552500243430ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/GormObjCHeaderParser/Version000066400000000000000000000006461475375552500220560ustar00rootroot00000000000000 # 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. GNUSTEP_GCC=3.1.0 # GNUstep version required GNUSTEP_CORE_VERSION=0.11.0 # The version number of this release. MAJOR_VERSION=1 MINOR_VERSION=1 SUBMINOR_VERSION=0 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} apps-gorm-gorm-1_5_0/InterfaceBuilder/000077500000000000000000000000001475375552500177575ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/InterfaceBuilder/COPYING.LIB000066400000000000000000000635061475375552500214310ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! apps-gorm-gorm-1_5_0/InterfaceBuilder/GNUmakefile000066400000000000000000000027311475375552500220340ustar00rootroot00000000000000# # GNUmakefile # Written by Gregory John Casamento # PACKAGE_NAME = InterfaceBuilder include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Library # PACKAGE_NAME=InterfaceBuilder LIBRARY_VAR=INTERFACEBUILDER LIBRARY_NAME=InterfaceBuilder InterfaceBuilder_HEADER_FILES_DIR=. InterfaceBuilder_HEADER_FILES_INSTALL_DIR=/InterfaceBuilder ADDITIONAL_INCLUDE_DIRS = -I.. srcdir = . include ./Version # # Additional libraries # InterfaceBuilder_LIBRARIES_DEPEND_UPON += -lgnustep-gui -l$(FOUNDATION_LIBRARY_NAME) # # Header files # InterfaceBuilder_HEADER_FILES= \ IBApplicationAdditions.h \ IBCellAdditions.h \ IBCellProtocol.h \ IBConnectors.h \ IBDefines.h \ IBDocuments.h \ IBEditors.h \ IBInspector.h \ IBInspectorManager.h \ IBInspectorMode.h \ IBObjectAdditions.h \ IBObjectProtocol.h \ IBPalette.h \ IBPlugin.h \ IBProjects.h \ IBProjectFiles.h \ IBResourceManager.h \ IBSystem.h \ IBViewAdditions.h \ IBViewProtocol.h \ IBViewResourceDragging.h \ InterfaceBuilder.h # # Class files # InterfaceBuilder_OBJC_FILES= \ IBApplicationAdditions.m \ IBConnectors.m \ IBDocuments.m \ IBEditors.m \ IBInspector.m \ IBInspectorManager.m \ IBInspectorMode.m \ IBObjectAdditions.m \ IBPalette.m \ IBPlugin.m \ IBResourceManager.m # # C files # InterfaceBuilder_C_FILES= HEADERS_INSTALL = $(InterfaceBuilder_HEADER_FILES) -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/library.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/InterfaceBuilder/GNUmakefile.postamble000066400000000000000000000017121475375552500240170ustar00rootroot00000000000000# # GNUmakefile.postamble # # Copyright (C) 2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # # This file is part of GNUstep # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; see the file COPYING.LIB. # If not, write to the Free Software Foundation, # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. before-all:: after-clean:: apps-gorm-gorm-1_5_0/InterfaceBuilder/GNUmakefile.preamble000066400000000000000000000037231475375552500236240ustar00rootroot00000000000000# GNUmakefile.preamble # # Copyright (C) 2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # # This file is part of GNUstep # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # If you are interested in a warranty or support for this source code, # contact Scott Christley at scottc@net-community.com # # You should have received a copy of the GNU Library General Public # License along with this library; see the file COPYING.LIB. # If not, write to the Free Software Foundation, # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # Makefile.preamble # # Project specific makefile variables, and additional # # Do not put any Makefile rules in this file, instead they should # be put into Makefile.postamble. # # # Flags dealing with compiling and linking # # Additional flags to pass to the preprocessor # ADDITIONAL_CPPFLAGS += -Wall -Werror # Additional flags to pass to the Objective-C compiler # ADDITIONAL_OBJCFLAGS += -Wall -Werror # Additional flags to pass to the C compiler # ADDITIONAL_CFLAGS += -Wall -Werror # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += # 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 # apps-gorm-gorm-1_5_0/InterfaceBuilder/IBApplicationAdditions.h000066400000000000000000000041041475375552500244440ustar00rootroot00000000000000/* IBApplicationAdditions.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBAPPLICATIONADDITIONS_H #define INCLUDED_IBAPPLICATIONADDITIONS_H #include #include #include IB_EXTERN NSString *IBWillBeginTestingInterfaceNotification; IB_EXTERN NSString *IBDidBeginTestingInterfaceNotification; IB_EXTERN NSString *IBWillEndTestingInterfaceNotification; IB_EXTERN NSString *IBDidEndTestingInterfaceNotification; @protocol IB /** * Returns the document which is currently being edited. */ - (id) activeDocument; /** * Returns YES, if the reciever is in testing mode. */ - (BOOL) isTestingInterface; /** * Returns the current selection owner. */ - (id) selectionOwner; /** * Returns the current selection from the current selection * owner. */ - (id) selectedObject; /** * Returns the document which contains this object. */ - (id) documentForObject: (id)object; @end @interface NSApplication (GormSpecific) /** * Image to be displayed with making a link. */ - (NSImage *) linkImage; /** * Start the connection process. */ - (void) startConnecting; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBApplicationAdditions.m000066400000000000000000000025211475375552500244520ustar00rootroot00000000000000/* IBApplicationAdditions.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include NSString *IBWillBeginTestingInterfaceNotification = @"IBWillBeginTestingInterfaceNotification"; NSString *IBDidBeginTestingInterfaceNotification = @"IBDidBeginTestingInterfaceNotification"; NSString *IBWillEndTestingInterfaceNotification = @"IBWillEndTestingInterfaceNotification"; NSString *IBDidEndTestingInterfaceNotification = @"IBDidEndTestingInterfaceNotification"; apps-gorm-gorm-1_5_0/InterfaceBuilder/IBCellAdditions.h000066400000000000000000000021751475375552500230660ustar00rootroot00000000000000/* IBViewAdditions.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBCELLADDITIONS_H #define INCLUDED_IBCELLADDITIONS_H #include #include @interface NSCell (IBCellAdditions) @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBCellProtocol.h000066400000000000000000000027671475375552500227600ustar00rootroot00000000000000/* IBViewProtocol.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBCELLPROTOCOL_H #define INCLUDED_IBCELLPROTOCOL_H #include #include @protocol IBCellProtocol /** * Called when the cell is about to be alt-dragged. */ - (void) cellWillAltDragWithSize: (NSSize)size; /** * Maximum size for the cell. */ - (NSSize) maximumSizeForCellSize: (NSSize)size knobPosition: (IBKnobPosition)position; /** * Minimum size for the cell. */ - (NSSize) minimumSizeForCellSize: (NSSize)size knobPosition: (IBKnobPosition)position; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBConnectors.h000066400000000000000000000070361475375552500224660ustar00rootroot00000000000000/* Gorm.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBCONNECTORS_H #define INCLUDED_IBCONNECTORS_H #include #include #include #include // forward declarations @class NSString; IB_EXTERN NSString *IBWillAddConnectorNotification; IB_EXTERN NSString *IBDidAddConnectorNotification; IB_EXTERN NSString *IBWillRemoveConnectorNotification; IB_EXTERN NSString *IBDidRemoveConnectorNotification; /* * Connector objects are used to record connections between nib objects. */ @protocol IBConnectors /** * Destination for the receiver. */ - (id) destination; /** * Establish the connection. */ - (void) establishConnection; /** * The method to which the receiver will be connected. */ - (NSString*) label; /** * Replace anObject with anotherObject. This method looks at * the receiver's source and destination and replaces whichever * one matches anObject with anotherObject. */ - (void) replaceObject: (id)anObject withObject: (id)anotherObject; /** * The source of the receiver. */ - (id) source; /** * Set the receiver's destination to anObject. */ - (void) setDestination: (id)anObject; /** * Set the receiver's label. */ - (void) setLabel: (NSString*)label; /** * Set the receiver's source to anObject. */ - (void) setSource: (id)anObject; /** * Called after the document is loaded on connections. */ - (id) nibInstantiate; @end @interface NSNibConnector (IBConnectorsProtocol) @end @interface NSObject (IBNibInstantiation) /** * Invoked after loading. */ - (id) nibInstantiate; @end @interface NSApplication (IBConnections) /** * [NSApp -connectSource] returns the source object as set by the most recent * [NSApp -displayConnectionBetween:and:] */ - (id) connectSource; /** * [NSApp -connectDestination] returns the target object as set by the most * recent [NSApp -displayConnectionBetween:and:] */ - (id) connectDestination; /** * [NSApp -isConnecting] simply lets you know if a connection is in progress. */ - (BOOL) isConnecting; /** * [NSApp -stopConnecting] terminates the current connection process and * removes the connection marks from the display. */ - (void) stopConnecting; /** * [NSApp -displayConnectionBetween:and:] is used to set the source and target * objects and mark the display appropriately. Setting either source or * target to 'nil' will remove markup from any previous source or target. * NB. This method expects to be able to call the active document to ask it * for the window and rectangle in which to perform markup. */ - (void) displayConnectionBetween: (id)source and: (id)destination; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBConnectors.m000066400000000000000000000030001475375552500224560ustar00rootroot00000000000000/* IBConnectors.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include NSString *IBWillAddConnectorNotification = @"IBWillAddConnectorNotification"; NSString *IBDidAddConnectorNotification = @"IBDidAddConnectorNotification"; NSString *IBWillRemoveConnectorNotification = @"IBWillRemoveConnectorNotification"; NSString *IBDidRemoveConnectorNotification = @"IBDidRemoveConnectorNotification"; @interface NSObject (IBNibInstantiation) - (id) nibInstantiate; @end @implementation NSObject (IBNibInstantiation) - (id) nibInstantiate { // default implementation of nibInstantiate return self; } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBDefines.h000066400000000000000000000025231475375552500217220ustar00rootroot00000000000000/* IBDefines.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBDEFINES_H #define INCLUDED_IBDEFINES_H /* * Positions of handles for resizing items. */ typedef enum { IBBottomLeftKnobPosition = 0, IBMiddleLeftKnobPosition = 1, IBTopLeftKnobPosition = 2, IBTopMiddleKnobPosition = 3, IBTopRightKnobPosition = 4, IBMiddleRightKnobPosition = 5, IBBottomRightKnobPosition = 6, IBBottomMiddleKnobPosition = 7, IBNoneKnobPosition = -1 } IBKnobPosition; #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBDocuments.h000066400000000000000000000147551475375552500223200ustar00rootroot00000000000000/* IBDocuments.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBDOCUMENTS_H #define INCLUDED_IBDOCUMENTS_H #include #include #include #include IB_EXTERN NSString *IBDidOpenDocumentNotification; IB_EXTERN NSString *IBWillSaveDocumentNotification; IB_EXTERN NSString *IBDidSaveDocumentNotification; IB_EXTERN NSString *IBWillCloseDocumentNotification; @protocol IBDocuments /** * Add a connection */ - (void) addConnector: (id)aConnector; /** * Returns an array containing all connections for the receiver. */ - (NSArray*) allConnectors; /** * Attach object to document with a specified name. Pass nil to * aName to have Gorm assign a name to it. (GS extension) */ - (void) attachObject: (id)anObject toParent: (id)aParent withName: (NSString *)aName; /** * Attaches an object to the document and makes the association * with the parent. */ - (void) attachObject: (id)anObject toParent: (id)aParent; /** * Iterates over anArray and attaches all objects in it to the * receiver with aParent as the parent. */ - (void) attachObjects: (NSArray*)anArray toParent: (id)aParent; /** * Returns an autoreleased array containing all connections for * the given destination. */ - (NSArray*) connectorsForDestination: (id)destination; /** * Returns an autoreleased array containing all connectors of * the given class for the destination. */ - (NSArray*) connectorsForDestination: (id)destination ofClass: (Class)aConnectorClass; /** * Returns an autoreleased array containing all connections for * the given source. */ - (NSArray*) connectorsForSource: (id)source; /** * Returns an autoreleased array containing all connectors of the * given class for the source. */ - (NSArray*) connectorsForSource: (id)source ofClass: (Class)aConnectorClass; /** * Returns YES, if the receiver contains anObject. */ - (BOOL) containsObject: (id)anObject; /** * Returns YES, if the receiver contains an object with the given name * and parent. */ - (BOOL) containsObjectWithName: (NSString*)aName forParent: (id)parent; /** * Copies anObject to the pasteboard with the aType. */ - (BOOL) copyObject: (id)anObject type: (NSString*)aType toPasteboard: (NSPasteboard*)aPasteboard; /** * Copues an array of objects to aPasteboard with aType. */ - (BOOL) copyObjects: (NSArray*)anArray type: (NSString*)aType toPasteboard: (NSPasteboard*)aPasteboard; /** * Detaches anObject from the receiver. */ - (void) detachObject: (id)anObject; /** * Detaches an object from the receiver, closes editor if asked. GNUstep extension. */ - (void) detachObject: (id)anObject closeEditor: (BOOL)close_editor; /** * Detaches an array of objects from the receiver. */ - (void) detachObjects: (NSArray*)anArray; /** * Detaches an array of objects from the receiver. Closes editor if asked. GNUstep extension. */ - (void) detachObjects: (id)anObject closeEditors: (BOOL)close_editor; /** * The path of the file which represents the document. */ - (NSString*) documentPath; /** * Called when an editor is closed. */ - (void) editor: (id)anEditor didCloseForObject: (id)anObject; /** * Returns the associated editor for anObject, if flag is YES, it will * create an instance of the editor class if one does not already exist * for the given object. */ - (id) editorForObject: (id)anObject create: (BOOL)flag; /** * Returns the associated subeditor for anObject, if flag is YES, it will * create an instance of the editor. */ - (id) editorForObject: (id)anObject inEditor: (id)anEditor create: (BOOL)flag; /** * Returns the name associated with the object. */ - (NSString*) nameForObject: (id)anObject; /** * Returns the object for the given aName. */ - (id) objectForName: (NSString*)aName; /** * Returns all objects in the receiver's name table. */ - (NSArray*) objects; /** * Creates an editor, if necessary using editorForObject:create:, opens it * and brings the window containing the editor to the front. */ - (id) openEditorForObject: (id)anObject; /** * Returns the parent of the given editor. */ - (id) parentEditorForEditor: (id)anEditor; /** * Return the parent of anObject. The File's Owner is the root object in the * hierarchy, if anObject's parent is the Files's Owner, this method should return * nil. */ - (id) parentOfObject: (id)anObject; /** * Pastes the given type from the aPasteboard. */ - (NSArray*) pasteType: (NSString*)aType fromPasteboard: (NSPasteboard*)aPasteboard parent: (id)parent; /** * Remove aConnector from the receiver. */ - (void) removeConnector: (id)aConnector; /** * The current editor wants to give up the selection, this method iterates * over all editors and determines if any editors will take over the selection. * If one is found it is activated. */ - (void) resignSelectionForEditor: (id)editor; /** * Set aName for object in the receiver. This replaces any name the object * may have previously had. */ - (void) setName: (NSString*)aName forObject: (id)object; /** * Sets the currently selected object from the given editor. */ - (void) setSelectionFromEditor: (id)anEditor; /** * Mark document as having been changed. */ - (void) touch; //// PRIVATE /** * Returns a string with the name of the class for the given object. */ - (NSString *) classForObject: (id)obj; - (NSArray *) actionsOfClass: (NSString *)className; - (NSArray *) outletsOfClass: (NSString *)className; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBDocuments.m000066400000000000000000000024301475375552500223100ustar00rootroot00000000000000/* IBDocuments.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "IBDocuments.h" NSString *IBDidOpenDocumentNotification = @"IBDidOpenDocumentNotification"; NSString *IBWillSaveDocumentNotification = @"IBWillSaveDocumentNotification"; NSString *IBDidSaveDocumentNotification = @"IBDidSaveDocumentNotification"; NSString *IBWillCloseDocumentNotification = @"IBWillCloseDocumentNotification"; apps-gorm-gorm-1_5_0/InterfaceBuilder/IBEditors.h000066400000000000000000000113171475375552500217570ustar00rootroot00000000000000/* IBEditors.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBEDITORS_H #define INCLUDED_IBEDITORS_H #include #include // forward references @class NSString; @class NSArray; @class NSWindow; /* * Notification for editing and inspecting the objects etc. */ IB_EXTERN NSString *IBAttributesChangedNotification; IB_EXTERN NSString *IBInspectorDidModifyObjectNotification; IB_EXTERN NSString *IBSelectionChangedNotification; IB_EXTERN NSString *IBClassNameChangedNotification; /** * The IBSelectionOwners protocol defines the methods that a selection owner * must implement. */ @protocol IBSelectionOwners /** * The number of currently selected objects. */ - (NSUInteger) selectionCount; /** * Return the selection in an array. */ - (NSArray*) selection; /** * Draw the selection. */ - (void) drawSelection; /** * This method is used to draw or remove markup that identifies selected * objects within the object being edited. */ - (void) makeSelectionVisible: (BOOL)flag; /** * This method changes the current selection to those objects in the array. */ - (void) selectObjects: (NSArray*)objects; /** * This method places the current selection from the editor on the pasteboard. */ - (void) copySelection; @end /** * The IBEditors protocol defines the methods an editor must implement. */ @protocol IBEditors /** * Decide whether an editor can accept data from the pasteboard. */ - (BOOL) acceptsTypeFromArray: (NSArray*)types; /** * Activate an editor - inserts it into the view hierarchy or whatever is * needed for the editor to be able to provide its functionality. * This method should be called by the document when an editor is created * or opened. It should be safe to call repeatedly. */ - (BOOL) activate; /** * Initializes the editor with object for the specified document. */ - (id) initWithObject: (id)anObject inDocument: (id/**/)aDocument; /** * Close an editor - this destroys the editor. In this method the editor * should tell its document that it has been closed, so that the document * can remove all its references to the editor. */ - (void) close; /** * Close all subeditors associated with this editor. */ - (void) closeSubeditors; /** * Deactivate an editor - removes it from the view hierarchy so that objects * can be archived without including the editor. * This method should be called automatically by the 'close' method. * It should be safe to call repeatedly. */ - (void) deactivate; /** * This method deletes all the objects in the current selection in the editor. */ - (void) deleteSelection; /** * This method returns the document that owns the object that the editor edits. */ - (id /**/) document; /** * This method returns the object that the editor is editing. */ - (id) editedObject; /** * This method is used to ensure that the editor is visible on screen. */ - (void) orderFront; /** * Opens the subeditor for an object when the object being edited is * double clicked by the user. If there is no sub-editor, return nil, otherwise * method will return the editor for the object. */ - (id) openSubeditorForObject: (id)object; /** * This method is used to add the contents of the pasteboard to the current * selection of objects within the editor. */ - (void) pasteInSelection; /** * Redraws the edited object */ - (void) resetObject: (id)anObject; /** * When an editor resigns the selection ownership, all editors are asked if * they want selection ownership, and the first one to return YES gets made * into the current selection owner. */ - (BOOL) wantsSelection; /** * Causes the editor to select the text being edited in the current text * field. */ - (void) validateEditing; /** * This returns the window in which the editor is drawn. */ - (NSWindow*) window; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBEditors.m000066400000000000000000000024321475375552500217620ustar00rootroot00000000000000/* IBEditors.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include NSString *IBAttributesChangedNotification = @"IBAttributesChangedNotification"; NSString *IBInspectorDidModifyObjectNotification = @"IBInspectorDidModifyObjectNotification"; NSString *IBSelectionChangedNotification = @"IBSelectionChangedNotification"; NSString *IBClassNameChangedNotification = @"IBClassNameChangedNotification"; apps-gorm-gorm-1_5_0/InterfaceBuilder/IBInspector.h000066400000000000000000000057121475375552500223160ustar00rootroot00000000000000/* IBInspector.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBINSPECTOR_H #define INCLUDED_IBINSPECTOR_H #include #include #define IVH 388 /* Standard height of inspector view. */ #define IVW 272 /* Standard width of inspector view. */ #define IVB 40 /* Standard height of buttons area. */ // forward references @class NSWindow; @class NSButton; @class NSString; @class NSView; @class NSNotification; @interface IBInspector : NSObject { id object; NSWindow *window; NSButton *okButton; NSButton *revertButton; } /** * Releases all the instance variables (apart from the window, which is * presumed to release itself when closed) and removes self as an observer * of notifications before destroying self. */ - (void) dealloc; /** * The first view to be selected in the inspector. */ - (NSView*) initialFirstResponder; /** * The object being inspected. */ - (id) object; /** * Action to take when user clicks the OK button */ - (void) ok: (id)sender; /** * Inspector supplied button - the inspectors manager will position this * button for you. */ - (NSButton*) okButton; /** * Action to take when user clicks the revert button */ - (void) revert: (id)sender; /** * Inspector supplied button - the inspectors manager will position this * button for you. */ - (NSButton*) revertButton; /** * Extension - not in NeXTstep - this message is sent to your inspector to * tell it to set its edited object and make any changes to its UI needed. */ - (void) setObject: (id)anObject; /** * Used to take notice of textfields in inspector being updated. */ - (void) textDidBeginEditing: (NSNotification*)aNotification; /** * Method to mark the inspector as needing saving (ok or revert). */ - (void) touch: (id)sender; /** * If this method returns YES, the manager will partition off a section of * the inspector panel for display of 'ok' and 'revert' buttons, which * your inspector must supply. */ - (BOOL) wantsButtons; /** * The window that the UI of the inspector exists in. */ - (NSWindow*) window; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBInspector.m000066400000000000000000000051411475375552500223170ustar00rootroot00000000000000/* IBInspector.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "IBApplicationAdditions.h" #include "IBInspector.h" #include "IBDocuments.h" static NSNotificationCenter *nc = nil; @implementation IBInspector + (void) initialize { if(self == [IBInspector class]) { nc = [NSNotificationCenter defaultCenter]; } } - (id) init { if((self = [super init]) != nil) { [nc addObserver: self selector: @selector(_releaseObject:) name: IBWillCloseDocumentNotification object: nil]; } return self; } - (void) dealloc { [nc removeObserver: self]; RELEASE(object); [super dealloc]; } - (void) _releaseObject: (NSNotification *)notification { id doc = [notification object]; if([doc nameForObject: object] != nil) { [self setObject: nil]; } } - (NSView*) initialFirstResponder { return nil; } - (id) object { return object; } - (void) ok: sender { [self touch: sender]; } - (NSButton*) okButton { return okButton; } - (void) revert: (id)sender { [window setDocumentEdited: NO]; } - (NSButton*) revertButton { return revertButton; } - (void) setObject: (id)anObject { ASSIGN(object, anObject); [self revert: self]; } - (void) textDidBeginEditing: (NSNotification*)aNotification { } - (void) touch: (id)sender { id delegate = [NSApp delegate]; id doc = nil; if ([NSApp respondsToSelector: @selector(activeDocument)]) { doc = [(id)NSApp activeDocument]; } else if ([delegate respondsToSelector: @selector(activeDocument)]) { doc = [delegate activeDocument]; } [doc touch]; } - (BOOL) wantsButtons { return NO; } - (NSWindow*) window { return window; } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBInspectorManager.h000066400000000000000000000041471475375552500236120ustar00rootroot00000000000000/* IBInspectorManager.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBINSPECTORMANAGER_H #define INCLUDED_IBINSPECTORMANAGER_H #include #include @class NSString, NSMutableArray; /** * Notifications to be sent prior to the action described. */ IB_EXTERN NSString *IBWillInspectObjectNotification; IB_EXTERN NSString *IBWillInspectWithModeNotification; @interface IBInspectorManager : NSObject { NSMutableArray *modes; id currentMode; id selectedObject; } /** * Create a shared instance of the class for the applicaiton. */ + (IBInspectorManager *) sharedInspectorManager; /** * Add an inspector for a given mode. This allows the addition * of inspectors for different aspects of the same object. */ - (void) addInspectorModeWithIdentifier: (NSString *)ident forObject: (id)obj localizedLabel: (NSString *)label inspectorClassName: (NSString *)className ordering: (float)ord; /** * Position in the inspector list that the "mode inspector" * appears. */ - (unsigned int) indexOfModeWithIdentifier: (NSString *)ident; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBInspectorManager.m000066400000000000000000000065231475375552500236170ustar00rootroot00000000000000/* IBInspectorManager.m * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "IBInspectorManager.h" #include "IBInspectorMode.h" #include static IBInspectorManager *_sharedInspectorManager = nil; /** * Notifications to be sent prior to the action described. */ NSString *IBWillInspectObjectNotification = @"IBWillInspectObjectNotification"; NSString *IBWillInspectWithModeNotification = @"IBWillInspectWithModeNotification"; @implementation IBInspectorManager /** * Create a shared instance of the class for the application. * If a subclass of IBInspectorManager uses this message it becomes * the shraredInspectorManager. */ + (IBInspectorManager *) sharedInspectorManager { if(_sharedInspectorManager == nil) { _sharedInspectorManager = [[self alloc] init]; } return _sharedInspectorManager; } - (id) init { if(_sharedInspectorManager == nil) { if((self = [super init]) != nil) { // set the shared instance... modes = [[NSMutableArray alloc] init]; _sharedInspectorManager = self; } } else { RELEASE(self); self = _sharedInspectorManager; } return self; } - (void) dealloc { RELEASE(modes); [super dealloc]; } /** * Add an inspector for a given mode. This allows the addition * of inspectors for different aspects of the same object. */ - (void) addInspectorModeWithIdentifier: (NSString *)ident forObject: (id)obj localizedLabel: (NSString *)label inspectorClassName: (NSString *)className ordering: (float)ord { IBInspectorMode *mode = [[IBInspectorMode alloc] initWithIdentifier: ident forObject: obj localizedLabel: label inspectorClassName: className ordering: ord]; int position = 0; int count = [modes count]; if(ord == -1) { position = count; // last } else { position = (int)ceil((double)ord); if(position > count) { position = count; } } [modes insertObject: mode atIndex: position]; } /** * Position in the inspector list that the "mode inspector" * appears. */ - (unsigned int) indexOfModeWithIdentifier: (NSString *)ident { NSEnumerator *en = [modes objectEnumerator]; int index = 0; id mode = nil; while((mode = [en nextObject]) != nil) { if([[mode identifier] isEqualToString: ident]) { break; } index++; } return index; } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBInspectorMode.h000066400000000000000000000033131475375552500231160ustar00rootroot00000000000000/* IBInspectorMode * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef IBINSPECTORMODE_H #define IBINSPECTORMODE_H #include @class NSString; @interface IBInspectorMode : NSObject { NSString *identifier; NSString *localizedLabel; NSString *inspectorClassName; id object; float ordering; } - (id) initWithIdentifier: (NSString *)ident forObject: (id)obj localizedLabel: (NSString *)lab inspectorClassName: (NSString *)cn ordering: (float)ord; - (void) setIdentifier: (NSString *)ident; - (NSString *) identifier; - (void) setObject: (id)obj; - (id) object; - (void) setLocalizedLabel: (NSString *)label; - (NSString *) localizedLabel; - (void) setInspectorClassName: (NSString *)className; - (NSString *) inspectorClassName; - (void) setOrdering: (float)ord; - (float) ordering; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBInspectorMode.m000066400000000000000000000044411475375552500231260ustar00rootroot00000000000000/* IBInspectorMode * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "IBInspectorMode.h" /** * IBInspectorMode is an internal class in the InterfaceBuilder framework. */ @implementation IBInspectorMode - (id) initWithIdentifier: (NSString *)ident forObject: (id)obj localizedLabel: (NSString *)lab inspectorClassName: (NSString *)cn ordering: (float)ord { if((self = [super init]) != nil) { [self setIdentifier: ident]; [self setObject: obj]; [self setLocalizedLabel: lab]; [self setInspectorClassName: cn]; [self setOrdering: ord]; } return self; } - (void) dealloc { RELEASE(identifier); // RELEASE(object); RELEASE(localizedLabel); RELEASE(inspectorClassName); [super dealloc]; } - (void) setIdentifier: (NSString *)ident { ASSIGN(identifier, ident); } - (NSString *) identifier { return identifier; } - (void) setObject: (id)obj { // don't retain the object, since we are not the owner. object = obj; } - (id) object { return object; } - (void) setLocalizedLabel: (NSString *)lab { ASSIGN(localizedLabel, lab); } - (NSString *) localizedLabel { return localizedLabel; } - (void) setInspectorClassName: (NSString *)cn { ASSIGN(inspectorClassName, cn); } - (NSString *) inspectorClassName { return inspectorClassName; } - (void) setOrdering: (float)ord { ordering = ord; } - (float) ordering { return ordering; } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBObjectAdditions.h000066400000000000000000000022351475375552500234120ustar00rootroot00000000000000/* IBObjectAdditions.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBOBJECTADDITIONS_H #define INCLUDED_IBOBJECTADDITIONS_H #include // object additions -- object adopts protocol @interface NSObject (IBObjectAdditions) @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBObjectAdditions.m000066400000000000000000000040711475375552500234170ustar00rootroot00000000000000/* IBObjectAdditions.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * g * 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include "IBObjectAdditions.h" // object additions -- object adopts protocol @implementation NSObject (_IBObjectAdditions) // Return yes if origClass can substitute for current class, otherwise NO. /* NOTE: Some versions of the runtime handle loading of class methods differently and do not replace them with the later loaded version. For this reason, this method is being removed. + (BOOL)canSubstituteForClass: (Class)origClass { return NO; } */ /** This method is called on all objects after they are loaded into the IBDocuments object. */ - (void)awakeFromDocument: (id )doc { // does nothing... } /** Name for the reciever in the name table. */ - (NSString *)nibLabel: (NSString *)objectName { NSString *label = [NSString stringWithFormat: @"%@(%@)", [self className], objectName]; return label; } /** Title to display in the inspector. */ - (NSString *)objectNameForInspectorTitle { return [self className]; } /** Lists all properties if this object not compatible with IB. */ - (NSArray*) ibIncompatibleProperties { return nil; } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBObjectProtocol.h000066400000000000000000000044661475375552500233050ustar00rootroot00000000000000/* IBObjectAdditions.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBOBJECTPROTOCOL_H #define INCLUDED_IBOBJECTPROTOCOL_H #include @protocol IBObjectProtocol /** * Returns YES, if receiver can be displayed in * the custom custom class inspector as a potential * class which can be switched to by the receiver. */ + (BOOL)canSubstituteForClass: (Class)origClass; /** * Called immediate after loading the document into * the interface editor application. */ - (void)awakeFromDocument: (id )doc; /** * Returns the NSImage to be used to represent an object * of the receiver's class in the editor. */ - (NSImage *)imageForViewer; /** * Label for the receiver in the model. */ - (NSString *)nibLabel: (NSString *)objectName; /** * Title to display in the inspector. */ - (NSString *)objectNameForInspectorTitle; /** * Name of attributes inspector class. */ - (NSString*) inspectorClassName; /** * Name of connection inspector class. */ - (NSString*) connectInspectorClassName; /** * Name of size inspector. */ - (NSString*) sizeInspectorClassName; /** * Name of help inspector. */ - (NSString*) helpInspectorClassName; /** * Name of class inspector. */ - (NSString*) classInspectorClassName; /** * Name of the editor for the receiver. */ - (NSString*) editorClassName; /** * List of properties not compatible with interface app. */ - (NSArray*) ibIncompatibleProperties; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBPalette.h000066400000000000000000000065011475375552500217430ustar00rootroot00000000000000/* IBPalette.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBPALETTE_H #define INCLUDED_IBPALETTE_H #include #include #include // forward references @class NSString; @class NSImage; @class NSWindow; @class NSView; /* * Pasteboard types used for DnD when views are dragged out of a palette * window into another window in Gorm (or, in the case of IBWindowPboardType * onto the desktop). */ IB_EXTERN NSString *IBCellPboardType; IB_EXTERN NSString *IBMenuPboardType; IB_EXTERN NSString *IBMenuCellPboardType; IB_EXTERN NSString *IBObjectPboardType; IB_EXTERN NSString *IBViewPboardType; IB_EXTERN NSString *IBWindowPboardType; IB_EXTERN NSString *IBFormatterPboardType; /* * Pasteboard types used for DnD from images or sounds tab * to views or inspector's textfield onto the desktop). * NOTE: These are specific to Gorm... */ IB_EXTERN NSString *GormImagePboardType; IB_EXTERN NSString *GormSoundPboardType; IB_EXTERN NSString *GormLinkPboardType; @interface IBPalette : NSObject { NSWindow *originalWindow; NSImage *icon; id paletteDocument; } /* * For internal use only - these class methods return the information * associated with a particular view. */ + (id) objectForView: (NSView*)aView; + (NSString*) typeForView: (NSView*)aView; /** * Associate a particular object and DnD type with a view - so that * Gorm knows to initiate a DnD session with the specified object * and type rather than an archived copy of the view itsself and * the default type (IBViewPboardType). */ - (void) associateObject: (id)anObject type: (NSString*)aType with: (NSView*)aView; /** * Releases all the instance variables apart from the window (which is * presumed to release itsself when closed) and removes self as an observer * of notifications before destroying self. */ - (void) dealloc; /** * Method called by GUI builder application when a new palette has been created * and its model (nib/gorm) has been loaded. Any palette initialization should * be done here. */ - (void) finishInstantiate; /** * Return the icon representing the palette. */ - (NSImage*) paletteIcon; /** * Return the window containing the views that may be dragged from the * palette. */ - (NSWindow*) originalWindow; /** * Returns an object representing the palette which conforms to the * IBDocuments protocol. */ - (id) paletteDocument; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBPalette.m000066400000000000000000000101741475375552500217510ustar00rootroot00000000000000/* IBPalette.m * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "IBPalette.h" NSString *IBCellPboardType = @"IBCellPboardType"; NSString *IBMenuPboardType = @"IBMenuPboardType"; NSString *IBMenuCellPboardType = @"IBMenuCellPboardType"; NSString *IBObjectPboardType = @"IBObjectPboardType"; NSString *IBViewPboardType = @"IBViewPboardType"; NSString *IBWindowPboardType = @"IBWindowPboardType"; NSString *IBFormatterPboardType = @"IBFormatterPboardType"; // Gorm specific paste board types.. NSString *GormImagePboardType = @"GormImagePboardType"; NSString *GormSoundPboardType = @"GormSoundPboardType"; NSString *GormLinkPboardType = @"GormLinkPboardType"; @implementation IBPalette static NSMapTable *viewToObject = 0; static NSMapTable *viewToType = 0; + (void) initialize { if (self == [IBPalette class]) { viewToObject = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, NSObjectMapValueCallBacks, 20); viewToType = NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, NSObjectMapValueCallBacks, 20); } } + (id) objectForView: (NSView*)aView { id obj = (id)NSMapGet(viewToObject, (void*)aView); if (obj == nil) { obj = aView; } return obj; } + (NSString*) typeForView: (NSView*)aView { NSString *type = (NSString*)NSMapGet(viewToType, (void*)aView); if (type == nil) { type = IBViewPboardType; } return type; } - (void) associateObject: (id)anObject type: (NSString*)aType with: (NSView*)aView { NSMapInsert(viewToType, (void*)aView, (id)aType); NSMapInsert(viewToObject, (void*)aView, (id)anObject); } - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver: self]; RELEASE(icon); RELEASE(paletteDocument); [super dealloc]; } - (void) finishInstantiate { } - (id) init { NSBundle *bundle; NSDictionary *paletteInfo; NSString *fileName; bundle = [NSBundle bundleForClass: [self class]]; // load the palette dictionary... fileName = [bundle pathForResource: @"palette" ofType: @"table"]; paletteInfo = [[NSString stringWithContentsOfFile: fileName] propertyList]; // load the image... fileName = [paletteInfo objectForKey: @"Icon"]; fileName = [bundle pathForImageResource: fileName]; if (fileName == nil) { NSRunAlertPanel(NULL, [NSString stringWithFormat: @"Palette could not load image %@.", fileName], @"OK", NULL, NULL); AUTORELEASE(self); return nil; } icon = [[NSImage alloc] initWithContentsOfFile: fileName]; // load the nibfile... fileName = [paletteInfo objectForKey: @"NibFile"]; if (fileName != nil && [fileName isEqual: @""] == NO) { NSDictionary *context = [NSDictionary dictionaryWithObjectsAndKeys: self, @"NSOwner",nil]; if ([bundle loadNibFile: fileName externalNameTable: context withZone: NSDefaultMallocZone()] == NO) { NSRunAlertPanel(NULL, [NSString stringWithFormat: @"Palette could not load nib/gorm %@.", fileName], @"OK", NULL, NULL); AUTORELEASE(self); return nil; } } return self; } - (NSImage*) paletteIcon { return icon; } - (NSWindow*) originalWindow { return originalWindow; } - (id) paletteDocument { return paletteDocument; } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBPlugin.h000066400000000000000000000046371475375552500216130ustar00rootroot00000000000000/* IBPlugin.h * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2007 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBPLUGIN_H #define INCLUDED_IBPLUGIN_H #include #include // forward references @class NSString; @class NSArray; @class NSView; @interface IBPlugin : NSObject // Getting the shared plugin... /** * Returns the shared instance of the plugin. */ + (id)sharedInstance; // Loading and unloading plugin resources. /** * Notifies the receiver that the plugin will be loaded. */ - (void) didLoad; /** * Notifies the receiver that the plugin will be unloaded. */ - (void) willUnload; // Getting the plugins nib files. /** * Return the array of custom nib filenames. You are required to override * this method when creating a plugin. */ - (NSArray *) libraryNibNames; // Configuring the plugin /** * Returns the name of the plugin to be displayed. */ - (NSString *) label; /** * The preferences panel/view that should be added to the preferences drop * down and preferences window. */ - (NSView *) preferencesView; /** * Returns the list of frameworks needed to support the plugin. */ - (NSArray *) requiredFrameworks; // Pasteboard notifications... /** * Notifies the receiver that one of it's components will be added to the * document. */ - (NSArray *) pasteboardObjectsForDraggedLibraryView: (NSView *)view; /** * Notifies the receiver that objects were added to the document. */ - (void) document: (id)document didAddDraggedObjects: (NSArray *)roots fromDraggedLibraryView: (NSView *)view; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBPlugin.m000066400000000000000000000060371475375552500216140ustar00rootroot00000000000000/* IBPlugin.m * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2007 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "IBPlugin.h" static NSMapTable *instanceMap = 0; @implementation IBPlugin + (void) initialize { if (instanceMap == 0) { instanceMap = NSCreateMapTable(NSNonRetainedObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 2); } } // Getting the shared plugin... /** * Returns the shared instance of the plugin. */ + (id)sharedInstance { NSString *className = [self className]; id instance = NSMapGet(instanceMap, className); if(instance == nil) { instance = [[[self class] alloc] init]; NSMapInsert(instanceMap, className, instance); RELEASE(instance); } return instance; } // Loading and unloading plugin resources. /** * Notifies the receiver that the plugin will be loaded. */ - (void) didLoad { // do nothing... will be overridden. } /** * Notifies the receiver that the plugin will be unloaded. */ - (void) willUnload { // do nothing... will be overridden. } // Getting the plugins nib files. /** * Return the array of custom nib filenames. You are required to override * this method when creating a plugin. */ - (NSArray *) libraryNibNames { return nil; } // Configuring the plugin /** * Returns the name of the plugin to be displayed. */ - (NSString *) label { return [self className]; } /** * The preferences panel/view that should be added to the preferences drop * down and preferences window. */ - (NSView *) preferencesView { return nil; } /** * Returns the list of frameworks needed to support the plugin. */ - (NSArray *) requiredFrameworks { return nil; } // Pasteboard notifications... /** * Notifies the receiver that one of it's components will be added to the * document. */ - (NSArray *) pasteboardObjectsForDraggedLibraryView: (NSView *)view { return nil; } /** * Notifies the receiver that objects were added to the document. */ - (void) document: (id)document didAddDraggedObjects: (NSArray *)roots fromDraggedLibraryView: (NSView *)view { // do nothing; } - (void) dealloc { NSMapRemove(instanceMap,[self className]); [super dealloc]; } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBProjectFiles.h000066400000000000000000000027641475375552500227450ustar00rootroot00000000000000/* IBProjectFiles.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBPROJECTFILES_H #define INCLUDED_IBPROJECTFILES_H #include @class NSString; @protocol IBProjectFiles /** * The file name. */ - (NSString *) fileName; /** * The file type for this file. */ - (NSString *) fileType; /** * Returns YES, if the file is localized, NO if it's simply in Resources. */ - (BOOL) isLocalized; /** * The language */ - (NSString *) language; /** * The path for the file. */ - (NSString *) path; /** * The project to which this file belongs. */ - (id) project; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBProjects.h000066400000000000000000000055131475375552500221400ustar00rootroot00000000000000/* IBProjects.h * * Copyright (C) 2004 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2004 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBPROJECTS_H #define INCLUDED_IBPROJECTS_H #include #include @class NSString, NSArray; @protocol IBProjects /** * Called to retrieve the application icon to be used for the * interface/language combination. */ - (id) applicationIconForInterfaceStyle: (NSInterfaceStyle)style inLanguage: (NSString *)lang; /** * Returns YES, if the file is in the given path. */ - (BOOL) containsFileAtPath: (NSString *)path; /** * Returns an array containing the list of files of that filetype * in the project. */ - (NSArray *) filesForFileType: (NSString *)type; /** * Returns YES, if child is a child of the reciever. */ - (BOOL) isAncestorOfProject: (id) child; /** * Returns YES, if parent is a parent of the receiver. */ - (BOOL) isDescendantOfProject: (id) parent; /** * Is there currently a connection to the project. */ - (BOOL) isLive; /** * Returns the language for the file at the given path. */ - (NSString *) languageForFileAtPath: (NSString *)path; /** * Returns the nib for the interface/style combination. */ - (id) mainNibFileForInterfaceStyle: (NSInterfaceStyle)style inLanguage: (NSString *)lang; /** * Locates and returns the location of filename within the * receiver. */ - (NSString *) pathForFilename: (NSString *)filename; /** * Returns the full path for the project directory. */ - (NSString *) projectDirectory; /** * Returns the project manager object. */ - (id) projectManager; /** * The name of the project. */ - (NSString *) projectName; /** * The topmost project in the project hierarchy containing the receiver. */ - (id) rootProject; /** * Any and all direct subjects of this project. */ - (NSArray *) subprojects; /** * The project which is the direct parent of the receiver. */ - (id) superproject; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBResourceManager.h000066400000000000000000000077461475375552500234430ustar00rootroot00000000000000/* IBResourceManager.h * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBRESOURCEMANAGER_H #define INCLUDED_IBRESOURCEMANAGER_H #include #include #include #include @class NSString, NSPasteboard, NSMutableArray; /** * Notification sent when a resource manager class is added to /removed from * the registry. */ IB_EXTERN NSString *IBResourceManagerRegistryDidChangeNotification; /** * Enumerated type to allow specification of where the resource * lives. */ enum IBResourceLocation { kNibResource = 0, kProjectResource, kPaletteResource, kSystemResource, kUnknownResource }; @interface IBResourceManager : NSObject { id document; } /** * Register the given class as a resource mananger. */ + (void) registerResourceManagerClass: (Class)managerClass; /** * Register the given class as a resource manager for the frameworks in the array. */ + (void) registerResourceManagerClass: (Class)managerClass forFrameworks: (NSArray *)frameworks; /** * Return an array of classes for the given framework. */ + (NSArray *) registeredResourceManagerClassesForFramework: (NSString *)framework; /** * Returns YES, if the pasteboard contains a type the resource * manager can accept. */ - (BOOL) acceptsResourcesFromPasteboard: (NSPasteboard *)pboard; /** * Add a resource. */ - (void) addResources: (NSArray *)resourceList; /** * Add resoures from the pasteboard. Invokes the * acceptsResourcesFromPasteboard: method to determine * if the resources will be added. */ - (void) addResourcesFromPasteboard: (NSPasteboard *)pboard; /** * Called by an external application when a file owned by * the GUI builder is modified. */ - (void) application: (NSString *) appName didModifyFileAtPath: (NSString *)path; /** * Returns the document with which this resource manager is * associated. */ - (id) document; /** * Instantiate the resource manager with the given * document object. */ - (id) initWithDocument: (id)document; /** * Returns YES, if this resource manager is non-modifiable. */ - (BOOL) isReadOnly; /** * Called by an external application when the a file * is added. */ - (void) project: (id)proj didAddFile: (id)file; /** * Called by an external application when the a file * changes localization. */ - (void) project: (id)proj didChangeLocalizationOfFile: (id)file; /** * Called by an external application when a file * is removed. */ - (void) project: (id)proj didRemoveFile: (id)file; /** * Returns a list of resource file types this manager can accept. */ - (NSArray *) resourceFileTypes; /** * Returns a list of pasteboard types this manager can accept. */ - (NSArray *) resourcePasteboardTypes; /** * Returns the associated resources for the objects. */ - (NSArray *) resourcesForObjects: (NSArray *)objs; /** * Writes a resource to the document path. */ - (void) writeToDocumentPath: (NSString *)path; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBResourceManager.m000066400000000000000000000126071475375552500234400ustar00rootroot00000000000000/* IBResourceManager.m * * Copyright (C) 2005 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2005 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include "IBResourceManager.h" #include "IBObjectAdditions.h" #include "IBPalette.h" NSString *IBResourceManagerRegistryDidChangeNotification = @"IBResourceManagerRegistryDidChangeNotification"; static NSMapTable *_resourceManagers = NULL; @implementation IBResourceManager : NSObject /** * Create the resource manager table. */ + (BOOL) _createTable { if(_resourceManagers == NULL) { _resourceManagers = NSCreateMapTable(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 2); } return (_resourceManagers != NULL); } /** * Add a class to the resourceManager master list of classes. */ + (void) _addClass: (Class)managerClass { if([self _createTable]) { NSMutableArray *list = NSMapGet(_resourceManagers, [NSNull null]); if(list == nil) { list = [NSMutableArray array]; NSMapInsert(_resourceManagers, [NSNull null], list); } if([list containsObject: managerClass] == NO) { [list addObject: managerClass]; } } } + (void) registerResourceManagerClass: (Class)managerClass { [self _addClass: managerClass]; // notify [[NSNotificationCenter defaultCenter] postNotificationName: IBResourceManagerRegistryDidChangeNotification object: managerClass]; } + (void) registerResourceManagerClass: (Class)managerClass forFrameworks: (NSArray *)frameworks { if([self _createTable]) { NSMutableArray *list = nil; if(frameworks == nil) { [self _addClass: managerClass]; } else { NSEnumerator *en = [frameworks objectEnumerator]; NSString *fw = nil; // add it to all of the frameworks. while((fw = [en nextObject]) != nil) { list = NSMapGet(_resourceManagers, fw); if(list == nil) { list = [NSMutableArray array]; NSMapInsert(_resourceManagers, fw, list); } if([list containsObject: managerClass] == NO) { [list addObject: managerClass]; } } // also add it to the master list. [self _addClass: managerClass]; } // notify [[NSNotificationCenter defaultCenter] postNotificationName: IBResourceManagerRegistryDidChangeNotification object: managerClass]; } } + (NSArray *) registeredResourceManagerClassesForFramework: (NSString *)framework { return (NSArray *)(NSMapGet(_resourceManagers, ((framework == nil)?(void *)[NSNull null]:framework))); } - (BOOL) acceptsResourcesFromPasteboard: (NSPasteboard *)pboard { NSArray *types = [pboard types]; NSArray *resourcePbTypes = [self resourcePasteboardTypes]; NSString *type = [types firstObjectCommonWithArray: resourcePbTypes]; return (type != nil); } - (void) addResources: (NSArray *)resourceList { [document attachObjects: resourceList toParent: nil]; } - (void) addResourcesFromPasteboard: (NSPasteboard *)pboard { NSArray *resourcePbTypes = [self resourcePasteboardTypes]; NSString *type = nil; NSEnumerator *en = [resourcePbTypes objectEnumerator]; while((type = [en nextObject]) != nil) { NSData *data = [pboard dataForType: type]; if(data != nil) { NS_DURING { id obj = [NSUnarchiver unarchiveObjectWithData: data]; if(obj != nil) { // the object is an array of objects of this type. [self addResources: obj]; } } NS_HANDLER { NSLog(@"Problem adding resource: %@",[localException reason]); } NS_ENDHANDLER; } } } - (void) application: (NSString *) appName didModifyFileAtPath: (NSString *)path { // does nothing. } - (id) document { return document; } - (id) initWithDocument: (id)doc { if((self = [super init]) != nil) { document = doc; // weak connection. } return self; } /** * Deallocate the object. */ - (void) dealloc { document = nil; [super dealloc]; } - (BOOL) isReadOnly; { return NO; } - (void) project: (id)proj didAddFile: (id)file { } - (void) project: (id)proj didChangeLocalizationOfFile: (id)file { } - (void) project: (id)proj didRemoveFile: (id)file { // does nothing in base implementation. } - (NSArray *) resourceFileTypes { return nil; } - (NSArray *) resourcePasteboardTypes { return [NSArray arrayWithObjects: IBObjectPboardType, nil]; } - (NSArray *) resourcesForObjects: (NSArray *)objs; { return nil; } - (void) writeToDocumentPath: (NSString *)path { // does nothing in base implementation. } @end apps-gorm-gorm-1_5_0/InterfaceBuilder/IBSystem.h000066400000000000000000000030371475375552500216320ustar00rootroot00000000000000/** Platform specific definitions for externs Copyright (C) 2001 Free Software Foundation, Inc. Written by: Gregory John Casamento Based on AppKitDefines.h by: Adam Fedor Date: Dec, 2004 This file is part of GNUstep. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser 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. */ #ifndef IBSystem_INCLUDE #define IBSystem_INCLUDE #ifdef GNUSTEP_WITH_DLL #if BUILD_libInterfaceBuilder_DLL # if defined(__MINGW32__) /* On Mingw, the compiler will export all symbols automatically, so * __declspec(dllexport) is not needed. */ # define IB_EXTERN extern # else # define IB_EXTERN __declspec(dllexport) # endif #else # define IB_EXTERN extern __declspec(dllimport) #endif #else /* GNUSTEP_WITH[OUT]_DLL */ # define IB_EXTERN extern #endif #endif /* IBSystem_INCLUDE */ apps-gorm-gorm-1_5_0/InterfaceBuilder/IBViewAdditions.h000066400000000000000000000021751475375552500231210ustar00rootroot00000000000000/* IBViewAdditions.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBVIEWADDITIONS_H #define INCLUDED_IBVIEWADDITIONS_H #include #include @interface NSView (IBViewAdditions) @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBViewProtocol.h000066400000000000000000000035101475375552500227760ustar00rootroot00000000000000/* IBViewProtocol.h * * Copyright (C) 1999 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 1999 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBVIEWPROTOCOL_H #define INCLUDED_IBVIEWPROTOCOL_H #include #include // forward references @class NSColor; @protocol IBViewProtocol /** * Returns YES, if color can be set at the given point in the view. */ - (BOOL) acceptsColor: (NSColor*)color atPoint: (NSPoint)point; /** * Returns YES if receiver can be alt-dragged. */ - (BOOL) allowsAltDragging; /** * Sets color at point in the receiver. */ - (void) depositColor: (NSColor*)color atPoint: (NSPoint)point; /** * The maximum size for a knob surrounding the receiver. */ - (NSSize) maximumSizeFromKnobPosition: (IBKnobPosition)knobPosition; /** * The minimum size for a knob surrounding the receiver. */ - (NSSize) minimumSizeFromKnobPosition: (IBKnobPosition)position; /** * Places and resizes the receiver using newFrame. */ - (void) placeView: (NSRect)newFrame; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/IBViewResourceDragging.h000066400000000000000000000046151475375552500244360ustar00rootroot00000000000000/* IBViewResourceDragging.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #ifndef INCLUDED_IBVIEWRESOURCEDRAGGING_H #define INCLUDED_IBVIEWRESOURCEDRAGGING_H #include @class NSPasteboard; /** * Protocol describing those methods needed to accept resources. */ @protocol IBViewResourceDraggingDelegates /** * Ask if the view accepts the object. */ - (BOOL) acceptsViewResourceFromPasteboard: (NSPasteboard *)pb forObject: (id)obj atPoint: (NSPoint)p; /** * Perform the action of depositing the object. */ - (void) depositViewResourceFromPasteboard: (NSPasteboard *)pb onObject: (id)obj atPoint: (NSPoint)p; /** * Should we draw the connection frame when the resource is * dragged in? */ - (BOOL) shouldDrawConnectionFrame; /** * Types of resources accepted by this view. */ - (NSArray *)viewResourcePasteboardTypes; @end /** * Informal protocol on NSView. */ @interface NSView (IBViewResourceDraggingDelegates) /** * Types accepted by the view. */ + (NSArray *) acceptedViewResourcePasteboardTypes; /** * Return the list of registered delegates. */ + (NSArray *) registeredViewResourceDraggingDelegates; /** * Register a delegate. */ + (void) registerViewResourceDraggingDelegate: (id)delegate; /** * Remove a previously registered delegate. */ + (void) unregisterViewResourceDraggingDelegate: (id)delegate; @end #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/InterfaceBuilder.h000066400000000000000000000043041475375552500233400ustar00rootroot00000000000000/* InterfaceBuilder.h * * Copyright (C) 2003 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2003 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #ifndef GNUSTEP //! Project version number for InterfaceBuilder. FOUNDATION_EXPORT double InterfaceBuilderVersionNumber; //! Project version string for InterfaceBuilder. FOUNDATION_EXPORT const unsigned char InterfaceBuilderVersionString[]; #endif #ifndef INCLUDED_INTERFACEBUILDER_H #define INCLUDED_INTERFACEBUILDER_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif apps-gorm-gorm-1_5_0/InterfaceBuilder/README.md000066400000000000000000000006671475375552500212470ustar00rootroot00000000000000# InterfaceBuilder framework This is a clone of the InterfaceBuilder framework. InteraceBuilder framework's primary purpose is to allow the creation of custom palettes and inspectors outside of Gorm. This will also facilitate the extension of Gorm since it will allow outside applications to have an interface with which they can interact with the running Gorm application. You must install this library before you can build Gorm. apps-gorm-gorm-1_5_0/InterfaceBuilder/Version000066400000000000000000000006461475375552500213350ustar00rootroot00000000000000 # 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. GNUSTEP_GCC=3.1.0 # GNUstep version required GNUSTEP_CORE_VERSION=0.11.0 # The version number of this release. MAJOR_VERSION=1 MINOR_VERSION=1 SUBMINOR_VERSION=0 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} apps-gorm-gorm-1_5_0/Plugins/000077500000000000000000000000001475375552500161715ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Plugins/GModel/000077500000000000000000000000001475375552500173405ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Plugins/GModel/GNUmakefile000066400000000000000000000024511475375552500214140ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = GModel BUNDLE_EXTENSION = .plugin GModel_PRINCIPAL_CLASS = GormGModelPlugin GModel_OBJC_FILES = GormGModelPlugin.m \ GormGModelWrapperLoader.m GModel_RESOURCE_FILES = GModel_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Plugins/GModel/GNUmakefile.preamble000066400000000000000000000012321475375552500231760ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../ ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework $(BUNDLE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Plugins/GModel/GormGModelPlugin.m000066400000000000000000000023041475375552500226700ustar00rootroot00000000000000/* GormGModelPlugin.m * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2007 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #include #include #include "GormGModelWrapperLoader.h" @interface GormGModelPlugin : GormPlugin @end @implementation GormGModelPlugin - (void) didLoad { [self registerDocumentTypeName: [GormGModelWrapperLoader fileType] humanReadableName: @"GNUstep GModel" forExtensions: [NSArray arrayWithObjects: @"gmodel",nil]]; } @end apps-gorm-gorm-1_5_0/Plugins/GModel/GormGModelWrapperLoader.h000066400000000000000000000020411475375552500241720ustar00rootroot00000000000000/* GormNibWrapperLoader * * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #ifndef GORM_GMODELWRAPPERLOADER #define GORM_GMODELWRAPPERLOADER #include @class NSMutableArray, NSString; @interface GormGModelWrapperLoader : GormWrapperLoader @end #endif apps-gorm-gorm-1_5_0/Plugins/GModel/GormGModelWrapperLoader.m000066400000000000000000000452651475375552500242160ustar00rootroot00000000000000/* GModelDecoder * * Copyright (C) 2002 Free Software Foundation, Inc. * * Author: Adam Fedor * Date: 2002 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include #include #include "GormGModelWrapperLoader.h" static Class gmodel_class(NSString *className); static id gormNibOwner; static id gormRealObject; static BOOL gormFileOwnerDecoded; @interface NSWindow (GormPrivate) - (void) gmSetStyleMask: (unsigned int)mask; @end @implementation NSWindow (GormPrivate) // private method to change the Window style mask on the fly - (void) gmSetStyleMask: (unsigned int)mask { _styleMask = mask; [GSServerForWindow(self) stylewindow: mask : [self windowNumber]]; } @end @interface NSWindow (GormNSWindowPrivate) - (unsigned int) _styleMask; @end @interface GModelApplication : NSObject { id _mainMenu; id _windowMenu; id _delegate; NSArray *_windows; } + (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver; - (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver; - mainMenu; - windowMenu; - delegate; - (NSArray *) windows; @end @implementation GModelApplication - (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver { NSEnumerator *enumerator; NSWindow *win; _mainMenu = [unarchiver decodeObjectWithName:@"mainMenu"]; _windows = [unarchiver decodeObjectWithName:@"windows"]; enumerator = [_windows objectEnumerator]; while ((win = [enumerator nextObject]) != nil) { /* Fix up window frames */ if ([win styleMask] == NSBorderlessWindowMask) { NSLog(@"Fixing borderless window %@", win); [win gmSetStyleMask: NSTitledWindowMask]; } /* Fix up the background color */ [win setBackgroundColor: [NSColor windowBackgroundColor]]; } _delegate = [unarchiver decodeObjectWithName:@"delegate"]; return self; } - (NSArray *) windows { return _windows; } - mainMenu { return _mainMenu; } - windowMenu { return _windowMenu; } - delegate { return _delegate; } + (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver { return AUTORELEASE([[GModelApplication alloc] init]); } @end @interface GModelMenuTemplate : NSObject { NSString *menuClassName; id realObject; } + (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver; - (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver; @end @implementation GModelMenuTemplate - (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver { menuClassName = [unarchiver decodeObjectWithName:@"menuClassName"]; realObject = [unarchiver decodeObjectWithName: @"realObject"]; // RELEASE(self); return realObject; } + (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver { return AUTORELEASE([[GModelMenuTemplate alloc] init]); } @end @implementation GormObjectProxy (GModel) + (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver { return AUTORELEASE([[self alloc] init]); } - (id)initWithModelUnarchiver: (GMUnarchiver*)unarchiver { // id extension; id realObject; theClass = RETAIN([unarchiver decodeStringWithName: @"className"]); // extension = [unarchiver decodeObjectWithName: @"extension"]; realObject = [unarchiver decodeObjectWithName: @"realObject"]; //real = [unarchiver representationForName: @"realObject" isLabeled: &label]; if (!gormFileOwnerDecoded || [realObject isKindOfClass: [GModelApplication class]]) { gormFileOwnerDecoded = YES; gormNibOwner = self; gormRealObject = realObject; } return self; } @end @implementation GormCustomView (GModel) + (id)createObjectForModelUnarchiver:(GMUnarchiver*)unarchiver { return AUTORELEASE([[self alloc] initWithFrame: NSMakeRect(0,0,10,10)]); } - (id)initWithModelUnarchiver:(GMUnarchiver*)unarchiver { NSString *cn; id realObject; // id extension; cn = [unarchiver decodeStringWithName: @"className"]; // extension = [unarchiver decodeObjectWithName: @"extension"]; realObject = [unarchiver decodeObjectWithName: @"realObject"]; [self setFrame: [unarchiver decodeRectWithName: @"frame"]]; [self setClassName: cn]; if (!gormFileOwnerDecoded) { gormFileOwnerDecoded = YES; gormNibOwner = self; gormRealObject = realObject; } return self; } @end @interface GormDocument (GModelLoaderAdditions) - (void) defineClass: (id)className inFile: (NSString *)path; - (id) connectionObjectForObject: object; - (NSDictionary *) processModel: (NSMutableDictionary *)model inPath: (NSString *)path; @end @implementation GormDocument (GModelLoaderAdditions) /* Try to define a possibly custom class that's in the gmodel file. This is not information that is contained in the file itself. For instance, we don't even know what the superclass is, and at best, we could search the connections to see what outlets and actions are used. */ - (void) defineClass: (id)className inFile: (NSString *)path { int result; NSString *header; NSFileManager *mgr; NSRange notFound = NSMakeRange(NSNotFound, 0); if ([classManager isKnownClass: className]) return; /* Can we parse a header in this directory? */ mgr = [NSFileManager defaultManager]; path = [path stringByDeletingLastPathComponent]; header = [path stringByAppendingPathComponent: className]; header = [header stringByAppendingPathExtension: @"h"]; if ([mgr fileExistsAtPath: header]) { result = NSRunAlertPanel(_(@"GModel Loading"), _(@"Parse %@ to define unknown class %@?"), _(@"Yes"), _(@"No"), _(@"Choose File"), header, className, nil); } else { result = NSRunAlertPanel(_(@"GModel Loading"), _(@"Unknown class %@. Parse header file to define?"), _(@"Yes"), _(@"No, Choose Superclass"), nil, className, nil); if (result == NSAlertDefaultReturn) result = NSAlertOtherReturn; } if (result == NSAlertOtherReturn) { NSOpenPanel *opanel = [NSOpenPanel openPanel]; NSArray *fileTypes = [NSArray arrayWithObjects: @"h", @"H", nil]; result = [opanel runModalForDirectory: path file: nil types: fileTypes]; if (result == NSOKButton) { header = [opanel filename]; result = NSAlertDefaultReturn; } } // make a guess and warn the user if (result != NSAlertDefaultReturn) { NSString *superClass = promptForClassName([NSString stringWithFormat: @"Superclass: %@",className], [classManager allClassNames]); BOOL added = NO; // cheesy attempt to determine superclass.. if(superClass == nil) { if([className isEqual: @"GormCustomView"]) { superClass = @"NSView"; } else if(NSEqualRanges(notFound,[className rangeOfString: @"Window"]) == NO) { superClass = @"NSWindow"; } else if(NSEqualRanges(notFound,[className rangeOfString: @"Panel"]) == NO) { superClass = @"NSPanel"; } else { superClass = @"NSObject"; } } added = [classManager addClassNamed: className withSuperClassNamed: superClass withActions: [NSMutableArray array] withOutlets: [NSMutableArray array]]; // inform the user... if(added) { NSLog(@"Added class %@ with superclass of %@.", className, superClass); } else { NSLog(@"Failed to add class %@ with superclass of %@.", className, superClass); } } else { NS_DURING { if(![classManager parseHeader: header]) { NSString *file = [header lastPathComponent]; NSString *message = [NSString stringWithFormat: _(@"Unable to parse class in %@"),file]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } } NS_HANDLER { NSString *message = [localException reason]; NSRunAlertPanel(_(@"Problem parsing class"), message, nil, nil, nil); } NS_ENDHANDLER; } } /* Replace the proxy with the real object if necessary and make sure there is a name for the connection object */ - (id) connectionObjectForObject: object { if (object == nil) return nil; if (object == gormNibOwner) object = filesOwner; else [self setName: nil forObject: object]; return object; } - (NSDictionary *) processModel: (NSMutableDictionary *)model inPath: (NSString *)path { NSMutableDictionary *customMap = nil; NSEnumerator *en = [model keyEnumerator]; NSMutableArray *deleted = [NSMutableArray array]; id key; NSLog(@"Processing model..."); while((key = [en nextObject]) != nil) { NSDictionary *obj = [model objectForKey: key]; if(obj != nil) { if([obj isKindOfClass: [NSDictionary class]]) { NSString *objIsa = [(NSMutableDictionary *)obj objectForKey: @"isa"]; Class cls = NSClassFromString(objIsa); if(cls == nil) { // Remove this class. It's not defined on GNUstep and it's generally // useless. if([objIsa isEqual: @"NSNextStepFrame"]) { NSString *subviewsKey = [obj objectForKey: @"subviews"]; NSDictionary *subviews = [model objectForKey: subviewsKey]; NSArray *elements = [subviews objectForKey: @"elements"]; NSEnumerator *subViewEnum = [elements objectEnumerator]; NSString *svkey = nil; while((svkey = [subViewEnum nextObject]) != nil) { [deleted addObject: svkey]; } [deleted addObject: key]; [deleted addObject: subviewsKey]; continue; } if([objIsa isEqual: @"NSImageCacheView"]) { // this is eliminated in the NSNextStepFrame section above. continue; } if([classManager isKnownClass: objIsa] == NO && [objIsa isEqual: @"IMControlConnector"] == NO && [objIsa isEqual: @"IMOutletConnector"] == NO && [objIsa isEqual: @"IMCustomObject"] == NO && [objIsa isEqual: @"IMCustomView"] == NO) { NSString *superClass; NSLog(@"%@ is not a known class",objIsa); [self defineClass: objIsa inFile: path]; superClass = [classManager superClassNameForClassNamed: objIsa]; [(NSMutableDictionary *)obj setObject: superClass forKey: @"isa"]; } } } } } // remove objects marked for deletion the model. en = [deleted objectEnumerator]; while((key = [en nextObject]) != nil) { [model removeObjectForKey: key]; } return customMap; } @end @implementation GormGModelWrapperLoader + (NSString *) fileType { return @"GSGModelFileType"; } /* importing of legacy gmodel files.*/ - (BOOL) loadFileWrapper: (NSFileWrapper *)wrapper withDocument: (GormDocument *) doc { id obj, con; id unarchiver; id decoded; NSEnumerator *enumerator; NSArray *gmobjects; NSArray *gmconnections; Class u = gmodel_class(@"GMUnarchiver"); NSString *delegateClass = nil; NSData *data = [wrapper regularFileContents]; NSString *dictString = AUTORELEASE([[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding]); NSMutableDictionary *model = [NSMutableDictionary dictionaryWithDictionary: [dictString propertyList]]; NSString *path = [[wrapper filename] stringByDeletingLastPathComponent]; gormNibOwner = nil; gormRealObject = nil; gormFileOwnerDecoded = NO; /* GModel classes */ [u decodeClassName: @"NSApplication" asClassName: @"GModelApplication"]; [u decodeClassName: @"IMCustomView" asClassName: @"GormCustomView"]; [u decodeClassName: @"IMCustomObject" asClassName: @"GormObjectProxy"]; /* Gorm classes */ [u decodeClassName: @"NSMenu" asClassName: @"GormNSMenu"]; [u decodeClassName: @"NSWindow" asClassName: @"GormNSWindow"]; [u decodeClassName: @"NSPanel" asClassName: @"GormNSPanel"]; [u decodeClassName: @"NSBrowser" asClassName: @"GormNSBrowser"]; [u decodeClassName: @"NSTableView" asClassName: @"GormNSTableView"]; [u decodeClassName: @"NSOutlineView" asClassName: @"GormNSOutlineView"]; [u decodeClassName: @"NSPopUpButton" asClassName: @"GormNSPopUpButton"]; [u decodeClassName: @"NSPopUpButtonCell" asClassName: @"GormNSPopUpButtonCell"]; [u decodeClassName: @"NSOutlineView" asClassName: @"GormNSOutlineView"]; [u decodeClassName: @"NSMenuTemplate" asClassName: @"GModelMenuTemplate"]; [u decodeClassName: @"NSCStringText" asClassName: @"NSText"]; // process the model to take care of any custom classes... [doc processModel: model inPath: path]; // initialize with the property list... unarchiver = [[u alloc] initForReadingWithPropertyList: [[model description] propertyList]]; if (!unarchiver) { return NO; } NS_DURING { decoded = [unarchiver decodeObjectWithName:@"RootObject"]; } NS_HANDLER { NSRunAlertPanel(_(@"GModel Loading"), [localException reason], @"Ok", nil, nil); return NO; } NS_ENDHANDLER gmobjects = [decoded performSelector: @selector(objects)]; gmconnections = [decoded performSelector: @selector(connections)]; if (gormNibOwner) { [doc defineClass: [gormNibOwner className] inFile: path]; [[document filesOwner] setClassName: [gormNibOwner className]]; } /* * Now we merge the objects from the gmodel into our own data * structures. */ enumerator = [gmobjects objectEnumerator]; while ((obj = [enumerator nextObject])) { if (obj != gormNibOwner) { [doc attachObject: obj toParent: nil]; } if([obj isKindOfClass: [GormObjectProxy class]]) { if([[obj className] isEqual: @"NSFontManager"]) { // if it's the font manager, take care of it... [doc setName: @"NSFont" forObject: obj]; [doc attachObject: obj toParent: nil]; } else { NSLog(@"processing... %@",[obj className]); [doc defineClass: [obj className] inFile: path]; } } } // build connections... enumerator = [gmconnections objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { NSNibConnector *newcon; id source, dest; source = [doc connectionObjectForObject: [con source]]; dest = [doc connectionObjectForObject: [con destination]]; NSDebugLog(@"connector = %@",con); if ([[con className] isEqual: @"IMOutletConnector"]) // We don't link the gmodel library at compile time... { newcon = AUTORELEASE([[NSNibOutletConnector alloc] init]); if(![[doc classManager] isOutlet: [con label] ofClass: [source className]]) { [[doc classManager] addOutlet: [con label] forClassNamed: [source className]]; } if([[source className] isEqual: @"NSApplication"]) { delegateClass = [dest className]; } } else { NSString *className = (dest == nil)?(NSString *)@"FirstResponder":(NSString *)[dest className]; newcon = AUTORELEASE([[NSNibControlConnector alloc] init]); if(![[doc classManager] isAction: [con label] ofClass: className]) { [[doc classManager] addAction: [con label] forClassNamed: className]; } } NSDebugLog(@"conn = %@ source = %@ dest = %@ label = %@, src name = %@ dest name = %@", newcon, source, dest, [con label], [source className], [dest className]); [newcon setSource: source]; [newcon setDestination: (dest != nil)?dest:[doc firstResponder]]; [newcon setLabel: [con label]]; [[doc connections] addObject: newcon]; } // make sure that all of the actions on the application's delegate object are also added to FirstResponder. enumerator = [[doc connections] objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { if([con isKindOfClass: [NSNibControlConnector class]]) { id dest = [con destination]; if([[dest className] isEqual: delegateClass]) { if(![[doc classManager] isAction: [con label] ofClass: @"FirstResponder"]) { [[doc classManager] addAction: [con label] forClassNamed: @"FirstResponder"]; } } } } if ([gormRealObject isKindOfClass: [GModelApplication class]]) { if([gormRealObject respondsToSelector: @selector(windows)]) { enumerator = [[gormRealObject windows] objectEnumerator]; while ((obj = [enumerator nextObject])) { if([obj isKindOfClass: [NSWindow class]]) { if([obj _styleMask] == 0) { // Skip borderless window. Borderless windows are // sometimes used as temporary objects in nib files, // they will show up unless eliminated. continue; } } [doc attachObject: obj toParent: nil]; } if([gormRealObject respondsToSelector: @selector(mainMenu)]) { if ([(GModelApplication *)gormRealObject mainMenu]) { [doc attachObject: [(GModelApplication *)gormRealObject mainMenu] toParent: nil]; } } } } else if(gormRealObject != nil) { // Here we need to addClass:... (outlets, actions). */ [doc defineClass: [gormRealObject className] inFile: path]; } else { NSLog(@"Don't understand real object %@", gormRealObject); } [doc rebuildObjToNameMapping]; // clear the changes, since we just loaded the document. [document updateChangeCount: NSChangeCleared]; return YES; } @end static Class gmodel_class(NSString *className) { static Class gmclass = Nil; if (gmclass == Nil) { NSBundle *theBundle; NSEnumerator *benum; NSString *path; /* Find the bundle */ benum = [NSStandardLibraryPaths() objectEnumerator]; while ((path = [benum nextObject])) { path = [path stringByAppendingPathComponent: @"Bundles"]; path = [path stringByAppendingPathComponent: @"libgmodel.bundle"]; if ([[NSFileManager defaultManager] fileExistsAtPath: path]) break; path = nil; } NSCAssert(path != nil, @"Unable to load gmodel bundle"); NSDebugLog(@"Loading gmodel from %@", path); theBundle = [NSBundle bundleWithPath: path]; NSCAssert(theBundle != nil, @"Can't init gmodel bundle"); gmclass = [theBundle classNamed: className]; NSCAssert(gmclass, @"Can't load gmodel bundle"); } return gmclass; } apps-gorm-gorm-1_5_0/Plugins/GNUmakefile000066400000000000000000000022741475375552500202500ustar00rootroot00000000000000# GNUmakefile: main makefile for Gorm palettes # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2007 # # This file is part of GNUstep. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. # PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make # # Each palette is a subproject # SUBPROJECTS = \ Gorm \ Nib \ GModel \ Xib -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Plugins/Gorm/000077500000000000000000000000001475375552500170755ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Plugins/Gorm/GNUmakefile000066400000000000000000000024641475375552500211550ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = Gorm BUNDLE_EXTENSION = .plugin Gorm_PRINCIPAL_CLASS = GormGormPlugin Gorm_OBJC_FILES = GormGormPlugin.m \ GormGormWrapperBuilder.m \ GormGormWrapperLoader.m Gorm_RESOURCE_FILES = Gorm_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Plugins/Gorm/GNUmakefile.preamble000066400000000000000000000012321475375552500227330ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../ ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework $(BUNDLE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Plugins/Gorm/GormGormPlugin.m000066400000000000000000000022661475375552500221710ustar00rootroot00000000000000/* GormGormPlugin.m * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2007 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #include #include #include "GormGormWrapperLoader.h" @interface GormGormPlugin : GormPlugin @end @implementation GormGormPlugin - (void) didLoad { [self registerDocumentTypeName: [GormGormWrapperLoader fileType] humanReadableName: @"GNUstep Gorm" forExtensions: [NSArray arrayWithObjects: @"gorm",nil]]; } @end apps-gorm-gorm-1_5_0/Plugins/Gorm/GormGormWrapperBuilder.m000066400000000000000000000217101475375552500236550ustar00rootroot00000000000000/* GormWrapperBuilder * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include @interface GormDocument (BuilderAdditions) - (void) prepareConnections; - (void) resetConnections; @end @implementation GormDocument (BuilderAdditions) /** * Start the process of archiving. */ - (void) prepareConnections { NSEnumerator *enumerator; id con; id obj; /* * Map all connector sources and destinations to their name strings. * Deactivate editors so they won't be archived. */ enumerator = [connections objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { NSString *name; obj = [con source]; name = [self nameForObject: obj]; [con setSource: name]; obj = [con destination]; name = [self nameForObject: obj]; [con setDestination: name]; } /* * Remove objects and connections that shouldn't be archived. */ NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSOwner"]); [nameTable removeObjectForKey: @"NSOwner"]; NSMapRemove(objToName, (void*)[nameTable objectForKey: @"NSFirst"]); [nameTable removeObjectForKey: @"NSFirst"]; /* Add information about the NSOwner to the archive */ NSMapInsert(objToName, (void*)[filesOwner className], (void*)@"NSOwner"); [nameTable setObject: [filesOwner className] forKey: @"NSOwner"]; /* * Set the appropriate profile so that we save the right versions of * the classes for older GNUstep releases. */ [filePrefsManager setClassVersions]; } /** * Stop the archiving process. */ - (void) resetConnections { NSEnumerator *enumerator; id con; id obj; /* * Restore class versions. */ [filePrefsManager restoreClassVersions]; /* * Restore removed objects. */ [nameTable setObject: filesOwner forKey: @"NSOwner"]; NSMapInsert(objToName, (void*)filesOwner, (void*)@"NSOwner"); [nameTable setObject: firstResponder forKey: @"NSFirst"]; NSMapInsert(objToName, (void*)firstResponder, (void*)@"NSFirst"); /* * Map all connector source and destination names to their objects. */ enumerator = [connections objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { NSString *name; name = (NSString*)[con source]; obj = [self objectForName: name]; [con setSource: obj]; name = (NSString*)[con destination]; obj = [self objectForName: name]; [con setDestination: obj]; } } @end @interface GSNibContainer (BuilderAdditions) - (id) initWithDocument: (GormDocument *)document; @end; @implementation GSNibContainer (BuilderAdditions) - (id) initWithDocument: (GormDocument *)document { if((self = [self init]) != nil) { NSDictionary *custom = [[document classManager] customClassMap]; // Create the container for the .gorm file... [topLevelObjects addObjectsFromArray: [[document topLevelObjects] allObjects]]; [nameTable addEntriesFromDictionary: [document nameTable]]; [connections addObjectsFromArray: [document connections]]; [visibleWindows addObjectsFromArray: [[document visibleWindows] allObjects]]; [deferredWindows addObjectsFromArray: [[document deferredWindows] allObjects]]; [customClasses addEntriesFromDictionary: custom]; } return self; } @end @interface GormGormWrapperBuilder : GormWrapperBuilder @end @implementation GormGormWrapperBuilder + (NSString *) fileType { return @"GSGormFileType"; } /** * Private method which iterates through the list of custom classes and instructs * the archiver to replace the actual object with template during the archiving * process. */ - (void) _replaceObjectsWithTemplates: (NSArchiver *)archiver { NSEnumerator *en = [[document nameTable] keyEnumerator]; GormClassManager *classManager = [document classManager]; GormFilePrefsManager *filePrefsManager = [document filePrefsManager]; id key = nil; // loop through all custom objects and windows while((key = [en nextObject]) != nil) { id customClass = [classManager customClassForName: key]; id object = [document objectForName: key]; id template = nil; if(customClass != nil) { NSString *superClass = [classManager nonCustomSuperClassOf: customClass]; template = [GSTemplateFactory templateForObject: object withClassName: customClass withSuperClassName: superClass]; } else if([object isKindOfClass: [NSWindow class]] && [filePrefsManager versionOfClass: @"GSWindowTemplate"] > 0) { template = [GSTemplateFactory templateForObject: object withClassName: [object className] withSuperClassName: [object className]]; } // if the template has been created, replace the object with it. if(template != nil) { // if the object is deferrable, then set the flag appropriately. if([template respondsToSelector: @selector(setDeferFlag:)]) { [template setDeferFlag: [document objectIsDeferred: object]]; } // if the object can accept autoposition information if([object respondsToSelector: @selector(autoPositionMask)]) { int mask = [object autoPositionMask]; if([template respondsToSelector: @selector(setAutoPositionMask:)]) { [template setAutoPositionMask: mask]; } } // replace the object with the template. [archiver replaceObject: object withObject: template]; } } } - (NSMutableDictionary *)buildFileWrapperDictionaryWithDocument: (GormDocument *)doc { NSArchiver *archiver = nil; NSMutableData *archiverData = nil; NSString *gormPath = @"objects.gorm"; NSString *classesPath = @"data.classes"; NSString *infoPath = @"data.info"; GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; NSDictionary *substituteClasses = [palettesManager substituteClasses]; NSEnumerator *en = [substituteClasses keyEnumerator]; NSString *subClassName = nil; NSFileWrapper *fileWrapper = nil; NSMutableDictionary *fileWrappers = [super buildFileWrapperDictionaryWithDocument: doc]; if(fileWrappers) { GormClassManager *classManager = [document classManager]; GormFilePrefsManager *filePrefsManager = [document filePrefsManager]; GSNibContainer *container = nil; [document prepareConnections]; container = [[GSNibContainer alloc] initWithDocument: document]; /* * Set up archiving... */ archiverData = [NSMutableData dataWithCapacity: 0]; archiver = [[NSArchiver alloc] initForWritingWithMutableData: archiverData]; /* * Special gorm classes to their archive equivalents. */ [archiver encodeClassName: @"GormObjectProxy" intoClassName: @"GSNibItem"]; [archiver encodeClassName: @"GormCustomView" intoClassName: @"GSCustomView"]; while((subClassName = [en nextObject]) != nil) { NSString *realClassName = [substituteClasses objectForKey: subClassName]; [archiver encodeClassName: subClassName intoClassName: realClassName]; } /* * Initialize templates */ [self _replaceObjectsWithTemplates: archiver]; [archiver encodeRootObject: container]; RELEASE(archiver); // We're done with the archiver here.. /* * Add the gorm, info and classes files to the package. */ fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: archiverData]; [fileWrappers setObject: fileWrapper forKey: gormPath]; RELEASE(fileWrapper); fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: [classManager data]]; [fileWrappers setObject: fileWrapper forKey: classesPath]; RELEASE(fileWrapper); fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: [filePrefsManager data]]; [fileWrappers setObject: fileWrapper forKey: infoPath]; RELEASE(fileWrapper); // release the container... RELEASE(container); [document resetConnections]; } return fileWrappers; } @end apps-gorm-gorm-1_5_0/Plugins/Gorm/GormGormWrapperLoader.h000066400000000000000000000021471475375552500234730ustar00rootroot00000000000000/* GormNibWrapperLoader * * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #ifndef GORM_GORMWRAPPERLOADER #define GORM_GORMWRAPPERLOADER #include @class NSMutableArray, NSString; @interface GormGormWrapperLoader : GormWrapperLoader { NSMutableArray *_repairLog; id message; id textField; id panel; } @end #endif apps-gorm-gorm-1_5_0/Plugins/Gorm/GormGormWrapperLoader.m000066400000000000000000000476001475375552500235030ustar00rootroot00000000000000/* GormDocumentController.m * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include @interface GormGormWrapperLoader : GormWrapperLoader { NSMutableArray *_repairLog; id _message; id _textField; id _panel; } @end @interface NSWindow (Level) - (int) windowLevel; @end; @implementation NSWindow (Level) - (int) windowLevel { return _windowLevel; } @end; @implementation GormGormWrapperLoader + (NSString *) fileType { return @"GSGormFileType"; } - (id) init { if ((self = [super init]) != nil) { _repairLog = [[NSMutableArray alloc] init]; } return self; } - (void) dealloc { RELEASE(_repairLog); [super dealloc]; } - (void) _openMessagePanel: (NSString *) msg { NSEnumerator *en = [_repairLog objectEnumerator]; id m = nil; if ([NSBundle loadNibNamed: @"GormInconsistenciesPanel" owner: self] == NO) { NSLog(@"Failed to open message panel..."); } else { [_message setStringValue: msg]; while((m = [en nextObject]) != nil) { [_textField insertText: m]; } [_panel orderFront: self]; } [_repairLog removeAllObjects]; } /** * The sole purpose of this method is to clean up .gorm files from older * versions of Gorm which might have some dangling references. This method * may be added to as time goes on to make sure that it's possible * to repair old .gorm files. */ - (void) _repairFile { NSEnumerator *en = [[[document nameTable] allKeys] objectEnumerator]; NSString *key = nil; int errorCount = 0; NSString *errorMsg = nil; NSArray *connections = [document allConnectors]; id con = nil; NSRunAlertPanel(_(@"Warning"), _(@"You are running with 'GormRepairFileOnLoad' set to YES."), nil, nil, nil); /** * Iterate over all objects in nameTable. */ [document deactivateEditors]; while((key = [en nextObject]) != nil) { id obj = [[document nameTable] objectForKey: key]; /* * Take care of any dangling menus... */ if ([obj isKindOfClass: [NSMenu class]] && ![key isEqual: @"NSMenu"]) { id sm = [obj supermenu]; if (sm == nil) { NSArray *menus = findAll(obj); [_repairLog addObject: [NSString stringWithFormat: @"ERROR ==> Found and removed a dangling menu %@, %@.\n", obj, key]]; [document detachObjects: menus]; [document detachObject: obj]; // Since the menu is a top level object, it is not retained by // anything else. When it was unarchived it was autoreleased, and // the detach also does a release. Unfortunately, this causes a // crash, so this extra retain is only here to stave off the // release, so the autorelease can release the menu when it should. RETAIN(obj); // extra retain to stave off autorelease... errorCount++; } } /* * If there is a view which is not associated with a name, give it one... */ if ([obj isKindOfClass: [NSWindow class]]) { NSWindow *w = (NSWindow *)obj; NSArray *allViews = allSubviews([obj contentView]); NSEnumerator *ven = [allViews objectEnumerator]; id v = nil; if ([w windowLevel] != NSNormalWindowLevel) { [w setLevel: NSNormalWindowLevel]; [_repairLog addObject: [NSString stringWithFormat: @"ERROR ==> Found window %@ with an invalid level, correcting.\n", obj]]; errorCount++; } while((v = [ven nextObject]) != nil) { NSString *name = nil; id target = nil; SEL action = NULL; BOOL isAction = NO; // skip these... if ([v isKindOfClass: [NSMatrix class]]) { [_repairLog addObject: @"INFO: Skipping NSMatrix view.\n"]; continue; } else if ([v isKindOfClass: [NSScroller class]] && [[v superview] isKindOfClass: [NSTextView class]]) { [_repairLog addObject: @"INFO: Skipping NSScroller in an NSTextView.\n"]; continue; } else if ([v isKindOfClass: [NSScroller class]] && [[v superview] isKindOfClass: [NSBrowser class]]) { [_repairLog addObject: @"INFO: Skipping NSScroller in an NSTextView.\n"]; continue; } else if ([v isKindOfClass: [NSClipView class]] && [[v superview] isKindOfClass: [NSTextView class]]) { [_repairLog addObject: @"INFO: Skipping NSClipView in an NSTextView.\n"]; continue; } else if ([v isKindOfClass: [NSClipView class]] && [[v superview] isKindOfClass: [NSBrowser class]]) { [_repairLog addObject: @"INFO: Skipping NSClipView in an NSTextView.\n"]; continue; } if ((name = [document nameForObject: v]) == nil) { [document attachObject: v toParent: [v superview]]; name = [document nameForObject: v]; [_repairLog addObject: [NSString stringWithFormat: @"ERROR ==> Found view %@ without an associated name, adding to the nametable as %@\n", v, name]]; if ([v respondsToSelector: @selector(stringValue)]) { [_repairLog addObject: [NSString stringWithFormat: @"INFO: View string value is %@\n",[v stringValue]]]; } errorCount++; } // Delete old target action settings if they are directly encoded. if ([v respondsToSelector: @selector(setTarget:)]) { target = [v target]; [v setTarget: nil]; // remove hard set targets or actions. [_repairLog addObject: [NSString stringWithFormat: @"ERROR: Removing hard set target %@ on object %@.\n", target, name]]; errorCount++; } // delete action... if ([v respondsToSelector: @selector(setAction:)]) { action = [v action]; [v setAction: NULL]; // remove hard set targets or actions. [_repairLog addObject: [NSString stringWithFormat: @"ERROR: Removing hard set action %@ on object %@.\n", NSStringFromSelector(action), name]]; errorCount++; } NSString *actionName = NSStringFromSelector(action); isAction = [actionName containsString: @":"]; // create control connector... if (action != NULL && target != nil && isAction) { NSNibControlConnector *con = [[NSNibControlConnector alloc] init]; [con setDestination: name]; [con setLabel: actionName]; [document addConnector: con]; [document touch]; [_repairLog addObject: [NSString stringWithFormat: @"FIX: Creating outlet connection for %@ on %@.\n", NSStringFromSelector(action), name]]; errorCount++; } // create outlet connector... if (action != NULL && target != nil && !isAction) { NSString *actionName = NSStringFromSelector(action); NSNibOutletConnector *con = [[NSNibOutletConnector alloc] init]; [con setDestination: name]; [con setLabel: actionName]; [document addConnector: con]; [document touch]; [_repairLog addObject: [NSString stringWithFormat: @"FIX: Creating control connection for %@ on %@.\n", NSStringFromSelector(action), name]]; errorCount++; } [_repairLog addObject: [NSString stringWithFormat: @"INFO: Checking view %@ with name %@\n", v, name]]; } } } [document reactivateEditors]; /** * Iterate over all connections... remove connections with nil sources. */ en = [connections objectEnumerator]; while((con = [en nextObject]) != nil) { id src = [con source]; id dst = [con destination]; if ([con isKindOfClass: [NSNibConnector class]]) { if (src == nil) { [_repairLog addObject: [NSString stringWithFormat: @"ERROR ==> Removing bad connector with nil source: %@\n",con]]; [document removeConnector: con]; errorCount++; } else if ([src isKindOfClass: [NSString class]]) { id obj = [document objectForName: src]; if (obj == nil) { [_repairLog addObject: [NSString stringWithFormat: @"ERROR ==> Removing bad connector with source that is not in the nametable: %@\n", con]]; [document removeConnector: con]; errorCount++; } } else if ([dst isKindOfClass: [NSString class]]) { id obj = [document objectForName: dst]; if (obj == nil) { [_repairLog addObject: [NSString stringWithFormat: @"ERROR ==> Removing bad connector with destination that is not in the nametable: %@\n", con]]; [document removeConnector: con]; errorCount++; } } } } // report the number of errors... if (errorCount > 0) { errorMsg = [NSString stringWithFormat: @"%d inconsistencies were found, please save the file.",errorCount]; [self _openMessagePanel: errorMsg]; [document touch]; } } /** * Private method. Determines if the document contains an instance of a given * class or one of it's subclasses. */ - (BOOL) _containsKindOfClass: (Class)cls { NSEnumerator *en = [[document nameTable] objectEnumerator]; id obj = nil; while((obj = [en nextObject]) != nil) { if ([obj isKindOfClass: cls]) { return YES; } } return NO; } - (BOOL) loadFileWrapper: (NSFileWrapper *)wrapper withDocument: (GormDocument *) doc { BOOL result = NO; NS_DURING { NSData *data = nil; NSData *classes = nil; NSUnarchiver *u = nil; NSEnumerator *enumerator = nil; id con = nil; NSString *ownerClass, *key = nil; BOOL repairFile = [[NSUserDefaults standardUserDefaults] boolForKey: @"GormRepairFileOnLoad"]; GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; NSDictionary *substituteClasses = [palettesManager substituteClasses]; NSEnumerator *en = [substituteClasses keyEnumerator]; NSString *subClassName = nil; NSUInteger version = NSNotFound; NSDictionary *fileWrappers = nil; GSNibContainer *container; NSArray *visible; NSArray *deferred; GormFilesOwner *filesOwner; GormFirstResponder *firstResponder; NSArray *objs; NSMutableArray *connections; NSDictionary *nt; id visObj; id defObj; if ([super loadFileWrapper: wrapper withDocument: doc]) { GormClassManager *classManager = [document classManager]; key = nil; if ([wrapper isDirectory]) { fileWrappers = [wrapper fileWrappers]; enumerator = [fileWrappers keyEnumerator]; while((key = [enumerator nextObject]) != nil) { NSFileWrapper *fw = [fileWrappers objectForKey: key]; if ([fw isRegularFile]) { NSData *fileData = [fw regularFileContents]; if ([key isEqual: @"objects.gorm"]) { data = fileData; } else if ([key isEqual: @"data.info"]) { [document setInfoData: fileData]; } else if ([key isEqual: @"data.classes"]) { classes = fileData; // load the custom classes... if (![classManager loadCustomClassesWithData: classes]) { NSRunAlertPanel(_(@"Problem Loading"), _(@"Could not open the associated classes file.\n" @"You won't be able to edit connections on custom classes"), _(@"OK"), nil, nil); } } } } } else if ([wrapper isRegularFile]) // if it's a file... here we need to handle legacy files. { NSString *classesFileName = [[[document documentPath] stringByDeletingPathExtension] stringByAppendingPathExtension: @"classes"]; // dump the contents to the data section... data = [wrapper regularFileContents]; classes = [NSData dataWithContentsOfFile: classesFileName]; // load the custom classes... if (![classManager loadCustomClassesWithData: classes]) { NSRunAlertPanel(_(@"Problem Loading"), _(@"Could not open the associated classes file.\n" @"You won't be able to edit connections on custom classes"), _(@"OK"), nil, nil); } } // check the data... if (data == nil || classes == nil) { result = NO; } else { /* * Create an unarchiver, and use it to unarchive the gorm file while * handling class replacement so that standard objects understood * by the gui library are converted to their Gorm internal equivalents. */ u = [[NSUnarchiver alloc] initForReadingWithData: data]; /* * Special internal classes */ [u decodeClassName: @"GSNibItem" asClassName: @"GormObjectProxy"]; [u decodeClassName: @"GSCustomView" asClassName: @"GormCustomView"]; /* * Substitute any classes specified by the palettes... */ while((subClassName = [en nextObject]) != nil) { NSString *realClassName = [substituteClasses objectForKey: subClassName]; [u decodeClassName: realClassName asClassName: subClassName]; } // turn off custom classes. [GSClassSwapper setIsInInterfaceBuilder: YES]; container = [u decodeObject]; if (container == nil || [container isKindOfClass: [GSNibContainer class]] == NO) { result = NO; } else { // turn on custom classes. [GSClassSwapper setIsInInterfaceBuilder: NO]; // // Retrieve the custom class data and refresh the classes view... // [classManager setCustomClassMap: [NSMutableDictionary dictionaryWithDictionary: [container customClasses]]]; // // Get all of the visible objects... // visible = [container visibleWindows]; visObj = nil; enumerator = [visible objectEnumerator]; while((visObj = [enumerator nextObject]) != nil) { [document setObject: visObj isVisibleAtLaunch: YES]; } // // Get all of the deferred objects... // deferred = [container deferredWindows]; defObj = nil; enumerator = [deferred objectEnumerator]; while((defObj = [enumerator nextObject]) != nil) { [document setObject: defObj isDeferred: YES]; } // // In the newly loaded nib container, we change all the connectors // to hold the objects rather than their names (using our own dummy // object as the 'NSOwner'. // filesOwner = [document filesOwner]; firstResponder = [document firstResponder]; ownerClass = [[container nameTable] objectForKey: @"NSOwner"]; if (ownerClass) { [filesOwner setClassName: ownerClass]; } [[container nameTable] setObject: filesOwner forKey: @"NSOwner"]; [[container nameTable] setObject: firstResponder forKey: @"NSFirst"]; // // Add entries... // [[document nameTable] addEntriesFromDictionary: [container nameTable]]; // // Add top level items... // objs = [[container topLevelObjects] allObjects]; [[document topLevelObjects] addObjectsFromArray: objs]; // // Add connections // connections = [document connections]; [connections addObjectsFromArray: [container connections]]; /* Iterate over the contents of nameTable and create the connections */ nt = [document nameTable]; enumerator = [connections objectEnumerator]; while ((con = [enumerator nextObject]) != nil) { NSString *name; id obj; name = (NSString*)[con source]; obj = [nt objectForKey: name]; [con setSource: obj]; name = (NSString*)[con destination]; obj = [nt objectForKey: name]; [con setDestination: obj]; } /* * If the GSNibContainer version is 0, we need to add the top level objects * to the list so that they can be properly processed. */ version = [u versionForClassName: NSStringFromClass([GSNibContainer class])]; if (version == 0) { id obj; NSEnumerator *en = [nt objectEnumerator]; // get all of the GSNibItem subclasses which could be top level objects while((obj = [en nextObject]) != nil) { if ([obj isKindOfClass: [GSNibItem class]] && [obj isKindOfClass: [GSCustomView class]] == NO) { [[container topLevelObjects] addObject: obj]; } } [document setOlderArchive: YES]; } else if (version == 1) { // nothing else, just mark it as older... [document setOlderArchive: YES]; } /* * If the GSWindowTemplate version is 0, we need to let Gorm know that this is * an older archive. Also, if the window template is not in the archive we know * it was made by an older version of Gorm. */ version = [u versionForClassName: NSStringFromClass([GSWindowTemplate class])]; if (version == NSNotFound && [self _containsKindOfClass: [NSWindow class]]) { [document setOlderArchive: YES]; } /* * Rebuild the mapping from object to name for the nameTable... */ [document rebuildObjToNameMapping]; /* * Repair the .gorm file, if needed. */ if (repairFile) { [self _repairFile]; } NSDebugLog(@"nameTable = %@",[container nameTable]); // awaken all elements after the load is completed. enumerator = [nt keyEnumerator]; while ((key = [enumerator nextObject]) != nil) { id o = [nt objectForKey: key]; if ([o respondsToSelector: @selector(awakeFromDocument:)]) { [o awakeFromDocument: document]; } } // document opened... [document setDocumentOpen: YES]; // release the unarchiver.. RELEASE(u); // done... result = YES; } } } } NS_HANDLER { id delegate = [NSApp delegate]; NSString *errorMessage = [NSString stringWithFormat: @"Failed to load file. Exception: %@",[localException reason]]; [delegate exceptionWhileLoadingModel: errorMessage]; result = NO; } NS_ENDHANDLER; // if we made it here, then it was a success.... return result; } @end apps-gorm-gorm-1_5_0/Plugins/Nib/000077500000000000000000000000001475375552500167015ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Plugins/Nib/GNUmakefile000066400000000000000000000024541475375552500207600ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = Nib BUNDLE_EXTENSION = .plugin Nib_PRINCIPAL_CLASS = GormNibPlugin Nib_OBJC_FILES = GormNibPlugin.m \ GormNibWrapperBuilder.m \ GormNibWrapperLoader.m Nib_RESOURCE_FILES = Nib_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Plugins/Nib/GNUmakefile.preamble000066400000000000000000000012321475375552500225370ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../ ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework $(BUNDLE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Plugins/Nib/GormNibCustomResource.h000066400000000000000000000017771475375552500233260ustar00rootroot00000000000000/* GormNibCustomResource * * Copyright (C) 2009 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2009 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #ifndef GORM_NIBCUSTOMRESOURCE #define GORM_NIBCUSTOMRESOURCE #include @interface GormNibNibCustomResource : NSCustomResource @end #endif apps-gorm-gorm-1_5_0/Plugins/Nib/GormNibCustomResource.m000066400000000000000000000020461475375552500233210ustar00rootroot00000000000000/* GormNibCustomResource * * Copyright (C) 2009 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2009 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #include "GormNibCustomResource.h" @implementation GormNibNibCustomResource : NSCustomResource - (id) initWithCoder: (NSCoder *)coder { return self; } - (void) encodeWithCoder: (NSCoder *)coder { } @end apps-gorm-gorm-1_5_0/Plugins/Nib/GormNibPlugin.m000066400000000000000000000022551475375552500215770ustar00rootroot00000000000000/* GormNibModule.m * * Copyright (C) 2007 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2007 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #include #include #include "GormNibWrapperLoader.h" @interface GormNibPlugin : GormPlugin @end @implementation GormNibPlugin - (void) didLoad { [self registerDocumentTypeName: [GormNibWrapperLoader fileType] humanReadableName: @"Cocoa Nib" forExtensions: [NSArray arrayWithObjects: @"nib",nil]]; } @end apps-gorm-gorm-1_5_0/Plugins/Nib/GormNibWrapperBuilder.m000066400000000000000000000272351475375552500232750ustar00rootroot00000000000000/* GormWrapperBuilder * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include // allow access to a private category... @interface NSIBObjectData (BuilderAdditions) - (id) initWithDocument: (GormDocument *)document; @end; @implementation NSIBObjectData (BuilderAdditions) - (id) initWithDocument: (GormDocument *)document { if((self = [self init]) != nil) { NSArray *cons = [document connections]; NSDictionary *customClasses = [[document classManager] customClassMap]; NSArray *keys = [customClasses allKeys]; NSEnumerator *en = [cons objectEnumerator]; id o = nil; id owner = [document objectForName: @"NSOwner"]; unsigned int oid = 1; // Create the container for the .nib file... ASSIGN(_root, owner); NSMapInsert(_names, owner, @"File's Owner"); NSMapInsert(_oids, owner, [[NSNumber alloc] initWithUnsignedInt: oid++]); ASSIGN(_framework, @"IBCocoaFramework"); [_topLevelObjects addObjectsFromArray: [[document topLevelObjects] allObjects]]; [_visibleWindows addObjectsFromArray: [[document visibleWindows] allObjects]]; // fill in objects and connections.... while((o = [en nextObject]) != nil) { NSNumber *currOid = [NSNumber numberWithUnsignedInt: oid++]; // NSString *currOid = [NSString stringWithFormat: @"%d", oid++]; if ([o isMemberOfClass: [NSNibConnector class]]) { id src = [o source]; id dst = [o destination]; NSString *name = nil; // if (src != nil) { name = [document nameForObject: src]; } else { continue; } if ([name isEqual: @"NSOwner"]) { name = @"File's Owner"; } if ([name isEqual: @"NSMenu"]) { name = @"MainMenu"; } else if ([name isEqual: @"NSFirst"]) { // skip it... continue; } if (dst == nil) { NSLog(@"==> WARNING: value for object %@ is %@ in objects map.", src, dst); } else { NSMapInsert(_objects, src, dst); } if (name == nil) { NSLog(@"==> WARNING: value for object %@ is %@ in names map.", src, name); } else { NSMapInsert(_names, src, name); } if (currOid == nil) { NSLog(@"==> WARNING: value for object %@ is %@ in oids map.", src, currOid); } else { NSMapInsert(_oids, src, currOid); } } else { [_connections addObject: o]; NSMapInsert(_oids, o, currOid); } } // set the next oid... _nextOid = oid; // custom classes... en = [keys objectEnumerator]; while((o = [en nextObject]) != nil) { id obj = [document objectForName: o]; NSString *className = [customClasses objectForKey: o]; NSMapInsert(_classes, obj, className); } } return self; } @end @interface GSNibTemplateFactory : NSObject + (id) templateForObject: (id)object withClassName: (NSString *)customClass withSuperClassName: (NSString *)superClass withDocument: (GormDocument *)document; @end @implementation GSNibTemplateFactory + (id) templateForObject: (id)object withClassName: (NSString *)customClass withSuperClassName: (NSString *)superClass withDocument: (GormDocument *)document { id template = nil; if([object isKindOfClass: [NSWindow class]]) { BOOL isDeferred = [document objectIsDeferred: object]; BOOL isVisible = [document objectIsVisibleAtLaunch: object]; BOOL wantsToBeColor = YES; int autoPositionMask = 0; template = [[NSWindowTemplate alloc] initWithWindow: object className: customClass isDeferred: isDeferred isOneShot: [object isOneShot] isVisible: isVisible wantsToBeColor: wantsToBeColor autoPositionMask: autoPositionMask]; } else if([object isKindOfClass: [NSText class]]) { template = [[NSTextTemplate alloc] initWithObject: object className: customClass]; } else if([object isKindOfClass: [NSTextView class]]) { template = [[NSTextViewTemplate alloc] initWithObject: object className: customClass]; } else if([object isKindOfClass: [NSView class]]) { template = [[NSViewTemplate alloc] initWithObject: object className: customClass]; } else { template = [[NSClassSwapper alloc] initWithObject: object withClassName: customClass originalClassName: superClass]; } return template; } @end @interface GormNibWrapperBuilder : GormWrapperBuilder { NSMapTable *_objectMap; NSIBObjectData *_container; } @end @implementation GormNibWrapperBuilder + (NSString *) fileType { return @"GSNibFileType"; } - (id) init { if((self = [super init]) != nil) { _objectMap = NSCreateMapTableWithZone(NSObjectMapKeyCallBacks, NSObjectMapValueCallBacks, 128, [self zone]); } return self; } - (void) dealloc { RELEASE(_container); NSFreeMapTable(_objectMap); [super dealloc]; } /** * Private method which iterates through the list of custom classes and instructs * the archiver to replace the actual object with template during the archiving * process. */ - (void) _replaceObjectsWithTemplates: (NSKeyedArchiver *)archiver { NSEnumerator *en = [[document nameTable] keyEnumerator]; GormClassManager *classManager = [document classManager]; // GormFilePrefsManager *filePrefsManager = [document filePrefsManager]; id key = nil; // loop through all custom objects and windows while((key = [en nextObject]) != nil) { id customClass = [classManager customClassForName: key]; id object = [document objectForName: key]; id template = nil; if(customClass != nil) { NSString *superClass = [classManager nonCustomSuperClassOf: customClass]; template = [GSNibTemplateFactory templateForObject: object withClassName: customClass withSuperClassName: superClass withDocument: document]; } else if([object isKindOfClass: [NSWindow class]]) { template = [GSNibTemplateFactory templateForObject: object withClassName: [object className] withSuperClassName: [object className] withDocument: document]; } // if the template has been created, replace the object with it. if(template != nil) { /* NOT YET IMPLEMENTED * // if the object can accept autoposition information if([object respondsToSelector: @selector(autoPositionMask)]) { int mask = [object autoPositionMask]; if([template respondsToSelector: @selector(setAutoPositionMask:)]) { [template setAutoPositionMask: mask]; } } */ // replace the object with the template. NSMapInsert(_objectMap, object, template); } } } - (id) archiver: (NSKeyedArchiver *)archiver willEncodeObject: (id) object { id replacementObject = NSMapGet(_objectMap,object); id o = object; if([o isKindOfClass: [GormFirstResponder class]]) { o = nil; } else if(replacementObject != nil) { o = replacementObject; } return o; } - (NSArray *) openItems { NSMapTable *oids = [_container oids]; NSMutableArray *openItems = [NSMutableArray array]; NSEnumerator *en = [[_container visibleWindows] objectEnumerator]; id menu = [document objectForName: @"NSMenu"]; id obj = nil; // Get the open items, so that IB displays the same windows that Gorm had open when it // saved.... while((obj = [en nextObject]) != nil) { if([obj isVisible]) { NSNumber *windowOid = NSMapGet(oids, obj); [openItems addObject: windowOid]; } } // add the menu... if(menu != nil) { NSNumber *menuOid = NSMapGet(oids,menu); [openItems addObject: menuOid]; } return openItems; } - (NSMutableDictionary *)buildFileWrapperDictionaryWithDocument: (GormDocument *)doc { NSKeyedArchiver *archiver = nil; NSMutableData *archiverData = nil; NSString *nibPath = @"keyedobjects.nib"; NSString *classesPath = @"classes.nib"; NSString *infoPath = @"info.nib"; GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; NSDictionary *substituteClasses = [palettesManager substituteClasses]; NSEnumerator *en = [substituteClasses keyEnumerator]; NSString *subClassName = nil; NSFileWrapper *fileWrapper = nil; NSMutableDictionary *fileWrappers = [super buildFileWrapperDictionaryWithDocument: doc]; if(fileWrappers) { GormClassManager *classManager = [document classManager]; GormFilePrefsManager *filePrefsManager = [document filePrefsManager]; // instantiate the container. _container = [[NSIBObjectData alloc] initWithDocument: document]; /* * Set up archiving... */ archiverData = [NSMutableData dataWithCapacity: 10240]; archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData: archiverData]; [archiver setDelegate: self]; /* * Special gorm classes to their archive equivalents. */ [archiver setClassName: @"NSCustomObject" forClass: [GormObjectProxy class]]; [archiver setClassName: @"NSCustomView" forClass: [GormCustomView class]]; [archiver setClassName: @"NSCustomObject" forClass: [GormFilesOwner class]]; while((subClassName = [en nextObject]) != nil) { NSString *realClassName = [substituteClasses objectForKey: subClassName]; Class subClass = NSClassFromString(subClassName); [archiver setClassName: realClassName forClass: subClass]; } /* * Initialize templates */ [self _replaceObjectsWithTemplates: archiver]; [archiver setOutputFormat: NSPropertyListXMLFormat_v1_0]; // force XML output for now.... [archiver encodeObject: _container forKey: @"IB.objectdata"]; [archiver finishEncoding]; RELEASE(archiver); // We're done with the archiver here.. /* * Add the gorm, info and classes files to the package. */ fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: archiverData]; [fileWrappers setObject: fileWrapper forKey: nibPath]; RELEASE(fileWrapper); fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: [classManager nibData]]; [fileWrappers setObject: fileWrapper forKey: classesPath]; RELEASE(fileWrapper); fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: [filePrefsManager nibDataWithOpenItems: [self openItems]]]; [fileWrappers setObject: fileWrapper forKey: infoPath]; RELEASE(fileWrapper); } return fileWrappers; } @end apps-gorm-gorm-1_5_0/Plugins/Nib/GormNibWrapperLoader.h000066400000000000000000000022331475375552500230770ustar00rootroot00000000000000/* GormNibWrapperLoader * * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #ifndef GORM_NIBWRAPPERLOADER #define GORM_NIBWRAPPERLOADER #include #include #include "GormNibCustomResource.h" @interface GormNibWrapperLoader : GormWrapperLoader { NSIBObjectData *_container; id _nibFilesOwner; } - (BOOL) isTopLevelObject: (id)obj; @end #endif apps-gorm-gorm-1_5_0/Plugins/Nib/GormNibWrapperLoader.m000066400000000000000000000261071475375552500231120ustar00rootroot00000000000000/* GormNibWrapperLoader * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include "GormNibWrapperLoader.h" @class GormNSWindow; @implementation GormNibWrapperLoader + (NSString *) fileType { return @"GSNibFileType"; } - (NSDictionary *)defaultClassesDict { NSString *defaultClassesString = @"{ IBClasses = ({CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }); IBVersion = 1; }"; return [defaultClassesString propertyList]; } - (BOOL) isTopLevelObject: (id)obj { NSMapTable *objects = [_container objects]; id val = NSMapGet(objects,obj); BOOL result = NO; if(val == _nibFilesOwner || val == nil) { result = YES; } return result; } - (BOOL) loadFileWrapper: (NSFileWrapper *)wrapper withDocument: (GormDocument *) doc { BOOL result = NO; NS_DURING { NSData *data = nil; NSData *classes = nil; NSKeyedUnarchiver *u = nil; NSString *key = nil; GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; NSDictionary *substituteClasses = [palettesManager substituteClasses]; NSString *subClassName = nil; NSDictionary *fileWrappers = nil; if ([super loadFileWrapper: wrapper withDocument: doc]) { GormClassManager *classManager = [document classManager]; id docFilesOwner; NSMapTable *objects; NSArray *objs; NSEnumerator *en; id o; NSMapTable *classesTable; NSArray *classKeys; // turn off custom classes... [NSClassSwapper setIsInInterfaceBuilder: YES]; if([wrapper isDirectory]) { key = nil; fileWrappers = [wrapper fileWrappers]; en = [fileWrappers keyEnumerator]; while((key = [en nextObject]) != nil) { NSFileWrapper *fw = [fileWrappers objectForKey: key]; if([fw isRegularFile]) { NSData *fileData = [fw regularFileContents]; if([key isEqual: @"keyedobjects.nib"]) { data = fileData; } else if([key isEqual: @"classes.nib"]) { classes = fileData; // load the custom classes... if (![classManager loadNibFormatCustomClassesWithData: classes]) { NSRunAlertPanel(_(@"Problem Loading"), _(@"Could not open the associated classes file.\n" @"You won't be able to edit connections on custom classes"), _(@"OK"), nil, nil); } } } } } else { data = [wrapper regularFileContents]; classes = nil; // (NSData *)0xdeadbeef; } // check the data... if (data == nil)// || classes == nil) { result = NO; } else { /* * Create an unarchiver, and use it to unarchive the gorm file while * handling class replacement so that standard objects understood * by the gui library are converted to their Gorm internal equivalents. */ u = [[NSKeyedUnarchiver alloc] initForReadingWithData: data]; [u setDelegate: self]; /* * Special internal classes */ [u setClass: [GormCustomView class] forClassName: @"NSCustomView"]; [u setClass: [GormWindowTemplate class] forClassName: @"NSWindowTemplate"]; [u setClass: [GormNSWindow class] forClassName: @"NSWindow"]; /* * Substitute any classes specified by the palettes... */ en = [substituteClasses keyEnumerator]; while((subClassName = [en nextObject]) != nil) { NSString *realClassName = [substituteClasses objectForKey: subClassName]; Class substituteClass = NSClassFromString(subClassName); [u setClass: substituteClass forClassName: realClassName]; } // // decode // _container = [u decodeObjectForKey: @"IB.objectdata"]; if (_container == nil || [_container isKindOfClass: [NSIBObjectData class]] == NO) { result = NO; } else { _nibFilesOwner = [_container objectForName: @"File's Owner"]; docFilesOwner = [document filesOwner]; objects = [_container names]; objs = NSAllMapTableKeys(objects); en = [objs objectEnumerator]; o = nil; // // set the current class on the File's owner... // if([_nibFilesOwner isKindOfClass: [NSCustomObject class]]) { [docFilesOwner setClassName: [_nibFilesOwner className]]; } // // add objects... // while((o = [en nextObject]) != nil) { id obj = o; NSString *customClassName = nil; NSString *objName = nil; // skip the file's owner, it is handled above... if(o == _nibFilesOwner || o == [document firstResponder]) { continue; } // // If it's NSApplication (most likely the File's Owner) // skip it... // if ([o isKindOfClass: [NSCustomObject class]]) { if ([[o className] isEqualToString: @"NSApplication"]) { continue; } customClassName = [o className]; } // // if it's a window template, then replace it with an actual window. // if([o isKindOfClass: [NSWindowTemplate class]]) { NSString *className = [o className]; BOOL isDeferred = [o isDeferred]; BOOL isVisible = [[_container visibleWindows] containsObject: o]; // make the object deferred/visible... obj = [o nibInstantiate]; [document setObject: obj isDeferred: isDeferred]; [document setObject: obj isVisibleAtLaunch: isVisible]; [document attachObject: obj toParent: nil]; // record the custom class... if([classManager isCustomClass: className]) { customClassName = className; } } if([self isTopLevelObject: obj]) { [document attachObject: obj toParent: nil]; } if(customClassName != nil) { objName = [document nameForObject: obj]; [classManager setCustomClass: customClassName forName: objName]; } } // // Add custom classes... // classesTable = [_container classes]; classKeys = NSAllMapTableKeys(classesTable); en = [classKeys objectEnumerator]; while((o = [en nextObject]) != nil) { NSString *name = [document nameForObject: o]; NSString *customClass = NSMapGet(classesTable, o); if(name != nil && customClass != nil) { [classManager setCustomClass: customClass forName: name]; } else { NSLog(@"Name %@ or class %@ for object %@ is nil.", name, customClass, o); } } // // add connections... // en = [[_container connections] objectEnumerator]; o = nil; while((o = [en nextObject]) != nil) { id dest = [o destination]; id src = [o source]; // NSLog(@"Connector: %@",o); if([o isKindOfClass: [NSNibControlConnector class]]) { NSString *tag = [o label]; NSRange colonRange = [tag rangeOfString: @":"]; NSUInteger location = colonRange.location; if(location == NSNotFound) { NSString *newTag = [NSString stringWithFormat: @"%@:",tag]; [o setLabel: (id)newTag]; } } if(dest == _nibFilesOwner) { [o setDestination: [document filesOwner]]; } else if(dest == nil) { [o setDestination: [document firstResponder]]; } if(src == _nibFilesOwner) { [o setSource: [document filesOwner]]; } else if(src == nil) { [o setSource: [document firstResponder]]; } // check src/dest for window template... if([src isKindOfClass: [NSWindowTemplate class]]) { id win = [src realObject]; [o setSource: win]; } if([dest isKindOfClass: [NSWindowTemplate class]]) { id win = [dest realObject]; [o setDestination: win]; } // skip any help connectors... if([o isKindOfClass: [NSIBHelpConnector class]]) { continue; } [document addConnector: o]; } // turn on custom classes. [NSClassSwapper setIsInInterfaceBuilder: NO]; // clear the changes, since we just loaded the document. [document updateChangeCount: NSChangeCleared]; result = YES; } } [NSClassSwapper setIsInInterfaceBuilder: NO]; } } NS_HANDLER { NSRunAlertPanel(_(@"Problem Loading"), [NSString stringWithFormat: @"Failed to load file. Exception: %@",[localException reason]], _(@"OK"), nil, nil); result = NO; } NS_ENDHANDLER; // return the result. return result; } - (void) unarchiver: (NSKeyedUnarchiver *)unarchiver willReplaceObject: (id)obj withObject: (id)newObj { // Nothing for now... } - (id) unarchiver: (NSKeyedUnarchiver *)unarchiver didDecodeObject: (id)obj { if([obj isKindOfClass: [NSWindowTemplate class]]) { GormClassManager *classManager = [document classManager]; Class clz ; NSString *className = [obj className]; if([classManager isCustomClass: className]) { className = [classManager nonCustomSuperClassOf: className]; } clz = [unarchiver classForClassName: className]; [obj setBaseWindowClass: clz]; } else if([obj respondsToSelector: @selector(setTarget:)] && [obj respondsToSelector: @selector(setAction:)] && [obj isKindOfClass: [NSCell class]] == NO) { // blank the target/action for all objects. [obj setTarget: nil]; [obj setAction: NULL]; } else if([obj isKindOfClass: [NSCustomObject class]]) { GormObjectProxy *o = [[GormObjectProxy alloc] initWithClassName: [obj className]]; obj = o; // replace the object if it's an NSCustomObject... } return obj; } @end apps-gorm-gorm-1_5_0/Plugins/Xib/000077500000000000000000000000001475375552500167135ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Plugins/Xib/GNUmakefile000066400000000000000000000025111475375552500207640ustar00rootroot00000000000000# GNUmakefile # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Richard Frith-Macdonald # Date: 1999 # # This file is part of GNUstep. # # 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. PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make BUNDLE_NAME = Xib BUNDLE_EXTENSION = .plugin Xib_PRINCIPAL_CLASS = GormXibPlugin Xib_OBJC_FILES = GormXibPlugin.m \ GormXibWrapperLoader.m \ GormXibWrapperBuilder.m \ GormXIBModelGenerator.m \ Xib_RESOURCE_FILES = Xib_STANDARD_INSTALL = no -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Plugins/Xib/GNUmakefile.preamble000066400000000000000000000012321475375552500225510ustar00rootroot00000000000000# Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += -I../../ ifeq ($(GNUSTEP_TARGET_OS),mingw32) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework ADDITIONAL_GUI_LIBS += -lInterfaceBuilder -lGormCore endif ifeq ($(GNUSTEP_TARGET_OS),cygwin) ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework $(BUNDLE_NAME)_LIBRARIES_DEPEND_UPON += -lInterfaceBuilder -lGormCore endifapps-gorm-gorm-1_5_0/Plugins/Xib/GormXIBModelGenerator.h000066400000000000000000000041671475375552500231730ustar00rootroot00000000000000/** GormXIBKeyedArchiver Interface of GormXIBKeyedArchiver Copyright (C) 2023 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2023 This file is part of the GNUstep GUI Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; see the file COPYING.LIB. If not, see or write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef GormXIBModelGenerator_H_INCLUDE #define GormXIBModelGenerator_H_INCLUDE #import @class GormDocument; @class NSMutableDictionary; @class NSString; @class NSData; @class NSMutableArray; @class NSMapTable; @interface GormXIBModelGenerator : NSObject { GormDocument *_gormDocument; NSMutableDictionary *_mappingDictionary; NSMutableArray *_allIdentifiers; NSMapTable *_objectToIdentifier; } /** * Returns an autoreleased GormXIBModelGenerator object; */ + (instancetype) xibWithGormDocument: (GormDocument *)doc; /** * Initialize with GormDocument object to parse the XML from or into. */ - (instancetype) initWithGormDocument: (GormDocument *)doc; /** * The data for the XIB document that has been created */ - (NSData *) data; /** * Exports XIB file. This method starts the process and calls * another method that recurses through the objects in the model and * maps any properties as appropriate when exporting. */ - (BOOL) exportXIBDocumentWithName: (NSString *)name; @end #endif // GormXIBModelGenerator_H_INCLUDE apps-gorm-gorm-1_5_0/Plugins/Xib/GormXIBModelGenerator.m000066400000000000000000001544761475375552500232110ustar00rootroot00000000000000/** GormXIBKeyedArchiver Interface of GormXIBKeyedArchiver Copyright (C) 2023 Free Software Foundation, Inc. Author: Gregory John Casamento Date: 2023 This file is part of the GNUstep GUI Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; see the file COPYING.LIB. If not, see or write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "GormXIBModelGenerator.h" static NSArray *_allowedSizeKeys = nil; static NSArray *_externallyReferencedClasses = nil; static NSDictionary *_signatures = nil; static NSArray *_skipClass = nil; static NSArray *_skipCollectionForKey = nil; static NSArray *_singletonObjects = nil; static NSDictionary *_methodToKeyName = nil; static NSDictionary *_nonProperties = nil; static NSArray *_excludedKeys = nil; static NSDictionary *_mappedClassNames = nil; static NSDictionary *_valueMapping = nil; static NSUInteger _count = INT_MAX; /* NSString* XIBStringFromClass(Class cls) { NSString *className = NSStringFromClass(cls); if (className != nil) { NSString *newClassName = [_mappedClassNames objectForKey: className]; if (newClassName != nil) { className = newClassName; } } return className; } */ @interface NSButtonCell (_Private_) - (NSButtonType) buttonType; @end @implementation NSButtonCell (_Private_) - (NSButtonType) buttonType { NSButtonType type = 0; NSInteger highlightsBy = [self highlightsBy]; NSInteger showsStateBy = [self showsStateBy]; BOOL imageDimsWhenDisabled = [self imageDimsWhenDisabled]; NSString *imageName = [[self image] name]; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wtautological-bitwise-compare" if ([imageName isEqualToString: @"GSSwitch"]) { type = NSSwitchButton; } else if ([imageName isEqualToString: @"GSRadio"]) { type = NSRadioButton; } else if ((highlightsBy | NSChangeBackgroundCellMask) && (showsStateBy | NSNoCellMask) && (imageDimsWhenDisabled == YES)) { type = NSMomentaryLightButton; } else if ((highlightsBy | (NSPushInCellMask | NSChangeGrayCellMask)) && (showsStateBy | NSNoCellMask) && (imageDimsWhenDisabled == YES)) { type = NSMomentaryPushInButton; } else if ((highlightsBy | NSContentsCellMask) && (showsStateBy | NSNoCellMask) && (imageDimsWhenDisabled == YES)) { type = NSMomentaryChangeButton; } else if ((highlightsBy | (NSPushInCellMask | NSChangeGrayCellMask)) && (showsStateBy | NSChangeBackgroundCellMask) && (imageDimsWhenDisabled == YES)) { type = NSPushOnPushOffButton; } else if ((highlightsBy | (NSPushInCellMask | NSContentsCellMask)) && (showsStateBy | NSContentsCellMask) && (imageDimsWhenDisabled == YES)) { type = NSOnOffButton; } #pragma GCC diagnostic pop return type; } - (NSString *) buttonTypeString { NSButtonType type = [self buttonType]; NSString *result = @""; switch (type) { case NSMomentaryLightButton: result = @"push"; break; case NSMomentaryPushInButton: result = @"push"; // @"momentaryPushIn"; break; case NSMomentaryChangeButton: result = @"momentarychange"; break; case NSPushOnPushOffButton: result = @"push"; // @"pushonpushoff"; break; case NSOnOffButton: result = @"onoff"; break; case NSToggleButton: result = @"toggle"; break; case NSSwitchButton: result = @"check"; break; case NSRadioButton: result = @"radio"; break; default: NSLog(@"Using unsupported button type %d", type); break; } return result; } @end @interface NSString (_hex_) - (NSString *) lowercaseFirstCharacter; - (NSString *) splitString; - (NSString *) hexString; + (NSString *) randomHex; @end @implementation NSString (_hex_) - (NSString *) lowercaseFirstCharacter { // Lowercase the first letter of the class to make the element name NSString *first = [[self substringToIndex: 1] lowercaseString]; NSString *rest = [self substringFromIndex: 1]; NSString *result = [NSString stringWithFormat: @"%@%@", first, rest]; return result; } - (NSString *) splitString { NSString *result = [self substringFromIndex: [self length] - 8]; result = [NSString stringWithFormat: @"%@-%@-%@", [result substringWithRange: NSMakeRange(0,3)], [result substringWithRange: NSMakeRange(3,2)], [result substringWithRange: NSMakeRange(5,3)]]; return result; } - (NSString *) hexString { NSUInteger l = [self length]; unichar *c = malloc(l * sizeof(unichar)); NSUInteger i = 0; [self getCharacters: c]; NSString *result = @""; for (i = 0; i < l; i++) { result = [result stringByAppendingString: [NSString stringWithFormat: @"%x", c[i]]]; } free(c); return result; } + (NSString *) randomHex { srand((unsigned int)_count--); uint32_t r = (uint32_t)rand(); return [NSString stringWithFormat: @"%08X", r]; // uppercase so we know it was generated... } @end @interface GormXIBModelGenerator (Private) - (void) _collectObjectsFromObject: (id)obj withParent: (NSXMLElement *)node; - (void) _collectObjectsFromObject: (id)obj ForKey: (NSString *)keyName withParent: (NSXMLElement *)node; @end @implementation GormXIBModelGenerator + (void) initialize { if (self == [GormXIBModelGenerator class]) { _allowedSizeKeys = [[NSArray alloc] initWithObjects: @"cellSize", @"intercellSpacing", nil]; _externallyReferencedClasses = [[NSArray alloc] initWithObjects: @"NSTableHeaderView", nil]; _valueMapping = [[NSDictionary alloc] initWithObjectsAndKeys: @"catalog", @"NSNamedColorSpace", @"white", @"NSWhiteColorSpace", @"deviceWhite", @"NSDeviceWhiteColorSpace", @"calibratedWhite", @"NSCalibratedWhiteColorSpace", @"deviceCMYK", @"NSDeviceCMYKColorSpace", @"RGB", @"NSRGBColorSpace", @"deviceRGB", @"NSDeviceRGBColorSpace", @"calibratedRGB", @"NSCalibratedRGBColorSpace", @"pattern", @"NSPatternColorSpace", nil]; _signatures = [[NSDictionary alloc] initWithObjectsAndKeys: @"char", @"c", @"NSUInteger", @"i", // this might be wrong.. maybe it should be NSInteger or just int @"short", @"s", @"long", @"l", @"long long", @"q", @"BOOL", @"C", // unsigned char @"NSUInteger", @"I", @"unsigned short",@"S", @"unsigned long", @"L", @"long long", @"Q", @"float", @"f", @"CGFloat", @"d", @"bool", @"B", @"void", @"v", @"char*", @"*", @"id", @"@", @"Class", @"#", @"SEL", @":", @"NSRect", @"{_NSRect={_NSPoint=dd}{_NSSize=dd}}", @"NSSize", @"{_NSSize=dd}", @"NSPoint", @"{_NSPoint=dd}", nil]; _skipClass = [[NSArray alloc] initWithObjects: @"NSBrowserCell", @"NSDateFormatter", @"NSNumberFormatter", nil]; _skipCollectionForKey = [[NSArray alloc] initWithObjects: @"headerView", @"controlView", @"outlineTableColumn", @"documentView", @"menu", @"owner", @"subviews", @"contentView", @"titleCell", nil]; _singletonObjects = [[NSArray alloc] initWithObjects: @"GSNamedColor", @"NSFont", @"NSColor", @"NSImage", @"GSCalibratedWhiteColor", nil]; _methodToKeyName = [[NSDictionary alloc] initWithObjectsAndKeys: @"name", @"colorNameComponent", @"catalog", @"catalogNameComponent", @"colorSpace", @"colorSpaceName", @"white", @"whiteComponent", @"red", @"redComponent", @"green", @"greenComponent", @"blue", @"blueComponent", @"alpha", @"alphaComponent", @"cyan", @"cyanComponent", @"magenta", @"magentaComponent", @"yellow", @"yellowComponent", @"black", @"blackComponent", nil]; _nonProperties = [[NSDictionary alloc] initWithObjectsAndKeys: [NSArray arrayWithObject: @"cells"], @"NSMatrix", [NSArray arrayWithObjects: @"colorNameComponent", @"catalogNameComponent", @"colorSpaceName", nil], @"GSNamedColor", [NSArray arrayWithObjects: @"wjoteComponent", @"colorSpaceName", nil], @"GSWhiteColor", [NSArray arrayWithObjects: @"whiteComponent", @"colorSpaceName", nil], @"GSDeviceWhiteColor", [NSArray arrayWithObjects: @"whiteComponent", @"colorSpaceName", nil], @"GSCalibratedWhiteColor", [NSArray arrayWithObjects: @"cyanComponent", @"magentaComponent", @"yellowComponent", @"blackComponent", @"alphaComponent", @"colorSpaceName", nil], @"GSDeviceCMYKColor", [NSArray arrayWithObjects: @"redComponent", @"blueComponent", @"greenComponent", @"alphaComponent", @"colorSpaceName", nil], @"GSRGBColor", [NSArray arrayWithObjects: @"redComponent", @"blueComponent", @"greenComponent", @"alphaComponent", @"colorSpaceName", nil], @"GSDeviceRGBColor", [NSArray arrayWithObjects: @"redComponent", @"blueComponent", @"greenComponent", @"alphaComponent", @"colorSpaceName", nil], @"GSCalibratedRBGColor", [NSArray arrayWithObjects: @"patternImage", @"colorSpaceName", nil], @"GSPatternColor", nil]; _mappedClassNames = [[NSDictionary alloc] initWithObjectsAndKeys: @"NSColor", @"GSNamedColor", @"NSColor", @"GSWhiteColor", @"NSColor", @"GSDeviceWhiteColor", @"NSColor", @"GSCalibratedWhiteColor", @"NSColor", @"GSDeviceCMYKColor", @"NSColor", @"GSRGBColor", @"NSColor", @"GSDeviceRGBColor", @"NSColor", @"GSCalibratedRGBColor", @"NSColor", @"GSPatternColor", @"NSView", @"GSTableCornerView", @"NSWindow", @"NSPanel", @"NSWindow", @"GormNSPanel", nil]; _excludedKeys = [[NSArray alloc] initWithObjects: @"font", @"alphaValue", @"servicesProvider", @"servicesMenu", @"nextResponder", @"supermenu", @"attributedStringValue", @"stringValue", @"objectValue", @"menuView", @"menu", @"attributedAlternateTitle", @"attributedTitle", @"miniwindowImage", @"menuItem", @"showsResizeIndicator", @"titleFont", @"target", @"action", @"textContainer", @"subviews", @"selectedRanges", @"linkTextAttributes", @"typingAttributes", @"defaultParagraphStyle", @"tableView", @"sortDescriptors", @"previousText", @"nextText", @"needsDisplay", @"postsFrameChangedNotifications", @"postsBoundsChangedNotifications", @"menuRepresentation", @"submenu", @"initialFirstResponder", @"cornerView", @"doubleValue", @"intValue", @"previousKeyView", @"nextKeyView", @"prototype", @"keyCell", @"isLenient", nil]; } } /** * Returns an autoreleast GormXIBDocument object; */ + (instancetype) xibWithGormDocument: (GormDocument *)doc { return AUTORELEASE([[self alloc] initWithGormDocument: doc]); } /** * Initialize with GormDocument object to parse the XML from or into. */ - (instancetype) initWithGormDocument: (GormDocument *)doc { self = [super init]; if (self != nil) { ASSIGN(_gormDocument, doc); _mappingDictionary = [[NSMutableDictionary alloc] init]; _allIdentifiers = [[NSMutableArray alloc] init]; _objectToIdentifier = RETAIN([NSMapTable weakToWeakObjectsMapTable]); } return self; } - (void) dealloc { DESTROY(_gormDocument); DESTROY(_mappingDictionary); DESTROY(_allIdentifiers); DESTROY(_objectToIdentifier); [super dealloc]; } - (NSString *) _convertName: (NSString *)name { NSString *className = name; // NSLog(@"Name = %@", name); if ([_mappedClassNames objectForKey: name]) { className = [_mappedClassNames objectForKey: name]; // NSLog(@"%@ => %@", name, className); } NSString *result = [className stringByReplacingOccurrencesOfString: @"NS" withString: @""]; // Try removing other prefixes... result = [result stringByReplacingOccurrencesOfString: @"GS" withString: @""]; result = [result stringByReplacingOccurrencesOfString: @"Gorm" withString: @""]; // Lowercase the first letter of the class to make the element name result = [result lowercaseFirstCharacter]; // Map certain names to XIB equivalents... if ([result isEqualToString: @"objectProxy"]) { result = @"customObject"; } // NSLog(@"Result = %@", result); return result; } - (BOOL) _isSameClass: (NSString *)className1 and: (NSString *)className2 { NSString *cc1 = [self _convertName: className1]; NSString *cc2 = [self _convertName: className2]; return [cc1 isEqualToString: cc2]; } - (NSString *) _createIdentifierForObject: (id)obj { NSString *result = nil; if (obj != nil) { result = [_objectToIdentifier objectForKey: obj]; if (result == nil) { if ([obj isKindOfClass: [GormObjectProxy class]]) { NSString *className = [obj className]; if ([className isEqualToString: @"NSApplication"]) { result = @"-3"; return result; } else if ([className isEqualToString: @"NSOwner"]) { result = @"-2"; return result; } else if ([className isEqualToString: @"NSFirst"]) { result = @"-1"; return result; } } else if([obj isKindOfClass: [GormFilesOwner class]]) { result = @"-2"; return result; } else if([obj isKindOfClass: [GormFirstResponder class]]) { result = @"-1"; return result; } else { result = [_gormDocument nameForObject: obj]; } // Encoding NSString *originalName = [result copy]; NSString *stackedResult = [NSString stringWithFormat: @"%@%@%@%@", result, result, result, result]; // kludge... // result = [stackedResult hexString]; result = [result splitString]; // Collision... id o = [_mappingDictionary objectForKey: result]; if (o != nil) { result = [[NSString randomHex] splitString]; } // If the id already exists, but isn't mapped... if ([_allIdentifiers containsObject: result]) { result = [[NSString randomHex] splitString]; } if (originalName != nil) { // Map the name... [_mappingDictionary setObject: originalName forKey: result]; } // Record the id... [_allIdentifiers addObject: result]; // Record the mapping of obj -> identifier... [_objectToIdentifier setObject: result forKey: obj]; } } return result; } - (NSString *) _userLabelForObject: (id)obj { NSString *result = nil; if ([obj isKindOfClass: [GormObjectProxy class]]) { NSString *className = [obj className]; if ([className isEqualToString: @"NSApplication"]) { result = @"Application"; } else if ([className isEqualToString: @"NSOwner"]) { result = @"File's Owner"; } else if ([className isEqualToString: @"NSFirst"]) { result = @"First Responder"; } } return result; } - (void) _createPlaceholderObjects: (NSXMLElement *)elem { NSXMLElement *co = nil; NSXMLNode *attr = nil; GormFilesOwner *filesOwner = [_gormDocument filesOwner]; NSString *ownerClassName = [filesOwner className]; // Application... co = [NSXMLNode elementWithName: @"customObject"]; attr = [NSXMLNode attributeWithName: @"id" stringValue: @"-3"]; [co addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"userLabel" stringValue: @"Application"]; [co addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"customClass" stringValue: @"NSObject"]; [co addAttribute: attr]; [elem addChild: co]; // File's Owner... co = [NSXMLNode elementWithName: @"customObject"]; attr = [NSXMLNode attributeWithName: @"id" stringValue: @"-2"]; [co addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"userLabel" stringValue: @"File's Owner"]; [co addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"customClass" stringValue: ownerClassName]; [co addAttribute: attr]; [elem addChild: co]; [self _addAllConnections: co fromObject: filesOwner]; // First Responder co = [NSXMLNode elementWithName: @"customObject"]; attr = [NSXMLNode attributeWithName: @"id" stringValue: @"-1"]; [co addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"userLabel" stringValue: @"First Responder"]; [co addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"customClass" stringValue: @"FirstResponder"]; [co addAttribute: attr]; [elem addChild: co]; } - (NSArray *) _propertiesFromMethods: (NSArray *)methods forObject: (id)obj { NSEnumerator *en = [methods objectEnumerator]; NSString *name = nil; NSMutableArray *result = [NSMutableArray array]; while ((name = [en nextObject]) != nil) { if ([name isEqualToString: @"set"] == NO) // this is the [NSFont set] method... skip... { NSString *substring = [name substringToIndex: 3]; if ([substring isEqualToString: @"set"]) { NSString *os = [[name substringFromIndex: 3] stringByReplacingOccurrencesOfString: @":" withString: @""]; NSString *s = [os lowercaseFirstCharacter]; NSString *iss = [NSString stringWithFormat: @"is%@", os]; if ([methods containsObject: s]) { SEL sel = NSSelectorFromString(s); if (sel != NULL) { NSDebugLog(@"selector = %@",s); // NSMethodSignature *sig = [obj methodSignatureForSelector: sel]; // NSLog(@"methodSignatureForSelector %@ -> %s", s, [sig methodReturnType]); if ([obj respondsToSelector: sel]) // if it has a normal getting, fine... { [result addObject: s]; } } } else if ([methods containsObject: iss]) { NSDebugLog(@"***** retrying with getter name: %@", iss); SEL sel = NSSelectorFromString(iss); if (sel != nil) { if ([obj respondsToSelector: sel]) { NSDebugLog(@"Added... %@", iss); [result addObject: iss]; } } } } } } return result; } - (void) _addRect: (NSRect)r toElement: (NSXMLElement *)elem withName: (NSString *)name { NSXMLElement *rectElem = [NSXMLNode elementWithName: @"rect"]; NSXMLNode *attr = nil; attr = [NSXMLNode attributeWithName: @"key" stringValue: name]; [rectElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"x" stringValue: [NSString stringWithFormat: @"%.1f",r.origin.x]]; [rectElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"y" stringValue: [NSString stringWithFormat: @"%.1f",r.origin.y]]; [rectElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"width" stringValue: [NSString stringWithFormat: @"%ld", (NSUInteger)r.size.width]]; [rectElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"height" stringValue: [NSString stringWithFormat: @"%ld", (NSUInteger)r.size.height]]; [rectElem addAttribute: attr]; [elem addChild: rectElem]; } - (void) _addSize: (NSSize)size toElement: (NSXMLElement *)elem withName: (NSString *)name { NSXMLElement *rectElem = [NSXMLNode elementWithName: @"size"]; NSXMLNode *attr = nil; attr = [NSXMLNode attributeWithName: @"key" stringValue: name]; [rectElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"width" stringValue: [NSString stringWithFormat: @"%ld", (NSUInteger)size.width]]; [rectElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"height" stringValue: [NSString stringWithFormat: @"%ld", (NSUInteger)size.height]]; [rectElem addAttribute: attr]; [elem addChild: rectElem]; } - (void) _addKeyEquivalent: (NSString *)ke toElement: (NSXMLElement *)elem { if ([ke isEqualToString: @""] == NO) { NSCharacterSet *cs = [NSCharacterSet alphanumericCharacterSet]; unichar c = [ke characterAtIndex: 0]; if ([cs characterIsMember: c]) { NSXMLNode *attr = [NSXMLNode attributeWithName: @"keyEquivalent" stringValue: ke]; [elem addAttribute: attr]; } NSDebugLog(@"elem = %@", elem); } } - (void) _addKeyEquivalentModifierMask: (NSUInteger)mask toElement: (NSXMLElement *)elem { NSXMLNode *attr = nil; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wtautological-bitwise-compare" NSDebugLog(@"keyEquivalentModifierMask = %ld, element = %@", mask, elem); if ([elem attributeForName: @"keyEquivalent"] != nil) { if (mask | NSCommandKeyMask) { attr = [NSXMLNode attributeWithName: @"command" stringValue: @"YES"]; [elem addAttribute: attr]; } if (mask | NSShiftKeyMask) { attr = [NSXMLNode attributeWithName: @"shift" stringValue: @"YES"]; [elem addAttribute: attr]; } if (mask | NSControlKeyMask) { attr = [NSXMLNode attributeWithName: @"control" stringValue: @"YES"]; [elem addAttribute: attr]; } if (mask | NSAlternateKeyMask) { attr = [NSXMLNode attributeWithName: @"option" stringValue: @"YES"]; [elem addAttribute: attr]; } } #pragma GCC diagnostic pop } - (void) _addWindowStyleMask: (NSUInteger)mask toElement: (NSXMLElement *)elem { NSXMLNode *attr = nil; NSDebugLog(@"styleMask = %ld, element = %@", mask, elem); NSXMLElement *styleMaskElem = [NSXMLNode elementWithName: @"windowStyleMask"]; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wtautological-bitwise-compare" if (mask | NSWindowStyleMaskTitled) { attr = [NSXMLNode attributeWithName: @"titled" stringValue: @"YES"]; [styleMaskElem addAttribute: attr]; } if (mask | NSWindowStyleMaskClosable) { attr = [NSXMLNode attributeWithName: @"closable" stringValue: @"YES"]; [styleMaskElem addAttribute: attr]; } if (mask | NSWindowStyleMaskMiniaturizable) { attr = [NSXMLNode attributeWithName: @"miniaturizable" stringValue: @"YES"]; [styleMaskElem addAttribute: attr]; } if (mask | NSWindowStyleMaskResizable) { attr = [NSXMLNode attributeWithName: @"resizable" stringValue: @"YES"]; [styleMaskElem addAttribute: attr]; } #pragma GCC diagnostic pop attr = [NSXMLNode attributeWithName: @"key" stringValue: @"styleMask"]; [styleMaskElem addAttribute: attr]; [elem addChild: styleMaskElem]; } - (void) _addButtonType: (NSString *)buttonTypeString toElement: (NSXMLElement *)elem { NSXMLNode *attr = nil; attr = [NSXMLNode attributeWithName: @"type" stringValue: buttonTypeString]; [elem addAttribute: attr]; if ([buttonTypeString isEqualToString: @"check"] || [buttonTypeString isEqualToString: @"radio"]) { attr = [NSXMLNode attributeWithName: @"imagePosition" stringValue: @"left"]; [elem addAttribute: attr]; } } - (void) _addAlignment: (NSUInteger)alignment toElement: (NSXMLElement *)elem { NSXMLNode *attr = nil; NSString *string = nil; switch (alignment) { case NSLeftTextAlignment: string = @"left"; break; case NSRightTextAlignment: string = @"right"; break; case NSCenterTextAlignment: string = @"center"; break; case NSJustifiedTextAlignment: string = @"justified"; break; case NSNaturalTextAlignment: string = @"natural"; break; } attr = [NSXMLNode attributeWithName: @"alignment" stringValue: string]; [elem addAttribute: attr]; } - (void) _addBezelStyleForObject: (id)obj toElement: (NSXMLElement *)elem { NSString *result = nil; NSXMLNode *attr = nil; if ([obj isKindOfClass: [NSButtonCell class]]) { NSBezelStyle bezel = (NSBezelStyle)[obj bezelStyle] - 1; NSArray *bezelTypeArray = [NSArray arrayWithObjects: @"rounded", @"regularSquare", @"thick", @"thicker", @"disclosure", @"shadowlessSquare", @"circular", @"texturedSquare", @"helpButton", @"smallSquare", @"texturedRounded", @"roundRect", @"recessed", @"roundedDisclosure", @"next", @"pushButton", @"smallIconButton", @"mediumIconButton", @"largeIconButton", nil]; if (bezel >= 0 && bezel <= 18) { result = [bezelTypeArray objectAtIndex: bezel]; } } else if ([obj isKindOfClass: [NSTextFieldCell class]]) { NSTextFieldBezelStyle bezel = (NSTextFieldBezelStyle)[obj bezelStyle]; NSArray *bezelTypeArray = [NSArray arrayWithObjects: @"square", @"rounded", nil]; if (bezel >= 0 && bezel <= 1) { result = [bezelTypeArray objectAtIndex: bezel]; } } if (result != nil) { attr = [NSXMLNode attributeWithName: @"bezelStyle" stringValue: result]; [elem addAttribute: attr]; } } - (void) _addBorderStyle: (BOOL)bordered toElement: (NSXMLElement *)elem { if (bordered) { NSXMLNode *attr = [NSXMLNode attributeWithName: @"borderStyle" stringValue: @"border"]; [elem addAttribute: attr]; } } - (void) _addAutoresizingMask: (NSAutoresizingMaskOptions)m toElement: (NSXMLElement *)elem { if (m != 0) { NSXMLElement *autoresizingMaskElem = [NSXMLNode elementWithName: @"autoresizingMask"]; NSXMLNode *attr = nil; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wtautological-bitwise-compare" if (m | NSViewWidthSizable) { attr = [NSXMLNode attributeWithName: @"widthSizable" stringValue: @"YES"]; } if (m | NSViewHeightSizable) { attr = [NSXMLNode attributeWithName: @"heightSizable" stringValue: @"YES"]; } if (m | NSViewMaxXMargin) { attr = [NSXMLNode attributeWithName: @"flexibleMaxX" stringValue: @"YES"]; } if (m | NSViewMaxYMargin) { attr = [NSXMLNode attributeWithName: @"flexibleMaxY" stringValue: @"YES"]; } if (m | NSViewMinXMargin) { attr = [NSXMLNode attributeWithName: @"flexibleMinX" stringValue: @"YES"]; } if (m | NSViewMinYMargin) { attr = [NSXMLNode attributeWithName: @"flexibleMinY" stringValue: @"YES"]; } #pragma GCC diagnostic pop [autoresizingMaskElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"key" stringValue: @"autoresizeMask"]; [autoresizingMaskElem addAttribute: attr]; [elem addChild: autoresizingMaskElem]; } } - (void) _addTitlePosition: (NSTitlePosition)p toElement: (NSXMLElement *)elem { NSString *result = nil; switch (p) { case NSNoTitle: result = @"noTitle"; break; case NSAboveTop: result = @"aboveTop"; break; case NSAtTop: break; case NSBelowTop: result = @"belowTop"; break; case NSAboveBottom: result = @"aboveBottom"; break; case NSAtBottom: result = @"atBottom"; break; case NSBelowBottom: result = @"belowBottom"; break; } if (result != nil) { NSXMLNode *attr = [NSXMLNode attributeWithName: @"titlePosition" stringValue: result]; [elem addAttribute: attr]; } } - (void) _addTableColumns: (NSArray *)cols toElement: (NSXMLElement *)elem { if ([cols count] > 0) { NSXMLElement *tblColElem = [NSXMLNode elementWithName: @"tableColumns"]; NSEnumerator *en = [cols objectEnumerator]; id col = nil; // NSLog(@"cols = %@", cols); while ((col = [en nextObject]) != nil) { [self _collectObjectsFromObject: col withParent: tblColElem]; } [elem addChild: tblColElem]; } } - (void) _addBoolean: (BOOL)flag withName: (NSString *)name toElement: (NSXMLElement *)elem { if (flag == YES) { NSXMLNode *attr = [NSXMLNode attributeWithName: name stringValue: @"YES"]; [elem addAttribute: attr]; // Somewhat kludgy fix for button border problem... if ([name isEqualToString: @"bordered"]) { attr = [NSXMLNode attributeWithName: @"borderStyle" stringValue: @"border"]; [elem addAttribute: attr]; } } } - (void) _addFloat: (CGFloat)f withName: (NSString *)name toElement: (NSXMLElement *)elem { NSString *val = [NSString stringWithFormat: @"%.1f",f]; NSXMLNode *attr = [NSXMLNode attributeWithName: name stringValue: val]; [elem addAttribute: attr]; } - (void) _addString: (NSString *)val withName: (NSString *)name toElement: (NSXMLElement *)elem { if (val != nil && [val isEqualToString: @""] == NO) { NSXMLNode *attr = [NSXMLNode attributeWithName: name stringValue: val]; [elem addAttribute: attr]; } } - (void) _addCellsFromMatrix: (NSMatrix *)matrix toElement: (NSXMLElement *)elem { NSRect rect = [matrix frame]; NSSize cellSize = [matrix cellSize]; NSSize inter = [matrix intercellSpacing]; NSUInteger itemsPerCol = (rect.size.width + inter.width) / cellSize.width; NSUInteger itemsPerRow = (rect.size.height + inter.height) / cellSize.height; NSUInteger c = 0; NSUInteger r = 0; NSArray *cells = [matrix cells]; NSUInteger count = [cells count]; NSUInteger i = 0; NSXMLElement *cellsElem = [NSXMLNode elementWithName: @"cells"]; NSString *cellClass = nil; NSDebugLog(@"cells = %@\nelem = %@", [matrix cells], elem); NSLog(@"WARNING: NSMatrix is not fully supported by Xcode, this might cause it to crash or may not be reloadable by this application"); if (count > 0) { [elem addChild: cellsElem]; for (c = 0; c < itemsPerCol; c++) { NSXMLElement *columnElem = [NSXMLNode elementWithName: @"column"]; for (r = 0; r < itemsPerRow; r++) { id cell = nil; i = (c * itemsPerCol) + r; // If we go past the end of the array... if (i >= count) { continue; } cell = [cells objectAtIndex: i]; if (cellClass == nil) { cellClass = NSStringFromClass([cell class]); } [self _collectObjectsFromObject: cell withParent: columnElem]; } [cellsElem addChild: columnElem]; } } // Add the cell class, so that it doesn't crash on reload... if (cellClass != nil) { NSXMLNode *attr = [NSXMLNode attributeWithName: @"cellClass" stringValue: cellClass]; [elem addAttribute: attr]; } else { NSXMLNode *attr = [NSXMLNode attributeWithName: @"cellClass" stringValue: @"NSButtonCell"]; [elem addAttribute: attr]; } } - (void) _addHoldingPrioritiesForSplitView: (NSSplitView *)sv toElement: (NSXMLElement *)elem { NSUInteger count = [[sv subviews] count]; NSXMLElement *holdingPrioritiesElement = [NSXMLNode elementWithName: @"holdingPriorities"]; NSUInteger i = 0; for (i = 0; i < count; i++) { NSXMLElement *realElement = [NSXMLNode elementWithName: @"real"]; NSXMLNode *attr = [NSXMLNode attributeWithName: @"value" stringValue: @"250"]; // default value [realElement addAttribute: attr]; [holdingPrioritiesElement addChild: realElement]; } [elem addChild: holdingPrioritiesElement]; } - (void) _addProperty: (NSString *)name withType: (NSString *)type toElement: (NSXMLElement *)elem fromObject: (id)obj { NSString *objClassName = NSStringFromClass([obj class]); if ([_excludedKeys containsObject: name]) { NSDebugLog(@"skipping %@", name); return; // do not process anything in the excluded key list... } if ([_skipClass containsObject: objClassName] || objClassName == nil) { return; } if ([name isEqualToString: @"cells"] && [obj isKindOfClass: [NSMatrix class]]) { [self _addCellsFromMatrix: obj toElement: elem]; return; } if ([type isEqualToString: @"id"]) // clz != nil) // type is a class { SEL s = NSSelectorFromString(name); // NSLog(@"%@ -> %@", name, type); if (s != NULL) { if ([obj respondsToSelector: s]) { id o = [obj performSelector: s]; if (o != nil) { NSString *newName = [_methodToKeyName objectForKey: name]; if (newName != nil) { name = newName; } if ([o isKindOfClass: [NSString class]]) { NSDebugLog(@"Adding string property %@ = %@", name, o); if ([_valueMapping objectForKey: o] != nil) { o = [_valueMapping objectForKey: o]; } if ([name isEqualToString: @"keyEquivalent"]) { [self _addKeyEquivalent: o toElement: elem]; } else if (o != nil && [o isEqualToString: @""] == NO) { NSXMLNode *attr = [NSXMLNode attributeWithName: name stringValue: o]; [elem addAttribute: attr]; } } else { NSString *className = NSStringFromClass([o class]); if ([_singletonObjects containsObject: className] == NO || [_externallyReferencedClasses containsObject: className]) { NSString *ident = [self _createIdentifierForObject: o]; NSXMLNode *attr = [NSXMLNode attributeWithName: name stringValue: ident]; [elem addAttribute: attr]; } if ([_skipCollectionForKey containsObject: name] == NO) { [self _collectObjectsFromObject: o forKey: name withParent: elem]; } } } } } } else if ([type isEqualToString: @"NSRect"]) { SEL sel = NSSelectorFromString(name); if (sel != NULL) { IMP imp = [obj methodForSelector: sel]; if (imp != NULL) { NSRect f = ((NSRect (*)(id, SEL))imp)(obj, sel); [self _addRect: f toElement: elem withName: name]; } } } else if ([type isEqualToString: @"NSSize"]) { if ([_allowedSizeKeys containsObject: name]) { SEL sel = NSSelectorFromString(name); if (sel != NULL) { IMP imp = [obj methodForSelector: sel]; if (imp != NULL) { NSSize s = ((NSSize (*)(id, SEL))imp)(obj, sel); [self _addSize: s toElement: elem withName: name]; } } } } else if ([type isEqualToString: @"CGFloat"]) { NSString *keyName = name; SEL sel = NSSelectorFromString(name); if (sel != NULL) { IMP imp = [obj methodForSelector: sel]; if (imp != NULL) { CGFloat f = ((CGFloat (*)(id, SEL))imp)(obj, sel); [self _addFloat: f withName: keyName toElement: elem]; } } } else if ([type isEqualToString: @"BOOL"]) { NSString *keyName = name; if ([[name substringToIndex: 2] isEqualToString: @"is"]) { keyName = [name substringFromIndex: 2]; keyName = [keyName lowercaseString]; } SEL sel = NSSelectorFromString(name); if (sel != NULL) { IMP imp = [obj methodForSelector: sel]; if (imp != NULL) { BOOL f = ((BOOL (*)(id, SEL))imp)(obj, sel); [self _addBoolean: f withName: keyName toElement: elem]; } } } else if ([name isEqualToString: @"keyEquivalentModifierMask"]) { NSUInteger k = [obj keyEquivalentModifierMask]; [self _addKeyEquivalentModifierMask: k toElement: elem]; } else if ([name isEqualToString: @"buttonType"]) { NSString *buttonTypeString = [obj buttonTypeString]; [self _addButtonType: buttonTypeString toElement: elem]; } else if ([name isEqualToString: @"autoresizingMask"]) { NSAutoresizingMaskOptions m = [obj autoresizingMask]; [self _addAutoresizingMask: m toElement: elem]; } else if ([name isEqualToString: @"alignment"] && [obj respondsToSelector: @selector(cell)] == NO) { [self _addAlignment: [obj alignment] toElement: elem]; } else if ([name isEqualToString: @"bezelStyle"] && [obj respondsToSelector: @selector(cell)] == NO) { [self _addBezelStyleForObject: obj toElement: elem]; } else if ([name isEqualToString: @"isBordered"] && [obj respondsToSelector: @selector(cell)] == NO) { BOOL bordered = [obj isBordered]; NSDebugLog(@"Handling isBordered..."); [self _addBorderStyle: bordered toElement: elem]; } else if ([name isEqualToString: @"titlePosition"]) { NSTitlePosition p = [obj titlePosition]; [self _addTitlePosition: p toElement: elem]; } } - (void) _addPropertiesFromArray: (NSArray *)props toElement: (NSXMLElement *)elem fromObject: (id)obj { if ([props count] > 0) { NSEnumerator *en = [props objectEnumerator]; NSString *name = nil; while ((name = [en nextObject]) != nil) { SEL sel = NSSelectorFromString(name); if (sel != NULL) { if ([obj respondsToSelector: sel] == NO) continue; if ([_excludedKeys containsObject: name]) continue; NSMethodSignature *sig = [obj methodSignatureForSelector: sel]; if (sig != NULL) { const char *ctype = [sig methodReturnType]; if (ctype != NULL) { NSString *ctypeString = [NSString stringWithCString: ctype encoding: NSUTF8StringEncoding]; NSString *type = [_signatures objectForKey: ctypeString]; if (type != nil) { [self _addProperty: name withType: type toElement: elem fromObject: obj]; } } } } } } } - (void) _addAllProperties: (NSXMLElement *)elem fromObject: (id)obj { NSArray *methods = GSObjCMethodNames(obj, YES); NSArray *props = [self _propertiesFromMethods: methods forObject: obj]; [self _addPropertiesFromArray: props toElement: elem fromObject: obj]; NSDebugLog(@"methods = %@", props); } - (void) _addAllNonProperties: (NSXMLElement *)elem fromObject: (id)obj { NSString *className = NSStringFromClass([obj class]); if (className != nil) { NSArray *props = [_nonProperties objectForKey: className]; [self _addPropertiesFromArray: props toElement: elem fromObject: obj]; } } - (void) _addAllConnections: (NSXMLElement *)elem fromObject: (id)obj { NSArray *connectors = [_gormDocument connectorsForSource: obj ofClass: [NSNibControlConnector class]]; if ([connectors count] > 0) { NSXMLElement *conns = [NSXMLNode elementWithName: @"connections"]; NSEnumerator *en = [connectors objectEnumerator]; NSNibControlConnector *action = nil; // Get actions... while ((action = [en nextObject]) != nil) { NSString *targetId = [self _createIdentifierForObject: [action destination]]; if ([targetId isEqualToString: @""] == NO && targetId != nil) { NSDebugLog(@"action = %@", action); NSXMLElement *actionElem = [NSXMLNode elementWithName: @"action"]; NSXMLNode *attr = [NSXMLNode attributeWithName: @"selector" stringValue: [action label]]; [actionElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"target" stringValue: targetId]; [actionElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"id" stringValue: [[NSString randomHex] splitString]]; [actionElem addAttribute: attr]; [conns addChild: actionElem]; } } [elem addChild: conns]; } connectors =[_gormDocument connectorsForSource: obj ofClass: [NSNibOutletConnector class]]; NSDebugLog(@"outlet connectors = %@, for obj = %@", connectors, obj); if ([connectors count] > 0) { NSXMLElement *conns = [NSXMLNode elementWithName: @"connections"]; NSEnumerator *en = [connectors objectEnumerator]; NSNibOutletConnector *outlet = nil; // Get actions... while ((outlet = [en nextObject]) != nil) { NSString *destinationId = [self _createIdentifierForObject: [outlet destination]]; if([destinationId isEqualToString: @""] == NO && destinationId != nil) { NSDebugLog(@"outlet = %@", outlet); NSXMLElement *outletElem = [NSXMLNode elementWithName: @"outlet"]; NSXMLNode *attr = [NSXMLNode attributeWithName: @"property" stringValue: [outlet label]]; [outletElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"destination" stringValue: destinationId]; [outletElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"id" stringValue: [[NSString randomHex] splitString]]; [outletElem addAttribute: attr]; [conns addChild: outletElem]; } } [elem addChild: conns]; } } // This method recursively navigates the entire object tree and emits XML - (void) _collectObjectsFromObject: (id)obj forKey: (NSString *)keyName withParent: (NSXMLElement *)pNode { NSString *ident = [self _createIdentifierForObject: obj]; if (ident != nil) { NSXMLElement *parentNode = pNode; NSString *className = NSStringFromClass([obj class]); if ([_skipClass containsObject: className]) { return; } NSString *elementName = [self _convertName: className]; // NSLog(@"elementName = %@", elementName); NSXMLElement *elem = [NSXMLNode elementWithName: elementName]; NSXMLNode *attr = nil; // If the object is a singleton, then there is no need for the id to be presented. if ([_singletonObjects containsObject: className] == NO) { attr = [NSXMLNode attributeWithName: @"id" stringValue: ident]; [elem addAttribute: attr]; } NSString *name = [_gormDocument nameForObject: obj]; NSString *userLabel = [self _userLabelForObject: obj]; if (userLabel != nil) { attr = [NSXMLNode attributeWithName: @"userLabel" stringValue: userLabel]; [elem addAttribute: attr]; } // Add key to elem... if (keyName != nil && [keyName isEqualToString: @""] == NO) { attr = [NSXMLNode attributeWithName: @"key" stringValue: keyName]; [elem addAttribute: attr]; } if ([obj isKindOfClass: [GormObjectProxy class]] || [obj respondsToSelector: @selector(className)]) { if ([self _isSameClass: className and: [obj className]] == NO) { className = [obj className]; attr = [NSXMLNode attributeWithName: @"customClass" stringValue: className]; [elem addAttribute: attr]; } } // Add all of the connections for a given object... [self _addAllConnections: elem fromObject: obj]; // Add all properties, then add the element to the parent... [self _addAllProperties: elem fromObject: obj]; // Add some items that are not actually properties, but should be reflected in the XML... [self _addAllNonProperties: elem fromObject: obj]; // Move this to its grandfather node... XIB files seem to expect this in the scroll view... if ([obj isKindOfClass: [NSScrollView class]]) { NSClipView *cv = [obj contentView]; NSArray *sv = [cv subviews]; if ([sv count] > 0) { id view = [[cv subviews] objectAtIndex: 0]; if ([view respondsToSelector: @selector(headerView)]) { id hv = [view headerView]; [self _collectObjectsFromObject: hv forKey: nil withParent: elem]; } } } // Don't add the MainMenu directly, since we need to wrap it.. NSMenu... if ([name isEqualToString: @"NSMenu"] == NO) { [parentNode addChild: elem]; } // For each different class, recurse through the structure as needed. // For NSMenu, there is a special case, since it needs to be contained in another menu. if ([obj isKindOfClass: [NSMenu class]]) { NSArray *items = [obj itemArray]; NSEnumerator *en = [items objectEnumerator]; id item = nil; if ([name isEqualToString: @"NSMenu"]) { NSXMLNode *systemMenuAttr = [NSXMLNode attributeWithName: @"systemMenu" stringValue: @"apple"]; [elem addAttribute: systemMenuAttr]; NSXMLElement *mainMenuElem = [NSXMLNode elementWithName: @"menu"]; attr = [NSXMLNode attributeWithName: @"id" stringValue: [[NSString randomHex] splitString]]; [mainMenuElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"systemMenu" stringValue: @"main"]; [mainMenuElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"title" stringValue: @"Main Menu"]; [mainMenuElem addAttribute: attr]; NSXMLElement *mainItemsElem = [NSXMLNode elementWithName: @"items"]; [mainMenuElem addChild: mainItemsElem]; NSXMLElement *mainMenuItem = [NSXMLNode elementWithName: @"menuItem"]; [mainItemsElem addChild: mainMenuItem]; attr = [NSXMLNode attributeWithName: @"id" stringValue: [[NSString randomHex] splitString]]; [mainMenuItem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"title" stringValue: [obj title]]; [mainMenuItem addChild: elem]; // Now add the node, since we have inserted the proper system menu [parentNode addChild: mainMenuElem]; } // Add submenu attribute... attr = [NSXMLNode attributeWithName: @"key" stringValue: @"submenu"]; [elem addAttribute: attr]; // Add services menu... if (obj == [_gormDocument servicesMenu]) { attr = [NSXMLNode attributeWithName: @"systemMenu" stringValue: @"services"]; [elem addAttribute: attr]; } NSXMLElement *itemsElem = [NSXMLNode elementWithName: @"items"]; while ((item = [en nextObject]) != nil) { [self _collectObjectsFromObject: item withParent: itemsElem]; } [elem addChild: itemsElem]; // Add to parent element... } if ([obj isKindOfClass: [NSMenuItem class]]) { NSMenu *sm = [obj submenu]; if (sm != nil) { [self _collectObjectsFromObject: sm withParent: elem]; } } // Handle special case for popup, we need to add the selected item, and contain them // in a "menu" instance which doesn't exist on GNUstep... if ([obj isKindOfClass: [NSPopUpButtonCell class]]) { NSArray *items = [obj itemArray]; NSEnumerator *en = [items objectEnumerator]; id item = nil; NSXMLElement *menuElem = [NSXMLNode elementWithName: @"menu"]; NSXMLElement *itemsElem = [NSXMLNode elementWithName: @"items"]; NSXMLNode *attr = nil; attr = [NSXMLNode attributeWithName: @"key" stringValue: @"menu"]; [menuElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"id" stringValue: [[NSString randomHex] splitString]]; [menuElem addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"key" stringValue: @"cell"]; [elem addAttribute: attr]; id selectedItem = [obj selectedItem]; if (selectedItem != nil) { NSString *selectedItemId = [self _createIdentifierForObject: selectedItem]; attr = [NSXMLNode attributeWithName: @"selectedItem" stringValue: selectedItemId]; while ((item = [en nextObject]) != nil) { [self _collectObjectsFromObject: item withParent: itemsElem]; } [elem addAttribute: attr]; } [menuElem addChild: itemsElem]; [elem addChild: menuElem]; // Add to parent element... } if ([obj isKindOfClass: [NSTableHeaderView class]]) { NSXMLNode *attr = [NSXMLNode attributeWithName: @"key" stringValue: @"headerView"]; [elem addAttribute: attr]; } if ([obj isKindOfClass: [NSWindow class]]) { NSRect s = [[NSScreen mainScreen] frame]; NSRect c = [[obj contentView] frame]; NSUInteger m = [obj styleMask]; [self _addWindowStyleMask: m toElement: elem]; [self _addRect: c toElement: elem withName: @"contentRect"]; [self _addRect: s toElement: elem withName: @"screenRect"]; [self _collectObjectsFromObject: [obj contentView] withParent: elem]; } if ([obj isKindOfClass: [NSPanel class]]) { NSString *className = NSStringFromClass([obj class]); if ([className isEqualToString: @"GormNSPanel"]) { className = @"NSPanel"; } NSXMLNode *attr = [NSXMLNode attributeWithName: @"customClass" stringValue: className]; [elem addAttribute: attr]; } if ([obj isKindOfClass: [NSView class]]) // && [obj resondsToSelect: @selector(contentView)] == NO) { id sv = [obj superview]; if (obj == [[obj window] contentView]) { NSXMLNode *contentViewAttr = [NSXMLNode attributeWithName: @"key" stringValue: @"contentView"]; [elem addAttribute: contentViewAttr]; } if ([sv respondsToSelector: @selector(contentView)]) { if ([sv contentView] == obj) { NSXMLNode *contentViewAttr = [NSXMLNode attributeWithName: @"key" stringValue: @"contentView"]; [elem addAttribute: contentViewAttr]; } } if ([obj respondsToSelector: @selector(contentView)]) { NSView *cv = [obj contentView]; [self _collectObjectsFromObject: cv withParent: elem]; } else { if ([obj isKindOfClass: [NSTabView class]] == NO) { NSArray *subviews = [obj subviews]; if ([subviews count] > 0) { NSEnumerator *en = [subviews objectEnumerator]; id v = nil; NSXMLElement *subviewsElement = [NSXMLNode elementWithName: @"subviews"]; while ((v = [en nextObject]) != nil) { [self _collectObjectsFromObject: v withParent: subviewsElement]; } [elem addChild: subviewsElement]; } } } if ([obj respondsToSelector: @selector(tabViewItems)]) { NSArray *items = [obj tabViewItems]; if ([items count] > 0) { NSEnumerator *en = [items objectEnumerator]; id v = nil; NSXMLElement *itemsElement = [NSXMLNode elementWithName: @"tabViewItems"]; while ((v = [en nextObject]) != nil) { [self _collectObjectsFromObject: v withParent: itemsElement]; } [elem addChild: itemsElement]; } } } // Add the holding priorities for NSSplitView. GNUstep doesn't have these so we need to generate it... if ([obj isKindOfClass: [NSSplitView class]]) { [self _addHoldingPrioritiesForSplitView: obj toElement: elem]; } /* Cheap way to not encoding fake table columns to prevent crash on the mac when reading the XIB. Not ideal, but it should work for now. */ /* if ([obj respondsToSelector: @selector(tableColumns)]) { [self _addTableColumns: [obj tableColumns] toElement: elem]; } */ } } - (void) _collectObjectsFromObject: (id)obj withParent: (NSXMLElement *)node { [self _collectObjectsFromObject: obj forKey: nil withParent: node]; } - (void) _buildXIBDocumentWithParentNode: (NSXMLElement *)parentNode { NSEnumerator *en = [[_gormDocument topLevelObjects] objectEnumerator]; id o = nil; [_gormDocument deactivateEditors]; while ((o = [en nextObject]) != nil) { [self _collectObjectsFromObject: o withParent: parentNode]; } [_gormDocument reactivateEditors]; } - (NSData *) data { NSString *plugInId = @"com.apple.InterfaceBuilder.CocoaPlugin"; NSString *typeId = @"com.apple.InterfaceBuilder3.Cocoa.XIB"; NSString *toolVersion = @"21507"; // Build root element... NSXMLElement *rootElement = [NSXMLNode elementWithName: @"document"]; NSXMLNode *attr = [NSXMLNode attributeWithName: @"type" stringValue: typeId]; [rootElement addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"version" stringValue: @"3.0"]; [rootElement addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"toolsVersion" stringValue: toolVersion]; [rootElement addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"targetRuntime" stringValue: @"MacOSX.Cocoa"]; [rootElement addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"useAutolayout" stringValue: @"YES"]; [rootElement addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"propertyAccessControl" stringValue: @"none"]; [rootElement addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"customObjectInstantiationMethod" stringValue: @"direct"]; [rootElement addAttribute: attr]; // Build dependencies... NSXMLElement *dependencies = [NSXMLNode elementWithName: @"dependencies"]; NSXMLElement *deployment = [NSXMLNode elementWithName: @"deployment"]; attr = [NSXMLNode attributeWithName: @"identifier" stringValue: @"macosx"]; [deployment addAttribute: attr]; [dependencies addChild: deployment]; NSXMLElement *plugIn = [NSXMLNode elementWithName: @"plugIn"]; attr = [NSXMLNode attributeWithName: @"identifier" stringValue: plugInId]; [plugIn addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"version" stringValue: toolVersion]; [plugIn addAttribute: attr]; [dependencies addChild: plugIn]; NSXMLElement *capability = [NSXMLNode elementWithName: @"capability"]; attr = [NSXMLNode attributeWithName: @"name" stringValue: @"documents saved in the Xcode 8 format"]; [capability addAttribute: attr]; attr = [NSXMLNode attributeWithName: @"minToolsVersion" stringValue: @"8"]; [capability addAttribute: attr]; [dependencies addChild: capability]; [rootElement addChild: dependencies]; NSXMLDocument *xibDocument = [NSXMLNode documentWithRootElement: rootElement]; NSXMLElement *objects = [NSXMLNode elementWithName: @"objects"]; // Add placeholder objects to XIB [self _createPlaceholderObjects: objects]; // add body to document... [rootElement addChild: objects]; // Recursively build the XIB document from the GormDocument... [self _buildXIBDocumentWithParentNode: objects]; NSData *data = [xibDocument XMLDataWithOptions: NSXMLNodePrettyPrint | NSXMLDocumentTidyXML | NSXMLNodeCompactEmptyElement ]; return data; } - (BOOL) exportXIBDocumentWithName: (NSString *)name { BOOL result = NO; if (name != nil) { NSData *data = [self data]; NSString *xmlString = [[NSString alloc] initWithBytes: [data bytes] length: [data length] encoding: NSUTF8StringEncoding]; AUTORELEASE(xmlString); result = [xmlString writeToFile: name atomically: YES]; } return result; } @end apps-gorm-gorm-1_5_0/Plugins/Xib/GormXibPlugin.m000066400000000000000000000022551475375552500216230ustar00rootroot00000000000000/* GormXibModule.m * * Copyright (C) 2010 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2010 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #include #include #include "GormXibWrapperLoader.h" @interface GormXibPlugin : GormPlugin @end @implementation GormXibPlugin - (void) didLoad { [self registerDocumentTypeName: [GormXibWrapperLoader fileType] humanReadableName: @"Cocoa Xib" forExtensions: [NSArray arrayWithObjects: @"xib",nil]]; } @end apps-gorm-gorm-1_5_0/Plugins/Xib/GormXibWrapperBuilder.m000066400000000000000000000027711475375552500233170ustar00rootroot00000000000000/* GormWrapperBuilder * * Copyright (C) 2006-2013 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #import #import #import #import "GormXIBModelGenerator.h" @interface GormXibWrapperBuilder : GormWrapperBuilder @end @implementation GormXibWrapperBuilder + (NSString *) fileType { return @"GSXibFileType"; } - (NSFileWrapper *) buildFileWrapperWithDocument: (GormDocument *)doc { GormXIBModelGenerator *generator = [GormXIBModelGenerator xibWithGormDocument: doc]; NSData *data = [generator data]; NSFileWrapper *fileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents: data]; return fileWrapper; } @end apps-gorm-gorm-1_5_0/Plugins/Xib/GormXibWrapperLoader.h000066400000000000000000000022621475375552500231250ustar00rootroot00000000000000/* GormNibWrapperLoader * * * Copyright (C) 2006 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2006 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software */ #ifndef GORM_NIBWRAPPERLOADER #define GORM_NIBWRAPPERLOADER #include #include @interface GormXibWrapperLoader : GormWrapperLoader { NSMutableDictionary *_idToName; NSDictionary *_customClasses; NSDictionary *_decoded; IBObjectContainer *_container; id _nibFilesOwner; } @end #endif apps-gorm-gorm-1_5_0/Plugins/Xib/GormXibWrapperLoader.m000066400000000000000000000442041475375552500231340ustar00rootroot00000000000000/* GormXibWrapperLoader * * Copyright (C) 2010, 2021 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2010, 2021 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ #include #include #include #include #include "GormXibWrapperLoader.h" /* * This allows us to retrieve the customClasses from the XIB unarchiver. */ @interface NSKeyedUnarchiver (Private) - (NSDictionary *) customClasses; - (NSDictionary *) decoded; @end /* * Allow access to the method to instantiate the font manager */ @interface GormDocument (XibPluginPrivate) - (void) _instantiateFontManager; @end /* * Xib loader... */ @implementation GormXibWrapperLoader + (NSString *) fileType { return @"GSXibFileType"; } - (instancetype) init { self = [super init]; if (self != nil) { _idToName = [[NSMutableDictionary alloc] init]; _container = nil; _nibFilesOwner = nil; } return self; } - (void) dealloc { RELEASE(_idToName); [super dealloc]; } // // This method returns the "real" object that should be used in gorm for either // the custom object, its substitute, or a standin object such as file's owner // or first responder. // - (id) _replaceProxyInstanceWithRealObject: (id)obj classManager: (GormClassManager *)classManager withID: (NSString *)theId { id result = obj; if ([obj isKindOfClass: [NSCustomObject class]]) { NSString *className = [obj className]; if ([className isEqualToString: @"NSApplication"]) { result = [document filesOwner]; [obj setRealObject: result]; } else if ([className isEqualToString: @"FirstResponder"]) { result = [document firstResponder]; [obj setRealObject: result]; } else if ([className isEqualToString: @"NSFontManager"]) { [document _instantiateFontManager]; result = [document fontManager]; [obj setRealObject: result]; } else { result = [obj realObject]; } } else if (theId != nil) { id o = [_idToName objectForKey: theId]; if (o != nil) { result = o; } else { result = [document firstResponder]; } } else { NSDebugLog(@"### ID not provided and could not find name for object %@", obj); } return result; } // // This method instantiates the custom class and inserts it into the document // so that it can be referenced from elsewhere in the data. // - (void) _handleCustomClassWithObject: (id)obj withDocument: (GormDocument *)doc { if ([obj isKindOfClass: [NSCustomObject class]]) { NSString *customClassName = [obj className]; NSDictionary *customClassDict = [_customClasses objectForKey: customClassName];; NSString *theId = [customClassDict objectForKey: @"id"]; NSString *parentClassName = [customClassDict objectForKey: @"parentClassName"]; id realObject = [_decoded objectForKey: theId]; NSString *theName = nil; GormClassManager *classManager = [doc classManager]; // Set the file's owner correctly... if ([theId isEqualToString: @"-2"]) // The File's Owner node... { [[doc filesOwner] setClassName: customClassName]; return; } // these are preset values if ([theId isEqualToString: @"-1"] || [theId isEqualToString: @"-3"]) { return; } // Get the "real" object... realObject = [self _replaceProxyInstanceWithRealObject: realObject classManager: classManager withID: theId]; // Check that it has a name... NSDebugLog(@"realObject = %@", realObject); if ([doc containsObject: realObject]) { theName = [doc nameForObject: realObject]; NSDebugLog(@"Found name = %@ for realObject = %@", theName, realObject); } else { NSDebugLog(@"realObject = %@ has no name in document", realObject); } // If the parent class is "NSCustomObject" or it's derivatives... // then the parent is NSObject if ([parentClassName isEqualToString: @"NSCustomObject5"] || [parentClassName isEqualToString: @"NSCustomObject"]) { parentClassName = @"NSObject"; } // Add the custom class to the document NSDebugLog(@"Adding customClassName = %@ with parent className = %@", customClassName, parentClassName); [classManager addClassNamed: customClassName withSuperClassNamed: parentClassName withActions: nil withOutlets: nil isCustom: YES]; // If the name of the object does not exist, then create it... // the name not existing means the object is not attached or associated // with the document, so we must create it here since it is a // custom object. if (theName == nil) { theName = [doc instantiateClassNamed: customClassName]; } // Create a mapping between the name and the id. This way we can look // this up when needed later, if necessary. It is not done in the above // if since the object might already have a name. if (theName != nil) { [_idToName setObject: theName forKey: theId]; } // Add the instantiated object to the NSCustomObject id instantiatedObject = [doc objectForName: theName]; if (instantiatedObject != nil) { [obj setRealObject: instantiatedObject]; } else { NSDebugLog(@"Instantiated object not found for %@", theName); } } else { NSDebugLog(@"%@ is not an instance of NSCustomObject", obj); } } - (BOOL) loadFileWrapper: (NSFileWrapper *)wrapper withDocument: (GormDocument *) doc { BOOL result = NO; NS_DURING { GormPalettesManager *palettesManager = [(id)[NSApp delegate] palettesManager]; NSDictionary *substituteClasses = [palettesManager substituteClasses]; NSString *subClassName = nil; GormClassManager *classManager = [doc classManager]; document = doc; // make sure they are the same... if ([super loadFileWrapper: wrapper withDocument: doc] && [wrapper isDirectory] == NO) { NSData *data = [wrapper regularFileContents]; id docFilesOwner; // turn off custom classes... [NSClassSwapper setIsInInterfaceBuilder: YES]; // check the data... if (data == nil) { result = NO; } else { NSEnumerator *en; NSKeyedUnarchiver *u; // using superclass for its interface. // // Create an unarchiver, and use it to unarchive the xib file while // handling class replacement so that standard objects understood // by the gui library are converted to their Gorm internal equivalents. // u = [GSXibKeyedUnarchiver unarchiverForReadingWithData: data]; [u setDelegate: self]; // // Special internal classes // [u setClass: [GormCustomView class] forClassName: @"NSCustomView"]; [u setClass: [GormWindowTemplate class] forClassName: @"NSWindowTemplate"]; [u setClass: [GormNSWindow class] forClassName: @"NSWindow"]; [u setClass: [IBUserDefinedRuntimeAttribute class] forClassName: @"IBUserDefinedRuntimeAttribute5"]; // // Substitute any classes specified by the palettes... Palettes can specify // substitute classes to use in place of certain classes, among them is // NSMenu, this is so that their standins can be automatically used. // en = [substituteClasses keyEnumerator]; while ((subClassName = [en nextObject]) != nil) { NSString *realClassName = [substituteClasses objectForKey: subClassName]; Class substituteClass = NSClassFromString(subClassName); [u setClass: substituteClass forClassName: realClassName]; } // // decode // _container = [u decodeObjectForKey: @"IBDocument.Objects"]; if (_container == nil || [_container isKindOfClass: [IBObjectContainer class]] == NO) { result = NO; } else { IBConnectionRecord *cr = nil; NSArray *rootObjects = nil; id xibFirstResponder = nil; rootObjects = [u decodeObjectForKey: @"IBDocument.RootObjects"]; xibFirstResponder = [rootObjects objectAtIndex: 1]; docFilesOwner = [doc filesOwner]; _customClasses = [u customClasses]; _nibFilesOwner = [rootObjects objectAtIndex: 0]; _decoded = [u decoded]; // // set the current class on the File's owner... // if ([_nibFilesOwner isKindOfClass: [NSCustomObject class]]) { [docFilesOwner setClassName: [_nibFilesOwner className]]; } // // add root objects... // en = [rootObjects objectEnumerator]; id obj = nil; while ((obj = [en nextObject]) != nil) { NSString *customClassName = nil; NSString *objName = nil; // skip the file's owner, it is handled above... if ((obj == _nibFilesOwner) || (obj == xibFirstResponder)) { continue; } // // If it's NSApplication (most likely the File's Owner) // skip it... // if ([obj isKindOfClass: [NSCustomObject class]]) { if ([[obj className] isEqualToString: @"NSApplication"]) { continue; } customClassName = [obj className]; } // // if it's a window template, then replace it with an // actual window. // id o = nil; if ([obj isKindOfClass: [GormWindowTemplate class]]) { NSString *className = [obj className]; BOOL isDeferred = [obj isDeferred]; BOOL isVisible = YES; // make the object deferred/visible... o = [obj nibInstantiate]; NSDebugLog(@"Decoding window as %@", o); [doc setObject: o isDeferred: isDeferred]; [doc setObject: o isVisibleAtLaunch: isVisible]; // Add to the document... [doc attachObject: o toParent: nil]; // record the custom class... if ([classManager isCustomClass: className]) { customClassName = className; } } // Handle custom classes if ([rootObjects containsObject: obj] && obj != nil && [obj isKindOfClass: [GormWindowTemplate class]] == NO) { NSDebugLog(@"obj = %@",obj); if ([obj respondsToSelector: @selector(className)]) { if ([obj isKindOfClass: [NSCustomObject class]]) { [self _handleCustomClassWithObject: obj withDocument: doc]; continue; } } [doc attachObject: obj toParent: nil]; } if (customClassName != nil) { objName = [doc nameForObject: obj]; if (objName != nil) { [classManager setCustomClass: customClassName forName: objName]; } } } /* * add connections... */ NSDebugLog(@"_idToName = %@", _idToName); en = [_container connectionRecordEnumerator]; while ((cr = [en nextObject]) != nil) { IBConnection *conn = [cr connection]; if ([conn respondsToSelector: @selector(nibConnector)]) { NSNibConnector *o = [conn nibConnector]; if (o != nil) { id dest = [o destination]; id src = [o source]; NSDebugLog(@"Initial connector = %@", o); NSDebugLog(@"dest = %@, src = %@", dest, src); // Replace files owner with the document files owner for loading... dest = [self _replaceProxyInstanceWithRealObject: dest classManager: classManager withID: nil]; src = [self _replaceProxyInstanceWithRealObject: src classManager: classManager withID: nil]; NSString *destName = [document nameForObject: dest]; NSString *srcName = [document nameForObject: src]; NSDebugLog(@"destName = %@, srcName = %@", destName, srcName); // Use tne names, since this is how connectors are // stored in gorm until they are written out. [o setDestination: dest]; [o setSource: src]; NSDebugLog(@"*** After connector update = %@", o); if([o isKindOfClass: [NSNibControlConnector class]]) { NSString *tag = [o label]; NSRange colonRange = [tag rangeOfString: @":"]; NSUInteger location = colonRange.location; if(location == NSNotFound) { NSString *newTag = [NSString stringWithFormat: @"%@:",tag]; [o setLabel: (id)newTag]; } NSDebugLog(@"*** Action: label = %@ for src = %@, srcName = %@", [o label], src, srcName); [classManager addAction: [o label] forObject: src]; // For control connectors these roles are reversed... [o setSource: dest]; [o setDestination: src]; } else if ([o isKindOfClass: [NSNibOutletConnector class]]) { NSDebugLog(@"*** Outlet: label = %@ for src = %@, srcName = %@", [o label], src, srcName); [classManager addOutlet: [o label] forObject: src]; } // check src/dest for window template... if ([src isKindOfClass: [NSWindowTemplate class]]) { id win = [src realObject]; [o setSource: win]; } if ([dest isKindOfClass: [NSWindowTemplate class]]) { id win = [dest realObject]; [o setDestination: win]; } // skip any help connectors... if ([o isKindOfClass: [NSIBHelpConnector class]]) { continue; } [doc addConnector: o]; } } } // turn on custom classes. [NSClassSwapper setIsInInterfaceBuilder: NO]; // clear the changes, since we just loaded the document. [doc updateChangeCount: NSChangeCleared]; result = YES; } } NSArray *errors = [doc validate]; NSDebugLog(@"errors = %@", errors); [NSClassSwapper setIsInInterfaceBuilder: NO]; } } NS_HANDLER { NSRunAlertPanel(_(@"Problem Loading"), [NSString stringWithFormat: @"Failed to load file. Exception: %@",[localException reason]], _(@"OK"), nil, nil); result = NO; } NS_ENDHANDLER; // return the result. return result; } - (void) unarchiver: (NSKeyedUnarchiver *)unarchiver willReplaceObject: (id)obj withObject: (id)newObj { // Nothing for now... } - (id) unarchiver: (NSKeyedUnarchiver *)unarchiver didDecodeObject: (id)obj { if ([obj isKindOfClass: [NSWindowTemplate class]]) { GormClassManager *classManager = [document classManager]; // Class clz; NSString *className = [obj className]; if([classManager isCustomClass: className]) { className = [classManager nonCustomSuperClassOf: className]; } // clz = [unarchiver classForClassName: className]; } else if ([obj isKindOfClass: [NSMatrix class]]) { if ([obj cellClass] == NULL) { [obj setCellClass: [NSButtonCell class]]; } } else if ([obj respondsToSelector: @selector(setTarget:)] && [obj respondsToSelector: @selector(setAction:)] && [obj isKindOfClass: [NSCell class]] == NO) { // blank the target/action for all objects. [obj setTarget: nil]; [obj setAction: NULL]; } return obj; } @end apps-gorm-gorm-1_5_0/README.md000066400000000000000000000023631475375552500160330ustar00rootroot00000000000000# apps-gorm [![CI](https://github.com/gnustep/apps-gorm/actions/workflows/main.yml/badge.svg)](https://github.com/gnustep/apps-gorm/actions/workflows/main.yml?query=branch%3Amaster) ## Introduction * Gorm is an acronym for Graphic Object Relationship modeler (or perhaps GNUstep Object Relationship Modeler). * Gorm is a clone of the Cocoa (OpenStep/NeXTSTEP) 'Interface Builder' application for GNUstep. * Gorm is part of the GNUstep project, and is copyrighted by the Free Software Foundation. * Gorm is released under the GPL - see the file 'COPYING' for details. * Documentation for Gorm is located in the Documentation directory. * Please see the README files in each of the subdirectories for more complete information. ## Organization * Gorm is comprised of the GormCore, InterfaceBuilder, and GormObjCHeaderParser libraries/frameworks as well as the Gorm application and gormtool * The purpose of this organization is so that Gorm's functionality can be re-used in other applications. ## Status Gorm is usable and stable. Please report bugs [here](https://github.com/gnustep/apps-gorm/issues) ## Acknowledgements * Icons - Mostly by Andrew Lindsay. Gorm application icon by Jesse Ross. * Code - GormViewKnobs.m adapted from code by Gerrit van Dyk. apps-gorm-gorm-1_5_0/Tools/000077500000000000000000000000001475375552500156505ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Tools/GNUmakefile000066400000000000000000000022501475375552500177210ustar00rootroot00000000000000# GNUmakefile: main makefile for Gorm palettes # # Copyright (C) 1999 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2007 # # This file is part of GNUstep. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. # PACKAGE_NAME = gorm include $(GNUSTEP_MAKEFILES)/common.make # # Each palette is a subproject # SUBPROJECTS = \ gormtool -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Tools/README.md000066400000000000000000000025221475375552500171300ustar00rootroot00000000000000# gormtool This tool allows the user to access certain features of Gorm from the command line. It is a "hybrid" tool/headless application. Usage: gormtool [options] inputfile ## Options include: * ```--import-strings-file``` - this option imports a file in the .strings format and replaces the text in the model file with the mappings. It takes a parameter which is the strings file to be imported. * ```--export-strings-file``` - this option exports a string file from the model file to the file specified by the parameter. * ```--export-xliff``` - this option exports an XLIFF1.2 file from the model file to the file specified by the parameter. * ```--import-xliff``` - this option imports an XLIFF1.2 file into the model file to the file specified by the parameter. * ```--import-class``` - this option parses the header given by the parameter passed in, it will break any existing connections if the class is instantiated * ```--export-class``` - this option exports the named class (passed in as a parameter) to a file by the same name in the current directory * ```--read``` - specifies this file is to be the one read... optional. If not used the last parameter is considered the input file. * ```--write``` - specifies the output file the model is to be written to NOTE: This tool is currently experimental please report any bugs. Thank you. GC apps-gorm-gorm-1_5_0/Tools/gormtool/000077500000000000000000000000001475375552500175125ustar00rootroot00000000000000apps-gorm-gorm-1_5_0/Tools/gormtool/AppDelegate.h000066400000000000000000000022631475375552500220410ustar00rootroot00000000000000/* AppDelegate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #include #include @class NSDictionary; @class NSImage; @class NSMenu; @class NSMutableArray; @class NSSet; @interface AppDelegate : GormAbstractDelegate { GormDocument *_doc; } - (NSDictionary *) parseArguments; - (void) process; @end apps-gorm-gorm-1_5_0/Tools/gormtool/AppDelegate.m000066400000000000000000000323531475375552500220510ustar00rootroot00000000000000/* AppDelegate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #import "ArgPair.h" #import "GormToolPrivate.h" #import "AppDelegate.h" #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wobjc-protocol-method-implementation" // Smash this method in NSDocument to prevent it from popping up an NSRunAlertPanel @interface NSDocument (__ReplaceLoadPrivate__) - (id) initWithContentsOfFile: (NSString *)fileName ofType: (NSString *)fileType; @end @implementation NSDocument (__ReplaceLoadPrivate__) - (id) initWithContentsOfFile: (NSString *)fileName ofType: (NSString *)fileType { self = [self init]; if (self != nil) { [self setFileType: fileType]; [self setFileName: fileName]; if (![self readFromFile: fileName ofType: fileType]) { NSLog(@"Load failed, could not load file"); DESTROY(self); } } return self; } @end #pragma GCC diagnostic pop // AppDelegate... @implementation AppDelegate // Are we in a tool? - (BOOL) isInTool { return YES; } // Handle all alerts... - (BOOL) shouldUpgradeOlderArchive { NSLog(@"Upgrading archive to latest version of .gorm format"); return YES; } - (BOOL) shouldLoadNewerArchive { NSLog(@"Refusing to load archive since it is from a newer version of Gorm/gormtool"); return NO; } - (BOOL) shouldBreakConnectionsForClassNamed: (NSString *)className { NSLog(@"Breaking connections for instances of class: %@", className); return YES; } - (BOOL) shouldRenameConnectionsForClassNamed: (NSString *)className toClassName: (NSString *)newName { NSLog(@"Renaming connections from class %@ to class %@", className, newName); return YES; } - (BOOL) shouldBreakConnectionsModifyingLabel: (NSString *)name isAction: (BOOL)action prompted: (BOOL)prompted { NSLog(@"Breaking connections for %@ %@", action?@"action":@"outlet", name); return YES; } - (void) couldNotParseClassAtPath: (NSString *)path; { NSLog(@"Could not parse class at path: %@", path); } - (void) exceptionWhileParsingClass: (NSException *)localException { NSLog(@"Exception while parsing class: %@", [localException reason]); } - (BOOL) shouldBreakConnectionsReparsingClass: (NSString *)className { NSLog(@"Breaking any existing connections with instances of class %@", className); return YES; } // Document - (id) activeDocument { return _doc; } // Handle arguments - (NSDictionary *) parseArguments { GormDocumentController *dc = [GormDocumentController sharedDocumentController]; NSMutableDictionary *result = [NSMutableDictionary dictionary]; NSProcessInfo *pi = [NSProcessInfo processInfo]; NSMutableArray *args = [NSMutableArray arrayWithArray: [pi arguments]]; // BOOL filenameIsLastObject = NO; NSString *file = nil; // If the --read option isn't specified, we assume that the last argument is // the file to be processed. if ([args containsObject: @"--read"] == NO) { file = [args lastObject]; // filenameIsLastObject = YES; [args removeObject: file]; NSDebugLog(@"file = %@", file); NSString *type = [dc typeFromFileExtension: [file pathExtension]]; if (type != nil) { ArgPair *pair = AUTORELEASE([[ArgPair alloc] init]); [pair setArgument: @"--read"]; [pair setValue: file]; [result setObject: pair forKey: @"--read"]; NSDebugLog(@"Faking read pair %@", file); } } NSEnumerator *en = [args objectEnumerator]; id obj = nil; BOOL parse_val = NO; ArgPair *pair = AUTORELEASE([[ArgPair alloc] init]); while ((obj = [en nextObject]) != nil) { if (parse_val) { [pair setValue: obj]; [result setObject: pair forKey: [pair argument]]; parse_val = NO; continue; } else { pair = AUTORELEASE([[ArgPair alloc] init]); if ([obj isEqualToString: @"--read"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--write"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--export-strings-file"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--import-strings-file"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--export-class"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--import-class"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--output-path"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--connections"]) { [pair setArgument: obj]; parse_val = NO; } if ([obj isEqualToString: @"--classes"]) { [pair setArgument: obj]; parse_val = NO; } if ([obj isEqualToString: @"--objects"]) { [pair setArgument: obj]; parse_val = NO; } if ([obj isEqualToString: @"--errors"]) { [pair setArgument: obj]; parse_val = NO; } if ([obj isEqualToString: @"--warnings"]) { [pair setArgument: obj]; parse_val = NO; } if ([obj isEqualToString: @"--notices"]) { [pair setArgument: obj]; parse_val = NO; } if ([obj isEqualToString: @"--source-language"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--target-language"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--export-xliff"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--import-xliff"]) { [pair setArgument: obj]; parse_val = YES; } if ([obj isEqualToString: @"--test"]) { [pair setArgument: obj]; parse_val = NO; } // If there is no parameter for the argument, set it anyway... if (parse_val == NO) { [result setObject: pair forKey: obj]; } } } return result; } - (void) process { NSProcessInfo *pi = [NSProcessInfo processInfo]; [NSClassSwapper setIsInInterfaceBuilder: YES]; _isTesting = NO; if ([[pi arguments] count] > 1) { NSString *file = nil; NSString *outputPath = @"./"; GormDocumentController *dc = [GormDocumentController sharedDocumentController]; // GormDocument *doc = nil; NSDictionary *args = [self parseArguments]; ArgPair *opt = nil; NSString *slang = nil; NSString *tlang = nil; NSDebugLog(@"args = %@", args); NSDebugLog(@"file = %@", file); // Get the file to write out to... NSString *outputFile = nil; opt = [args objectForKey: @"--read"]; if (opt != nil) { file = [opt value]; } NS_DURING { if (file != nil) { _doc = [dc openDocumentWithContentsOfFile: file display: NO]; if (_doc == nil) { NSLog(@"Unable to load document %@", file); return; } } else { NSLog(@"No document specified"); return; } } NS_HANDLER { NSLog(@"Exception: %@", [localException reason]); } NS_ENDHANDLER; NSDebugLog(@"Document = %@", _doc); // Get other options... opt = [args objectForKey: @"--output-path"]; if (opt != nil) { outputPath = [opt value]; } opt = [args objectForKey: @"--export-strings-file"]; if (opt != nil) { NSString *stringsFile = [opt value]; [_doc exportStringsToFile: stringsFile]; } opt = [args objectForKey: @"--import-strings-file"]; if (opt != nil) { NSString *stringsFile = [opt value]; [_doc importStringsFromFile: stringsFile]; } opt = [args objectForKey: @"--export-class"]; if (opt != nil) { NSString *className = [opt value]; BOOL saved = NO; GormClassManager *cm = [_doc classManager]; NSString *hFile = [className stringByAppendingPathExtension: @"h"]; NSString *mFile = [className stringByAppendingPathExtension: @"m"]; NSString *hPath = [outputPath stringByAppendingPathComponent: hFile]; NSString *mPath = [outputPath stringByAppendingPathComponent: mFile]; saved = [cm makeSourceAndHeaderFilesForClass: className withName: mPath and: hPath]; if (saved == NO) { NSLog(@"Class named %@ not saved", className); } } opt = [args objectForKey: @"--import-class"]; if (opt != nil) { NSString *classFile = [opt value]; GormClassManager *cm = [_doc classManager]; [cm parseHeader: classFile]; } opt = [args objectForKey: @"--connections"]; if (opt != nil) { NSArray *connections = [_doc connections]; puts([[NSString stringWithFormat: @"%@", connections] cStringUsingEncoding: NSUTF8StringEncoding]); } opt = [args objectForKey: @"--classes"]; if (opt != nil) { NSDictionary *classes = [[_doc classManager] customClassInformation]; puts([[NSString stringWithFormat: @"%@", classes] cStringUsingEncoding: NSUTF8StringEncoding]); } opt = [args objectForKey: @"--objects"]; if (opt != nil) { NSSet *objects = [_doc topLevelObjects]; puts([[NSString stringWithFormat: @"%@", objects] cStringUsingEncoding: NSUTF8StringEncoding]); } opt = [args objectForKey: @"--errors"]; if (opt != nil) { GormFilePrefsManager *mgr = [_doc filePrefsManager]; NSDictionary *p = [NSDictionary dictionaryWithDictionary: [mgr currentProfile]]; puts([[NSString stringWithFormat: @"%@", p] cStringUsingEncoding: NSUTF8StringEncoding]); } opt = [args objectForKey: @"--warnings"]; if (opt != nil) { GormFilePrefsManager *mgr = [_doc filePrefsManager]; NSDictionary *p = [NSDictionary dictionaryWithDictionary: [mgr currentProfile]]; puts([[NSString stringWithFormat: @"%@", p] cStringUsingEncoding: NSUTF8StringEncoding]); } opt = [args objectForKey: @"--notices"]; if (opt != nil) { GormFilePrefsManager *mgr = [_doc filePrefsManager]; NSDictionary *p = [NSDictionary dictionaryWithDictionary: [mgr currentProfile]]; puts([[NSString stringWithFormat: @"%@", p] cStringUsingEncoding: NSUTF8StringEncoding]); } opt = [args objectForKey: @"--source-language"]; if (opt != nil) { slang = [opt value]; } opt = [args objectForKey: @"--target-language"]; if (opt != nil) { tlang = [opt value]; } opt = [args objectForKey: @"--export-xliff"]; if (opt != nil) { NSString *xliffDocumentName = [opt value]; BOOL result = NO; GormXLIFFDocument *xd = [GormXLIFFDocument xliffWithGormDocument: _doc]; if (slang == nil) { NSLog(@"Please specify a source language"); } result = [xd exportXLIFFDocumentWithName: xliffDocumentName withSourceLanguage: slang andTargetLanguage: tlang]; if (result == NO) { NSLog(@"File not generated"); } } opt = [args objectForKey: @"--import-xliff"]; if (opt != nil) { NSString *xliffDocumentName = [opt value]; BOOL result = NO; GormXLIFFDocument *xd = [GormXLIFFDocument xliffWithGormDocument: _doc]; result = [xd importXLIFFDocumentWithName: xliffDocumentName]; if (result == NO) { NSLog(@"No translation performed."); } } // These options sound always be processed last... opt = [args objectForKey: @"--write"]; if (opt != nil) { outputFile = [opt value]; if (outputFile != nil) { BOOL saved = NO; NSURL *file = [NSURL fileURLWithPath: outputFile isDirectory: YES]; NSString *type = [dc typeFromFileExtension: [outputFile pathExtension]]; NSError *error = nil; saved = [_doc saveToURL: file ofType: type forSaveOperation: NSSaveOperation error: &error]; if ( !saved ) { NSLog(@"Document %@ of type %@ was not saved", file, type); } if (error != nil) { NSLog(@"Error = %@", error); } } } opt = [args objectForKey: @"--test"]; if (opt != nil) { NSLog(@"Control-C to end"); _isTesting = YES; [self testInterface: self]; } } [NSClassSwapper setIsInInterfaceBuilder: NO]; } - (void) exceptionWhileLoadingModel: (NSString *)errorMessage { NSLog(@"Exception: %@", errorMessage); } - (void) applicationDidFinishLaunching: (NSNotification *)n { NSDebugLog(@"processInfo: %@", [NSProcessInfo processInfo]); [self process]; if (_isTesting == NO) { [NSApp terminate: nil]; } } - (void) applicationWillTerminate: (NSNotification *)n { } @end apps-gorm-gorm-1_5_0/Tools/gormtool/ArgPair.h000066400000000000000000000023511475375552500212110ustar00rootroot00000000000000/* ArgPair.h * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #ifndef INCLUDE_ArgPair_H #define INCLUDE_ArgPair_H #import @class NSString; @interface ArgPair : NSObject { NSString *_argument; NSString *_value; } - (void) setArgument: (NSString *)arg; - (NSString *) argument; - (void) setValue: (NSString *)val; - (NSString *) value; @end #endif // INCLUDE_ArgPair_H apps-gorm-gorm-1_5_0/Tools/gormtool/ArgPair.m000066400000000000000000000030711475375552500212160ustar00rootroot00000000000000/* AppDelegate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #import #import "ArgPair.h" @implementation ArgPair - (id) init { self = [super init]; if (self != nil) { _argument = nil; _value = nil; } return self; } - (void) dealloc { RELEASE(_argument); RELEASE(_value); [super dealloc]; } - (void) setArgument: (NSString *)arg { ASSIGN(_argument, arg); } - (NSString *) argument { return _argument; } - (void) setValue: (NSString *)val { ASSIGN(_value, val); } - (NSString *) value { return _value; } - (id) copyWithZone: (NSZone *)z { id obj = [[[self class] allocWithZone: z] init]; [obj setArgument: _argument]; [obj setValue: _value]; return obj; } @end apps-gorm-gorm-1_5_0/Tools/gormtool/GNUmakefile000066400000000000000000000006431475375552500215670ustar00rootroot00000000000000# # GNUmakefile -- gormtool # include $(GNUSTEP_MAKEFILES)/common.make PACKAGE_NAME = gormtool TOOL_NAME = gormtool gormtool_HEADER_FILES = AppDelegate.h \ GormToolPrivate.h \ ArgPair.h gormtool_OBJC_FILES = main.m \ AppDelegate.m \ GormToolPrivate.m \ ArgPair.m -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/tool.make -include GNUmakefile.postamble apps-gorm-gorm-1_5_0/Tools/gormtool/GNUmakefile.postamble000066400000000000000000000022561475375552500235560ustar00rootroot00000000000000# # GNUmakefile.postamble # # Copyright (C) 2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # # This file is part of GNUstep # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Library General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; see the file COPYING.LIB. # If not, write to the Free Software Foundation, # 51 Franklin Street, Fifth Floor, Boston, MA 02111 # USA. # # Define this variable if not defined for backwards-compatibility as # it is only available in gnustep-make >= 2.0.5 ifeq ($(LN_S_RECURSIVE),) LN_S_RECURSIVE = $(LN_S) endif before-all:: after-all:: after-clean:: after-distclean:: after-clean:: apps-gorm-gorm-1_5_0/Tools/gormtool/GNUmakefile.preamble000066400000000000000000000024351475375552500233560ustar00rootroot00000000000000# GNUmakefile: main makefile for GNUstep Object Relationship Modeller # # Copyright (C) 2003 Free Software Foundation, Inc. # # Author: Gregory John Casamento # Date: 2003 # # This file is part of GNUstep. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 # USA. # ADDITIONAL_TOOL_LIBS += \ -lGormCore \ -lInterfaceBuilder \ -lGormObjCHeaderParser \ -lgnustep-base \ -lgnustep-gui ADDITIONAL_INCLUDE_DIRS += \ -I../../ ADDITIONAL_LIB_DIRS += \ -L../../InterfaceBuilder/$(GNUSTEP_OBJ_DIR) \ -L../../GormObjCHeaderParser/$(GNUSTEP_OBJ_DIR) \ -L../../GormCore/GormCore.framework apps-gorm-gorm-1_5_0/Tools/gormtool/GormToolPrivate.h000066400000000000000000000035531475375552500227660ustar00rootroot00000000000000/* GormToolPrivate.h * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #ifndef INCLUDE_GormToolPrivate_H #define INCLUDE_GormToolPrivate_H #import #import #import #import #import #import #import #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wobjc-protocol-method-implementation" // Special method category smashes so that we can register types... @interface NSDocumentController (ToolPrivate) - (Class) documentClassForType: (NSString *)type; - (NSString *) typeFromFileExtension: (NSString *)fileExtension; @end @interface GormDocument (ToolPrivate) + (BOOL) isNativeType: (NSString *)type; @end @interface GormPlugin (ToolPrivate) - (void) registerDocumentTypeName: (NSString *)name humanReadableName: (NSString *)hrName forExtensions: (NSArray *)extensions; @end #pragma GCC diagnostic pop #endif apps-gorm-gorm-1_5_0/Tools/gormtool/GormToolPrivate.m000066400000000000000000000052041475375552500227660ustar00rootroot00000000000000/* GormToolPrivate.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ #import "GormToolPrivate.h" static NSMutableArray *__types = nil; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wobjc-protocol-method-implementation" // Special method category smashes so that we can register types... @implementation NSDocumentController (ToolPrivate) - (Class) documentClassForType: (NSString *)type { return [GormDocument class]; } - (NSString *) typeFromFileExtension: (NSString *)fileExtension { int i, count = [__types count]; // Check for a document type with the supplied extension for (i = 0; i < count; i++) { NSDictionary *typeInfo = [__types objectAtIndex: i]; NSArray *array = [typeInfo objectForKey: @"NSUnixExtensions"]; NSDebugLog(@"typeInfo = %@", typeInfo); NSDebugLog(@"fileExtension = %@", fileExtension); if ([array containsObject: fileExtension]) { NSString *type = [typeInfo objectForKey: @"NSName"]; NSDebugLog(@"type = %@", type); return type; } } NSDebugLog(@"FAILED"); return nil; } @end @implementation GormDocument (ToolPrivate) + (BOOL) isNativeType: (NSString *)type { return YES; } @end @implementation GormPlugin (ToolPrivate) - (void) registerDocumentTypeName: (NSString *)name humanReadableName: (NSString *)hrName forExtensions: (NSArray *)extensions { if (__types == nil) { __types = [NSMutableArray arrayWithCapacity: 10]; } NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: name, @"NSName", hrName, @"NSHumanReadableName", extensions, @"NSUnixExtensions", @"Editor", @"NSRole", nil]; [__types addObject: dict]; NSDebugLog(@"__types = %@", __types); } @end #pragma GCC diagnostic pop apps-gorm-gorm-1_5_0/Tools/gormtool/main.m000066400000000000000000000031611475375552500206150ustar00rootroot00000000000000/* main.m * * Copyright (C) 2023 Free Software Foundation, Inc. * * Author: Gregory John Casamento * Date: 2023 * * This file is part of GNUstep. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 * USA. */ // main.m #import #import #import #import #import "AppDelegate.h" int main(int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSApplication *app = [NSApplication sharedApplication]; AppDelegate *delegate = [[AppDelegate alloc] init]; extern char **environ; // Don't show icon... [[NSUserDefaults standardUserDefaults] setBool: YES forKey: @"GSSuppressAppIcon"]; // Initialize process... [NSProcessInfo initializeWithArguments: (char **)argv count: argc environment: environ]; // Run... [app setDelegate: delegate]; [app run]; RELEASE(pool); return 0; } apps-gorm-gorm-1_5_0/Version000066400000000000000000000006611475375552500161230ustar00rootroot00000000000000# This file is included in various Makefile's to get version information. # Compatible with Bourne shell syntax, so it can included there too. # The minimum gcc version required to compile the library. GNUSTEP_GCC=4.3.0 # GNUstep GUI version required GNUSTEP_CORE_VERSION=0.31.1 # The version number of this release. MAJOR_VERSION=1 MINOR_VERSION=5 SUBMINOR_VERSION=0 VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}