From b491d2b0eb0f69661c0ec259f46c550adfe89a9f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Tue, 22 Sep 2009 15:58:43 +0000 Subject: [PATCH] Monotone-Parent: 35156d431d203984a125b3638bbea9d7877ed199 Monotone-Revision: c67e433732722d75d043f48a847d38b5f7acad9d Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2009-09-22T15:58:43 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 10 ++++ UI/MailerUI/UIxMailListView.h | 1 + UI/MailerUI/UIxMailListView.m | 91 ++++++++++++++++++++++++++--------- 3 files changed, 80 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 692b43112..5403129b0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-09-22 Wolfgang Sourdeau + + * UI/MailerUI/UIxMailListView.m (+initialize): new method + initialized the two new global NSArray: defaultColumnOrder + (hardcoded values), udColumnOrder (system default values). + (-columnsDisplayOrder): we now cache the resulting set of keys. + We also test for the presence of invalid keys by comparing the + configured array with the hardcoded one above. + (-setCurrentColumn:, currentColumn): new accessors. + 2009-09-21 Ludovic Marcotte * SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m diff --git a/UI/MailerUI/UIxMailListView.h b/UI/MailerUI/UIxMailListView.h index 85f2e91b7..f046a4918 100644 --- a/UI/MailerUI/UIxMailListView.h +++ b/UI/MailerUI/UIxMailListView.h @@ -32,6 +32,7 @@ { NSArray *sortedUIDs; /* we always need to retrieve all anyway! */ NSArray *messages; + NSMutableArray *userDefinedOrder; unsigned firstMessageNumber; id message; EOQualifier *qualifier; diff --git a/UI/MailerUI/UIxMailListView.m b/UI/MailerUI/UIxMailListView.m index 1e3315e37..6fe2c2091 100644 --- a/UI/MailerUI/UIxMailListView.m +++ b/UI/MailerUI/UIxMailListView.m @@ -41,6 +41,7 @@ #import #import #import +#import #import @@ -55,10 +56,32 @@ #import "UIxMailListView.h" +static NSArray *defaultColumnOrder = nil; +static NSArray *udColumnOrder = nil; + #define messagesPerPage 50 @implementation UIxMailListView ++ (void) initialize +{ + if (!defaultColumnOrder) + { + defaultColumnOrder = [NSArray arrayWithObjects: @"Flagged", + @"Attachment", @"Subject", @"From", + @"Unread", @"Date", @"Priority", @"Size", + nil]; + [defaultColumnOrder retain]; + } + + if (!udColumnOrder) + { + udColumnOrder = [[NSUserDefaults standardUserDefaults] + arrayForKey: @"SOGoMailListViewColumnsOrder"]; + [udColumnOrder retain]; + } +} + - (id) init { SOGoUser *user; @@ -69,6 +92,7 @@ user = [context activeUser]; ASSIGN (dateFormatter, [user dateFormatterInContext: context]); ASSIGN (userTimeZone, [user timeZone]); + userDefinedOrder = nil; folderType = 0; currentColumn = nil; } @@ -85,6 +109,7 @@ [dateFormatter release]; [userTimeZone release]; [currentColumn release]; + [userDefinedOrder release]; [super dealloc]; } @@ -811,35 +836,47 @@ - (NSArray *) columnsDisplayOrder { - NSMutableArray *userDefinedOrder; + NSMutableArray *testColumns; NSArray *defaultsOrder; NSUserDefaults *ud; unsigned int i; - ud = [[context activeUser] userSettings]; - defaultsOrder = [ud arrayForKey: @"SOGoMailListViewColumnsOrder"]; - if (![defaultsOrder count]) + if (!userDefinedOrder) { - defaultsOrder = [[NSUserDefaults standardUserDefaults] - arrayForKey: @"SOGoMailListViewColumnsOrder"]; + ud = [[context activeUser] userSettings]; + defaultsOrder = [ud arrayForKey: @"SOGoMailListViewColumnsOrder"]; if (![defaultsOrder count]) - defaultsOrder = [NSArray arrayWithObjects: @"Flagged", - @"Attachment", @"Subject", @"From", - @"Unread", @"Date", @"Priority", @"Size", nil]; - } - userDefinedOrder = [NSMutableArray arrayWithArray: defaultsOrder]; + { + defaultsOrder = udColumnOrder; + if (![defaultsOrder count]) + defaultsOrder = defaultColumnOrder; + } + userDefinedOrder = [defaultsOrder mutableCopy]; - if ([self showToAddress]) - { - i = [userDefinedOrder indexOfObject: @"From"]; - if (i != NSNotFound) - [userDefinedOrder replaceObjectAtIndex: i withObject: @"To"]; - } - else - { - i = [userDefinedOrder indexOfObject: @"To"]; - if (i != NSNotFound) - [userDefinedOrder replaceObjectAtIndex: i withObject: @"From"]; + testColumns = [userDefinedOrder mutableCopy]; + [testColumns removeObjectsInArray: defaultColumnOrder]; + if ([testColumns count] > 0) + { + [self errorWithFormat: @"one or more column names specified in" + @" SOGoMailListViewColumnsOrder are invalid: '%@'", + [testColumns componentsJoinedByString: @"', '"]]; + [self errorWithFormat: @" falling back on hardcoded column order"]; + userDefinedOrder = [defaultColumnOrder mutableCopy]; + } + [testColumns release]; + + if ([self showToAddress]) + { + i = [userDefinedOrder indexOfObject: @"From"]; + if (i != NSNotFound) + [userDefinedOrder replaceObjectAtIndex: i withObject: @"To"]; + } + else + { + i = [userDefinedOrder indexOfObject: @"To"]; + if (i != NSNotFound) + [userDefinedOrder replaceObjectAtIndex: i withObject: @"From"]; + } } return [[self columnsMetaData] objectsForKeys: userDefinedOrder @@ -851,6 +888,16 @@ return [NSString stringWithFormat: @"%d", [[self columnsDisplayOrder] count]]; } +- (void) setCurrentColumn: (NSDictionary *) newCurrentColumn +{ + ASSIGN (currentColumn, newCurrentColumn); +} + +- (NSDictionary *) currentColumn +{ + return currentColumn; +} + - (NSString *) columnTitle { return [self labelForKey: [currentColumn objectForKey: @"value"]];