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