From: znek Date: Thu, 21 Jul 2005 11:29:55 +0000 (+0000) Subject: Added inline attachment view to UIxMailEditor X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=577ca0c0212eabf6bde59675a4f81ca5eed1b6ed;p=scalable-opengroupware.org Added inline attachment view to UIxMailEditor git-svn-id: http://svn.opengroupware.org/SOGo/trunk@868 d1b88da0-ebda-0310-925b-ed51d893ca5b --- diff --git a/SOGo/SOGo.xcodeproj/project.pbxproj b/SOGo/SOGo.xcodeproj/project.pbxproj index 57d74924..235c08e2 100644 --- a/SOGo/SOGo.xcodeproj/project.pbxproj +++ b/SOGo/SOGo.xcodeproj/project.pbxproj @@ -113,6 +113,21 @@ AD3D66EC088E7FAD00CBB51B /* SOGoAptMailFrenchInvitation.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailFrenchInvitation.wo; sourceTree = ""; }; AD3D66F0088E7FAD00CBB51B /* SOGoAptMailFrenchRemoval.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailFrenchRemoval.wo; sourceTree = ""; }; AD3D66F4088E7FAD00CBB51B /* SOGoAptMailFrenchUpdate.wo */ = {isa = PBXFileReference; lastKnownFileType = folder; path = SOGoAptMailFrenchUpdate.wo; sourceTree = ""; }; + AD3D67AC088EAF1500CBB51B /* SOGoDraftObject.toolbar */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = text; name = SOGoDraftObject.toolbar; path = Toolbars/SOGoDraftObject.toolbar; sourceTree = ""; tabWidth = 2; }; + AD3D67AD088EAF1500CBB51B /* SOGoMailAccount.toolbar */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = text; name = SOGoMailAccount.toolbar; path = Toolbars/SOGoMailAccount.toolbar; sourceTree = ""; tabWidth = 2; }; + AD3D67AE088EAF1500CBB51B /* SOGoMailFolder.toolbar */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = text; name = SOGoMailFolder.toolbar; path = Toolbars/SOGoMailFolder.toolbar; sourceTree = ""; tabWidth = 2; }; + AD3D67AF088EAF1500CBB51B /* SOGoMailObject.toolbar */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = text; name = SOGoMailObject.toolbar; path = Toolbars/SOGoMailObject.toolbar; sourceTree = ""; tabWidth = 2; }; + AD3D67B0088EAF1500CBB51B /* SOGoTrashFolder.toolbar */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = text; name = SOGoTrashFolder.toolbar; path = Toolbars/SOGoTrashFolder.toolbar; sourceTree = ""; tabWidth = 2; }; + AD3D6807088EB71F00CBB51B /* UIxMailAccountsView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxMailAccountsView.wox; path = MailerUI/UIxMailAccountsView.wox; sourceTree = ""; }; + AD3D6808088EB71F00CBB51B /* UIxMailAccountView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxMailAccountView.wox; path = MailerUI/UIxMailAccountView.wox; sourceTree = ""; }; + AD3D6809088EB71F00CBB51B /* UIxMailAddressbook.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxMailAddressbook.wox; path = MailerUI/UIxMailAddressbook.wox; sourceTree = ""; }; + AD3D680A088EB71F00CBB51B /* UIxMailPanelFrame.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxMailPanelFrame.wox; path = MailerUI/UIxMailPanelFrame.wox; sourceTree = ""; }; + AD3D680B088EB71F00CBB51B /* UIxMailToSelection.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxMailToSelection.wox; path = MailerUI/UIxMailToSelection.wox; sourceTree = ""; }; + AD3D685E088F9FF600CBB51B /* UIxContactEditor.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxContactEditor.wox; path = ContactsUI/UIxContactEditor.wox; sourceTree = ""; }; + AD3D685F088F9FF600CBB51B /* UIxContactsListView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxContactsListView.wox; path = ContactsUI/UIxContactsListView.wox; sourceTree = ""; }; + AD3D6860088F9FF600CBB51B /* UIxContactView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; name = UIxContactView.wox; path = ContactsUI/UIxContactView.wox; sourceTree = ""; }; + AD3D68D3088FADA200CBB51B /* UIxMailListView.js */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.javascript; path = UIxMailListView.js; sourceTree = ""; }; + AD3D68F7088FB57100CBB51B /* UIxMailEditorAttach.js */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.javascript; path = UIxMailEditorAttach.js; sourceTree = ""; tabWidth = 2; }; AD494C6206F5EA6600E51EC9 /* UIxContactSelector.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = UIxContactSelector.m; sourceTree = ""; }; AD494C8E06F606F900E51EC9 /* UIxContactsSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = UIxContactsSelectionView.m; sourceTree = ""; }; AD494D1806F6EB3A00E51EC9 /* SOGoMailAccount.h */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = SOGoMailAccount.h; sourceTree = ""; }; @@ -224,21 +239,11 @@ AD86233307CA03D9004CD707 /* UIxCalWeekOverview.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxCalWeekOverview.wox; sourceTree = ""; }; AD86233407CA03D9004CD707 /* UIxCalWeekPrintview.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxCalWeekPrintview.wox; sourceTree = ""; }; AD86233507CA03D9004CD707 /* UIxCalYearOverview.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxCalYearOverview.wox; sourceTree = ""; }; - AD86233607CA03D9004CD707 /* UIxContactEditor.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxContactEditor.wox; sourceTree = ""; }; AD86233707CA03D9004CD707 /* UIxContactSelector.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxContactSelector.wox; sourceTree = ""; }; - AD86233807CA03D9004CD707 /* UIxContactsListView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxContactsListView.wox; sourceTree = ""; }; AD86233907CA03D9004CD707 /* UIxContactsSelectionView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxContactsSelectionView.wox; sourceTree = ""; }; - AD86233A07CA03D9004CD707 /* UIxContactView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxContactView.wox; sourceTree = ""; }; AD86233B07CA03D9004CD707 /* UIxDatePicker.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxDatePicker.wox; sourceTree = ""; }; AD86233C07CA03D9004CD707 /* UIxDatePickerScript.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxDatePickerScript.wox; sourceTree = ""; }; AD86233D07CA03D9004CD707 /* UIxFilterList.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxFilterList.wox; sourceTree = ""; }; - AD86233E07CA03D9004CD707 /* UIxMailAccountsView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxMailAccountsView.wox; sourceTree = ""; }; - AD86233F07CA03D9004CD707 /* UIxMailAccountView.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxMailAccountView.wox; sourceTree = ""; }; - AD86234007CA03D9004CD707 /* UIxMailAddressbook.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxMailAddressbook.wox; sourceTree = ""; }; - AD86234107CA03D9004CD707 /* UIxMailCalWeekOverview.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxMailCalWeekOverview.wox; sourceTree = ""; }; - AD86234207CA03D9004CD707 /* UIxMailContactEditor.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxMailContactEditor.wox; sourceTree = ""; }; - AD86234307CA03D9004CD707 /* UIxMailContactList.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxMailContactList.wox; sourceTree = ""; }; - AD86235407CA03D9004CD707 /* UIxMailToSelection.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxMailToSelection.wox; sourceTree = ""; }; AD86235807CA03D9004CD707 /* UIxPageFrame.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxPageFrame.wox; sourceTree = ""; }; AD86235907CA03D9004CD707 /* UIxPrintPageFrame.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxPrintPageFrame.wox; sourceTree = ""; }; AD86235A07CA03D9004CD707 /* UIxSieveEditor.wox */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.xml; path = UIxSieveEditor.wox; sourceTree = ""; }; @@ -352,10 +357,10 @@ ADE0ABFE0885C31100E62D67 /* SOGoTrashFolder.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = SOGoTrashFolder.h; sourceTree = ""; }; ADE0ABFF0885C31100E62D67 /* SOGoTrashFolder.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = SOGoTrashFolder.m; sourceTree = ""; }; ADE0AC120885C45100E62D67 /* generic.js */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.javascript; name = generic.js; path = ../WebServerResources/generic.js; sourceTree = ""; }; - ADE0AC130885C45100E62D67 /* mailer.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = mailer.css; path = ../WebServerResources/mailer.css; sourceTree = ""; }; - ADE0AC140885C45100E62D67 /* mailer.js */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.javascript; name = mailer.js; path = ../WebServerResources/mailer.js; sourceTree = ""; }; + ADE0AC130885C45100E62D67 /* mailer.css */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = text; path = mailer.css; sourceTree = ""; tabWidth = 2; }; + ADE0AC140885C45100E62D67 /* mailer.js */ = {isa = PBXFileReference; fileEncoding = 5; indentWidth = 2; lastKnownFileType = sourcecode.javascript; name = mailer.js; path = ../WebServerResources/mailer.js; sourceTree = ""; tabWidth = 2; }; ADE0AC150885C45100E62D67 /* searchfield.js */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.javascript; name = searchfield.js; path = ../WebServerResources/searchfield.js; sourceTree = ""; }; - ADE0AC160885C45100E62D67 /* uix.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = uix.css; path = ../WebServerResources/uix.css; sourceTree = ""; }; + ADE0AC160885C45100E62D67 /* uix.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = uix.css; sourceTree = ""; }; ADE0AC400885C6D300E62D67 /* homepage.js */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.javascript; path = homepage.js; sourceTree = ""; tabWidth = 2; }; ADE0AEA20886CB3A00E62D67 /* SOGoAuthenticator.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = SOGoAuthenticator.h; sourceTree = ""; }; ADE0AEA30886CB3A00E62D67 /* SOGoAuthenticator.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = SOGoAuthenticator.m; sourceTree = ""; }; @@ -556,20 +561,19 @@ name = Components; sourceTree = ""; }; - AD2C74C3071AA0190087E027 /* JS / CSS */ = { + AD2C74C3071AA0190087E027 /* JavaScript */ = { isa = PBXGroup; children = ( - ADE0AC130885C45100E62D67 /* mailer.css */, - AD3D63CE088D5EB000CBB51B /* calendar.css */, ADE0AC120885C45100E62D67 /* generic.js */, ADE0AC140885C45100E62D67 /* mailer.js */, ADE0AC150885C45100E62D67 /* searchfield.js */, - ADE0AC160885C45100E62D67 /* uix.css */, AD3D63CF088D5EB000CBB51B /* UIxAppointmentEditor.js */, AD3D63D0088D5EB000CBB51B /* UIxContactEditor.js */, + AD3D68D3088FADA200CBB51B /* UIxMailListView.js */, AD3D6336088D2E7400CBB51B /* UIxMailToSelection.js */, + AD3D68F7088FB57100CBB51B /* UIxMailEditorAttach.js */, ); - name = "JS / CSS"; + name = JavaScript; path = ../WebServerResources; sourceTree = ""; }; @@ -625,6 +629,29 @@ name = SOGoAptMailUpdate; sourceTree = ""; }; + AD3D67AB088EAF0100CBB51B /* Toolbars */ = { + isa = PBXGroup; + children = ( + AD3D67AC088EAF1500CBB51B /* SOGoDraftObject.toolbar */, + AD3D67AD088EAF1500CBB51B /* SOGoMailAccount.toolbar */, + AD3D67AE088EAF1500CBB51B /* SOGoMailFolder.toolbar */, + AD3D67AF088EAF1500CBB51B /* SOGoMailObject.toolbar */, + AD3D67B0088EAF1500CBB51B /* SOGoTrashFolder.toolbar */, + ); + name = Toolbars; + sourceTree = ""; + }; + AD3D68D6088FADAA00CBB51B /* CSS */ = { + isa = PBXGroup; + children = ( + ADE0AC130885C45100E62D67 /* mailer.css */, + AD3D63CE088D5EB000CBB51B /* calendar.css */, + ADE0AC160885C45100E62D67 /* uix.css */, + ); + name = CSS; + path = ../WebServerResources; + sourceTree = ""; + }; AD6BCEE5069D77E9003664CD /* SOGoUI */ = { isa = PBXGroup; children = ( @@ -786,6 +813,11 @@ AD8625FB07CA0403004CD707 /* Mailer */ = { isa = PBXGroup; children = ( + AD3D6807088EB71F00CBB51B /* UIxMailAccountsView.wox */, + AD3D6808088EB71F00CBB51B /* UIxMailAccountView.wox */, + AD3D6809088EB71F00CBB51B /* UIxMailAddressbook.wox */, + AD3D680A088EB71F00CBB51B /* UIxMailPanelFrame.wox */, + AD3D680B088EB71F00CBB51B /* UIxMailToSelection.wox */, ADE0ABEF0885C22100E62D67 /* UIxMailEditor.wox */, ADE0ABF00885C22100E62D67 /* UIxMailEditorAttach.wox */, ADE0ABF10885C22100E62D67 /* UIxMailFilterPanel.wox */, @@ -799,13 +831,6 @@ ADE0ABF90885C22100E62D67 /* UIxMailView.wox */, ADE0ABFA0885C22200E62D67 /* UIxMailWindowCloser.wox */, AD86233D07CA03D9004CD707 /* UIxFilterList.wox */, - AD86233E07CA03D9004CD707 /* UIxMailAccountsView.wox */, - AD86233F07CA03D9004CD707 /* UIxMailAccountView.wox */, - AD86234007CA03D9004CD707 /* UIxMailAddressbook.wox */, - AD86234107CA03D9004CD707 /* UIxMailCalWeekOverview.wox */, - AD86234207CA03D9004CD707 /* UIxMailContactEditor.wox */, - AD86234307CA03D9004CD707 /* UIxMailContactList.wox */, - AD86235407CA03D9004CD707 /* UIxMailToSelection.wox */, AD86235A07CA03D9004CD707 /* UIxSieveEditor.wox */, ); name = Mailer; @@ -917,11 +942,11 @@ AD86261D07CA04E7004CD707 /* Contacts */ = { isa = PBXGroup; children = ( - AD86233607CA03D9004CD707 /* UIxContactEditor.wox */, + AD3D685E088F9FF600CBB51B /* UIxContactEditor.wox */, + AD3D685F088F9FF600CBB51B /* UIxContactsListView.wox */, + AD3D6860088F9FF600CBB51B /* UIxContactView.wox */, AD86233707CA03D9004CD707 /* UIxContactSelector.wox */, - AD86233807CA03D9004CD707 /* UIxContactsListView.wox */, AD86233907CA03D9004CD707 /* UIxContactsSelectionView.wox */, - AD86233A07CA03D9004CD707 /* UIxContactView.wox */, ); name = Contacts; sourceTree = ""; @@ -1176,7 +1201,9 @@ ADDF4DC906DE0E9A00C4E7F8 /* product.plist */, ADDF4DC106DE0E9A00C4E7F8 /* Localizable.strings */, ADDF4DD306DE0EB600C4E7F8 /* Makefiles */, - AD2C74C3071AA0190087E027 /* JS / CSS */, + AD3D68D6088FADAA00CBB51B /* CSS */, + AD2C74C3071AA0190087E027 /* JavaScript */, + AD3D67AB088EAF0100CBB51B /* Toolbars */, ADDF4DD906DE0ECB00C4E7F8 /* Classes */, ADDF4DD606DE0EC100C4E7F8 /* Components */, ); diff --git a/SOGo/UI/MailerUI/ChangeLog b/SOGo/UI/MailerUI/ChangeLog index d36d13e1..81596c04 100644 --- a/SOGo/UI/MailerUI/ChangeLog +++ b/SOGo/UI/MailerUI/ChangeLog @@ -1,3 +1,8 @@ +2005-07-21 Marcus Mueller + + * UIxMailEditor.m: fetch attachment names and provide initial style + information to left/right side of editor component (v0.9.164) + 2005-07-21 Helge Hess * UIxMailListView.m: load JavaScript from a file (UIxMailListView.js) diff --git a/SOGo/UI/MailerUI/UIxMailEditor.m b/SOGo/UI/MailerUI/UIxMailEditor.m index 26af9774..fc513515 100644 --- a/SOGo/UI/MailerUI/UIxMailEditor.m +++ b/SOGo/UI/MailerUI/UIxMailEditor.m @@ -40,6 +40,10 @@ NSArray *fromEMails; NSString *from; SOGoMailFolder *sentFolder; + + /* these are for the inline attachment list */ + NSString *attachmentName; + NSArray *attachmentNames; } @end @@ -95,6 +99,9 @@ static NSArray *infoKeys = nil; [self->to release]; [self->cc release]; [self->bcc release]; + + [self->attachmentName release]; + [self->attachmentNames release]; [super dealloc]; } @@ -158,6 +165,13 @@ static NSArray *infoKeys = nil; return NO; } +- (void)setAttachmentName:(NSString *)_attachmentName { + ASSIGN(self->attachmentName, _attachmentName); +} +- (NSString *)attachmentName { + return self->attachmentName; +} + /* from addresses */ - (NSArray *)fromEMails { @@ -296,6 +310,34 @@ static NSArray *infoKeys = nil; reason:@"failed to store draft object on server!"]; } +/* attachment helper */ + +- (NSArray *)attachmentNames { + NSArray *a; + + if (self->attachmentNames != nil) + return self->attachmentNames; + + a = [[self clientObject] fetchAttachmentNames]; + a = [a sortedArrayUsingSelector:@selector(compare:)]; + self->attachmentNames = [a copy]; + return self->attachmentNames; +} +- (BOOL)hasAttachments { + return [[self attachmentNames] count] > 0 ? YES : NO; +} + +- (NSString *)initialLeftsideStyle { + if ([self hasAttachments]) + return @"width: 67%"; + return @"width: 100%"; +} +- (NSString *)initialRightsideStyle { + if ([self hasAttachments]) + return @"display: block"; + return @"display: none"; +} + - (id)defaultAction { return [self redirectToLocation:@"edit"]; } diff --git a/SOGo/UI/MailerUI/Version b/SOGo/UI/MailerUI/Version index 5db49006..b893c12f 100644 --- a/SOGo/UI/MailerUI/Version +++ b/SOGo/UI/MailerUI/Version @@ -1,6 +1,6 @@ # version file -SUBMINOR_VERSION:=163 +SUBMINOR_VERSION:=164 # v0.9.140 requires SoObjects/Mailer v0.9.100 # v0.9.134 requires libSOGo v0.9.41 diff --git a/SOGo/UI/Templates/ChangeLog b/SOGo/UI/Templates/ChangeLog index d016dba3..15a1b28d 100644 --- a/SOGo/UI/Templates/ChangeLog +++ b/SOGo/UI/Templates/ChangeLog @@ -1,5 +1,14 @@ 2005-07-21 Marcus Mueller + * UIxMailToSelection.wox: commented debug output + + * UIxMailEditor.wox: added inline attachment view which is only + visible if attachments have been added (similar to what is done + in Thunderbird) + + * UIxMailEditorAttach.wox: added JavaScript reference for dynamically + updating UIxMailEditor + * UIxCalInlineAptView.wox: added indicator to flag recurrent events 2005-07-20 Helge Hess diff --git a/SOGo/UI/Templates/MailerUI/UIxMailEditor.wox b/SOGo/UI/Templates/MailerUI/UIxMailEditor.wox index a90dfbce..8bef375f 100644 --- a/SOGo/UI/Templates/MailerUI/UIxMailEditor.wox +++ b/SOGo/UI/Templates/MailerUI/UIxMailEditor.wox @@ -18,44 +18,66 @@ -
- -
- - -
- - - - - -
- : - - -
-
- -
- - - - - -
- : -
-
+ + + + + +
+
+ +
+ +
+ + + + + +
+ : + + +
+
+
+ + + + + +
+ : +
+
+
+
+
+ : + +
+
+ +
+
+
+
+