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

📄 clusterinfowindowcontroller.mm

📁 lumaqq
💻 MM
📖 第 1 页 / 共 3 页
字号:
		[m_oldMembers addObject:[NSNumber numberWithUnsignedInt:[u QQ]]];
	m_newMembers = [[NSMutableArray array] retain];
	e = [m_members objectEnumerator];
	while(User* u = [e nextObject])
		[m_newMembers addObject:[NSNumber numberWithUnsignedInt:[u QQ]]];
	
	// remove common objects
	int oldCount = [m_oldMembers count];
	int newCount = [m_newMembers count];
	for(int i = oldCount - 1; i >= 0; i--) {
		[m_newMembers removeObject:[m_oldMembers objectAtIndex:i]];
		if([m_newMembers count] < newCount) {
			newCount = [m_newMembers count];
			[m_oldMembers removeObjectAtIndex:i];
		}
	}
}

- (void)startModify {
	switch([[[m_tabMain selectedTabViewItem] identifier] intValue]) {
		case 0:
		case 1:
		case 2:
			m_showAlert = YES;
			[self buildWorkflow:_kWorkflowModifyInfos];
			[m_moderator start:[m_mainWindowController client]];			
			break;
		case 3:
			m_showAlert = YES;
			[self buildWorkflow:_kWorkflowModifyMessageSetting];
			[m_moderator start:[m_mainWindowController client]];
			break;
		case 4:
			m_showAlert = YES;
			[self buildWorkflow:_kWorkflowModifyCard];
			[m_moderator start:[m_mainWindowController client]];
			break;
	}
}

- (void)handleTreeSelectorWindowWillClose:(NSNotification*)notification {
	if(m_treeSelector) {
		if([notification object] == [m_treeSelector window])
			m_treeSelector = nil;
	}
}

- (void)handleQQCellDidSelected:(NSNotification*)notification {
	QQCell* cell = [notification object];
	if([[m_treeSelector QQCell] identifier] != [cell identifier]) 
		return;
	
	id obj = [[notification userInfo] objectForKey:kUserInfoObjectValue];
	int state = [[[notification userInfo] objectForKey:kUserInfoState] intValue];
	if([obj isMemberOfClass:[Group class]]) {
		Group* g = (Group*)obj;
		NSEnumerator* e = [[g users] objectEnumerator];
		while(User* u = [e nextObject]) {
			if(state == NSOnState) {
				[cell set:u state:NSOnState];
				if(![m_members containsObject:u])
					[m_members addObject:u];
			} else {
				[cell set:u state:NSOffState];
				[m_members removeObject:u];
			}				
		}
		
		// refresh
		[[m_treeSelector tree] reloadItem:g reloadChildren:YES];
		
		// reload
		[m_memberTable reloadData];		
	} else if([obj isMemberOfClass:[User class]]) {
		User* u = (User*)obj;
		Group* g = [[m_mainWindowController groupManager] group:[u groupIndex]];
		[self refreshGroupState:g cell:cell];
		[[m_treeSelector tree] reloadItem:g];
		
		// add/remove users
		if([cell state:u] == NSOnState) {
			if(![m_members containsObject:u])
				[m_members addObject:u];
		} else
			[m_members removeObject:u];
		[m_memberTable reloadData];
	}
}

- (void)refreshGroupState:(Group*)g cell:(QQCell*)cell {
	if(g && [g isUser]) {
		int count = [g userCount];
		NSEnumerator* e = [[g users] objectEnumerator];
		while(User* user = [e nextObject]) {
			if([cell state:user] == NSOnState)
				count--;
		}
		if(count == 0)
			[cell set:g state:NSOnState];
		else if(count == [g userCount])
			[cell set:g state:NSOffState];
		else
			[cell set:g state:NSMixedState];
	}
}

- (void)updateMemberPanelButtons {
	int row = [m_memberTable selectedRow];
	if(row == -1) {
		[m_btnAddAsFriend setEnabled:NO];
		[m_btnRemove setEnabled:NO];
	} else {
		User* user = [m_members objectAtIndex:row];
		Group* g = [[m_mainWindowController groupManager] group:[user groupIndex]];
		[m_btnAddAsFriend setEnabled:(g == nil || ![g isFriendly])];
		[m_btnRemove setEnabled:(![user isSuperUser:m_cluster])];
	}
}

- (void)reloadInfo {
	// basic panel
	[m_txtId setStringValue:[NSString stringWithFormat:@"%u", [m_cluster externalId]]];
	[m_txtCreator setStringValue:[NSString stringWithFormat:@"%u", [[m_cluster info] creator]]];
	[m_txtName setStringValue:[m_cluster name]];
	[m_txtNotice setString:[[m_cluster info] notice]];
	[m_txtDescription setString:[[m_cluster info] description]];
	NSImage* image = [ImageTool imageWithName:kImageCluster size:kSizeLarge];
	[m_headControl setHead:kHeadUseImage];
	[m_headControl setImage:image];
	[m_headControl setShowStatus:NO];
	int level = CATEGORYLEVEL([[m_cluster info] category]);
	if(level >= 1)
		[m_cbLevel1 selectItemAtIndex:CATEGORYLEVEL1INDEX([[m_cluster info] category])];
	if(level >= 2)
		[m_cbLevel2 selectItemAtIndex:CATEGORYLEVEL2INDEX([[m_cluster info] category])];
	if(level >= 3)
		[m_cbLevel3 selectItemAtIndex:CATEGORYLEVEL3INDEX([[m_cluster info] category])];
	
	// basic panel
	[m_matrixAuth selectCellWithTag:[[m_cluster info] authType]];
	[m_matrixNotification selectCellWithTag:[m_cluster notificationRight]];
	
	// member panel
	[m_memberTable reloadData];
	
	// message panel
	[m_matrixMessage selectCellWithTag:[m_cluster messageSetting]];
	[m_chkSaveInServer setState:[m_cluster saveMessageSettingInServer]];
	
	// name card panel
	ClusterNameCard* card = [[m_mainWindowController me] nameCard:[m_cluster internalId]];
	[m_txtNameCardName setStringValue:[card name]];
	[m_txtPhone setStringValue:[card phone]];
	[m_txtEmail setStringValue:[card email]];
	[m_txtRemark setString:[card remark]];
	[m_pbGender selectItemAtIndex:[card genderIndex]];
	[m_chkManaged setState:[[m_mainWindowController me] isManaged:m_cluster]];
}

- (BOOL)isSuperUser {
	return [[m_mainWindowController me] isSuperUser:m_cluster];
}

- (NSString*)titleOfCancelUpdateButton {
	return [self isSuperUser] ? L(@"LQCancel") : L(@"LQUpdate");
}

- (NSString*)titleOfApplyCloseButton {
	return [self isSuperUser] ? L(@"LQApply") : L(@"LQClose");
}

#pragma mark -
#pragma mark workflow data source

- (BOOL)acceptEvent:(int)eventId {
	switch(eventId) {
		case kQQEventClusterGetMemberInfoOK:
			return YES;
		default:
			return NO;
	}
}

- (void)workflowStart:(NSString*)workflowName {
	[m_piBusy setHidden:NO];
	[m_piBusy startAnimation:self];
	[m_btnModify setEnabled:NO];
	[m_btnCancel setEnabled:[self isSuperUser]];
	[m_btnApply setEnabled:NO];
}

- (UInt16)executeWorkflowUnit:(NSString*)unitName hint:(NSString*)hint {
	[m_txtHint setStringValue:hint];
	
	if([_kWorkflowUnitGetCard isEqualToString:unitName])
		return [[m_mainWindowController client] getClusterNameCard:[m_cluster internalId]
																QQ:[[m_mainWindowController me] QQ]];
	else if([_kWorkflowUnitModifyCard isEqualToString:unitName])
		return [[m_mainWindowController client] modifyCard:[m_cluster internalId]
													  name:[m_txtNameCardName stringValue]
											   genderIndex:[m_pbGender indexOfSelectedItem]
													 phone:[m_txtPhone stringValue]
													 email:[m_txtEmail stringValue]
													remark:[m_txtRemark string]
										  allowAdminModify:[m_chkManaged state]];
	else if([_kWorkflowUnitModifyMessageSetting isEqualToString:unitName]) {
		if([m_chkSaveInServer state])
			return [[m_mainWindowController client] modifyMessageSetting:[m_cluster internalId]
															  externalId:[m_cluster externalId]
														  messageSetting:[m_matrixMessage selectedTag]];
		else					
			return [[m_mainWindowController client] modifyMessageSetting:[m_cluster internalId]
															  externalId:[m_cluster externalId]
														  messageSetting:kQQClusterMessageClearServerSetting];
	} else if([_kWorkflowUnitGetMessageSetting isEqualToString:unitName])
		return [[m_mainWindowController client] getMessageSetting:[[m_mainWindowController groupManager] allClusterInternalIds]];
	else if([_kWorkflowUnitGetChannelSetting isEqualToString:unitName])
		return [[m_mainWindowController client] getChannelSetting:[m_cluster internalId]
													   externalId:[m_cluster externalId]];
	else if([_kWorkflowUnitModifyChannelSetting isEqualToString:unitName])
		return [[m_mainWindowController client] modifyChannelSetting:[m_cluster internalId]
												   notificationRight:[m_matrixNotification selectedTag]];
	else if([_kWorkflowUnitGetLastTalkTime isEqualToString:unitName])
		return [[m_mainWindowController client] getLastTalkTime:[m_cluster internalId]
													 externalId:[m_cluster externalId]];
	else if([_kWorkflowUnitGetClusterInfo isEqualToString:unitName])
		return [[m_mainWindowController client] getClusterInfo:[m_cluster internalId]];
	else if([_kWorkflowUnitModifyClusterInfo isEqualToString:unitName]) {
		UInt32 cId;
		if([m_cbLevel3 indexOfSelectedItem] == -1 &&
		   [m_cbLevel2 indexOfSelectedItem] == -1 &&
		   [m_cbLevel1 indexOfSelectedItem] == -1)
			cId = 0;
		else if([m_cbLevel3 indexOfSelectedItem] == -1 &&
				[m_cbLevel2 indexOfSelectedItem] == -1)
			cId = LEVEL1ID([m_cbLevel1 indexOfSelectedItem]);
		else if([m_cbLevel3 indexOfSelectedItem] == -1)
			cId = LEVEL2ID([m_cbLevel1 indexOfSelectedItem], [m_cbLevel2 indexOfSelectedItem]);
		else 
			cId = LEVEL3ID([m_cbLevel1 indexOfSelectedItem], [m_cbLevel2 indexOfSelectedItem], [m_cbLevel3 indexOfSelectedItem]);
		
		return [[m_mainWindowController client] modifyClusterInfo:[m_cluster internalId]
														 authType:[m_matrixAuth selectedTag]
														 category:cId
															 name:[m_txtName stringValue]
														   notice:[m_txtNotice string]
													  description:[m_txtDescription string]];
	} else if([_kWorkflowUnitAddMember isEqualToString:unitName])
		return [[m_mainWindowController client] addMember:[m_cluster internalId] members:m_newMembers];
	else if([_kWorkflowUnitRemoveMember isEqualToString:unitName])
		return [[m_mainWindowController client] removeMember:[m_cluster internalId] members:m_oldMembers];
	else
		return 0;
}

