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

📄 searchwindowcontroller.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 "SearchWindowController.h"#import "MainWindowController.h"#import "NSString-Validate.h"#import "AlertTool.h"#import "LocalizedStringTool.h"#import "SearchUserPacket.h"#import "SearchUserReplyPacket.h"#import "AdvancedSearchUserPacket.h"#import "AdvancedSearchUserReplyPacket.h"#import "ClusterSearchPacket.h"#import "WindowRegistry.h"#import "ClusterCommandReplyPacket.h"#import "QQCell.h"#define _kTabViewItemByClusterID @"ByClusterID"#define _kTabViewItemByCategory @"ByCategory"#define _kTabViewItemListOnlines @"ListOnlines"#define _kTabViewItemSearchAccurately @"SearchAccurately"#define _kTabViewItemAdvancedSearch @"AdvancedSearch"@implementation SearchWindowController- (id)initWithMainWindowController:(MainWindowController*)controller {	self = [super initWithWindowNibName:@"Search"];	if(self) {		m_mainWindowController = [controller retain];		m_operating = NO;		m_userDataSource = [[SearchedUserDataSource alloc] init];		m_userCache = [[NSMutableArray array] retain];		m_clusterDataSource = [[SearchClusterDataSource alloc] init];		m_clusterCache = [[NSMutableArray array] retain];		m_nextPage = 0;		m_waitingSequence = 0;	}	return self;}- (void) dealloc {	[m_mainWindowController release];	[m_initialItemIdentifier release];	[m_userDataSource release];	[m_userCache release];	[m_clusterDataSource release];	[m_clusterCache release];	[super dealloc];}- (void)windowWillClose:(NSNotification *)aNotification {	if([aNotification object] != [self window])		return;		[[m_mainWindowController client] removeQQListener:self];	[[m_mainWindowController windowRegistry] unregisterSearchWizard:[[m_mainWindowController me] QQ]];	[self release];}- (void)windowDidLoad {	// set iniital page	if(m_initialItemIdentifier == nil)		[m_tabMain selectTabViewItemWithIdentifier:kTabViewItemSearchWhat];	else		[m_tabMain selectTabViewItemWithIdentifier:m_initialItemIdentifier];		// set online count hint	[m_txtOnlines setStringValue:[NSString stringWithFormat:L(@"LQHintOnlineCount", @"Search"), [m_mainWindowController onlineUserCount]]];		// refresh title and message	[self refreshTitleMessage];		// refresh navigate button	[self refreshControls];		// set search mode	[self refreshSearchModeTabView];		// refresh combo box	[m_cbAge reloadData];	[m_cbAge selectItemAtIndex:0];	[m_cbGender reloadData];	[m_cbGender selectItemAtIndex:0];	[m_cbProvince reloadData];	[m_cbProvince selectItemAtIndex:0];	[m_cbCity reloadData];	[m_cbCity selectItemAtIndex:0];		// initialize table	[m_userTable setDataSource:m_userDataSource];	[[m_userTable tableColumnWithIdentifier:@"0"] setDataCell:[[[QQCell alloc] initWithQQ:[[m_mainWindowController me] QQ]] autorelease]];	[m_userTable setTarget:self];	[m_userTable setDoubleAction:@selector(onUserTableDoubleClick)];	[m_clusterTable setDataSource:m_clusterDataSource];	[[m_clusterTable tableColumnWithIdentifier:@"0"] setDataCell:[[[QQCell alloc] initWithQQ:[[m_mainWindowController me] QQ]] autorelease]];	[m_clusterTable setTarget:self];	[m_clusterTable setDoubleAction:@selector(onClusterTableDoubleClick)];		// add qq listener	[[m_mainWindowController client] addQQListener:self];}#pragma mark -#pragma mark actions- (IBAction)onNext:(id)sender {	NSString* error = [self canNext];	if(error == nil)		[self goToNextPage];	else		[self showErrorMessage:error];}- (IBAction)onBack:(id)sender {	[self gotoPreviousPage];}- (IBAction)onFinished:(id)sender {	[self close];}- (IBAction)onCancel:(id)sender {	[self close];}- (IBAction)onUserSearchModeChanged:(id)sender {	[self refreshSearchModeTabView];}- (IBAction)onClusterSearchModeChanged:(id)sender {	[self refreshSearchModeTabView];}- (IBAction)onSearchUser:(id)sender {	// check status	if(m_operating)		return;		// validate	NSString* error = [self canSearch];	if(error != nil) {		[self showErrorMessage:error];		m_operating = NO;		return;	}		// clear cache	[m_userCache removeAllObjects];		// search	m_nextPage = 0;	[self searchUser:m_nextPage++];}- (IBAction)onSearchCluster:(id)sender {	// check status	if(m_operating)		return;		// validate	NSString* error = [self canSearch];	if(error != nil) {		[self showErrorMessage:error];		m_operating = NO;		return;	}		// clear cache	[m_clusterCache removeAllObjects];		// search cluster	[self searchCluster];}- (IBAction)onViewUserInfo:(id)sender {	// get user page	int row = [m_userTable selectedRow];	if(row == -1)		return;	NSArray* page = [[m_userTable dataSource] users];		// get object	id object = [page objectAtIndex:row];		// get qq	UInt32 QQ = [object QQ];		// get user object	User* u = [[m_mainWindowController groupManager] user:QQ];	if(!u)		u = [[User alloc] initWithQQ:QQ domain:m_mainWindowController];		// show user info	[[m_mainWindowController windowRegistry] showUserInfoWindow:u mainWindow:m_mainWindowController];		// release	[u release];}- (IBAction)onViewCreatorInfo:(id)sender {	// get cluster page	int row = [m_clusterTable selectedRow];	if(row == -1)		return;	NSArray* page = [[m_clusterTable dataSource] clusters];		ClusterInfo* info = [page objectAtIndex:row];		// show user info	User* u = [[m_mainWindowController groupManager] user:[info creator]];	if(u == nil) 		u = [[[User alloc] initWithQQ:[info creator] domain:m_mainWindowController] autorelease];	[[m_mainWindowController windowRegistry] showUserInfoWindow:u													 mainWindow:m_mainWindowController];}- (IBAction)onViewClusterInfo:(id)sender {	// get cluster page	int row = [m_clusterTable selectedRow];	if(row == -1)		return;	NSArray* page = [[m_clusterTable dataSource] clusters];		ClusterInfo* info = [page objectAtIndex:row];		Cluster* c = [[Cluster alloc] initWithInternalId:[info internalId] domain:m_mainWindowController];	[c setClusterInfo:info];	[[m_mainWindowController windowRegistry] showClusterInfoWindow:[c autorelease]														mainWindow:m_mainWindowController];}- (IBAction)onViewAllUser:(id)sender {	NSMutableArray* users = [NSMutableArray array];	NSEnumerator* e = [m_userCache objectEnumerator];	while(NSArray* array = [e nextObject])		[users addObjectsFromArray:array];		// refresh table	[m_userDataSource setUsers:users];	[m_userTable reloadData];}- (IBAction)onViewAllCluster:(id)sender {	}- (IBAction)onNextPageUser:(id)sender {	// check cache	int count = [m_userCache count];	if(m_nextPage < count) {		[self showUserPage:m_nextPage++];		[m_txtUserPage setStringValue:[NSString stringWithFormat:@"Page %u", m_nextPage]];	} else		[self searchUser:m_nextPage++];}- (IBAction)onPrevPageUser:(id)sender {	[self showUserPage:(m_nextPage - 2)];	m_nextPage--;	[m_txtUserPage setStringValue:[NSString stringWithFormat:@"Page %u", m_nextPage]];	[self refreshControls];}- (IBAction)onNextPageCluster:(id)sender {	}- (IBAction)onPrevPageCluster:(id)sender {	}- (IBAction)onAddFriend:(id)sender {	// get user page	int row = [m_userTable selectedRow];	if(row == -1)		return;	NSArray* page = [[m_userTable dataSource] users];		// get object	id object = [page objectAtIndex:row];		// open add friend window	[[m_mainWindowController windowRegistry] showAddFriendWindow:[object QQ]															head:[object head]															nick:[object nick]													  mainWindow:m_mainWindowController];}- (IBAction)onJoinCluster:(id)sender {	// get user page	int row = [m_clusterTable selectedRow];	if(row == -1)		return;	NSArray* page = [[m_clusterTable dataSource] clusters];		// get object	id object = [page objectAtIndex:row];		// open join cluster window	[[m_mainWindowController windowRegistry] showJoinClusterWindow:[object internalId]															object:object														mainWindow:m_mainWindowController];}#pragma mark -#pragma mark helper- (void)showUserPage:(int)page {	[m_userDataSource setUsers:[m_userCache objectAtIndex:page]];	[m_userTable reloadData];	[self refreshControls];}- (void)searchCluster {	// check status	if(m_operating)		return;	m_operating = YES;		// refresh control	[self refreshControls];		// start ui	[self startHint:L(@"LQHintSearchCluster", @"Search")];		// search	m_waitingSequence = [[m_mainWindowController client] searchCluster:[[m_txtClusterId stringValue] intValue]];}- (void)searchUser:(int)page {	// check status	if(m_operating)		return;	m_operating = YES;		// refresh control	[self refreshControls];		// start ui	[self startHint:L(@"LQHintSearchUser", @"Search")];		switch([m_pbUserSearchMode indexOfSelectedItem]) {		case 0:			m_waitingSequence = [[m_mainWindowController client] searchOnlineUsers:page];			break;		case 1:			// check qq number			UInt32 QQ = [[m_txtQQ stringValue] intValue];			if(QQ == 0)				m_waitingSequence = [[m_mainWindowController client] searchUserByNick:[m_txtNick stringValue] page:page];			else				m_waitingSequence = [[m_mainWindowController client] searchUserByQQ:QQ page:page];			break;		case 2:			m_waitingSequence = [[m_mainWindowController client] advancedSearchUser:[m_chkOnline state]														 hasCam:[m_chkHasCamera state]													   ageIndex:[m_cbAge indexOfSelectedItem]													genderIndex:[m_cbGender indexOfSelectedItem]												  provinceIndex:[m_cbProvince indexOfSelectedItem]													  cityIndex:[m_cbCity indexOfSelectedItem]														   page:page];			break;	}}- (void)refreshSearchModeTabView {	switch([m_pbUserSearchMode indexOfSelectedItem]) {		case 0:			[m_tabSearchUser selectTabViewItemWithIdentifier:_kTabViewItemListOnlines];			break;		case 1:			[m_tabSearchUser selectTabViewItemWithIdentifier:_kTabViewItemSearchAccurately];			break;		case 2:			[m_tabSearchUser selectTabViewItemWithIdentifier:_kTabViewItemAdvancedSearch];

⌨️ 快捷键说明

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