⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preferencewindowcontroller.mm

📁 lumaqq
💻 MM
📖 第 1 页 / 共 2 页
字号:
/* * 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 0 2111-1307 USA */#import "Constants.h"#import "LocalizedStringTool.h"#import "MainWindowController.h"#import "PreferenceCache.h"#import "PreferenceWindowController.h"#import "WindowRegistry.h"#import "HotKeyManager.h"#import "AlertTool.h"#import "NSString-Validate.h"#import "ImageTool.h"#import "MessageWingTask.h"#import "TimerTaskManager.h"#define _kTagAlwaysOnTop 5#define _kTagAutoEjectMessage 1#define _kTagAutoHideMainWindow 2#define _kTagUseTabStyleIMWindow 3#define _kTagHideMainWindowWhenClose 4#define _kTagDisableOutlineTooltip 6#define _kTagRejectStrangerMessage 0#define _kTagDisableUserOnlineTip 1#define _kTagDisplayUnreadCountOnDock 2#define _kTagJumpIconWhenReceivedIM 3#define _kTagDisableDockIconAnimation 4#define _kProtocolUDP 1#define _kProtocolTCP 0#define _kProxyTypeNone 0#define _kProxyTypeHTTP 3#define _kProxyTypeSocks4 1#define _kProxyTypeSocks5 2@implementation PreferenceWindowController- (id)initWithMainWindow:(MainWindowController*)mainWindowController {	self = [super init];	if (self != nil) {		m_mainWindowController = [mainWindowController retain];		m_soundFiles = [[NSMutableDictionary dictionary] retain];	}	return self;}- (NSString *)windowNibName {	return @"Preference";}- (NSString*)toolbarIdentifier {	return @"LumaQQPreferenceToolbar";}- (void) dealloc {	[m_mainWindowController release];	[m_soundFiles release];	[super dealloc];}- (void)windowWillClose:(NSNotification *)aNotification {	if([aNotification object] != [self window])		return;		// refresh dock icon	PreferenceCache* cache = [PreferenceCache cache:[[m_mainWindowController me] QQ]];	[m_mainWindowController refreshDockIcon];	if(![cache disableDockIconAnimation] && [[m_mainWindowController messageQueue] pendingMessageCount] > 0)		[[TimerTaskManager sharedManager] addTask:[MessageWingTask taskWithMainWindow:m_mainWindowController]];		[WindowRegistry unregisterPreferenceWindow:[[m_mainWindowController me] QQ]];	[super windowWillClose:aNotification];}- (void)windowDidLoad {	[super windowDidLoad];		// set window title	[[self window] setTitle:[NSString stringWithFormat:L(@"LQTitle", @"Preference"), [[m_mainWindowController me] QQ]]];		// get preference	PreferenceCache* cache = [PreferenceCache cache:[[m_mainWindowController me] QQ]];		// init basic panel	if([cache alwaysOnTop])		[m_mxWindow selectCellWithTag:_kTagAlwaysOnTop];	if([cache autoEjectMessage])		[m_mxWindow selectCellWithTag:_kTagAutoEjectMessage];	if([cache autoHideMainWindow])		[m_mxWindow selectCellWithTag:_kTagAutoHideMainWindow];	if([cache useTabStyleIMWindow])		[m_mxWindow selectCellWithTag:_kTagUseTabStyleIMWindow];	if([cache hideOnClose])		[m_mxWindow selectCellWithTag:_kTagHideMainWindowWhenClose];	if([cache disableOutlineTooltip])		[m_mxWindow selectCellWithTag:_kTagDisableOutlineTooltip];	if([cache rejectStrangerMessage])		[m_mxOverall selectCellWithTag:_kTagRejectStrangerMessage];	if(![cache isUserOnlineTipEnabled])		[m_mxOverall selectCellWithTag:_kTagDisableUserOnlineTip];	if([cache displayUnreadCountOnDock])		[m_mxOverall selectCellWithTag:_kTagDisplayUnreadCountOnDock];	if([cache jumpIconWhenReceivedIM])		[m_mxOverall selectCellWithTag:_kTagJumpIconWhenReceivedIM];	if([cache disableDockIconAnimation])		[m_mxOverall selectCellWithTag:_kTagDisableDockIconAnimation];	[m_mxUpload selectCellWithTag:[cache uploadFriendGroupMode]];		// init hotkey panel	[m_hotKeyExtractMessage setAlignment:NSCenterTextAlignment];	[m_hotKeyExtractMessage setString:[cache extractMessageHotKey]];	[m_hotKeyScreenscrap setAlignment:NSCenterTextAlignment];	[m_hotKeyScreenscrap setString:[cache screenscrapHotKey]];		// init sound panel	[m_chkEnableSound setState:[cache isEnableSound]];	[self enableSoundBox:[cache isEnableSound]];	[self onSoundTypeChanged:m_pbSoundType];		// load sound schema menu from plugin	NSMenu* menu = [m_pbSoundSchema menu];	[[menu itemAtIndex:0] setAction:@selector(onSoundSchemaChanged:)];	[[menu itemAtIndex:0] setTarget:self];	int index = 0;	int selected = 0;	NSEnumerator* e = [[m_mainWindowController pluginManager] soundPluginEnumerator];	while(id<LQPlugin> plugin = [e nextObject]) {		NSMenuItem* item = [[[NSMenuItem alloc] init] autorelease];		[item setTitle:[plugin pluginDescription]];		[item setAction:@selector(onSoundSchemaChanged:)];		[item setTarget:self];		[menu addItem:item];				index++;		if([[cache baseSoundSchema] isEqualToString:[plugin pluginName]])			selected = index;	}		// set sound schema	[m_pbSoundSchema selectItemAtIndex:selected];		// init recent contact panel	[m_chkKeepStrangerInRecentContactList setState:[cache keepStrangerInRecentContact]];	[m_txtMaxRecentContact setStringValue:[NSString stringWithFormat:@"%u", [cache maxRecentContact]]];		// save preference, so we can undo it if user press cancel	[cache sync];}#pragma mark -#pragma mark helper- (void)enableSoundBox:(BOOL)enable {	[m_pbSoundType setEnabled:enable];	[m_btnPlay setEnabled:enable];	[m_btnBrowse setEnabled:enable];	[m_txtSoundFile setEditable:enable];	[m_txtSoundFile setTextColor:(enable ? [NSColor textColor] : [NSColor disabledControlTextColor])];	[m_lblSoundFile setTextColor:(enable ? [NSColor textColor] : [NSColor disabledControlTextColor])];	[m_lblSoundSchema setTextColor:(enable ? [NSColor textColor] : [NSColor disabledControlTextColor])];	[m_lblSoundType setTextColor:(enable ? [NSColor textColor] : [NSColor disabledControlTextColor])];	[m_pbSoundSchema setEnabled:enable];}- (NSString*)validate {	// get preference	PreferenceCache* cache = [PreferenceCache cache:[[m_mainWindowController me] QQ]];		// duplicated hot key?	NSString* newExMsgKey = [m_hotKeyExtractMessage string];	NSString* newScrapKey = [m_hotKeyScreenscrap string];	if([newExMsgKey isEqualToString:newScrapKey])		return L(@"LQWarningDuplicatedHotKey", @"Preference");		// hot key registered?		NSString* oldKey = [cache extractMessageHotKey];	if(![newExMsgKey isEmpty] && ![newExMsgKey isEqualToString:oldKey]) {		if([[HotKeyManager sharedHotKeyManager] isHotKeyRegistered:newExMsgKey owner:[[m_mainWindowController me] QQ]])			return L(@"LQWarningConflictedExtractMessageKey", @"Preference");	}	oldKey = [cache screenscrapHotKey];	if(![newScrapKey isEmpty] && ![newScrapKey isEqualToString:oldKey]) {		if([[HotKeyManager sharedHotKeyManager] isHotKeyRegistered:newScrapKey owner:[[m_mainWindowController me] QQ]])			return L(@"LQWarningConflictedScreenscrapKey", @"Preference");	}		return nil;}- (void)savePreference {	// get preference	PreferenceCache* cache = [PreferenceCache cache:[[m_mainWindowController me] QQ]];		// save sound setting	[cache setEnableSound:[m_chkEnableSound state]];	int schema = [m_pbSoundSchema indexOfSelectedItem];	if(schema == 0)		[cache setBaseSoundSchema:@""];	else		[cache setBaseSoundSchema:[[[m_mainWindowController pluginManager] soundPluginAtIndex:(schema - 1)] pluginName]];	for(int i = kSoundIdUserMessage; i <= kSoundIdMessageBlocked; i++) {		NSString* file = [m_soundFiles objectForKey:[NSNumber numberWithInt:i]];		if(file) {			switch(i) {				case kSoundIdUserMessage:					[cache setUserMessageSoundFile:file];					break;				case kSoundIdClusterMessage:					[cache setClusterMessageSoundFile:file];					break;				case kSoundIdMobileMessage:					[cache setMobileMessageSoundFile:file];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -