📄 mainwindowcontroller.mm
字号:
}- (IBAction)onModifyNickFont:(id)sender { m_modifyFont = _kFontNick; NSFontManager* fm = [NSFontManager sharedFontManager]; [fm setDelegate:self]; [fm setAction:@selector(onFontChanged:)]; [fm setSelectedFont:[FontTool nickFontWithPreference:[m_me QQ]] isMultiple:NO]; [fm orderFrontFontPanel:self];}- (IBAction)onModifySignatureFont:(id)sender { m_modifyFont = _kFontSignature; NSFontManager* fm = [NSFontManager sharedFontManager]; [fm setDelegate:self]; [fm setAction:@selector(onFontChanged:)]; [fm setSelectedFont:[FontTool signatureFontWithPreference:[m_me QQ]] isMultiple:NO]; [fm orderFrontFontPanel:self];}- (IBAction)onFontChanged:(id)sender { if(m_modifyFont == -1) return; // get font NSFont* font = [NSFont fontWithName:@"Helvetica" size:[NSFont systemFontSize]]; // get new font font = [[sender fontPanel:NO] panelConvertFont:font]; // get font trait mask NSFontTraitMask mask = [sender traitsOfFont:font]; // save font info to preference PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; switch(m_modifyFont) { case _kFontNick: [cache setNickFontName:[font familyName]]; [cache setNickFontSize:[font pointSize]]; [cache setNickFontStyleBold:((mask & NSBoldFontMask) != 0)]; [cache setNickFontStyleItalic:((mask & NSItalicFontMask) != 0)]; break; case _kFontSignature: [cache setSignatureFontName:[font familyName]]; [cache setSignatureFontSize:[font pointSize]]; [cache setSignatureFontStyleBold:((mask & NSBoldFontMask) != 0)]; [cache setSignatureFontStyleItalic:((mask & NSItalicFontMask) != 0)]; break; } // reload to reflect the change [m_userOutline reloadData]; [m_clusterOutline reloadData]; [m_recentTable reloadData]; [m_mobileTable reloadData];}- (IBAction)onOutlineBackgroundColorWell:(id)sender { m_modifyColor = _kColorOutlineBackground; NSColorPanel* panel = [NSColorPanel sharedColorPanel]; [panel setTarget:self]; [panel setAction:@selector(onColorChanged:)]; [panel orderFront:self];}- (IBAction)onNickFontColorWell:(id)sender { m_modifyColor = _kColorNickFont; NSColorPanel* panel = [NSColorPanel sharedColorPanel]; [panel setTarget:self]; [panel setAction:@selector(onColorChanged:)]; [panel orderFront:self];}- (IBAction)onSignatureFontColorWell:(id)sender { m_modifyColor = _kColorSignatureFont; NSColorPanel* panel = [NSColorPanel sharedColorPanel]; [panel setTarget:self]; [panel setAction:@selector(onColorChanged:)]; [panel orderFront:self];}- (IBAction)onColorChanged:(id)sender { if(m_modifyColor == -1) return; PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; switch(m_modifyColor) { case _kColorOutlineBackground: [cache setBackground:[m_outlineBackgroundColorWell color]]; [m_userOutline setBackgroundColor:[cache background]]; [m_clusterOutline setBackgroundColor:[cache background]]; [m_recentTable setBackgroundColor:[cache background]]; [m_mobileTable setBackgroundColor:[cache background]]; break; case _kColorNickFont: [cache setNickFontColor:[m_outlineDefaultFontColorWell color]]; [m_userOutline reloadData]; [m_clusterOutline reloadData]; [m_recentTable reloadData]; [m_mobileTable reloadData]; break; case _kColorSignatureFont: [cache setSignatureFontColor:[m_signatureFontColorWell color]]; [m_userOutline reloadData]; [m_clusterOutline reloadData]; [m_recentTable reloadData]; [m_mobileTable reloadData]; break; }}- (IBAction)onNewMobile:(id)sender { m_sheetType = _kSheetNewMobile; [m_txtMobileName setStringValue:kStringEmpty]; [m_txtMobileNumber setStringValue:kStringEmpty]; [NSApp beginSheet:m_mobileInfoWindow modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(inputSheetDidEnd:returnCode:contextInfo:) contextInfo:nil];}- (IBAction)onModifyMobile:(id)sender { int row = [m_mobileTable selectedRow]; if(row != -1) { Mobile* m = [m_groupManager mobileAtIndex:row]; if(m) { m_sheetType = _kSheetModifyMobile; [m_txtMobileName setStringValue:[m name]]; [m_txtMobileNumber setStringValue:[m mobile]]; [NSApp beginSheet:m_mobileInfoWindow modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(inputSheetDidEnd:returnCode:contextInfo:) contextInfo:nil]; } }}- (IBAction)onDeleteMobile:(id)sender { int row = [m_mobileTable selectedRow]; Mobile* mobile = [m_groupManager mobileAtIndex:row]; if(mobile) { [m_groupManager removeMobile:mobile]; [m_mobileTable reloadData]; }}- (IBAction)onMobileInfoOK:(id)sender { [NSApp endSheet:m_mobileInfoWindow returnCode:YES]; [m_mobileInfoWindow orderOut:self];}- (IBAction)onMobileInfoCancel:(id)sender { [NSApp endSheet:m_mobileInfoWindow returnCode:NO]; [m_mobileInfoWindow orderOut:self];}- (IBAction)onSendSMSToQQ:(id)sender { User* user = [m_userOutline itemAtRow:[m_userOutline selectedRow]]; if(user) { [m_windowRegistry showMobileIMWindowOrTab:user mainWindow:self]; }}- (IBAction)onSendSMSToMobile:(id)sender { int row = [m_mobileTable selectedRow]; Mobile* mobile = [m_groupManager mobileAtIndex:row]; if(mobile) { [m_windowRegistry showMobileIMWindowOrTabByMobile:mobile mainWindow:self]; }}- (IBAction)onRestoreFromAutoHide:(id)sender { if(m_sideWindow) { // clear flag m_autoHided = NO; // show main window, forbid autoresizing NSRect frame = [[self window] frame]; [[[self window] contentView] setAutoresizesSubviews:NO]; [[self window] setFrame:[m_sideWindow frame] display:NO]; [[self window] setAlphaValue:0.0]; [[self window] orderFront:self]; // begin animation m_animationType = _kAnimationRestoreFromAutoHide; [AnimationHelper moveWindow:[self window] from:[m_sideWindow frame] to:frame fadeIn:nil fadeOut:m_sideWindow delegate:self]; }}- (IBAction)onScreenscrap:(id)sender { ScreenscrapHelper* helper = [ScreenscrapHelper sharedHelper]; [helper beginScreenscrap];}- (IBAction)onQBarPluginOK:(id)sender { [NSApp endSheet:m_winQBarPlugins returnCode:YES]; [m_winQBarPlugins orderOut:self];}- (IBAction)onQBarPluginCancel:(id)sender { [NSApp endSheet:m_winQBarPlugins returnCode:NO]; [m_winQBarPlugins orderOut:self];}#pragma mark -#pragma mark helpers- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem { if([NSStringFromSelector([menuItem action]) isEqualToString:@"performClose:"]) { PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; if([cache hideOnClose]) [menuItem setTitle:L(@"LQHide")]; else [menuItem setTitle:L(@"LQClose")]; return YES; } else return YES;}- (void)changeClusterMessageSetting:(Cluster*)cluster newMessageSetting:(char)newSetting { // if same, return if([cluster messageSetting] == newSetting) return; // include [m_messageQueue restoreClusterInUnread:[cluster internalId]]; // change setting [cluster setMessageSetting:newSetting]; switch(newSetting) { case kQQClusterMessageAccept: if([cluster messageCount] > 0) [[TimerTaskManager sharedManager] addTask:[ModelEffectTask taskWithMainWindow:self object:cluster]]; break; case kQQClusterMessageAutoEject: case kQQClusterMessageBlock: [[TimerTaskManager sharedManager] removeTasks:cluster]; break; case kQQClusterMessageDisplayCount: case kQQClusterMessageAcceptNoPrompt: [m_messageQueue setExcludeClusterInUnread:[cluster internalId]]; [[TimerTaskManager sharedManager] removeTasks:cluster]; [m_clusterOutline reloadItem:cluster]; break; }}- (void)saveImportantInfo { // get system perference PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; // only save these when current tab item is Main item if([[[m_tabMain selectedTabViewItem] label] isEqualToString:_kTabViewItemMain]) { // save frame, include toolbar size [cache setWnidowFrame:[[self window] frame]]; // save toolbar visible state [cache setHideToolbar:![m_toolbar isVisible]]; } // save frame [cache sync]; // save group [m_groupManager saveGroups]; // save face [m_faceManager save]; // save history [m_historyManager save];}- (void)refreshDockIcon { PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; NSImage* icon = [ImageTool iconWithMessageCount:[m_me isMM] status:[m_me status] unread:[LumaQQApplication pendingMessageCount] showUnread:[cache displayUnreadCountOnDock] hasMessage:([m_messageQueue pendingMessageCount] > 0)]; [NSApp setApplicationIconImage:icon]; if(m_autoHided) { icon = [ImageTool iconWithMessageCount:[m_me isMM] status:[m_me status] unread:[m_messageQueue pendingMessageCount] showUnread:[cache displayUnreadCountOnDock] hasMessage:([m_messageQueue pendingMessageCount] > 0)]; [m_ivSide setImage:icon]; }}- (BOOL)registerExtractMessageHotKey { PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; HotKey* hotKey = [HotKey hotKeyWithOwner:[m_me QQ] string:[cache extractMessageHotKey] target:self action:@selector(onExtractMessage:)]; return [[HotKeyManager sharedHotKeyManager] registerHotKey:hotKey];}- (BOOL)registerScreenscrapHotKey { PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; HotKey* hotKey = [HotKey hotKeyWithOwner:[m_me QQ] string:[cache screenscrapHotKey] target:self action:@selector(onScreenscrap:)]; return [[HotKeyManager sharedHotKeyManager] registerHotKey:hotKey];}- (void)removeUserFromOutline:(User*)user { Group* g = [m_groupManager group:[user groupIndex]]; if([m_groupManager removeUser:user] && g) { [m_userOutline reloadItem:g reloadChildren:YES]; }}- (void)restoreLastFrameOrigin { // load file PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; NSRect frame = [cache windowFrame]; if(frame.origin.x != 0) [[self window] setFrameTopLeftPoint:NSMakePoint(frame.origin.x, frame.origin.y + frame.size.height)];}- (void)restoreLastFrame { // load file PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; NSRect frame = [cache windowFrame]; if(frame.origin.x != 0) [[self window] setFrame:frame display:YES];}- (void)shutdownNetwork { // play sound PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]]; if([cache isEnableSound]) [[SoundHelper shared] playSound:kLQSoundLogout QQ:[m_me QQ]]; // growl if([[m_client user] logged]) [[GrowlApplicationBridge growlDelegate] logout:m_me]; // logout [m_client logout]; // shutdown network [m_client shutdownNetworkLayer];}- (void)restartNetwork { // show window, start animate, set hint [m_tabMain selectTabViewItemAtIndex:0]; [self setToolbarVisibility:NO]; [[self window] setShowsToolbarButton:NO]; [[self window] setTitle:[NSString stringWithFormat:@"%d", [m_me QQ]]]; [m_piLogin startAnimation:self]; [m_txtHint setStringValue:L(@"LQHintInitialize", @"MainWindow")]; // create qq client object if(m_client) { [m_client release]; [m_client dealloc]; m_client = nil; } m_client = [[QQClient alloc] initWithConnection:m_connection]; [m_client setDelegate:self]; // add self as a qq listener [m_client addQQListener:m_mainQQListener]; // create qq user QQUser* user = [[QQUser alloc] initWithQQ:[m_me QQ] passwordKey:m_password passwordMd5:m_passwordMd5]; [user setLoginStatus:m_loginStatus]; [m_client setQQUser:user]; [user release]; // re-activate qbar plugin because we created a new qq client id<QBarPlugin> plugin = [m_qbarView plugin]; if(plugin) [plugin pluginReactivated]; // start network layer [m_client startNetworkLayer];}- (void)returnToLogin { // reset control status [m_piLogin stopAnimation:self]; // close main window, reopen login window [self close]; LoginWindowController* loginWindowController = [[LoginWindowController alloc] init]; [loginWindowController showWindow:self]; [[loginWindowController window] center];}- (void)refreshStatusUI { [m_me setStatus:[[m_client user] status]]; [(HeadControl*)[m_headItem view] setObjectValue:m_me]; PreferenceCache* cache = [PreferenceCache cache:[m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -