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

📄 userinfowindowcontroller.mm

📁 lumaqq
💻 MM
📖 第 1 页 / 共 2 页
字号:
	[m_piDownloading setHidden:YES];
	[m_piDownloading stopAnimation:self];
	[m_btnRefreshQQShow setEnabled:YES];
	
	[m_qqShowDownloader release];
	m_qqShowDownloader = nil;
}

#pragma mark -
#pragma mark alert delegate

- (void)alertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo {
	if(!m_apply) {
		m_sheetType = _kSheetOperationFinished;
	}
}

#pragma mark -
#pragma mark workflow data source

- (BOOL)acceptEvent:(int)eventId {
	return NO;
}

- (void)workflowStart:(NSString*)workflowName {
	[m_piBusy startAnimation:self];
	[m_piBusy setHidden:NO];
	[m_btnOK setEnabled:NO];
	[m_btnCancelOrUpdate setEnabled:NO];
	[m_btnApplyOrCancel setEnabled:NO];
}

- (BOOL)needExecuteWorkflowUnit:(NSString*)unitName {
	if([_kWorkflowUnitGetMyQuestion isEqualToString:unitName])
		return [self isMe] && [[[m_mainWindowController me] contact] authType] == kQQAuthQuestion;
	else if([_kWorkflowUnitGetClusterNameCard isEqualToString:unitName] ||
			[_kWorkflowUnitModifyClusterNameCard isEqualToString:unitName])
		return m_cluster != nil;
	else
		return YES;
}

- (UInt16)executeWorkflowUnit:(NSString*)unitName hint:(NSString*)hint {
	[m_txtHint setStringValue:hint];
	
	if([_kWorkflowUnitGetAuthInfo isEqualToString:unitName])
		return [[m_mainWindowController client] getModifyInfoAuthInfo:[m_user QQ]];
	else if([_kWorkflowUnitGetMyQuestion isEqualToString:unitName])
		return [[m_mainWindowController client] getMyQuestion];
	else if([_kWorkflowUnitModifyQuestion isEqualToString:unitName])
		return [[m_mainWindowController client] modifyQuestion:[m_cbQuestion stringValue] answer:[m_txtAnswer stringValue]];
	else if([_kWorkflowUnitModifySignature isEqualToString:unitName])
		return [[m_mainWindowController client] modifySignature:[m_txtSignature string] authInfo:m_authInfo];
	else if([_kWorkflowUnitDeleteSignature isEqualToString:unitName])
		return [[m_mainWindowController client] deleteSignature:m_authInfo];
	else if([_kWorkflowUnitGetSignature isEqualToString:unitName])
		return [[m_mainWindowController client] getSignatureByQQ:[m_user QQ]];
	else if([_kWorkflowUnitGetLevel isEqualToString:unitName])
		return [[m_mainWindowController client] getFriendLevelByQQ:[m_user QQ]];
	else if([_kWorkflowUnitSetSearchMeByQQ isEqualToString:unitName])
		return [[m_mainWindowController client] setSearchMeByQQOnly:[m_chkSearchByQQ state]];
	else if([_kWorkflowUnitGetClusterNameCard isEqualToString:unitName])
		return [[m_mainWindowController client] getClusterNameCard:[m_cluster internalId] QQ:[m_user QQ]];
	else if([_kWorkflowUnitModifyClusterNameCard isEqualToString:unitName])
		return [[m_mainWindowController client] modifyCard:[m_cluster internalId]
													  name:[m_txtNameCardName stringValue]
											   genderIndex:[m_pbNameCardGender indexOfSelectedItem]
													 phone:[m_txtNameCardPhone stringValue]
													 email:[m_txtNameCardEmail stringValue]
													remark:[m_txtNameCardRemark string]
										  allowAdminModify:kQQClusterNameCardAllowAdminModify];
	else if([_kWorkflowUnitGetUserInfo isEqualToString:unitName])
		return [[m_mainWindowController client] getUserInfo:[m_user QQ]];
	else if([_kWorkflowUnitModifyInfo isEqualToString:unitName]) {
		// compose contact info
		[m_tempInfo release];
		m_tempInfo = [[ContactInfo alloc] init];
		[m_tempInfo setQQ:[m_user QQ]];
		[m_tempInfo setNick:[m_txtNick stringValue]];
		[m_tempInfo setCountry:[m_cbCountry stringValue]];
		[m_tempInfo setProvince:[m_cbProvince stringValue]];
		[m_tempInfo setZipcode:[m_txtZipcode stringValue]];
		[m_tempInfo setAddress:[m_txtAddress stringValue]];
		[m_tempInfo setTelephone:[m_txtTelephone stringValue]];
		[m_tempInfo setAge:[[m_txtAge stringValue] intValue]];
		[m_tempInfo setGender:[m_cbGender stringValue]];
		[m_tempInfo setName:[m_txtName stringValue]];
		[m_tempInfo setEmail:[m_txtEmail stringValue]];
		[m_tempInfo setOccupation:[m_cbOccupation stringValue]];
		[m_tempInfo setHomepage:[m_txtHomepage stringValue]];
		[m_tempInfo setAuthType:[m_matrixAuthType selectedRow]];
		[m_tempInfo setHead:[m_headControl head]];
		[m_tempInfo setMobile:[m_txtMobile stringValue]];
		[m_tempInfo setIntroduction:[m_txtIntroduction string]];
		[m_tempInfo setCity:[m_cbCity stringValue]];
		[m_tempInfo setContactVisibility:[m_pbVisibility indexOfSelectedItem]];
		[m_tempInfo setCollege:[m_txtCollege stringValue]];
		[m_tempInfo setHoroscope:[m_pbHoroscope indexOfSelectedItem]];
		[m_tempInfo setZodiac:[m_pbZodiac indexOfSelectedItem]];
		[m_tempInfo setBlood:[m_pbBlood indexOfSelectedItem]];	
		[m_tempInfo setUserFlag:[m_user userFlag]];
		
		// modify info
		return [[m_mainWindowController client] modifyInfo:m_tempInfo authInfo:m_authInfo];
	} else
		return 0;
}

