📄 searchwindowcontroller.mm
字号:
break; } switch([m_pbClusterSearchMode indexOfSelectedItem]) { case 0: [m_tabSearchCluster selectTabViewItemWithIdentifier:_kTabViewItemByClusterID]; break; case 1: [m_tabSearchCluster selectTabViewItemWithIdentifier:_kTabViewItemByCategory]; break; }}- (void)refreshTitleMessage { // check identifier id identifier = [[m_tabMain selectedTabViewItem] identifier]; if([kTabViewItemSearchWhat isEqual:identifier]) { [m_txtTitle setStringValue:L(@"LQTitleSearchWhat", @"Search")]; [m_txtMessage setStringValue:L(@"LQMessageSearchWhat", @"Search")]; } else if([kTabViewItemSearchUser isEqual:identifier]) { [m_txtTitle setStringValue:L(@"LQTitleSearchUser", @"Search")]; [m_txtMessage setStringValue:L(@"LQMessageSearchUser", @"Search")]; } else if([kTabViewItemSearchCluster isEqual:identifier]) { [m_txtTitle setStringValue:L(@"LQTitleSearchCluster", @"Search")]; [m_txtMessage setStringValue:L(@"LQMessageSearchCluster", @"Search")]; }}- (void)refreshControls { id identifier = [[m_tabMain selectedTabViewItem] identifier]; [m_btnBack setEnabled:(![kTabViewItemSearchWhat isEqual:identifier] && !m_operating)]; [m_btnNext setEnabled:(![kTabViewItemSearchUser isEqual:identifier] && ![kTabViewItemSearchCluster isEqual:identifier] && !m_operating)]; [m_btnFinished setEnabled:([kTabViewItemSearchUser isEqual:identifier] || [kTabViewItemSearchCluster isEqual:identifier] && !m_operating)]; [m_btnNextUserPage setEnabled:(m_nextPage > 0 && !m_operating)]; [m_btnPrevUserPage setEnabled:(m_nextPage > 1 && !m_operating)]; [m_btnNextClusterPage setEnabled:(m_nextPage > 0 && !m_operating)]; [m_btnPrevClusterPage setEnabled:(m_nextPage > 1 && !m_operating)]; [m_btnViewUserInfo setEnabled:([m_userTable selectedRow] != -1)]; [m_btnViewClusterInfo setEnabled:([m_clusterTable selectedRow] != -1)]; [m_btnViewCreatorInfo setEnabled:([m_clusterTable selectedRow] != -1)]; [m_btnAddFriend setEnabled:([m_userTable selectedRow] != -1)]; [m_btnJoinCluster setEnabled:([m_clusterTable selectedRow] != -1)];}- (void)showErrorMessage:(NSString*)error { [AlertTool showWarning:[self window] message:error];}- (void)goToNextPage { id identifier = [[m_tabMain selectedTabViewItem] identifier]; if([kTabViewItemSearchWhat isEqual:identifier]) { if([m_matrixSearchWhat selectedRow] == 0) [m_tabMain selectTabViewItemWithIdentifier:kTabViewItemSearchUser]; else [m_tabMain selectTabViewItemWithIdentifier:kTabViewItemSearchCluster]; } else if([kTabViewItemSearchUser isEqual:identifier]) { } else if([kTabViewItemSearchCluster isEqual:identifier]) { } // refresh title and message [self refreshTitleMessage]; [self refreshControls];}- (void)gotoPreviousPage { id identifier = [[m_tabMain selectedTabViewItem] identifier]; if([kTabViewItemSearchWhat isEqual:identifier]) { } else if([kTabViewItemSearchUser isEqual:identifier]) { [m_tabMain selectTabViewItemWithIdentifier:kTabViewItemSearchWhat]; } else if([kTabViewItemSearchCluster isEqual:identifier]) { [m_tabMain selectTabViewItemWithIdentifier:kTabViewItemSearchWhat]; } // refresh title and message [self refreshTitleMessage]; [self refreshControls];}- (NSString*)canNext { id identifier = [[m_tabMain selectedTabViewItem] identifier]; if([kTabViewItemSearchUser isEqual:identifier]) { if([m_userTable selectedRow] == -1) return L(@"LQWarningSelectUser", @"Search"); } else if([kTabViewItemSearchCluster isEqual:identifier]) { if([m_clusterTable selectedRow] == -1) return L(@"LQWarningSelectCluster", @"Search"); } return nil;}- (NSString*)canSearch { id identifier = [[m_tabMain selectedTabViewItem] identifier]; if([kTabViewItemSearchWhat isEqual:identifier]) { return nil; } else if([kTabViewItemSearchUser isEqual:identifier]) { switch([m_pbUserSearchMode indexOfSelectedItem]) { case 1: // all empty if([[m_txtQQ stringValue] isEmpty] && [[m_txtNick stringValue] isEmpty]) return L(@"LQWarningAllEmpty", @"Search"); // check qq format if(![[m_txtQQ stringValue] isEmpty]) { UInt32 QQ = [[m_txtQQ stringValue] intValue]; if(QQ < 10001) return L(@"LQWarningInvalidQQ", @"Search"); } return nil; default: return nil; } } else if([kTabViewItemSearchCluster isEqual:identifier]) { switch([m_pbClusterSearchMode indexOfSelectedItem]) { case 0: if([[m_txtClusterId stringValue] intValue] == 0) return L(@"LQWarningInvalidClusterId", @"Search"); default: return nil; } } else return nil;}- (void)startHint:(NSString*)hint { [m_piBusy setHidden:NO]; [m_piBusy startAnimation:self]; [m_txtHint setStringValue:hint];}- (void)stopHint { [m_piBusy setHidden:YES]; [m_piBusy stopAnimation:self]; [m_txtHint setStringValue:kStringEmpty];}- (void)onUserTableDoubleClick { [self onViewUserInfo:self];}- (void)onClusterTableDoubleClick { [self onViewClusterInfo:self];}#pragma mark -#pragma mark getter and setter- (void)setInitialIdentifier:(NSString*)identifier { [identifier retain]; [m_initialItemIdentifier release]; m_initialItemIdentifier = identifier;}#pragma mark -#pragma mark qq event handler- (BOOL)handleQQEvent:(QQNotification*)event { BOOL ret = NO; // check sequence Packet* packet = (Packet*)[event object]; if([packet sequence] != m_waitingSequence) return ret; switch([event eventId]) { case kQQEventSearchUserOK: ret = [self handleSearchUserOK:event]; break; case kQQEventSearchUserFailed: ret = [self handleSearchUserFailed:event]; break; case kQQEventAdvancedSearchUserOK: ret = [self handleAdvancedSearchUserOK:event]; break; case kQQEventAdvancedSearchUserFailed: ret = [self handleAdvancedSearchUserFailed:event]; break; case kQQEventClusterSearchOK: ret = [self handleSearchClusterOK:event]; break; case kQQEventClusterSearchFailed: ret = [self handleSearchClusterFailed:event]; break; case kQQEventTimeoutBasic: ret = [self handleTimeOut:event]; break; } return ret;}- (BOOL)handleSearchUserOK:(QQNotification*)event { if(!m_operating) return NO; SearchUserPacket* packet = (SearchUserPacket*)[event outPacket]; if([[packet user] QQ] == [[m_mainWindowController me] QQ]) { // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; SearchUserReplyPacket* reply = (SearchUserReplyPacket*)[event object]; [m_userCache addObject:[reply searchedUsers]]; [self showUserPage:(m_nextPage - 1)]; [m_txtUserPage setStringValue:[NSString stringWithFormat:@"Page %u", m_nextPage]]; } return NO;}- (BOOL)handleSearchUserFailed:(QQNotification*)event { if(!m_operating) return NO; SearchUserPacket* packet = (SearchUserPacket*)[event outPacket]; if([[packet user] QQ] == [[m_mainWindowController me] QQ]) { // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; [self showErrorMessage:L(@"LQWarningSearchUserFailed", @"Search")]; } return NO;}- (BOOL)handleAdvancedSearchUserOK:(QQNotification*)event { if(!m_operating) return NO; AdvancedSearchUserPacket* packet = (AdvancedSearchUserPacket*)[event outPacket]; if([[packet user] QQ] == [[m_mainWindowController me] QQ]) { // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; AdvancedSearchUserReplyPacket* reply = (AdvancedSearchUserReplyPacket*)[event object]; [m_userCache addObject:[reply searchedUsers]]; [self showUserPage:(m_nextPage - 1)]; [m_txtUserPage setStringValue:[NSString stringWithFormat:@"Page %u", m_nextPage]]; } return NO;}- (BOOL)handleAdvancedSearchUserFailed:(QQNotification*)event { if(!m_operating) return NO; AdvancedSearchUserPacket* packet = (AdvancedSearchUserPacket*)[event outPacket]; if([[packet user] QQ] == [[m_mainWindowController me] QQ]) { // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; [self showErrorMessage:L(@"LQWarningSearchUserFailed", @"Search")]; } return NO;}- (BOOL)handleTimeOut:(QQNotification*)event { OutPacket* packet = (OutPacket*)[event outPacket]; switch([packet command]) { case kQQCommandSearch: case kQQCommandAdvancedSearch: // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; [self showErrorMessage:L(@"LQWarningSearchTimeout", @"Search")]; break; case kQQCommandCluster: switch([(ClusterCommandPacket*)packet subCommand]) { case kQQSubCommandClusterSearch: // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; [self showErrorMessage:L(@"LQWarningSearchTimeout", @"Search")]; break; } } return NO;}- (BOOL)handleSearchClusterOK:(QQNotification*)event { if(!m_operating) return NO; ClusterSearchPacket* packet = (ClusterSearchPacket*)[event outPacket]; if([[packet user] QQ] == [[m_mainWindowController me] QQ]) { // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; ClusterCommandReplyPacket* reply = (ClusterCommandReplyPacket*)[event object]; [m_clusterCache addObject:[reply infos]]; [m_clusterDataSource setClusters:[reply infos]]; [m_clusterTable reloadData]; } return NO;}- (BOOL)handleSearchClusterFailed:(QQNotification*)event { if(!m_operating) return NO; ClusterCommandPacket* packet = (ClusterCommandPacket*)[event outPacket]; if([[packet user] QQ] == [[m_mainWindowController me] QQ]) { // refresh ui m_operating = NO; [self stopHint]; [self refreshControls]; ClusterCommandReplyPacket* reply = (ClusterCommandReplyPacket*)[event object]; if([reply errorMessage]) [self showErrorMessage:[reply errorMessage]]; else [self showErrorMessage:L(@"LQWarningSearchClusterFailed", @"Search")]; } return NO;}#pragma mark -#pragma mark combobox data source- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index { if(index == 0) return L(@"LQAny"); else if(aComboBox == m_cbAge) return AGE(index); else if(aComboBox == m_cbGender) return GENDER(index); else if(aComboBox == m_cbProvince) return PROVINCE(index); else if(aComboBox == m_cbCity) { int province = [m_cbProvince indexOfSelectedItem]; return CITY(province, index); } else return kStringEmpty;}- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox { if(aComboBox == m_cbAge) return AGECOUNT + 1; else if(aComboBox == m_cbGender) return GENDERCOUNT + 1; else if(aComboBox == m_cbProvince) return PROVINCECOUNT + 1; else if(aComboBox == m_cbCity) { int province = [m_cbProvince indexOfSelectedItem]; if(province == 0) return 1; else return CITYCOUNT(province) + 1; } else return 0;}#pragma mark -#pragma mark combobox delegate- (void)comboBoxSelectionDidChange:(NSNotification *)notification { NSComboBox* comboBox = [notification object]; if(comboBox == m_cbProvince) { [m_cbCity reloadData]; [m_cbCity selectItemAtIndex:0]; }}#pragma mark -#pragma mark tableview delegate- (void)tableViewSelectionDidChange:(NSNotification *)aNotification { [self refreshControls];}@end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -