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

📄 clusterinfowindowcontroller.mm

📁 lumaqq
💻 MM
📖 第 1 页 / 共 3 页
字号:

- (BOOL)needExecuteWorkflowUnit:(NSString*)unitName {
	if([_kWorkflowUnitAddMember isEqualToString:unitName])
		return [m_newMembers count] > 0;
	else if([_kWorkflowUnitRemoveMember isEqualToString:unitName])
		return [m_oldMembers count] > 0;
	else
		return YES;
}

#pragma mark -
#pragma mark qq event handler

- (BOOL)handleQQEvent:(QQNotification*)event {
	BOOL ret = NO;
	
	switch([event eventId]) {
		case kQQEventClusterGetMessageSettingOK:
			ret = [self handleGetMessageSettingOK:event];
			break;
		case kQQEventClusterGetLastTalkTimeOK:
			ret = [self handleGetLastTalkTimeOK:event];
			break;
		case kQQEventClusterGetChannelSettingOK:
			ret = [self handleGetChannelSettingOK:event];
			break;
		case kQQEventClusterGetInfoOK:
			ret = [self handleGetClusterInfoOK:event];
			break;
		case kQQEventClusterGetMemberInfoOK:
			ret = [self handleGetMemberInfoOK:event];
			break;
		case kQQEventClusterGetCardOK:
			ret = [self handleGetCardOK:event];
			break;
		case kQQEventClusterModifyMessageSettingOK:
			ret = [self handleModifyMessageSettingOK:event];
			break;
		case kQQEventClusterModifyCardOK:
			ret = [self handleModifyCardOK:event];
			break;
		case kQQEventClusterModifyInfoOK:
			ret = [self handleModifyClusterInfoOK:event];
			break;
		case kQQEventClusterModifyChannelSettingOK:
			ret = [self handleModifyChannelSettingOK:event];
			break;
		case kQQEventClusterModifyMemberOK:
			ret = [self handleModifyMemberOK:event];
			break;
	}
	
	return ret;
}

- (BOOL)handleGetMessageSettingOK:(QQNotification*)event {
	ClusterCommandReplyPacket* packet = [event object];
	NSEnumerator* e = [[packet messageSettings] objectEnumerator];
	while(ClusterMessageSetting* setting = [e nextObject]) {		
		// refresh ui
		if([setting internalId] == [m_cluster internalId]) {
			if([setting messageSetting] == kQQClusterMessageClearServerSetting)
				[m_chkSaveInServer setState:NSOffState];
			else {
				[m_chkSaveInServer setState:NSOnState];
				[m_matrixMessage selectCellWithTag:[setting messageSetting]];
			}
		}
	}
	return YES;
}

- (BOOL)handleGetLastTalkTimeOK:(QQNotification*)event {
	ClusterCommandReplyPacket* packet = [event object];
	NSEnumerator* e = [[packet lastTalkTimes] objectEnumerator];
	while(LastTalkTime* time = [e nextObject]) {
		User* user = [[m_mainWindowController groupManager] user:[time QQ]];
		if(user)
			[user setLastTalkTime:[m_cluster internalId] time:([time days] * 24 * 3600)];
	}
	
	// reload
	[m_memberTable reloadData];
	
	return YES;
}

- (BOOL)handleGetChannelSettingOK:(QQNotification*)event {
	ClusterCommandReplyPacket* packet = [event object];
	[m_cluster setNotificationRight:[packet notificationRight]];
	[m_matrixNotification selectCellWithTag:[packet notificationRight]];
	return YES;
}

- (BOOL)handleGetClusterInfoOK:(QQNotification*)event {
	[m_members removeAllObjects];
	[m_members addObjectsFromArray:[m_cluster members]];
	[self reloadInfo];
	
	// refresh ui
	if([self isSuperUser]) {
		[m_btnModify setHidden:NO];
		[m_btnRemove setHidden:NO];
		[m_btnSetMembers setHidden:NO];
		[m_btnCancel setTitle:L(@"LQCancel")];
		[m_btnApply setTitle:L(@"LQApply")];
	} else {
		[m_btnModify setHidden:YES];
		[m_btnRemove setHidden:YES];
		[m_btnSetMembers setHidden:YES];
		[m_btnCancel setTitle:L(@"LQUpdate")];
		[m_btnApply setTitle:L(@"LQClose")];
	}
	return NO;
}

- (BOOL)handleGetMemberInfoOK:(QQNotification*)event {
	[self reloadInfo];
	return NO;
}

- (BOOL)handleGetCardOK:(QQNotification*)event {
	ClusterCommandReplyPacket* packet = [event object];
	[[m_mainWindowController me] setNameCard:[m_cluster internalId] card:[packet clusterNameCard]];
	[self reloadInfo];
	return YES;
}

- (BOOL)handleModifyMessageSettingOK:(QQNotification*)event {
	[m_cluster setMessageSetting:[m_matrixMessage selectedTag]];
	return YES;
}

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

- (BOOL)handleModifyClusterInfoOK:(QQNotification*)event {
	return YES;
}

- (BOOL)handleModifyChannelSettingOK:(QQNotification*)event {
	return YES;
}

- (BOOL)handleModifyMemberOK:(QQNotification*)event {
	return YES;
}

#pragma mark -
#pragma mark table datasource

- (int)numberOfRowsInTableView:(NSTableView *)aTableView {
	return [m_members count];
}

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex {
	User* user = [m_members objectAtIndex:rowIndex];
	switch([[aTableColumn identifier] intValue]) {
		case 0:
			if([user isCreator:m_cluster])
				return [NSImage imageNamed:kImageClusterCreator];
			else if([user isAdmin:m_cluster])
				return [NSImage imageNamed:kImageClusterAdmin];
			else if([user isStockholder:m_cluster])
				return [NSImage imageNamed:kImageClusterStockholder];
			else
				return nil;
			return nil;
		case 1:
			return user;
		case 2:
			return [user nick];
		case 3:
			return [user isMM] ? L(@"LQFemale") : L(@"LQMale");
		case 4:
			UInt32 time = [user lastTalkTime:[m_cluster internalId]];
			if(time == 0)
				return kStringEmpty;
			else {
				NSDate* date = [NSDate dateWithTimeIntervalSince1970:time];
				NSDateFormatter* df = [[[NSDateFormatter alloc] init] autorelease];
				[df setDateStyle:NSDateFormatterShortStyle];
				return [df stringFromDate:date];
			};
		default:
			return kStringEmpty;
	}
}

#pragma mark - 
#pragma mark table delegate

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification {
	[self updateMemberPanelButtons];
}

#pragma mark -
#pragma mark tab view delegate

- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem {
	// close selector if current tab item is not member tab
	if(m_treeSelector) {
		if(![[tabViewItem identifier] isEqual:@"2"]) {
			[m_treeSelector close];
			m_treeSelector = nil;
		}
	}
	
	// change button title
	if(![self isSuperUser]) {
		switch([[tabViewItem identifier] intValue]) {
			case 3:
			case 4:
				[m_btnCancel setTitle:L(@"LQModify")];
				[m_btnApply setTitle:L(@"LQClose")];
				break;
			default:
				[m_btnCancel setTitle:L(@"LQUpdate")];
				[m_btnApply setTitle:L(@"LQClose")];
				break;
		}
	} 
}

#pragma mark -
#pragma mark tree selector data source

- (float)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item {
	return kSizeSmall.height + 2;
}

- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
	if(item == nil)
		return [[m_mainWindowController groupManager] friendlyGroupCount];
	else if([item isMemberOfClass:[Group class]])
		return [item userCount];
	else
		return 0;
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
	if([item isMemberOfClass:[Group class]])
		return [item userCount] > 0;
	else
		return NO;
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
	return item;
}

- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item {
	if(item == nil)
		return [[m_mainWindowController groupManager] group:index];
	else if([item isMemberOfClass:[Group class]])
		return [item user:index];
	else
		return nil;
}

- (id)outlineView:(NSOutlineView*)outlineView parentOfItem:(id)item {
	return nil;
}

#pragma mark -
#pragma mark level combo box data source

- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index {
	if(aComboBox == m_cbLevel1)
		return LEVEL1VALUE(index);
	else if(aComboBox == m_cbLevel2)
		return LEVEL2VALUE([m_cbLevel1 indexOfSelectedItem], index);
	else if(aComboBox == m_cbLevel3)
		return LEVEL3VALUE([m_cbLevel1 indexOfSelectedItem], [m_cbLevel2 indexOfSelectedItem], index);
	else
		return kStringEmpty;
}

- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox {
	if(aComboBox == m_cbLevel1)
		return LEVEL1COUNT;
	else if(aComboBox == m_cbLevel2)
		return LEVEL2COUNT([m_cbLevel1 indexOfSelectedItem]);
	else if(aComboBox == m_cbLevel3)
		return LEVEL3COUNT([m_cbLevel1 indexOfSelectedItem], [m_cbLevel2 indexOfSelectedItem]);
	else
		return 0;
}

#pragma mark -
#pragma mark level combo box delegate

- (void)comboBoxSelectionDidChange:(NSNotification *)notification {
	NSComboBox* combo = [notification object];
	if(combo == m_cbLevel1) {
		[m_cbLevel2 setStringValue:kStringEmpty];
		[m_cbLevel3 setStringValue:kStringEmpty];
		[m_cbLevel2 reloadData];
		[m_cbLevel3 reloadData];
	} else if(combo == m_cbLevel2) {
		[m_cbLevel3 setStringValue:kStringEmpty];
		[m_cbLevel3 reloadData];
	}
}

@end

⌨️ 快捷键说明

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