Optimized IconHelper to only create internal structures once, not all the time.

This commit is contained in:
michael starke
2013-12-03 20:58:27 +01:00
parent 385a56c489
commit c59ce56f4d
2 changed files with 63 additions and 48 deletions

View File

@@ -27,13 +27,16 @@ typedef NS_ENUM(NSUInteger, MPIconType) {
MPIconCamera, MPIconCamera,
MPIconRemote, MPIconRemote,
MPIconKeys, MPIconKeys,
MPIconScanner = 15, MPIconBattery,
MPIconScanner,
MPIconBrowser, MPIconBrowser,
MPIconCDRom, MPIconCDRom,
MPIconDisplay, MPIconDisplay,
MPIconEmail, MPIconEmail,
MPIconMisc, MPIconMisc,
MPIconFileSave = 26, MPIconFileSave = 26,
MPIconTerminal = 30,
MPIconPrint = 31,
MPIconTrash = 43, MPIconTrash = 43,
MPIconFolder = 48, MPIconFolder = 48,
MPIconPhone = 68, MPIconPhone = 68,

View File

@@ -14,7 +14,7 @@ static NSDictionary *icons;
+ (NSImage *)icon:(MPIconType)type { + (NSImage *)icon:(MPIconType)type {
if(!icons) { if(!icons) {
icons = [MPIconHelper availableIconNames]; icons = [MPIconHelper availableIconNames];
} }
if([[icons allKeys] containsObject:@(type)]) { if([[icons allKeys] containsObject:@(type)]) {
NSString *imageName = icons[@(type)]; NSString *imageName = icons[@(type)];
@@ -24,57 +24,69 @@ static NSDictionary *icons;
} }
+ (NSArray *)databaseIcons { + (NSArray *)databaseIcons {
NSDictionary *imageNames = [MPIconHelper availableIconNames]; static NSArray *icons;
NSMutableArray *icons = [[NSMutableArray alloc] initWithCapacity:[imageNames count]]; static dispatch_once_t onceToken;
for(NSNumber *iconNumber in [imageNames allKeys]) { dispatch_once(&onceToken, ^{
if([iconNumber integerValue] > MPCustomIconTypeBegin) { NSDictionary *imageNames = [MPIconHelper availableIconNames];
continue; // Skip all non-db Keys NSMutableArray *mutableIcons = [[NSMutableArray alloc] initWithCapacity:[imageNames count]];
for(NSNumber *iconNumber in [imageNames allKeys]) {
if([iconNumber integerValue] > MPCustomIconTypeBegin) {
continue; // Skip all non-db Keys
}
MPIconType iconType = (MPIconType)[iconNumber integerValue];
[mutableIcons addObject:[MPIconHelper icon:iconType]];
} }
MPIconType iconType = (MPIconType)[iconNumber integerValue]; icons = mutableIcons;
[icons addObject:[MPIconHelper icon:iconType]]; });
}
return icons; return icons;
} }
+ (NSDictionary *)availableIconNames { + (NSDictionary *)availableIconNames {
NSDictionary *imageNames = @{ static NSDictionary *imageNames;
@(MPIconPassword): @"00_PasswordTemplate", static dispatch_once_t onceToken;
@(MPIconPackageNetwork): @"01_PackageNetworkTemplate", dispatch_once(&onceToken, ^{
@(MPIconWarning): @"02_MessageBoxWarningTemplate", imageNames = @{
@(MPIconServer): @"03_ServerTemplate", @(MPIconPassword): @"00_PasswordTemplate",
@(MPIconKlipper): @"04_KlipperTemplate", @(MPIconPackageNetwork): @"01_PackageNetworkTemplate",
@(MPIconLanguages): @"05_LanguagesTemplate", @(MPIconWarning): @"02_MessageBoxWarningTemplate",
@(MPIconBlockDevice): @"06_BlockDeviceTemplate", @(MPIconServer): @"03_ServerTemplate",
@(MPIconNotepad): @"07_NotepadTemplate", @(MPIconKlipper): @"04_KlipperTemplate",
@(MPIconSocket): @"08_SocketTemplate", @(MPIconLanguages): @"05_LanguagesTemplate",
@(MPIconIdentity): @"09_IdentityTemplate", @(MPIconBlockDevice): @"06_BlockDeviceTemplate",
@(MPIconContact): @"10_ContactTemplate", @(MPIconNotepad): @"07_NotepadTemplate",
@(MPIconCamera): @"11_CameraTemplate", @(MPIconSocket): @"08_SocketTemplate",
@(MPIconRemote): @"12_RemoteTemplate", @(MPIconIdentity): @"09_IdentityTemplate",
@(MPIconKeys): @"13_KeysTemplate", @(MPIconContact): @"10_ContactTemplate",
@(MPIconCamera): @"11_CameraTemplate",
@(MPIconScanner): @"15_ScannerTemplate", @(MPIconRemote): @"12_RemoteTemplate",
@(MPIconBrowser): @"16_BrowserTemplate", @(MPIconKeys): @"13_KeysTemplate",
@(MPIconCDRom): @"17_CDRomTemplate", @(MPIconBattery): @"14_BatteryTemplate",
@(MPIconDisplay): @"18_DisplayTemplate", @(MPIconScanner): @"15_ScannerTemplate",
@(MPIconEmail): @"19_EmailTemplate", @(MPIconBrowser): @"16_BrowserTemplate",
@(MPIconMisc): @"20_MiscTemplate", @(MPIconCDRom): @"17_CDRomTemplate",
@(MPIconDisplay): @"18_DisplayTemplate",
@(MPIconFileSave): @"26_FileSaveTemplate", @(MPIconEmail): @"19_EmailTemplate",
@(MPIconMisc): @"20_MiscTemplate",
@(MPIconTrash): @"43_TrashTemplate",
@(MPIconFileSave): @"26_FileSaveTemplate",
@(MPIconFolder): @"48_FolderTemplate",
@(MPIconTerminal) : @"30_TerminalTemplate",
@(MPIconPhone): @"68_PhoneTemplate", @(MPIconPrint) : @"31_PrintTemplate",
@(MPIconInfo): @"99_InfoTemplate", @(MPIconTrash): @"43_TrashTemplate",
@(MPIconAddFolder): @"99_AddFolderTemplate",
@(MPIconHardDisk): @"99_HarddiskTemplate", @(MPIconFolder): @"48_FolderTemplate",
@(MPIconCreated): @"99_CreatedTemplate",
@(MPIconAddEntry): @"addEntryTemplate", @(MPIconPhone): @"68_PhoneTemplate",
@(MPIconContextTriangle): @"contextTriangleTemplate"
}; @(MPIconInfo): @"99_InfoTemplate",
@(MPIconAddFolder): @"99_AddFolderTemplate",
@(MPIconHardDisk): @"99_HarddiskTemplate",
@(MPIconCreated): @"99_CreatedTemplate",
@(MPIconAddEntry): @"addEntryTemplate",
@(MPIconContextTriangle): @"contextTriangleTemplate"
};
});
return imageNames; return imageNames;
} }
@end @end