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

📄 mainwindowcontroller.mm

📁 lumaqq
💻 MM
📖 第 1 页 / 共 5 页
字号:
	[m_jobController terminate];		// shutdown network	[self shutdownNetwork];		// release	[m_client removeQQListener:m_mainQQListener];	[m_client release];	[m_client dealloc];	m_client = nil;	[m_toolbar release];	[WindowRegistry unregisterMainWindow:[m_me QQ]];		// get system perference	PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]];		// unregister hot key	[[HotKeyManager sharedHotKeyManager] unregisterHotKeyByString:[cache extractMessageHotKey]															owner:[m_me QQ]];	[[HotKeyManager sharedHotKeyManager] unregisterHotKeyByString:[cache screenscrapHotKey]															owner:[m_me QQ]];		// remove active window	if([LumaQQApplication activeMainWindow] == self) {		[LumaQQApplication setActiveMainWindow:nil];		[NSApp setApplicationIconImage:[NSImage imageNamed:kImageQQGGOffline]];	}		// unload qbar plugins	[m_pluginManager unloadPlugins];		// release	if(m_sideWindow) {		[m_sideWindow close];		[m_sideWindow release];		m_sideWindow = nil;	}	if(m_tooltipController) {		[m_tooltipController hideTooltip];		[m_tooltipController release];		m_tooltipController = nil;	}			[m_jobController release];	m_jobController = nil;	[m_pluginManager release];	m_pluginManager = nil;	[m_me release];	m_me = nil;	[m_mainQQListener release];	m_mainQQListener = nil;	[m_userDataSource release];	m_userDataSource = nil;	[m_clusterDataSource release];	m_clusterDataSource = nil;	[m_recentDataSource release];	m_recentDataSource = nil;	[m_mobileDataSource release];	m_mobileDataSource = nil;	[m_password release];	m_password = nil;	[m_passwordMd5 release];	m_passwordMd5 = nil;	[m_connection release];	m_connection = nil;	[m_groupManager release];	m_groupManager = nil;	[m_faceManager release];	m_faceManager = nil;	[m_historyManager release];	m_historyManager = nil;	[m_windowRegistry release];	m_windowRegistry = nil;	[m_messageQueue release];	m_messageQueue = nil;	[m_postponedEventCache release];	m_postponedEventCache = nil;	[m_requestBlockingCache release];	m_requestBlockingCache = nil;	[m_addFriendGroupMapping release];	m_addFriendGroupMapping = nil;	[m_removeFriendGroupMapping release];	m_removeFriendGroupMapping = nil;		[self release];}- (BOOL)windowShouldClose:(id)sender {		// if hide on close	PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]];	if(!m_ignoreHideOnClose && [cache hideOnClose]) {		[[self window] orderOut:self];	} else if([m_groupManager changed] && [cache uploadFriendGroupMode] != kLQUploadNever) {		if([cache uploadFriendGroupMode] == kLQUploadAsk) {			[AlertTool showConfirm:[self window]						   message:L(@"LQWarningUploadConfirm", @"MainWindow")					 defaultButton:L(@"LQYes")				   alternateButton:L(@"LQNo")						  delegate:self					didEndSelector:@selector(uploadFriendGroupAlertDidEnd:returnCode:contextInfo:)];		} else {			[self showProgressWindow:YES];			[m_mainQQListener uploadGroupNames];		}				return NO;	}	return m_ignoreHideOnClose ? YES : ![cache hideOnClose];}- (void)windowDidBecomeKey:(NSNotification *)aNotification {	if([aNotification object] != [self window])		return;		[LumaQQApplication setActiveMainWindow:self];	[self refreshDockIcon];}- (void)windowDidEndSheet:(NSNotification *)aNotification {	if([aNotification object] != [self window])		return;		switch(m_sheetType) {		case _kSheetLoginFailed:		case _kSheetNetworkError:		case _kSheetKickedOut:			[self shutdownNetwork];			[self returnToLogin];			break;		case _kSheetInputQQ:			[m_windowRegistry showAddFriendWindow:[[m_txtInput stringValue] intValue] mainWindow:self];			break;		case _kSheetInputStatusMessage:			PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]];			[cache setStatusMessage:[m_txtInput stringValue]];			[[cache statusHistory] addObject:[m_txtInput stringValue]];			[m_client changeStatusMessage:[m_txtInput stringValue]];			break;		case _kSheetInputQQForTempSession:			User* user = [m_groupManager user:[[m_txtInput stringValue] intValue]];			if(user == nil)				user = [[[User alloc] initWithQQ:[[m_txtInput stringValue] intValue] domain:self] autorelease];			[m_windowRegistry showTempSessionIMWindowOrTab:user mainWindow:self];			break;		case _kSheetInputRemarkName:			user = [m_userOutline itemAtRow:[m_userOutline selectedRow]];			if(user) {				NSString* name = [m_txtInput stringValue];				[user setRemarkName:name];				[m_client modifyRemarkName:[user QQ] name:name];				[m_userOutline reloadItem:user];			}			break;		case _kSheetInputNewGroup:			[m_groupManager addFriendlyGroup:[m_txtInput stringValue]];			[m_userOutline reloadData];			break;		case _kSheetInputRenameGroup:			Group* group = [m_userOutline itemAtRow:[m_userOutline selectedRow]];			if(group) {				[m_groupManager setGroupName:group name:[m_txtInput stringValue]];				[m_userOutline reloadItem:group];			}			break;		case _kSheetMoveToBlacklist:			// open delete user window			if(m_userToBeDeleted) {				[m_removeFriendGroupMapping setObject:[NSNumber numberWithInt:[m_groupManager blacklistGroupIndex]]											   forKey:[NSNumber numberWithUnsignedInt:[m_userToBeDeleted QQ]]];				[m_windowRegistry showDeleteUserWindow:m_userToBeDeleted mainWindow:self];			}			break;		case _kSheetUploadFriendGroupConfirmNo:		case _kSheetUploadFriendGroup:			[m_groupManager saveGroups];			[self close];			break;		case _kSheetUploadFriendGroupConfirmYes:			[self showProgressWindow:YES];			[m_mainQQListener uploadGroupNames];			break;		case _kSheetDeleteGroup:			group = [m_userOutline itemAtRow:[m_userOutline selectedRow]];			int index = [m_groupManager indexOfGroup:group];			if(index == m_moveFriendsInDeleteGroupTo) {				[AlertTool showWarning:[self window] message:L(@"LQWarningMoveToSameAsToBeDeleted", @"MainWindow")];			} else {				[m_groupManager moveAllUsersFrom:index to:m_moveFriendsInDeleteGroupTo];				[m_groupManager removeGroupAt:index];				[m_userOutline reloadData];			}			break;		case _kSheetNewMobile:			Mobile* mobile = [[[Mobile alloc] initWithName:[m_txtMobileName stringValue] mobile:[m_txtMobileNumber stringValue] domain:self] autorelease];			[m_groupManager addMobile:mobile];			[m_mobileTable reloadData];			break;		case _kSheetModifyMobile:			mobile = [m_groupManager mobileAtIndex:[m_mobileTable selectedRow]];			[mobile setName:[m_txtMobileName stringValue]];			[mobile setMobile:[m_txtMobileNumber stringValue]];			[m_mobileTable reloadData];			break;	}		m_sheetType = -1;}- (void)windowDidMove:(NSNotification *)aNotification {	if([aNotification object] != [self window])		return;		// check auto hide setting	PreferenceCache* cache = [PreferenceCache cache:[m_me QQ]];	if([cache autoHideMainWindow]) {					// first, check whether a sheet is displayed, if yes, don't perform auto hiding		NSWindow* sheet = [[self window] attachedSheet];		if(sheet) 			return;				// get new frame		NSRect frame = [[self window] frame];				// get screen size		NSRect screenFrame = [[NSScreen mainScreen] frame];				// check intersect		BOOL left = frame.origin.x < 0;		BOOL right = NSMaxX(frame) > NSMaxX(screenFrame);		BOOL top = NSMaxY(frame) > NSMaxY(screenFrame);		BOOL bottom = frame.origin.y < 0;				// check side		if(left || right || top || bottom) {			// set flag			m_autoHided = YES;						// get view bound			NSRect viewBound = [m_sideView bounds];						// create side window			m_sideWindow = [[NSWindow alloc] initWithContentRect:viewBound														   styleMask:NSBorderlessWindowMask															 backing:NSBackingStoreBuffered															   defer:YES];			[m_sideWindow setReleasedWhenClosed:NO];			[m_sideWindow setLevel:NSScreenSaverWindowLevel];						// add side view			[[m_sideWindow contentView] addSubview:m_sideView];			[m_txtSide setStringValue:[[NSNumber numberWithUnsignedInt:[m_me QQ]] description]];						// set next responder			[m_sideWindow setInitialFirstResponder:m_sideView];			[m_txtSide setNextResponder:m_sideView];			[m_ivSide setNextResponder:m_sideView];						// set frame			if(right) {				frame.origin.x = NSMaxX(screenFrame) - NSWidth(viewBound);				[m_sideView setDockSide:kSideRight];			} else if(left) {				frame.origin.x = 0;				[m_sideView setDockSide:kSideLeft];			}			if(bottom) {				frame.origin.y = 0;				[m_sideView setDockSide:kSideBottom];			} else if(top) {				frame.origin.y = NSMaxY(screenFrame) - NSHeight(viewBound);				[m_sideView setDockSide:kSideTop];			}							frame.size = viewBound.size;						// set side window frame			[m_sideWindow setFrameOrigin:frame.origin];						// forbid autoresize because it will mess UI			[[[self window] contentView] setAutoresizesSubviews:NO];						// set window background			[m_sideWindow setBackgroundColor:[NSColor lightGrayColor]];						// start animation			m_animationType = _kAnimationAutoHide;			[AnimationHelper moveWindow:[self window]								   from:[[self window] frame]									 to:frame							   delegate:self];		}	}}#pragma mark -#pragma mark actions- (IBAction)onCancel:(id)sender {	// shutdown network	[self shutdownNetwork];		// return to login window	[self returnToLogin];}- (IBAction)onHeadItem:(id)sender {		// get head bound	NSRect bound = [(HeadControl*)[m_headItem view] bounds];			// calculate	bound = [(HeadControl*)[m_headItem view] convertRect:bound toView:nil];		// create a mouse event and popup menu	NSEvent* event = [NSEvent mouseEventWithType:NSLeftMouseDown										location:bound.origin								   modifierFlags:NSLeftMouseDownMask									   timestamp:0									windowNumber:[[self window] windowNumber]										 context:[[self window] graphicsContext]									 eventNumber:0									  clickCount:0										pressure:0];	[NSMenu popUpContextMenu:m_headMenu				   withEvent:event					 forView:m_tabMain];}- (IBAction)onOnline:(id)sender {	if([[m_client user] status] != kQQStatusOnline) {		// set flag		m_changingStatus = YES;				// save status message		[[PreferenceCache cache:[m_me QQ]] setStatusMessage:L(@"LQStatusOnline")];				// change status or login		if([[m_client user] status] == kQQStatusOffline) {			m_loginStatus = kQQStatusOnline;			[self restartNetwork];		} else			[m_client changeStatus:kQQStatusOnline];	}}- (IBAction)onAway:(id)sender {	if([[m_client user] status] != kQQStatusAway) {		// set flag		m_changingStatus = YES;				// save status message		[[PreferenceCache cache:[m_me QQ]] setStatusMessage:L(@"LQStatusAway")];				// change status or login		if([[m_client user] status] == kQQStatusOffline) {			m_loginStatus = kQQStatusAway;			[self restartNetwork];		} else			[m_client changeStatus:kQQStatusAway];	}}- (IBAction)onHidden:(id)sender {	if([[m_client user] status] != kQQStatusHidden) {		// set flag		m_changingStatus = YES;				// save status message		[[PreferenceCache cache:[m_me QQ]] setStatusMessage:L(@"LQStatusHidden")];				// change status or login		if([[m_client user] status] == kQQStatusOffline) {			m_loginStatus = kQQStatusHidden;			[self restartNetwork];		} else			[m_client changeStatus:kQQStatusHidden];	}}- (IBAction)onOffline:(id)sender {	if([[m_client user] status] != kQQStatusOffline) {		// save status message		[[PreferenceCache cache:[m_me QQ]] setStatusMessage:L(@"LQStatusOffline")];				// shutdown network layer		[self shutdownNetwork];				// refresh ui		[self refreshStatusUI];	}}- (IBAction)onBusy:(id)sender {	if([[m_client user] status] != kQQStatusBusy) {		// set flag		m_changingStatus = YES;				// save status message		[[PreferenceCache cache:[m_me QQ]] setStatusMessage:L(@"LQStatusBusy")];				// change status or login		if([[m_client user] status] == kQQStatusOffline) {			m_loginStatus = kQQStatusBusy;			[self restartNetwork];		} else			[m_client changeStatus:kQQStatusBusy];	}}- (IBAction)onMute:(id)sender {	if([[m_client user] status] != kQQStatusMute) {		// set flag		m_changingStatus = YES;				// save status message		[[PreferenceCache cache:[m_me QQ]] setStatusMessage:L(@"LQStatusMute")];				// change status or login		if([[m_client user] status] == kQQStatusOffline) {			m_loginStatus = kQQStatusMute;			[self restartNetwork];

⌨️ 快捷键说明

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