- (NSString*)workflowUnitHint:(NSString*)unitName {
	if([_kWorkflowUnitGetMyQuestion isEqualToString:unitName])
		return L(@"LQHintGetQuestion", @"UserInfo");
	else if([_kWorkflowUnitModifyQuestion isEqualToString:unitName])
		return L(@"LQHintModifyAuthQuestion", @"UserInfo");
	else if([_kWorkflowUnitModifySignature isEqualToString:unitName])
		return L(@"LQHintModifySignature", @"UserInfo");
	else if([_kWorkflowUnitGetSignature isEqualToString:unitName])
		return L(@"LQHintGetSignature", @"UserInfo");
	else if([_kWorkflowUnitDeleteSignature isEqualToString:unitName])
		return L(@"LQHintDeleteSignature", @"UserInfo");
	else if([_kWorkflowUnitGetLevel isEqualToString:unitName])
		return L(@"LQHintGetLevel", @"UserInfo");
	else if([_kWorkflowUnitGetClusterNameCard isEqualToString:unitName])
		return L(@"LQHintGetCard", @"UserInfo");
	else if([_kWorkflowUnitModifyClusterNameCard isEqualToString:unitName])
		return L(@"LQHintModifyCard", @"UserInfo");
	else if([_kWorkflowUnitGetUserInfo isEqualToString:unitName])
		return L(@"LQHintGetInfo", @"UserInfo");
	else if([_kWorkflowUnitModifyInfo isEqualToString:unitName])
		return L(@"LQHintModifyInfo", @"UserInfo");
	else if([_kWorkflowUnitSetSearchMeByQQ isEqualToString:unitName])
		return L(@"LQHintSetSearchMeByQQ", @"UserInfo");
	else
		return kStringEmpty;
}

- (void)workflow:(NSString*)workflowName end:(BOOL)success {
	// refresh ui
	[m_piBusy stopAnimation:self];
	[m_piBusy setHidden:YES];
	[m_txtHint setStringValue:kStringEmpty];
	[m_btnOK setEnabled:YES];
	[m_btnCancelOrUpdate setEnabled:YES];
	[m_btnApplyOrCancel setEnabled:YES];
	
	// get message
	NSString* message = kStringEmpty;
	if([_kWorkflowModifyInfos isEqualToString:workflowName])
		message = success ? L(@"LQAlertModifyInfoOK", @"UserInfo") : L(@"LQAlertModifyInfoFailed", @"UserInfo");
	else if([_kWorkflowGetInfos isEqualToString:workflowName])
		message = success ? L(@"LQAlertGetInfoOK", @"UserInfo") : L(@"LQAlertGetInfoFailed", @"UserInfo");
	
	// show alert sheet
	if(m_showAlert) {
		[AlertTool showWarning:[self window]
						 title:(success ? L(@"LQSuccess") : L(@"LQFailed"))
					   message:message
					  delegate:self
				didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)];	
	}
}

#pragma mark -
#pragma mark qq event handler

- (BOOL)handleQQEvent:(QQNotification*)event {
	BOOL ret = NO;
	
	switch([event eventId]) {
		case kQQEventGetAuthInfoOK:
			ret = [self handleGetAuthInfoOK:event];
			break;
		case kQQEventGetUserInfoOK:
			ret = [self handleGetUserInfoOK:event];
			break;
		case kQQEventModifyInfoOK:
			ret = [self handleModifyInfoOK:event];
			break;
		case kQQEventGetSignatureOK:
			ret = [self handleGetSignatureOK:event];
			break;
		case kQQEventGetFriendLevelOK:
			ret = [self handleGetFriendLevelOK:event];
			break;
		case kQQEventModifySigatureOK:
			ret = [self handleModifySignatureOK:event];
			break;
		case kQQEventDeleteSignatureOK:
			ret = [self handleDeleteSignatureOK:event];
			break;
		case kQQEventGetMyQuestionOK:
			ret = [self handleGetMyQuestionOK:event];
			break;
		case kQQEventModifyQuestionOK:
			ret = [self handleModifyQuestionOK:event];
			break;
		case kQQEventPrivacyOpOK:
			ret = [self handlePrivacyOpOK:event];
			break;
		case kQQEventClusterGetCardOK:
			ret = [self handleGetClusterNameCardOK:event];
			break;
	}
	
	return ret;
}

- (BOOL)handleGetAuthInfoOK:(QQNotification*)event {
	AuthInfoOpReplyPacket* packet = (AuthInfoOpReplyPacket*)[event object];
	if(m_authInfo) {
		[m_authInfo release];
		m_authInfo = nil;
	}
	m_authInfo = [[packet authInfo] retain];
	return NO;
}

- (BOOL)handleModifyInfoOK:(QQNotification*)event {
	// release temp info
	[m_user setContact:m_tempInfo];
	[m_tempInfo release];
	m_tempInfo = nil;
	
	return NO;
}

- (BOOL)handleGetUserInfoOK:(QQNotification*)event {
	GetUserInfoReplyPacket* packet = (GetUserInfoReplyPacket*)[event object];

	[m_user setContact:[packet contact]];
	[self reloadInfo];

	return NO;
}

- (BOOL)handleGetFriendLevelOK:(QQNotification*)event {
	LevelOpReplyPacket* packet = [event object];
	
	NSEnumerator* e = [[packet levels] objectEnumerator];
	while(FriendLevel* level = [e nextObject]) {
		if([level QQ] == [m_user QQ]) {
			[m_levelControl setLevel:[level level]];
			[m_levelControl setUpgradeDays:[level upgradeDays]];
			break;
		}
	}
	
	return NO;
}

- (BOOL)handleGetSignatureOK:(QQNotification*)event {
	SignatureOpReplyPacket* packet = (SignatureOpReplyPacket*)[event object];
	
	NSEnumerator* e = [[packet signatures] objectEnumerator];
	while(Signature* sig = [e nextObject]) {
		if([sig QQ] == [m_user QQ]) {
			[m_txtSignature setString:[sig signature]];			
			break;
		}
	}
	
	return NO;
}

- (BOOL)handleModifySignatureOK:(QQNotification*)event {
	// main listener will change signature, so we don't need to do anything here
	
	return NO;
}

- (BOOL)handleDeleteSignatureOK:(QQNotification*)event {
	[m_user setSignature:kStringEmpty];
	return NO;
}

- (BOOL)handleGetMyQuestionOK:(QQNotification*)event {
	AuthQuestionOpReplyPacket* packet = (AuthQuestionOpReplyPacket*)[event object];
	if([packet question])
		[m_cbQuestion setStringValue:[packet question]];
	if([packet answer])
		[m_txtAnswer setStringValue:[packet answer]];
	
	return NO;
}

- (BOOL)handleModifyQuestionOK:(QQNotification*)event {
	return NO;
}

- (BOOL)handlePrivacyOpOK:(QQNotification*)event {
	return NO;
}

