📄 mainwindowcontroller.mm
字号:
[[cluster organizationsDummy] setOperationSuffix:L(@"LQOperationSuffixGettInfo", @"MainWindow")]; [[cluster organizationsDummy] setRequested:YES]; [m_client getClusterInfo:[cluster internalId]]; [m_client updateOrganization:[cluster internalId]]; [m_clusterOutline reloadItem:[cluster organizationsDummy]]; }}- (IBAction)onEditOrganization:(id)sender { }- (IBAction)onCreateSubject:(id)sender { // find permanent cluster Cluster* cluster = nil; id obj = [m_clusterOutline itemAtRow:[m_clusterOutline selectedRow]]; if([obj isMemberOfClass:[Cluster class]]) cluster = (Cluster*)obj; else if([obj isMemberOfClass:[Dummy class]]) cluster = [m_clusterDataSource outlineView:m_clusterOutline parentOfItem:obj]; // open window if(cluster) { // get cluster info if no member in it if([cluster memberCount] == 0) [m_client getClusterInfo:[cluster internalId]]; CreateSubjectWindowController* csw = [[CreateSubjectWindowController alloc] initWithTempCluster:nil parentCluster:cluster mainWindow:self]; [csw showWindow:self]; }}- (IBAction)onCreateDialog:(id)sender { CreateDialogWindowController* cdw = [[CreateDialogWindowController alloc] initWithTempCluster:nil parentCluster:nil mainWindow:self]; [cdw showWindow:self];}- (IBAction)onDoubleClick:(id)sender { if(sender == m_userOutline) { int row = [m_userOutline selectedRow]; if(row == -1) return; id obj = [m_userOutline itemAtRow:row]; if([obj isMemberOfClass:[User class]]) { User* user = (User*)obj; [m_windowRegistry showNormalIMWindowOrTab:user mainWindow:self]; } else if([obj isMemberOfClass:[Group class]]) { if([m_userOutline isItemExpanded:obj]) [m_userOutline collapseItem:obj]; else [m_userOutline expandItem:obj]; } } else if(sender == m_clusterOutline) { int row = [m_clusterOutline selectedRow]; if(row == -1) return; id obj = [m_clusterOutline itemAtRow:row]; if([obj isMemberOfClass:[Cluster class]]) { Cluster* cluster = (Cluster*)obj; [m_windowRegistry showClusterIMWindowOrTab:cluster mainWindow:self]; } else if(![obj isMemberOfClass:[User class]]) { if([m_clusterOutline isItemExpanded:obj]) [m_clusterOutline collapseItem:obj]; else [m_clusterOutline expandItem:obj]; } } else if(sender == m_recentTable) { int row = [m_recentTable selectedRow]; if(row == -1) return; id obj = [m_recentDataSource tableView:m_recentTable objectValueForTableColumn:[m_recentTable tableColumnWithIdentifier:@"0"] row:row]; if([obj isMemberOfClass:[User class]]) [m_windowRegistry showNormalIMWindowOrTab:(User*)obj mainWindow:self]; else if([obj isMemberOfClass:[Cluster class]]) [m_windowRegistry showClusterIMWindowOrTab:(Cluster*)obj mainWindow:self]; else if([obj isMemberOfClass:[Mobile class]]) [m_windowRegistry showMobileIMWindowOrTabByMobile:(Mobile*)obj mainWindow:self]; } else if(sender == m_mobileTable) { int row = [m_mobileTable selectedRow]; if(row == -1) return; [self onSendSMSToMobile:m_mobileTable]; }}- (IBAction)onApplyForAllClusters:(id)sender { [sender setState:(![sender state])]; if([sender state] == NSOnState) { // get selected cluster or parent cluster int selectedRow = [m_clusterOutline selectedRow]; id object = selectedRow == -1 ? nil : [m_clusterOutline itemAtRow:selectedRow]; Cluster* cluster = nil; if([object isMemberOfClass:[Cluster class]]) cluster = (Cluster*)object; else cluster = [self parentClusterOf:object]; char setting = [cluster messageSetting]; NSEnumerator* e = [[m_groupManager allClusters] objectEnumerator]; while(Cluster* cluster = [e nextObject]) { [cluster setMessageSetting:setting]; } }}- (IBAction)onClusterMessageSetting:(id)sender { // get selected cluster or parent cluster int selectedRow = [m_clusterOutline selectedRow]; id object = selectedRow == -1 ? nil : [m_clusterOutline itemAtRow:selectedRow]; Cluster* cluster = nil; if([object isMemberOfClass:[Cluster class]]) cluster = (Cluster*)object; else cluster = [self parentClusterOf:object]; // change setting char newSetting = 0; switch([sender tag]) { case _kMenuItemMessageSettingAccept: newSetting = kQQClusterMessageAccept; break; case _kMenuItemMessageSettingAcceptNoPrompt: newSetting = kQQClusterMessageAcceptNoPrompt; break; case _kMenuItemMessageSettingAutoEject: newSetting = kQQClusterMessageAutoEject; break; case _kMenuItemMessageSettingBlock: newSetting = kQQClusterMessageBlock; break; case _kMenuItemMessageSettingDisplayCount: newSetting = kQQClusterMessageDisplayCount; break; } // check apply for all state NSMenuItem* item = [m_messageSettingMenu itemWithTag:_kMenuItemApplyForAllClusters]; if([item state] == NSOnState) { NSEnumerator* e = [[m_groupManager allClusters] objectEnumerator]; while(Cluster* c = [e nextObject]) [self changeClusterMessageSetting:c newMessageSetting:newSetting]; } else [self changeClusterMessageSetting:cluster newMessageSetting:newSetting]; // because we save message setting in groups.plist, so we set dirty flag in group manager [m_groupManager setDirty:YES]; // refresh dock icon [self refreshDockIcon];}- (IBAction)onExtractMessage:(id)sender { if(!m_enableHotKey) return; BOOL bExtracted = NO; NSArray* mainWindows = [WindowRegistry mainWindowArray]; int count = [mainWindows count]; MainWindowController* main = nil; for(int i = -1; i < count; i++) { // if extracted, refresh dock icon of that main window // but we need refresh it again if the dest main window isn't me, to reflect correct // info in dock icon of mine if(bExtracted) { [main refreshDockIcon]; if(main != self) [self refreshDockIcon]; break; } // get main window controller, first we check ourselves, them others if(i == -1) main = self; else { main = [mainWindows objectAtIndex:i]; if(main == self) continue; } // get message while([[main messageQueue] pendingMessageCount] > 0 && !bExtracted) { InPacket* packet = [[main messageQueue] getMessage:NO]; if([packet isMemberOfClass:[ReceivedIMPacket class]]) { ReceivedIMPacketHeader* header = [(ReceivedIMPacket*)packet imHeader]; switch([header type]) { case kQQIMTypeFriend: case kQQIMTypeFriendEx: case kQQIMTypeStranger: case kQQIMTypeStrangerEx: User* user = [[main groupManager] user:[header sender]]; if(user) { // open message window NSWindowController* winController = [m_windowRegistry showNormalIMWindowOrTab:user mainWindow:main]; // activate im window [NSApp activateIgnoringOtherApps:YES]; [[winController window] orderFront:main]; [[winController window] makeKeyWindow]; bExtracted = YES; } break; case kQQIMTypeTempSession: user = [[main groupManager] user:[header sender]]; if(user) { // open message window NSWindowController* winController = [m_windowRegistry showTempSessionIMWindowOrTab:user mainWindow:main]; // activate im window [NSApp activateIgnoringOtherApps:YES]; [[winController window] orderFront:main]; [[winController window] makeKeyWindow]; bExtracted = YES; } break; case kQQIMTypeMobileQQ: user = [[main groupManager] user:[header sender]]; if(user) { // open message window NSWindowController* winController = [m_windowRegistry showMobileIMWindowOrTab:user mainWindow:main]; // activate im window [NSApp activateIgnoringOtherApps:YES]; [[winController window] orderFront:main]; [[winController window] makeKeyWindow]; bExtracted = YES; } break; case kQQIMTypeMobileQQ2: MobileIM* mobileIM = [(ReceivedIMPacket*)packet mobileIM]; Mobile* mobile = [[main groupManager] mobile:[mobileIM mobile]]; if(mobile) { // open message window NSWindowController* winController = [m_windowRegistry showMobileIMWindowOrTabByMobile:mobile mainWindow:main]; // activate im window [NSApp activateIgnoringOtherApps:YES]; [[winController window] orderFront:main]; [[winController window] makeKeyWindow]; bExtracted = YES; } break; case kQQIMTypeCluster: case kQQIMTypeTempCluster: case kQQIMTypeClusterUnknown: // open message window Cluster* cluster = [[main groupManager] cluster:[header sender]]; if(cluster) { NSWindowController* winController = [m_windowRegistry showClusterIMWindowOrTab:cluster mainWindow:main]; // activate im window [NSApp activateIgnoringOtherApps:YES]; [[winController window] orderFront:main]; [[winController window] makeKeyWindow]; bExtracted = YES; } break; case kQQIMTypeRequestJoinCluster: case kQQIMTypeApprovedJoinCluster: case kQQIMTypeRejectedJoinCluster: case kQQIMTypeClusterCreated: case kQQIMTypeClusterRoleChanged: case kQQIMTypeJoinedCluster: case kQQIMTypeExitedCluster: [[main messageQueue] getMessage:YES]; NSWindowController* caw = [[main windowRegistry] showClusterAuthWindow:packet mainWindow:main]; // activate im window [NSApp activateIgnoringOtherApps:YES]; [[caw window] orderFront:main]; [[caw window] makeKeyWindow]; bExtracted = YES; break; default: // no one will accept this message, remove it [[main messageQueue] getMessage:YES]; break; } } else if([packet isMemberOfClass:[SystemNotificationPacket class]]) { [[main messageQueue] getMessage:YES]; NSWindowController* uaw = [[main windowRegistry] showUserAuthWindow:packet mainWindow:main]; // activate im window [NSApp activateIgnoringOtherApps:YES]; [[uaw window] orderFront:main]; [[uaw window] makeKeyWindow]; bExtracted = YES; } } // while } // for // finally, if no message extracted, show me if(!bExtracted) { // no message now, make main window front // if I am not key window, active me // if I am, active others if([[self window] isKeyWindow]) { NSEnumerator* e = [WindowRegistry mainWindowEnumerator]; while(MainWindowController* main = [e nextObject]) { if(main != self && ![main autoHided]) { [[main window] orderFront:self]; [[main window] makeKeyWindow]; break; } } } else { [NSApp activateIgnoringOtherApps:YES]; if(!m_autoHided) { [[self window] orderFront:self]; [[self window] makeKeyWindow]; } } } }- (IBAction)onPreference:(id)sender { [WindowRegistry showPreferenceWindow:self];}- (IBAction)onRemoveFromRecentContact:(id)sender { int row = [m_recentTable selectedRow]; if(row == -1) return; [m_groupManager removeRecentContactAtIndex:row]; [m_recentTable reloadData];}- (IBAction)onClearAllRecentContacts:(id)sender { [m_groupManager removeAllRecentContacts]; [m_recentTable reloadData];}- (IBAction)onOpenFaceManager:(id)sender { [m_windowRegistry showFaceManagerWindow:[m_me QQ] mainWindow:self];}- (IBAction)onSystemMessageList:(id)sender { if([m_messageQueue systemMessageCount] > 0) { [m_messageQueue moveNextSystemMessageToFirst]; [self onExtractMessage:self]; } else [WindowRegistry showSystemMessageWindow:self];}- (IBAction)onNewGroup:(id)sender { m_sheetType = _kSheetInputNewGroup; [m_txtInputTitle setStringValue:L(@"LQHintInputGroupName", @"MainWindow")]; [m_txtInput setStringValue:kStringEmpty]; [NSApp beginSheet:m_inputWindow modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(inputSheetDidEnd:returnCode:contextInfo:) contextInfo:nil];}- (IBAction)onRenameGroup:(id)sender { Group* group = [m_userOutline itemAtRow:[m_userOutline selectedRow]]; int index = [m_groupManager indexOfGroup:group]; if(index == 0) { [AlertTool showWarning:[self window] message:L(@"LQWarningCantRenameDefaultFriendlyGroup", @"MainWindow")]; } else if(![group isFriendly]) { [AlertTool showWarning:[self window] message:L(@"LQWarningCantRenameUnfriendlyGroup", @"MainWindow")]; } else { m_sheetType = _kSheetInputRenameGroup; [m_txtInputTitle setStringValue:L(@"LQHintInputGroupName", @"MainWindow")]; [m_txtInput setStringValue:kStringEmpty]; [NSApp beginSheet:m_inputWindow modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(inputSheetDidEnd:returnCode:contextInfo:) contextInfo:nil]; }}- (IBAction)onDeleteGroup:(id)sender { Group* group = [m_userOutline itemAtRow:[m_userOutline selectedRow]]; if(![group isFriendly]) { [AlertTool showWarning:[self window] message:L(@"LQWarningCantDeleteUnfriendlyGroup", @"MainWindow")]; } else if([m_groupManager indexOfGroup:group] == 0) { [AlertTool showWarning:[self window] message:L(@"LQWarningCantDeleteDefaultFriendlyGroup", @"MainWindow")]; } else if([group userCount] == 0) { [m_groupManager removeGroup:group]; [m_userOutline reloadData]; } else { [self showGroupSelectWindow]; }}- (IBAction)onLogoutAndClose:(id)sender { m_ignoreHideOnClose = YES; if([self windowShouldClose:self]) [self close];}- (IBAction)onGroupSelectOK:(id)sender { m_moveFriendsInDeleteGroupTo = [m_cbGroup indexOfSelectedItem]; [NSApp endSheet:m_groupSelectWindow returnCode:YES]; [m_groupSelectWindow orderOut:self];}- (IBAction)onGroupSelectCancel:(id)sender { [NSApp endSheet:m_groupSelectWindow returnCode:NO]; [m_groupSelectWindow orderOut:self];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -