📄 clusterinfowindowcontroller.mm
字号:
[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 + -