- (NSString*)workflowUnitHint:(NSString*)unitName {
	if([_kWorkflowUnitGetCard isEqualToString:unitName])
		return L(@"LQHintGetCard", @"ClusterInfo");
	else if([_kWorkflowUnitModifyCard isEqualToString:unitName])
		return L(@"LQHintModifyCard", @"ClusterInfo");
	else if([_kWorkflowUnitModifyMessageSetting isEqualToString:unitName])
		return L(@"LQHintModifyMessageSetting", @"ClusterInfo");
	else if([_kWorkflowUnitGetMessageSetting isEqualToString:unitName])
		return L(@"LQHintGetMessageSetting", @"ClusterInfo");
	else if([_kWorkflowUnitGetChannelSetting isEqualToString:unitName])
		return L(@"LQHintGetChannelSetting", @"ClusterInfo");
	else if([_kWorkflowUnitModifyChannelSetting isEqualToString:unitName])
		return L(@"LQHintModifyChannelSetting", @"ClusterInfo");
	else if([_kWorkflowUnitGetLastTalkTime isEqualToString:unitName])
		return L(@"LQHintGetLastTalkTime", @"ClusterInfo");
	else if([_kWorkflowUnitGetClusterInfo isEqualToString:unitName])
		return L(@"LQHintGetClusterInfo", @"ClusterInfo");
	else if([_kWorkflowUnitModifyClusterInfo isEqualToString:unitName])
		return L(@"LQHintModifyClusterInfo", @"ClusterInfo");
	else if([_kWorkflowUnitAddMember isEqualToString:unitName])
		return L(@"LQHintAddMember", @"ClusterInfo");
	else if([_kWorkflowUnitRemoveMember isEqualToString:unitName])
		return L(@"LQHintRemoveMember", @"ClusterInfo");
	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_btnModify setEnabled:YES];
	[m_btnCancel setEnabled:YES];
	[m_btnApply setEnabled:YES];
	
	// get message
	NSString* message = kStringEmpty;
	if([_kWorkflowModifyCard isEqualToString:workflowName])
		message = success ? L(@"LQInfoModifyCardOK", @"ClusterInfo") : L(@"LQInfoModifyCardFailed", @"ClusterInfo");
	else if([_kWorkflowModifyInfos isEqualToString:workflowName])
		message = success ? L(@"LQInfoModifyInfoOK", @"ClusterInfo") : L(@"LQInfoModifyInfoFailed", @"ClusterInfo");
	else if([_kWorkflowModifyMessageSetting isEqualToString:workflowName])
		message = success ? L(@"LQInfoModifyMessageSettingOK", @"ClusterInfo") : L(@"LQInfoModifyMessageSettingFailed", @"ClusterInfo");
	
	// 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:)];	
	}
}

⌨️ 快捷键说明

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