- (BOOL)handleGetClusterNameCardOK:(QQNotification*)event {
	ClusterCommandReplyPacket* packet = [event object];
	ClusterNameCard* card = [packet clusterNameCard];
	if(m_cluster && [packet internalId] == [m_cluster internalId] && [card QQ] == [m_user QQ]) {
		[m_txtNameCardName setStringValue:[card name]];
		[m_pbNameCardGender selectItemAtIndex:[card genderIndex]];
		[m_txtNameCardPhone setStringValue:[card phone]];
		[m_txtNameCardEmail setStringValue:[card email]];
		[m_txtNameCardRemark setString:[card remark]];
		return YES;
	}
	return NO;
}

#pragma mark -
#pragma mark image selector data source

- (int)panelCount {
	return 7;
}

- (int)rowCount {
	return 5;
}

- (int)columnCount {
	return 8;
}

- (int)imageCount:(int)panel {
	return headMap[panel][0];
}

- (id)imageIdForPanel:(int)panel page:(int)page row:(int)row column:(int)col {
	int seq = page * [self rowCount] * [self columnCount] + row * [self columnCount] + col + 1;
	if(seq > [self imageCount:panel])
		return nil;
	else
		return [NSNumber numberWithInt:headMap[panel][seq]];
}

- (NSImage*)imageForPanel:(int)panel page:(int)page row:(int)row column:(int)col {
	// get id
	NSNumber* num = [self imageIdForPanel:panel page:page row:row column:col];
	
	// use default if nil
	int index = (num == nil) ? 1 : [num intValue];
	
	// get image
	return [NSImage imageNamed:[NSString stringWithFormat:kImageHeadX, index]];
}

- (NSString*)labelForPanel:(int)panel {
	switch(panel) {
		case 0:
			return L(@"LQMale");
		case 1:
			return L(@"LQFemale");
		case 2:
			return L(@"LQHeadPet", @"UserInfo");
		case 3:
			return L(@"LQHeadQQTang", @"UserInfo");
		case 4:
			return L(@"LQHeadQQFantasy", @"UserInfo");
		case 5:
			return L(@"LQHeadQQSonic", @"UserInfo");
		case 6:
			return L(@"LQHeadQQHuaXia", @"UserInfo");
		default:
			return L(@"LQHeadOther", @"UserInfo");
	}
}

- (NSSize)imageSize {
	return kSizeLarge;
}

- (NSString*)auxiliaryButtonLabel {
	return kStringEmpty;
}

- (BOOL)showAuxiliaryButton {
	return NO;
}

#pragma mark -
#pragma mark image selector delegate

- (void)imageChanged:(id)sender image:(NSImage*)image imageId:(id)imageId panel:(int)panelId {
	if(imageId)
		[m_headControl setHead:(([imageId intValue] - 1) * 3)];
}

- (void)enterImage:(id)sender image:(NSImage*)image imageId:(id)imageId panel:(int)panelId {
}

- (void)exitImage:(id)sender image:(NSImage*)image imageId:(id)imageId panel:(int)panelId {	
}

- (void)auxiliaryAction:(id)sender {
}

- (void)showTooltipAtPoint:(NSPoint)screenPoint image:(NSImage*)image imageId:(id)imageId panel:(int)panelId {
	
}

- (void)hideTooltip {
	
}

#pragma mark -
#pragma mark combobox data source

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index {
	if(aComboBox == m_cbProvince)
		return PROVINCE(index + 2);
	else if(aComboBox == m_cbCity) {
		int province = [m_cbProvince indexOfSelectedItem];
		return CITY(province + 2, index + 1);
	} else
		return kStringEmpty;
}

- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox {
	if(aComboBox == m_cbProvince)
		return PROVINCECOUNT - 1;
	else if(aComboBox == m_cbCity) {
		int province = [m_cbProvince indexOfSelectedItem];
		if(province == -1)
			return 0;
		else
			return CITYCOUNT(province + 2);
	} 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 tab view delegate

- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem {
	switch([[tabViewItem identifier] intValue]) {
		case 4:
			if(![self isMe])
				[m_btnCancelOrUpdate setTitle:([self isNameCardEditable] ? L(@"LQModify") : L(@"LQUpdate"))];
			break;
		default:
			if(![self isMe])
				[m_btnCancelOrUpdate setTitle:L(@"LQUpdate")];
			break;
	}
}

@end

⌨️ 快捷键说明

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