📄 preferencecache.mm
字号:
/* * LumaQQ - Cross platform QQ client, special edition for Mac * * Copyright (C) 2007 luma <stubma@163.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#import "PreferenceCache.h"#import "PreferenceConstants.h"#import "PreferenceManager.h"#import "KeyTool.h"#import "Constants.h"static NSMutableDictionary* caches = nil;@implementation PreferenceCache+ (void)initialize { caches = [[NSMutableDictionary dictionary] retain];}+ (PreferenceCache*)cache:(UInt32)QQ { PreferenceCache* cache = [caches objectForKey:[NSNumber numberWithUnsignedInt:QQ]]; if(!cache) cache = [[PreferenceCache alloc] initWithQQ:QQ]; return cache;}- (id)initWithQQ:(UInt32)QQ { self = [super init]; if (self) { m_QQ = QQ; m_dirty = NO; // default value m_windowFrame = NSMakeRect(0, 0, 0, 0); m_showLargeUserHead = YES; m_showClusterNameCard = YES; m_showRealName = YES; m_showNickName = YES; m_showLevel = YES; m_showSignature = YES; m_showUserProperty = YES; m_showStatusMessage = YES; m_showOnlineOnly = NO; m_alternatingRowBackground = NO; m_showHorizontalLine = NO; m_backgroundRed = 1.0; m_backgroundGreen = 1.0; m_backgroundBlue = 1.0; m_chatFontColorRed = 0.0; m_chatFontColorGreen = 0.0; m_chatFontColorBlue = 0.0; m_chatFontSize = [NSFont systemFontSize]; m_chatFontStyleBold = NO; m_chatFontStyleItalic = NO; m_chatFontStyleUnderline = NO; m_chatFontName = @"Helvetica"; m_showTabStyleIMWindow = NO; m_nickFontName = @"Lucida Grande"; m_nickFontSize = [NSFont systemFontSize]; m_nickFontStyleBold = NO; m_nickFontStyleItalic = NO; m_nickFontColorRed = 0.0; m_nickFontColorGreen = 0.0; m_nickFontColorBlue = 0.0; m_signatureFontName = @"Lucida Grande"; m_signatureFontSize = [NSFont systemFontSize]; m_signatureFontStyleBold = NO; m_signatureFontStyleItalic = NO; m_signatureFontColorRed = 0.5; m_signatureFontColorGreen = 0.5; m_signatureFontColorBlue = 0.5; m_hideToolbar = NO; m_disableDockIconAnimation = NO; m_showFakeCamera = NO; m_disableOutlineTooltip = NO; m_newLineKey = [[KeyTool key2String:NSCommandKeyMask character:NSCarriageReturnCharacter] retain]; m_closeKey = [[KeyTool key2String:NSAlternateKeyMask character:'C'] retain]; m_historyKey = [[KeyTool key2String:NSAlternateKeyMask character:'H'] retain]; m_switchTabKey = [[KeyTool key2String:NSAlternateKeyMask character:'Q'] retain]; m_sendKey = [[KeyTool key2String:0 character:NSCarriageReturnCharacter] retain]; m_extractMessageHotKey = [[KeyTool key2String:(NSCommandKeyMask | NSControlKeyMask) character:'Z'] retain]; m_screenscrapHotKey = [[KeyTool key2String:(NSCommandKeyMask | NSControlKeyMask) character:'A'] retain]; m_enableSound = YES; m_baseSoundSchema = kStringEmpty; m_userMessageSoundFile = m_clusterMessageSoundFile = m_mobileMessageSoundFile = m_systemMessageSoundFile = m_badSystemMessageSoundFile = m_goodSystemMessageSoundFile = m_loginSoundFile = m_logoutSoundFile = m_kickedOutSoundFile = m_userOnlineSoundFile = m_messageBlockedSoundFile = kStringEmpty; m_alwaysOnTop = NO; m_autoEjectMessage = NO; m_autoHideMainWindow = NO; m_useTabStyleIMWindow = NO; m_disableUserOnlineTip = YES; m_hideOnClose = YES; m_rejectStrangerMessage = NO; m_displayUnreadCountOnDock = YES; m_jumpIconWhenReceivedIM = YES; m_uploadFriendGroupMode = kLQUploadAsk; m_statusMessage = kStringEmpty; m_statusHistory = [[NSMutableArray array] retain]; m_keepStrangerInRecentContact = YES; m_maxRecentContact = 20; m_activeQBarName = kStringEmpty; // reload [self reload]; // cache it [caches setObject:self forKey:[NSNumber numberWithUnsignedInt:QQ]]; } return self;}- (void) dealloc { if(m_dirty) [self sync]; [m_chatFontName release]; [m_nickFontName release]; [m_signatureFontName release]; [m_newLineKey release]; [m_closeKey release]; [m_historyKey release]; [m_switchTabKey release]; [m_sendKey release]; [m_extractMessageHotKey release]; [m_userMessageSoundFile release]; [m_clusterMessageSoundFile release]; [m_mobileMessageSoundFile release]; [m_systemMessageSoundFile release]; [m_userOnlineSoundFile release]; [m_activeQBarName release]; [m_statusMessage release]; [m_statusHistory release]; [super dealloc];}- (void)reload { // load system preference if([PreferenceManager isPerferenceExist:m_QQ file:kLQFileSystem]) { PreferenceManager* prefSystem = [PreferenceManager managerWithQQ:m_QQ file:kLQFileSystem]; m_showLargeUserHead = [prefSystem boolForKey:kLQUIShowLargeUserHead]; m_showClusterNameCard = [prefSystem boolForKey:kLQUIShowClusterNameCard]; m_showRealName = [prefSystem boolForKey:kLQUIShowRealName]; m_showNickName = [prefSystem boolForKey:kLQUIShowNickName]; m_showLevel = [prefSystem boolForKey:kLQUIShowLevel]; m_showOnlineOnly = [prefSystem boolForKey:kLQUIShowOnlineOnly]; m_showSignature = [prefSystem boolForKey:kLQUIShowSignature]; m_showUserProperty = [prefSystem boolForKey:kLQUIShowUserProperty]; m_showStatusMessage = [prefSystem boolForKey:kLQUIShowStatusMessage]; m_alternatingRowBackground = [prefSystem boolForKey:kLQUIAlternatingRowBackground]; m_showHorizontalLine = [prefSystem boolForKey:kLQUIShowHorizontalLine]; m_windowFrame.origin.x = [prefSystem integerForKey:kLQUIWindowX]; m_windowFrame.origin.y = [prefSystem integerForKey:kLQUIWindowY]; m_windowFrame.size.width = [prefSystem integerForKey:kLQUIWindowWidth]; m_windowFrame.size.height = [prefSystem integerForKey:kLQUIWindowHeight]; m_backgroundRed = [prefSystem floatForKey:kLQUIBackgroundRed]; m_backgroundGreen = [prefSystem floatForKey:kLQUIBackgroundGreen]; m_backgroundBlue = [prefSystem floatForKey:kLQUIBackgroundBlue]; m_chatFontColorRed = [prefSystem floatForKey:kLQUIChatFontColorRed]; m_chatFontColorGreen = [prefSystem floatForKey:kLQUIChatFontColorGreen]; m_chatFontColorBlue = [prefSystem floatForKey:kLQUIChatFontColorBlue]; m_chatFontStyleBold = [prefSystem boolForKey:kLQUIChatFontStyleBold]; m_chatFontStyleItalic = [prefSystem boolForKey:kLQUIChatFontStyleItalic]; m_chatFontStyleUnderline = [prefSystem boolForKey:kLQUIChatFontStyleUnderline]; m_chatFontSize = [prefSystem integerForKey:kLQUIChatFontSize]; m_nickFontColorRed = [prefSystem floatForKey:kLQUINickFontColorRed]; m_nickFontColorGreen = [prefSystem floatForKey:kLQUINickFontColorGreen]; m_nickFontColorBlue = [prefSystem floatForKey:kLQUINickFontColorBlue]; m_nickFontStyleBold = [prefSystem boolForKey:kLQUINickFontStyleBold]; m_nickFontStyleItalic = [prefSystem boolForKey:kLQUINickFontStyleItalic]; m_nickFontSize = [prefSystem integerForKey:kLQUINickFontSize]; m_signatureFontColorRed = [prefSystem floatForKey:kLQUISignatureFontColorRed]; m_signatureFontColorGreen = [prefSystem floatForKey:kLQUISignatureFontColorGreen]; m_signatureFontColorBlue = [prefSystem floatForKey:kLQUISignatureFontColorBlue]; m_signatureFontStyleBold = [prefSystem boolForKey:kLQUISignatureFontStyleBold]; m_signatureFontStyleItalic = [prefSystem boolForKey:kLQUISignatureFontStyleItalic]; m_signatureFontSize = [prefSystem integerForKey:kLQUISignatureFontSize]; m_hideToolbar = [prefSystem boolForKey:kLQUIHideToolbar]; m_disableDockIconAnimation = [prefSystem boolForKey:kLQUIDisableDockIconAnimation]; m_showFakeCamera = [prefSystem boolForKey:kLQUIShowFakeCamera]; m_disableOutlineTooltip = [prefSystem boolForKey:kLQUIDisableOutlineTooltip]; NSString* s = [prefSystem stringForKey:kLQUIChatFontName]; if(s) [self setChatFontName:s]; s = [prefSystem stringForKey:kLQUINickFontName]; if(s) [self setNickFontName:s]; s = [prefSystem stringForKey:kLQUISignatureFontName]; if(s) [self setSignatureFontName:s]; m_showTabStyleIMWindow = [prefSystem boolForKey:kLQUIShowTabStyleIMWindow]; s = [prefSystem stringForKey:kLQKeyNewLine]; if(s) [self setNewLineKey:s]; s = [prefSystem stringForKey:kLQKeyClose]; if(s) [self setCloseKey:s]; s = [prefSystem stringForKey:kLQKeyHistory]; if(s) [self setHistoryKey:s]; s = [prefSystem stringForKey:kLQKeySwitchTab]; if(s) [self setSwitchTabKey:s]; s = [prefSystem stringForKey:kLQKeySend]; if(s) [self setSendKey:s]; s = [prefSystem stringForKey:kLQHotKeyExtractMessage]; if(s) [self setExtractMessageHotKey:s]; s = [prefSystem stringForKey:kLQHotKeyScreenscrap]; if(s) [self setScreenscrapHotKey:s]; m_enableSound = [prefSystem boolForKey:kLQSoundEnabled]; s = [prefSystem stringForKey:kLQSoundBaseSchema]; if(s) [self setBaseSoundSchema:s]; s = [prefSystem stringForKey:kLQSoundUserMessage]; if(s) [self setUserMessageSoundFile:s]; s = [prefSystem stringForKey:kLQSoundClusterMessage]; if(s) [self setClusterMessageSoundFile:s]; s = [prefSystem stringForKey:kLQSoundMobileMessage]; if(s) [self setMobileMessageSoundFile:s]; s = [prefSystem stringForKey:kLQSoundSystemMessage]; if(s) [self setSystemMessageSoundFile:s]; s = [prefSystem stringForKey:kLQSoundUserOnline]; if(s) [self setUserOnlineSoundFile:s]; s = [prefSystem stringForKey:kLQSoundBadSystemMessage]; if(s) [self setBadSystemMessageSoundFile:s]; s = [prefSystem stringForKey:kLQSoundGoodSystemMessage]; if(s) [self setGoodSystemMessageSoundFile:s]; s = [prefSystem stringForKey:kLQSoundLogin]; if(s) [self setLoginSoundFile:s]; s = [prefSystem stringForKey:kLQSoundLogout]; if(s) [self setLogoutSoundFile:s]; s = [prefSystem stringForKey:kLQSoundKickedOut]; if(s) [self setKickedOutSoundFile:s]; s = [prefSystem stringForKey:kLQSoundMessageBlocked]; if(s) [self setMessageBlockedSoundFile:s]; m_alwaysOnTop = [prefSystem boolForKey:kLQBasicAlwaysOnTop]; m_autoEjectMessage = [prefSystem boolForKey:kLQBasicAutoEjectMessage]; m_autoHideMainWindow = [prefSystem boolForKey:kLQBasicAutoHideMainWindow]; m_useTabStyleIMWindow = [prefSystem boolForKey:kLQBasicUseTabIMStyleWindow]; m_disableUserOnlineTip = [prefSystem boolForKey:kLQBasicDisableUserOnlineTip]; m_hideOnClose = [prefSystem boolForKey:kLQBasicHideOnClose]; m_rejectStrangerMessage = [prefSystem boolForKey:kLQBasicRejectStranger]; m_displayUnreadCountOnDock = [prefSystem boolForKey:kLQBasicDisplayUnreadCountOnDock]; m_jumpIconWhenReceivedIM = [prefSystem boolForKey:kLQBasicJumpIconWhenReceivedIM]; m_uploadFriendGroupMode = [prefSystem integerForKey:kLQBasicUploadFriendGroup]; s = [prefSystem stringForKey:kLQBasicStatusMessage]; if(s) [self setStatusMessage:s]; NSMutableArray* tempArray = [prefSystem objectForKey:kLQBasicStatusHistory]; if(tempArray != m_statusHistory) { [self clearStatusHistory]; [m_statusHistory addObjectsFromArray:tempArray]; } m_keepStrangerInRecentContact = [prefSystem boolForKey:kLQRecentKeepStranger]; int temp = [prefSystem integerForKey:kLQRecentMax]; if(temp != 0) m_maxRecentContact = temp; s = [prefSystem objectForKey:kLQPluginActiveQBarName]; if(s) [self setActiveQBarName:s]; } }- (void)sync { if(!m_dirty) return; // load file PreferenceManager* prefSystem = [PreferenceManager managerWithQQ:m_QQ file:kLQFileSystem]; // initialize values [prefSystem setInteger:m_windowFrame.origin.x forKey:kLQUIWindowX]; [prefSystem setInteger:m_windowFrame.origin.y forKey:kLQUIWindowY]; [prefSystem setInteger:m_windowFrame.size.width forKey:kLQUIWindowWidth]; [prefSystem setInteger:m_windowFrame.size.height forKey:kLQUIWindowHeight]; [prefSystem setBool:m_showLargeUserHead forKey:kLQUIShowLargeUserHead]; [prefSystem setBool:m_showClusterNameCard forKey:kLQUIShowClusterNameCard]; [prefSystem setBool:m_showRealName forKey:kLQUIShowRealName]; [prefSystem setBool:m_showNickName forKey:kLQUIShowNickName]; [prefSystem setBool:m_showLevel forKey:kLQUIShowLevel]; [prefSystem setBool:m_showSignature forKey:kLQUIShowSignature]; [prefSystem setBool:m_showOnlineOnly forKey:kLQUIShowOnlineOnly]; [prefSystem setBool:m_showUserProperty forKey:kLQUIShowUserProperty]; [prefSystem setBool:m_showStatusMessage forKey:kLQUIShowStatusMessage]; [prefSystem setBool:m_alternatingRowBackground forKey:kLQUIAlternatingRowBackground]; [prefSystem setBool:m_showHorizontalLine forKey:kLQUIShowHorizontalLine]; [prefSystem setFloat:m_backgroundRed forKey:kLQUIBackgroundRed]; [prefSystem setFloat:m_backgroundGreen forKey:kLQUIBackgroundGreen]; [prefSystem setFloat:m_backgroundBlue forKey:kLQUIBackgroundBlue]; [prefSystem setFloat:m_chatFontColorRed forKey:kLQUIChatFontColorRed]; [prefSystem setFloat:m_chatFontColorGreen forKey:kLQUIChatFontColorGreen]; [prefSystem setFloat:m_chatFontColorBlue forKey:kLQUIChatFontColorBlue]; [prefSystem setBool:m_chatFontStyleBold forKey:kLQUIChatFontStyleBold]; [prefSystem setBool:m_chatFontStyleItalic forKey:kLQUIChatFontStyleItalic]; [prefSystem setBool:m_chatFontStyleUnderline forKey:kLQUIChatFontStyleUnderline]; [prefSystem setInteger:m_chatFontSize forKey:kLQUIChatFontSize]; [prefSystem setObject:m_chatFontName forKey:kLQUIChatFontName]; [prefSystem setObject:m_nickFontName forKey:kLQUINickFontName]; [prefSystem setFloat:m_nickFontColorRed forKey:kLQUINickFontColorRed]; [prefSystem setFloat:m_nickFontColorGreen forKey:kLQUINickFontColorGreen]; [prefSystem setFloat:m_nickFontColorBlue forKey:kLQUINickFontColorBlue]; [prefSystem setBool:m_nickFontStyleBold forKey:kLQUINickFontStyleBold]; [prefSystem setBool:m_nickFontStyleItalic forKey:kLQUINickFontStyleItalic]; [prefSystem setInteger:m_nickFontSize forKey:kLQUINickFontSize]; [prefSystem setObject:m_signatureFontName forKey:kLQUISignatureFontName]; [prefSystem setFloat:m_signatureFontColorRed forKey:kLQUISignatureFontColorRed]; [prefSystem setFloat:m_signatureFontColorGreen forKey:kLQUISignatureFontColorGreen]; [prefSystem setFloat:m_signatureFontColorBlue forKey:kLQUISignatureFontColorBlue]; [prefSystem setBool:m_signatureFontStyleBold forKey:kLQUISignatureFontStyleBold]; [prefSystem setBool:m_signatureFontStyleItalic forKey:kLQUISignatureFontStyleItalic]; [prefSystem setInteger:m_signatureFontSize forKey:kLQUISignatureFontSize]; [prefSystem setBool:m_showTabStyleIMWindow forKey:kLQUIShowTabStyleIMWindow]; [prefSystem setBool:m_hideToolbar forKey:kLQUIHideToolbar]; [prefSystem setBool:m_disableDockIconAnimation forKey:kLQUIDisableDockIconAnimation]; [prefSystem setBool:m_showFakeCamera forKey:kLQUIShowFakeCamera]; [prefSystem setBool:m_disableOutlineTooltip forKey:kLQUIDisableOutlineTooltip]; [prefSystem setObject:m_newLineKey forKey:kLQKeyNewLine]; [prefSystem setObject:m_closeKey forKey:kLQKeyClose]; [prefSystem setObject:m_historyKey forKey:kLQKeyHistory]; [prefSystem setObject:m_switchTabKey forKey:kLQKeySwitchTab]; [prefSystem setObject:m_sendKey forKey:kLQKeySend]; [prefSystem setObject:m_extractMessageHotKey forKey:kLQHotKeyExtractMessage]; [prefSystem setObject:m_screenscrapHotKey forKey:kLQHotKeyScreenscrap]; [prefSystem setBool:m_enableSound forKey:kLQSoundEnabled]; [prefSystem setObject:m_baseSoundSchema forKey:kLQSoundBaseSchema]; [prefSystem setObject:m_userMessageSoundFile forKey:kLQSoundUserMessage];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -