📄 facemanagerwindowcontroller.mm
字号:
// add face [fm addFace:face groupIndex:[fm indexOfGroup:g]]; }}- (void) dealloc { if(m_poifs) [m_poifs release]; if(m_importGroups) [m_importGroups release]; if(m_importFaces) [m_importFaces release]; if(m_importPictures) [m_importPictures release]; [m_mainWindowController release]; [super dealloc];}- (void)createGroupMenuItems { // remove all item NSMenu* menu = [m_pbGroup menu]; while([menu numberOfItems] > 0) [menu removeItemAtIndex:0]; // create item for every group NSEnumerator* e = [[[m_mainWindowController faceManager] groups] objectEnumerator]; while(FaceGroup* g = [e nextObject]) { NSMenuItem* item = [[[NSMenuItem alloc] init] autorelease]; [item setTitle:[g name]]; [menu addItem:item]; }}#pragma mark -#pragma mark actions- (IBAction)onGroupChanged:(id)sender { [m_faceTable reloadData]; [self onFaceTableSelectionChanged:m_faceTable];}- (IBAction)onDeleteFace:(id)sender { if([m_faceTable numberOfSelectedRows] > 0) { FaceManager* fm = [m_mainWindowController faceManager]; UInt32 QQ = [[m_mainWindowController me] QQ]; // get selected int groupIndex = [m_pbGroup indexOfSelectedItem]; NSIndexSet* rows = [m_faceTable selectedRowIndexes]; // remove int count = [fm faceCount:groupIndex]; for(int i = count - 1; i >= 0; i--) { if([rows containsIndex:i]) { Face* f = [fm face:groupIndex atIndex:i]; [fm removeFace:groupIndex face:i]; if(f) { [FileTool deleteFile:[FileTool getCustomFacePath:QQ group:[[fm group:groupIndex] name] file:[f thumbnail]]]; [FileTool deleteFile:[FileTool getCustomFacePath:QQ group:[[fm group:groupIndex] name] file:[f original]]]; } } } // reload table [m_faceTable reloadData]; // refresh preview [self onFaceTableSelectionChanged:m_faceTable]; // save face.plist to avoid inconsistence [fm save]; }}- (IBAction)onDeleteGroup:(id)sender { if([m_pbGroup numberOfItems] <= 1) { [AlertTool showWarning:[self window] message:L(@"LQWarningAtLeastOne", @"FaceManager")]; } else { // get face group object FaceManager* fm = [m_mainWindowController faceManager]; FaceGroup* g = [fm group:[m_pbGroup indexOfSelectedItem]]; // delete group directory NSString* path = [FileTool getCustomFaceGroupPath:[[m_mainWindowController me] QQ] group:[g name]]; if([FileTool deleteFile:path]) { // remove group [fm removeGroup:[m_pbGroup indexOfSelectedItem]]; [self createGroupMenuItems]; [m_pbGroup selectItemAtIndex:0]; // refresh ui [m_faceTable reloadData]; // save face.plist to avoid inconsistence [fm save]; } else { [AlertTool showWarning:[self window] message:L(@"LQWarningDeleteGroupFailed", @"FaceManager")]; } }}- (IBAction)onNewGroup:(id)sender { [NSApp beginSheet:m_inputWindow modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(inputSheetDidEnd:returnCode:contextInfo:) contextInfo:nil];}- (IBAction)onImportPicture:(id)sender { // set import type m_importType = _kImportPicture; // open open panel NSOpenPanel* panel = [NSOpenPanel openPanel]; [panel setAllowsMultipleSelection:YES]; [panel setCanChooseDirectories:NO]; [panel setCanChooseFiles:YES]; [panel beginSheetForDirectory:NSHomeDirectory() file:nil types:[NSArray arrayWithObjects:@"jpg", @"gif", nil] modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:nil];}- (IBAction)onImportFacePackage:(id)sender { // set import type m_importType = _kImportEIP; // open open panel NSOpenPanel* panel = [NSOpenPanel openPanel]; [panel setAllowsMultipleSelection:NO]; [panel setCanChooseDirectories:NO]; [panel setCanChooseFiles:YES]; [panel beginSheetForDirectory:NSHomeDirectory() file:nil types:[NSArray arrayWithObject:@"eip"] modalForWindow:[self window] modalDelegate:self didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:nil];}- (IBAction)onClose:(id)sender { [[m_mainWindowController faceManager] save]; [self close];}- (IBAction)onInputOK:(id)sender { [NSApp endSheet:m_inputWindow returnCode:YES]; [m_inputWindow orderOut:self];}- (IBAction)onInputCancel:(id)sender { [NSApp endSheet:m_inputWindow returnCode:NO]; [m_inputWindow orderOut:self];}- (IBAction)onFaceTableSelectionChanged:(id)sender { NSIndexSet* rows = [m_faceTable selectedRowIndexes]; int row = [rows firstIndex]; if(row == NSNotFound) { [m_ivPreview setImage:nil]; } else { // get face FaceGroup* g = [[m_mainWindowController faceManager] group:[m_pbGroup indexOfSelectedItem]]; Face* f = [g face:row]; // set new image to image view NSString* path = [FileTool getCustomFacePath:[[m_mainWindowController me] QQ] group:[g name] file:[f original]]; NSImage* image = [[[NSImage alloc] initWithContentsOfFile:path] autorelease]; [m_ivPreview setImage:image]; [m_ivPreview setAnimates:[f multiframe]]; }}#pragma mark -#pragma mark sheet delegate- (void)inputSheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void*)contextInfo { if(returnCode == YES) { m_sheetType = _kSheetNewGroup; }}#pragma mark -#pragma mark open panel delegate- (void)openPanelDidEnd:(NSOpenPanel*)panel returnCode:(int)returnCode contextInfo:(void*)contextInfo { if(returnCode == NSOKButton) { switch(m_importType) { case _kImportEIP: // load the file NSString* file = [panel filename]; m_poifs = [[POIFSFileSystem alloc] initWithPath:file]; [m_poifs load]; // get data of face.xml Property* faceConfig = [m_poifs property:@"/config/face.xml"]; if(!faceConfig) return; NSData* data = [m_poifs getFileBytes:faceConfig]; // create xml parser FaceConfigParser* parser = [[[FaceConfigParser alloc] initWithData:data] autorelease]; [parser parse]; // get face groups m_importGroups = [[parser groups] retain]; m_importFaces = [[parser faces] retain]; m_sheetType = _kSheetOpen; break; case _kImportPicture: m_importPictures = [[panel filenames] retain]; m_sheetType = _kSheetOpen; break; } }}#pragma mark -#pragma mark table data source- (int)numberOfRowsInTableView:(NSTableView *)aTableView { int index = [m_pbGroup indexOfSelectedItem]; FaceGroup* g = [[m_mainWindowController faceManager] group:index]; return [g faceCount];}- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { int index = [m_pbGroup indexOfSelectedItem]; FaceGroup* g = [[m_mainWindowController faceManager] group:index]; if([[aTableColumn identifier] isEqualToString:@"0"]) { Face* f = [g face:rowIndex]; NSString* path = [FileTool getCustomFacePath:[[m_mainWindowController me] QQ] group:[g name] file:[f thumbnail]]; return [[[NSImage alloc] initWithContentsOfFile:path] autorelease]; } else return [[g face:rowIndex] shortcut];}- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { int index = [m_pbGroup indexOfSelectedItem]; FaceGroup* g = [[m_mainWindowController faceManager] group:index]; if([[aTableColumn identifier] isEqualToString:@"1"]) { Face* f = [g face:rowIndex]; [f setShortcut:anObject]; }}#pragma mark -#pragma mark face table delegate- (void)tableViewSelectionDidChange:(NSNotification *)aNotification { NSTableView* table = [aNotification object]; if(table == m_faceTable) { [self onFaceTableSelectionChanged:table]; }}#pragma mark -#pragma mark alert delegate- (void)includeGroupAlertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo { if(returnCode == NSAlertOtherReturn) { [m_poifs release]; m_poifs = nil; [m_importGroups release]; m_importGroups = nil; } else { m_includeGroup = returnCode == NSAlertDefaultReturn; m_sheetType = _kSheetIncludeGroup; }}@end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -