From f18c764ffad13c8e3dbda85019025b65d71f614d Mon Sep 17 00:00:00 2001 From: "dev-unix.inverse.qc.ca" Date: Thu, 15 Jun 2006 19:34:10 +0000 Subject: [PATCH] see ChangeLog Monotone-Revision: 9054022ef1ca8aeba6e34842d27d9b94ce002b89 Monotone-Author: dev-unix.inverse.qc.ca Monotone-Date: 2006-06-15T19:34:10 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 3 + GNUmakefile | 13 + Main/ChangeLog | 219 + Main/GNUmakefile | 21 + Main/GNUmakefile.preamble | 28 + Main/MainUIProduct.m | 47 + Main/README | 88 + Main/SOGo.m | 320 + Main/SOGoProductLoader.h | 44 + Main/SOGoProductLoader.m | 174 + Main/Version | 7 + Main/common.h | 33 + Main/fhs.make | 26 + Main/sogod.m | 38 + Misc/WebUI/Application.h | 38 + Misc/WebUI/Application.m | 38 + Misc/WebUI/COPYING | 482 + Misc/WebUI/COPYRIGHT | 4 + Misc/WebUI/ChangeLog | 13 + Misc/WebUI/DirectAction.h | 38 + Misc/WebUI/DirectAction.m | 29 + Misc/WebUI/English.lproj/InfoPlist.strings | Bin 0 -> 528 bytes Misc/WebUI/GNUmakefile | 33 + Misc/WebUI/GNUmakefile.preamble | 8 + Misc/WebUI/Info.plist | 26 + Misc/WebUI/Lori.icns | Bin 0 -> 42190 bytes Misc/WebUI/NGExtensions/GNUmakefile | 18 + Misc/WebUI/NGExtensions/NGLogging/ChangeLog | 17 + Misc/WebUI/NGExtensions/NGLogging/GNUmakefile | 30 + .../NGExtensions/NGLogging/NGLogAppender.h | 51 + .../NGExtensions/NGLogging/NGLogAppender.m | 66 + .../NGLogging/NGLogConsoleAppender.h | 38 + .../NGLogging/NGLogConsoleAppender.m | 34 + .../WebUI/NGExtensions/NGLogging/NGLogEvent.h | 47 + .../WebUI/NGExtensions/NGLogging/NGLogEvent.m | 56 + .../NGLogging/NGLogSyslogAppender.h | 43 + .../NGLogging/NGLogSyslogAppender.m | 114 + Misc/WebUI/NGExtensions/NGLogging/NGLogger.h | 49 + Misc/WebUI/NGExtensions/NGLogging/NGLogger.m | 111 + Misc/WebUI/NGExtensions/NGLogging/NGLogging.h | 42 + .../NGLogging/NSObject+ExtendedLogging.h | 63 + .../NGLogging/NSObject+ExtendedLogging.m | 128 + Misc/WebUI/NOTES | 15 + Misc/WebUI/PROJECTLEAD | 3 + Misc/WebUI/README | 24 + Misc/WebUI/Session.h | 38 + Misc/WebUI/Session.m | 38 + Misc/WebUI/TODO | 0 Misc/WebUI/Version | 15 + Misc/WebUI/WebServerResources/favicon.ico | Bin 0 -> 3262 bytes Misc/WebUI/WebUI.xcode/project.pbxproj | 952 ++ Misc/WebUI/WebUI_Prefix.pch | 9 + Misc/WebUI/WebUI_main.m | 35 + Misc/WebUI/common.h | 33 + Misc/WebUI/version.plist | 16 + Misc/WebUI/wox-cheat-sheet.txt | 50 + Misc/ZideStore/UI-X/ChangeLog | 208 + Misc/ZideStore/UI-X/Common/CommonUIProduct.m | 34 + Misc/ZideStore/UI-X/Common/GNUmakefile | 82 + .../UI-X/Common/GNUmakefile.postamble | 17 + .../UI-X/Common/GNUmakefile.preamble | 16 + Misc/ZideStore/UI-X/Common/UIxAppFrame.m | 11 + Misc/ZideStore/UI-X/Common/UIxAppFrame.wox | 44 + Misc/ZideStore/UI-X/Common/UIxAppHeader.m | 11 + Misc/ZideStore/UI-X/Common/UIxAppHeader.wox | 32 + Misc/ZideStore/UI-X/Common/UIxAppNavView.m | 104 + Misc/ZideStore/UI-X/Common/UIxAppNavView.wox | 10 + Misc/ZideStore/UI-X/Common/UIxAppNavigation.m | 11 + .../UI-X/Common/UIxAppNavigation.wox | 85 + Misc/ZideStore/UI-X/Common/UIxComponent.h | 55 + Misc/ZideStore/UI-X/Common/UIxComponent.m | 168 + Misc/ZideStore/UI-X/Common/UIxElemBuilder.m | 86 + Misc/ZideStore/UI-X/Common/UIxPageFrame.m | 44 + Misc/ZideStore/UI-X/Common/UIxPageFrame.wox | 308 + Misc/ZideStore/UI-X/Common/UIxTabItem.m | 475 + Misc/ZideStore/UI-X/Common/UIxTabView.h | 134 + Misc/ZideStore/UI-X/Common/UIxTabView.m | 819 ++ Misc/ZideStore/UI-X/Common/UIxWinClose.m | 37 + Misc/ZideStore/UI-X/Common/UIxWinClose.wox | 6 + Misc/ZideStore/UI-X/Common/Version | 5 + Misc/ZideStore/UI-X/Common/bundle-info.plist | 40 + Misc/ZideStore/UI-X/Common/calendar.css | 189 + Misc/ZideStore/UI-X/Common/common.h | 155 + Misc/ZideStore/UI-X/Common/images/OGoLogo.gif | Bin 0 -> 2047 bytes .../UI-X/Common/images/box_botleft.gif | Bin 0 -> 100 bytes .../UI-X/Common/images/box_botright.gif | Bin 0 -> 102 bytes .../UI-X/Common/images/box_bottom.gif | Bin 0 -> 43 bytes .../ZideStore/UI-X/Common/images/box_left.gif | Bin 0 -> 47 bytes .../UI-X/Common/images/box_right.gif | Bin 0 -> 47 bytes Misc/ZideStore/UI-X/Common/images/box_top.gif | Bin 0 -> 43 bytes .../UI-X/Common/images/box_topleft.gif | Bin 0 -> 102 bytes .../UI-X/Common/images/box_topright.gif | Bin 0 -> 101 bytes .../UI-X/Common/images/closewindow.gif | Bin 0 -> 96 bytes .../UI-X/Common/images/corner_right.gif | Bin 0 -> 49 bytes .../UI-X/Common/images/line_left.gif | Bin 0 -> 264 bytes .../UI-X/Common/images/line_right.gif | Bin 0 -> 262 bytes .../UI-X/Common/images/line_stretch.gif | Bin 0 -> 234 bytes .../UI-X/Common/images/menu_logo_top.gif | Bin 0 -> 2047 bytes Misc/ZideStore/UI-X/Common/images/tab_.gif | Bin 0 -> 127 bytes .../UI-X/Common/images/tab_selected.gif | Bin 0 -> 127 bytes Misc/ZideStore/UI-X/Common/product.plist | 47 + Misc/ZideStore/UI-X/Common/zidestoreui.css | 199 + Misc/ZideStore/UI-X/GNUmakefile | 9 + Misc/ZideStore/UI-X/Scheduler/COPYING | 482 + Misc/ZideStore/UI-X/Scheduler/COPYRIGHT | 4 + Misc/ZideStore/UI-X/Scheduler/GNUmakefile | 66 + .../UI-X/Scheduler/GNUmakefile.postamble | 17 + .../UI-X/Scheduler/GNUmakefile.preamble | 17 + Misc/ZideStore/UI-X/Scheduler/NOTES | 52 + .../UI-X/Scheduler/SchedulerUIProduct.m | 34 + .../UI-X/Scheduler/UIxAppointmentEditor.m | 277 + .../UI-X/Scheduler/UIxAppointmentEditor.wox | 111 + .../UI-X/Scheduler/UIxAppointmentFormatter.h | 120 + .../UI-X/Scheduler/UIxAppointmentFormatter.m | 454 + .../UI-X/Scheduler/UIxAppointmentView.h | 26 + .../UI-X/Scheduler/UIxAppointmentView.m | 109 + .../UI-X/Scheduler/UIxAppointmentView.wox | 166 + .../UI-X/Scheduler/UIxAptTableView.m | 75 + .../UI-X/Scheduler/UIxAptTableView.wox | 34 + .../UI-X/Scheduler/UIxCalBackForthNavView.m | 49 + .../UI-X/Scheduler/UIxCalBackForthNavView.wox | 20 + .../UI-X/Scheduler/UIxCalDateLabel.m | 113 + .../UI-X/Scheduler/UIxCalDateLabel.wox | 8 + .../UI-X/Scheduler/UIxCalMonthOverview.m | 119 + .../UI-X/Scheduler/UIxCalMonthOverview.wox | 165 + .../UI-X/Scheduler/UIxCalMonthView.h | 23 + .../UI-X/Scheduler/UIxCalMonthView.m | 49 + .../UI-X/Scheduler/UIxCalSelectTab.m | 103 + .../UI-X/Scheduler/UIxCalSelectTab.wox | 25 + Misc/ZideStore/UI-X/Scheduler/UIxCalView.h | 67 + Misc/ZideStore/UI-X/Scheduler/UIxCalView.m | 235 + .../UI-X/Scheduler/UIxCalWeekOverview.m | 79 + .../UI-X/Scheduler/UIxCalWeekOverview.wox | 161 + .../ZideStore/UI-X/Scheduler/UIxCalWeekView.h | 19 + .../ZideStore/UI-X/Scheduler/UIxCalWeekView.m | 35 + Misc/ZideStore/UI-X/Scheduler/Version | 5 + .../UI-X/Scheduler/bundle-info.plist | 20 + Misc/ZideStore/UI-X/Scheduler/common.h | 34 + .../UI-X/Scheduler/images/icon_apt_chart.gif | Bin 0 -> 360 bytes .../images/icon_apt_chart_inactive.gif | Bin 0 -> 181 bytes .../Scheduler/images/icon_apt_column_view.gif | Bin 0 -> 250 bytes .../UI-X/Scheduler/images/icon_apt_list.gif | Bin 0 -> 360 bytes .../images/icon_apt_list_inactive.gif | Bin 0 -> 181 bytes .../Scheduler/images/icon_apt_overview.gif | Bin 0 -> 343 bytes .../images/icon_apt_overview_inactive.gif | Bin 0 -> 165 bytes .../UI-X/Scheduler/images/next_week.gif | Bin 0 -> 121 bytes .../UI-X/Scheduler/images/previous_week.gif | Bin 0 -> 121 bytes Misc/ZideStore/UI-X/Scheduler/product.plist | 71 + Misc/db/scripts/create_user_tables.py | 161 + Misc/db/tests/helge/NOTES | 150 + .../tests/helge/PyGreSQL-samples/advanced.py | 198 + .../db/tests/helge/PyGreSQL-samples/basics.py | 296 + Misc/db/tests/helge/PyGreSQL-samples/func.py | 205 + .../db/tests/helge/PyGreSQL-samples/syscat.py | 149 + Misc/db/tests/helge/chkfolderinfoperf.py | 23 + Misc/db/tests/helge/chkhugeperf.py | 24 + Misc/db/tests/helge/fill_hugeperf.py | 80 + Misc/db/tests/helge/fillfolderinfo.py | 19 + Misc/db/tests/helge/laurent-trigger.psql | 17 + Misc/db/tests/helge/makedb.py | 12 + Misc/db/tests/helge/maketables.py | 23 + Misc/db/tests/helge/makeusers.py | 12 + Misc/db/tests/helge/scale/NOTES.txt | 4 + Misc/db/tests/helge/scale/createapts.py | 75 + Misc/db/tests/helge/scale/createfolders.py | 62 + Misc/db/tests/helge/scale/createindexes.py | 29 + Misc/db/tests/helge/scale/makeidx1-200.psql | 2587 +++++ Misc/db/tests/helge/scale/user1.sql | 9468 +++++++++++++++++ Misc/db/tests/znek/GNUmakefile | 24 + Misc/db/tests/znek/GNUmakefile.preamble | 5 + Misc/db/tests/znek/NSArray+random.h | 34 + Misc/db/tests/znek/NSArray+random.m | 42 + Misc/db/tests/znek/connection.plist | 7 + Misc/db/tests/znek/inserts.eomodel | 66 + Misc/db/tests/znek/inserts.m | 192 + Misc/db/tests/znek/lmail.m | 61 + Misc/db/tests/znek/lpe.m | 91 + Misc/db/tests/znek/pfinserts.m | 70 + .../db/tests/znek/tests.xcode/project.pbxproj | 175 + Misc/dbd/DDatabase.m | 82 + Misc/dbd/DDatabase.wox | 17 + Misc/dbd/DDatabaseManager.m | 88 + Misc/dbd/DDatabaseManager.wox | 19 + Misc/dbd/DHostView.m | 103 + Misc/dbd/DHostView.wox | 21 + Misc/dbd/DSoAuthenticator.h | 47 + Misc/dbd/DSoAuthenticator.m | 149 + Misc/dbd/DSoDatabase.h | 50 + Misc/dbd/DSoDatabase.m | 95 + Misc/dbd/DSoDatabaseManager.h | 43 + Misc/dbd/DSoDatabaseManager.m | 76 + Misc/dbd/DSoField.h | 34 + Misc/dbd/DSoField.m | 32 + Misc/dbd/DSoHost.h | 50 + Misc/dbd/DSoHost.m | 82 + Misc/dbd/DSoObject.h | 41 + Misc/dbd/DSoObject.m | 114 + Misc/dbd/DSoTable.h | 54 + Misc/dbd/DSoTable.m | 92 + Misc/dbd/DSoUser.h | 34 + Misc/dbd/DSoUser.m | 32 + Misc/dbd/DSoUserManager.h | 39 + Misc/dbd/DSoUserManager.m | 57 + Misc/dbd/DTable.m | 106 + Misc/dbd/DTable.wox | 24 + Misc/dbd/Frame.m | 11 + Misc/dbd/Frame.wox | 20 + Misc/dbd/GNUmakefile | 46 + Misc/dbd/MainPage.m | 90 + Misc/dbd/MainPage.wox | 33 + Misc/dbd/README | 108 + Misc/dbd/Version | 3 + Misc/dbd/common.h | 34 + Misc/dbd/dbd.css | 29 + Misc/dbd/dbd.m | 121 + Misc/dbd/product.plist | 95 + OGoContentStore/COPYING | 482 + OGoContentStore/COPYRIGHT | 4 + OGoContentStore/ChangeLog | 269 + OGoContentStore/GNUmakefile | 35 + OGoContentStore/GNUmakefile.postamble | 15 + OGoContentStore/GNUmakefile.preamble | 30 + OGoContentStore/OCSContactFieldExtractor.m | 128 + OGoContentStore/OCSiCalFieldExtractor.h | 35 + OGoContentStore/OCSiCalFieldExtractor.m | 251 + .../OGoContentStore.xcode/project.pbxproj | 771 ++ .../OGoContentStore.xcodeproj/project.pbxproj | 242 + OGoContentStore/README | 144 + OGoContentStore/Version | 14 + OGoContentStore/appointment.ocs | 98 + OGoContentStore/common.h | 36 + OGoContentStore/contact.ocs | 48 + OGoContentStore/iCalEntityObject+OCS.h | 33 + OGoContentStore/iCalEntityObject+OCS.m | 43 + .../iCalRepeatableEntityObject+OCS.h | 35 + .../iCalRepeatableEntityObject+OCS.m | 89 + OGoContentStore/misc/iNetOrgPerson.txt | 108 + OGoContentStore/misc/icaltest.ical | 30 + OGoContentStore/misc/test1/GNUmakefile | 15 + OGoContentStore/misc/test1/common.h | 3 + OGoContentStore/misc/test1/test1.m | 31 + OGoContentStore/sql/README | 39 + OGoContentStore/sql/appointment-create.psql | 30 + OGoContentStore/sql/folderinfo-create.psql | 67 + OGoContentStore/sql/folderinfo-create.sqlite | 62 + .../sql/foldertablecreate-helge-privcal.psql | 35 + .../foldertablecreate-helge-privcal.sqlite | 36 + .../sql/foldertablecreate-root.psql | 9 + .../sql/foldertablecreate-test-contacts.psql | 27 + ...enerate-folderinfo-sql-for-users-sqlite.sh | 114 + ...e-folderinfo-sql-for-users-sqlite1table.sh | 109 + .../sql/generate-folderinfo-sql-for-users.sh | 125 + OGoContentStore/sql/profile-create.psql | 9 + .../sql/register-agenor-helge-privcal.psql | 13 + .../sql/register-agenor-test-contacts.psql | 13 + .../sql/testapt-agenor-helge-privcal.psql | 57 + OGoContentStore/sql/testapt-hh.psql | 63 + .../sql/testcontact-agenor-test-contact.psql | 33 + OGoContentStore/test_quick_extract.m | 123 + Protocols/GNUmakefile | 9 + Protocols/common.make | 36 + Protocols/iCalHTTP/COPYING | 482 + Protocols/iCalHTTP/COPYRIGHT | 4 + Protocols/iCalHTTP/ChangeLog | 15 + Protocols/iCalHTTP/GNUmakefile | 29 + Protocols/iCalHTTP/README | 5 + Protocols/iCalHTTP/SOGoICalFileFetch.m | 79 + Protocols/iCalHTTP/SOGoICalFilePublish.m | 322 + Protocols/iCalHTTP/SOGoICalHTTPHandler.h | 44 + Protocols/iCalHTTP/SOGoICalHTTPHandler.m | 103 + Protocols/iCalHTTP/Version | 5 + Protocols/iCalHTTP/bundle-info.plist | 17 + Protocols/iCalHTTP/common.h | 34 + Protocols/iCalHTTP/iCalHTTPProduct.m | 34 + Protocols/iCalHTTP/product.plist | 47 + README | 26 + SOGo.conf | 26 + SOGo.xcode/helge.pbxuser | 600 ++ SOGo.xcode/project.pbxproj | 4853 +++++++++ SOGo.xcodeproj/project.pbxproj | 1785 ++++ SoObjects/Appointments/ChangeLog | 266 + SoObjects/Appointments/GNUmakefile | 42 + SoObjects/Appointments/Product.m | 33 + .../Appointments/SOGoAppointmentFolder.h | 101 + .../Appointments/SOGoAppointmentFolder.m | 716 ++ .../Appointments/SOGoAppointmentObject.h | 72 + .../Appointments/SOGoAppointmentObject.m | 772 ++ SoObjects/Appointments/SOGoAptMailDeletion.m | 38 + .../SOGoAptMailEnglishDeletion.html | 4 + .../SOGoAptMailEnglishDeletion.wod | 34 + .../SOGoAptMailEnglishInvitation.html | 7 + .../SOGoAptMailEnglishInvitation.wod | 34 + .../SOGoAptMailEnglishRemoval.html | 4 + .../SOGoAptMailEnglishRemoval.wod | 34 + .../SOGoAptMailEnglishUpdate.html | 8 + .../SOGoAptMailEnglishUpdate.wod | 46 + .../SOGoAptMailFrenchDeletion.html | 4 + .../SOGoAptMailFrenchDeletion.wod | 34 + .../SOGoAptMailFrenchInvitation.html | 7 + .../SOGoAptMailFrenchInvitation.wod | 34 + .../SOGoAptMailFrenchRemoval.html | 4 + .../SOGoAptMailFrenchRemoval.wod | 34 + .../SOGoAptMailFrenchUpdate.html | 5 + .../SOGoAptMailFrenchUpdate.wod | 46 + .../Appointments/SOGoAptMailInvitation.m | 38 + .../Appointments/SOGoAptMailNotification.h | 68 + .../Appointments/SOGoAptMailNotification.m | 143 + SoObjects/Appointments/SOGoAptMailRemoval.m | 38 + SoObjects/Appointments/SOGoAptMailUpdate.m | 38 + SoObjects/Appointments/SOGoFreeBusyObject.h | 53 + SoObjects/Appointments/SOGoFreeBusyObject.m | 213 + .../Appointments/SOGoGroupAppointmentFolder.h | 52 + .../Appointments/SOGoGroupAppointmentFolder.m | 233 + SoObjects/Appointments/Version | 10 + SoObjects/Appointments/bundle-info.plist | 2 + SoObjects/Appointments/common.h | 31 + SoObjects/Appointments/product.plist | 26 + SoObjects/ChangeLog | 102 + SoObjects/Contacts/ChangeLog | 73 + SoObjects/Contacts/GNUmakefile | 22 + SoObjects/Contacts/GNUmakefile.preamble | 1 + SoObjects/Contacts/Product.m | 33 + SoObjects/Contacts/README | 58 + SoObjects/Contacts/SOGoContactFolder.h | 49 + SoObjects/Contacts/SOGoContactFolder.m | 123 + SoObjects/Contacts/SOGoContactObject.h | 54 + SoObjects/Contacts/SOGoContactObject.m | 162 + SoObjects/Contacts/Version | 7 + SoObjects/Contacts/common.h | 33 + SoObjects/Contacts/product.plist | 35 + SoObjects/GNUmakefile | 13 + SoObjects/Mailer/ChangeLog | 718 ++ SoObjects/Mailer/GNUmakefile | 43 + SoObjects/Mailer/GNUmakefile.preamble | 7 + SoObjects/Mailer/Product.m | 33 + SoObjects/Mailer/README | 60 + SoObjects/Mailer/SOGoCalendarMailBodyPart.m | 53 + SoObjects/Mailer/SOGoDraftObject.h | 81 + SoObjects/Mailer/SOGoDraftObject.m | 985 ++ SoObjects/Mailer/SOGoDraftsFolder.h | 49 + SoObjects/Mailer/SOGoDraftsFolder.m | 193 + SoObjects/Mailer/SOGoImageMailBodyPart.m | 53 + SoObjects/Mailer/SOGoMailAccount.h | 74 + SoObjects/Mailer/SOGoMailAccount.m | 410 + SoObjects/Mailer/SOGoMailAccounts.h | 51 + SoObjects/Mailer/SOGoMailAccounts.m | 205 + SoObjects/Mailer/SOGoMailBaseObject.h | 74 + SoObjects/Mailer/SOGoMailBaseObject.m | 194 + SoObjects/Mailer/SOGoMailBodyPart.h | 66 + SoObjects/Mailer/SOGoMailBodyPart.m | 336 + SoObjects/Mailer/SOGoMailFolder.h | 86 + SoObjects/Mailer/SOGoMailFolder.m | 389 + SoObjects/Mailer/SOGoMailFolderDataSource.h | 59 + SoObjects/Mailer/SOGoMailFolderDataSource.m | 217 + SoObjects/Mailer/SOGoMailIdentity.h | 111 + SoObjects/Mailer/SOGoMailIdentity.m | 140 + SoObjects/Mailer/SOGoMailManager.h | 93 + SoObjects/Mailer/SOGoMailManager.m | 321 + SoObjects/Mailer/SOGoMailObject.h | 93 + SoObjects/Mailer/SOGoMailObject.m | 970 ++ SoObjects/Mailer/SOGoMessageMailBodyPart.m | 55 + SoObjects/Mailer/SOGoSharedInboxFolder.h | 44 + SoObjects/Mailer/SOGoSharedInboxFolder.m | 53 + SoObjects/Mailer/SOGoSharedMailAccount.h | 56 + SoObjects/Mailer/SOGoSharedMailAccount.m | 141 + SoObjects/Mailer/SOGoTrashFolder.h | 30 + SoObjects/Mailer/SOGoTrashFolder.m | 33 + SoObjects/Mailer/SOGoUser+Mail.h | 48 + SoObjects/Mailer/SOGoUser+Mail.m | 139 + SoObjects/Mailer/SOGoVCardMailBodyPart.m | 53 + SoObjects/Mailer/Version | 15 + SoObjects/Mailer/common.h | 36 + SoObjects/Mailer/product.plist | 70 + SoObjects/README | 9 + SoObjects/SOGo/AgenorUserDefaults.h | 84 + SoObjects/SOGo/AgenorUserDefaults.m | 472 + SoObjects/SOGo/AgenorUserManager.h | 85 + SoObjects/SOGo/AgenorUserManager.m | 1150 ++ SoObjects/SOGo/ChangeLog | 374 + SoObjects/SOGo/GNUmakefile | 78 + SoObjects/SOGo/GNUmakefile.preamble | 33 + SoObjects/SOGo/NSObject+AptComparison.h | 34 + SoObjects/SOGo/NSObject+AptComparison.m | 58 + SoObjects/SOGo/NSString+iCal.h | 32 + SoObjects/SOGo/README | 29 + SoObjects/SOGo/SOGoAppointment.h | 145 + SoObjects/SOGo/SOGoAppointment.m | 486 + SoObjects/SOGo/SOGoAppointmentICalRenderer.h | 46 + SoObjects/SOGo/SOGoAppointmentICalRenderer.m | 257 + SoObjects/SOGo/SOGoAuthenticator.h | 42 + SoObjects/SOGo/SOGoAuthenticator.m | 69 + SoObjects/SOGo/SOGoContentObject.h | 64 + SoObjects/SOGo/SOGoContentObject.m | 305 + SoObjects/SOGo/SOGoCustomGroupFolder.h | 59 + SoObjects/SOGo/SOGoCustomGroupFolder.m | 108 + SoObjects/SOGo/SOGoFolder.h | 67 + SoObjects/SOGo/SOGoFolder.m | 194 + SoObjects/SOGo/SOGoGroupFolder.h | 58 + SoObjects/SOGo/SOGoGroupFolder.m | 204 + SoObjects/SOGo/SOGoGroupsFolder.h | 59 + SoObjects/SOGo/SOGoGroupsFolder.m | 79 + SoObjects/SOGo/SOGoLRUCache.h | 40 + SoObjects/SOGo/SOGoLRUCache.m | 112 + SoObjects/SOGo/SOGoObject.h | 84 + SoObjects/SOGo/SOGoObject.m | 381 + SoObjects/SOGo/SOGoUser.h | 73 + SoObjects/SOGo/SOGoUser.m | 134 + SoObjects/SOGo/SOGoUserFolder.h | 62 + SoObjects/SOGo/SOGoUserFolder.m | 214 + SoObjects/SOGo/Version | 9 + SoObjects/SOGo/WOContext+Agenor.h | 33 + SoObjects/SOGo/WOContext+Agenor.m | 82 + SoObjects/SOGo/agenor_defaults.m | 134 + SoObjects/SOGo/agenor_email2uid.m | 71 + SoObjects/SOGo/agenor_emails4uid.m | 85 + SoObjects/SOGo/agenor_shares4uid.m | 79 + SoObjects/SOGo/common.h | 32 + SoObjects/Sieve/ChangeLog | 45 + SoObjects/Sieve/GNUmakefile | 22 + SoObjects/Sieve/GNUmakefile.preamble | 3 + SoObjects/Sieve/Product.m | 32 + SoObjects/Sieve/README | 8 + SoObjects/Sieve/SOGoSieveBaseObject.h | 60 + SoObjects/Sieve/SOGoSieveBaseObject.m | 117 + SoObjects/Sieve/SOGoSieveScriptObject.h | 50 + SoObjects/Sieve/SOGoSieveScriptObject.m | 139 + SoObjects/Sieve/SOGoSieveScriptsFolder.h | 50 + SoObjects/Sieve/SOGoSieveScriptsFolder.m | 98 + SoObjects/Sieve/Version | 7 + SoObjects/Sieve/common.h | 34 + SoObjects/Sieve/product.plist | 23 + SoObjects/common.make | 32 + UI/ChangeLog | 245 + UI/Common/ChangeLog | 252 + UI/Common/CommonUIProduct.m | 31 + UI/Common/English.lproj/Localizable.strings | 11 + UI/Common/French.lproj/Localizable.strings | 10 + UI/Common/GNUmakefile | 36 + UI/Common/GNUmakefile.postamble | 17 + UI/Common/GNUmakefile.preamble | 21 + UI/Common/UIxAppNavView.m | 104 + UI/Common/UIxElemBuilder.m | 86 + UI/Common/UIxPageFrame.m | 147 + UI/Common/UIxPrintPageFrame.m | 49 + UI/Common/UIxSortButton.m | 29 + UI/Common/UIxTabItem.m | 475 + UI/Common/UIxTabView.h | 133 + UI/Common/UIxTabView.m | 684 ++ UI/Common/UIxWinClose.m | 28 + UI/Common/Version | 5 + UI/Common/bundle-info.plist | 38 + UI/Common/common.h | 155 + UI/Common/product.plist | 38 + UI/Contacts/COPYING | 482 + UI/Contacts/COPYRIGHT | 4 + UI/Contacts/ChangeLog | 164 + UI/Contacts/ContactsUIProduct.m | 34 + UI/Contacts/English.lproj/Localizable.strings | 31 + UI/Contacts/French.lproj/Localizable.strings | 31 + UI/Contacts/GNUmakefile | 34 + UI/Contacts/GNUmakefile.postamble | 17 + UI/Contacts/GNUmakefile.preamble | 7 + UI/Contacts/NOTES | 12 + UI/Contacts/UIxContactEditor.m | 28 + UI/Contacts/UIxContactEditorBase.h | 39 + UI/Contacts/UIxContactEditorBase.m | 273 + UI/Contacts/UIxContactSelector.m | 123 + UI/Contacts/UIxContactView.m | 110 + UI/Contacts/UIxContactsListView.m | 28 + UI/Contacts/UIxContactsListViewBase.h | 39 + UI/Contacts/UIxContactsListViewBase.m | 131 + UI/Contacts/UIxContactsSelectionView.m | 115 + UI/Contacts/Version | 6 + UI/Contacts/bundle-info.plist | 17 + UI/Contacts/common.h | 34 + UI/Contacts/product.plist | 57 + UI/GNUmakefile | 18 + UI/MailPartViewers/COPYING | 482 + UI/MailPartViewers/COPYRIGHT | 4 + UI/MailPartViewers/ChangeLog | 119 + .../English.lproj/Localizable.strings | 23 + .../French.lproj/Localizable.strings | 7 + UI/MailPartViewers/GNUmakefile | 48 + UI/MailPartViewers/MailPartViewersProduct.m | 33 + UI/MailPartViewers/README.txt | 17 + .../UIxKolabPartContactViewer.m | 57 + UI/MailPartViewers/UIxKolabPartEventViewer.m | 36 + UI/MailPartViewers/UIxKolabPartTaskViewer.m | 36 + UI/MailPartViewers/UIxKolabPartViewer.h | 47 + UI/MailPartViewers/UIxKolabPartViewer.m | 79 + .../UIxMailPartAlternativeViewer.m | 164 + UI/MailPartViewers/UIxMailPartHTMLViewer.m | 30 + UI/MailPartViewers/UIxMailPartICalAction.m | 73 + UI/MailPartViewers/UIxMailPartICalViewer.m | 370 + UI/MailPartViewers/UIxMailPartImageViewer.m | 54 + UI/MailPartViewers/UIxMailPartLinkViewer.h | 53 + UI/MailPartViewers/UIxMailPartLinkViewer.m | 28 + UI/MailPartViewers/UIxMailPartMessageViewer.m | 153 + UI/MailPartViewers/UIxMailPartMixedViewer.m | 90 + UI/MailPartViewers/UIxMailPartTextViewer.m | 43 + UI/MailPartViewers/UIxMailPartViewer.h | 82 + UI/MailPartViewers/UIxMailPartViewer.m | 294 + UI/MailPartViewers/UIxMailRenderingContext.h | 78 + UI/MailPartViewers/UIxMailRenderingContext.m | 303 + UI/MailPartViewers/UIxMailSizeFormatter.h | 41 + UI/MailPartViewers/UIxMailSizeFormatter.m | 52 + UI/MailPartViewers/Version | 6 + UI/MailPartViewers/common.h | 33 + UI/MailPartViewers/product.plist | 31 + UI/MailerUI/COPYING | 482 + UI/MailerUI/COPYRIGHT | 4 + UI/MailerUI/ChangeLog | 984 ++ UI/MailerUI/English.lproj/Localizable.strings | 95 + UI/MailerUI/French.lproj/Localizable.strings | 90 + UI/MailerUI/GNUmakefile | 59 + UI/MailerUI/GNUmakefile.postamble | 17 + UI/MailerUI/GNUmakefile.preamble | 7 + UI/MailerUI/Images/COPYING | 5 + UI/MailerUI/Images/LICENSE-thunderbird.txt | 567 + UI/MailerUI/Images/treeview_corner.gif | Bin 0 -> 70 bytes UI/MailerUI/Images/treeview_corner_minus.gif | Bin 0 -> 138 bytes UI/MailerUI/Images/treeview_corner_plus.gif | Bin 0 -> 141 bytes UI/MailerUI/Images/treeview_junction.gif | Bin 0 -> 75 bytes UI/MailerUI/Images/treeview_leaf.gif | Bin 0 -> 72 bytes UI/MailerUI/Images/treeview_leaf_corner.gif | Bin 0 -> 77 bytes UI/MailerUI/Images/treeview_line.gif | Bin 0 -> 73 bytes UI/MailerUI/Images/treeview_minus.gif | Bin 0 -> 142 bytes UI/MailerUI/Images/treeview_plus.gif | Bin 0 -> 145 bytes UI/MailerUI/Images/treeview_space.gif | Bin 0 -> 58 bytes UI/MailerUI/MailerUIProduct.m | 34 + UI/MailerUI/NOTES | 2 + UI/MailerUI/README | 179 + UI/MailerUI/Toolbars/SOGoDraftObject.toolbar | 21 + UI/MailerUI/Toolbars/SOGoMailAccount.toolbar | 18 + UI/MailerUI/Toolbars/SOGoMailFolder.toolbar | 69 + UI/MailerUI/Toolbars/SOGoMailObject.toolbar | 50 + UI/MailerUI/Toolbars/SOGoTrashFolder.toolbar | 33 + UI/MailerUI/UIxEnvelopeAddressFormatter.m | 124 + UI/MailerUI/UIxFilterList.m | 116 + UI/MailerUI/UIxMailAccountView.m | 166 + UI/MailerUI/UIxMailAccountsView.m | 38 + UI/MailerUI/UIxMailAddressbook.m | 65 + UI/MailerUI/UIxMailEditor.m | 581 + UI/MailerUI/UIxMailEditorAction.h | 61 + UI/MailerUI/UIxMailEditorAction.m | 171 + UI/MailerUI/UIxMailEditorAttach.m | 251 + UI/MailerUI/UIxMailFilterPanel.m | 159 + UI/MailerUI/UIxMailFolderACLEditor.m | 42 + UI/MailerUI/UIxMailFormatter.h | 104 + UI/MailerUI/UIxMailFormatter.m | 149 + UI/MailerUI/UIxMailForwardAction.m | 106 + UI/MailerUI/UIxMailListView.m | 583 + UI/MailerUI/UIxMailMainFrame.m | 266 + UI/MailerUI/UIxMailMoveToPopUp.m | 150 + UI/MailerUI/UIxMailReplyAction.m | 240 + UI/MailerUI/UIxMailSortableTableHeader.m | 125 + UI/MailerUI/UIxMailToSelection.m | 321 + UI/MailerUI/UIxMailToolbar.m | 187 + UI/MailerUI/UIxMailTree.m | 575 + UI/MailerUI/UIxMailTreeBlock.h | 67 + UI/MailerUI/UIxMailTreeBlock.m | 142 + UI/MailerUI/UIxMailView.m | 310 + UI/MailerUI/UIxMailWindowCloser.m | 49 + UI/MailerUI/UIxSieveEditor.m | 115 + UI/MailerUI/UIxSubjectFormatter.m | 154 + UI/MailerUI/Version | 28 + UI/MailerUI/WOContext+UIxMailer.h | 44 + UI/MailerUI/WOContext+UIxMailer.m | 47 + UI/MailerUI/bundle-info.plist | 15 + UI/MailerUI/common.h | 33 + UI/MailerUI/product.plist | 454 + .../screenshots/tbird_073_accountview.png | Bin 0 -> 43866 bytes UI/MailerUI/screenshots/tbird_073_compose.png | Bin 0 -> 15837 bytes .../screenshots/tbird_073_mailwelcome.png | Bin 0 -> 129592 bytes .../screenshots/tbird_073_settings.png | Bin 0 -> 12978 bytes UI/MailerUI/screenshots/tbird_073_viewer.png | Bin 0 -> 28107 bytes UI/MainUI/ChangeLog | 9 + UI/MainUI/English.lproj/Locale | 35 + UI/MainUI/English.lproj/Localizable.strings | 12 + UI/MainUI/French.lproj/Locale | 35 + UI/MainUI/French.lproj/Localizable.strings | 12 + UI/MainUI/GNUmakefile | 35 + UI/MainUI/GNUmakefile.preamble | 6 + UI/MainUI/MainUIProduct.m | 47 + UI/MainUI/README | 4 + UI/MainUI/SOGoGroupPage.m | 31 + UI/MainUI/SOGoGroupPage.wox | 27 + UI/MainUI/SOGoGroupsPage.m | 35 + UI/MainUI/SOGoGroupsPage.wox | 18 + UI/MainUI/SOGoRootPage.m | 154 + UI/MainUI/SOGoRootPage.wox | 24 + UI/MainUI/SOGoUserHomePage.m | 233 + UI/MainUI/SOGoUserHomePage.wox | 120 + UI/MainUI/Version | 5 + UI/MainUI/common.h | 34 + UI/MainUI/homepage.js | 49 + UI/MainUI/product.plist | 86 + UI/README | 14 + UI/SOGoUI/ChangeLog | 211 + UI/SOGoUI/GNUmakefile | 33 + UI/SOGoUI/GNUmakefile.preamble | 15 + UI/SOGoUI/README | 7 + UI/SOGoUI/SOGoAptFormatter.h | 65 + UI/SOGoUI/SOGoAptFormatter.m | 321 + UI/SOGoUI/SOGoDateFormatter.h | 47 + UI/SOGoUI/SOGoDateFormatter.m | 137 + UI/SOGoUI/SOGoJSStringFormatter.h | 43 + UI/SOGoUI/SOGoJSStringFormatter.m | 78 + UI/SOGoUI/UIxComponent.h | 92 + UI/SOGoUI/UIxComponent.m | 459 + UI/SOGoUI/Version | 5 + UI/SOGoUI/WOContext+UIx.h | 33 + UI/SOGoUI/WOContext+UIx.m | 42 + UI/SOGoUI/common.h | 26 + UI/Scheduler/COPYING | 482 + UI/Scheduler/COPYRIGHT | 4 + UI/Scheduler/ChangeLog | 1284 +++ .../English.lproj/Localizable.strings | 221 + UI/Scheduler/English.lproj/skycalendar.html | 160 + UI/Scheduler/English.lproj/skycalendar.js | 190 + UI/Scheduler/French.lproj/Localizable.strings | 222 + UI/Scheduler/French.lproj/skycalendar.html | 160 + UI/Scheduler/French.lproj/skycalendar.js | 190 + UI/Scheduler/GNUmakefile | 93 + UI/Scheduler/GNUmakefile.postamble | 21 + UI/Scheduler/GNUmakefile.preamble | 5 + UI/Scheduler/German.lproj/Localizable.strings | 221 + UI/Scheduler/NOTES | 61 + UI/Scheduler/NSCalendarDate+UIx.h | 35 + UI/Scheduler/NSCalendarDate+UIx.m | 50 + UI/Scheduler/SOGoAppointment+UIx.h | 31 + UI/Scheduler/SOGoAppointment+UIx.m | 47 + UI/Scheduler/SchedulerUIProduct.m | 34 + UI/Scheduler/UIxAppointmentEditor.m | 1083 ++ UI/Scheduler/UIxAppointmentPrintview.m | 62 + UI/Scheduler/UIxAppointmentProposal.m | 488 + UI/Scheduler/UIxAppointmentView.h | 39 + UI/Scheduler/UIxAppointmentView.m | 268 + UI/Scheduler/UIxAptTableView.m | 75 + UI/Scheduler/UIxCalBackForthNavView.m | 49 + UI/Scheduler/UIxCalDateLabel.m | 134 + UI/Scheduler/UIxCalDayChartview.m | 62 + UI/Scheduler/UIxCalDayListview.m | 101 + UI/Scheduler/UIxCalDayOverview.h | 42 + UI/Scheduler/UIxCalDayOverview.m | 126 + UI/Scheduler/UIxCalDayPrintview.m | 52 + UI/Scheduler/UIxCalDayView.h | 49 + UI/Scheduler/UIxCalDayView.m | 218 + UI/Scheduler/UIxCalInlineAptView.m | 156 + UI/Scheduler/UIxCalInlineMonthOverview.m | 265 + UI/Scheduler/UIxCalMonthOverview.h | 67 + UI/Scheduler/UIxCalMonthOverview.m | 103 + UI/Scheduler/UIxCalMonthPrintview.m | 115 + UI/Scheduler/UIxCalMonthView.h | 25 + UI/Scheduler/UIxCalMonthView.m | 45 + UI/Scheduler/UIxCalParticipationStatusView.m | 67 + UI/Scheduler/UIxCalScheduleOverview.m | 391 + UI/Scheduler/UIxCalSelectTab.m | 115 + UI/Scheduler/UIxCalView.h | 106 + UI/Scheduler/UIxCalView.m | 493 + UI/Scheduler/UIxCalWeekChartview.m | 191 + UI/Scheduler/UIxCalWeekColumnsview.m | 80 + UI/Scheduler/UIxCalWeekListview.m | 183 + UI/Scheduler/UIxCalWeekOverview.h | 30 + UI/Scheduler/UIxCalWeekOverview.m | 72 + UI/Scheduler/UIxCalWeekPrintview.m | 129 + UI/Scheduler/UIxCalWeekView.h | 21 + UI/Scheduler/UIxCalWeekView.m | 46 + UI/Scheduler/UIxCalYearOverview.m | 149 + UI/Scheduler/UIxComponent+Agenor.h | 38 + UI/Scheduler/UIxComponent+Agenor.m | 42 + UI/Scheduler/UIxDatePicker.m | 210 + UI/Scheduler/UIxDatePickerScript.m | 37 + UI/Scheduler/UIxTimeDateControl.m | 210 + UI/Scheduler/UIxTimeSelector.m | 94 + UI/Scheduler/Version | 26 + UI/Scheduler/bundle-info.plist | 17 + UI/Scheduler/common.h | 34 + UI/Scheduler/cycles.plist | 33 + UI/Scheduler/iCalPerson+UIx.h | 34 + UI/Scheduler/iCalPerson+UIx.m | 32 + UI/Scheduler/iCalRecurrenceRule+SOGo.m | 52 + UI/Scheduler/images/apt_icon_private.gif | Bin 0 -> 289 bytes UI/Scheduler/images/first.gif | Bin 0 -> 118 bytes UI/Scheduler/images/green_corner.gif | Bin 0 -> 74 bytes UI/Scheduler/images/icon_popupcalendar.gif | Bin 0 -> 353 bytes UI/Scheduler/images/icon_view_chart.gif | Bin 0 -> 360 bytes .../images/icon_view_chart_inactive.gif | Bin 0 -> 181 bytes UI/Scheduler/images/icon_view_columns.gif | Bin 0 -> 250 bytes .../images/icon_view_columns_inactive.gif | Bin 0 -> 182 bytes UI/Scheduler/images/icon_view_list.gif | Bin 0 -> 360 bytes .../images/icon_view_list_inactive.gif | Bin 0 -> 181 bytes UI/Scheduler/images/icon_view_overview.gif | Bin 0 -> 343 bytes .../images/icon_view_overview_inactive.gif | Bin 0 -> 165 bytes UI/Scheduler/images/invisible_space_2.gif | Bin 0 -> 42 bytes UI/Scheduler/images/last.gif | Bin 0 -> 118 bytes UI/Scheduler/images/next.gif | Bin 0 -> 114 bytes UI/Scheduler/images/next_week.gif | Bin 0 -> 121 bytes UI/Scheduler/images/previous.gif | Bin 0 -> 114 bytes UI/Scheduler/images/previous_week.gif | Bin 0 -> 121 bytes UI/Scheduler/product.plist | 145 + UI/Scheduler/skycalendar.html | 160 + UI/Scheduler/skycalendar.js | 190 + UI/Templates/ChangeLog | 242 + UI/Templates/ContactsUI/UIxContactEditor.wox | 319 + UI/Templates/ContactsUI/UIxContactView.wox | 339 + .../ContactsUI/UIxContactsListView.wox | 172 + UI/Templates/GNUmakefile | 12 + UI/Templates/MailPartViewers/GNUmakefile | 12 + .../UIxKolabPartContactViewer.wox | 181 + .../UIxKolabPartEventViewer.wox | 16 + .../UIxKolabPartTaskViewer.wox | 16 + .../UIxMailPartAlternativeViewer.wox | 13 + .../MailPartViewers/UIxMailPartHTMLViewer.wox | 23 + .../MailPartViewers/UIxMailPartICalViewer.wox | 204 + .../UIxMailPartImageViewer.wox | 9 + .../MailPartViewers/UIxMailPartLinkViewer.wox | 39 + .../UIxMailPartMessageViewer.wox | 80 + .../UIxMailPartMixedViewer.wox | 17 + .../MailPartViewers/UIxMailPartTextViewer.wox | 9 + UI/Templates/MailerUI/UIxMailAccountView.wox | 71 + UI/Templates/MailerUI/UIxMailAccountsView.wox | 28 + UI/Templates/MailerUI/UIxMailAddressbook.wox | 16 + UI/Templates/MailerUI/UIxMailEditor.wox | 88 + UI/Templates/MailerUI/UIxMailEditorAttach.wox | 101 + UI/Templates/MailerUI/UIxMailFilterPanel.wox | 45 + .../MailerUI/UIxMailFolderACLEditor.wox | 14 + UI/Templates/MailerUI/UIxMailListView.wox | 202 + UI/Templates/MailerUI/UIxMailMainFrame.wox | 163 + UI/Templates/MailerUI/UIxMailMoveToPopUp.wox | 26 + UI/Templates/MailerUI/UIxMailPanelFrame.wox | 141 + .../MailerUI/UIxMailSortableTableHeader.wox | 40 + UI/Templates/MailerUI/UIxMailToSelection.wox | 61 + UI/Templates/MailerUI/UIxMailToolbar.wox | 35 + UI/Templates/MailerUI/UIxMailTree.wox | 39 + UI/Templates/MailerUI/UIxMailView.wox | 173 + UI/Templates/MailerUI/UIxMailWindowCloser.wox | 26 + UI/Templates/UIxAppNavView.wox | 25 + UI/Templates/UIxAppointmentEditor.wox | 338 + UI/Templates/UIxAppointmentPrintview.wox | 153 + UI/Templates/UIxAppointmentProposal.wox | 259 + UI/Templates/UIxAppointmentView.wox | 307 + UI/Templates/UIxAptTableView.wox | 34 + UI/Templates/UIxCalBackForthNavView.wox | 20 + UI/Templates/UIxCalDateLabel.wox | 8 + UI/Templates/UIxCalDayChartview.wox | 261 + UI/Templates/UIxCalDayListview.wox | 219 + UI/Templates/UIxCalDayOverview.wox | 248 + UI/Templates/UIxCalDayPrintview.wox | 70 + UI/Templates/UIxCalInlineAptView.wox | 31 + UI/Templates/UIxCalInlineMonthOverview.wox | 71 + UI/Templates/UIxCalMonthOverview.wox | 223 + UI/Templates/UIxCalMonthPrintview.wox | 69 + .../UIxCalParticipationStatusView.wox | 8 + UI/Templates/UIxCalScheduleOverview.wox | 205 + UI/Templates/UIxCalSelectTab.wox | 26 + UI/Templates/UIxCalWeekChartview.wox | 238 + UI/Templates/UIxCalWeekColumnsview.wox | 285 + UI/Templates/UIxCalWeekListview.wox | 248 + UI/Templates/UIxCalWeekOverview.wox | 221 + UI/Templates/UIxCalWeekPrintview.wox | 75 + UI/Templates/UIxCalYearOverview.wox | 113 + UI/Templates/UIxContactSelector.wox | 14 + UI/Templates/UIxContactsSelectionView.wox | 171 + UI/Templates/UIxDatePicker.wox | 21 + UI/Templates/UIxDatePickerScript.wox | 10 + UI/Templates/UIxFilterList.wox | 50 + UI/Templates/UIxPageFrame.wox | 204 + UI/Templates/UIxPrintPageFrame.wox | 23 + UI/Templates/UIxSieveEditor.wox | 33 + UI/Templates/UIxSortButton.wox | 11 + UI/Templates/UIxTimeDateControl.wox | 30 + UI/Templates/UIxTimeSelector.wox | 14 + UI/Templates/UIxWinClose.wox | 13 + UI/WebServerResources/COPYING-thunderbird.txt | 5 + UI/WebServerResources/ChangeLog | 78 + UI/WebServerResources/LICENSE-thunderbird.txt | 567 + UI/WebServerResources/OGoLogo.gif | Bin 0 -> 2047 bytes UI/WebServerResources/UIxAppointmentEditor.js | 93 + UI/WebServerResources/UIxContactEditor.js | 83 + UI/WebServerResources/UIxMailEditorAttach.js | 41 + UI/WebServerResources/UIxMailListView.js | 42 + UI/WebServerResources/UIxMailToSelection.js | 227 + UI/WebServerResources/box_botleft.gif | Bin 0 -> 100 bytes UI/WebServerResources/box_botright.gif | Bin 0 -> 102 bytes UI/WebServerResources/box_bottom.gif | Bin 0 -> 43 bytes UI/WebServerResources/box_left.gif | Bin 0 -> 47 bytes UI/WebServerResources/box_right.gif | Bin 0 -> 47 bytes UI/WebServerResources/box_top.gif | Bin 0 -> 43 bytes UI/WebServerResources/box_topleft.gif | Bin 0 -> 102 bytes UI/WebServerResources/box_topright.gif | Bin 0 -> 101 bytes UI/WebServerResources/calendar.css | 845 ++ UI/WebServerResources/closewindow.gif | Bin 0 -> 96 bytes UI/WebServerResources/corner_right.gif | Bin 0 -> 49 bytes UI/WebServerResources/downward_sorted.gif | Bin 0 -> 118 bytes UI/WebServerResources/generic.js | 168 + UI/WebServerResources/icon_mark_flagged.gif | Bin 0 -> 215 bytes UI/WebServerResources/icon_mark_read.gif | Bin 0 -> 552 bytes UI/WebServerResources/icon_mark_unflagged.gif | Bin 0 -> 368 bytes UI/WebServerResources/icon_mark_unread.gif | Bin 0 -> 538 bytes UI/WebServerResources/icon_read.gif | Bin 0 -> 79 bytes UI/WebServerResources/icon_unread.gif | Bin 0 -> 85 bytes UI/WebServerResources/layout2or3_xlib.js | 3 + UI/WebServerResources/layout2or3_xlib.txt | 511 + UI/WebServerResources/line_left.gif | Bin 0 -> 264 bytes UI/WebServerResources/line_right.gif | Bin 0 -> 262 bytes UI/WebServerResources/line_stretch.gif | Bin 0 -> 234 bytes UI/WebServerResources/lori_32x32.png | Bin 0 -> 2132 bytes UI/WebServerResources/mailer-compose.css | 79 + UI/WebServerResources/mailer-toolbar.css | 114 + UI/WebServerResources/mailer.css | 423 + UI/WebServerResources/mailer.js | 419 + UI/WebServerResources/menu_logo_top.gif | Bin 0 -> 2047 bytes UI/WebServerResources/message-mail-read.png | Bin 0 -> 818 bytes UI/WebServerResources/message-mail.png | Bin 0 -> 626 bytes UI/WebServerResources/non_sorted.gif | Bin 0 -> 120 bytes UI/WebServerResources/searchfield.js | 108 + UI/WebServerResources/tab_.gif | Bin 0 -> 127 bytes UI/WebServerResources/tab_selected.gif | Bin 0 -> 127 bytes .../tb-ab-delete-flat-24x24.png | Bin 0 -> 1384 bytes .../tb-ab-delete-high-24x24.png | Bin 0 -> 1378 bytes .../tb-ab-delete-off-24x24.png | Bin 0 -> 1393 bytes .../tb-ab-instantmessage-flat-24x24.png | Bin 0 -> 1270 bytes .../tb-ab-instantmessage-high-24x24.png | Bin 0 -> 1329 bytes .../tb-ab-instantmessage-off-24x24.png | Bin 0 -> 1085 bytes .../tb-ab-newcard-flat-24x24.png | Bin 0 -> 1422 bytes .../tb-ab-newcard-high-24x24.png | Bin 0 -> 1434 bytes .../tb-ab-newcard-off-24x24.png | Bin 0 -> 1302 bytes .../tb-ab-newlist-flat-24x24.png | Bin 0 -> 910 bytes .../tb-ab-newlist-high-24x24.png | Bin 0 -> 956 bytes .../tb-ab-newlist-off-24x24.png | Bin 0 -> 765 bytes .../tb-ab-properties-flat-24x24.png | Bin 0 -> 1389 bytes .../tb-ab-properties-high-24x24.png | Bin 0 -> 1463 bytes .../tb-ab-properties-off-24x24.png | Bin 0 -> 1291 bytes .../tb-ab-write-flat-24x24.png | Bin 0 -> 1498 bytes .../tb-ab-write-high-24x24.png | Bin 0 -> 1551 bytes .../tb-ab-write-off-24x24.png | Bin 0 -> 1384 bytes .../tb-compose-attach-flat-24x24.png | Bin 0 -> 1668 bytes .../tb-compose-attach-high-24x24.png | Bin 0 -> 1661 bytes .../tb-compose-attach-off-24x24.png | Bin 0 -> 1586 bytes .../tb-compose-contacts-flat-24x24.png | Bin 0 -> 1582 bytes .../tb-compose-contacts-high-24x24.png | Bin 0 -> 1603 bytes .../tb-compose-contacts-off-24x24.png | Bin 0 -> 1516 bytes .../tb-compose-copy-flat-24x24.png | Bin 0 -> 1301 bytes .../tb-compose-copy-high-24x24.png | Bin 0 -> 1384 bytes .../tb-compose-copy-off-24x24.png | Bin 0 -> 1158 bytes .../tb-compose-cut-flat-24x24.png | Bin 0 -> 1533 bytes .../tb-compose-cut-high-24x24.png | Bin 0 -> 1532 bytes .../tb-compose-cut-off-24x24.png | Bin 0 -> 1503 bytes .../tb-compose-paste-flat-24x24.png | Bin 0 -> 1435 bytes .../tb-compose-paste-high-24x24.png | Bin 0 -> 1507 bytes .../tb-compose-paste-off-24x24.png | Bin 0 -> 1250 bytes .../tb-compose-quote-flat-24x24.png | Bin 0 -> 1519 bytes .../tb-compose-quote-high-24x24.png | Bin 0 -> 1551 bytes .../tb-compose-quote-off-24x24.png | Bin 0 -> 1408 bytes .../tb-compose-save-flat-24x24.png | Bin 0 -> 1463 bytes .../tb-compose-save-high-24x24.png | Bin 0 -> 1519 bytes .../tb-compose-save-off-24x24.png | Bin 0 -> 1306 bytes .../tb-compose-security-flat-24x24.png | Bin 0 -> 1412 bytes .../tb-compose-security-high-24x24.png | Bin 0 -> 1446 bytes .../tb-compose-security-off-24x24.png | Bin 0 -> 1250 bytes .../tb-compose-send-flat-24x24.png | Bin 0 -> 1355 bytes .../tb-compose-send-high-24x24.png | Bin 0 -> 1399 bytes .../tb-compose-send-off-24x24.png | Bin 0 -> 1171 bytes .../tb-compose-spell-flat-24x24.png | Bin 0 -> 960 bytes .../tb-compose-spell-high-24x24.png | Bin 0 -> 955 bytes .../tb-compose-spell-off-24x24.png | Bin 0 -> 927 bytes .../tb-mail-addressbook-flat-24x24.png | Bin 0 -> 1442 bytes .../tb-mail-addressbook-high-24x24.png | Bin 0 -> 1506 bytes .../tb-mail-addressbook-off-24x24.png | Bin 0 -> 1272 bytes .../tb-mail-delete-flat-24x24.png | Bin 0 -> 1424 bytes .../tb-mail-delete-high-24x24.png | Bin 0 -> 1418 bytes .../tb-mail-delete-off-24x24.png | Bin 0 -> 1433 bytes .../tb-mail-file-flat-24x24.png | Bin 0 -> 1496 bytes .../tb-mail-file-high-24x24.png | Bin 0 -> 1549 bytes .../tb-mail-file-off-24x24.png | Bin 0 -> 1337 bytes .../tb-mail-forward-flat-24x24.png | Bin 0 -> 1334 bytes .../tb-mail-forward-high-24x24.png | Bin 0 -> 1365 bytes .../tb-mail-forward-off-24x24.png | Bin 0 -> 1210 bytes .../tb-mail-getmail-flat-24x24.png | Bin 0 -> 1505 bytes .../tb-mail-getmail-high-24x24.png | Bin 0 -> 1493 bytes .../tb-mail-getmail-off-24x24.png | Bin 0 -> 1391 bytes .../tb-mail-junk-flat-24x24.png | Bin 0 -> 1592 bytes .../tb-mail-junk-high-24x24.png | Bin 0 -> 1637 bytes .../tb-mail-junk-off-24x24.png | Bin 0 -> 1457 bytes .../tb-mail-mark-flat-24x24.png | Bin 0 -> 1031 bytes .../tb-mail-mark-high-24x24.png | Bin 0 -> 1027 bytes .../tb-mail-mark-off-24x24.png | Bin 0 -> 977 bytes .../tb-mail-next-flat-24x24.png | Bin 0 -> 1623 bytes .../tb-mail-next-high-24x24.png | Bin 0 -> 1660 bytes .../tb-mail-next-off-24x24.png | Bin 0 -> 1496 bytes .../tb-mail-prev-flat-24x24.png | Bin 0 -> 1646 bytes .../tb-mail-prev-high-24x24.png | Bin 0 -> 1699 bytes .../tb-mail-prev-off-24x24.png | Bin 0 -> 1543 bytes .../tb-mail-print-flat-24x24.png | Bin 0 -> 1497 bytes .../tb-mail-print-high-24x24.png | Bin 0 -> 1584 bytes .../tb-mail-print-off-24x24.png | Bin 0 -> 1450 bytes .../tb-mail-reply-flat-24x24.png | Bin 0 -> 1358 bytes .../tb-mail-reply-high-24x24.png | Bin 0 -> 1396 bytes .../tb-mail-reply-off-24x24.png | Bin 0 -> 1229 bytes .../tb-mail-replyall-flat-24x24.png | Bin 0 -> 1328 bytes .../tb-mail-replyall-high-24x24.png | Bin 0 -> 1341 bytes .../tb-mail-replyall-off-24x24.png | Bin 0 -> 1213 bytes .../tb-mail-stop-flat-24x24.png | Bin 0 -> 1580 bytes .../tb-mail-stop-high-24x24.png | Bin 0 -> 1641 bytes .../tb-mail-stop-off-24x24.png | Bin 0 -> 1426 bytes .../tb-mail-write-flat-24x24.png | Bin 0 -> 1538 bytes .../tb-mail-write-high-24x24.png | Bin 0 -> 1591 bytes .../tb-mail-write-off-24x24.png | Bin 0 -> 1424 bytes UI/WebServerResources/tbtb_addressbook.png | Bin 0 -> 2096 bytes UI/WebServerResources/tbtb_anais.png | Bin 0 -> 966 bytes UI/WebServerResources/tbtb_compose.png | Bin 0 -> 1883 bytes .../tbtb_compose_addressbook_30x30.png | Bin 0 -> 2096 bytes .../tbtb_compose_attach_30x30.png | Bin 0 -> 2324 bytes .../tbtb_compose_clip_30x30.png | Bin 0 -> 1844 bytes .../tbtb_compose_cut_30x30.png | Bin 0 -> 2064 bytes .../tbtb_compose_dup_30x30.png | Bin 0 -> 1698 bytes .../tbtb_compose_file_30x30.png | Bin 0 -> 1927 bytes .../tbtb_compose_lock_30x30.png | Bin 0 -> 1726 bytes .../tbtb_compose_quote_30x30.png | Bin 0 -> 2030 bytes .../tbtb_compose_send_30x30.png | Bin 0 -> 1538 bytes .../tbtb_compose_spell_30x30.png | Bin 0 -> 1913 bytes UI/WebServerResources/tbtb_delete.png | Bin 0 -> 1877 bytes UI/WebServerResources/tbtb_deletedoc.png | Bin 0 -> 2038 bytes UI/WebServerResources/tbtb_filetofolder.png | Bin 0 -> 1927 bytes UI/WebServerResources/tbtb_folderadd.png | Bin 0 -> 2004 bytes UI/WebServerResources/tbtb_folderdel.png | Bin 0 -> 2158 bytes UI/WebServerResources/tbtb_forward.png | Bin 0 -> 1733 bytes UI/WebServerResources/tbtb_getmail.png | Bin 0 -> 2189 bytes UI/WebServerResources/tbtb_next.png | Bin 0 -> 2279 bytes UI/WebServerResources/tbtb_previous.png | Bin 0 -> 2257 bytes UI/WebServerResources/tbtb_print.png | Bin 0 -> 1720 bytes UI/WebServerResources/tbtb_reply.png | Bin 0 -> 1771 bytes UI/WebServerResources/tbtb_replyall.png | Bin 0 -> 1842 bytes UI/WebServerResources/tbtb_search.png | Bin 0 -> 1665 bytes UI/WebServerResources/tbtb_trash.png | Bin 0 -> 2234 bytes UI/WebServerResources/tbtv_account_17x17.gif | Bin 0 -> 1077 bytes UI/WebServerResources/tbtv_corner_17x17.gif | Bin 0 -> 80 bytes .../tbtv_corner_minus_17x17.gif | Bin 0 -> 121 bytes .../tbtv_corner_plus_17x17.gif | Bin 0 -> 125 bytes UI/WebServerResources/tbtv_drafts_17x17.gif | Bin 0 -> 1084 bytes UI/WebServerResources/tbtv_inbox_17x17.gif | Bin 0 -> 1093 bytes .../tbtv_junction2_17x17.gif | Bin 0 -> 82 bytes UI/WebServerResources/tbtv_junction_17x17.gif | Bin 0 -> 81 bytes .../tbtv_leaf_corner_17x17.gif | Bin 0 -> 602 bytes UI/WebServerResources/tbtv_line_17x17.gif | Bin 0 -> 80 bytes UI/WebServerResources/tbtv_minus_17x17.gif | Bin 0 -> 122 bytes UI/WebServerResources/tbtv_plus_17x17.gif | Bin 0 -> 127 bytes UI/WebServerResources/tbtv_sent_17x17.gif | Bin 0 -> 654 bytes UI/WebServerResources/tbtv_trash_17x17.gif | Bin 0 -> 1119 bytes .../title_attachment_14x14.png | Bin 0 -> 430 bytes UI/WebServerResources/title_config.png | Bin 0 -> 250 bytes UI/WebServerResources/title_junk.png | Bin 0 -> 440 bytes UI/WebServerResources/title_read_14x14.png | Bin 0 -> 467 bytes .../title_sortdown_12x12.png | Bin 0 -> 256 bytes UI/WebServerResources/title_sortup_12x12.png | Bin 0 -> 252 bytes UI/WebServerResources/title_thread.png | Bin 0 -> 493 bytes UI/WebServerResources/uix.css | 245 + UI/WebServerResources/upward_sorted.gif | Bin 0 -> 117 bytes UI/common.make | 48 + Version | 6 + configure | 418 + fhsbundle.make | 35 + fhslib.make | 61 + fhstool.make | 26 + 965 files changed, 99196 insertions(+) create mode 100644 ChangeLog create mode 100644 GNUmakefile create mode 100644 Main/ChangeLog create mode 100644 Main/GNUmakefile create mode 100644 Main/GNUmakefile.preamble create mode 100644 Main/MainUIProduct.m create mode 100644 Main/README create mode 100644 Main/SOGo.m create mode 100644 Main/SOGoProductLoader.h create mode 100644 Main/SOGoProductLoader.m create mode 100644 Main/Version create mode 100644 Main/common.h create mode 100644 Main/fhs.make create mode 100644 Main/sogod.m create mode 100644 Misc/WebUI/Application.h create mode 100644 Misc/WebUI/Application.m create mode 100644 Misc/WebUI/COPYING create mode 100644 Misc/WebUI/COPYRIGHT create mode 100644 Misc/WebUI/ChangeLog create mode 100644 Misc/WebUI/DirectAction.h create mode 100644 Misc/WebUI/DirectAction.m create mode 100644 Misc/WebUI/English.lproj/InfoPlist.strings create mode 100644 Misc/WebUI/GNUmakefile create mode 100644 Misc/WebUI/GNUmakefile.preamble create mode 100644 Misc/WebUI/Info.plist create mode 100644 Misc/WebUI/Lori.icns create mode 100644 Misc/WebUI/NGExtensions/GNUmakefile create mode 100644 Misc/WebUI/NGExtensions/NGLogging/ChangeLog create mode 100644 Misc/WebUI/NGExtensions/NGLogging/GNUmakefile create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.h create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.m create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.h create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.m create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.h create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.m create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.h create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.m create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogger.h create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogger.m create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NGLogging.h create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.h create mode 100644 Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.m create mode 100644 Misc/WebUI/NOTES create mode 100644 Misc/WebUI/PROJECTLEAD create mode 100644 Misc/WebUI/README create mode 100644 Misc/WebUI/Session.h create mode 100644 Misc/WebUI/Session.m create mode 100644 Misc/WebUI/TODO create mode 100644 Misc/WebUI/Version create mode 100644 Misc/WebUI/WebServerResources/favicon.ico create mode 100644 Misc/WebUI/WebUI.xcode/project.pbxproj create mode 100644 Misc/WebUI/WebUI_Prefix.pch create mode 100644 Misc/WebUI/WebUI_main.m create mode 100644 Misc/WebUI/common.h create mode 100644 Misc/WebUI/version.plist create mode 100644 Misc/WebUI/wox-cheat-sheet.txt create mode 100644 Misc/ZideStore/UI-X/ChangeLog create mode 100644 Misc/ZideStore/UI-X/Common/CommonUIProduct.m create mode 100644 Misc/ZideStore/UI-X/Common/GNUmakefile create mode 100644 Misc/ZideStore/UI-X/Common/GNUmakefile.postamble create mode 100644 Misc/ZideStore/UI-X/Common/GNUmakefile.preamble create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppFrame.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppFrame.wox create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppHeader.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppHeader.wox create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppNavView.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppNavView.wox create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppNavigation.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxAppNavigation.wox create mode 100644 Misc/ZideStore/UI-X/Common/UIxComponent.h create mode 100644 Misc/ZideStore/UI-X/Common/UIxComponent.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxElemBuilder.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxPageFrame.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxPageFrame.wox create mode 100644 Misc/ZideStore/UI-X/Common/UIxTabItem.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxTabView.h create mode 100644 Misc/ZideStore/UI-X/Common/UIxTabView.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxWinClose.m create mode 100644 Misc/ZideStore/UI-X/Common/UIxWinClose.wox create mode 100644 Misc/ZideStore/UI-X/Common/Version create mode 100644 Misc/ZideStore/UI-X/Common/bundle-info.plist create mode 100644 Misc/ZideStore/UI-X/Common/calendar.css create mode 100644 Misc/ZideStore/UI-X/Common/common.h create mode 100755 Misc/ZideStore/UI-X/Common/images/OGoLogo.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_botleft.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_botright.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_bottom.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_left.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_right.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_top.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_topleft.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/box_topright.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/closewindow.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/corner_right.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/line_left.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/line_right.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/line_stretch.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/menu_logo_top.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/tab_.gif create mode 100644 Misc/ZideStore/UI-X/Common/images/tab_selected.gif create mode 100644 Misc/ZideStore/UI-X/Common/product.plist create mode 100644 Misc/ZideStore/UI-X/Common/zidestoreui.css create mode 100644 Misc/ZideStore/UI-X/GNUmakefile create mode 100644 Misc/ZideStore/UI-X/Scheduler/COPYING create mode 100644 Misc/ZideStore/UI-X/Scheduler/COPYRIGHT create mode 100644 Misc/ZideStore/UI-X/Scheduler/GNUmakefile create mode 100644 Misc/ZideStore/UI-X/Scheduler/GNUmakefile.postamble create mode 100644 Misc/ZideStore/UI-X/Scheduler/GNUmakefile.preamble create mode 100644 Misc/ZideStore/UI-X/Scheduler/NOTES create mode 100644 Misc/ZideStore/UI-X/Scheduler/SchedulerUIProduct.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAppointmentFormatter.h create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAppointmentFormatter.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAppointmentView.h create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAppointmentView.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAppointmentView.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAptTableView.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxAptTableView.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalBackForthNavView.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalBackForthNavView.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalDateLabel.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalDateLabel.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalMonthOverview.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalMonthOverview.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalMonthView.h create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalMonthView.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalSelectTab.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalSelectTab.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalView.h create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalView.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalWeekOverview.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalWeekOverview.wox create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalWeekView.h create mode 100644 Misc/ZideStore/UI-X/Scheduler/UIxCalWeekView.m create mode 100644 Misc/ZideStore/UI-X/Scheduler/Version create mode 100644 Misc/ZideStore/UI-X/Scheduler/bundle-info.plist create mode 100644 Misc/ZideStore/UI-X/Scheduler/common.h create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/icon_apt_chart.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/icon_apt_chart_inactive.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/icon_apt_column_view.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/icon_apt_list.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/icon_apt_list_inactive.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/icon_apt_overview.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/icon_apt_overview_inactive.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/next_week.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/images/previous_week.gif create mode 100644 Misc/ZideStore/UI-X/Scheduler/product.plist create mode 100755 Misc/db/scripts/create_user_tables.py create mode 100644 Misc/db/tests/helge/NOTES create mode 100755 Misc/db/tests/helge/PyGreSQL-samples/advanced.py create mode 100755 Misc/db/tests/helge/PyGreSQL-samples/basics.py create mode 100755 Misc/db/tests/helge/PyGreSQL-samples/func.py create mode 100755 Misc/db/tests/helge/PyGreSQL-samples/syscat.py create mode 100755 Misc/db/tests/helge/chkfolderinfoperf.py create mode 100755 Misc/db/tests/helge/chkhugeperf.py create mode 100755 Misc/db/tests/helge/fill_hugeperf.py create mode 100755 Misc/db/tests/helge/fillfolderinfo.py create mode 100644 Misc/db/tests/helge/laurent-trigger.psql create mode 100755 Misc/db/tests/helge/makedb.py create mode 100755 Misc/db/tests/helge/maketables.py create mode 100755 Misc/db/tests/helge/makeusers.py create mode 100644 Misc/db/tests/helge/scale/NOTES.txt create mode 100755 Misc/db/tests/helge/scale/createapts.py create mode 100755 Misc/db/tests/helge/scale/createfolders.py create mode 100755 Misc/db/tests/helge/scale/createindexes.py create mode 100644 Misc/db/tests/helge/scale/makeidx1-200.psql create mode 100644 Misc/db/tests/helge/scale/user1.sql create mode 100644 Misc/db/tests/znek/GNUmakefile create mode 100644 Misc/db/tests/znek/GNUmakefile.preamble create mode 100644 Misc/db/tests/znek/NSArray+random.h create mode 100644 Misc/db/tests/znek/NSArray+random.m create mode 100644 Misc/db/tests/znek/connection.plist create mode 100644 Misc/db/tests/znek/inserts.eomodel create mode 100644 Misc/db/tests/znek/inserts.m create mode 100644 Misc/db/tests/znek/lmail.m create mode 100644 Misc/db/tests/znek/lpe.m create mode 100644 Misc/db/tests/znek/pfinserts.m create mode 100644 Misc/db/tests/znek/tests.xcode/project.pbxproj create mode 100644 Misc/dbd/DDatabase.m create mode 100644 Misc/dbd/DDatabase.wox create mode 100644 Misc/dbd/DDatabaseManager.m create mode 100644 Misc/dbd/DDatabaseManager.wox create mode 100644 Misc/dbd/DHostView.m create mode 100644 Misc/dbd/DHostView.wox create mode 100644 Misc/dbd/DSoAuthenticator.h create mode 100644 Misc/dbd/DSoAuthenticator.m create mode 100644 Misc/dbd/DSoDatabase.h create mode 100644 Misc/dbd/DSoDatabase.m create mode 100644 Misc/dbd/DSoDatabaseManager.h create mode 100644 Misc/dbd/DSoDatabaseManager.m create mode 100644 Misc/dbd/DSoField.h create mode 100644 Misc/dbd/DSoField.m create mode 100644 Misc/dbd/DSoHost.h create mode 100644 Misc/dbd/DSoHost.m create mode 100644 Misc/dbd/DSoObject.h create mode 100644 Misc/dbd/DSoObject.m create mode 100644 Misc/dbd/DSoTable.h create mode 100644 Misc/dbd/DSoTable.m create mode 100644 Misc/dbd/DSoUser.h create mode 100644 Misc/dbd/DSoUser.m create mode 100644 Misc/dbd/DSoUserManager.h create mode 100644 Misc/dbd/DSoUserManager.m create mode 100644 Misc/dbd/DTable.m create mode 100644 Misc/dbd/DTable.wox create mode 100644 Misc/dbd/Frame.m create mode 100644 Misc/dbd/Frame.wox create mode 100644 Misc/dbd/GNUmakefile create mode 100644 Misc/dbd/MainPage.m create mode 100644 Misc/dbd/MainPage.wox create mode 100644 Misc/dbd/README create mode 100644 Misc/dbd/Version create mode 100644 Misc/dbd/common.h create mode 100644 Misc/dbd/dbd.css create mode 100644 Misc/dbd/dbd.m create mode 100644 Misc/dbd/product.plist create mode 100644 OGoContentStore/COPYING create mode 100644 OGoContentStore/COPYRIGHT create mode 100644 OGoContentStore/ChangeLog create mode 100644 OGoContentStore/GNUmakefile create mode 100644 OGoContentStore/GNUmakefile.postamble create mode 100644 OGoContentStore/GNUmakefile.preamble create mode 100644 OGoContentStore/OCSContactFieldExtractor.m create mode 100644 OGoContentStore/OCSiCalFieldExtractor.h create mode 100644 OGoContentStore/OCSiCalFieldExtractor.m create mode 100644 OGoContentStore/OGoContentStore.xcode/project.pbxproj create mode 100644 OGoContentStore/OGoContentStore.xcodeproj/project.pbxproj create mode 100644 OGoContentStore/README create mode 100644 OGoContentStore/Version create mode 100644 OGoContentStore/appointment.ocs create mode 100644 OGoContentStore/common.h create mode 100644 OGoContentStore/contact.ocs create mode 100644 OGoContentStore/iCalEntityObject+OCS.h create mode 100644 OGoContentStore/iCalEntityObject+OCS.m create mode 100644 OGoContentStore/iCalRepeatableEntityObject+OCS.h create mode 100644 OGoContentStore/iCalRepeatableEntityObject+OCS.m create mode 100644 OGoContentStore/misc/iNetOrgPerson.txt create mode 100644 OGoContentStore/misc/icaltest.ical create mode 100644 OGoContentStore/misc/test1/GNUmakefile create mode 100644 OGoContentStore/misc/test1/common.h create mode 100644 OGoContentStore/misc/test1/test1.m create mode 100644 OGoContentStore/sql/README create mode 100644 OGoContentStore/sql/appointment-create.psql create mode 100644 OGoContentStore/sql/folderinfo-create.psql create mode 100644 OGoContentStore/sql/folderinfo-create.sqlite create mode 100644 OGoContentStore/sql/foldertablecreate-helge-privcal.psql create mode 100644 OGoContentStore/sql/foldertablecreate-helge-privcal.sqlite create mode 100644 OGoContentStore/sql/foldertablecreate-root.psql create mode 100644 OGoContentStore/sql/foldertablecreate-test-contacts.psql create mode 100755 OGoContentStore/sql/generate-folderinfo-sql-for-users-sqlite.sh create mode 100755 OGoContentStore/sql/generate-folderinfo-sql-for-users-sqlite1table.sh create mode 100755 OGoContentStore/sql/generate-folderinfo-sql-for-users.sh create mode 100644 OGoContentStore/sql/profile-create.psql create mode 100644 OGoContentStore/sql/register-agenor-helge-privcal.psql create mode 100644 OGoContentStore/sql/register-agenor-test-contacts.psql create mode 100644 OGoContentStore/sql/testapt-agenor-helge-privcal.psql create mode 100644 OGoContentStore/sql/testapt-hh.psql create mode 100644 OGoContentStore/sql/testcontact-agenor-test-contact.psql create mode 100644 OGoContentStore/test_quick_extract.m create mode 100644 Protocols/GNUmakefile create mode 100644 Protocols/common.make create mode 100644 Protocols/iCalHTTP/COPYING create mode 100644 Protocols/iCalHTTP/COPYRIGHT create mode 100644 Protocols/iCalHTTP/ChangeLog create mode 100644 Protocols/iCalHTTP/GNUmakefile create mode 100644 Protocols/iCalHTTP/README create mode 100644 Protocols/iCalHTTP/SOGoICalFileFetch.m create mode 100644 Protocols/iCalHTTP/SOGoICalFilePublish.m create mode 100644 Protocols/iCalHTTP/SOGoICalHTTPHandler.h create mode 100644 Protocols/iCalHTTP/SOGoICalHTTPHandler.m create mode 100644 Protocols/iCalHTTP/Version create mode 100644 Protocols/iCalHTTP/bundle-info.plist create mode 100644 Protocols/iCalHTTP/common.h create mode 100644 Protocols/iCalHTTP/iCalHTTPProduct.m create mode 100644 Protocols/iCalHTTP/product.plist create mode 100644 README create mode 100644 SOGo.conf create mode 100644 SOGo.xcode/helge.pbxuser create mode 100644 SOGo.xcode/project.pbxproj create mode 100644 SOGo.xcodeproj/project.pbxproj create mode 100644 SoObjects/Appointments/ChangeLog create mode 100644 SoObjects/Appointments/GNUmakefile create mode 100644 SoObjects/Appointments/Product.m create mode 100644 SoObjects/Appointments/SOGoAppointmentFolder.h create mode 100644 SoObjects/Appointments/SOGoAppointmentFolder.m create mode 100644 SoObjects/Appointments/SOGoAppointmentObject.h create mode 100644 SoObjects/Appointments/SOGoAppointmentObject.m create mode 100644 SoObjects/Appointments/SOGoAptMailDeletion.m create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishDeletion.wo/SOGoAptMailEnglishDeletion.html create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishDeletion.wo/SOGoAptMailEnglishDeletion.wod create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishInvitation.wo/SOGoAptMailEnglishInvitation.html create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishInvitation.wo/SOGoAptMailEnglishInvitation.wod create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishRemoval.wo/SOGoAptMailEnglishRemoval.html create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishRemoval.wo/SOGoAptMailEnglishRemoval.wod create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.html create mode 100644 SoObjects/Appointments/SOGoAptMailEnglishUpdate.wo/SOGoAptMailEnglishUpdate.wod create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchDeletion.wo/SOGoAptMailFrenchDeletion.html create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchDeletion.wo/SOGoAptMailFrenchDeletion.wod create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchInvitation.wo/SOGoAptMailFrenchInvitation.html create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchInvitation.wo/SOGoAptMailFrenchInvitation.wod create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchRemoval.wo/SOGoAptMailFrenchRemoval.html create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchRemoval.wo/SOGoAptMailFrenchRemoval.wod create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.html create mode 100644 SoObjects/Appointments/SOGoAptMailFrenchUpdate.wo/SOGoAptMailFrenchUpdate.wod create mode 100644 SoObjects/Appointments/SOGoAptMailInvitation.m create mode 100644 SoObjects/Appointments/SOGoAptMailNotification.h create mode 100644 SoObjects/Appointments/SOGoAptMailNotification.m create mode 100644 SoObjects/Appointments/SOGoAptMailRemoval.m create mode 100644 SoObjects/Appointments/SOGoAptMailUpdate.m create mode 100644 SoObjects/Appointments/SOGoFreeBusyObject.h create mode 100644 SoObjects/Appointments/SOGoFreeBusyObject.m create mode 100644 SoObjects/Appointments/SOGoGroupAppointmentFolder.h create mode 100644 SoObjects/Appointments/SOGoGroupAppointmentFolder.m create mode 100644 SoObjects/Appointments/Version create mode 100644 SoObjects/Appointments/bundle-info.plist create mode 100644 SoObjects/Appointments/common.h create mode 100644 SoObjects/Appointments/product.plist create mode 100644 SoObjects/ChangeLog create mode 100644 SoObjects/Contacts/ChangeLog create mode 100644 SoObjects/Contacts/GNUmakefile create mode 100644 SoObjects/Contacts/GNUmakefile.preamble create mode 100644 SoObjects/Contacts/Product.m create mode 100644 SoObjects/Contacts/README create mode 100644 SoObjects/Contacts/SOGoContactFolder.h create mode 100644 SoObjects/Contacts/SOGoContactFolder.m create mode 100644 SoObjects/Contacts/SOGoContactObject.h create mode 100644 SoObjects/Contacts/SOGoContactObject.m create mode 100644 SoObjects/Contacts/Version create mode 100644 SoObjects/Contacts/common.h create mode 100644 SoObjects/Contacts/product.plist create mode 100644 SoObjects/GNUmakefile create mode 100644 SoObjects/Mailer/ChangeLog create mode 100644 SoObjects/Mailer/GNUmakefile create mode 100644 SoObjects/Mailer/GNUmakefile.preamble create mode 100644 SoObjects/Mailer/Product.m create mode 100644 SoObjects/Mailer/README create mode 100644 SoObjects/Mailer/SOGoCalendarMailBodyPart.m create mode 100644 SoObjects/Mailer/SOGoDraftObject.h create mode 100644 SoObjects/Mailer/SOGoDraftObject.m create mode 100644 SoObjects/Mailer/SOGoDraftsFolder.h create mode 100644 SoObjects/Mailer/SOGoDraftsFolder.m create mode 100644 SoObjects/Mailer/SOGoImageMailBodyPart.m create mode 100644 SoObjects/Mailer/SOGoMailAccount.h create mode 100644 SoObjects/Mailer/SOGoMailAccount.m create mode 100644 SoObjects/Mailer/SOGoMailAccounts.h create mode 100644 SoObjects/Mailer/SOGoMailAccounts.m create mode 100644 SoObjects/Mailer/SOGoMailBaseObject.h create mode 100644 SoObjects/Mailer/SOGoMailBaseObject.m create mode 100644 SoObjects/Mailer/SOGoMailBodyPart.h create mode 100644 SoObjects/Mailer/SOGoMailBodyPart.m create mode 100644 SoObjects/Mailer/SOGoMailFolder.h create mode 100644 SoObjects/Mailer/SOGoMailFolder.m create mode 100644 SoObjects/Mailer/SOGoMailFolderDataSource.h create mode 100644 SoObjects/Mailer/SOGoMailFolderDataSource.m create mode 100644 SoObjects/Mailer/SOGoMailIdentity.h create mode 100644 SoObjects/Mailer/SOGoMailIdentity.m create mode 100644 SoObjects/Mailer/SOGoMailManager.h create mode 100644 SoObjects/Mailer/SOGoMailManager.m create mode 100644 SoObjects/Mailer/SOGoMailObject.h create mode 100644 SoObjects/Mailer/SOGoMailObject.m create mode 100644 SoObjects/Mailer/SOGoMessageMailBodyPart.m create mode 100644 SoObjects/Mailer/SOGoSharedInboxFolder.h create mode 100644 SoObjects/Mailer/SOGoSharedInboxFolder.m create mode 100644 SoObjects/Mailer/SOGoSharedMailAccount.h create mode 100644 SoObjects/Mailer/SOGoSharedMailAccount.m create mode 100644 SoObjects/Mailer/SOGoTrashFolder.h create mode 100644 SoObjects/Mailer/SOGoTrashFolder.m create mode 100644 SoObjects/Mailer/SOGoUser+Mail.h create mode 100644 SoObjects/Mailer/SOGoUser+Mail.m create mode 100644 SoObjects/Mailer/SOGoVCardMailBodyPart.m create mode 100644 SoObjects/Mailer/Version create mode 100644 SoObjects/Mailer/common.h create mode 100644 SoObjects/Mailer/product.plist create mode 100644 SoObjects/README create mode 100644 SoObjects/SOGo/AgenorUserDefaults.h create mode 100644 SoObjects/SOGo/AgenorUserDefaults.m create mode 100644 SoObjects/SOGo/AgenorUserManager.h create mode 100644 SoObjects/SOGo/AgenorUserManager.m create mode 100644 SoObjects/SOGo/ChangeLog create mode 100644 SoObjects/SOGo/GNUmakefile create mode 100644 SoObjects/SOGo/GNUmakefile.preamble create mode 100644 SoObjects/SOGo/NSObject+AptComparison.h create mode 100644 SoObjects/SOGo/NSObject+AptComparison.m create mode 100644 SoObjects/SOGo/NSString+iCal.h create mode 100644 SoObjects/SOGo/README create mode 100644 SoObjects/SOGo/SOGoAppointment.h create mode 100644 SoObjects/SOGo/SOGoAppointment.m create mode 100644 SoObjects/SOGo/SOGoAppointmentICalRenderer.h create mode 100644 SoObjects/SOGo/SOGoAppointmentICalRenderer.m create mode 100644 SoObjects/SOGo/SOGoAuthenticator.h create mode 100644 SoObjects/SOGo/SOGoAuthenticator.m create mode 100644 SoObjects/SOGo/SOGoContentObject.h create mode 100644 SoObjects/SOGo/SOGoContentObject.m create mode 100644 SoObjects/SOGo/SOGoCustomGroupFolder.h create mode 100644 SoObjects/SOGo/SOGoCustomGroupFolder.m create mode 100644 SoObjects/SOGo/SOGoFolder.h create mode 100644 SoObjects/SOGo/SOGoFolder.m create mode 100644 SoObjects/SOGo/SOGoGroupFolder.h create mode 100644 SoObjects/SOGo/SOGoGroupFolder.m create mode 100644 SoObjects/SOGo/SOGoGroupsFolder.h create mode 100644 SoObjects/SOGo/SOGoGroupsFolder.m create mode 100644 SoObjects/SOGo/SOGoLRUCache.h create mode 100644 SoObjects/SOGo/SOGoLRUCache.m create mode 100644 SoObjects/SOGo/SOGoObject.h create mode 100644 SoObjects/SOGo/SOGoObject.m create mode 100644 SoObjects/SOGo/SOGoUser.h create mode 100644 SoObjects/SOGo/SOGoUser.m create mode 100644 SoObjects/SOGo/SOGoUserFolder.h create mode 100644 SoObjects/SOGo/SOGoUserFolder.m create mode 100644 SoObjects/SOGo/Version create mode 100644 SoObjects/SOGo/WOContext+Agenor.h create mode 100644 SoObjects/SOGo/WOContext+Agenor.m create mode 100644 SoObjects/SOGo/agenor_defaults.m create mode 100644 SoObjects/SOGo/agenor_email2uid.m create mode 100644 SoObjects/SOGo/agenor_emails4uid.m create mode 100644 SoObjects/SOGo/agenor_shares4uid.m create mode 100644 SoObjects/SOGo/common.h create mode 100644 SoObjects/Sieve/ChangeLog create mode 100644 SoObjects/Sieve/GNUmakefile create mode 100644 SoObjects/Sieve/GNUmakefile.preamble create mode 100644 SoObjects/Sieve/Product.m create mode 100644 SoObjects/Sieve/README create mode 100644 SoObjects/Sieve/SOGoSieveBaseObject.h create mode 100644 SoObjects/Sieve/SOGoSieveBaseObject.m create mode 100644 SoObjects/Sieve/SOGoSieveScriptObject.h create mode 100644 SoObjects/Sieve/SOGoSieveScriptObject.m create mode 100644 SoObjects/Sieve/SOGoSieveScriptsFolder.h create mode 100644 SoObjects/Sieve/SOGoSieveScriptsFolder.m create mode 100644 SoObjects/Sieve/Version create mode 100644 SoObjects/Sieve/common.h create mode 100644 SoObjects/Sieve/product.plist create mode 100644 SoObjects/common.make create mode 100644 UI/ChangeLog create mode 100644 UI/Common/ChangeLog create mode 100644 UI/Common/CommonUIProduct.m create mode 100644 UI/Common/English.lproj/Localizable.strings create mode 100644 UI/Common/French.lproj/Localizable.strings create mode 100644 UI/Common/GNUmakefile create mode 100644 UI/Common/GNUmakefile.postamble create mode 100644 UI/Common/GNUmakefile.preamble create mode 100644 UI/Common/UIxAppNavView.m create mode 100644 UI/Common/UIxElemBuilder.m create mode 100644 UI/Common/UIxPageFrame.m create mode 100644 UI/Common/UIxPrintPageFrame.m create mode 100644 UI/Common/UIxSortButton.m create mode 100644 UI/Common/UIxTabItem.m create mode 100644 UI/Common/UIxTabView.h create mode 100644 UI/Common/UIxTabView.m create mode 100644 UI/Common/UIxWinClose.m create mode 100644 UI/Common/Version create mode 100644 UI/Common/bundle-info.plist create mode 100644 UI/Common/common.h create mode 100644 UI/Common/product.plist create mode 100644 UI/Contacts/COPYING create mode 100644 UI/Contacts/COPYRIGHT create mode 100644 UI/Contacts/ChangeLog create mode 100644 UI/Contacts/ContactsUIProduct.m create mode 100644 UI/Contacts/English.lproj/Localizable.strings create mode 100644 UI/Contacts/French.lproj/Localizable.strings create mode 100644 UI/Contacts/GNUmakefile create mode 100644 UI/Contacts/GNUmakefile.postamble create mode 100644 UI/Contacts/GNUmakefile.preamble create mode 100644 UI/Contacts/NOTES create mode 100644 UI/Contacts/UIxContactEditor.m create mode 100644 UI/Contacts/UIxContactEditorBase.h create mode 100644 UI/Contacts/UIxContactEditorBase.m create mode 100644 UI/Contacts/UIxContactSelector.m create mode 100644 UI/Contacts/UIxContactView.m create mode 100644 UI/Contacts/UIxContactsListView.m create mode 100644 UI/Contacts/UIxContactsListViewBase.h create mode 100644 UI/Contacts/UIxContactsListViewBase.m create mode 100644 UI/Contacts/UIxContactsSelectionView.m create mode 100644 UI/Contacts/Version create mode 100644 UI/Contacts/bundle-info.plist create mode 100644 UI/Contacts/common.h create mode 100644 UI/Contacts/product.plist create mode 100644 UI/GNUmakefile create mode 100644 UI/MailPartViewers/COPYING create mode 100644 UI/MailPartViewers/COPYRIGHT create mode 100644 UI/MailPartViewers/ChangeLog create mode 100644 UI/MailPartViewers/English.lproj/Localizable.strings create mode 100644 UI/MailPartViewers/French.lproj/Localizable.strings create mode 100644 UI/MailPartViewers/GNUmakefile create mode 100644 UI/MailPartViewers/MailPartViewersProduct.m create mode 100644 UI/MailPartViewers/README.txt create mode 100644 UI/MailPartViewers/UIxKolabPartContactViewer.m create mode 100644 UI/MailPartViewers/UIxKolabPartEventViewer.m create mode 100644 UI/MailPartViewers/UIxKolabPartTaskViewer.m create mode 100644 UI/MailPartViewers/UIxKolabPartViewer.h create mode 100644 UI/MailPartViewers/UIxKolabPartViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartAlternativeViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartHTMLViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartICalAction.m create mode 100644 UI/MailPartViewers/UIxMailPartICalViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartImageViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartLinkViewer.h create mode 100644 UI/MailPartViewers/UIxMailPartLinkViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartMessageViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartMixedViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartTextViewer.m create mode 100644 UI/MailPartViewers/UIxMailPartViewer.h create mode 100644 UI/MailPartViewers/UIxMailPartViewer.m create mode 100644 UI/MailPartViewers/UIxMailRenderingContext.h create mode 100644 UI/MailPartViewers/UIxMailRenderingContext.m create mode 100644 UI/MailPartViewers/UIxMailSizeFormatter.h create mode 100644 UI/MailPartViewers/UIxMailSizeFormatter.m create mode 100644 UI/MailPartViewers/Version create mode 100644 UI/MailPartViewers/common.h create mode 100644 UI/MailPartViewers/product.plist create mode 100644 UI/MailerUI/COPYING create mode 100644 UI/MailerUI/COPYRIGHT create mode 100644 UI/MailerUI/ChangeLog create mode 100644 UI/MailerUI/English.lproj/Localizable.strings create mode 100644 UI/MailerUI/French.lproj/Localizable.strings create mode 100644 UI/MailerUI/GNUmakefile create mode 100644 UI/MailerUI/GNUmakefile.postamble create mode 100644 UI/MailerUI/GNUmakefile.preamble create mode 100644 UI/MailerUI/Images/COPYING create mode 100644 UI/MailerUI/Images/LICENSE-thunderbird.txt create mode 100644 UI/MailerUI/Images/treeview_corner.gif create mode 100644 UI/MailerUI/Images/treeview_corner_minus.gif create mode 100644 UI/MailerUI/Images/treeview_corner_plus.gif create mode 100644 UI/MailerUI/Images/treeview_junction.gif create mode 100644 UI/MailerUI/Images/treeview_leaf.gif create mode 100644 UI/MailerUI/Images/treeview_leaf_corner.gif create mode 100644 UI/MailerUI/Images/treeview_line.gif create mode 100644 UI/MailerUI/Images/treeview_minus.gif create mode 100644 UI/MailerUI/Images/treeview_plus.gif create mode 100644 UI/MailerUI/Images/treeview_space.gif create mode 100644 UI/MailerUI/MailerUIProduct.m create mode 100644 UI/MailerUI/NOTES create mode 100644 UI/MailerUI/README create mode 100644 UI/MailerUI/Toolbars/SOGoDraftObject.toolbar create mode 100644 UI/MailerUI/Toolbars/SOGoMailAccount.toolbar create mode 100644 UI/MailerUI/Toolbars/SOGoMailFolder.toolbar create mode 100644 UI/MailerUI/Toolbars/SOGoMailObject.toolbar create mode 100644 UI/MailerUI/Toolbars/SOGoTrashFolder.toolbar create mode 100644 UI/MailerUI/UIxEnvelopeAddressFormatter.m create mode 100644 UI/MailerUI/UIxFilterList.m create mode 100644 UI/MailerUI/UIxMailAccountView.m create mode 100644 UI/MailerUI/UIxMailAccountsView.m create mode 100644 UI/MailerUI/UIxMailAddressbook.m create mode 100644 UI/MailerUI/UIxMailEditor.m create mode 100644 UI/MailerUI/UIxMailEditorAction.h create mode 100644 UI/MailerUI/UIxMailEditorAction.m create mode 100644 UI/MailerUI/UIxMailEditorAttach.m create mode 100644 UI/MailerUI/UIxMailFilterPanel.m create mode 100644 UI/MailerUI/UIxMailFolderACLEditor.m create mode 100644 UI/MailerUI/UIxMailFormatter.h create mode 100644 UI/MailerUI/UIxMailFormatter.m create mode 100644 UI/MailerUI/UIxMailForwardAction.m create mode 100644 UI/MailerUI/UIxMailListView.m create mode 100644 UI/MailerUI/UIxMailMainFrame.m create mode 100644 UI/MailerUI/UIxMailMoveToPopUp.m create mode 100644 UI/MailerUI/UIxMailReplyAction.m create mode 100644 UI/MailerUI/UIxMailSortableTableHeader.m create mode 100644 UI/MailerUI/UIxMailToSelection.m create mode 100644 UI/MailerUI/UIxMailToolbar.m create mode 100644 UI/MailerUI/UIxMailTree.m create mode 100644 UI/MailerUI/UIxMailTreeBlock.h create mode 100644 UI/MailerUI/UIxMailTreeBlock.m create mode 100644 UI/MailerUI/UIxMailView.m create mode 100644 UI/MailerUI/UIxMailWindowCloser.m create mode 100644 UI/MailerUI/UIxSieveEditor.m create mode 100644 UI/MailerUI/UIxSubjectFormatter.m create mode 100644 UI/MailerUI/Version create mode 100644 UI/MailerUI/WOContext+UIxMailer.h create mode 100644 UI/MailerUI/WOContext+UIxMailer.m create mode 100644 UI/MailerUI/bundle-info.plist create mode 100644 UI/MailerUI/common.h create mode 100644 UI/MailerUI/product.plist create mode 100644 UI/MailerUI/screenshots/tbird_073_accountview.png create mode 100644 UI/MailerUI/screenshots/tbird_073_compose.png create mode 100644 UI/MailerUI/screenshots/tbird_073_mailwelcome.png create mode 100644 UI/MailerUI/screenshots/tbird_073_settings.png create mode 100644 UI/MailerUI/screenshots/tbird_073_viewer.png create mode 100644 UI/MainUI/ChangeLog create mode 100644 UI/MainUI/English.lproj/Locale create mode 100644 UI/MainUI/English.lproj/Localizable.strings create mode 100644 UI/MainUI/French.lproj/Locale create mode 100644 UI/MainUI/French.lproj/Localizable.strings create mode 100644 UI/MainUI/GNUmakefile create mode 100644 UI/MainUI/GNUmakefile.preamble create mode 100644 UI/MainUI/MainUIProduct.m create mode 100644 UI/MainUI/README create mode 100644 UI/MainUI/SOGoGroupPage.m create mode 100644 UI/MainUI/SOGoGroupPage.wox create mode 100644 UI/MainUI/SOGoGroupsPage.m create mode 100644 UI/MainUI/SOGoGroupsPage.wox create mode 100644 UI/MainUI/SOGoRootPage.m create mode 100644 UI/MainUI/SOGoRootPage.wox create mode 100644 UI/MainUI/SOGoUserHomePage.m create mode 100644 UI/MainUI/SOGoUserHomePage.wox create mode 100644 UI/MainUI/Version create mode 100644 UI/MainUI/common.h create mode 100644 UI/MainUI/homepage.js create mode 100644 UI/MainUI/product.plist create mode 100644 UI/README create mode 100644 UI/SOGoUI/ChangeLog create mode 100644 UI/SOGoUI/GNUmakefile create mode 100644 UI/SOGoUI/GNUmakefile.preamble create mode 100644 UI/SOGoUI/README create mode 100644 UI/SOGoUI/SOGoAptFormatter.h create mode 100644 UI/SOGoUI/SOGoAptFormatter.m create mode 100644 UI/SOGoUI/SOGoDateFormatter.h create mode 100644 UI/SOGoUI/SOGoDateFormatter.m create mode 100644 UI/SOGoUI/SOGoJSStringFormatter.h create mode 100644 UI/SOGoUI/SOGoJSStringFormatter.m create mode 100644 UI/SOGoUI/UIxComponent.h create mode 100644 UI/SOGoUI/UIxComponent.m create mode 100644 UI/SOGoUI/Version create mode 100644 UI/SOGoUI/WOContext+UIx.h create mode 100644 UI/SOGoUI/WOContext+UIx.m create mode 100644 UI/SOGoUI/common.h create mode 100644 UI/Scheduler/COPYING create mode 100644 UI/Scheduler/COPYRIGHT create mode 100644 UI/Scheduler/ChangeLog create mode 100644 UI/Scheduler/English.lproj/Localizable.strings create mode 100644 UI/Scheduler/English.lproj/skycalendar.html create mode 100644 UI/Scheduler/English.lproj/skycalendar.js create mode 100644 UI/Scheduler/French.lproj/Localizable.strings create mode 100644 UI/Scheduler/French.lproj/skycalendar.html create mode 100644 UI/Scheduler/French.lproj/skycalendar.js create mode 100644 UI/Scheduler/GNUmakefile create mode 100644 UI/Scheduler/GNUmakefile.postamble create mode 100644 UI/Scheduler/GNUmakefile.preamble create mode 100644 UI/Scheduler/German.lproj/Localizable.strings create mode 100644 UI/Scheduler/NOTES create mode 100644 UI/Scheduler/NSCalendarDate+UIx.h create mode 100644 UI/Scheduler/NSCalendarDate+UIx.m create mode 100644 UI/Scheduler/SOGoAppointment+UIx.h create mode 100644 UI/Scheduler/SOGoAppointment+UIx.m create mode 100644 UI/Scheduler/SchedulerUIProduct.m create mode 100644 UI/Scheduler/UIxAppointmentEditor.m create mode 100644 UI/Scheduler/UIxAppointmentPrintview.m create mode 100644 UI/Scheduler/UIxAppointmentProposal.m create mode 100644 UI/Scheduler/UIxAppointmentView.h create mode 100644 UI/Scheduler/UIxAppointmentView.m create mode 100644 UI/Scheduler/UIxAptTableView.m create mode 100644 UI/Scheduler/UIxCalBackForthNavView.m create mode 100644 UI/Scheduler/UIxCalDateLabel.m create mode 100644 UI/Scheduler/UIxCalDayChartview.m create mode 100644 UI/Scheduler/UIxCalDayListview.m create mode 100644 UI/Scheduler/UIxCalDayOverview.h create mode 100644 UI/Scheduler/UIxCalDayOverview.m create mode 100644 UI/Scheduler/UIxCalDayPrintview.m create mode 100644 UI/Scheduler/UIxCalDayView.h create mode 100644 UI/Scheduler/UIxCalDayView.m create mode 100644 UI/Scheduler/UIxCalInlineAptView.m create mode 100644 UI/Scheduler/UIxCalInlineMonthOverview.m create mode 100644 UI/Scheduler/UIxCalMonthOverview.h create mode 100644 UI/Scheduler/UIxCalMonthOverview.m create mode 100644 UI/Scheduler/UIxCalMonthPrintview.m create mode 100644 UI/Scheduler/UIxCalMonthView.h create mode 100644 UI/Scheduler/UIxCalMonthView.m create mode 100644 UI/Scheduler/UIxCalParticipationStatusView.m create mode 100644 UI/Scheduler/UIxCalScheduleOverview.m create mode 100644 UI/Scheduler/UIxCalSelectTab.m create mode 100644 UI/Scheduler/UIxCalView.h create mode 100644 UI/Scheduler/UIxCalView.m create mode 100644 UI/Scheduler/UIxCalWeekChartview.m create mode 100644 UI/Scheduler/UIxCalWeekColumnsview.m create mode 100644 UI/Scheduler/UIxCalWeekListview.m create mode 100644 UI/Scheduler/UIxCalWeekOverview.h create mode 100644 UI/Scheduler/UIxCalWeekOverview.m create mode 100644 UI/Scheduler/UIxCalWeekPrintview.m create mode 100644 UI/Scheduler/UIxCalWeekView.h create mode 100644 UI/Scheduler/UIxCalWeekView.m create mode 100644 UI/Scheduler/UIxCalYearOverview.m create mode 100644 UI/Scheduler/UIxComponent+Agenor.h create mode 100644 UI/Scheduler/UIxComponent+Agenor.m create mode 100644 UI/Scheduler/UIxDatePicker.m create mode 100644 UI/Scheduler/UIxDatePickerScript.m create mode 100644 UI/Scheduler/UIxTimeDateControl.m create mode 100644 UI/Scheduler/UIxTimeSelector.m create mode 100644 UI/Scheduler/Version create mode 100644 UI/Scheduler/bundle-info.plist create mode 100644 UI/Scheduler/common.h create mode 100644 UI/Scheduler/cycles.plist create mode 100644 UI/Scheduler/iCalPerson+UIx.h create mode 100644 UI/Scheduler/iCalPerson+UIx.m create mode 100644 UI/Scheduler/iCalRecurrenceRule+SOGo.m create mode 100644 UI/Scheduler/images/apt_icon_private.gif create mode 100644 UI/Scheduler/images/first.gif create mode 100644 UI/Scheduler/images/green_corner.gif create mode 100644 UI/Scheduler/images/icon_popupcalendar.gif create mode 100644 UI/Scheduler/images/icon_view_chart.gif create mode 100644 UI/Scheduler/images/icon_view_chart_inactive.gif create mode 100644 UI/Scheduler/images/icon_view_columns.gif create mode 100644 UI/Scheduler/images/icon_view_columns_inactive.gif create mode 100644 UI/Scheduler/images/icon_view_list.gif create mode 100644 UI/Scheduler/images/icon_view_list_inactive.gif create mode 100644 UI/Scheduler/images/icon_view_overview.gif create mode 100644 UI/Scheduler/images/icon_view_overview_inactive.gif create mode 100644 UI/Scheduler/images/invisible_space_2.gif create mode 100644 UI/Scheduler/images/last.gif create mode 100644 UI/Scheduler/images/next.gif create mode 100644 UI/Scheduler/images/next_week.gif create mode 100644 UI/Scheduler/images/previous.gif create mode 100644 UI/Scheduler/images/previous_week.gif create mode 100644 UI/Scheduler/product.plist create mode 100644 UI/Scheduler/skycalendar.html create mode 100644 UI/Scheduler/skycalendar.js create mode 100644 UI/Templates/ChangeLog create mode 100644 UI/Templates/ContactsUI/UIxContactEditor.wox create mode 100644 UI/Templates/ContactsUI/UIxContactView.wox create mode 100644 UI/Templates/ContactsUI/UIxContactsListView.wox create mode 100644 UI/Templates/GNUmakefile create mode 100644 UI/Templates/MailPartViewers/GNUmakefile create mode 100644 UI/Templates/MailPartViewers/UIxKolabPartContactViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxKolabPartEventViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxKolabPartTaskViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartAlternativeViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartHTMLViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartICalViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartImageViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartLinkViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartMessageViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartMixedViewer.wox create mode 100644 UI/Templates/MailPartViewers/UIxMailPartTextViewer.wox create mode 100644 UI/Templates/MailerUI/UIxMailAccountView.wox create mode 100644 UI/Templates/MailerUI/UIxMailAccountsView.wox create mode 100644 UI/Templates/MailerUI/UIxMailAddressbook.wox create mode 100644 UI/Templates/MailerUI/UIxMailEditor.wox create mode 100644 UI/Templates/MailerUI/UIxMailEditorAttach.wox create mode 100644 UI/Templates/MailerUI/UIxMailFilterPanel.wox create mode 100644 UI/Templates/MailerUI/UIxMailFolderACLEditor.wox create mode 100644 UI/Templates/MailerUI/UIxMailListView.wox create mode 100644 UI/Templates/MailerUI/UIxMailMainFrame.wox create mode 100644 UI/Templates/MailerUI/UIxMailMoveToPopUp.wox create mode 100644 UI/Templates/MailerUI/UIxMailPanelFrame.wox create mode 100644 UI/Templates/MailerUI/UIxMailSortableTableHeader.wox create mode 100644 UI/Templates/MailerUI/UIxMailToSelection.wox create mode 100644 UI/Templates/MailerUI/UIxMailToolbar.wox create mode 100644 UI/Templates/MailerUI/UIxMailTree.wox create mode 100644 UI/Templates/MailerUI/UIxMailView.wox create mode 100644 UI/Templates/MailerUI/UIxMailWindowCloser.wox create mode 100644 UI/Templates/UIxAppNavView.wox create mode 100644 UI/Templates/UIxAppointmentEditor.wox create mode 100644 UI/Templates/UIxAppointmentPrintview.wox create mode 100644 UI/Templates/UIxAppointmentProposal.wox create mode 100644 UI/Templates/UIxAppointmentView.wox create mode 100644 UI/Templates/UIxAptTableView.wox create mode 100644 UI/Templates/UIxCalBackForthNavView.wox create mode 100644 UI/Templates/UIxCalDateLabel.wox create mode 100644 UI/Templates/UIxCalDayChartview.wox create mode 100644 UI/Templates/UIxCalDayListview.wox create mode 100644 UI/Templates/UIxCalDayOverview.wox create mode 100644 UI/Templates/UIxCalDayPrintview.wox create mode 100644 UI/Templates/UIxCalInlineAptView.wox create mode 100644 UI/Templates/UIxCalInlineMonthOverview.wox create mode 100644 UI/Templates/UIxCalMonthOverview.wox create mode 100644 UI/Templates/UIxCalMonthPrintview.wox create mode 100644 UI/Templates/UIxCalParticipationStatusView.wox create mode 100644 UI/Templates/UIxCalScheduleOverview.wox create mode 100644 UI/Templates/UIxCalSelectTab.wox create mode 100644 UI/Templates/UIxCalWeekChartview.wox create mode 100644 UI/Templates/UIxCalWeekColumnsview.wox create mode 100644 UI/Templates/UIxCalWeekListview.wox create mode 100644 UI/Templates/UIxCalWeekOverview.wox create mode 100644 UI/Templates/UIxCalWeekPrintview.wox create mode 100644 UI/Templates/UIxCalYearOverview.wox create mode 100644 UI/Templates/UIxContactSelector.wox create mode 100644 UI/Templates/UIxContactsSelectionView.wox create mode 100644 UI/Templates/UIxDatePicker.wox create mode 100644 UI/Templates/UIxDatePickerScript.wox create mode 100644 UI/Templates/UIxFilterList.wox create mode 100644 UI/Templates/UIxPageFrame.wox create mode 100644 UI/Templates/UIxPrintPageFrame.wox create mode 100644 UI/Templates/UIxSieveEditor.wox create mode 100644 UI/Templates/UIxSortButton.wox create mode 100644 UI/Templates/UIxTimeDateControl.wox create mode 100644 UI/Templates/UIxTimeSelector.wox create mode 100644 UI/Templates/UIxWinClose.wox create mode 100644 UI/WebServerResources/COPYING-thunderbird.txt create mode 100644 UI/WebServerResources/ChangeLog create mode 100644 UI/WebServerResources/LICENSE-thunderbird.txt create mode 100644 UI/WebServerResources/OGoLogo.gif create mode 100644 UI/WebServerResources/UIxAppointmentEditor.js create mode 100644 UI/WebServerResources/UIxContactEditor.js create mode 100644 UI/WebServerResources/UIxMailEditorAttach.js create mode 100644 UI/WebServerResources/UIxMailListView.js create mode 100644 UI/WebServerResources/UIxMailToSelection.js create mode 100644 UI/WebServerResources/box_botleft.gif create mode 100644 UI/WebServerResources/box_botright.gif create mode 100644 UI/WebServerResources/box_bottom.gif create mode 100644 UI/WebServerResources/box_left.gif create mode 100644 UI/WebServerResources/box_right.gif create mode 100644 UI/WebServerResources/box_top.gif create mode 100644 UI/WebServerResources/box_topleft.gif create mode 100644 UI/WebServerResources/box_topright.gif create mode 100644 UI/WebServerResources/calendar.css create mode 100644 UI/WebServerResources/closewindow.gif create mode 100644 UI/WebServerResources/corner_right.gif create mode 100644 UI/WebServerResources/downward_sorted.gif create mode 100644 UI/WebServerResources/generic.js create mode 100644 UI/WebServerResources/icon_mark_flagged.gif create mode 100644 UI/WebServerResources/icon_mark_read.gif create mode 100644 UI/WebServerResources/icon_mark_unflagged.gif create mode 100644 UI/WebServerResources/icon_mark_unread.gif create mode 100644 UI/WebServerResources/icon_read.gif create mode 100644 UI/WebServerResources/icon_unread.gif create mode 100644 UI/WebServerResources/layout2or3_xlib.js create mode 100644 UI/WebServerResources/layout2or3_xlib.txt create mode 100644 UI/WebServerResources/line_left.gif create mode 100644 UI/WebServerResources/line_right.gif create mode 100644 UI/WebServerResources/line_stretch.gif create mode 100644 UI/WebServerResources/lori_32x32.png create mode 100644 UI/WebServerResources/mailer-compose.css create mode 100644 UI/WebServerResources/mailer-toolbar.css create mode 100644 UI/WebServerResources/mailer.css create mode 100644 UI/WebServerResources/mailer.js create mode 100644 UI/WebServerResources/menu_logo_top.gif create mode 100644 UI/WebServerResources/message-mail-read.png create mode 100644 UI/WebServerResources/message-mail.png create mode 100644 UI/WebServerResources/non_sorted.gif create mode 100644 UI/WebServerResources/searchfield.js create mode 100644 UI/WebServerResources/tab_.gif create mode 100644 UI/WebServerResources/tab_selected.gif create mode 100644 UI/WebServerResources/tb-ab-delete-flat-24x24.png create mode 100644 UI/WebServerResources/tb-ab-delete-high-24x24.png create mode 100644 UI/WebServerResources/tb-ab-delete-off-24x24.png create mode 100644 UI/WebServerResources/tb-ab-instantmessage-flat-24x24.png create mode 100644 UI/WebServerResources/tb-ab-instantmessage-high-24x24.png create mode 100644 UI/WebServerResources/tb-ab-instantmessage-off-24x24.png create mode 100644 UI/WebServerResources/tb-ab-newcard-flat-24x24.png create mode 100644 UI/WebServerResources/tb-ab-newcard-high-24x24.png create mode 100644 UI/WebServerResources/tb-ab-newcard-off-24x24.png create mode 100644 UI/WebServerResources/tb-ab-newlist-flat-24x24.png create mode 100644 UI/WebServerResources/tb-ab-newlist-high-24x24.png create mode 100644 UI/WebServerResources/tb-ab-newlist-off-24x24.png create mode 100644 UI/WebServerResources/tb-ab-properties-flat-24x24.png create mode 100644 UI/WebServerResources/tb-ab-properties-high-24x24.png create mode 100644 UI/WebServerResources/tb-ab-properties-off-24x24.png create mode 100644 UI/WebServerResources/tb-ab-write-flat-24x24.png create mode 100644 UI/WebServerResources/tb-ab-write-high-24x24.png create mode 100644 UI/WebServerResources/tb-ab-write-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-attach-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-attach-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-attach-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-contacts-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-contacts-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-contacts-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-copy-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-copy-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-copy-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-cut-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-cut-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-cut-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-paste-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-paste-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-paste-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-quote-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-quote-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-quote-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-save-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-save-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-save-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-security-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-security-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-security-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-send-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-send-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-send-off-24x24.png create mode 100644 UI/WebServerResources/tb-compose-spell-flat-24x24.png create mode 100644 UI/WebServerResources/tb-compose-spell-high-24x24.png create mode 100644 UI/WebServerResources/tb-compose-spell-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-addressbook-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-addressbook-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-addressbook-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-delete-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-delete-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-delete-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-file-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-file-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-file-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-forward-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-forward-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-forward-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-getmail-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-getmail-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-getmail-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-junk-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-junk-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-junk-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-mark-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-mark-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-mark-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-next-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-next-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-next-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-prev-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-prev-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-prev-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-print-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-print-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-print-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-reply-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-reply-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-reply-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-replyall-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-replyall-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-replyall-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-stop-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-stop-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-stop-off-24x24.png create mode 100644 UI/WebServerResources/tb-mail-write-flat-24x24.png create mode 100644 UI/WebServerResources/tb-mail-write-high-24x24.png create mode 100644 UI/WebServerResources/tb-mail-write-off-24x24.png create mode 100644 UI/WebServerResources/tbtb_addressbook.png create mode 100644 UI/WebServerResources/tbtb_anais.png create mode 100644 UI/WebServerResources/tbtb_compose.png create mode 100644 UI/WebServerResources/tbtb_compose_addressbook_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_attach_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_clip_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_cut_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_dup_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_file_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_lock_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_quote_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_send_30x30.png create mode 100644 UI/WebServerResources/tbtb_compose_spell_30x30.png create mode 100644 UI/WebServerResources/tbtb_delete.png create mode 100644 UI/WebServerResources/tbtb_deletedoc.png create mode 100644 UI/WebServerResources/tbtb_filetofolder.png create mode 100644 UI/WebServerResources/tbtb_folderadd.png create mode 100644 UI/WebServerResources/tbtb_folderdel.png create mode 100644 UI/WebServerResources/tbtb_forward.png create mode 100644 UI/WebServerResources/tbtb_getmail.png create mode 100644 UI/WebServerResources/tbtb_next.png create mode 100644 UI/WebServerResources/tbtb_previous.png create mode 100644 UI/WebServerResources/tbtb_print.png create mode 100644 UI/WebServerResources/tbtb_reply.png create mode 100644 UI/WebServerResources/tbtb_replyall.png create mode 100644 UI/WebServerResources/tbtb_search.png create mode 100644 UI/WebServerResources/tbtb_trash.png create mode 100644 UI/WebServerResources/tbtv_account_17x17.gif create mode 100644 UI/WebServerResources/tbtv_corner_17x17.gif create mode 100644 UI/WebServerResources/tbtv_corner_minus_17x17.gif create mode 100644 UI/WebServerResources/tbtv_corner_plus_17x17.gif create mode 100644 UI/WebServerResources/tbtv_drafts_17x17.gif create mode 100644 UI/WebServerResources/tbtv_inbox_17x17.gif create mode 100644 UI/WebServerResources/tbtv_junction2_17x17.gif create mode 100644 UI/WebServerResources/tbtv_junction_17x17.gif create mode 100644 UI/WebServerResources/tbtv_leaf_corner_17x17.gif create mode 100644 UI/WebServerResources/tbtv_line_17x17.gif create mode 100644 UI/WebServerResources/tbtv_minus_17x17.gif create mode 100644 UI/WebServerResources/tbtv_plus_17x17.gif create mode 100644 UI/WebServerResources/tbtv_sent_17x17.gif create mode 100644 UI/WebServerResources/tbtv_trash_17x17.gif create mode 100644 UI/WebServerResources/title_attachment_14x14.png create mode 100644 UI/WebServerResources/title_config.png create mode 100644 UI/WebServerResources/title_junk.png create mode 100644 UI/WebServerResources/title_read_14x14.png create mode 100644 UI/WebServerResources/title_sortdown_12x12.png create mode 100644 UI/WebServerResources/title_sortup_12x12.png create mode 100644 UI/WebServerResources/title_thread.png create mode 100644 UI/WebServerResources/uix.css create mode 100644 UI/WebServerResources/upward_sorted.gif create mode 100644 UI/common.make create mode 100644 Version create mode 100755 configure create mode 100644 fhsbundle.make create mode 100644 fhslib.make create mode 100644 fhstool.make diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..90d070e0e --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3 @@ +2006-06-15 ludovic@inverse.ca + + * Initial import of SOGo from trunk. diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 000000000..78ec6851d --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,13 @@ +# GNUstep makefile + +-include config.make +include $(GNUSTEP_MAKEFILES)/common.make + +SUBPROJECTS = \ + OGoContentStore \ + SoObjects \ + Main \ + UI \ + Protocols \ + +include $(GNUSTEP_MAKEFILES)/aggregate.make diff --git a/Main/ChangeLog b/Main/ChangeLog new file mode 100644 index 000000000..72d4f0e92 --- /dev/null +++ b/Main/ChangeLog @@ -0,0 +1,219 @@ +2005-08-01 Helge Hess + + * GNUmakefile: added FHS installation of sogod-0.9 (v0.9.41) + + * SOGo.m: added class security declarations (previously in + product.plist of MainUI), ensure that core SOGo SoClasses are loaded + (v0.9.40) + + * v0.9.39 + + * moved MainUI product bundle to UI/MainUI + + * SOGo.m: fixed some gcc 4.0 warnings + +2005-07-21 Helge Hess + + * product.plist: protect homepage using SOPE access control (v0.9.38) + + * SOGoRootPage.m: redirect authenticated users to their login page + (v0.9.37) + +2005-07-21 Marcus Mueller + + * homepage.js: fixed post to send an empty string instead of null - + this works in Firefox on MacOSX but fails on Windows (v0.9.36) + +2005-07-20 Marcus Mueller + + * v0.9.35 + + * README: updated with new default description + + * SOGoUserHomePage.wox: in case user is not authorized to change the + internet access flag, the rendered text is different now + + * English.lproj/Localizable.strings: provide new label for case that + user is not allowed to change internet access + +2005-07-15 Helge Hess + + * GNUmakefile.preamble: fixed Cocoa compilation (v0.9.34) + +2005-07-14 Helge Hess + + * moved SOGoUser and SOGoAuthenticator to libSOGo (v0.9.33) + +2005-07-14 Marcus Mueller + + * SOGoUserHomePage.m: vacation message state is now properly being + retrieved from AgenorUserManager (v0.9.32) + + * v0.9.31 + + * SOGoUserHomePage.[m, wox]: added internet access lock + display/modification and vacation state (currently only faked) + + * homepage.js: JavaScript in use on the homepage + + * English.lproj/Localizable.strings: removed old labels and added a + bunch of new labels + +2005-07-12 Helge Hess + + * v0.9.30 + + * SOGoAuthenticator.m: create SOGoUser objects + + * added 'SOGoUser' object/class as a subclass of SoUser, using this + object various Agenor properties like cn or email can be determined + (will use the AgenorUserManager to retrieve such) + +2005-07-08 Marcus Mueller + + * README: updated for new default 'SOGoAllowsUnrestrictedAccess' + +2005-07-05 Marcus Mueller + + * v0.9.29 + + * README: updated defaults documentation + + * SOGo.m: added new default 'SOGoEnableDoubleReleaseCheck' for + debugging of NSAutoreleasePool issues + +2005-03-28 Helge Hess + + * SOGoProductLoader.m: do not try to load directories without + extensions (v0.9.28) + +2005-03-23 Marcus Mueller + + * renamed "default.strings" to "Localizable.strings" (v0.9.27) + +2005-02-21 Helge Hess + + * GNUmakefile: properly install bundle in FHS (v0.9.26) + +2005-02-20 Helge Hess + + * SOGoProductLoader.m: fixed product loader for FHS and Cocoa (0.9.25) + +2005-02-17 Helge Hess + + * SOGo.m: added a proper application 'name' for the WEResourceManager, + use WEResourceManager per default (v0.9.24) + +2005-02-12 Marcus Mueller + + * SOGo.m: corrected incorrect use of logging (v0.9.23) + +2005-02-10 Helge Hess + + * GNUmakefile.preamble: fixed linking on MacOSX (v0.9.22) + + * v0.9.21 + + * SOGoProductLoader.m: perform properly versioned plugin lookups (load + bundles from Library/SOGo-0.9 instead of Library/SOGo) + + * sogod is now a tool, not a .woa anymore + + * SOGo.m: minor cleanup in locale code, removed some dead code + (v0.9.20) + + * GNUmakefile: some support for tool compilation (does not work yet) + + * sogod.m: moved application class to own file, started to work on + daemon/product separation (v0.9.19) + +2004-01-07 Marcus Mueller + + * {English/French}.lproj/default.strings: changed encoding from + ISO-Latin-1 to UTF-8, which is now the default (v0.9.18) + +2004-12-15 Marcus Mueller + + * SOGoUserHomePage.m: added defaultAction to redirect to + "Calendar/" (v0.9.17) + +2004-12-08 Marcus Mueller + + * SOGoProductLoader.m, sogod.m: changed to use NGLogging (v0.9.16) + +2004-10-19 Marcus Mueller + + * SOGoUserHomePage.[wox|m]: changed hrefs to be computed dynamically + instead of being static (v0.9.15) + +2004-10-18 Marcus Mueller + + * v0.9.14 + + * SOGoUserHomePage.wox: Changed label for "eMail" to "Mail" for + consistency + + * *.lproj/default.strings: added label "Mail" + +2004-09-26 Helge Hess + + * sogod.m: return 404 for favicon.ico queries (v0.9.13) + + * fixed title bindings to const: in .wox (should be label:?) (v0.9.12) + +2004-09-25 Helge Hess + + * sogod.m: fixed a compile warning on OSX (v0.9.11) + +2004-09-20 Helge Hess + + * SOGoUserHomePage.wox: added link to Mail (v0.9.10) + +2004-08-27 Marcus Mueller + + * v0.9.9 + + * English.lproj/default.strings, French.lproj/default.strings: + dictionaries for labels + + * SOGoUserHomePage.wox: replaced constant strings with labels + +2004-08-26 Helge Hess + + * GNUmakefile.preamble: fixed superflous libjs (v0.9.8) + +2004-08-11 Helge Hess + + * added SOGoGroupPage and SOGoGroupsPage (default views for the group + folders) (v0.9.7) + + * sogod.m: do not set SoRootURL manually (v0.9.6) + +2004-08-10 Marcus Mueller + + * French.lproj/Locale: minor changes to capitalization (v0.9.5) + +2004-07-27 Marcus Mueller + + * sogod.m: added static SoRootURL to context (v0.9.4) + +2004-07-19 Marcus Mueller + + * sogod.m, */Locale: converted to UTF-8 for better editability (v0.9.3) + +2004-07-19 Marcus Mueller + + * v0.9.2 + + * sogod.m: added localization methods. Current locale is put into + WOContext upon first request. All locales are cached in the + application object. + + * [English,French].lproj: created. Put appropriate Locale + representations here. + + * GNUmakefile: added LANGUAGES and LOCALIZED_RESOURCES. + + * SOGoRootPage.wox: some debug code (for locales). + + * created ChangeLog. diff --git a/Main/GNUmakefile b/Main/GNUmakefile new file mode 100644 index 000000000..fbc5ae16e --- /dev/null +++ b/Main/GNUmakefile @@ -0,0 +1,21 @@ +# GNUstep makefile + +-include ../config.make +include $(GNUSTEP_MAKEFILES)/common.make +include ../Version +include ./Version + +SOGOD = sogod-$(MAJOR_VERSION).$(MINOR_VERSION) +TOOL_NAME = $(SOGOD) + +# daemon tool + +$(SOGOD)_OBJC_FILES += \ + sogod.m \ + SOGo.m \ + SOGoProductLoader.m \ + +-include GNUmakefile.preamble +include $(GNUSTEP_MAKEFILES)/tool.make +-include GNUmakefile.postamble +include fhs.make diff --git a/Main/GNUmakefile.preamble b/Main/GNUmakefile.preamble new file mode 100644 index 000000000..1132d88bc --- /dev/null +++ b/Main/GNUmakefile.preamble @@ -0,0 +1,28 @@ +# compile settings + +ADDITIONAL_CPPFLAGS += \ + -DSOGO_MAJOR_VERSION=$(MAJOR_VERSION) \ + -DSOGO_MINOR_VERSION=$(MINOR_VERSION) \ + -DSOGO_SUBMINOR_VERSION=$(SUBMINOR_VERSION) + +ADDITIONAL_INCLUDE_DIRS += \ + -I../SoObjects/ \ + -I../.. + +ADDITIONAL_LIB_DIRS += \ + -L../SoObjects/SOGo/$(GNUSTEP_OBJ_DIR)/ \ + -L../OGoContentStore/$(GNUSTEP_OBJ_DIR)/ + +SYSTEM_LIB_DIR += -L/usr/local/lib -L/usr/lib + +$(SOGOD)_TOOL_LIBS += \ + -lSOGo \ + -lOGoContentStore \ + -lGDLContentStore \ + -lGDLAccess \ + -lWEExtensions \ + -lNGiCal \ + -lNGObjWeb \ + -lNGMime -lNGLdap \ + -lNGStreams -lNGExtensions -lEOControl \ + -lDOM -lXmlRpc -lSaxObjC diff --git a/Main/MainUIProduct.m b/Main/MainUIProduct.m new file mode 100644 index 000000000..1018ad738 --- /dev/null +++ b/Main/MainUIProduct.m @@ -0,0 +1,47 @@ +/* + Copyright (C) 2004-2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +#import + +@interface MainUIProduct : NSObject +{ +} + +@end + +#import + +@implementation MainUIProduct + ++ (NSString *)pathToLocaleForLanguageNamed:(NSString *)_name { + // TODO: this is kind of a hack, we reuse the class registry to find + // resources ... + NSBundle *bundle; + NSString *ldir, *path; + + bundle = [NSBundle bundleForClass:self]; + ldir = [_name stringByAppendingPathExtension:@"lproj"]; + path = [bundle pathForResource:@"Locale" ofType:nil inDirectory:ldir]; + + return path; +} + +@end /* MainUIProduct */ diff --git a/Main/README b/Main/README new file mode 100644 index 000000000..a814c6f7c --- /dev/null +++ b/Main/README @@ -0,0 +1,88 @@ +SOGo +==== + +Master Daemon, loads the functionality from product bundles in Library/SOGo. + +Setup +===== + + Defaults write sogod NGBundlePath '"$HOME/Library/SOGo"' + => otherwise some bundles will clash with "fat" OGo + => the UIx .wox driver must be found + + +Defaults +======== + + SOGoDefaultLanguage - string - currently used for selecting the language of + the mail templates. Default is "French". + + SOGoCrashOnSessionCreate - bool - crash the server if a session is created + => useful for debugging + + SOGoEnableDoubleReleaseCheck - bool - call + +[NSAutoreleasePool enableDoubleReleaseCheck:YES] upon start + => useful for debugging + +SOGoInternetDetectQualifier +- an EOQualifier to detect whether a set of HTTP headers is from the outside, + eg: "NOT (minequprovenance = 'intranet')" + -SOGoInternetDetectQualifier '"NOT (minequprovenance = \"intranet\")"' + Note: all header field names are lowercase + Testing: -SOGoInternetDetectQualifier '"host = \"agenor.opengroupware.org\""' + +AgenorProfileURL - URL +- configure database location of the user profile + eg: http://postgres:@agenor-db:5432/test/sogo_user_profile + +SOGoDoNotRedirectRootPage - YES|NO +- do not redirect to home-folder for authenticated users but show the + root page (with the login name) + + +What it does +============ +- provides locale support +- preloads the SOGo products (SOGoProductLoader) +- provides the root object (the application object with user lookup) +- sets the authenticator +- does some process limits and restart support + + +Apache Setup +============ + + AliasMatch /SOGoHH/so/ControlPanel/Products/(.*)/Resources/(.*) \ + /home/helge/GNUstep/Library/SOGo-0.9/$1.SOGo/Resources/$2 + + + AuthName "Agenor LDAP" + AuthType Basic + AuthLDAPEnabled on + AuthLDAPUrl ldap://agenor-ldap:389/ou=organisation,dc=equipement,dc=gouv,dc=fr??sub?(&(objectClass=person)(uid=*)) + require valid-user + + SetHandler ngobjweb-adaptor + SetAppPort 9000 + + + + SetHandler default-handler + + + +FHS Setup +========= + +NOTE: use the appname, sogo-0.9, not the tool name (sogod-0.9)! + +cd /usr/local/share +mkdir sogo-0.9/ +cd sogo-0.9/ +ln -s ~/dev/SOGo-trunk/UI/Templates ./templates +ln -s ~/dev/SOGo-trunk/UI/WebServerResources ./www + +Apache: + +Alias /SOGo.woa/WebServerResources/ \ + /usr/local/share/sogo-0.9/www/ diff --git a/Main/SOGo.m b/Main/SOGo.m new file mode 100644 index 000000000..4274d8385 --- /dev/null +++ b/Main/SOGo.m @@ -0,0 +1,320 @@ +/* + Copyright (C) 2004-2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +#include + +@interface SOGo : SoApplication +{ + NSMutableDictionary *localeLUT; +} + +- (NSDictionary *)currentLocaleConsideringLanguages:(NSArray *)_langs; +- (NSDictionary *)localeForLanguageNamed:(NSString *)_name; + +@end + +#include "SOGoProductLoader.h" +#include +#include +#include +#include "common.h" + +@implementation SOGo + +static unsigned int vMemSizeLimit = 0; +static BOOL doCrashOnSessionCreate = NO; + ++ (void)initialize { + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + id tmp; + + doCrashOnSessionCreate = [ud boolForKey:@"SOGoCrashOnSessionCreate"]; + + /* vMem size check - default is 200MB */ + + tmp = [ud objectForKey:@"SxVMemLimit"]; + vMemSizeLimit = (tmp != nil) + ? [tmp intValue] + : 200; + if (vMemSizeLimit > 0) { + NSLog(@"Note: vmem size check enabled: shutting down app when " + @"vmem > %d MB", vMemSizeLimit); + } +#if LIB_FOUNDATION_LIBRARY + if ([ud boolForKey:@"SOGoEnableDoubleReleaseCheck"]) + [NSAutoreleasePool enableDoubleReleaseCheck:YES]; +#endif + + /* SoClass security declarations */ + + /* require View permission to access the root (bound to authenticated ...) */ + [[self soClassSecurityInfo] declareObjectProtected:SoPerm_View]; + + /* to allow public access to all contained objects (subkeys) */ + [[self soClassSecurityInfo] setDefaultAccess:@"allow"]; + + /* require Authenticated role for View and WebDAV */ + [[self soClassSecurityInfo] declareRole:SoRole_Authenticated + asDefaultForPermission:SoPerm_View]; + [[self soClassSecurityInfo] declareRole:SoRole_Authenticated + asDefaultForPermission:SoPerm_WebDAVAccess]; +} + +- (id)init { + if ((self = [super init])) { + WOResourceManager *rm; + + /* ensure core SoClass'es are setup */ + [NSClassFromString(@"SOGoObject") soClass]; + [NSClassFromString(@"SOGoContentObject") soClass]; + [NSClassFromString(@"SOGoFolder") soClass]; + + /* setup locale cache */ + self->localeLUT = [[NSMutableDictionary alloc] initWithCapacity:2]; + + /* load products */ + [[SOGoProductLoader productLoader] loadProducts]; + + /* setup resource manager */ + rm = [[WEResourceManager alloc] init]; + [self setResourceManager:rm]; + } + return self; +} + +- (void)dealloc { + [self->localeLUT release]; + [super dealloc]; +} + +/* authenticator */ + +- (id)authenticatorInContext:(id)_ctx { + return [SOGoAuthenticator sharedSOGoAuthenticator]; +} + +/* name lookup */ + +- (BOOL)isUserName:(NSString *)_key inContext:(id)_ctx { + if ([_key length] < 1) + return NO; + + if (isdigit([_key characterAtIndex:0])) + return NO; + + return YES; +} + +- (id)lookupUser:(NSString *)_key inContext:(id)_ctx { + return [[[NSClassFromString(@"SOGoUserFolder") alloc] + initWithName:_key inContainer:self] autorelease]; +} + +- (void)_setupLocaleInContext:(WOContext *)_ctx { + NSArray *langs; + NSDictionary *locale; + + if ([[_ctx valueForKey:@"locale"] isNotNull]) + return; + + langs = [[(WOContext *)_ctx request] browserLanguages]; + locale = [self currentLocaleConsideringLanguages:langs]; + [_ctx takeValue:locale forKey:@"locale"]; +} + +- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag { + id obj; + + /* put locale info into the context in case it's not there */ + [self _setupLocaleInContext:_ctx]; + + /* first check attributes directly bound to the application */ + if ((obj = [super lookupName:_key inContext:_ctx acquire:_flag])) + return obj; + + /* + The problem is, that at this point we still get request for resources, + eg 'favicon.ico'. + + Addition: we also get queries for various other methods, like "GET" if + no method was provided in the query path. + */ + + if ([_key isEqualToString:@"favicon.ico"]) + return nil; + + if ([self isUserName:_key inContext:_ctx]) + return [self lookupUser:_key inContext:_ctx]; + + return nil; +} + +/* WebDAV */ + +- (NSString *)davDisplayName { + /* this is used in the UI, eg in the navigation */ + return @"SOGo"; +} + +/* exception handling */ + +- (WOResponse *)handleException:(NSException *)_exc + inContext:(WOContext *)_ctx +{ + printf("EXCEPTION: %s\n", [[_exc description] cString]); + abort(); +} + +/* runtime maintenance */ + +- (void)checkIfDaemonHasToBeShutdown { + unsigned int limit, vmem; + + if ((limit = vMemSizeLimit) == 0) + return; + + vmem = [[NSProcessInfo processInfo] virtualMemorySize]/1048576; + + if (vmem > limit) { + [self logWithFormat: + @"terminating app, vMem size limit (%d MB) has been reached" + @" (currently %d MB)", + limit, vmem]; + [self terminate]; + } +} + +- (WOResponse *)dispatchRequest:(WORequest *)_request { + static NSArray *runLoopModes = nil; + WOResponse *resp; + + resp = [super dispatchRequest:_request]; + + if ([self isTerminating]) + return resp; + + if (runLoopModes == nil) + runLoopModes = [[NSArray alloc] initWithObjects:NSDefaultRunLoopMode, nil]; + + // TODO: a bit complicated? (-perform:afterDelay: doesn't work?) + [[NSRunLoop currentRunLoop] performSelector: + @selector(checkIfDaemonHasToBeShutdown) + target:self argument:nil + order:1 modes:runLoopModes]; + return resp; +} + +/* session management */ + +- (id)createSessionForRequest:(WORequest *)_request { + [self warnWithFormat:@"session creation requested!"]; + if (doCrashOnSessionCreate) + abort(); + return [super createSessionForRequest:_request]; +} + +/* localization */ + +- (NSDictionary *)currentLocaleConsideringLanguages:(NSArray *)_langs { + unsigned i, count; + + /* assume _langs is ordered by priority */ + count = [_langs count]; + for (i = 0; i < count; i++) { + NSString *lname; + NSDictionary *locale; + + lname = [_langs objectAtIndex:i]; + locale = [self localeForLanguageNamed:lname]; + if (locale != nil) + return locale; + } + /* no appropriate language, fallback to default */ + return [self localeForLanguageNamed:@"English"]; +} + +- (NSString *)pathToLocaleForLanguageNamed:(NSString *)_name { + static Class MainProduct = Nil; + NSString *lpath; + + lpath = [[self resourceManager] pathForResourceNamed:@"Locale" + inFramework:nil + languages:[NSArray arrayWithObject:_name]]; + if ([lpath isNotNull]) + return lpath; + + if (MainProduct == Nil) { + if ((MainProduct = NSClassFromString(@"MainUIProduct")) == Nil) + [self errorWithFormat:@"did not find MainUIProduct class!"]; + } + + lpath = [(id)MainProduct pathToLocaleForLanguageNamed:_name]; + if ([lpath isNotNull]) + return lpath; + + return nil; +} + +- (NSDictionary *)localeForLanguageNamed:(NSString *)_name { + NSString *lpath; + id data; + NSDictionary *locale; + + if (![_name isNotNull]) { + [self errorWithFormat:@"%s: name parameter must not be nil!", + __PRETTY_FUNCTION__]; + return nil; + } + + if ((locale = [self->localeLUT objectForKey:_name]) != nil) + return locale; + + if ((lpath = [self pathToLocaleForLanguageNamed:_name]) == nil) { + [self errorWithFormat:@"did not find Locale for language: %@", _name]; + return nil; + } + + if ((data = [NSData dataWithContentsOfFile:lpath]) == nil) { + [self logWithFormat:@"%s didn't find locale with name:%@", + __PRETTY_FUNCTION__, + _name]; + return nil; + } + data = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + locale = [data propertyList]; + if (locale == nil) { + [self logWithFormat:@"%s couldn't load locale with name:%@", + __PRETTY_FUNCTION__, + _name]; + return nil; + } + [self->localeLUT setObject:locale forKey:_name]; + return locale; +} + +/* name (used by the WEResourceManager) */ + +- (NSString *)name { + return @"SOGo-0.9"; +} + +@end /* SOGo */ diff --git a/Main/SOGoProductLoader.h b/Main/SOGoProductLoader.h new file mode 100644 index 000000000..fc8668dbb --- /dev/null +++ b/Main/SOGoProductLoader.h @@ -0,0 +1,44 @@ +/* + Copyright (C) 2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: SOGoProductLoader.h 540 2005-02-10 16:22:38Z helge $ + +#ifndef __Main_SOGoProductLoader_H__ +#define __Main_SOGoProductLoader_H__ + +#import + +@class NSString, NSArray; + +@interface SOGoProductLoader : NSObject +{ + NSString *productDirectoryName; + NSArray *searchPathes; +} + ++ (id)productLoader; + +/* operations */ + +- (void)loadProducts; + +@end + +#endif /* __Main_SOGoProductLoader_H__ */ diff --git a/Main/SOGoProductLoader.m b/Main/SOGoProductLoader.m new file mode 100644 index 000000000..2d994ea2a --- /dev/null +++ b/Main/SOGoProductLoader.m @@ -0,0 +1,174 @@ +/* + Copyright (C) 2004-2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +#include "SOGoProductLoader.h" +#include "common.h" + +@implementation SOGoProductLoader + ++ (int)sogoMajorVersion { + return SOGO_MAJOR_VERSION; +} ++ (int)sogoMinorVersion { + return SOGO_MINOR_VERSION; +} + ++ (id)productLoader { + return [[[self alloc] init] autorelease]; +} + +- (id)init { + if ((self = [super init])) { + self->productDirectoryName = + [[NSString alloc] initWithFormat:@"SOGo-%i.%i", + [[self class] sogoMajorVersion], + [[self class] sogoMinorVersion]]; + } + return self; +} + +- (void)dealloc { + [self->productDirectoryName release]; + [self->searchPathes release]; + [super dealloc]; +} + +/* loading */ + +- (void)_addCocoaSearchPathesToArray:(NSMutableArray *)ma { + id tmp; + + tmp = NSSearchPathForDirectoriesInDomains(NSAllLibrariesDirectory, + NSAllDomainsMask, + YES); + if ([tmp count] > 0) { + NSEnumerator *e; + + e = [tmp objectEnumerator]; + while ((tmp = [e nextObject])) { + tmp = [tmp stringByAppendingPathComponent:self->productDirectoryName]; + if (![ma containsObject:tmp]) + [ma addObject:tmp]; + } + } +} + +- (void)_addGNUstepSearchPathesToArray:(NSMutableArray *)ma { + NSDictionary *env; + id tmp; + + env = [[NSProcessInfo processInfo] environment]; + if ((tmp = [env objectForKey:@"GNUSTEP_PATHPREFIX_LIST"]) == nil) + tmp = [env objectForKey:@"GNUSTEP_PATHLIST"]; + + tmp = [tmp componentsSeparatedByString:@":"]; + if ([tmp count] > 0) { + NSEnumerator *e; + + e = [tmp objectEnumerator]; + while ((tmp = [e nextObject])) { + tmp = [tmp stringByAppendingPathComponent:@"Library"]; + tmp = [tmp stringByAppendingPathComponent:self->productDirectoryName]; + if (![ma containsObject:tmp]) + [ma addObject:tmp]; + } + } + else { + NSLog(@"%s: empty library search path !", __PRETTY_FUNCTION__); + } +} + +- (void)_addFHSPathesToArray:(NSMutableArray *)ma { + NSString *s; + + s = @"sogod-0.9"; + [ma addObject:[@"/usr/local/lib/" stringByAppendingString:s]]; + [ma addObject:[@"/usr/lib/" stringByAppendingString:s]]; +} + +- (NSArray *)productSearchPathes { + NSMutableArray *ma; + BOOL hasGNUstepEnv; + + if (self->searchPathes != nil) + return self->searchPathes; + + hasGNUstepEnv = [[[[NSProcessInfo processInfo] environment] + objectForKey:@"GNUSTEP_USER_ROOT"] length] > 0 ? YES : NO; + + ma = [NSMutableArray arrayWithCapacity:6]; + + if (hasGNUstepEnv) + [self _addGNUstepSearchPathesToArray:ma]; +#if COCOA_Foundation_LIBRARY + else + [self _addCocoaSearchPathesToArray:ma]; +#endif + + [self _addFHSPathesToArray:ma]; + + self->searchPathes = [ma copy]; + + if ([self->searchPathes count] == 0) { + [self logWithFormat:@"%s: no search pathes were found !", + __PRETTY_FUNCTION__]; + } + + return self->searchPathes; +} + +- (void)loadProducts { + SoProductRegistry *registry = nil; + NSFileManager *fm; + NSEnumerator *pathes; + NSString *lpath; + + registry = [SoProductRegistry sharedProductRegistry]; + fm = [NSFileManager defaultManager]; + + pathes = [[self productSearchPathes] objectEnumerator]; + while ((lpath = [pathes nextObject]) != nil) { + NSEnumerator *productNames; + NSString *productName; + + [self logWithFormat:@"scanning SOGo products in: %@", lpath]; + + productNames = [[fm directoryContentsAtPath:lpath] objectEnumerator]; + + while ((productName = [productNames nextObject]) != nil) { + NSString *bpath; + + if ([[productName pathExtension] length] == 0) + /* filter out directories without extensions */ + continue; + + bpath = [lpath stringByAppendingPathComponent:productName]; + [self logWithFormat:@" register SOGo product: %@", + [bpath lastPathComponent]]; + [registry registerProductAtPath:bpath]; + } + } + + if (![registry loadAllProducts]) + [self warnWithFormat:@"could not load all products !"]; +} + +@end /* SOGoProductLoader */ diff --git a/Main/Version b/Main/Version new file mode 100644 index 000000000..21363f43a --- /dev/null +++ b/Main/Version @@ -0,0 +1,7 @@ +# Version file + +SUBMINOR_VERSION:=41 + +# v0.9.32 requires libSOGo v0.9.57 +# v0.9.24 requires libWEExtensions v4.5.67 +# v0.9.16 requires libNGExtensions v4.5.136 diff --git a/Main/common.h b/Main/common.h new file mode 100644 index 000000000..f29bf7474 --- /dev/null +++ b/Main/common.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 2002-2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +#import + +#if NeXT_Foundation_LIBRARY || COCOA_Foundation_LIBRARY +# include +# include +#endif + +#include +#include +#include + +#include diff --git a/Main/fhs.make b/Main/fhs.make new file mode 100644 index 000000000..c9cd79f8a --- /dev/null +++ b/Main/fhs.make @@ -0,0 +1,26 @@ +# postprocessing + +# FHS support (this is a hack and is going to be done by gstep-make!) + +ifneq ($(FHS_INSTALL_ROOT),) + +FHS_INCLUDE_DIR=$(FHS_INSTALL_ROOT)/include/ +FHS_LIB_DIR=$(FHS_INSTALL_ROOT)/lib/ +FHS_SBIN_DIR=$(FHS_INSTALL_ROOT)/sbin/ + +fhs-bin-dirs :: + $(MKDIRS) $(FHS_SBIN_DIR) + +NONFHS_BINDIR="$(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)" + +move-daemons-to-fhs :: fhs-bin-dirs + @echo "moving daemons from $(NONFHS_BINDIR) to $(FHS_SBIN_DIR) .." + for i in $(TOOL_NAME); do \ + mv "$(NONFHS_BINDIR)/$${i}" $(FHS_SBIN_DIR); \ + done + +move-to-fhs :: move-daemons-to-fhs + +after-install :: move-to-fhs + +endif diff --git a/Main/sogod.m b/Main/sogod.m new file mode 100644 index 000000000..314a248ce --- /dev/null +++ b/Main/sogod.m @@ -0,0 +1,38 @@ +/* + Copyright (C) 2004-2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ + +#include +#include "common.h" + +int main(int argc, char **argv, char **env) { + NSAutoreleasePool *pool; + + pool = [[NSAutoreleasePool alloc] init]; +#if LIB_FOUNDATION_LIBRARY + [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; +#endif + [NGBundleManager defaultBundleManager]; + + WOWatchDogApplicationMain(@"SOGo", argc, (void*)argv); + + [pool release]; + return 0; +} diff --git a/Misc/WebUI/Application.h b/Misc/WebUI/Application.h new file mode 100644 index 000000000..cd026c5ca --- /dev/null +++ b/Misc/WebUI/Application.h @@ -0,0 +1,38 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __Application_H_ +#define __Application_H_ + + +#include + + +@interface Application : SoApplication +{ + +} + +@end + +#endif /* __Application_H_ */ diff --git a/Misc/WebUI/Application.m b/Misc/WebUI/Application.m new file mode 100644 index 000000000..9252c4147 --- /dev/null +++ b/Misc/WebUI/Application.m @@ -0,0 +1,38 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#import "Application.h" +#import "common.h" + + +@implementation Application + +- (id)init { + self = [super init]; + if(self) { + [self logInfoWithFormat:@"Welcome to '%@'", [self name]]; + } + return self; +} + +@end diff --git a/Misc/WebUI/COPYING b/Misc/WebUI/COPYING new file mode 100644 index 000000000..161a3d1d4 --- /dev/null +++ b/Misc/WebUI/COPYING @@ -0,0 +1,482 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 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. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + 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 Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, 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 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 a program 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. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, 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 companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + 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, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +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 compile 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) 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. + + c) 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. + + d) 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 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. + + 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 to +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 Library 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 + + Appendix: 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 Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, 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! diff --git a/Misc/WebUI/COPYRIGHT b/Misc/WebUI/COPYRIGHT new file mode 100644 index 000000000..1053b2aa3 --- /dev/null +++ b/Misc/WebUI/COPYRIGHT @@ -0,0 +1,4 @@ +Copyright (C) 2004 SKYRIX Software AG + + +Contact: info@skyrix.com diff --git a/Misc/WebUI/ChangeLog b/Misc/WebUI/ChangeLog new file mode 100644 index 000000000..b45b24dd4 --- /dev/null +++ b/Misc/WebUI/ChangeLog @@ -0,0 +1,13 @@ +2004-05-27 Marcus Mueller + + * README: updated + +2004-05-27 Marcus Mueller + + * README, NOTES: updated + + * NGExtensions/NGLogging/ChangeLog: created + +2004-05-26 Marcus Mueller + + * ChangeLog: created diff --git a/Misc/WebUI/DirectAction.h b/Misc/WebUI/DirectAction.h new file mode 100644 index 000000000..e25f29b95 --- /dev/null +++ b/Misc/WebUI/DirectAction.h @@ -0,0 +1,38 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __DirectAction_H_ +#define __DirectAction_H_ + + +#include + + +@interface DirectAction : WODirectAction +{ + +} + +@end + +#endif /* __DirectAction_H_ */ diff --git a/Misc/WebUI/DirectAction.m b/Misc/WebUI/DirectAction.m new file mode 100644 index 000000000..695f82b67 --- /dev/null +++ b/Misc/WebUI/DirectAction.m @@ -0,0 +1,29 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#include "DirectAction.h" + + +@implementation DirectAction + +@end diff --git a/Misc/WebUI/English.lproj/InfoPlist.strings b/Misc/WebUI/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..d22a0a2c6f25abeb60629b1f7cb571b518ac6a6d GIT binary patch literal 528 zcmbV|OAoZ8B=zI*-4YV1jojRx({m;>bLVzf zMMYT}Xs@L_ZMD`_fqZ5cYN8{Py>?WK8uIP)7t)t?$nZyjUS3NR|Gt3xw9_e}HWD?9% Ld1jfn`9uE!8%bGs literal 0 HcmV?d00001 diff --git a/Misc/WebUI/GNUmakefile b/Misc/WebUI/GNUmakefile new file mode 100644 index 000000000..d8eaed497 --- /dev/null +++ b/Misc/WebUI/GNUmakefile @@ -0,0 +1,33 @@ +# $Id$ + +include $(GNUSTEP_MAKEFILES)/common.make + +WOAPP_NAME = WebUI + +WebUI_OBJC_FILES = \ + WebUI_main.m \ + Application.m \ + Session.m \ + DirectAction.m \ + + +ADDITIONAL_INCLUDE_DIRS = -INGExtensions -INGExtensions/NGLogging + +WebUI_COMPONENTS = \ + Main.wo \ + + +WebUI_RESOURCE_FILES = \ + + +WebUI_WEBSERVER_RESOURCE_FILES := \ + $(shell find WebServerResources -type f -print) + + +WebUI_SUBPROJECTS = \ + NGExtensions \ + + +-include GNUmakefile.preamble +include $(GNUSTEP_MAKEFILES)/woapp.make +-include GNUmakefile.postamble diff --git a/Misc/WebUI/GNUmakefile.preamble b/Misc/WebUI/GNUmakefile.preamble new file mode 100644 index 000000000..9c0fa2920 --- /dev/null +++ b/Misc/WebUI/GNUmakefile.preamble @@ -0,0 +1,8 @@ +# $Id$ + + +-include GNUmakefile.preamble.local + +ifeq ($(findstring darwin, $(GNUSTEP_HOST_OS)),) +ADDITIONAL_OBJCFLAGS += -DWITHOUT_SOPEX +endif diff --git a/Misc/WebUI/Info.plist b/Misc/WebUI/Info.plist new file mode 100644 index 000000000..d0cabb589 --- /dev/null +++ b/Misc/WebUI/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + WebUI + CFBundleIconFile + Lori + CFBundleIdentifier + my.sope.apps.WebUI + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 0.1 + NSMainNibFile + + NSPrincipalClass + SOPEXApplication + + diff --git a/Misc/WebUI/Lori.icns b/Misc/WebUI/Lori.icns new file mode 100644 index 0000000000000000000000000000000000000000..4d1024410cdf2b6083b078bd282c5751afd4e959 GIT binary patch literal 42190 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 literal 0 HcmV?d00001 diff --git a/Misc/WebUI/NGExtensions/GNUmakefile b/Misc/WebUI/NGExtensions/GNUmakefile new file mode 100644 index 000000000..40bba8bb5 --- /dev/null +++ b/Misc/WebUI/NGExtensions/GNUmakefile @@ -0,0 +1,18 @@ +# $Id$ + +include $(GNUSTEP_MAKEFILES)/common.make + + +SUBPROJECT_NAME = NGExtensions + + +ADDITIONAL_INCLUDE_DIRS += -I.. + + +NGExtensions_SUBPROJECTS = \ + NGLogging + + +-include GNUmakefile.preamble +include $(GNUSTEP_MAKEFILES)/subproject.make +-include GNUmakefile.postamble diff --git a/Misc/WebUI/NGExtensions/NGLogging/ChangeLog b/Misc/WebUI/NGExtensions/NGLogging/ChangeLog new file mode 100644 index 000000000..770975e0c --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/ChangeLog @@ -0,0 +1,17 @@ +2004-05-27 Marcus Mueller + + * NGLogAppender.[hm]: introduced -formattedEvent:, currently not + configurable. + + * NGLogSyslogAppender.m: works as expected now. + + * NGLogger.m: uses new default (see README) to select the default + appender. Not optimal, but sufficient. + + * NGLogConsoleAppender.m: changed to use -formattedEvent: now. + +2004-05-27 Marcus Mueller + + * NGLogSyslogAppender.[hm]: syslog appender, untested. + + * ChangeLog: created diff --git a/Misc/WebUI/NGExtensions/NGLogging/GNUmakefile b/Misc/WebUI/NGExtensions/NGLogging/GNUmakefile new file mode 100644 index 000000000..e596eaaf7 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/GNUmakefile @@ -0,0 +1,30 @@ +# $Id$ + +include $(GNUSTEP_MAKEFILES)/common.make + + +SUBPROJECT_NAME = NGLogging + + +ADDITIONAL_INCLUDE_DIRS += -I.. -I../.. + + +NGLogging_OBJC_FILES = \ + NSObject+ExtendedLogging.m \ + NGLogger.m \ + NGLogEvent.m \ + NGLogAppender.m \ + NGLogConsoleAppender.m \ + +NGLogging_HEADER_FILES = \ + NGLogging.h \ + NSObject+ExtendedLogging.h \ + NGLogger.h \ + NGLogEvent.h \ + NGLogAppender.h \ + NGLogConsoleAppender.h \ + + +-include GNUmakefile.preamble +include $(GNUSTEP_MAKEFILES)/subproject.make +-include GNUmakefile.postamble diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.h b/Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.h new file mode 100644 index 000000000..fabab54a2 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.h @@ -0,0 +1,51 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __NGLogAppender_H_ +#define __NGLogAppender_H_ + +/* + Abstract superclass for all appenders. +*/ + +#import +#import "NSObject+ExtendedLogging.h" + + +@class NGLogEvent; + + +@interface NGLogAppender : NSObject +{ + +} + +/* subclass responsibility */ +- (void)appendLogEvent:(NGLogEvent *)_event; +- (NSString *)formattedEvent:(NGLogEvent *)_event; + +- (NSString *)localizedNameOfLogLevel:(NGLogLevel)_level; + +@end + +#endif /* __NGLogAppender_H_ */ diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.m b/Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.m new file mode 100644 index 000000000..3743c843f --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogAppender.m @@ -0,0 +1,66 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#import "NGLogAppender.h" +#import "NGLogEvent.h" + + +@implementation NGLogAppender + +- (void)appendLogEvent:(NGLogEvent *)_event { + [self subclassResponsibility:_cmd]; +} + +- (NSString *)formattedEvent:(NGLogEvent *)_event { + return [NSString stringWithFormat:@"[%@] %@", + [self localizedNameOfLogLevel:[_event level]], + [_event message]]; +} + +- (NSString *)localizedNameOfLogLevel:(NGLogLevel)_level { + NSString *name; + + switch (_level) { + case NGLogLevelDebug: + name = @"DEBUG"; + break; + case NGLogLevelInfo: + name = @"INFO"; + break; + case NGLogLevelWarn: + name = @"WARN"; + break; + case NGLogLevelError: + name = @"ERROR"; + break; + case NGLogLevelFatal: + name = @"FATAL"; + break; + default: + name = @""; + break; + } + return name; +} + +@end diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.h b/Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.h new file mode 100644 index 000000000..bc3fd3438 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.h @@ -0,0 +1,38 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __NGLogConsoleAppender_H_ +#define __NGLogConsoleAppender_H_ + + +#import "NGLogAppender.h" + + +@interface NGLogConsoleAppender : NGLogAppender +{ + +} + +@end + +#endif /* __NGLogConsoleAppender_H_ */ diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.m b/Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.m new file mode 100644 index 000000000..d9a53c46e --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogConsoleAppender.m @@ -0,0 +1,34 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#import "NGLogConsoleAppender.h" +#import "NGLogEvent.h" + + +@implementation NGLogConsoleAppender + +- (void)appendLogEvent:(NGLogEvent *)_event { + NSLog([self formattedEvent:_event]); +} + +@end diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.h b/Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.h new file mode 100644 index 000000000..3b1dfa4b3 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.h @@ -0,0 +1,47 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __NGLogEvent_H_ +#define __NGLogEvent_H_ + + +#import +#import "NSObject+ExtendedLogging.h" + + +@interface NGLogEvent : NSObject +{ + NSString *msg; + NGLogLevel level; + NSTimeInterval date; +} + +- (id)initWithLevel:(NGLogLevel)_level message:(NSString *)_msg; + +- (NGLogLevel)level; +- (NSString *)message; +- (NSDate *)date; + +@end + +#endif /* __NGLogEvent_H_ */ diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.m b/Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.m new file mode 100644 index 000000000..e9c617340 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogEvent.m @@ -0,0 +1,56 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#import "NGLogEvent.h" +#import + + +@implementation NGLogEvent + +- (id)initWithLevel:(NGLogLevel)_level message:(NSString *)_msg { + if((self = [super init])) { + self->date = [NSDate timeIntervalSinceReferenceDate]; + self->level = _level; + ASSIGN(self->msg, _msg); + } + return self; +} + +- (void)dealloc { + [self->msg release]; + [super dealloc]; +} + +- (NGLogLevel)level { + return self->level; +} + +- (NSString *)message { + return self->msg; +} + +- (NSDate *)date { + return [NSDate dateWithTimeIntervalSinceReferenceDate:self->date]; +} + +@end diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.h b/Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.h new file mode 100644 index 000000000..e7253b825 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __NGLogSyslogAppender_H_ +#define __NGLogSyslogAppender_H_ + + +#import "NGLogAppender.h" + + +@interface NGLogSyslogAppender : NGLogAppender +{ + +} + ++ (id)sharedAppender; + +/* provide syslog identifier */ +- (id)initWithIdentifier:(NSString *)_ident; + +@end + +#endif /* __NGLogSyslogAppender_H_ */ diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.m b/Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.m new file mode 100644 index 000000000..856b47548 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogSyslogAppender.m @@ -0,0 +1,114 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#import "NGLogSyslogAppender.h" +#import "NGLogEvent.h" +#include +#include + + +@interface NGLogSyslogAppender (PrivateAPI) +- (int)syslogLevelForLogLevel:(NGLogLevel)_level; +@end + +@implementation NGLogSyslogAppender + + +static NSString *defaultSyslogIdentifier = nil; + + ++ (void)initialize { + NSUserDefaults *ud; + static BOOL isInitialized = NO; + + if(isInitialized) + return; + + ud = [NSUserDefaults standardUserDefaults]; + defaultSyslogIdentifier = + [[ud stringForKey:@"NGLogSyslogIdentifier"] retain]; + + isInitialized = YES; +} + ++ (id)sharedAppender { + static id sharedAppender = nil; + if(sharedAppender == nil) { + sharedAppender = [[self alloc] init]; + } + return sharedAppender; +} + +- (id)init { + return [self initWithIdentifier:defaultSyslogIdentifier]; +} + +- (id)initWithIdentifier:(NSString *)_ident { + if((self = [super init])) { + #warning ** default flags? + openlog([_ident cString], LOG_PID | LOG_NDELAY, LOG_USER); + } + return self; +} + +- (void)dealloc { + closelog(); + [super dealloc]; +} + +- (void)appendLogEvent:(NGLogEvent *)_event { + NSString *formattedMsg; + int level; + + formattedMsg = [self formattedEvent:_event]; + level = [self syslogLevelForLogLevel:[_event level]]; + syslog(level, [formattedMsg cString]); +} + +- (int)syslogLevelForLogLevel:(NGLogLevel)_level { + int level; + + switch (_level) { + case NGLogLevelDebug: + level = LOG_DEBUG; + break; + case NGLogLevelInfo: + level = LOG_INFO; + break; + case NGLogLevelWarn: + level = LOG_WARNING; + break; + case NGLogLevelError: + level = LOG_ERR; + break; + case NGLogLevelFatal: + level = LOG_ALERT; // LOG_EMERG is broadcast to all users... + break; + default: + level = LOG_NOTICE; + break; + } + return level; +} + +@end diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogger.h b/Misc/WebUI/NGExtensions/NGLogging/NGLogger.h new file mode 100644 index 000000000..421abb0ed --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogger.h @@ -0,0 +1,49 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __NGLogger_H_ +#define __NGLogger_H_ + +/* + The logger, modeled closely after log4j. + */ + + +#import +#include "NSObject+ExtendedLogging.h" + + +@interface NGLogger : NSObject +{ + NGLogLevel minLogLevel; + id _appender; // going away as soon as we have a config +} + +- (id)initWithLogLevel:(NGLogLevel)_level; + +- (void)setLogLevel:(NGLogLevel)_level; +- (NGLogLevel)logLevel; + +@end + +#endif /* __NGLogger_H_ */ diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogger.m b/Misc/WebUI/NGExtensions/NGLogging/NGLogger.m new file mode 100644 index 000000000..52a08de1b --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogger.m @@ -0,0 +1,111 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#include "NGLogger.h" +#include +#include "common.h" +#include "NGLogEvent.h" +#include "NGLogAppender.h" + + +@implementation NGLogger + +- (id)init { + self = [self initWithLogLevel:NGLogLevelAll]; + return self; +} + +- (id)initWithLogLevel:(NGLogLevel)_level { + if((self = [super init])) { + NSUserDefaults *ud; + NSString *appenderClassName; + + [self setLogLevel:_level]; + +#warning ** remove this as soon as we have a config + ud = [NSUserDefaults standardUserDefaults]; + appenderClassName = [ud stringForKey:@"NGLogDefaultAppenderClass"]; + if(appenderClassName == nil) + appenderClassName = @"NGLogConsoleAppender"; + self->_appender = [[NSClassFromString(appenderClassName) alloc] init]; + } + return self; +} + +- (void)dealloc { + [self->_appender release]; + [super dealloc]; +} + + +- (void)setLogLevel:(NGLogLevel)_level { + self->minLogLevel = _level; +} + +- (NGLogLevel)logLevel { + return self->minLogLevel; +} + +- (void)logLevel:(NGLogLevel)_level withFormat:(NSString *)_fmt, ... { + NSString *msg; + NGLogEvent *event; + va_list va; + + if(self->minLogLevel > _level) + return; + + va_start(va, _fmt); + msg = [[NSString alloc] initWithFormat:_fmt arguments:va]; + va_end(va); + + event = [[NGLogEvent alloc] initWithLevel:_level message:msg]; + + // iterate appenders + // TODO: as soon as we have more appenders, we need to iterate on them + [self->_appender appendLogEvent:event]; + + [event release]; + [msg release]; +} + +- (BOOL)isLogDebugEnabled { + return self->minLogLevel >= NGLogLevelDebug; +} + +- (BOOL)isLogInfoEnabled { + return self->minLogLevel >= NGLogLevelInfo; +} + +- (BOOL)isLogWarnEnabled { + return self->minLogLevel >= NGLogLevelWarn; +} + +- (BOOL)isLogErrorEnabled { + return self->minLogLevel >= NGLogLevelError; +} + +- (BOOL)isLogFatalEnabled { + return self->minLogLevel >= NGLogLevelFatal; +} + +@end diff --git a/Misc/WebUI/NGExtensions/NGLogging/NGLogging.h b/Misc/WebUI/NGExtensions/NGLogging/NGLogging.h new file mode 100644 index 000000000..b774724a0 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NGLogging.h @@ -0,0 +1,42 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __NGLogging_H_ +#define __NGLogging_H_ + +/* + NGLogging is a somewhat more sophisticated logging framework, modeled + apparently similar to log4j - without some of its bloat. The current + idea is to replace the default logging used throughout OGo (-logWithFormat:, + -debugWithFormat:, NSLog()) with the new logging framework to get rid of + stdout only logging. +*/ + + +#import + +#include "NSObject+ExtendedLogging.h" +#include "NGLogger.h" + + +#endif /* __NGLogging_H_ */ diff --git a/Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.h b/Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.h new file mode 100644 index 000000000..04845d9a5 --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.h @@ -0,0 +1,63 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __NSObject_ExtendedLogging_H_ +#define __NSObject_ExtendedLogging_H_ + + +#import + + +typedef enum { + NGLogLevelAll = 0, + NGLogLevelDebug = 1, + NGLogLevelInfo = 2, + NGLogLevelWarn = 3, + NGLogLevelError = 4, + NGLogLevelFatal = 5, + NGLogLevelOff = 6 +} NGLogLevel; + + +@interface NSObject (NGExtendedLogging) + +- (id)sharedLogger; +- (id)logger; + +- (void)logDebugWithFormat:(NSString *)_fmt, ...; +- (void)logInfoWithFormat:(NSString *)_fmt, ...; +- (void)logWarnWithFormat:(NSString *)_fmt, ...; +- (void)logErrorWithFormat:(NSString *)_fmt, ...; +- (void)logFatalWithFormat:(NSString *)_fmt, ...; + +- (BOOL)isLogDebugEnabled; +- (BOOL)isLogInfoEnabled; +- (BOOL)isLogWarnEnabled; +- (BOOL)isLogErrorEnabled; +- (BOOL)isLogFatalEnabled; + +- (void)logLevel:(NGLogLevel)_level withFormat:(NSString *)_fmt, ...; + +@end + +#endif /* __NSObject_ExtendedLogging_H_ */ diff --git a/Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.m b/Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.m new file mode 100644 index 000000000..50d30204a --- /dev/null +++ b/Misc/WebUI/NGExtensions/NGLogging/NSObject+ExtendedLogging.m @@ -0,0 +1,128 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#import "NSObject+ExtendedLogging.h" +#import "NGLogger.h" + + +@implementation NSObject (NGExtendedLogging) + +- (id)sharedLogger { + static id sharedLogger = nil; + if(sharedLogger == nil) { + sharedLogger = [[NGLogger alloc] init]; + } + return sharedLogger; +} + +- (id)logger { + return [self sharedLogger]; +} + +- (void)logDebugWithFormat:(NSString *)_fmt, ... { + NSString *msg; + va_list va; + + va_start(va, _fmt); + msg = [[NSString alloc] initWithFormat:_fmt arguments:va]; + va_end(va); + [self logLevel:NGLogLevelDebug withFormat:msg]; + [msg release]; +} + +- (void)logInfoWithFormat:(NSString *)_fmt, ... { + NSString *msg; + va_list va; + + va_start(va, _fmt); + msg = [[NSString alloc] initWithFormat:_fmt arguments:va]; + va_end(va); + [self logLevel:NGLogLevelInfo withFormat:msg]; + [msg release]; +} + +- (void)logWarnWithFormat:(NSString *)_fmt, ... { + NSString *msg; + va_list va; + + va_start(va, _fmt); + msg = [[NSString alloc] initWithFormat:_fmt arguments:va]; + va_end(va); + [self logLevel:NGLogLevelWarn withFormat:msg]; + [msg release]; +} + +- (void)logErrorWithFormat:(NSString *)_fmt, ... { + NSString *msg; + va_list va; + + va_start(va, _fmt); + msg = [[NSString alloc] initWithFormat:_fmt arguments:va]; + va_end(va); + [self logLevel:NGLogLevelError withFormat:msg]; + [msg release]; +} + +- (void)logFatalWithFormat:(NSString *)_fmt, ... { + NSString *msg; + va_list va; + + va_start(va, _fmt); + msg = [[NSString alloc] initWithFormat:_fmt arguments:va]; + va_end(va); + [self logLevel:NGLogLevelFatal withFormat:msg]; + [msg release]; +} + +- (void)logLevel:(NGLogLevel)_level withFormat:(NSString *)_fmt, ... { + NSString *msg; + va_list va; + + va_start(va, _fmt); + msg = [[NSString alloc] initWithFormat:_fmt arguments:va]; + va_end(va); + [[self logger] logLevel:_level withFormat:msg]; + [msg release]; +} + +- (BOOL)isLogDebugEnabled { + return [[self logger] isLogDebugEnabled]; +} + +- (BOOL)isLogInfoEnabled { + return [[self logger] isLogInfoEnabled]; +} + +- (BOOL)isLogWarnEnabled { + return [[self logger] isLogWarnEnabled]; +} + +- (BOOL)isLogErrorEnabled { + return [[self logger] isLogErrorEnabled]; +} + +- (BOOL)isLogFatalEnabled { + return [[self logger] isLogFatalEnabled]; +} + +@end diff --git a/Misc/WebUI/NOTES b/Misc/WebUI/NOTES new file mode 100644 index 000000000..16dc5b805 --- /dev/null +++ b/Misc/WebUI/NOTES @@ -0,0 +1,15 @@ +$Id$ + +- NGExtensions + - Stuff I believe might be useful for later addition to NGExtensions framework + + - NGLogging + - Had a look at log4cocoa, appeared to be too bloated (they mimic all of + log4j which doesn't really make sense in Objective-C). + - NGLogConsoleAppender is the only appender currently available, it's + hardcoded in NGLogger as default. This should change as soon as we have + a config for that purpose. Logging is low priority, so we don't need to + do that too soon. + - Syslog appender might be useful for the ministry. Syslog provides its own + buffering, so syslog appender should be straight forward. Current + implementation makes some fix assumptions (log facility). \ No newline at end of file diff --git a/Misc/WebUI/PROJECTLEAD b/Misc/WebUI/PROJECTLEAD new file mode 100644 index 000000000..ab0c70acd --- /dev/null +++ b/Misc/WebUI/PROJECTLEAD @@ -0,0 +1,3 @@ +# $Id$ + +PROJECTLEAD=helge.hess@opengroupware.org diff --git a/Misc/WebUI/README b/Misc/WebUI/README new file mode 100644 index 000000000..c5beb54d3 --- /dev/null +++ b/Misc/WebUI/README @@ -0,0 +1,24 @@ +$Id$ + + +WebUI + Part of SOGo + Copyright (C) 2000-2004 SKYRIX Software AG - http://www.skyrix.com/ + +Subprojects +=========== + +- NGExtensions + - NGLogging + + +UserDefaults +============ + + Default | Type | Example Value + ============================================================== + NGLogSyslogIdentifier | String | WebUI + NGLogDefaultAppenderClass| String | NGLogConsoleAppender + + + diff --git a/Misc/WebUI/Session.h b/Misc/WebUI/Session.h new file mode 100644 index 000000000..9cea90775 --- /dev/null +++ b/Misc/WebUI/Session.h @@ -0,0 +1,38 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __Session_H_ +#define __Session_H_ + + +#include + + +@interface Session : WOSession +{ + +} + +@end + +#endif /* __Session_H_ */ diff --git a/Misc/WebUI/Session.m b/Misc/WebUI/Session.m new file mode 100644 index 000000000..58c00f537 --- /dev/null +++ b/Misc/WebUI/Session.m @@ -0,0 +1,38 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#include "Session.h" +#include "common.h" + + +@implementation Session + +- (id)init { + self = [super init]; + if(self) { + [self logWarnWithFormat:@"session with id '%@' did init - this " \ + @"should NOT happen!", [self sessionID]]; + } + return self; +} +@end diff --git a/Misc/WebUI/TODO b/Misc/WebUI/TODO new file mode 100644 index 000000000..e69de29bb diff --git a/Misc/WebUI/Version b/Misc/WebUI/Version new file mode 100644 index 000000000..f96f6a3cf --- /dev/null +++ b/Misc/WebUI/Version @@ -0,0 +1,15 @@ +# $Id$ +# +# This file is included by library makefiles to set the version information +# of the executable. +# +# NOTE: This has no effect whatsover if you are using Xcode on Mac OS X. +# For Xcode please use the appropriate user interface or issue the following +# command in a shell: +# /Developer/Tools/agvtool new-version \ +# ${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION} + +MAJOR_VERSION=1 +MINOR_VERSION=0 +SUBMINOR_VERSION=0 + diff --git a/Misc/WebUI/WebServerResources/favicon.ico b/Misc/WebUI/WebServerResources/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..829cb223f786c55612001a27e68051ee38b9d38f GIT binary patch literal 3262 zcmeH|u}j-g5XYajwu4;$9F0mkbhJq*DpS zp<4+KjzT(g5toRAgHy0mNBxv*&o7slI0!oA<(Ke%zkBa{_r7=UlF|^L$;rfTHhq1T z(s)Yg6<=PZH+=uTziC_!#zRuz;_T$t-p=9f2G8l?eh976XsrJq;9zCFZGl&GO%C|;VM4a{M> z`RN_&t8>qxPID1yzpW;uysz$FCW86kVc45=1!-|$zf53H>+bZqff8nCu}DN z1b#JvO(ITVz+4c#E~5fHLQ19G{wJ@kxh20H#Q1}T%1|nm)HPVG=o73Szt+4~6zdVh zZBXHs(9kz-qYvE% zt-{#)Fasg?hzrGIt;VWFFIPAty~{J``Bf1dBfj+<3!7hDSi8{r4E3X_#Fw*m1+cLl zwRtp7j-yU>FCuvSo%hREHk(aE^JxH{3-jX5hhNj&@am3SpuCkaS + #include + #include +#endif diff --git a/Misc/WebUI/WebUI_main.m b/Misc/WebUI/WebUI_main.m new file mode 100644 index 000000000..dfe7dcd53 --- /dev/null +++ b/Misc/WebUI/WebUI_main.m @@ -0,0 +1,35 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifdef WITHOUT_SOPEX +#import +#define SOPEXMain WOApplicationMain +#else +#import +#endif /* WITHOUT_SOPEX */ + + +int main(int argc, const char *argv[]) +{ + return SOPEXMain(@"Application", argc, argv); +} diff --git a/Misc/WebUI/common.h b/Misc/WebUI/common.h new file mode 100644 index 000000000..79bf6b89a --- /dev/null +++ b/Misc/WebUI/common.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id$ + + +#ifndef __common_H_ +#define __common_H_ + + +#import + +#include "NGLogging.h" + + +#endif /* __common_H_ */ diff --git a/Misc/WebUI/version.plist b/Misc/WebUI/version.plist new file mode 100644 index 000000000..6f3c68caa --- /dev/null +++ b/Misc/WebUI/version.plist @@ -0,0 +1,16 @@ + + + + + BuildVersion + 1 + CFBundleShortVersionString + 0.1 + CFBundleVersion + 0.1 + ProjectName + NibPBTemplates + SourceVersion + 1160200 + + diff --git a/Misc/WebUI/wox-cheat-sheet.txt b/Misc/WebUI/wox-cheat-sheet.txt new file mode 100644 index 000000000..4a79b24bf --- /dev/null +++ b/Misc/WebUI/wox-cheat-sheet.txt @@ -0,0 +1,50 @@ +WOxControlElemBuilder +--------------------- + +:if -> WOConditional +:foreach -> WORepetition +:for-each -> WORepetition +:with -> WOSetCursor + +WOxMiscElemBuilder +------------------ + +:component-content -> WOComponentContent +:checkbox-list -> WOCheckBoxList +:entity -> WOEntity +:multiselection -> WOBrowser +:nbsp /*DEPRECATED*/ -> WOEntity +:popup -> WOPopUpButton +:radio-button-matrix -> WORadioButtonMatrix +:string -> WOString +:singleselection -> WOBrowser + + +WOxHTMLElemBuilder +------------------ + +:text -> WOTextField +:file -> WOFileUpload +:a -> WOHyperlink +:img -> WOImage +:form -> WOForm +:textarea -> WOText +:embed -> WOEmbeddedObject +:frame -> WOFrame +:iframe -> WOIFrame +:body -> WOBody + +:input [type="submit"] -> WOSubmitButton +:input [type="reset"] -> WOResetButton +:input [type="image"] -> WOImageButton +:input [type="radio"] -> WORadioButton +:input [type="checkbox"] -> WOCheckBox +:input [type="file"] -> WOFileUpload +:input [type="hidden"] -> WOHiddenField +:input [type="password"] -> WOPasswordField +:input [type="*"] -> WOTextField + +:meta [http-equiv="refresh*"] -> WOMetaRefresh + +:* [hasChildNodes="YES"] -> WOGenericContainer +:* [hasChildNodes="NO"] -> WOGenericElement diff --git a/Misc/ZideStore/UI-X/ChangeLog b/Misc/ZideStore/UI-X/ChangeLog new file mode 100644 index 000000000..f8c8667da --- /dev/null +++ b/Misc/ZideStore/UI-X/ChangeLog @@ -0,0 +1,208 @@ +2004-06-30 Marcus Müller + + * Scheduler/UIxAppointmentEditor.m: improved -saveAction. Does + everything in a complete manner now - except for saving which isn't + done at all. + +2004-06-30 Helge Hess + + * Scheduler/UIxAppointmentEditor.m: made the hack more hackish to work + on MacOSX + +2004-06-28 Marcus Mueller + + * Common/UIxComponent.[hm]: moved -ownMethodName here. + + * Scheduler/UIxCalView.[hm]: removed -ownMethodName, moved to + UIxComponent (reuse). + + * Scheduler/UIxAppointmentView.[hm]: first "draft" of view component. + The look of OGo is resembled closely, but most features are still + missing. + +2004-06-28 Marcus Mueller + + * Scheduler/GNUmakefile.preamble: links against libSOGoLogic now. + + * Scheduler/UIxAppointmentView.m, Scheduler/UIxAppointmentView.wox: + test of iCal object. + +2004-06-23 Marcus Mueller + + * UIxCalMonthOverview.[m,wox]: completed month view. Turned out to + be much more difficult to improve with style sheets than expected. + Requires version 4.2.45 of WEExtensions. + +2004-06-22 Marcus Mueller + + * Refactoring: Renamed everything from OGo to UIx in order to avoid + nameclashes (happens on OSX related to NGBundleManager) + + * Refactoring 2: Moved methods from UIxWeekOverview to UIxCalView. + + * Highlighting in UIxWeekOverview works now. + +2004-06-22 Helge Hess + + * Common/GNUmakefile.preamble: fixed linking for OGo gstep-make + +2004-06-21 Helge Hess + + * Scheduler/OGoCalWeekOverview.m: fixed syntax errors + +2004-06-18 Marcus Mueller + + * Implemented proper calendar in week overview. Highlighting isn't + enabled, yet. + +2004-06-18 Marcus Mueller + + * Common/OGoComponent.[hm]: new component which serves as a base + component for calendar components now. Knows how to deal with + queryParameters and offers url construction method(s). + + * All existing components have been rewritten to use queryParameters + instead of hardcoded strings where this is feasible. This provides + future extensibility and flexibility. + + * Handling of dates has been fixed to center around the use of a + 'day' parameter. startDate/endDate are coupled to this, but + don't override it as it's the duty of the individual view to set + its (feasible) ranges accordingly. The new behaviour is noticable + in the calendar selection tabview instantly, as it now replicates + what OGo does. + +2004-06-16 Marcus Mueller + + * Common/OGoAppNavView.m: construct URL correctly. + + * Common/OGoPageFrame.m: display login correctly. + + * Common/calendar.css: cosmetic changes. + + * Scheduler/OGoCalSelectTab.m: always display mondayOfWeek. + + * Scheduler/OGoCalBackForthNavView.m: created. + +2004-06-16 Marcus Mueller + + * Common/zidestoreui.css: new style for button_auto. + + * Scheduler/OGoCalView.[hm]: API for completing hrefs with necessary + query parts. + + * Scheduler/OGoCalWeekView.m: bugfix for startDate. + + * Scheduler/product.plist: added still missing views -> point to + weekoverview for the time being. + +2004-06-15 Marcus Mueller + + * Common/UIxTabView.m: removed class from tag, removed rendering + of headerFooter (what's that good for anyways?) + + * Several resources which resolved to wrong products added statically + in templates. + + * Cosmetic changes in templates. + +2004-06-14 Helge Hess + + * Scheduler/OGoCalMonthOverview.wox: added missing rsrc namespace + +2004-06-14 Helge Hess + + * Common/common.h: fixed a gcc 3.4 warning + +2004-06-14 Helge Hess + + * added aggregate project for UI-X + +2004-06-14 Marcus Mueller + + * Common/calendar.css: new date_label (unused) + + * Scheduler/OGoCalSelectTab.m: finished all labels + + * Scheduler/OGoCalDateLabel.m, Scheduler/OGoCalDateLabel.wox: new + component for rendering the correct date label based on startDate, + endDate and selection + + * Scheduler/OGoCalMonthView.m: prev/next month corrected + + * Scheduler/OGoCalMonthOverview.wox: uses date label and tabs now + + * Scheduler/OGoCalWeekOverview.wox: completed layout + + * Scheduler/GNUmakefile: new component added + +2004-06-14 Marcus Mueller + + * Common/UIxTabView.[hm]: more stylesheet support via headerStyle + and bodyStyle bindings. + + * Common/zidestoreui.css: styles for tabs, resembling OGo look. + + * Scheduler/OGoCalSelectTab.m: implemented dateLabel (for testing). + + * Scheduler/OGoCalSelectTab.wox: corrected selection binding namespace. + +2004-06-08 Helge Hess + + * Scheduler/NOTES: added class hierarchy + + * */common.h, GNUmakefile.preamble.: fixed for OSX compile + +2004-06-08 Marcus Mueller + + * Common/images: added a bunch of images from OGo + +2004-06-07 Marcus Mueller + + * Custom/GNUmakefile: changed ZIDESTORE to include installed version + (ZideStore12). Removed post install hooks. + + * Custom/GNUmakefile.postamble: new file, post install hooks and + xmllint for .wox. + +2004-06-07 Marcus Mueller + + * Scheduler/GNUmakefile: changed ZIDESTORE to include installed version + (ZideStore12). Removed post install hooks. + + * Scheduler/GNUmakefile.postamble: post install hooks updated for + GNUSTEP_BUILD_DIR. + +2004-06-03 Helge Hess + + * Scheduler/OGoCalWeekOverview.m: moved navigation URL generation to + superclass (now generic because we use the 'ownMethodName'). Could + even be moved to OGoCalView? + + * Scheduler/OGoCalMonthView.m: added next/prev month URL generation + methods, calculate startdate from form value + + * Scheduler/OGoCalView.m: added -ownMethodName method to return the + last path component of the request URL (the SOPE method), eg + 'weekoverview' for OGoCalWeekView, added + -dateNavigationURLWithNewStartDate: method to calculate 'startDate' + URLs (should be improved to include existing query parameters!) + + * Scheduler/OGoCalWeekOverview.m: minor tweaks ;-) + +2004-06-03 Marcus Mueller + + * Scheduler/OGoCalWeekView.m: construct startDate from formValue, + otherwise use current week's monday as startDate. + + * Scheduler/OGoCalWeekOverview.wox: switch back/forth + + * Scheduler/OGoCalWeekOverview.m: provide URLs for switching back/forth + weekoverview. + + * Scheduler/OGoCalView.[hm]: methods for converting dates into strings + and vice versa. + + * Scheduler/OGoAppointmentView.m, Scheduler/OGoCalView.m: fixed include + + * ChangeLog: created diff --git a/Misc/ZideStore/UI-X/Common/CommonUIProduct.m b/Misc/ZideStore/UI-X/Common/CommonUIProduct.m new file mode 100644 index 000000000..b5a4da4a4 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/CommonUIProduct.m @@ -0,0 +1,34 @@ +/* + Copyright (C) 2000-2003 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: CommonUIProduct.m,v 1.1 2003/11/24 01:24:40 helge Exp $ + +#import + +@interface CommonUIProduct : NSObject +{ +} + +@end + +#include "common.h" + +@implementation CommonUIProduct +@end /* CommonUIProduct */ diff --git a/Misc/ZideStore/UI-X/Common/GNUmakefile b/Misc/ZideStore/UI-X/Common/GNUmakefile new file mode 100644 index 000000000..0fda272fc --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/GNUmakefile @@ -0,0 +1,82 @@ +# $Id: GNUmakefile,v 1.2 2003/12/09 17:38:42 helge Exp $ + +include $(GNUSTEP_MAKEFILES)/common.make + +ZIDESTORE=$(GNUSTEP_USER_ROOT)/Headers/ZideStore12 + + +BUNDLE_NAME = CommonUI +BUNDLE_EXTENSION = .zsp +BUNDLE_INSTALL_DIR = $(GNUSTEP_USER_ROOT)/Library/ZideStore12 + +LIBRARY_NAME = libZideStoreCommonUI + + +libZideStoreCommonUI_HEADER_FILES_DIR = . +libZideStoreCommonUI_HEADER_FILES_INSTALL_DIR = $(ZIDESTORE)/Common + +libZideStoreCommonUI_HEADER_FILES += \ + UIxComponent.h \ + +libZideStoreCommonUI_OBJC_FILES += \ + UIxComponent.m \ + + +CommonUI_PRINCIPAL_CLASS = CommonUIProduct + +CommonUI_OBJC_FILES += \ + CommonUIProduct.m \ + UIxPageFrame.m \ + UIxAppFrame.m \ + UIxAppHeader.m \ + UIxAppNavigation.m \ + UIxWinClose.m \ + UIxAppNavView.m \ + \ + UIxElemBuilder.m \ + UIxTabView.m \ + UIxTabItem.m \ + + +CommonUI_RESOURCE_FILES += \ + Version \ + product.plist \ + UIxPageFrame.wox \ + UIxAppFrame.wox \ + UIxAppHeader.wox \ + UIxAppNavigation.wox \ + UIxWinClose.wox \ + UIxAppNavView.wox \ + \ + zidestoreui.css \ + calendar.css \ + \ + images/OGoLogo.gif \ + images/menu_logo_top.gif \ + images/line_left.gif \ + images/line_stretch.gif \ + images/line_right.gif \ + images/box_topleft.gif \ + images/box_top.gif \ + images/box_topright.gif \ + images/box_left.gif \ + images/box_right.gif \ + images/box_botleft.gif \ + images/box_bottom.gif\ + images/box_botright.gif\ + images/tab_selected.gif\ + images/tab_.gif\ + images/corner_right.gif\ + images/closewindow.gif + +ADDITIONAL_INCLUDE_DIRS += \ + -I. \ + -I$(ZIDESTORE)/Frontend -I$(ZIDESTORE)/Backend -I$(ZIDESTORE) + + +# make + +-include GNUmakefile.preamble +include $(GNUSTEP_MAKEFILES)/library.make +include $(GNUSTEP_MAKEFILES)/bundle.make +-include GNUmakefile.postamble diff --git a/Misc/ZideStore/UI-X/Common/GNUmakefile.postamble b/Misc/ZideStore/UI-X/Common/GNUmakefile.postamble new file mode 100644 index 000000000..3986bccea --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/GNUmakefile.postamble @@ -0,0 +1,17 @@ +# $Id: GNUmakefile.postamble,v 1.1 2004/05/12 14:45:56 helge Exp $ + +validate-wox: + xmllint --noout *.wox + +before-all :: validate-wox + + +ifneq ($(GNUSTEP_BUILD_DIR),) +after-all :: + @(cp bundle-info.plist \ + $(GNUSTEP_BUILD_DIR)/$(BUNDLE_NAME)$(BUNDLE_EXTENSION)) +else +after-all :: + @(cd $(BUNDLE_NAME)$(BUNDLE_EXTENSION);\ + cp ../bundle-info.plist .) +endif diff --git a/Misc/ZideStore/UI-X/Common/GNUmakefile.preamble b/Misc/ZideStore/UI-X/Common/GNUmakefile.preamble new file mode 100644 index 000000000..e76e480c0 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/GNUmakefile.preamble @@ -0,0 +1,16 @@ +# $Id$ + +ifneq ($(GNUSTEP_BUILD_DIR),) + RELBUILD_DIR_libZideStoreCommonUI = $(GNUSTEP_OBJ_DIR) +else + RELBUILD_DIR_libZideStoreCommonUI = $(GNUSTEP_OBJ_DIR) +endif + +libZideStoreCommonUI_LIBRARIES_DEPEND_UPON += -lNGObjWeb + +CommonUI_LIB_DIRS += -L$(RELBUILD_DIR_libZideStoreCommonUI) + +CommonUI_BUNDLE_LIBS += \ + -lNGObjWeb -lNGScripting \ + -lNGMime -lNGStreams -lNGExtensions -lEOControl \ + -lXmlRpc -lDOM -lSaxObjC -lZideStoreCommonUI diff --git a/Misc/ZideStore/UI-X/Common/UIxAppFrame.m b/Misc/ZideStore/UI-X/Common/UIxAppFrame.m new file mode 100644 index 000000000..51859cd6d --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppFrame.m @@ -0,0 +1,11 @@ +// $Id: UIxAppFrame.m 59 2004-06-22 13:40:19Z znek $ + +#include + +@interface UIxAppFrame : SoComponent +@end + +#include "common.h" + +@implementation UIxAppFrame +@end /* UIxAppFrame */ diff --git a/Misc/ZideStore/UI-X/Common/UIxAppFrame.wox b/Misc/ZideStore/UI-X/Common/UIxAppFrame.wox new file mode 100644 index 000000000..0437cf397 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppFrame.wox @@ -0,0 +1,44 @@ + + + + + <var:string value="title"/> + + + + + + + + + + + + + + + + + + + + + + + + This pages requires frame tags, which your browser does not support, + sorry ;-> + + diff --git a/Misc/ZideStore/UI-X/Common/UIxAppHeader.m b/Misc/ZideStore/UI-X/Common/UIxAppHeader.m new file mode 100644 index 000000000..3bba7b13a --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppHeader.m @@ -0,0 +1,11 @@ +// $Id: UIxAppHeader.m 59 2004-06-22 13:40:19Z znek $ + +#include + +@interface UIxAppHeader : SoComponent +@end + +#include "common.h" + +@implementation UIxAppHeader +@end /* UIxAppHeader */ diff --git a/Misc/ZideStore/UI-X/Common/UIxAppHeader.wox b/Misc/ZideStore/UI-X/Common/UIxAppHeader.wox new file mode 100644 index 000000000..4f8c0d270 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppHeader.wox @@ -0,0 +1,32 @@ + + + + + + + + + + + + +
+ reload - + resistance is obsolete ;-) +
+ + diff --git a/Misc/ZideStore/UI-X/Common/UIxAppNavView.m b/Misc/ZideStore/UI-X/Common/UIxAppNavView.m new file mode 100644 index 000000000..a6c8bd542 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppNavView.m @@ -0,0 +1,104 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxAppNavView.m 59 2004-06-22 13:40:19Z znek $ + + +#import +#import +#import +#import + + +@interface UIxAppNavView : WOComponent +{ + id element; + id lastElement; +} + +@end + + +@implementation UIxAppNavView + +- (void)dealloc { + [self->element release]; + [self->lastElement release]; + [super dealloc]; +} + +- (void)setElement:(id)_element { + ASSIGN(self->element, _element); +} + +- (id)element { + return self->element; +} + +- (void)setLastElement:(id)_element { + ASSIGN(self->lastElement, _element); +} + +- (id)lastElement { + return self->lastElement; +} + +- (NSArray *)navPathElements { + NSArray *traversalObjects; + NSMutableArray *navPathComponents; + NSMutableString *navURL; + unsigned int i, count; + + traversalObjects = [[self context] objectTraversalStack]; + count = ([traversalObjects count] - 1); /* remove SoPageInvocation */ + navPathComponents = [[NSMutableArray alloc] initWithCapacity:count]; + navURL = [[NSMutableString alloc] initWithString:@"/"]; + + for(i = 0; i < count; i++) { + NSString *name, *url; + id obj; + + obj = [traversalObjects objectAtIndex:i]; + + name = [obj davDisplayName]; + if(!name) + name = NSStringFromClass([obj class]); + + [navURL appendString:name]; + [navURL appendString:@"/"]; + + if(! [name hasPrefix:@"ZideStore"]) { + NSMutableDictionary *c; + + c = [[NSMutableDictionary alloc] initWithCapacity:2]; + [c setObject:name forKey:@"name"]; + url = [navURL copy]; + [c setObject:url forKey:@"url"]; + [url release]; + [navPathComponents addObject:c]; + [c release]; + } + } + + [self setLastElement:[navPathComponents lastObject]]; + return [navPathComponents autorelease]; +} + +@end diff --git a/Misc/ZideStore/UI-X/Common/UIxAppNavView.wox b/Misc/ZideStore/UI-X/Common/UIxAppNavView.wox new file mode 100644 index 000000000..6e924d43c --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppNavView.wox @@ -0,0 +1,10 @@ + + + +You are here:/ + \ No newline at end of file diff --git a/Misc/ZideStore/UI-X/Common/UIxAppNavigation.m b/Misc/ZideStore/UI-X/Common/UIxAppNavigation.m new file mode 100644 index 000000000..5b1912c89 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppNavigation.m @@ -0,0 +1,11 @@ +// $Id: UIxAppNavigation.m 59 2004-06-22 13:40:19Z znek $ + +#include + +@interface UIxAppNavigation : SoComponent +@end + +#include "common.h" + +@implementation UIxAppNavigation +@end /* UIxAppNavigation */ diff --git a/Misc/ZideStore/UI-X/Common/UIxAppNavigation.wox b/Misc/ZideStore/UI-X/Common/UIxAppNavigation.wox new file mode 100644 index 000000000..27eadaf53 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxAppNavigation.wox @@ -0,0 +1,85 @@ + + + + + + + + + + + + +
+ +
+ +
+ (reload) +
+ +
+ +
+ +
+ CSS Menues + + diff --git a/Misc/ZideStore/UI-X/Common/UIxComponent.h b/Misc/ZideStore/UI-X/Common/UIxComponent.h new file mode 100644 index 000000000..7782a76ab --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxComponent.h @@ -0,0 +1,55 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxComponent.h 84 2004-06-29 22:34:55Z znek $ + + +#ifndef __UIxComponent_H_ +#define __UIxComponent_H_ + +#include + +@class NSCalendarDate; + + +@interface UIxComponent : SoComponent +{ + NSMutableDictionary *queryParameters; +} + +- (NSString *)queryParameterForKey:(NSString *)_key; +- (NSDictionary *)queryParameters; + +/* use this to set 'sticky' query parameters */ +- (void)setQueryParameter:(NSString *)_param forKey:(NSString *)_key; + +/* appends queryParameters to _method if any are set */ +- (NSString *)completeHrefForMethod:(NSString *)_method; + +- (NSString *)ownMethodName; + +/* date selection */ +- (NSCalendarDate *)selectedDate; +- (NSString *)dateStringForDate:(NSCalendarDate *)_date; +- (NSCalendarDate *)dateForDateString:(NSString *)_dateString; + +@end + +#endif /* __UIxComponent_H_ */ diff --git a/Misc/ZideStore/UI-X/Common/UIxComponent.m b/Misc/ZideStore/UI-X/Common/UIxComponent.m new file mode 100644 index 000000000..81aeec573 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxComponent.m @@ -0,0 +1,168 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxComponent.m 84 2004-06-29 22:34:55Z znek $ + + +#include "UIxComponent.h" +#include +#include +#include + + +@interface UIxComponent (PrivateAPI) +- (void)_parseQueryString:(NSString *)_s; +@end + + +@implementation UIxComponent + +- (id)init { + if ((self = [super init])) { + self->queryParameters = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)dealloc { + [self->queryParameters release]; + [super dealloc]; +} + + +- (void)awake { + WORequest *req; + NSString *uri; + NSRange r; + + [super awake]; + + req = [[self context] request]; + uri = [req uri]; + r = [uri rangeOfString:@"?"]; + if(r.length > 0) { + NSString *qs; + + qs = [uri substringFromIndex:(r.location + r.length)]; + [self->queryParameters removeAllObjects]; + [self _parseQueryString:qs]; + } +} + +- (void)_parseQueryString:(NSString *)_s { + NSEnumerator *e; + NSString *part; + + e = [[_s componentsSeparatedByString:@"&"] objectEnumerator]; + while ((part = [e nextObject])) { + NSRange r; + NSString *key, *value; + + r = [part rangeOfString:@"="]; + if (r.length == 0) { + /* missing value of query parameter */ + key = [part stringByUnescapingURL]; + value = @"1"; + } + else { + key = [[part substringToIndex:r.location] stringByUnescapingURL]; + value = [[part substringFromIndex:(r.location + r.length)] + stringByUnescapingURL]; + } + [self->queryParameters setObject:value forKey:key]; + } +} + +- (NSString *)queryParameterForKey:(NSString *)_key { + return [self->queryParameters objectForKey:_key]; +} + +- (void)setQueryParameter:(NSString *)_param forKey:(NSString *)_key { + if(_key == nil) + return; + + if(_param != nil) + [self->queryParameters setObject:_param forKey:_key]; + else + [self->queryParameters removeObjectForKey:_key]; +} + +- (NSDictionary *)queryParameters { + return self->queryParameters; +} + +- (NSString *)completeHrefForMethod:(NSString *)_method { + NSDictionary *qp; + NSString *qs; + + qp = [self queryParameters]; + if([qp count] == 0) + return _method; + + qs = [[self context] queryStringFromDictionary:qp]; + return [_method stringByAppendingFormat:@"?%@", qs]; +} + +- (NSString *)ownMethodName { + NSString *uri; + NSRange r; + + uri = [[[self context] request] uri]; + + /* first: cut off query parameters */ + + r = [uri rangeOfString:@"?" options:NSBackwardsSearch]; + if (r.length > 0) + uri = [uri substringToIndex:r.location]; + + /* next: strip trailing slash */ + + if ([uri hasSuffix:@"/"]) uri = [uri substringToIndex:([uri length] - 1)]; + r = [uri rangeOfString:@"/" options:NSBackwardsSearch]; + + /* then: cut of last path component */ + + if (r.length == 0) // no slash? are we at root? + return @"/"; + + return [uri substringFromIndex:(r.location + 1)]; +} + +/* date */ + +- (NSCalendarDate *)selectedDate { + NSString *s; + + s = [self queryParameterForKey:@"day"]; + if(s) { + return [self dateForDateString:s]; + } + return [NSCalendarDate date]; +} + +- (NSString *)dateStringForDate:(NSCalendarDate *)_date { + return [_date descriptionWithCalendarFormat:@"%Y%m%d"]; +} + +- (NSCalendarDate *)dateForDateString:(NSString *)_dateString { + return [NSCalendarDate dateWithString:_dateString calendarFormat:@"%Y%m%d"]; +} + +@end diff --git a/Misc/ZideStore/UI-X/Common/UIxElemBuilder.m b/Misc/ZideStore/UI-X/Common/UIxElemBuilder.m new file mode 100644 index 000000000..ba7dcfa62 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxElemBuilder.m @@ -0,0 +1,86 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxElemBuilder.m 30 2004-06-11 12:07:09Z znek $ + +#include + +/* + This builder builds various elements from the UI-X product. + + All tags are mapped into the namespace (XMLNS_OD_BIND). + + maps to UIxTabView + maps to UIxTabItem +*/ + +@interface UIxElemBuilder : WOxTagClassElemBuilder +{ +} + +@end + +#include +#include "common.h" + +#define XMLNS_UIX @"OGo:uix" + + +@implementation UIxElemBuilder + +- (Class)classForElement:(id)_element { + NSString *tagName; + unsigned tl; + unichar c1; + + if (![[_element namespaceURI] isEqualToString:XMLNS_UIX]) + return Nil; + + tagName = [_element tagName]; + if ((tl = [tagName length]) < 2) + return Nil; + + c1 = [tagName characterAtIndex:0]; + + switch (c1) { + case 't': { /* starting with 't' */ + unichar c2; + + c2 = [tagName characterAtIndex:1]; + + if (tl == 3 && c2 == 'a') { + if ([tagName characterAtIndex:2] == 'b') + return NSClassFromString(@"UIxTabItem"); + } + + if (tl > 5) { + if (c2 == 'a') { + if ([tagName isEqualToString:@"tabview"]) + return NSClassFromString(@"UIxTabView"); + } + } + break; + } + } + + return Nil; +} + +@end /* UIxElemBuilder */ diff --git a/Misc/ZideStore/UI-X/Common/UIxPageFrame.m b/Misc/ZideStore/UI-X/Common/UIxPageFrame.m new file mode 100644 index 000000000..07553a3fe --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxPageFrame.m @@ -0,0 +1,44 @@ +// $Id: UIxPageFrame.m 59 2004-06-22 13:40:19Z znek $ + +#include +#include +#include + + +@interface UIxPageFrame : SoComponent +{ + NSString *title; +} + +@end + +#include "common.h" + +@implementation UIxPageFrame + +- (void)dealloc { + [self->title release]; + [super dealloc]; +} + +/* accessors */ + +- (void)setTitle:(NSString *)_value { + ASSIGN(self->title, _value); +} + +- (NSString *)title { + return self->title; +} + +- (NSString *)login { + WOContext *ctx; + SoUser *user; + + ctx = [self context]; + user = [[[self clientObject] authenticatorInContext:ctx] + userInContext:ctx]; + return [user login]; +} + +@end /* UIxPageFrame */ diff --git a/Misc/ZideStore/UI-X/Common/UIxPageFrame.wox b/Misc/ZideStore/UI-X/Common/UIxPageFrame.wox new file mode 100644 index 000000000..efc1f4d93 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxPageFrame.wox @@ -0,0 +1,308 @@ + + + + + <var:string value="title"/> + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + SOGo () + +
+ + + + + + +
+ + + + + +
+
+
+ + News + +
+ + Projects + +
+ + Contacts + +
+ + Companies + +
+ + Calendar + +
+ + Tasks + +
+
+ +
+ + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Misc +
+ + + + + + +
+ + + + + +
+
+
+ New Email +
+ Inbox +
+ Preferences +
+ Home +
+ Desktop +
+ Logout +
+
+ +
+ + + + + +
+
+
+ +
+ + + + + + + + +
+ + + + + +
+
+ + + + + +
+ + 2000-2004 SKYRIX Software AG. + We welcome your + feedback. + + + + No sessions required! ;-) + +
+
+ + diff --git a/Misc/ZideStore/UI-X/Common/UIxTabItem.m b/Misc/ZideStore/UI-X/Common/UIxTabItem.m new file mode 100644 index 000000000..8f3c27030 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxTabItem.m @@ -0,0 +1,475 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxTabItem.m 31 2004-06-11 15:47:50Z znek $ + +#include "UIxTabView.h" +#include "common.h" + +#if DEBUG +# define DEBUG_JS 1 +#endif + +/* context keys */ +extern NSString *UIxTabView_HEAD; +extern NSString *UIxTabView_BODY; +extern NSString *UIxTabView_KEYS; +extern NSString *UIxTabView_SCRIPT; +extern NSString *UIxTabView_ACTIVEKEY; +extern NSString *UIxTabView_COLLECT; + +@implementation UIxTabItem + +static Class StrClass = Nil; + ++ (int)version { + return [super version] + 0; +} ++ (void)initialize { + StrClass = [NSString class]; +} + +static NSString *retStrForInt(int i) { + switch(i) { + case 0: return @"0"; + case 1: return @"1"; + case 2: return @"2"; + case 3: return @"3"; + case 4: return @"4"; + case 5: return @"5"; + case 6: return @"6"; + case 7: return @"7"; + case 8: return @"8"; + case 9: return @"9"; + case 10: return @"10"; + // TODO: find useful count! + default: + return [[StrClass alloc] initWithFormat:@"%i", i]; + } +} + +- (id)initWithName:(NSString *)_name + associations:(NSDictionary *)_config + template:(WOElement *)_subs +{ + if ((self = [super initWithName:_name associations:_config template:_subs])) { + self->key = WOExtGetProperty(_config, @"key"); + self->label = WOExtGetProperty(_config, @"label"); + + self->isScript = WOExtGetProperty(_config, @"isScript"); + self->href = WOExtGetProperty(_config, @"href"); + + self->icon = WOExtGetProperty(_config, @"icon"); + self->action = WOExtGetProperty(_config, @"action"); + + self->tabStyle = WOExtGetProperty(_config, @"tabStyle"); + self->selectedTabStyle = WOExtGetProperty(_config, @"selectedTabStyle"); + + self->tabIcon = WOExtGetProperty(_config, @"tabIcon"); + self->leftTabIcon = WOExtGetProperty(_config, @"leftTabIcon"); + self->selectedTabIcon = WOExtGetProperty(_config, @"selectedTabIcon"); + + self->asBackground = WOExtGetProperty(_config, @"asBackground"); + self->width = WOExtGetProperty(_config, @"width"); + self->height = WOExtGetProperty(_config, @"height"); + self->activeBgColor = WOExtGetProperty(_config, @"activeBgColor"); + self->inactiveBgColor = WOExtGetProperty(_config, @"inactiveBgColor"); + + self->template = [_subs retain]; + } + return self; +} + +- (void)dealloc { + [self->key release]; + [self->label release]; + + [self->href release]; + + [self->action release]; + + [self->isScript release]; + [self->template release]; + + [self->tabStyle release]; + [self->selectedTabStyle release]; + + [self->icon release]; + [self->leftTabIcon release]; + [self->selectedTabIcon release]; + [self->tabIcon release]; + + [self->asBackground release]; + [self->width release]; + [self->height release]; + + [self->activeBgColor release]; + [self->inactiveBgColor release]; + + [super dealloc]; +} + +/* responder */ + +- (void)takeValuesFromRequest:(WORequest *)_rq inContext:(WOContext *)_ctx { + NSString *activeTabKey; + NSString *myTabKey; + BOOL doCheck; + + if ([_ctx objectForKey:UIxTabView_HEAD]) { + /* head clicks */ + [[_ctx component] debugWithFormat: + @"UIxTabItem: head takes (no) values, eid='%@'", + [_ctx elementID]]; + return; + } + + if ((activeTabKey = [_ctx objectForKey:UIxTabView_BODY]) == nil) { + [[_ctx component] debugWithFormat:@"UIxTabItem: invalid state"]; + [self->template takeValuesFromRequest:_rq inContext:_ctx]; + return; + } + + myTabKey = [self->key stringValueInComponent:[_ctx component]]; + doCheck = [self->isScript boolValueInComponent:[_ctx component]]; + + if ([activeTabKey isEqualToString:myTabKey] || doCheck) { +#if ADD_OWN_ELEMENTIDS + [_ctx appendElementIDComponent:activeTabKey]; +#endif + +#if DEBUG_TAKEVALUES + [[_ctx component] debugWithFormat: + @"UIxTabItem: body takes values, eid='%@'", + [_ctx elementID]]; +#endif + + [self->template takeValuesFromRequest:_rq inContext:_ctx]; +#if ADD_OWN_ELEMENTIDS + [_ctx deleteLastElementIDComponent]; +#endif + } +#if DEBUG_TAKEVALUES + else { + [[_ctx component] debugWithFormat: + @"UIxTabItem: body takes no values, eid='%@'", + [_ctx elementID]]; + } +#endif +} + +- (id)invokeActionForRequest:(WORequest *)_req inContext:(WOContext *)_ctx { + id result; + WOAssociation *tmp; + NSString *activeTabKey; + + if ((tmp = [_ctx objectForKey:UIxTabView_HEAD])) { + /* click on tab icon */ + NSString *tabkey; + + tabkey = [_ctx currentElementID]; + [_ctx consumeElementID]; + [_ctx appendElementIDComponent:tabkey]; + + if ([tmp isValueSettable]) + [tmp setValue:tabkey inComponent:[_ctx component]]; + +#if 0 + result = [self->action valueInComponent:[_ctx component]]; +#endif + + [_ctx deleteLastElementIDComponent]; + } + else if ((activeTabKey = [_ctx objectForKey:UIxTabView_BODY])) { + /* clicked somewhere in the (active) body */ + result = [self->template invokeActionForRequest:_req inContext:_ctx]; + } + else { + [[_ctx component] logWithFormat:@"UIxTabItem: invalid invoke state"]; + result = [self->template invokeActionForRequest:_req inContext:_ctx]; + } + + return result; +} + +/* info collection */ + +- (void)_collectInContext:(WOContext *)_ctx key:(NSString *)k { + BOOL isLeft = NO; + NSMutableArray *keys; + UIxTabItemInfo *info; + WOComponent *cmp; + + cmp = [_ctx component]; + keys = [_ctx objectForKey:UIxTabView_KEYS]; + if (keys == nil) { + keys = [[[NSMutableArray alloc] init] autorelease]; + [_ctx setObject:keys forKey:UIxTabView_KEYS]; + isLeft = YES; + } + + if (k == nil) { + /* auto-assign a key */ + k = retStrForInt([keys count]); + } + else + k = [k retain]; + [_ctx appendElementIDComponent:k]; + + info = [[UIxTabItemInfo alloc] init]; + info->key = [k copy]; + info->label = [[self->label stringValueInComponent:cmp] copy]; + info->icon = [[self->icon stringValueInComponent:cmp] copy]; +#if 0 + info->uri = [[_ctx componentActionURL] copy]; +#else + info->uri = [[self->href stringValueInComponent:cmp] copy]; +#endif + info->isScript = [self->isScript boolValueInComponent:cmp]; + info->tabIcon = [[self->tabIcon stringValueInComponent:cmp] copy]; + info->leftIcon = [[self->leftTabIcon stringValueInComponent:cmp] copy]; + info->selIcon = [[self->selectedTabIcon stringValueInComponent:cmp] + copy]; + info->tabStyle = [[self->tabStyle stringValueInComponent:cmp] copy]; + info->selectedTabStyle = [[self->selectedTabStyle stringValueInComponent:cmp] + copy]; + + if (self->asBackground == nil) + info->asBackground = 0; + else { + info->asBackground + = ([self->asBackground boolValueInComponent:cmp]) ? 1 : -1; + } + info->width = [[self->width stringValueInComponent:cmp] copy]; + info->height = [[self->height stringValueInComponent:cmp] copy]; + info->activeBg = [[self->activeBgColor stringValueInComponent:cmp] + copy]; + info->inactiveBg = [[self->inactiveBgColor stringValueInComponent:cmp] + copy]; + + if (info->leftIcon == nil) info->leftIcon = [info->tabIcon copy]; + + [keys addObject:info]; + [info release]; + [k release]; + + [_ctx deleteLastElementIDComponent]; +} + +/* header generation */ + +- (void)_appendHeadToResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx + activeKey:(NSString *)activeKey + key:(NSString *)k +{ + /* head is currently generated in UIxTabView */ +#if 0 + // note: some associations can be inherited by UIxTabView ! + BOOL doImages; + WOComponent *comp; + BOOL doBgIcon; + NSString *label; + NSString *w, *h; + + doImages = ![[[_ctx request] clientCapabilities] isTextModeBrowser]; + comp = [_ctx component]; + + doBgIcon = self->asBackground && doImages + ? [self->asBackground boolValueInComponent:comp] ? YES : NO + : NO; + + if ((label = [self->label stringValueInComponent:comp]) == nil) + label = k; + + if (doImages) { + /* lookup image */ + NSString *imgName = nil; + // ... + + imgUri = WEUriOfResource(imgName, _ctx); + if ([imgUri length] < 1) + doImages = NO; + } + + // .... _isActive +#endif +} + +/* body generation */ + +- (void)_appendBodyToResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx + activeKey:(NSString *)tmp + key:(NSString *)k +{ + BOOL doScript; + BOOL isScript_; + BOOL isActive; + + doScript = [[_ctx objectForKey:UIxTabView_SCRIPT] boolValue]; + isScript_ = [self->isScript boolValueInComponent:[_ctx component]]; + isActive = [tmp isEqualToString:k]; + + if (doScript && (isActive || isScript_)) { + [_response appendContentString:@"
\n"]; + } + + if (isActive || (doScript && isScript_)) { + /* content is active or used as layer*/ +#if ADD_OWN_ELEMENTIDS + [_ctx appendElementIDComponent:k]; +#endif +#if DEBUG && 0 + NSLog(@"TAB: %@", k); +#endif + + [self->template appendToResponse:_response inContext:_ctx]; + +#if ADD_OWN_ELEMENTIDS + [_ctx deleteLastElementIDComponent]; +#endif + } + + if (doScript && (isActive || isScript_)) { + NSString *jsout; + [_response appendContentString:@"
"]; + + jsout = [NSString alloc]; + jsout = [jsout initWithFormat: + @""]; + } +} + +/* master generation method */ + +- (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx { + NSString *k; + BOOL doForm; + id tmp; + + doForm = [_ctx isInForm]; + k = [self->key stringValueInComponent:[_ctx component]]; + + if ((tmp = [_ctx objectForKey:UIxTabView_HEAD])) { + if ([tmp isEqual:UIxTabView_COLLECT]) { + [self _collectInContext:_ctx key:k]; + } + else { + [self _appendHeadToResponse:_response inContext:_ctx + activeKey:tmp key:k]; + } + } + else if ((tmp = [_ctx objectForKey:UIxTabView_BODY])) { + [self _appendBodyToResponse:_response inContext:_ctx + activeKey:tmp key:k]; + } + else { + NSLog(@"WARNING(%s): invalid UIxTabItem state !!!", __PRETTY_FUNCTION__); + [_response appendContentString:@"[invalid state]"]; + } +} + +@end /* UIxTabItem */ + +@implementation UIxTabItemInfo + +- (void)dealloc { + [self->uri release]; + [self->icon release]; + [self->label release]; + [self->key release]; + [self->tabStyle release]; + [self->selectedTabStyle release]; + [self->tabIcon release]; + [self->selIcon release]; + [self->leftIcon release]; + [self->width release]; + [self->height release]; + [self->activeBg release]; + [self->inactiveBg release]; + + [super dealloc]; +} + +/* accessors */ + +- (NSString *)key { + return self->key; +} +- (NSString *)label { + return self->label; +} +- (NSString *)icon { + return self->icon; +} +- (NSString *)uri { + return self->uri; +} +- (BOOL)isScript { + return self->isScript; +} + +- (int)asBackground { + return self->asBackground; +} + +- (NSString *)width { + return self->width; +} + +- (NSString *)height { + return self->height; +} + +- (NSString *)activeBg { + return self->activeBg; +} + +- (NSString *)inactiveBg { + return self->inactiveBg; +} + +@end /* UIxTabItemInfo */ diff --git a/Misc/ZideStore/UI-X/Common/UIxTabView.h b/Misc/ZideStore/UI-X/Common/UIxTabView.h new file mode 100644 index 000000000..40da978e3 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxTabView.h @@ -0,0 +1,134 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxTabView.h 32 2004-06-14 14:41:46Z znek $ + +#ifndef __UIxTabView_H__ +#define __UIxTabView_H__ + +/* + This is a library private header ! +*/ + +#include + +/* + Does not support tab-head-creation from nested components !!! + + hh: Why not ??? -> Because selection is manipulated in sub-elements + + UIxTabView creates element-IDs like + + .h.*.$key. for the tab-items (head-mode) + .b.$key... for the tab-content (content-mode) (new, hh) + + !!! UIxTabView JavaScript can't handle duplicate tab-keys !!! +*/ + +@interface UIxTabView : WODynamicElement +{ + WOAssociation *selection; + + /* config: */ + WOAssociation *headerStyle; + WOAssociation *bodyStyle; + WOAssociation *tabStyle; + WOAssociation *selectedTabStyle; + + /* old config: */ + WOAssociation *bgColor; + WOAssociation *nonSelectedBgColor; + WOAssociation *leftCornerIcon; + WOAssociation *rightCornerIcon; + + WOAssociation *tabIcon; + WOAssociation *leftTabIcon; + WOAssociation *selectedTabIcon; + + WOAssociation *asBackground; + WOAssociation *width; + WOAssociation *height; + WOAssociation *activeBgColor; + WOAssociation *inactiveBgColor; + + WOAssociation *fontColor; + WOAssociation *fontSize; + WOAssociation *fontFace; + + id template; +} + +@end + +@interface UIxTabItem : WODynamicElement +{ + WOAssociation *key; + WOAssociation *label; + + WOAssociation *href; + WOAssociation *isScript; + + WOAssociation *action; + WOAssociation *icon; + + /* config: */ + WOAssociation *tabStyle; + WOAssociation *selectedTabStyle; + + /* old config */ + WOAssociation *tabIcon; + WOAssociation *leftTabIcon; + WOAssociation *selectedTabIcon; + + WOAssociation *asBackground; + WOAssociation *width; + WOAssociation *height; + WOAssociation *activeBgColor; + WOAssociation *inactiveBgColor; + + id template; +} + +@end + +@interface UIxTabItemInfo : NSObject +{ +@public + NSString *label; + NSString *icon; + NSString *key; + NSString *uri; + NSString *tabIcon; + NSString *leftIcon; + NSString *selIcon; + NSString *tabStyle; + NSString *selectedTabStyle; + + int asBackground; // 0 -> not set, 1 -> YES, else -> NO + NSString *width; + NSString *height; + NSString *activeBg; + NSString *inactiveBg; + + BOOL isScript; +} +@end + +#endif /* __UIxTabView_H__ */ diff --git a/Misc/ZideStore/UI-X/Common/UIxTabView.m b/Misc/ZideStore/UI-X/Common/UIxTabView.m new file mode 100644 index 000000000..d70cf72c8 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxTabView.m @@ -0,0 +1,819 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxTabView.m 37 2004-06-15 17:52:39Z znek $ + +#include "UIxTabView.h" +#include "common.h" +#import +#import +#import +#include + +#if DEBUG +// # define DEBUG_TAKEVALUES 1 +# define DEBUG_JS 1 +#endif + +/* context keys */ +NSString *UIxTabView_HEAD = @"UIxTabView_head"; +NSString *UIxTabView_BODY = @"UIxTabView_body"; +NSString *UIxTabView_KEYS = @"UIxTabView_keys"; +NSString *UIxTabView_SCRIPT = @"UIxTabView_script"; +NSString *UIxTabView_ACTIVEKEY = @"UIxTabView_activekey"; +NSString *UIxTabView_COLLECT = @"~tv~"; + +@implementation UIxTabView + +static NSNumber *YesNumber; + ++ (void)initialize { + if (YesNumber == nil) + YesNumber = [[NSNumber numberWithBool:YES] retain]; +} + ++ (int)version { + return [super version] + 0; +} + +- (id)initWithName:(NSString *)_name + associations:(NSDictionary *)_config + template:(WOElement *)_subs +{ + if ((self = [super initWithName:_name associations:_config template:_subs])) { + self->selection = WOExtGetProperty(_config, @"selection"); + + self->headerStyle = WOExtGetProperty(_config, @"headerStyle"); + self->bodyStyle = WOExtGetProperty(_config, @"bodyStyle"); + self->tabStyle = WOExtGetProperty(_config, @"tabStyle"); + self->selectedTabStyle = WOExtGetProperty(_config, @"selectedTabStyle"); + + self->bgColor = WOExtGetProperty(_config, @"bgColor"); + self->nonSelectedBgColor = WOExtGetProperty(_config, @"nonSelectedBgColor"); + self->leftCornerIcon = WOExtGetProperty(_config, @"leftCornerIcon"); + self->rightCornerIcon = WOExtGetProperty(_config, @"rightCornerIcon"); + + self->tabIcon = WOExtGetProperty(_config, @"tabIcon"); + self->leftTabIcon = WOExtGetProperty(_config, @"leftTabIcon"); + self->selectedTabIcon = WOExtGetProperty(_config, @"selectedTabIcon"); + + self->asBackground = WOExtGetProperty(_config, @"asBackground"); + self->width = WOExtGetProperty(_config, @"width"); + self->height = WOExtGetProperty(_config, @"height"); + self->activeBgColor = WOExtGetProperty(_config, @"activeBgColor"); + self->inactiveBgColor = WOExtGetProperty(_config, @"inactiveBgColor"); + + self->fontColor = WOExtGetProperty(_config, @"fontColor"); + self->fontSize = WOExtGetProperty(_config, @"fontSize"); + self->fontFace = WOExtGetProperty(_config, @"fontFace"); + + self->template = RETAIN(_subs); + } + return self; +} + +- (void)dealloc { + [self->selection release]; + + [self->headerStyle release]; + [self->bodyStyle release]; + [self->tabStyle release]; + [self->selectedTabStyle release]; + + RELEASE(self->bgColor); + RELEASE(self->nonSelectedBgColor); + RELEASE(self->leftCornerIcon); + RELEASE(self->rightCornerIcon); + + RELEASE(self->leftTabIcon); + RELEASE(self->selectedTabIcon); + RELEASE(self->tabIcon); + + RELEASE(self->width); + RELEASE(self->height); + + RELEASE(self->activeBgColor); + RELEASE(self->inactiveBgColor); + + RELEASE(self->fontColor); + RELEASE(self->fontSize); + RELEASE(self->fontFace); + + RELEASE(self->template); + [super dealloc]; +} + +/* nesting */ + +- (id)saveNestedStateInContext:(WOContext *)_ctx { + return nil; +} +- (void)restoreNestedState:(id)_state inContext:(WOContext *)_ctx { + if (_state == nil) return; +} + +- (NSArray *)collectKeysInContext:(WOContext *)_ctx { + /* collect mode, collects all keys */ + [_ctx setObject:UIxTabView_COLLECT forKey:UIxTabView_HEAD]; + + [self->template appendToResponse:nil inContext:_ctx]; + + [_ctx removeObjectForKey:UIxTabView_HEAD]; + return [_ctx objectForKey:UIxTabView_KEYS]; +} + +/* responder */ + +- (void)takeValuesFromRequest:(WORequest *)_req inContext:(WOContext *)_ctx { + id nestedState; + NSString *activeTabKey; + + activeTabKey = [self->selection stringValueInComponent:[_ctx component]]; + NSLog(@"%s activeTabKey:%@", __PRETTY_FUNCTION__, activeTabKey); + nestedState = [self saveNestedStateInContext:_ctx]; + [_ctx appendElementIDComponent:@"b"]; + [_ctx appendElementIDComponent:activeTabKey]; + + [_ctx setObject:activeTabKey forKey:UIxTabView_BODY]; + +#if DEBUG_TAKEVALUES + [[_ctx component] debugWithFormat:@"UIxTabView: body takes values, eid='%@'", + [_ctx elementID]]; +#endif + + [self->template takeValuesFromRequest:_req inContext:_ctx]; + + [_ctx removeObjectForKey:UIxTabView_BODY]; + [_ctx deleteLastElementIDComponent]; // activeKey + [_ctx deleteLastElementIDComponent]; /* 'b' */ + [self restoreNestedState:nestedState inContext:_ctx]; +} + +- (id)invokeActionForRequest:(WORequest *)_req inContext:(WOContext *)_ctx { + NSString *key; + id result; + id nestedState; + + if ((key = [_ctx currentElementID]) == nil) + return nil; + + result = nil; + nestedState = [self saveNestedStateInContext:_ctx]; + + if ([key isEqualToString:@"h"]) { + /* header action */ + //NSString *urlKey; + + [_ctx consumeElementID]; + [_ctx appendElementIDComponent:@"h"]; +#if 0 + if ((urlKey = [_ctx currentElementID]) == nil) { + [[_ctx application] + debugWithFormat:@"missing active head tab key !"]; + } + else { + //NSLog(@"clicked: %@", urlKey); + [_ctx consumeElementID]; + [_ctx appendElementIDComponent:urlKey]; + } +#endif + + [_ctx setObject:self->selection forKey:UIxTabView_HEAD]; + result = [self->template invokeActionForRequest:_req inContext:_ctx]; + [_ctx removeObjectForKey:UIxTabView_HEAD]; + +#if 0 + if (urlKey) + [_ctx deleteLastElementIDComponent]; // active key +#endif + [_ctx deleteLastElementIDComponent]; // 'h' + } + else if ([key isEqualToString:@"b"]) { + /* body action */ + NSString *activeTabKey, *urlKey; + + [_ctx consumeElementID]; + [_ctx appendElementIDComponent:@"b"]; + + if ((urlKey = [_ctx currentElementID]) == nil) { + [[_ctx application] + debugWithFormat:@"missing active body tab key !"]; + } + else { + //NSLog(@"clicked: %@", urlKey); + [_ctx consumeElementID]; + [_ctx appendElementIDComponent:urlKey]; + } + + activeTabKey = [self->selection stringValueInComponent:[_ctx component]]; + [_ctx setObject:activeTabKey forKey:UIxTabView_BODY]; + + result = [self->template invokeActionForRequest:_req inContext:_ctx]; + + [_ctx removeObjectForKey:UIxTabView_BODY]; + + if (urlKey) + [_ctx deleteLastElementIDComponent]; // active key + [_ctx deleteLastElementIDComponent]; // 'b' + } + else { + [[_ctx application] + debugWithFormat:@"unknown tab container key '%@'", key]; + } + + [self restoreNestedState:nestedState inContext:_ctx]; + return result; +} + +- (NSString *)_tabViewCountInContext:(WOContext *)_ctx { + int count; + count = [[_ctx valueForKey:@"UIxTabViewScriptDone"] intValue]; + return [NSString stringWithFormat:@"%d",count]; +} + +- (NSString *)scriptHref:(UIxTabItemInfo *)_info + inContext:(WOContext *)_ctx + isLeft:(BOOL)_isLeft + keys:(NSArray *)_keys +{ + NSMutableString *result = [NSMutableString string]; + UIxTabItemInfo *tmp; + NSString *activeKey; + int i, cnt; + NSString *elID; + NSString *tstring; + + activeKey = [self->selection stringValueInComponent:[_ctx component]]; + [result appendString:@"JavaScript:showTab("]; + [result appendString:_info->key]; + [result appendString:@"Tab);"]; + + [result appendString:@"swapCorners("]; + tstring = (!_isLeft) + ? @"tabCorner%@,tabCornerLeft%@);" + : @"tabCornerLeft%@,tabCorner%@);"; + elID = [self _tabViewCountInContext:_ctx]; + [result appendString:[NSString stringWithFormat:tstring,elID,elID]]; + + for (i=0, cnt = [_keys count]; i < cnt; i++) { + tmp = [_keys objectAtIndex:i]; + + if ((tmp->isScript || [tmp->key isEqualToString:activeKey]) + && ![tmp->key isEqualToString:_info->key]) { + [result appendString:@"hideTab("]; + [result appendString:tmp->key]; + [result appendString:@"Tab);"]; + } + } + return result; +} + +- (void)appendLink:(UIxTabItemInfo *)_info + toResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx + isActive:(BOOL)_isActive isLeft:(BOOL)_isLeft + doScript:(BOOL)_doScript keys:(NSArray *)_keys +{ + NSString *headUri = nil; + NSString *label = nil; + NSString *scriptHref = nil; + NSString *styleName = nil; + + WEClientCapabilities *ccaps; + WOComponent *comp; + + ccaps = [[_ctx request] clientCapabilities]; + + comp = [_ctx component]; + headUri = _info->uri; + + if ((label = _info->label) == nil) + label = _info->key; + + if (_isActive) { + styleName = (_info->selectedTabStyle) + ? _info->selectedTabStyle + : [self->selectedTabStyle stringValueInComponent:comp]; + } + else { + styleName = (_info->tabStyle) + ? _info->tabStyle + : [self->tabStyle stringValueInComponent:comp]; + } + + [_response appendContentString:@"']; + + [_response appendContentString:@"isScript || _isActive)) { + scriptHref = + [self scriptHref:_info inContext:_ctx isLeft:_isLeft keys:_keys]; + [_response appendContentHTMLAttributeValue:scriptHref]; + } + else { + [_response appendContentHTMLAttributeValue:headUri]; + } + + [_response appendContentString:@"\" "]; + [_response appendContentString: + [NSString stringWithFormat:@"name='%@TabLink'", _info->key]]; + [_response appendContentString:@">"]; + + if ([label length] < 1) + label = _info->key; + [_response appendContentString:@""]; + [_response appendContentHTMLString:label]; + [_response appendContentString:@""]; + + [_response appendContentString:@""]; + + [_response appendContentString:@""]; + +#if 0 + if (_doScript && (_info->isScript || _isActive)) { + NSString *k; // key + NSString *s; // selected tab icon + NSString *u; // unselected tab icon + //NSString *out; + + k = _info->key; + s = _info->selIcon; // selectedTabIcon + u = (_isLeft) ? _info->leftIcon : _info->tabIcon; + + s = WEUriOfResource(s, _ctx); + u = WEUriOfResource(u, _ctx); + + s = ([s length] < 1) ? imgUri : s; + u = ([u length] < 1) ? imgUri : u; + +#if 0 + out = [NSString alloc]; + out = [out initWithFormat: + @"", + k, k, k, k, scriptHref, k, headUri, + k, k, k, k, + k, u, k, k, s + ]; + + [_response appendContentString:out]; + RELEASE(out); +#else +# define _appendStr_(_str_) [_response appendContentString:_str_] + _appendStr_(@""); +#undef _appendStr_ +#endif + } +#endif +} + +- (void)appendSubmitButton:(UIxTabItemInfo *)_info + toResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx + isActive:(BOOL)_isActive isLeft:(BOOL)_left + doScript:(BOOL)_doScript keys:(NSArray *)_keys +{ + [self appendLink:_info + toResponse:_response + inContext:_ctx + isActive:_isActive isLeft:_left + doScript:_doScript keys:_keys]; +} + +- (void)_appendTabViewJSScriptToResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx +{ + [_response appendContentString: + @""]; +} + +- (void)_appendHeaderRowToResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx + keys:(NSArray *)keys activeKey:(NSString *)activeKey + doScript:(BOOL)doScript +{ + unsigned i, count; + BOOL doForm; + NSString *styleName; + + doForm = NO; /* generate form controls ? */ + + [_response appendContentString:@""]; + + styleName = [self->headerStyle stringValueInComponent:[_ctx component]]; + if(styleName) { + [_response appendContentString: + @""]; + } + else { + [_response appendContentString: + @"
"]; + } + + for (i = 0, count = [keys count]; i < count; i++) { + UIxTabItemInfo *info; + NSString *key; + BOOL isActive; + + info = [keys objectAtIndex:i]; + key = info->key; + isActive = [key isEqualToString:activeKey]; + + [_ctx appendElementIDComponent:key]; + + if (doForm) { + /* tab is inside of a FORM, so produce submit buttons */ + [self appendSubmitButton:info + toResponse:_response + inContext:_ctx + isActive:isActive + isLeft:(i == 0) ? YES : NO + doScript:doScript + keys:keys]; + } + else { + /* tab is not in a FORM, generate hyperlinks for tab */ + [self appendLink:info + toResponse:_response + inContext:_ctx + isActive:isActive + isLeft:(i == 0) ? YES : NO + doScript:doScript + keys:keys]; + } + + [_ctx deleteLastElementIDComponent]; + } + // [_response appendContentString:@""]; + [_response appendContentString:@"
"]; + [_response appendContentString:@""]; +} + +- (void)_appendHeaderFootRowToResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx + bgcolor:(NSString *)bgcolor + doScript:(BOOL)doScript + isLeftActive:(BOOL)isLeftActive +{ + NSString *styleName; + [_response appendContentString:@" bodyStyle stringValueInComponent:[_ctx component]]; + if(styleName) { + [_response appendContentString:@" class='"]; + [_response appendContentHTMLAttributeValue:styleName]; + [_response appendContentCharacter:'\'']; + } + if (bgcolor) { + [_response appendContentString:@" bgcolor=\""]; + [_response appendContentHTMLAttributeValue:bgcolor]; + [_response appendContentString:@"\""]; + } + [_response appendContentString:@">\n"]; + + /* left corner */ + [_response appendContentString:@" "]; + + if (doScript) { + [_response appendContentString:@"
"]; + [_response appendContentString:@" "]; + [_response appendContentString:@"
"]; + } + else if (isLeftActive) + [_response appendContentString:@" "]; + + if (doScript) { + [_response appendContentString:@"
"]; + } + + if (!isLeftActive || doScript) { + NSString *uri; + + uri = [self->leftCornerIcon stringValueInComponent:[_ctx component]]; + if ((uri = WEUriOfResource(uri, _ctx))) { + [_response appendContentString:@"\"\""]; + } + else + [_response appendContentString:@" "]; + } + if (doScript) + [_response appendContentString:@"
"]; + + [_response appendContentString:@"\n"]; + + /* right corner */ + [_response appendContentString:@" "]; + { + NSString *uri; + + uri = [self->rightCornerIcon stringValueInComponent:[_ctx component]]; + if ((uri = WEUriOfResource(uri, _ctx))) { + [_response appendContentString:@"\"\""]; + } + else + [_response appendContentString:@" "]; + } + [_response appendContentString:@"\n"]; + + [_response appendContentString:@" \n"]; +} + +- (void)_appendBodyRowToResponse:(WOResponse *)_response + inContext:(WOContext *)_ctx + bgcolor:(NSString *)bgcolor + activeKey:(NSString *)activeKey +{ + WEClientCapabilities *ccaps; + BOOL indentContent; + NSString *styleName; + + styleName = [self->bodyStyle stringValueInComponent:[_ctx component]]; + ccaps = [[_ctx request] clientCapabilities]; + + /* put additional padding table into content ??? */ + indentContent = [ccaps isFastTableBrowser] && ![ccaps isTextModeBrowser]; + + [_response appendContentString:@"']; + + if (indentContent) { + /* start padding table */ + [_response appendContentString: + @""]; + [_response appendContentString:@"
"]; + } + + [_ctx appendElementIDComponent:@"b"]; + [_ctx appendElementIDComponent:activeKey]; + + /* generate currently active body */ + { + [_ctx setObject:activeKey forKey:UIxTabView_BODY]; + [self->template appendToResponse:_response inContext:_ctx]; + [_ctx removeObjectForKey:UIxTabView_BODY]; + } + + [_ctx deleteLastElementIDComponent]; // activeKey + [_ctx deleteLastElementIDComponent]; // 'b' + + if (indentContent) + /* close padding table */ + [_response appendContentString:@"
"]; + + [_response appendContentString:@""]; +} + +- (BOOL)isLeftActiveInKeys:(NSArray *)keys activeKey:(NSString *)activeKey{ + unsigned i, count; + BOOL isLeftActive; + + isLeftActive = NO; + + for (i = 0, count = [keys count]; i < count; i++) { + UIxTabItemInfo *info; + + info = [keys objectAtIndex:i]; + + if ((i == 0) && [info->key isEqualToString:activeKey]) + isLeftActive = YES; + } + + return isLeftActive; +} + +- (void)appendToResponse:(WOResponse *)_response inContext:(WOContext *)_ctx { + WOComponent *cmp; + NSString *bgcolor; + BOOL isLeftActive; + BOOL doScript; + id nestedState; + NSString *activeKey; + NSArray *keys; + int tabViewCount; /* used for image id's and writing script once */ + + doScript = NO; /* perform tab-clicks on browser (use javascript) */ + tabViewCount = [[_ctx valueForKey:@"UIxTabViewScriptDone"] intValue]; + cmp = [_ctx component]; + + /* check for browser */ + { + WEClientCapabilities *ccaps; + //BOOL isJavaScriptBrowser; + + ccaps = [[_ctx request] clientCapabilities]; + doScript = [ccaps isInternetExplorer] && [ccaps isJavaScriptBrowser]; + doScript = (doScript && + [[[cmp session] + valueForKey:@"isJavaScriptEnabled"] boolValue]); + } + + /* disable javascript */ + doScript = NO; + + /* save state */ + + nestedState = [self saveNestedStateInContext:_ctx]; + + /* configure */ + + activeKey = [self->selection stringValueInComponent:cmp]; + + bgcolor = [self->bgColor stringValueInComponent:cmp]; + bgcolor = [bgcolor stringValue]; + + [_ctx appendElementIDComponent:@"h"]; + + /* collect & process keys (= available tabs) */ + + keys = [self collectKeysInContext:_ctx]; + + if (![[keys valueForKey:@"key"] containsObject:activeKey]) + /* selection is not available in keys */ + activeKey = nil; + + if ((activeKey == nil) && ([keys count] > 0)) { + /* no or invalid selection, use first key */ + activeKey = [[keys objectAtIndex:0] key]; + if ([self->selection isValueSettable]) + [self->selection setValue:activeKey inComponent:[_ctx component]]; + } + + if (doScript) { + doScript = [[keys valueForKey:@"isScript"] containsObject:YesNumber]; + [_ctx setObject:[NSNumber numberWithBool:doScript] + forKey:UIxTabView_SCRIPT]; + } + + /* start appending */ + + if ((doScript) && (tabViewCount == 0)) + [self _appendTabViewJSScriptToResponse:_response inContext:_ctx]; + + /* count up for unique tabCorner/tabCornerLeft images */ + [_ctx takeValue:[NSNumber numberWithInt:(tabViewCount + 1)] + forKey:@"UIxTabViewScriptDone"]; + + [_response appendContentString: + @""]; + + /* find out whether left is active */ + + isLeftActive = [self isLeftActiveInKeys:keys activeKey:activeKey]; + + /* generate header row */ + + [self _appendHeaderRowToResponse:_response inContext:_ctx + keys:keys activeKey:activeKey + doScript:doScript]; + + [_ctx deleteLastElementIDComponent]; // 'h' for head + [_ctx removeObjectForKey:UIxTabView_HEAD]; + +#if 0 + /* header foot row */ + + [self _appendHeaderFootRowToResponse:_response inContext:_ctx + bgcolor:bgcolor + doScript:doScript + isLeftActive:isLeftActive]; +#endif + + /* body row */ + + [self _appendBodyRowToResponse:_response inContext:_ctx + bgcolor:bgcolor + activeKey:activeKey]; + + /* close table */ + + [_response appendContentString:@"
"]; + [_ctx removeObjectForKey:UIxTabView_ACTIVEKEY]; + [_ctx removeObjectForKey:UIxTabView_KEYS]; + [self restoreNestedState:nestedState inContext:_ctx]; +} + +@end /* UIxTabView */ diff --git a/Misc/ZideStore/UI-X/Common/UIxWinClose.m b/Misc/ZideStore/UI-X/Common/UIxWinClose.m new file mode 100644 index 000000000..7af7edccb --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxWinClose.m @@ -0,0 +1,37 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxWinClose.m 59 2004-06-22 13:40:19Z znek $ + + +#include + + +@interface UIxWinClose : WOComponent +{ + +} + +@end + + +@implementation UIxWinClose + +@end diff --git a/Misc/ZideStore/UI-X/Common/UIxWinClose.wox b/Misc/ZideStore/UI-X/Common/UIxWinClose.wox new file mode 100644 index 000000000..35769e429 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/UIxWinClose.wox @@ -0,0 +1,6 @@ + +X diff --git a/Misc/ZideStore/UI-X/Common/Version b/Misc/ZideStore/UI-X/Common/Version new file mode 100644 index 000000000..d64ce5ad6 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/Version @@ -0,0 +1,5 @@ +# $Id: Version,v 1.1 2003/11/24 01:24:40 helge Exp $ + +SUBMINOR_VERSION:=1 + +# 1.1.0 requires NGObjWeb 4.2.202 diff --git a/Misc/ZideStore/UI-X/Common/bundle-info.plist b/Misc/ZideStore/UI-X/Common/bundle-info.plist new file mode 100644 index 000000000..c7081c18c --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/bundle-info.plist @@ -0,0 +1,40 @@ +{ + "__cvs__" = "$Id: bundle-info.plist,v 1.1 2003/11/24 01:24:40 helge Exp $"; + + requires = { + bundleManagerVersion = 1; + classes = ( + { name = NSObject; } + ); + }; + + provides = { + ZideStoreProducts = ( { name = CommonUIProduct; } ); + + classes = ( + { name = CommonUIProduct; }, + { name = UIxComponent; }, + { name = UIxPageFrame; }, + { name = UIxWinClose; }, + { name = UIxAppNavView; }, + { name = "UIxElemBuilder"; }, + { name = "UIxTabView"; }, + { name = "UIxTabItem"; }, + ); + + WOComponents = ( + { name = UIxPageFrame; }, + { name = UIxWinClose; }, + { name = UIxAppNavView; }, + ); + + WOxElemBuilder = ( + { name = "UIxElemBuilder"; }, + ); + + WODynamicElements = ( + { name = "UIxTabView"; }, + { name = "UIxTabItem"; }, + ); + }; +} diff --git a/Misc/ZideStore/UI-X/Common/calendar.css b/Misc/ZideStore/UI-X/Common/calendar.css new file mode 100644 index 000000000..34553bb4c --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/calendar.css @@ -0,0 +1,189 @@ +.aptview_title { + font-size: 10pt; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + color: #000000; + font-weight: bold; +} + +.aptview_text { + font-size: 10pt; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + color: #000000; +} + +.weekoverview_title { + font-size: 10pt; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + letter-spacing: 0pt; + color: #000000; + background-color: #d2d2cc; +} + +.weekoverview_title a { + color: #0033cc; + text-decoration: none; +} + +.weekoverview_title_hilite { + font-size: 10pt; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + letter-spacing: 0pt; + color: #000000; + background-color: #d2d2cc; + font-weight: bold; +} + +.weekoverview_title_hilite a { + color: #0033cc; + text-decoration: none; +} + +.weekoverview_title_daylink { + font-size: 12pt; + color: #0033cc; + font-weight: bold; +} + +.weekoverview_title_newlink { + font-size: 8pt; +} + +.weekoverview_holidayinfo { + font-size: 8pt; + font-weight: bold; +} + +.weekoverview_content { + color: #FFFFFF; + background-color: #e8e8e0; +} + +.weekoverview_content a { + color: #0000FF; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + letter-spacing: 0pt; + text-decoration: none; +} + +.weekoverview_content_hilite { + background-color: #fffff0; +} + +.weekoverview_content_hilite a { + color: #0000FF; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + letter-spacing: 0pt; + text-decoration: none; +} + +.monthoverview { + color: #000000; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 10pt; + letter-spacing: 0pt; + padding: 2px; +} + +.monthoverview a { + color: #0033cc; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 7pt; + font-style: normal; + font-weight: normal; + letter-spacing: 0pt; + text-decoration: none; +} + +.monthoverview a:hover { + text-decoration: underline; +} + +.monthoverview_title { + background-color: #d2d2cc; + text-align: center; +} + +.monthoverview_week { + background-color: #d2d2cc; + width: 16pt; + text-align: center; + vertical-align: middle; +} + +.monthoverview_week a { + color: #000000; + font-size: 10pt; +} + +.monthoverview_week_hilite { + background-color: #fffff0; + width: 16pt; + text-align: center; + vertical-align: middle; +} + +.monthoverview_week_hilite a { + color: #000000; + font-size: 10pt; +} + +.monthoverview_content { + background-color: #e8e8e0; + font-size: 9pt; + height: 60; +} + +.monthoverview_content a { + font-style: italic; + font-weight: bold; +} + +.monthoverview_content td { + text-align: let; + vertical-align: top; +} + + +.monthoverview_content_hilite { + background-color: #fffff0; + font-size: 9pt; + height: 60; +} + +.monthoverview_content_hilite a { + font-style: italic; + font-weight: bold; +} + +.monthoverview_content_dimmed { + background-color: #d2d2cc; + font-size: 9pt; + height: 60; +} + +.monthoverview_content_dimmed a { + font-style: normal; + font-weight: normal; +} + +.monthoverview_day a { + color: #000000; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 12pt; +} + +.monthoverview_day_new a { + font-style: normal; + font-weight: normal; +} + +.monthoverview_day_new a:hover { + font-style: normal; + font-weight: normal; + color: #ff0000; +} + +.monthoverview_content_link { + font-style: normal; + font-weight: normal; +} diff --git a/Misc/ZideStore/UI-X/Common/common.h b/Misc/ZideStore/UI-X/Common/common.h new file mode 100644 index 000000000..ea759a93a --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/common.h @@ -0,0 +1,155 @@ +/* + Copyright (C) 2004 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: common.h,v 1.1 2003/11/24 01:24:40 helge Exp $ + +#import + +#if LIB_FOUNDATION_LIBRARY +# include +#elif NeXT_Foundation_LIBRARY || COCOA_Foundation_LIBRARY +# include +# include +#endif + +#include +#include +#include + +@interface WOContext(WOExtensionsPrivate) +- (void)addActiveFormElement:(WOElement *)_element; +@end + +static inline id WOExtGetProperty(NSDictionary *_set, NSString *_name) { + id propValue = [_set objectForKey:_name]; + + if (propValue) { + propValue = [propValue retain]; + [(NSMutableDictionary *)_set removeObjectForKey:_name]; + } + return propValue; +} + +static inline NSString *WEUriOfResource(NSString *_name, WOContext *_ctx) { + NSArray *languages; + WOResourceManager *resourceManager; + NSString *uri; + + if (_name == nil) + return nil; + + languages = [_ctx hasSession] + ? [[_ctx session] languages] + : [[_ctx request] browserLanguages]; + + resourceManager = [[_ctx application] resourceManager]; + + uri = [resourceManager urlForResourceNamed:_name + inFramework:nil + languages:languages + request:[_ctx request]]; + if ([uri rangeOfString:@"/missingresource?"].length > 0) + uri = nil; + + return uri; +} + +static inline void WEAppendFont(WOResponse *_resp, + NSString *_color, + NSString *_face, + NSString *_size) +{ + [_resp appendContentString:@"']; +} + +static inline void WEAppendTD(WOResponse *_resp, + NSString *_align, + NSString *_valign, + NSString *_bgColor) +{ + [_resp appendContentString:@"']; +} + +static inline WOElement *WECreateElement(NSString *_className, + NSString *_name, + NSDictionary *_config, + WOElement *_template) +{ + Class c; + WOElement *result = nil; + NSMutableDictionary *config = nil; + + if ((c = NSClassFromString(_className)) == Nil) { + NSLog(@"%s: missing '%@' class", __PRETTY_FUNCTION__, _className); + return nil; + } + config = [NSMutableDictionary dictionaryWithCapacity:4]; + { + NSEnumerator *keyEnum; + id key; + + keyEnum = [_config keyEnumerator]; + + while ((key = [keyEnum nextObject])) { + WOAssociation *a; + + a = [WOAssociation associationWithValue:[_config objectForKey:key]]; + [config setObject:a forKey:key]; + } + } + result = [[c alloc] initWithName:_name + associations:config + template:_template]; + return [result autorelease]; +} + +#define OWGetProperty WOExtGetProperty diff --git a/Misc/ZideStore/UI-X/Common/images/OGoLogo.gif b/Misc/ZideStore/UI-X/Common/images/OGoLogo.gif new file mode 100755 index 0000000000000000000000000000000000000000..ea1b5f5551ab4b07432a323d084cc8174cb61549 GIT binary patch literal 2047 zcmcJM`&ZI=0){^zauLukh)PNmWEmz?plI4y3wVjJ3szQ|84{I}oi28_owz0lId~0= zP6#xav1a8|Q{j>$NfxHl*u^|#*0IYHVOvgn&aSTeN9=pvU*B_{^SsNJXQ!qWUkBfT zdjL#LO*!s)mCY{QbkBM`PsaRyzvGresa5LKy7(0)G+PJQN-t6UaGL( z)aDUy6Wcqzt|w#U%=&ntDV`c%aG*mfcX)muV{JB7$d%$!F?W|uD(|p&4*EY&2uf`Q zN9^KV`#!Z>ra6b@dJP@r?M2 z8dpVwL#m#p@*}H)i`ABX?n2AOR&C;GY^)k#!loICFlA6%Y*W)IoN<;Br-V7NsaA|4-3ECq zXa(A;LRkx}D5W*dN>Tn{5m*KJ7B5733*|iK^*zE2DxQwp6ve zhfitv+MtzZgiVGp&zFb@bwS0Bq1JX(ahBz@MdaNimVHX$vOj5C6-3#vnUyCE6eD_3Zo;9@p2QLx zz0&}jvwl&@Ka&8(G#6%Qi)OD)r;*NAZd`}U$U@+qD@$M>U#t9)R+Yz+QsX8AnIsSY z3J$d>E?|b`h7z-C(cRQ%#Pq`4)$m0jwW?Y`mLbw1=3e8mzln%1OPd}VF!+B-_8EeW zXr>!)a<}L11ey^+qJ{GWR;@Y6>?QIkA{RXhH+y6F*8?c-fyWJLAz|wfaqb<^I??-x zETSSVEc>Iu11yd#&dg-=mgkf|Uz{IOt@VUj3PD}G1;Fq>J)3RlMp}IRA8)We zI+dO2z638^&0zZSea#V!+2OZ7=fo`pV4xD;vgaWpc{0_f3rYMkBx5>B*D#Db@hAM3 z9y0{bQ>vPisz~XnPy6(s|3Ur|Tc(tP;OTM0j&Ie!Bf=Ep{Z4oWKj5O$_<=|HFyUN2 zhWv9^&Q(H{D=Ibb5^)O*d&l_osi^Y%iDwclSq6e2A!krcyS4rKo($q$#u-tfJOhX$ z!@~Fe=|CfUBr+YcvBV-jevI1=OGWN)Z?gZmY$+e%=W^Sfi*xdJtn7z)tH7SxgBlCdN{ol z%@dh|L1>8#x3pb5d{bLvdB!=sC(6Vzjh-wrZQ=EsF~F-_yn>XVFCA9lo{aWAA#-;3 zwOpVU9Sxfp4`u$ElfO^gesM3Cn*QL+^S+z0XzsnOsFcH5QDlyc@U9CL%UGX~XqL(_ zqK5<+{{^7t>$f7zpmft2niP`b@y_5{rqc+?WJ4?-Mnkkvs|{)d)Dt}<+qr3VaTCJ% zkbtD~>W2%^sDA^l-t8O^zRFG%_z5>Ee6&cB99H;wpPz7E5(9g5V^<_m4!{rp1)>R% A`2YX_ literal 0 HcmV?d00001 diff --git a/Misc/ZideStore/UI-X/Common/images/box_botleft.gif b/Misc/ZideStore/UI-X/Common/images/box_botleft.gif new file mode 100644 index 0000000000000000000000000000000000000000..edaa19035f05f7297deaacc8c649121b3ac61d6b GIT binary patch literal 100 zcmZ?wbhEHb(_Vg+_`Gis-;VpPMbC@Gcz+ZG}O(_4Xgw~ o=zy3Yy$mdp0xh1*R;AOXG<&$ZYdEKCB)X|^hH(_Vg+_`Gis-;VpPMbC@Gcz+ZG}O(_4Xgw~ q=zy3Yy$meU1}7vLrn29ia7wq+ftSlsw98P|Gs%k~s3Vw#!5RQ3XdaFL literal 0 HcmV?d00001 diff --git a/Misc/ZideStore/UI-X/Common/images/box_bottom.gif b/Misc/ZideStore/UI-X/Common/images/box_bottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..c63a9cf945095116016b61fa61625058a83474d5 GIT binary patch literal 43 scmZ?wbhEHb(_Vg+_`Gis-;VpPMbC@Gcz+ZG}O(_4Xgw~ q=zy3Yy$meU1}7A_m?keNSr&LyMBtPHm#2nUr-tI(?wyV-4AuZFzaMJ= literal 0 HcmV?d00001 diff --git a/Misc/ZideStore/UI-X/Common/images/box_topright.gif b/Misc/ZideStore/UI-X/Common/images/box_topright.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b3ca17b84e44500138bba6c5044721aa2c5723d GIT binary patch literal 101 zcmZ?wbhEHb(_Vg+_`Gis-;VpPMbC@Gcz+ZG}O(_4Xgw~ p=zy3Yy$mc;0t=LywyLWZDzfNY>Fh|Ltj$Y2csQN9XW literal 0 HcmV?d00001 diff --git a/Misc/ZideStore/UI-X/Common/images/line_left.gif b/Misc/ZideStore/UI-X/Common/images/line_left.gif new file mode 100644 index 0000000000000000000000000000000000000000..19415f34782520e996dfae64708d20ff3c147f23 GIT binary patch literal 264 zcmZ?wbhEHb)L>v_xXJ(m|NsC0_wWDTzyF@U{_^bAXJNaE5>As+ zyG@mGn=0=)UCDcfn%^wF(0Pt2%iJH-x*@J+OM3H;{H{HflMYr)JkYc7 z+Z^ zfx(hN2P6ve69b#-fd+>3oi{UDBvsjFd&I31<6h*o(2wtu$B~E@p^pCc%@;F_+7uY9 E0a6QnAs+ zyG@mGn=0=)UCDcfn%^wF(0Pt2%iJH-x*@J+OM3H;{H{HflMYr)JkYc7 z+Z^ zfx(hN2P6ve69b#FgU_=KFDvX8v?LwO=As+ zyG@mGn=0=)UCDcfn%^wF(0Pt2%iJH-x*@J+OM3H;{H{HflMYr)JkYc7 z+Z^ Yfx(hN2P6ve69XIjfo{i+gFs$NfxHl*u^|#*0IYHVOvgn&aSTeN9=pvU*B_{^SsNJXQ!qWUkBfT zdjL#LO*!s)mCY{QbkBM`PsaRyzvGresa5LKy7(0)G+PJQN-t6UaGL( z)aDUy6Wcqzt|w#U%=&ntDV`c%aG*mfcX)muV{JB7$d%$!F?W|uD(|p&4*EY&2uf`Q zN9^KV`#!Z>ra6b@dJP@r?M2 z8dpVwL#m#p@*}H)i`ABX?n2AOR&C;GY^)k#!loICFlA6%Y*W)IoN<;Br-V7NsaA|4-3ECq zXa(A;LRkx}D5W*dN>Tn{5m*KJ7B5733*|iK^*zE2DxQwp6ve zhfitv+MtzZgiVGp&zFb@bwS0Bq1JX(ahBz@MdaNimVHX$vOj5C6-3#vnUyCE6eD_3Zo;9@p2QLx zz0&}jvwl&@Ka&8(G#6%Qi)OD)r;*NAZd`}U$U@+qD@$M>U#t9)R+Yz+QsX8AnIsSY z3J$d>E?|b`h7z-C(cRQ%#Pq`4)$m0jwW?Y`mLbw1=3e8mzln%1OPd}VF!+B-_8EeW zXr>!)a<}L11ey^+qJ{GWR;@Y6>?QIkA{RXhH+y6F*8?c-fyWJLAz|wfaqb<^I??-x zETSSVEc>Iu11yd#&dg-=mgkf|Uz{IOt@VUj3PD}G1;Fq>J)3RlMp}IRA8)We zI+dO2z638^&0zZSea#V!+2OZ7=fo`pV4xD;vgaWpc{0_f3rYMkBx5>B*D#Db@hAM3 z9y0{bQ>vPisz~XnPy6(s|3Ur|Tc(tP;OTM0j&Ie!Bf=Ep{Z4oWKj5O$_<=|HFyUN2 zhWv9^&Q(H{D=Ibb5^)O*d&l_osi^Y%iDwclSq6e2A!krcyS4rKo($q$#u-tfJOhX$ z!@~Fe=|CfUBr+YcvBV-jevI1=OGWN)Z?gZmY$+e%=W^Sfi*xdJtn7z)tH7SxgBlCdN{ol z%@dh|L1>8#x3pb5d{bLvdB!=sC(6Vzjh-wrZQ=EsF~F-_yn>XVFCA9lo{aWAA#-;3 zwOpVU9Sxfp4`u$ElfO^gesM3Cn*QL+^S+z0XzsnOsFcH5QDlyc@U9CL%UGX~XqL(_ zqK5<+{{^7t>$f7zpmft2niP`b@y_5{rqc+?WJ4?-Mnkkvs|{)d)Dt}<+qr3VaTCJ% zkbtD~>W2%^sDA^l-t8O^zRFG%_z5>Ee6&cB99H;wpPz7E5(9g5V^<_m4!{rp1)>R% A`2YX_ literal 0 HcmV?d00001 diff --git a/Misc/ZideStore/UI-X/Common/images/tab_.gif b/Misc/ZideStore/UI-X/Common/images/tab_.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad720a0c634d7e8c6ffc3490b425e8d261312f82 GIT binary patch literal 127 zcmZ?wbhEHbOl1&bn8*ME|NsAIGwFWu;(-o`2NGvsikQ;B^7LDNW$wfq-J9?2`OV)p z+oAJW=Q7R6mG8J`=lERzmh=2q=lg%_Uoy7aDSnJFR+_G-`dL%kak-7=*I$K6+r@On dU;hm{oTRbyjLqVSuS_?-WjplP)r*nA8UXE_I41xA literal 0 HcmV?d00001 diff --git a/Misc/ZideStore/UI-X/Common/images/tab_selected.gif b/Misc/ZideStore/UI-X/Common/images/tab_selected.gif new file mode 100644 index 0000000000000000000000000000000000000000..2cbdea66a508c7d581fa1f4775de5bbb2e253b97 GIT binary patch literal 127 zcmZ?wbhEHbOl1&bn8*ME|NsAIGwJ^N^`#Do2NGvsikQ;B^7LDNW$wfq-J9?2`OV)p z+oAJW=Q7R6mG8J`=lERzmh=2q=lg%_Uoy7aDSnJFR+_G-`dL%kak-7=*I$K6+r@On dU;hm{oTRbyjLqVSuS_?-WjplP)r*nA8UXv)I7$Ej literal 0 HcmV?d00001 diff --git a/Misc/ZideStore/UI-X/Common/product.plist b/Misc/ZideStore/UI-X/Common/product.plist new file mode 100644 index 000000000..1636c4209 --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/product.plist @@ -0,0 +1,47 @@ +{ + requires = ( MAIN ); + + publicResources = ( + calendar.css, + zidestoreui.css, + menu_logo_top.gif, + line_left.gif, + line_stretch.gif, + line_right.gif, + box_topleft.gif, + box_top.gif, + box_topright.gif, + box_left.gif, + box_right.gif, + box_botleft.gif, + box_bottom.gif, + box_botright.gif, + tab_selected.gif, + tab_.gif, + corner_right.gif, + closewindow.gif, + OGoLogo.gif + ); + + factories = { + }; + + categories = { + SxFolder = { + methods = { + "app" = { + protectedBy = "View"; + pageName = "UIxAppFrame"; + }; + "appheader" = { + protectedBy = "View"; + pageName = "UIxAppHeader"; + }; + "appnavigation" = { + protectedBy = "View"; + pageName = "UIxAppNavigation"; + }; + }; + }; + }; +} diff --git a/Misc/ZideStore/UI-X/Common/zidestoreui.css b/Misc/ZideStore/UI-X/Common/zidestoreui.css new file mode 100644 index 000000000..5d1e878cc --- /dev/null +++ b/Misc/ZideStore/UI-X/Common/zidestoreui.css @@ -0,0 +1,199 @@ +/* ZideStore UI Stylesheet */ + +/* common stuff */ + +body { + color: #000000; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 10pt; + background-color: #FFFFFF; + margin: 0px; + margin-top: 0px; + margin-bottom: 0px; + margin-left: 0px; + margin-right: 0px; +} + +a:link { + color: #0033CC; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + text-decoration: none; +} +a:visited { + color: #660066; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + text-decoration: none; +} +a:hover { + color: #FF0000; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + text-decoration: underline; +} + +.linecolor { + background-color: #06348B; +} + +font.defaultfont { + text-decoration: none; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 8pt; + color: #000000; +} + +.window_label { + color: #06348b; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 12pt; + font-weight: bold; +} + + +/* tabs */ + +.tab { + color: #000000; + background-color: #e8e8e0; + font-size: 10pt; + text-decoration: none; + width: 100px; + height: 22px; + border-top: 1px solid #06348b; + border-right: 1px solid #06348b; +} + +.tab a { + color: #000000; + border: none; + text-decoration: none; +} + +.tab_selected { + color: #000000; + background-color: #f5f5e9; + font-size: 10pt; + text-decoration: none; + font-weight: bold; + width: 100px; + height: 22px; + border-top: 1px solid #06348b; + border-right: 1px solid #06348b; +} + +.tab_selected a { + color: #000000; + border: none; + text-decoration: none; +} + +.tabview_body { + background-color: #f5f5e9; +} + + +/* buttons */ + +.button_auto_env { + height: 16px; + text-align: center; + vertical-align: middle; + padding: 0px 0px 0px 0px; + margin: 0px 0px 0px 0px; + overflow: hidden; +} + +.button_auto_env a { + text-decoration: none; + color: #000000; +} + +.button_auto_env a:hover { + text-decoration: underline; + color: #ff0000; +} + +.button_auto { + height: 20px; + border-style: outset; + border-color: #DDDDDD; + border-width: 2px; + color: #000000; + background-color: #e8e8e0; + font-size: 8pt; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + letter-spacing: 0pt; + text-decoration: none; + text-color: #000000; + text-align: center; + vertical-align: middle; + padding-left: 5px; + padding-right: 5px; + padding-top: 1px; + padding-bottom: 1px; + overflow: hidden; +} + + +/* header */ + +div#header { + margin-left: 5px; + margin-right: 5px; + padding: 0; + border-bottom: 1px solid #000000; +} +div#header img.headerlogo { + float: right; + width: 182px; + height: 30px; +} + +div#header div#headerhistory { + font-size: 11px; + color: #000000; + margin: 0px; + padding-top: 18px; + height: 12px; +} +div#header a, div#header span { + margin: 0px; +} +div#header span#navtitle { + font-weight: bold; +} +div#header a:hover { + text-decoration: none; +} + +/* the dock */ + +a.skydockfont { + text-decoration: none; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 8pt; + color: #06348B; +} +font.skydockfont { + text-decoration: none; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 8pt; + color: #06348B; +} +font.skydockfont_inactiveMail { + text-decoration: none; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 8pt; + color: #CCCCCC; + font-weight: bold; +} +font.skydockfont_newMail { + text-decoration: none; + font-family: Arial, Helvetica, Verdana, Geneva, Tahoma, sans-serif; + font-size: 8pt; + color: #06348B; + font-weight: bold; +} +table.skytextdocktable { + padding: 0px; + table-layout: auto; +} diff --git a/Misc/ZideStore/UI-X/GNUmakefile b/Misc/ZideStore/UI-X/GNUmakefile new file mode 100644 index 000000000..688556495 --- /dev/null +++ b/Misc/ZideStore/UI-X/GNUmakefile @@ -0,0 +1,9 @@ +# $Id$ + +include $(GNUSTEP_MAKEFILES)/common.make + +SUBPROJECTS = \ + Common \ + Scheduler \ + +include $(GNUSTEP_MAKEFILES)/aggregate.make diff --git a/Misc/ZideStore/UI-X/Scheduler/COPYING b/Misc/ZideStore/UI-X/Scheduler/COPYING new file mode 100644 index 000000000..161a3d1d4 --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/COPYING @@ -0,0 +1,482 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 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. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + 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 Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, 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 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 a program 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. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, 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 companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + 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, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +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 compile 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) 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. + + c) 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. + + d) 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 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. + + 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 to +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 Library 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 + + Appendix: 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 Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, 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! diff --git a/Misc/ZideStore/UI-X/Scheduler/COPYRIGHT b/Misc/ZideStore/UI-X/Scheduler/COPYRIGHT new file mode 100644 index 000000000..1053b2aa3 --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/COPYRIGHT @@ -0,0 +1,4 @@ +Copyright (C) 2004 SKYRIX Software AG + + +Contact: info@skyrix.com diff --git a/Misc/ZideStore/UI-X/Scheduler/GNUmakefile b/Misc/ZideStore/UI-X/Scheduler/GNUmakefile new file mode 100644 index 000000000..40c6391ca --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/GNUmakefile @@ -0,0 +1,66 @@ +# $Id: GNUmakefile,v 1.4 2004/06/04 16:15:23 znek Exp $ + +include $(GNUSTEP_MAKEFILES)/common.make + +BUNDLE_NAME = SchedulerUI +BUNDLE_EXTENSION = .zsp +BUNDLE_INSTALL_DIR = $(GNUSTEP_USER_ROOT)/Library/ZideStore12 + +SchedulerUI_PRINCIPAL_CLASS = SchedulerUIProduct + +SchedulerUI_OBJC_FILES = \ + SchedulerUIProduct.m \ + UIxAppointmentFormatter.m \ + UIxCalView.m \ + UIxCalWeekView.m \ + UIxCalMonthView.m \ + UIxAptTableView.m \ + \ + UIxCalWeekOverview.m \ + UIxCalMonthOverview.m \ + UIxAppointmentView.m \ + UIxAppointmentEditor.m \ + UIxCalSelectTab.m \ + UIxCalDateLabel.m \ + UIxCalBackForthNavView.m \ + +SchedulerUI_RESOURCE_FILES += \ + Version \ + product.plist \ + \ + UIxAptTableView.wox \ + UIxCalWeekOverview.wox \ + UIxCalMonthOverview.wox \ + UIxAppointmentView.wox \ + UIxAppointmentEditor.wox \ + UIxCalSelectTab.wox \ + UIxCalDateLabel.wox \ + UIxCalBackForthNavView.wox \ + images/next_week.gif \ + images/previous_week.gif \ + images/icon_apt_chart.gif \ + images/icon_apt_overview.gif \ + images/icon_apt_chart_inactive.gif \ + images/icon_apt_overview_inactive.gif \ + images/icon_apt_column_view.gif \ + images/icon_apt_list.gif \ + images/icon_apt_list_inactive.gif \ + + +ifeq ($(FOUNDATION_LIB),apple) +ZIDESTORE=$(GNUSTEP_USER_ROOT)/Library/Headers/ZideStore12 +else +ZIDESTORE=$(GNUSTEP_USER_ROOT)/Headers/ZideStore12 +endif + +ADDITIONAL_INCLUDE_DIRS += \ + -I. \ + -I.. \ + -I$(ZIDESTORE)/Frontend -I$(ZIDESTORE)/Backend \ + -I$(ZIDESTORE) -I$(ZIDESTORE)/Common + +# make + +-include GNUmakefile.preamble +include $(GNUSTEP_MAKEFILES)/bundle.make +-include GNUmakefile.postamble diff --git a/Misc/ZideStore/UI-X/Scheduler/GNUmakefile.postamble b/Misc/ZideStore/UI-X/Scheduler/GNUmakefile.postamble new file mode 100644 index 000000000..3986bccea --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/GNUmakefile.postamble @@ -0,0 +1,17 @@ +# $Id: GNUmakefile.postamble,v 1.1 2004/05/12 14:45:56 helge Exp $ + +validate-wox: + xmllint --noout *.wox + +before-all :: validate-wox + + +ifneq ($(GNUSTEP_BUILD_DIR),) +after-all :: + @(cp bundle-info.plist \ + $(GNUSTEP_BUILD_DIR)/$(BUNDLE_NAME)$(BUNDLE_EXTENSION)) +else +after-all :: + @(cd $(BUNDLE_NAME)$(BUNDLE_EXTENSION);\ + cp ../bundle-info.plist .) +endif diff --git a/Misc/ZideStore/UI-X/Scheduler/GNUmakefile.preamble b/Misc/ZideStore/UI-X/Scheduler/GNUmakefile.preamble new file mode 100644 index 000000000..23c9438a9 --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/GNUmakefile.preamble @@ -0,0 +1,17 @@ +# $Id$ + +ifneq ($(GNUSTEP_BUILD_DIR),) + RELBUILD_DIR_libZideStoreCommonUI = \ + $(GNUSTEP_BUILD_DIR)/../Common/$(GNUSTEP_OBJ_DIR_NAME) +else + RELBUILD_DIR_libZideStoreCommonUI = ../Common +endif + +SchedulerUI_LIB_DIRS += -L$(RELBUILD_DIR_libZideStoreCommonUI) + +SchedulerUI_BUNDLE_LIBS += \ + -lNGObjWeb -lNGScripting -lNGJavaScript -ljs \ + -lNGMime -lNGStreams -lNGExtensions -lEOControl \ + -lXmlRpc -lDOM -lSaxObjC \ + -lSOGoLogic -lZideStoreCommonUI \ + -lNGiCal diff --git a/Misc/ZideStore/UI-X/Scheduler/NOTES b/Misc/ZideStore/UI-X/Scheduler/NOTES new file mode 100644 index 000000000..35c83b1bf --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/NOTES @@ -0,0 +1,52 @@ +// $Id: NOTES,v 1.1 2003/11/24 01:24:40 helge Exp $ + +Scheduler +========= + +SOPE based interface for scheduler. + +Class Hierarchy +=============== + + [WOComponent] + [SoComponent] + UIxAppointmentView + UIxCalView + UIxCalMonthView + UIxCalMonthOverview + UIxCalWeekView + UIxCalWeekOverview + UIxAptTableView + SchedulerUIProduct + +TBD: + UIxCalDayView + UIxCalDayOverview + UIxCalDayChart + UIxCalDayHChart + [UIxCalWeekView] + UIxCalWeekColumnView + UIxCalWeekChart + UIxCalWeekHChart + OGoYearOverview - should use aggressive caching in the long run + + - editor page (which comes up in a new window) + - delete page + - print views + +Notes +===== + +editor pages need to use JavaScript to trigger reloads in the parent window +=> find out how to do that + +URLs +==== + +/zidestore/ControlPanel/ => SoControlPanel +/zidestore/ControlPanel/Products => SoProductRegistry +/zidestore/ControlPanel/Products/ZideStoreUI => SoProduct +/zidestore/ControlPanel/Products/ZideStoreUI/Resources/ +=> SoProductResourceManager +/zidestore/ControlPanel/Products/ZideStoreUI/Resources/calendar.css +=> resource diff --git a/Misc/ZideStore/UI-X/Scheduler/SchedulerUIProduct.m b/Misc/ZideStore/UI-X/Scheduler/SchedulerUIProduct.m new file mode 100644 index 000000000..7666ef0a8 --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/SchedulerUIProduct.m @@ -0,0 +1,34 @@ +/* + Copyright (C) 2000-2003 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: SchedulerUIProduct.m,v 1.1 2003/11/24 01:24:40 helge Exp $ + +#import + +@interface SchedulerUIProduct : NSObject +{ +} + +@end + +#include "common.h" + +@implementation SchedulerUIProduct +@end /* SchedulerUIProduct */ diff --git a/Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.m b/Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.m new file mode 100644 index 000000000..892fcb27c --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.m @@ -0,0 +1,277 @@ +/* + Copyright (C) 2000-2004 SKYRIX Software AG + + This file is part of OGo + + OGo 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, or (at your option) any + later version. + + OGo is distributed in the hope that 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 OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +// $Id: UIxAppointmentEditor.m 90 2004-06-30 01:07:58Z znek $ + + +#include "common.h" +#include +#include +#include + + +/* TODO: CLEAN THIS MESS UP */ + + +@interface NSObject (AppointmentHack) +- (BOOL)isAppointment; +@end + +@implementation NSObject (AppointmentHack) +- (BOOL)isAppointment { + return [self isKindOfClass:NSClassFromString(@"SxAppointment")]; +} +@end + +@interface iCalPerson (Convenience) +- (NSString *)rfc822Email; +@end + +@implementation iCalPerson (Convenience) +- (NSString *)rfc822Email { + NSString *_email = [self email]; + NSRange colon = [_email rangeOfString:@":"]; + if(colon.location != NSNotFound) { + return [_email substringFromIndex:colon.location + 1]; + } + return _email; +} +@end + +@interface UIxAppointmentEditor : UIxComponent +{ + id appointment; + id participants; +} + +- (SOGoAppointment *)appointment; +- (NSString *)iCalStringTemplate; +- (NSString *)iCalString; +- (BOOL)isNewAppointment; + +@end + +@implementation UIxAppointmentEditor + +- (void)dealloc { + [self->appointment release]; + [self->participants release]; + [super dealloc]; +} + + +/* accessors */ + + +- (NSString *)formattedAptStartTime { + NSCalendarDate *date; + + date = [[self appointment] startDate]; + /* TODO: convert this into display timeZone! */ + return [date descriptionWithCalendarFormat:@"%A, %Y-%m-%d %H:%M %Z"]; +} + +- (BOOL)isNewAppointment { + return ! [[self clientObject] isAppointment]; +} + +- (NSString *)iCalString { + if([self isNewAppointment]) { + return [self iCalStringTemplate]; + } + else { + return [[self clientObject] valueForKey:@"iCalString"]; + } +} + +- (NSString *)iCalStringTemplate { + static NSString *iCalStringTemplate = \ + @"BEGIN:VCALENDAR\nMETHOD:REQUEST\nPRODID:OpenGroupware.org ZideStore 1.2\n" \ + @"VERSION:2.0\nBEGIN:VEVENT\nCLASS:PRIVATE\nSTATUS:CONFIRMED\n" \ + @"DTSTART:%@\nDTEND:%@\n" \ + @"TRANSP:OPAQUE\n" \ + @"END:VEVENT\nEND:VCALENDAR"; + NSCalendarDate *startDate, *endDate; + NSString *template; + + startDate = [self selectedDate]; + endDate = [startDate dateByAddingYears:0 months:0 days:0 + hours:1 minutes:0 seconds:0]; + + template = [NSString stringWithFormat:iCalStringTemplate, + [startDate icalString], + [endDate icalString]]; + + return template; +} + + +/* backend */ + + +- (SOGoAppointment *)appointment { + if(self->appointment == nil) { + self->appointment = [[SOGoAppointment alloc] + initWithICalString:[self iCalString]]; + } + return self->appointment; +} + +- (id)participants { + if(self->participants == nil) { + NSArray *attendees; + NSMutableArray *emailAddresses; + unsigned i, count; + + attendees = [self->appointment attendees]; + count = [attendees count]; + emailAddresses = [[NSMutableArray alloc] initWithCapacity:count]; + for(i = 0; i < count; i++) { + NSString *email; + + email = [[attendees objectAtIndex:i] rfc822Email]; + if(email) + [emailAddresses addObject:email]; + } + self->participants = [[emailAddresses componentsJoinedByString:@"\n"] + retain]; + [emailAddresses release]; + } + return self->participants; +} + + +/* helper */ + +- (NSString *)uriAsFormat { + NSString *uri, *qp; + NSRange r; + + uri = [[[self context] request] uri]; + + /* first: identify query parameters */ + r = [uri rangeOfString:@"?" options:NSBackwardsSearch]; + if (r.length > 0) { + uri = [uri substringToIndex:r.location]; + qp = [uri substringFromIndex:r.location]; + } + else { + qp = nil; + } + + /* next: strip trailing slash */ + if([uri hasSuffix:@"/"]) + uri = [uri substringToIndex:([uri length] - 1)]; + r = [uri rangeOfString:@"/" options:NSBackwardsSearch]; + + /* then: cut of last path component */ + if(r.location == NSNotFound) { // no slash? are we at root? + uri = @"/"; + } + else { + uri = [uri substringToIndex:(r.location + 1)]; + } + /* next: append format token */ + uri = [uri stringByAppendingString:@"%@"]; + if(qp != nil) + uri = [uri stringByAppendingString:qp]; + return uri; +} + + +/* save */ + + +- (id)saveAction { + SOGoAppointment *apt; + NSString *iCalString, *summary, *location, *nextMethod, *uri, *uriFormat; + NSCalendarDate *sd, *ed; + NSArray *ps; + unsigned i, count; + WOResponse *r; + WORequest *req; + + req = [[self context] request]; + + /* get iCalString from hidden input */ + iCalString = [req formValueForKey:@"ical"]; + apt = [[SOGoAppointment alloc] initWithICalString:iCalString]; + + /* merge in form values */ + sd = [NSCalendarDate dateWithString:[req formValueForKey:@"startDate"] + calendarFormat:@"%Y-%m-%d %H:%M"]; + [apt setStartDate:sd]; + ed = [NSCalendarDate dateWithString:[req formValueForKey:@"endDate"] + calendarFormat:@"%Y-%m-%d %H:%M"]; + [apt setEndDate:ed]; + summary = [req formValueForKey:@"summary"]; + [apt setSummary:title]; + location = [req formValueForKey:@"location"]; + [apt setLocation:location]; + + [apt removeAllAttendees]; /* clean up */ + ps = [[req formValueForKey:@"participants"] + componentsSeparatedByString:@"\n"]; + count = [ps count]; + for(i = 0; i < count; i++) { + NSString *email; + + email = [ps objectAtIndex:i]; + if([email length] > 0) { + iCalPerson *p; + NSRange cnr; + + p = [[iCalPerson alloc] init]; + [p setEmail:[NSString stringWithFormat:@"mailto:%@", email]]; + /* construct a fake CN */ + cnr = [email rangeOfString:@"@"]; + if(cnr.location != NSNotFound) { + [p setCn:[email substringToIndex:cnr.location]]; + } + [apt addToAttendees:p]; + [p release]; + } + } + + /* receive current representation for save operation */ + iCalString = [apt iCalString]; + [apt release]; + + + /* determine what's to do and where to go next */ + if([self isNewAppointment]) { + nextMethod = @"duhduh"; + } + else { + nextMethod = @"view"; + } + + NSLog(@"%s new iCalString:\n%@", __PRETTY_FUNCTION__, iCalString); + + uriFormat = [self uriAsFormat]; + uri = [NSString stringWithFormat:uriFormat, nextMethod]; + + r = [WOResponse responseWithRequest:req]; + [r setStatus:302 /* moved */]; + [r setHeader:uri forKey:@"location"]; + return r; +} + +@end diff --git a/Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.wox b/Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.wox new file mode 100644 index 000000000..ce2381aad --- /dev/null +++ b/Misc/ZideStore/UI-X/Scheduler/UIxAppointmentEditor.wox @@ -0,0 +1,111 @@ + + + +
+ + + + + + + + + + +
+ + + + + +
+ Appointment Editor + +
+
+ + + + + + + + + + + + + + + + + + + + +
+ Appointment on +
+ Start time: + + + + +
+ End time: + + + + +
+ Title: + + + + +
+ Location: + + + + +
+
+ + + + + + +
+ Search participants +
+ Participants: + + +