Remove hextray
| Before Width: | Height: | Size: 32 KiB | 
|  | @ -1,734 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #define _WIN32_IE 0x0601 | ||||
| 
 | ||||
| #include <windows.h> | ||||
| #include <stdio.h> | ||||
| #include <commctrl.h> | ||||
| #include <tchar.h> | ||||
| 
 | ||||
| #include "hexchat-plugin.h" | ||||
| #include "utility.h" | ||||
| #include "hextray.h" | ||||
| #include "hexchat.h" | ||||
| #include "callbacks.h" | ||||
| #include "resource.h" | ||||
| #include "sdTray.h" | ||||
| #include "sdAlerts.h" | ||||
| 
 | ||||
| HWND	g_hPrefTabEvents; | ||||
| HWND	g_hPrefTabSettings; | ||||
| HWND	g_hPrefTabAlerts; | ||||
| HWND	g_hPrefTabAbout; | ||||
| bool	g_bCanQuit; | ||||
| int		g_iIsActive = 1; | ||||
| 
 | ||||
| 
 | ||||
| BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) | ||||
| { | ||||
| 	TCHAR szTitle[10]; | ||||
| 	GetWindowText(hWnd, szTitle, 9); | ||||
| 
 | ||||
| 	if(_tcsstr(szTitle, _T("HexChat ["))) | ||||
| 	{ | ||||
| 		g_hXchatWnd = hWnd; | ||||
| 		return false; | ||||
| 	} | ||||
| 	 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| /***********************************************************************************************/ | ||||
| /******* our HexChat event call back, get the name and info for each event and save it *********/ | ||||
| /******* for our alerts later ******************************************************************/ | ||||
| /***********************************************************************************************/ | ||||
| int event_cb(char *word[], void *userdata) | ||||
| { | ||||
| 	int iEvent = (int)userdata; | ||||
| 
 | ||||
| 	if(iEvent > 10 && iEvent != 21) | ||||
| 		return HEXCHAT_EAT_NONE; | ||||
| 
 | ||||
| 	/***************************************************************************************/ | ||||
| 	/***** if the window is minimized or if we're allowed to show alerts when its not	 **/ | ||||
| 	/***** and if the option to show the specified alert is true and if we're even		**/ | ||||
| 	/***** allowed to show alerts at all then we show them (a bit confusing but it works) **/ | ||||
| 	/***************************************************************************************/ | ||||
| 	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE)) && (g_dwPrefs & (1<<iEvent))) | ||||
| 	{	 | ||||
| 		/*********************************/ | ||||
| 		/*********** Our Buffers *********/ | ||||
| 		/*********************************/ | ||||
| 		char			szInfo[512]; | ||||
| 		char			szName[64]; | ||||
| 		DWORD			dwInfoFlags; | ||||
| 		int iTime		= g_iTime*1000; | ||||
| 		char *szTemp	= NULL; | ||||
| 
 | ||||
| 		if(g_dwPrefs & (1<<PREF_KAOI)) | ||||
| 		{ | ||||
| 			iTime = 0; | ||||
| 		} | ||||
| 
 | ||||
| 		switch(iEvent) | ||||
| 		{ | ||||
| 		case CHAN_HILIGHT: | ||||
| 			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Highlight: %s", hexchat_get_info (ph, "channel")); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		case CHAN_MESSAGE: | ||||
| 			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Channel Message: %s", hexchat_get_info (ph, "channel")); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		case CHAN_TOPIC_CHANGE: | ||||
| 			_snprintf(szInfo, 512, "%s has changed the topic to %s", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Topic Change: %s", word[3]); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		case CHAN_INVITE: | ||||
| 			_snprintf(szInfo, 512, "%s has invited you into %s", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Invite"); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		case CHAN_KICKED: | ||||
| 			_snprintf(szInfo, 512, "Kicked from %s by %s:\r\n%s", word[2], word[3], word[4]); | ||||
| 			_snprintf(szName, 64, "Kick"); | ||||
| 			dwInfoFlags = NIIF_WARNING; | ||||
| 			break; | ||||
| 		case CHAN_BANNED: | ||||
| 			_snprintf(szInfo, 512, "Cannot join %s You are banned.", word[1]); | ||||
| 			_snprintf(szName, 64, "Banned"); | ||||
| 			dwInfoFlags = NIIF_WARNING; | ||||
| 			break; | ||||
| 		case CTCP_GENERIC: | ||||
| 			_snprintf(szInfo, 512, "%s:\r\nCTCP %s", word[2], word[1]); | ||||
| 			_snprintf(szName, 64, "CTCP"); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		case PMSG_RECEIVE: | ||||
| 			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Private Message"); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		case SERV_DISCONNECT: | ||||
| 			_snprintf(szInfo, 512, "Disconnected\r\nError: %s", word[1]); | ||||
| 			_snprintf(szName, 64, "Disconnect"); | ||||
| 			dwInfoFlags = NIIF_ERROR; | ||||
| 			break; | ||||
| 		case SERV_KILLED: | ||||
| 			_snprintf(szInfo, 512, "Killed(%s(%s))", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Server Admin has killed you"); | ||||
| 			dwInfoFlags = NIIF_ERROR; | ||||
| 			break; | ||||
| 		case SERV_NOTICE: | ||||
| 			_snprintf(szInfo, 512, "Notice:\r\n%s: %s", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Notice"); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		case 11: | ||||
| 			_snprintf(szInfo, 512, ":\r\n%s: %s", word[1], word[2]); | ||||
| 			_snprintf(szName, 64, "Notice"); | ||||
| 			dwInfoFlags = NIIF_INFO; | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| 		/**************************************************************************************/ | ||||
| 		/***** Use windows instead of balloons, and if its a window should we keep it open ****/ | ||||
| 		/***** indefinitely?															   ****/ | ||||
| 		/**************************************************************************************/ | ||||
| 		szTemp = hexchat_strip_color(szInfo); | ||||
| 
 | ||||
| 		if(g_dwPrefs & (1<<PREF_UWIOB)) | ||||
| 		{ | ||||
| 			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, szName, iTime); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			ShowBalloon(g_hXchatWnd, 1, szTemp, szName, iTime, dwInfoFlags); | ||||
| 		} | ||||
| 
 | ||||
| 		free(szTemp); | ||||
| 	} | ||||
| 
 | ||||
| 	if(g_dwPrefs & (1<<PREF_BLINK) && (g_dwPrefs & (1<<iEvent))) | ||||
| 	{ | ||||
| 		BlinkIcon(g_hXchatWnd, 1, g_hIcons[0], g_hIcons[(iEvent+1)], 700, 5); | ||||
| 	} | ||||
| 
 | ||||
| 	/***********************************/ | ||||
| 	/***** pass the events to HexChat **/ | ||||
| 	/***********************************/ | ||||
| 	return HEXCHAT_EAT_NONE; | ||||
| } | ||||
| 
 | ||||
| int command_cb(char *word[], char *word_eol[], void *userdata) | ||||
| { | ||||
| 	char szInfo[512]; | ||||
| 	char *szTemp	= NULL; | ||||
| 	int iTime		= g_iTime*1000; | ||||
| 
 | ||||
| 	_snprintf(szInfo, 512, word_eol[2]); | ||||
| 	szTemp = hexchat_strip_color(szInfo); | ||||
| 
 | ||||
| 	if(g_dwPrefs & (1<<PREF_KAOI)) | ||||
| 	{ | ||||
| 		iTime = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE))) | ||||
| 	{ | ||||
| 		if(g_dwPrefs & (1<<PREF_UWIOB)) | ||||
| 		{ | ||||
| 			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, "Alert", iTime); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			ShowBalloon(g_hXchatWnd, 1, szTemp, "Alert", iTime, NIIF_INFO); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	free(szTemp); | ||||
| 
 | ||||
| 	return HEXCHAT_EAT_ALL; | ||||
| } | ||||
| 
 | ||||
| LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	switch(msg) | ||||
| 	{ | ||||
| 	case WM_CLOSE: | ||||
| 		{ | ||||
| 			if((g_dwPrefs & (1<<PREF_MIOC)) && (g_bCanQuit == false)) | ||||
| 			{ | ||||
| 				/*******************************************/ | ||||
| 				/**** to autoaway or not to autoaway...  ***/ | ||||
| 				/*******************************************/ | ||||
| 				if(g_dwPrefs & (1<<PREF_AOM)) | ||||
| 				{ | ||||
| 					hexchat_globally_away(g_szAway); | ||||
| 				} | ||||
| 
 | ||||
| 				/**************************************************/ | ||||
| 				/**** Win32 API call to hide the window and	     **/ | ||||
| 				/**** save the fact that its minimized for later **/ | ||||
| 				/**************************************************/ | ||||
| 				g_iIsActive = 0; | ||||
| 				ShowWindow(hWnd, SW_HIDE); | ||||
| 
 | ||||
| 				return 0; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				if(g_hPrefDlg != NULL) | ||||
| 				{ | ||||
| 					DestroyWindow(g_hPrefDlg); | ||||
| 				} | ||||
| 
 | ||||
| 				StopBlink(hWnd, 1, g_hIcons[0]); | ||||
| 				 | ||||
| 				if(sdAlertNum()) | ||||
| 				{ | ||||
| 					sdCloseAlerts(); | ||||
| 					HoldClose(); | ||||
| 					return 0; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	case WM_SIZE: | ||||
| 		{ | ||||
| 			/******************************************/ | ||||
| 			/***** User wants to minimize HexChat, ****/ | ||||
| 			/***** are we allowed to go to tray? ******/ | ||||
| 			/******************************************/ | ||||
| 			if((g_dwPrefs & (1<<PREF_TOT)) && (wparam == SIZE_MINIMIZED)) | ||||
| 			{ | ||||
| 				/*******************************************/ | ||||
| 				/**** to autoaway or not to autoaway...  ***/ | ||||
| 				/*******************************************/ | ||||
| 				if(g_dwPrefs & (1<<PREF_AOM)) | ||||
| 				{ | ||||
| 					hexchat_globally_away(g_szAway); | ||||
| 				} | ||||
| 
 | ||||
| 				/**************************************************/ | ||||
| 				/**** Win32 API call to hide the window and	     **/ | ||||
| 				/**** save the fact that its minimized for later **/ | ||||
| 				/**************************************************/ | ||||
| 				g_iIsActive = 0; | ||||
| 				ShowWindow(hWnd, SW_HIDE); | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	/**********************************/ | ||||
| 	/*** user clicked the tray icon ***/ | ||||
| 	/**********************************/ | ||||
| 	case WM_TRAYMSG: | ||||
| 		{ | ||||
| 			switch(lparam) | ||||
| 			{ | ||||
| 			case WM_LBUTTONDOWN: | ||||
| 				{ | ||||
| 					if(!g_iIsActive) | ||||
| 					{ | ||||
| 						/*********************************************************/ | ||||
| 						/*** 0: its hiden, restore it and show it, if autoaway ***/ | ||||
| 						/*** is on, set us as back							 ***/ | ||||
| 						/*********************************************************/ | ||||
| 						SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); | ||||
| 						SetForegroundWindow(hWnd); | ||||
| 						g_iIsActive = 1; | ||||
| 
 | ||||
| 						if(g_dwPrefs & (1<<PREF_AOM)) | ||||
| 						{ | ||||
| 							hexchat_globally_back(); | ||||
| 						} | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			case WM_RBUTTONDOWN: | ||||
| 				{ | ||||
| 					/******************************************/ | ||||
| 					/*** user wants to see the menu find out **/ | ||||
| 					/*** where the mouse is and show it	  **/ | ||||
| 					/******************************************/ | ||||
| 					POINT pt; | ||||
| 					int iRet; | ||||
| 
 | ||||
| 					GetCursorPos(&pt); | ||||
| 					SetForegroundWindow(hWnd); | ||||
| 
 | ||||
| 					ModifyMenu(g_hTrayMenu, 2, (MF_POPUP | MF_BYPOSITION), (UINT)setServerMenu(), _T("Away")); | ||||
| 
 | ||||
| 					Sleep(175); | ||||
| 
 | ||||
| 					iRet = TrackPopupMenuEx(g_hTrayMenu, (TPM_RETURNCMD | TPM_LEFTALIGN), pt.x, pt.y, hWnd, NULL); | ||||
| 
 | ||||
| 					/***********************************/ | ||||
| 					/*** nRet is the users selection, **/ | ||||
| 					/*** process it				   **/ | ||||
| 					/***********************************/ | ||||
| 					sdTrayProc(hWnd, iRet); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	default: | ||||
| 		{ | ||||
| 			/*****************************************************/ | ||||
| 			/*** the taskbar has been restarted, re-add our icon */ | ||||
| 			/*****************************************************/ | ||||
| 			if(msg == RegisterWindowMessage(_T("TaskbarCreated"))) | ||||
| 			{ | ||||
| 				char szVersion[64]; | ||||
| 				_snprintf(szVersion, 64, "HexChat [%s]", hexchat_get_info(ph, "version")); | ||||
| 				AddIcon(g_hXchatWnd, 1, g_hIcons[0], szVersion, (NIF_ICON | NIF_MESSAGE | NIF_TIP), WM_TRAYMSG); | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
| 	return CallWindowProc(g_hOldProc, hWnd, msg, wparam, lparam); | ||||
| } | ||||
| 
 | ||||
| /****************************************************/ | ||||
| /*** process messages from the tray menu ************/ | ||||
| /****************************************************/ | ||||
| LRESULT CALLBACK sdTrayProc(HWND hWnd, int msg) | ||||
| { | ||||
| 	switch(msg) | ||||
| 	{ | ||||
| 	case ACT_EXIT: | ||||
| 		{ | ||||
| 			g_bCanQuit = true; | ||||
| 			PostMessage(hWnd, WM_CLOSE, 0, 0); | ||||
| 		} | ||||
| 		break; | ||||
| 	case ACT_RESTORE: | ||||
| 		{ | ||||
| 			/*************************************************/ | ||||
| 			/** user wants us to restore the HexChat window **/ | ||||
| 			/** and of autoaway is on, set as back ******** **/ | ||||
| 			/*************************************************/ | ||||
| 			SendMessage(g_hXchatWnd, WM_SYSCOMMAND, SC_RESTORE, 0); | ||||
| 			SetForegroundWindow(hWnd); | ||||
| 			 | ||||
| 			if((!g_iIsActive) && (g_dwPrefs & (1<<PREF_AOM))) | ||||
| 			{ | ||||
| 				hexchat_globally_back(); | ||||
| 				g_iIsActive = 1; | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	case ACT_SETTINGS: | ||||
| 		{ | ||||
| 			ShowWindow(g_hPrefDlg, SW_SHOW); | ||||
| 		} | ||||
| 		break; | ||||
| 	case ACT_AWAY: | ||||
| 		{ | ||||
| 			hexchat_globally_away(g_szAway); | ||||
| 		} | ||||
| 		break; | ||||
| 	case ACT_BACK: | ||||
| 		{ | ||||
| 			hexchat_globally_back(); | ||||
| 		} | ||||
| 		break; | ||||
| 	default: | ||||
| 		{ | ||||
| 			if(msg > 0) | ||||
| 			{ | ||||
| 				hexchat_set_context(ph, hexchat_find_server(msg-1)); | ||||
| 
 | ||||
| 				if(!hexchat_get_info(ph, "away")) | ||||
| 				{ | ||||
| 					hexchat_away(g_szAway); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					hexchat_back(); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| int CALLBACK PrefProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	switch(msg) | ||||
| 	{ | ||||
| 	case WM_INITDIALOG: | ||||
| 		{ | ||||
| 			TCITEM tci1; | ||||
| 			TCITEM tci2; | ||||
| 			TCITEM tci3; | ||||
| 			TCITEM tci4; | ||||
| 
 | ||||
| 			tci1.mask		= TCIF_TEXT; | ||||
| 			tci1.pszText	= _T("Settings"); | ||||
| 			tci1.cchTextMax	= strlen("Settings"); | ||||
| 			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 0, (LPARAM)&tci1); | ||||
| 
 | ||||
| 			tci2.mask		= TCIF_TEXT; | ||||
| 			tci2.pszText	= _T("Alerts"); | ||||
| 			tci2.cchTextMax	= strlen("Alerts"); | ||||
| 			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 1, (LPARAM)&tci2); | ||||
| 
 | ||||
| 			tci3.mask		= TCIF_TEXT; | ||||
| 			tci3.pszText	= _T("Events"); | ||||
| 			tci3.cchTextMax	= strlen("Events"); | ||||
| 			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 2, (LPARAM)&tci3); | ||||
| 
 | ||||
| 			tci4.mask		= TCIF_TEXT; | ||||
| 			tci4.pszText	= _T("About"); | ||||
| 			tci4.cchTextMax	= strlen("About"); | ||||
| 			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 3, (LPARAM)&tci4); | ||||
| 
 | ||||
| 
 | ||||
| 			/***********************************************************************************/ | ||||
| 			/***********************************************************************************/ | ||||
| 			/***********************************************************************************/ | ||||
| 
 | ||||
| 			g_hPrefTabSettings	= CreateDialog((HINSTANCE)g_hInstance, | ||||
| 									MAKEINTRESOURCE(IDD_SETTINGS), | ||||
| 									hWnd,		 | ||||
| 									(DLGPROC)SettingsProc); | ||||
| 			SetDialog(g_hPrefTabSettings,	IDD_SETTINGS); | ||||
| 
 | ||||
| 			g_hPrefTabAlerts	= CreateDialog((HINSTANCE)g_hInstance, | ||||
| 									MAKEINTRESOURCE(IDD_ALERTS), | ||||
| 									hWnd, | ||||
| 									(DLGPROC)AlertsProc); | ||||
| 			SetDialog(g_hPrefTabAlerts,		IDD_ALERTS); | ||||
| 
 | ||||
| 			g_hPrefTabEvents	= CreateDialog((HINSTANCE)g_hInstance, | ||||
| 									MAKEINTRESOURCE(IDD_EVENTS), | ||||
| 									hWnd,		 | ||||
| 									(DLGPROC)EventsProc); | ||||
| 			SetDialog(g_hPrefTabEvents,		IDD_EVENTS); | ||||
| 
 | ||||
| 			g_hPrefTabAbout		= CreateDialog((HINSTANCE)g_hInstance, | ||||
| 									MAKEINTRESOURCE(IDD_ABOUT), | ||||
| 									hWnd, | ||||
| 									(DLGPROC)AboutProc); | ||||
| 		} | ||||
| 		break; | ||||
| 	case WM_SHOWWINDOW: | ||||
| 		{ | ||||
| 			if(wparam) | ||||
| 			{ | ||||
| 				SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_SETCURSEL, 0, 0); | ||||
| 				ShowWindow(g_hPrefTabSettings,	SW_SHOW); | ||||
| 				ShowWindow(g_hPrefTabAlerts,	SW_HIDE); | ||||
| 				ShowWindow(g_hPrefTabEvents,	SW_HIDE); | ||||
| 				ShowWindow(g_hPrefTabAbout,		SW_HIDE); | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	case WM_NOTIFY: | ||||
| 		{ | ||||
| 			NMHDR *pData = (NMHDR *)lparam; | ||||
| 
 | ||||
| 			switch(pData->code) | ||||
| 			{ | ||||
| 			case TCN_SELCHANGE: | ||||
| 				{ | ||||
| 					switch(SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_GETCURSEL, 0, 0)) | ||||
| 					{ | ||||
| 					case 0: | ||||
| 						{ | ||||
| 							ShowWindow(g_hPrefTabSettings,	SW_SHOW); | ||||
| 							ShowWindow(g_hPrefTabAlerts,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabEvents,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabAbout,		SW_HIDE); | ||||
| 						} | ||||
| 						break; | ||||
| 					case 1: | ||||
| 						{ | ||||
| 							ShowWindow(g_hPrefTabSettings,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabAlerts,	SW_SHOW); | ||||
| 							ShowWindow(g_hPrefTabEvents,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabAbout,		SW_HIDE); | ||||
| 						} | ||||
| 						break; | ||||
| 					case 2: | ||||
| 						{ | ||||
| 							ShowWindow(g_hPrefTabSettings,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabAlerts,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabEvents,	SW_SHOW); | ||||
| 							ShowWindow(g_hPrefTabAbout,		SW_HIDE); | ||||
| 						} | ||||
| 						break; | ||||
| 					case 3: | ||||
| 						{ | ||||
| 							ShowWindow(g_hPrefTabSettings,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabAlerts,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabEvents,	SW_HIDE); | ||||
| 							ShowWindow(g_hPrefTabAbout,		SW_SHOW); | ||||
| 						} | ||||
| 						break; | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	case WM_CLOSE: | ||||
| 		{ | ||||
| 			ShowWindow(g_hPrefTabEvents,	SW_HIDE); | ||||
| 			ShowWindow(g_hPrefTabSettings,	SW_HIDE); | ||||
| 			ShowWindow(g_hPrefTabAlerts,	SW_HIDE); | ||||
| 			ShowWindow(g_hPrefTabAbout,		SW_HIDE); | ||||
| 			ShowWindow(hWnd,				SW_HIDE); | ||||
| 			return TRUE; | ||||
| 		} | ||||
| 		break; | ||||
| 	case WM_COMMAND: | ||||
| 		{ | ||||
| 			switch(wparam) | ||||
| 			{ | ||||
| 			case IDC_PREF_OK: | ||||
| 				{ | ||||
| 					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS); | ||||
| 					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS); | ||||
| 					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS); | ||||
| 
 | ||||
| 					SavePrefs(0); | ||||
| 
 | ||||
| 					ShowWindow(g_hPrefTabEvents,	SW_HIDE); | ||||
| 					ShowWindow(g_hPrefTabSettings,	SW_HIDE); | ||||
| 					ShowWindow(g_hPrefTabAlerts,	SW_HIDE); | ||||
| 					ShowWindow(g_hPrefTabAbout,		SW_HIDE); | ||||
| 					ShowWindow(hWnd,				SW_HIDE); | ||||
| 					return TRUE; | ||||
| 				} | ||||
| 				break; | ||||
| 			case IDC_PREF_CANCEL: | ||||
| 				{ | ||||
| 					ShowWindow(g_hPrefTabEvents,	SW_HIDE); | ||||
| 					ShowWindow(g_hPrefTabSettings,	SW_HIDE); | ||||
| 					ShowWindow(g_hPrefTabAlerts,	SW_HIDE); | ||||
| 					ShowWindow(g_hPrefTabAbout,		SW_HIDE); | ||||
| 					ShowWindow(hWnd,				SW_HIDE); | ||||
| 					return TRUE; | ||||
| 				} | ||||
| 				break; | ||||
| 			case IDC_PREF_APPLY: | ||||
| 				{ | ||||
| 					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS); | ||||
| 					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS); | ||||
| 					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS); | ||||
| 
 | ||||
| 					SavePrefs(0); | ||||
| 					return FALSE; | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	case WM_DESTROY: | ||||
| 		{ | ||||
| 			SendMessage(g_hPrefTabEvents,	WM_CLOSE, 0, 0); | ||||
| 			SendMessage(g_hPrefTabSettings,	WM_CLOSE, 0, 0); | ||||
| 			SendMessage(g_hPrefTabAbout,	WM_CLOSE, 0, 0); | ||||
| 			SendMessage(g_hPrefTabAlerts,	WM_CLOSE, 0, 0); | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
| /****************************************************/ | ||||
| /****************************************************/ | ||||
| /****************************************************/ | ||||
| LRESULT CALLBACK AlertsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	switch(msg) | ||||
| 	{ | ||||
| 	case WM_CLOSE: | ||||
| 		{ | ||||
| 			DestroyWindow(hWnd); | ||||
| 			return TRUE; | ||||
| 			break; | ||||
| 		} | ||||
| 		break; | ||||
| 	case WM_COMMAND: | ||||
| 		{ | ||||
| 			switch(LOWORD(wparam)) | ||||
| 			{ | ||||
| 			case PREF_AMAE: | ||||
| 				{ | ||||
| 					SetToggle(hWnd, PREF_OSBWM,			PREF_AMAE, TRUE); | ||||
| 					SetToggle(hWnd, PREF_UWIOB,			PREF_AMAE, TRUE); | ||||
| 					SetToggle(hWnd, PREF_KAOI,			PREF_AMAE, TRUE); | ||||
| 					 | ||||
| 					if(IsDlgButtonChecked(hWnd, PREF_AMAE)) | ||||
| 					{ | ||||
| 						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE); | ||||
| 						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE); | ||||
| 						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE); | ||||
| 						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_AMAE, TRUE); | ||||
| 						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_AMAE, TRUE); | ||||
| 						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_AMAE, TRUE); | ||||
| 						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_AMAE, TRUE); | ||||
| 					} | ||||
| 				} | ||||
| 				break; | ||||
| 			case PREF_UWIOB: | ||||
| 				{ | ||||
| 					SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE); | ||||
| 					SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE); | ||||
| 				} | ||||
| 				break; | ||||
| 			case PREF_KAOI: | ||||
| 				{ | ||||
| 					SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE); | ||||
| 					SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE); | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
| /****************************************************/ | ||||
| /****************************************************/ | ||||
| /****************************************************/ | ||||
| LRESULT CALLBACK AboutProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	if(msg == WM_CLOSE) | ||||
| 	{ | ||||
| 		DestroyWindow(hWnd); | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
| /*****************************************************/ | ||||
| /** Process the events for our event dialog **********/ | ||||
| /*****************************************************/ | ||||
| LRESULT CALLBACK EventsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	if(msg == WM_CLOSE) | ||||
| 	{ | ||||
| 		DestroyWindow(hWnd); | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
| /*****************************************************/ | ||||
| /** Process the events for our settings dialog this **/ | ||||
| /** is alot more complicated because options are	**/ | ||||
| /** enabled/disabled based on the state of others   **/ | ||||
| /*****************************************************/ | ||||
| LRESULT CALLBACK SettingsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	if(msg == WM_CLOSE) | ||||
| 	{ | ||||
| 		DestroyWindow(hWnd); | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
| /*****************************************************/ | ||||
| /** this is the hotkey message  processing function **/ | ||||
| /** this window is always open and ready to be told **/ | ||||
| /** if someone has hit the hotkey, if they did, we  **/ | ||||
| /** need to close out all of the tray alerts, for   **/ | ||||
| /** this I wrote sdCloseAlerts, more info there	 **/ | ||||
| /*****************************************************/ | ||||
| LRESULT CALLBACK HotKeyProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	if(msg == WM_CLOSE) | ||||
| 	{ | ||||
| 		DestroyWindow(hWnd); | ||||
| 		return true; | ||||
| 	} | ||||
| 	else if(msg == WM_HOTKEY) | ||||
| 	{ | ||||
| 		sdCloseAlerts(); | ||||
| 	} | ||||
| 
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
|  | @ -1,37 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _H_CALLBACKS_H | ||||
| #define _H_CALLBACKS_H | ||||
| 
 | ||||
| int					event_cb		(char *word[], void *userdata); | ||||
| int					command_cb		(char *word[], char *word_eol[], void *userdata); | ||||
| 
 | ||||
| LRESULT CALLBACK	WindowProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| BOOL	CALLBACK	EnumWindowsProc	(HWND hWnd, LPARAM lParam); | ||||
| LRESULT CALLBACK	sdTrayProc		(HWND hwnd, int msg); | ||||
| 
 | ||||
| LRESULT CALLBACK	AlertProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| LRESULT CALLBACK	HotKeyProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| LRESULT CALLBACK	EventsProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| LRESULT CALLBACK	AboutProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| LRESULT CALLBACK	AlertsProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| LRESULT CALLBACK	SettingsProc	(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| int		CALLBACK	PrefProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); | ||||
| 
 | ||||
| #endif | ||||
|  | @ -1,320 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 1998, 2005 Peter Zelezny, Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #include <windows.h> | ||||
| #include <vector> | ||||
| #include <algorithm> | ||||
| #include <stdio.h> | ||||
| #include <tchar.h> | ||||
| 
 | ||||
| #include "hexchat-plugin.h" | ||||
| #include "hextray.h" | ||||
| #include "resource.h" | ||||
| #include "hexchat.h" | ||||
| #include "utility.h" | ||||
| 
 | ||||
| // from util.c of HexChat source code ( slightly modified to fit HexTray Syntax )
 | ||||
| char *hexchat_strip_color (char *text) | ||||
| { | ||||
| 	int nc	= 0; | ||||
| 	int i	= 0; | ||||
| 	int col	= 0; | ||||
| 	int len	= strlen(text); | ||||
| 	char *new_str = (char *)malloc(len + 2); | ||||
| 
 | ||||
| 	while (len > 0) | ||||
| 	{ | ||||
| 		if ((col && isdigit(*text) && (nc < 2)) || (col && isdigit(*(text+1)) && (nc < 3) && (*text == ','))) | ||||
| 		{ | ||||
| 			nc++; | ||||
| 
 | ||||
| 			if(*text == ',') | ||||
| 			{ | ||||
| 				nc = 0; | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			col = 0; | ||||
| 
 | ||||
| 			switch (*text) | ||||
| 			{ | ||||
| 			case '\003':			  /*ATTR_COLOR: */ | ||||
| 				{ | ||||
| 					col = 1; | ||||
| 					nc = 0; | ||||
| 				} | ||||
| 				break; | ||||
| 			case '\007':			  /*ATTR_BEEP: */ | ||||
| 			case '\017':			  /*ATTR_RESET: */ | ||||
| 			case '\026':			  /*ATTR_REVERSE: */ | ||||
| 			case '\002':			  /*ATTR_BOLD: */ | ||||
| 			case '\037':			  /*ATTR_UNDERLINE: */ | ||||
| 				break; | ||||
| 			default: | ||||
| 				{ | ||||
| 					new_str[i] = *text; | ||||
| 					i++; | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		text++; | ||||
| 		len--; | ||||
| 	} | ||||
| 
 | ||||
| 	new_str[i] = 0; | ||||
| 
 | ||||
| 	return new_str; | ||||
| } | ||||
| 
 | ||||
| void check_special_chars (char *cmd) | ||||
| { | ||||
| 	int occur	= 0; | ||||
| 	int len		= strlen (cmd); | ||||
| 	int i = 0, j = 0; | ||||
| 	char *buf; | ||||
| 
 | ||||
| 	if (!len) | ||||
| 		return; | ||||
| 
 | ||||
| 	buf = (char *)malloc (len + 1); | ||||
| 
 | ||||
| 	if (buf) | ||||
| 	{ | ||||
| 		while (cmd[j]) | ||||
| 		{ | ||||
| 			switch (cmd[j]) | ||||
| 			{ | ||||
| 			case '%': | ||||
| 				{ | ||||
| 					occur++; | ||||
| 
 | ||||
| 					switch (cmd[j + 1]) | ||||
| 					{ | ||||
| 					case 'R': | ||||
| 						buf[i] = '\026'; | ||||
| 						break; | ||||
| 					case 'U': | ||||
| 						buf[i] = '\037'; | ||||
| 						break; | ||||
| 					case 'B': | ||||
| 						buf[i] = '\002'; | ||||
| 						break; | ||||
| 					case 'C': | ||||
| 						buf[i] = '\003'; | ||||
| 						break; | ||||
| 					case 'O': | ||||
| 						buf[i] = '\017'; | ||||
| 						break; | ||||
| 					case '%': | ||||
| 						buf[i] = '%'; | ||||
| 						break; | ||||
| 					default: | ||||
| 						buf[i] = '%'; | ||||
| 						j--; | ||||
| 						break; | ||||
| 					} | ||||
| 
 | ||||
| 					j++; | ||||
| 				} | ||||
| 				break; | ||||
| 			default: | ||||
| 				{ | ||||
| 					buf[i] = cmd[j]; | ||||
| 				} | ||||
| 				break; | ||||
| 			} | ||||
| 
 | ||||
| 			j++; | ||||
| 			i++; | ||||
| 		} | ||||
| 
 | ||||
| 		buf[i] = 0; | ||||
| 
 | ||||
| 		if (occur) | ||||
| 			strcpy (cmd, buf); | ||||
| 
 | ||||
| 		free (buf); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void hexchat_globally_away(TCHAR *tszAway) | ||||
| { | ||||
| 	char szTemp[512]; | ||||
| 	char szAway[512]; | ||||
| 
 | ||||
| 	ConvertString(tszAway, szAway, 512); | ||||
| 	_snprintf(szTemp, 512, "ALLSERV AWAY %s\0", szAway); | ||||
| 	check_special_chars(szTemp); | ||||
| 	hexchat_exec(szTemp); | ||||
| } | ||||
| 
 | ||||
| void hexchat_away(TCHAR *tszAway) | ||||
| { | ||||
| 	char szTemp[512]; | ||||
| 	char szAway[512]; | ||||
| 
 | ||||
| 	ConvertString(tszAway, szAway, 512); | ||||
| 	_snprintf(szTemp, 512, szAway); | ||||
| 	check_special_chars(szTemp); | ||||
| 	hexchat_commandf(ph, "AWAY %s\0", szTemp); | ||||
| } | ||||
| 
 | ||||
| void hexchat_globally_back() | ||||
| { | ||||
| 	std::vector<int> xs; | ||||
| 	std::vector<int>::iterator xsi; | ||||
| 	hexchat_list *xl = hexchat_list_get(ph, "channels"); | ||||
| 
 | ||||
| 	if(xl) | ||||
| 	{ | ||||
| 		while(hexchat_list_next(ph, xl)) | ||||
| 		{ | ||||
| 			xsi = std::find(xs.begin(), xs.end(), hexchat_list_int(ph, xl, "id")); | ||||
| 
 | ||||
| 			if((xsi == xs.end()) && | ||||
| 				((strlen(hexchat_list_str(ph, xl, "server")) > 0) ||  | ||||
| 				(strlen(hexchat_list_str(ph, xl, "channel")) > 0))) | ||||
| 			{ | ||||
| 				xs.push_back(hexchat_list_int(ph, xl, "id")); | ||||
| 				hexchat_set_context(ph, (hexchat_context *)hexchat_list_str(ph, xl, "context")); | ||||
| 				hexchat_back(); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		hexchat_list_free(ph, xl); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void hexchat_back() | ||||
| { | ||||
| 	if(hexchat_get_info(ph, "away")) | ||||
| 	{ | ||||
| 		hexchat_command(ph, "BACK"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| HMENU setServerMenu() | ||||
| { | ||||
| 	HMENU sTemp = CreateMenu(); | ||||
| 	TCHAR wszServer[128]; | ||||
| 	TCHAR wszNick[128]; | ||||
| 	TCHAR wszMenuEntry[256]; | ||||
| 
 | ||||
| 	std::vector<int> xs; | ||||
| 	std::vector<int>::iterator xsi; | ||||
| 	hexchat_list *xl = hexchat_list_get(ph, "channels"); | ||||
| 
 | ||||
| 	AppendMenu(sTemp, MF_STRING, ACT_AWAY, _T("Set Globally Away")); | ||||
| 	AppendMenu(sTemp, MF_STRING, ACT_BACK, _T("Set Globally Back")); | ||||
| 	AppendMenu(sTemp, MF_SEPARATOR, 0, NULL); | ||||
| 
 | ||||
| 	if(xl) | ||||
| 	{ | ||||
| 		while(hexchat_list_next(ph, xl)) | ||||
| 		{ | ||||
| 			xsi = std::find(xs.begin(), xs.end(), hexchat_list_int(ph, xl, "id")); | ||||
| 
 | ||||
| 			if( (xsi == xs.end()) && | ||||
| 				((strlen(hexchat_list_str(ph, xl, "server")) > 0) ||  | ||||
| 				(strlen(hexchat_list_str(ph, xl, "channel")) > 0))) | ||||
| 			{ | ||||
| 				hexchat_set_context(ph, (hexchat_context *)hexchat_list_str(ph, xl, "context")); | ||||
| 				xs.push_back(hexchat_list_int(ph, xl, "id")); | ||||
| 
 | ||||
| 				char *network	= _strdup(hexchat_list_str(ph, xl, "network")); | ||||
| 				char *server	= _strdup(hexchat_list_str(ph, xl, "server")); | ||||
| 				char *nick		= _strdup(hexchat_get_info(ph, "nick")); | ||||
| 
 | ||||
| 				if(network != NULL) | ||||
| 				{ | ||||
| 					ConvertString(network, wszServer, 128); | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					ConvertString(server, wszServer, 128); | ||||
| 				} | ||||
| 
 | ||||
| 				if(server != NULL) | ||||
| 				{ | ||||
| 					ConvertString(nick, wszNick, 128); | ||||
| 					_sntprintf(wszMenuEntry, 256, _T("%s @ %s\0"), wszNick, wszServer); | ||||
| 
 | ||||
| 					if(!hexchat_get_info(ph, "away")) | ||||
| 					{ | ||||
| 						AppendMenu(sTemp, MF_STRING, (hexchat_list_int(ph, xl, "id") + 1), wszMenuEntry); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						AppendMenu(sTemp, (MF_CHECKED | MF_STRING), (hexchat_list_int(ph, xl, "id") + 1), wszMenuEntry);							 | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				free(network); | ||||
| 				free(server); | ||||
| 				free(nick); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		hexchat_list_free(ph, xl); | ||||
| 	} | ||||
| 
 | ||||
| 	return sTemp; | ||||
| } | ||||
| 
 | ||||
| struct _hexchat_context *hexchat_find_server(int find_id) | ||||
| { | ||||
| 	hexchat_context *xc; | ||||
| 	hexchat_list *xl = hexchat_list_get(ph, "channels"); | ||||
| 	int id; | ||||
| 
 | ||||
| 	if(!xl) | ||||
| 		return NULL; | ||||
| 
 | ||||
| 	while(hexchat_list_next(ph, xl)) | ||||
| 	{ | ||||
| 		id = hexchat_list_int(ph, xl, "id"); | ||||
| 		 | ||||
| 		if(id == -1) | ||||
| 		{ | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		else if(id == find_id) | ||||
| 		{ | ||||
| 			xc = (hexchat_context *)hexchat_list_str(ph, xl, "context"); | ||||
| 			 | ||||
| 			hexchat_list_free(ph, xl); | ||||
| 
 | ||||
| 			return xc; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	hexchat_list_free(ph, xl); | ||||
| 
 | ||||
| 	return NULL; | ||||
| } | ||||
| 
 | ||||
| void hexchat_exec(char *command) | ||||
| { | ||||
| 	hexchat_set_context(ph, hexchat_find_context(ph, NULL, NULL)); | ||||
| 	hexchat_command(ph, command); | ||||
| } | ||||
|  | @ -1,32 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _H_XCHAT_H | ||||
| #define _H_XCHAT_H | ||||
| 
 | ||||
| void					hexchat_exec			(char *); | ||||
| char					*hexchat_strip_color	(char *); | ||||
| void					hexchat_parse			(char *); | ||||
| struct _hexchat_context	*hexchat_find_server	(int); | ||||
| void					hexchat_globally_away	(TCHAR *); | ||||
| void					hexchat_away			(TCHAR *); | ||||
| void					hexchat_globally_back	(); | ||||
| void					hexchat_back			(); | ||||
| HMENU					setServerMenu		(); | ||||
| 
 | ||||
| #endif | ||||
|  | @ -1,246 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #define _WIN32_IE 0x0601 | ||||
| 
 | ||||
| #include <windows.h> | ||||
| #include <list> | ||||
| #include <string> | ||||
| #include <shobjidl.h> | ||||
| 
 | ||||
| #include "hexchat-plugin.h" | ||||
| #include "resource.h" | ||||
| #include "callbacks.h" | ||||
| #include "utility.h" | ||||
| #include "hextray.h" | ||||
| #include "sdTray.h" | ||||
| #include "sdAlerts.h" | ||||
| 
 | ||||
| /*****************************************************/ | ||||
| /**** Don't want to pollute the namespace do we? *****/ | ||||
| /*****************************************************/ | ||||
| std::list<hexchat_hook *> g_vHooks; | ||||
| 
 | ||||
| /*****************************************************/ | ||||
| /************ Global Identifiers *********************/ | ||||
| /*****************************************************/ | ||||
| WNDPROC g_hOldProc; | ||||
| hexchat_plugin *ph; | ||||
| 
 | ||||
| /*****************************************************/ | ||||
| /***************** Resources *************************/ | ||||
| /*****************************************************/ | ||||
| HWND	g_hXchatWnd; | ||||
| HWND	g_hHotkeyWnd; | ||||
| HWND	g_hPrefDlg; | ||||
| HMENU	g_hTrayMenu; | ||||
| HICON	g_hIcons[24]; | ||||
| HANDLE	g_hInstance; | ||||
| /*****************************************************/ | ||||
| /***************** Preferences ***********************/ | ||||
| /*****************************************************/ | ||||
| unsigned int g_dwPrefs; | ||||
| TCHAR	g_szAway[512]; | ||||
| int		g_iTime; | ||||
| 
 | ||||
| 
 | ||||
| BOOL WINAPI DllMain(HANDLE hModule, DWORD fdwReason, LPVOID lpVoid) | ||||
| { | ||||
| 	if((fdwReason == DLL_PROCESS_ATTACH) || (fdwReason == DLL_THREAD_ATTACH)) | ||||
| 	{ | ||||
| 		g_hInstance = hModule; | ||||
| 	} | ||||
| 
 | ||||
| 	return TRUE; | ||||
| } | ||||
| 
 | ||||
| int hexchat_plugin_init(hexchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg) | ||||
| { | ||||
| 	ph = plugin_handle; | ||||
| 
 | ||||
| 	*plugin_name	= "HexTray"; | ||||
| 	*plugin_desc	= "Minimize HexChat to the Windows system tray"; | ||||
| 	*plugin_version = "1.3.0"; | ||||
| 
 | ||||
| 	char buffer[256]; | ||||
| 
 | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	/************************* Initialize our preferences if they don't exist yet **********************************************/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 
 | ||||
| 	if (hexchat_pluginpref_get_int (ph, "settings") == -1) | ||||
| 	{ | ||||
| 		hexchat_pluginpref_set_int (ph, "settings", HT_DEF_SET); | ||||
| 	} | ||||
| 	if (hexchat_pluginpref_get_int (ph, "aot") == -1) | ||||
| 	{ | ||||
| 		hexchat_pluginpref_set_int (ph, "aot", HT_DEF_AOT); | ||||
| 	} | ||||
| 	if (hexchat_pluginpref_get_int (ph, "key") == -1) | ||||
| 	{ | ||||
| 		hexchat_pluginpref_set_int (ph, "key", HT_DEF_KEY); | ||||
| 	} | ||||
| 	if (hexchat_pluginpref_get_int (ph, "mod") == -1) | ||||
| 	{ | ||||
| 		hexchat_pluginpref_set_int (ph, "mod", HT_DEF_MOD); | ||||
| 	} | ||||
| 	if (hexchat_pluginpref_get_str (ph, "away", buffer) == 0) | ||||
| 	{ | ||||
| 		hexchat_pluginpref_set_str (ph, "away", ""); | ||||
| 	} | ||||
| 
 | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	/************************* Load our preferences ****************************************************************************/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	LoadPrefs(); | ||||
| 
 | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	/************************* Finds the HexChat window and saves it for later use *********************************************/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	g_hXchatWnd = (HWND)hexchat_get_info(ph, "win_ptr"); | ||||
| 
 | ||||
| 	if(g_hXchatWnd == NULL) | ||||
| 	{ | ||||
| 		EnumThreadWindows(GetCurrentThreadId(), EnumWindowsProc, 0); | ||||
| 	} | ||||
| 
 | ||||
| 	g_hOldProc	= (WNDPROC)GetWindowLongPtr(g_hXchatWnd, GWLP_WNDPROC); | ||||
| 	SetWindowLongPtr(g_hXchatWnd, GWLP_WNDPROC, (LONG_PTR)WindowProc); | ||||
| 
 | ||||
| 	/***************************************************************************************************************************/	 | ||||
| 	/************************* Grab the HexChat Icon, Load our menu, create the window to receive the hotkey messages  *********/ | ||||
| 	/************************* and register the windows message so we know if explorer crashes                       ***********/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	g_hTrayMenu		= GetSubMenu(LoadMenu((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDR_TRAY_MENU)), 0); | ||||
| 	g_hHotkeyWnd	= CreateDialog((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDD_ALERT), NULL,		(DLGPROC)HotKeyProc); | ||||
| 	g_hPrefDlg		= CreateDialog((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDD_PREF),  g_hXchatWnd, (DLGPROC)PrefProc); | ||||
| 
 | ||||
| 	g_hIcons[0]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_XCHAT),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 	g_hIcons[2]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_HIGHLIGHT),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 	g_hIcons[5]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_BANNED),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 	g_hIcons[6]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_KICKED),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 	g_hIcons[8]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_PMSG),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 	g_hIcons[10]= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_SNOTICE),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 	g_hIcons[11]= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_DISCONNECTED),	IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 	g_hIcons[22]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_CHANMSG),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); | ||||
| 
 | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	/************************* Add our icon to the tray ************************************************************************/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	char szVersion[64]; | ||||
| 	_snprintf(szVersion, 64, "HexChat %s", hexchat_get_info(ph, "version")); | ||||
| 	AddIcon(g_hXchatWnd, 1, g_hIcons[0], szVersion, (NIF_ICON | NIF_MESSAGE | NIF_TIP), WM_TRAYMSG); | ||||
| 
 | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	if(g_dwPrefs & (1<<PREF_DNSIT)) | ||||
| 	{ | ||||
| 		DWORD dwStyle; | ||||
| 		dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE); | ||||
| 		dwStyle |= (1<<WS_CHILD); | ||||
| 		SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle); | ||||
| 		SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, (LONG_PTR)g_hHotkeyWnd); | ||||
| 	} | ||||
| 
 | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	/************************* Set our hooks and save them for later so we can unhook them *************************************/ | ||||
| 	/***************************************************************************************************************************/ | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Channel Msg Hilight",			HEXCHAT_PRI_NORM, event_cb,	(void *)CHAN_HILIGHT)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Channel Message",				HEXCHAT_PRI_NORM, event_cb,	(void *)CHAN_MESSAGE)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Topic Change",					HEXCHAT_PRI_NORM, event_cb,	(void *)CHAN_TOPIC_CHANGE)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Channel Action Hilight",		HEXCHAT_PRI_NORM, event_cb,	(void *)CHAN_HILIGHT)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Channel INVITE",				HEXCHAT_PRI_NORM, event_cb,	(void *)CHAN_INVITE)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "You Kicked",					HEXCHAT_PRI_NORM, event_cb,	(void *)CHAN_KICKED)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Banned",						HEXCHAT_PRI_NORM, event_cb,	(void *)CHAN_BANNED)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "CTCP Generic",					HEXCHAT_PRI_NORM, event_cb,	(void *)CTCP_GENERIC)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Private Message",				HEXCHAT_PRI_NORM, event_cb,	(void *)PMSG_RECEIVE)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Private Message to Dialog",	HEXCHAT_PRI_NORM, event_cb,	(void *)PMSG_RECEIVE)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Disconnected",					HEXCHAT_PRI_NORM, event_cb,	(void *)SERV_DISCONNECT)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Killed",						HEXCHAT_PRI_NORM, event_cb,	(void *)SERV_KILLED)); | ||||
| 	g_vHooks.push_back(hexchat_hook_print(ph, "Notice",						HEXCHAT_PRI_NORM, event_cb,	(void *)SERV_NOTICE)); | ||||
| 	g_vHooks.push_back(hexchat_hook_command(ph, "tray_alert",					HEXCHAT_PRI_NORM, command_cb,	"Create an Alert", NULL)); | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| int hexchat_plugin_deinit(hexchat_plugin *plugin_handle) | ||||
| { | ||||
| 	/******************************************/ | ||||
| 	/****** Remove the Icon from the tray *****/ | ||||
| 	/******************************************/ | ||||
| 	StopBlink(g_hXchatWnd, 1, g_hIcons[0]); | ||||
| 	RemoveIcon(g_hXchatWnd, 1); | ||||
| 	 | ||||
| 	/*******************************************/ | ||||
| 	/*******************************************/ | ||||
| 	/*******************************************/ | ||||
| 	if(g_dwPrefs & (1<<PREF_DNSIT)) | ||||
| 	{ | ||||
| 		DWORD dwStyle; | ||||
| 		dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE); | ||||
| 		dwStyle &= ~(1<<WS_CHILD); | ||||
| 		SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle); | ||||
| 		SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, NULL); | ||||
| 	} | ||||
| 
 | ||||
| 	/******************************************/ | ||||
| 	/****** Unload our resources **************/ | ||||
| 	/******************************************/ | ||||
| 	DestroyMenu(g_hTrayMenu); | ||||
| 
 | ||||
| 	for(int i = 0; i <= 11; i++) | ||||
| 	{ | ||||
| 		DestroyIcon(g_hIcons[i]); | ||||
| 	} | ||||
| 
 | ||||
| 	/******************************************/ | ||||
| 	/****** Remove our window hook ************/ | ||||
| 	/******************************************/ | ||||
| 	SetWindowLongPtr(g_hXchatWnd, GWLP_WNDPROC, (LONG_PTR)g_hOldProc); | ||||
| 
 | ||||
| 	/******************************************/ | ||||
| 	/****** Remove our hotkey, and destroy ****/ | ||||
| 	/****** the window that receives its   ****/ | ||||
| 	/****** messages                       ****/ | ||||
| 	/******************************************/ | ||||
| 	UnregisterHotKey(g_hHotkeyWnd, 1); | ||||
| 	DestroyWindow(g_hHotkeyWnd); | ||||
| 	DestroyWindow(g_hPrefDlg); | ||||
| 
 | ||||
| 	/******************************************/ | ||||
| 	/************* Clean up Isle 7 ************/ | ||||
| 	/******************************************/ | ||||
| 	if(sdAlertNum()) | ||||
| 	{ | ||||
| 		sdCloseAlerts(); | ||||
| 	} | ||||
| 	/******************************************/ | ||||
| 	/****** remove our hexchat_hook_*s **********/ | ||||
| 	/******************************************/ | ||||
| 	while(!g_vHooks.empty()) | ||||
| 	{ | ||||
| 		if(g_vHooks.back() != NULL) | ||||
| 		{ | ||||
| 			hexchat_unhook(ph, g_vHooks.back()); | ||||
| 		} | ||||
| 		g_vHooks.pop_back(); | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
|  | @ -1,3 +0,0 @@ | |||
| EXPORTS  | ||||
| hexchat_plugin_init  | ||||
| hexchat_plugin_deinit  | ||||
|  | @ -1,83 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _XTRAY_H | ||||
| #define _XTRAY_H | ||||
| 
 | ||||
| /******************** Default settings*****************/ | ||||
| #define HT_DEF_SET		13814 | ||||
| #define HT_DEF_AOT		5 | ||||
| #define HT_DEF_KEY		84 | ||||
| #define HT_DEF_MOD		6 | ||||
| 
 | ||||
| /******************** Globals *************************/ | ||||
| extern HWND				g_hXchatWnd; | ||||
| extern HWND				g_hHotkeyWnd; | ||||
| extern HWND				g_hPrefDlg; | ||||
| extern HMENU			g_hTrayMenu; | ||||
| extern HICON			g_hIcons[24]; | ||||
| extern HANDLE			g_hInstance; | ||||
| extern unsigned int		g_dwPrefs; | ||||
| extern TCHAR			g_szAway[512]; | ||||
| extern int				g_iTime; | ||||
| extern WNDPROC			g_hOldProc; | ||||
| extern struct _hexchat_plugin *ph; | ||||
| /******************************************************/ | ||||
| 
 | ||||
| /******************** Messages ************************/ | ||||
| #define WM_TRAYMSG WM_APP | ||||
| /******************************************************/ | ||||
| 
 | ||||
| /********************* Events *************************/ | ||||
| #define CHAN_HILIGHT			1 | ||||
| #define CHAN_INVITE				2 | ||||
| #define CHAN_TOPIC_CHANGE		3 | ||||
| #define CHAN_BANNED				4 | ||||
| #define CHAN_KICKED				5 | ||||
| 
 | ||||
| #define CTCP_GENERIC			6 | ||||
| #define PMSG_RECEIVE			7 | ||||
| 
 | ||||
| #define SERV_KILLED				8 | ||||
| #define SERV_NOTICE				9 | ||||
| #define SERV_DISCONNECT			10 | ||||
| 
 | ||||
| /* new events */ | ||||
| #define CHAN_MESSAGE			21 | ||||
| 
 | ||||
| #define PREF_AOM				11 // away on minimize
 | ||||
| #define PREF_TOT				12 // Tray on Taskbar
 | ||||
| #define PREF_AMAE				13 // alert me about events
 | ||||
| #define PREF_OSBWM				14 // Only Show Balloon When Minimized
 | ||||
| #define PREF_UWIOB				15 // Use Window Instead of Balloon
 | ||||
| #define PREF_KAOI				16 // Keep alerts open indefinitely
 | ||||
| #define PREF_MIOC				17 // Minimize instead of close
 | ||||
| #define PREF_BLINK				18 // blink icon
 | ||||
| #define PREF_CICO				19 // change icon - not implemented
 | ||||
| #define PREF_DNSIT				20 // Do not show in taskbar
 | ||||
| /******************************************************/ | ||||
| #endif | ||||
| 
 | ||||
| #ifdef _WIN64 | ||||
| /* use replacement with the same value, and use SetWindowLongPtr instead
 | ||||
|    of SetWindowLong. more info: | ||||
| 
 | ||||
|    http://msdn.microsoft.com/en-us/library/ms633591.aspx
 | ||||
|    http://msdn.microsoft.com/en-us/library/ms644898.aspx */
 | ||||
| #define GWL_HWNDPARENT GWLP_HWNDPARENT | ||||
| #endif | ||||
|  | @ -1,129 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <PropertyGroup Label="Configuration"> | ||||
|     <PlatformToolset>v120</PlatformToolset> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup Label="ProjectConfigurations"> | ||||
|     <ProjectConfiguration Include="Release|Win32"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Release|x64"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>x64</Platform> | ||||
|     </ProjectConfiguration> | ||||
|   </ItemGroup> | ||||
|   <PropertyGroup Label="Globals"> | ||||
|     <ProjectGuid>{3024CF36-85E5-4E00-9608-7002E2C7EF14}</ProjectGuid> | ||||
|     <Keyword>Win32Proj</Keyword> | ||||
|     <RootNamespace>hextray</RootNamespace> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||
|     <ConfigurationType>DynamicLibrary</ConfigurationType> | ||||
|     <UseDebugLibraries>false</UseDebugLibraries> | ||||
|     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||
|     <CharacterSet>MultiByte</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||
|     <ConfigurationType>DynamicLibrary</ConfigurationType> | ||||
|     <UseDebugLibraries>false</UseDebugLibraries> | ||||
|     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||
|     <CharacterSet>MultiByte</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||
|   <ImportGroup Label="ExtensionSettings"> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|     <Import Project="..\..\win32\hexchat.props" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|     <Import Project="..\..\win32\hexchat.props" /> | ||||
|   </ImportGroup> | ||||
|   <PropertyGroup Label="UserMacros" /> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <LinkIncremental>false</LinkIncremental> | ||||
|     <OutDir>$(HexChatBin)</OutDir> | ||||
|     <IntDir>$(HexChatObj)$(ProjectName)\</IntDir> | ||||
|     <TargetName>hchextray</TargetName> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <LinkIncremental>false</LinkIncremental> | ||||
|     <OutDir>$(HexChatBin)</OutDir> | ||||
|     <IntDir>$(HexChatObj)$(ProjectName)\</IntDir> | ||||
|     <TargetName>hchextray</TargetName> | ||||
|   </PropertyGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <ClCompile> | ||||
|       <PrecompiledHeader> | ||||
|       </PrecompiledHeader> | ||||
|       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||
|       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||
|       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;XTRAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
|       <AdditionalIncludeDirectories>..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <ModuleDefinitionFile>hextray.def</ModuleDefinitionFile> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <ClCompile> | ||||
|       <PrecompiledHeader> | ||||
|       </PrecompiledHeader> | ||||
|       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||
|       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||
|       <PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;XTRAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
|       <AdditionalIncludeDirectories>..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <ModuleDefinitionFile>hextray.def</ModuleDefinitionFile> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemGroup> | ||||
|     <None Include="bitmaps\sd.bmp" /> | ||||
|     <None Include="icons\ban.ico" /> | ||||
|     <None Include="icons\disconnect.ico" /> | ||||
|     <None Include="icons\highlight.ico" /> | ||||
|     <None Include="icons\kick.ico" /> | ||||
|     <None Include="icons\message.ico" /> | ||||
|     <None Include="icons\sd.ico" /> | ||||
|     <None Include="icons\notice.ico" /> | ||||
|     <None Include="icons\hexchat.ico" /> | ||||
|     <None Include="hextray.def" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ResourceCompile Include="resource.rc" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="callbacks.cpp" /> | ||||
|     <ClCompile Include="sdAlerts.cpp" /> | ||||
|     <ClCompile Include="sdTray.cpp" /> | ||||
|     <ClCompile Include="utility.cpp" /> | ||||
|     <ClCompile Include="hexchat.cpp" /> | ||||
|     <ClCompile Include="hextray.cpp" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="callbacks.h" /> | ||||
|     <ClInclude Include="resource.h" /> | ||||
|     <ClInclude Include="sdAlerts.h" /> | ||||
|     <ClInclude Include="sdTray.h" /> | ||||
|     <ClInclude Include="utility.h" /> | ||||
|     <ClInclude Include="hexchat.h" /> | ||||
|     <ClInclude Include="hextray.h" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
|   <ImportGroup Label="ExtensionTargets"> | ||||
|   </ImportGroup> | ||||
| </Project> | ||||
|  | @ -1,103 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <ItemGroup> | ||||
|     <Filter Include="Source Files"> | ||||
|       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | ||||
|       <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||||
|     </Filter> | ||||
|     <Filter Include="Header Files"> | ||||
|       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | ||||
|       <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> | ||||
|     </Filter> | ||||
|     <Filter Include="Resource Files"> | ||||
|       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | ||||
|       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||||
|     </Filter> | ||||
|     <Filter Include="Resource Files\bitmaps"> | ||||
|       <UniqueIdentifier>{448b49a5-e68b-451e-bfbc-0855da024b2e}</UniqueIdentifier> | ||||
|     </Filter> | ||||
|     <Filter Include="Resource Files\icons"> | ||||
|       <UniqueIdentifier>{8345128a-0635-43d6-9115-a85ad9c77ee2}</UniqueIdentifier> | ||||
|     </Filter> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <None Include="hextray.def"> | ||||
|       <Filter>Resource Files</Filter> | ||||
|     </None> | ||||
|     <None Include="bitmaps\sd.bmp"> | ||||
|       <Filter>Resource Files\bitmaps</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\ban.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\disconnect.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\highlight.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\kick.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\message.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\sd.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\notice.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|     <None Include="icons\hexchat.ico"> | ||||
|       <Filter>Resource Files\icons</Filter> | ||||
|     </None> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ResourceCompile Include="resource.rc"> | ||||
|       <Filter>Resource Files</Filter> | ||||
|     </ResourceCompile> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="callbacks.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="sdAlerts.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="sdTray.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="utility.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="hexchat.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="hextray.cpp"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="callbacks.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="resource.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="sdAlerts.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="sdTray.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="utility.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="hexchat.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="hextray.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 17 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 24 KiB | 
|  | @ -1,47 +0,0 @@ | |||
| //{{NO_DEPENDENCIES}}
 | ||||
| // Microsoft Visual C++ generated include file.
 | ||||
| // Used by resource.rc
 | ||||
| //
 | ||||
| #define IDD_ALERTS                      104 | ||||
| #define IDD_EVENTS                      105 | ||||
| #define IDD_SETTINGS                    106 | ||||
| #define IDD_ALERT                       107 | ||||
| #define IDD_PREF                        108 | ||||
| #define IDD_ABOUT                       109 | ||||
| #define IDR_TRAY_MENU                   110 | ||||
| #define ICO_XCHAT                       111 | ||||
| #define ICO_BANNED                      112 | ||||
| #define ICO_CHANMSG                     113 | ||||
| #define ICO_DISCONNECTED                114 | ||||
| #define ICO_HIGHLIGHT                   115 | ||||
| #define ICO_KICKED                      116 | ||||
| #define ICO_PMSG                        117 | ||||
| #define ICO_SNOTICE                     118 | ||||
| #define IDB_SD_LOGO                     119 | ||||
| #define IDC_PREF_OK                     1014 | ||||
| #define IDC_PREF_CANCEL                 1015 | ||||
| #define IDC_PREF_APPLY                  1016 | ||||
| #define IDC_AWAY_MSG                    1017 | ||||
| #define IDC_ALERT_TIME                  1018 | ||||
| #define IDC_TAB_CONTROL                 1019 | ||||
| #define IDC_ALERT_HOTKEY                1020 | ||||
| #define IDC_ALERT_MSG                   1021 | ||||
| #define IDC_ALERT_HOTKEY_TEXT           1022 | ||||
| #define IDC_ALERT_TIME_TEXT             1023 | ||||
| #define ACT_EXIT                        40001 | ||||
| #define ACT_SETTINGS                    40002 | ||||
| #define ACT_AWAY                        40003 | ||||
| #define ACT_BACK                        40004 | ||||
| #define ACT_RESTORE                     40005 | ||||
| #define IDC_STATIC                      -1 | ||||
| 
 | ||||
| // Next default values for new objects
 | ||||
| // 
 | ||||
| #ifdef APSTUDIO_INVOKED | ||||
| #ifndef APSTUDIO_READONLY_SYMBOLS | ||||
| #define _APS_NEXT_RESOURCE_VALUE        120 | ||||
| #define _APS_NEXT_COMMAND_VALUE         40006 | ||||
| #define _APS_NEXT_CONTROL_VALUE         1024 | ||||
| #define _APS_NEXT_SYMED_VALUE           101 | ||||
| #endif | ||||
| #endif | ||||
|  | @ -1,309 +0,0 @@ | |||
| // Microsoft Visual C++ generated resource script. | ||||
| // | ||||
| #include "resource.h" | ||||
| 
 | ||||
| #define APSTUDIO_READONLY_SYMBOLS | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Generated from the TEXTINCLUDE 2 resource. | ||||
| // | ||||
| #define APSTUDIO_HIDDEN_SYMBOLS | ||||
| #include "windows.h" | ||||
| #undef APSTUDIO_HIDDEN_SYMBOLS | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| #undef APSTUDIO_READONLY_SYMBOLS | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // English (U.S.) resources | ||||
| 
 | ||||
| #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) | ||||
| #ifdef _WIN32 | ||||
| LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US | ||||
| #pragma code_page(1252) | ||||
| #endif //_WIN32 | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Dialog | ||||
| // | ||||
| 
 | ||||
| IDD_EVENTS DIALOGEX 8, 20, 216, 143 | ||||
| STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CHILD | ||||
| FONT 8, "Tahoma", 0, 0, 0x0 | ||||
| BEGIN | ||||
|     GROUPBOX        "HexChat Events",IDC_STATIC,5,5,205,77 | ||||
|     CONTROL         "Banned",4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,49,10 | ||||
|     CONTROL         "Kicked",5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,32,49,10 | ||||
|     CONTROL         "Killed",8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,49,10 | ||||
|     CONTROL         "Disconnect",10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,60,49,10 | ||||
|     CONTROL         "Private Message",7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,18,69,10 | ||||
|     CONTROL         "Channel Message",21,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,32,69,10 | ||||
|     CONTROL         "Highlight",1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,46,69,10 | ||||
|     CONTROL         "CTCP",6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,60,69,10 | ||||
|     CONTROL         "Topic Change",3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,145,18,55,10 | ||||
|     CONTROL         "Server Notice",9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,145,32,55,10 | ||||
|     CONTROL         "Invite",2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,145,46,55,10 | ||||
| END | ||||
| 
 | ||||
| IDD_SETTINGS DIALOGEX 8, 20, 216, 143 | ||||
| STYLE DS_SETFONT | WS_CHILD | ||||
| FONT 8, "Tahoma", 0, 0, 0x0 | ||||
| BEGIN | ||||
|     GROUPBOX        "Options",IDC_STATIC,5,5,205,135 | ||||
|     CONTROL         "Auto away on minimize",11,"Button",BS_AUTOCHECKBOX |  | ||||
|                     WS_TABSTOP,16,60,100,10 | ||||
|     CONTROL         "Minimize HexChat to the system tray",12,"Button", | ||||
|                     BS_AUTOCHECKBOX | WS_TABSTOP,16,18,133,10 | ||||
|     CONTROL         "Minimize to the tray instead of closing",17,"Button", | ||||
|                     BS_AUTOCHECKBOX | WS_TABSTOP,16,32,174,9 | ||||
|     EDITTEXT        IDC_AWAY_MSG,33,86,169,50,ES_AUTOHSCROLL | ||||
|     LTEXT           "Away Msg:",IDC_STATIC,27,72,35,8 | ||||
|     CONTROL         "Remove HexChat from the taskbar (only show in tray)", | ||||
|                     20,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,191,9 | ||||
| END | ||||
| 
 | ||||
| IDD_ALERT DIALOGEX 0, 0, 151, 28 | ||||
| STYLE DS_LOCALEDIT | DS_SETFONT | DS_NOIDLEMSG | DS_CENTER | WS_CAPTION |  | ||||
|     WS_SYSMENU | ||||
| EXSTYLE WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | WS_EX_TOOLWINDOW | ||||
| CAPTION "Event Name" | ||||
| FONT 8, "Tahoma", 0, 0, 0x1 | ||||
| BEGIN | ||||
|     LTEXT           "Event Text",IDC_ALERT_MSG,3,0,147,27 | ||||
| END | ||||
| 
 | ||||
| IDD_PREF DIALOGEX 0, 0, 233, 190 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION |  | ||||
|     WS_SYSMENU | ||||
| CAPTION "HexTray Preferences" | ||||
| FONT 8, "Tahoma", 0, 0, 0x0 | ||||
| BEGIN | ||||
|     DEFPUSHBUTTON   "Ok",IDC_PREF_OK,57,173,50,14 | ||||
|     PUSHBUTTON      "Cancel",IDC_PREF_CANCEL,115,173,50,14 | ||||
|     PUSHBUTTON      "Apply",IDC_PREF_APPLY,175,173,50,14 | ||||
|     CONTROL         "Tab1",IDC_TAB_CONTROL,"SysTabControl32",0x0,7,7,218,159 | ||||
| END | ||||
| 
 | ||||
| IDD_ABOUT DIALOGEX 8, 20, 216, 143 | ||||
| STYLE DS_SETFONT | WS_CHILD | ||||
| FONT 8, "Tahoma", 0, 0, 0x0 | ||||
| BEGIN | ||||
|     CONTROL         119,IDC_STATIC,"Static",SS_BITMAP | SS_SUNKEN |  | ||||
|                     WS_BORDER,3,6,88,81 | ||||
|     CTEXT           "HexTray\r\nBy: Michael Hotaling\r\n www.SinisterDevelopments.com", | ||||
|                     IDC_STATIC,95,33,118,30 | ||||
|     LTEXT           "Folken\r\nBasket\r\nDonatzsky\r\nDaemon404",IDC_STATIC, | ||||
|                     15,103,64,33 | ||||
|     GROUPBOX        "Special Thanks To:",IDC_STATIC,3,91,89,50 | ||||
|     GROUPBOX        "Version Information:",IDC_STATIC,101,92,109,49 | ||||
|     LTEXT           "1.3.0",IDC_STATIC,170,105,33,8,0,WS_EX_RIGHT | ||||
|     LTEXT           "Compiled In: ",IDC_STATIC,110,117,54,8 | ||||
|     LTEXT           "2012",IDC_STATIC,170,117,33,8,0,WS_EX_RIGHT | ||||
|     LTEXT           "Version Number:",IDC_STATIC,110,105,54,8 | ||||
| END | ||||
| 
 | ||||
| IDD_ALERTS DIALOGEX 8, 20, 216, 143 | ||||
| STYLE DS_SETFONT | WS_CHILD | ||||
| FONT 8, "Tahoma", 0, 0, 0x0 | ||||
| BEGIN | ||||
|     GROUPBOX        "Alerts",IDC_STATIC,5,5,205,117 | ||||
|     CONTROL         "Only show alerts while minimized",14,"Button", | ||||
|                     BS_AUTOCHECKBOX | WS_TABSTOP,27,46,117,10 | ||||
|     CONTROL         "Use tray alerts to notify me about events",13,"Button", | ||||
|                     BS_AUTOCHECKBOX | WS_TABSTOP,16,32,152,10 | ||||
|     CONTROL         "Use window instead of balloons",15,"Button", | ||||
|                     BS_AUTOCHECKBOX | WS_TABSTOP,27,60,141,11 | ||||
|     EDITTEXT        IDC_ALERT_TIME,137,101,61,12,ES_AUTOHSCROLL | ES_NUMBER, | ||||
|                     WS_EX_RIGHT | ||||
|     LTEXT           "Show alert for x seconds:",IDC_ALERT_TIME_TEXT,40,103, | ||||
|                     83,9 | ||||
|     CONTROL         "Alert Hotkey",IDC_ALERT_HOTKEY,"msctls_hotkey32", | ||||
|                     WS_BORDER | WS_TABSTOP,137,74,61,13 | ||||
|     LTEXT           "Close all alerts hotkey:",IDC_ALERT_HOTKEY_TEXT,39,75, | ||||
|                     76,10 | ||||
|     CONTROL         "Leave alerts open indefinitely",16,"Button", | ||||
|                     BS_AUTOCHECKBOX | WS_TABSTOP,27,88,115,11 | ||||
|     CONTROL         "Blink Icon to alert me about events",18,"Button", | ||||
|                     BS_AUTOCHECKBOX | WS_TABSTOP,16,18,127,10 | ||||
| END | ||||
| 
 | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // DESIGNINFO | ||||
| // | ||||
| 
 | ||||
| #ifdef APSTUDIO_INVOKED | ||||
| GUIDELINES DESIGNINFO  | ||||
| BEGIN | ||||
|     IDD_EVENTS, DIALOG | ||||
|     BEGIN | ||||
|         BOTTOMMARGIN, 56 | ||||
|     END | ||||
| 
 | ||||
|     IDD_SETTINGS, DIALOG | ||||
|     BEGIN | ||||
|         BOTTOMMARGIN, 66 | ||||
|     END | ||||
| 
 | ||||
|     IDD_ALERT, DIALOG | ||||
|     BEGIN | ||||
|         RIGHTMARGIN, 150 | ||||
|         BOTTOMMARGIN, 26 | ||||
|     END | ||||
| 
 | ||||
|     IDD_PREF, DIALOG | ||||
|     BEGIN | ||||
|         LEFTMARGIN, 7 | ||||
|         RIGHTMARGIN, 232 | ||||
|         TOPMARGIN, 7 | ||||
|         BOTTOMMARGIN, 176 | ||||
|     END | ||||
| 
 | ||||
|     IDD_ABOUT, DIALOG | ||||
|     BEGIN | ||||
|         LEFTMARGIN, 7 | ||||
|         RIGHTMARGIN, 209 | ||||
|         TOPMARGIN, 7 | ||||
|         BOTTOMMARGIN, 136 | ||||
|     END | ||||
| 
 | ||||
|     IDD_ALERTS, DIALOG | ||||
|     BEGIN | ||||
|         LEFTMARGIN, 7 | ||||
|         RIGHTMARGIN, 208 | ||||
|         TOPMARGIN, 7 | ||||
|         BOTTOMMARGIN, 136 | ||||
|     END | ||||
| END | ||||
| #endif    // APSTUDIO_INVOKED | ||||
| 
 | ||||
| 
 | ||||
| #ifdef APSTUDIO_INVOKED | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // TEXTINCLUDE | ||||
| // | ||||
| 
 | ||||
| 1 TEXTINCLUDE  | ||||
| BEGIN | ||||
|     "resource.h\0" | ||||
| END | ||||
| 
 | ||||
| 2 TEXTINCLUDE  | ||||
| BEGIN | ||||
|     "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" | ||||
|     "#include ""windows.h""\r\n" | ||||
|     "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" | ||||
|     "\0" | ||||
| END | ||||
| 
 | ||||
| 3 TEXTINCLUDE  | ||||
| BEGIN | ||||
|     "hextray.h\0" | ||||
| END | ||||
| 
 | ||||
| 4 TEXTINCLUDE  | ||||
| BEGIN | ||||
|     "\r\n" | ||||
|     "\0" | ||||
| END | ||||
| 
 | ||||
| #endif    // APSTUDIO_INVOKED | ||||
| 
 | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Version | ||||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 1,3,0,0 | ||||
|  PRODUCTVERSION 1,3,0,0 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
| #else | ||||
|  FILEFLAGS 0x0L | ||||
| #endif | ||||
|  FILEOS 0x40004L | ||||
|  FILETYPE 0x2L | ||||
|  FILESUBTYPE 0x0L | ||||
| BEGIN | ||||
|     BLOCK "StringFileInfo" | ||||
|     BEGIN | ||||
|         BLOCK "040904b0" | ||||
|         BEGIN | ||||
|             VALUE "CompanyName", "SinisterDevelopments" | ||||
|             VALUE "FileDescription", "HexTray" | ||||
|             VALUE "FileVersion", "1,3,0,0" | ||||
|             VALUE "InternalName", "HexTray" | ||||
|             VALUE "LegalCopyright", "Copyright © 2005" | ||||
|             VALUE "OriginalFilename", "hchextray.dll" | ||||
|             VALUE "ProductName", "HexTray - HexChat Win32 System Tray Plugin" | ||||
|             VALUE "ProductVersion", "1,3,0,0" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|     BEGIN | ||||
|         VALUE "Translation", 0x409, 1200 | ||||
|     END | ||||
| END | ||||
| 
 | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Menu | ||||
| // | ||||
| 
 | ||||
| IDR_TRAY_MENU MENU  | ||||
| BEGIN | ||||
|     POPUP "TRAY" | ||||
|     BEGIN | ||||
|         MENUITEM "Restore",                     ACT_RESTORE | ||||
|         MENUITEM SEPARATOR | ||||
|         MENUITEM "Away",                        65535 | ||||
|         MENUITEM "Settings",                    ACT_SETTINGS | ||||
|         MENUITEM SEPARATOR | ||||
|         MENUITEM "Exit",                        ACT_EXIT | ||||
|     END | ||||
| END | ||||
| 
 | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Icon | ||||
| // | ||||
| 
 | ||||
| // Icon with lowest ID value placed first to ensure application icon | ||||
| // remains consistent on all systems. | ||||
| ICO_XCHAT               ICON                    "icons\\hexchat.ico" | ||||
| ICO_BANNED              ICON                    "icons\\ban.ico" | ||||
| ICO_CHANMSG             ICON                    "icons\\message.ico" | ||||
| ICO_HIGHLIGHT           ICON                    "icons\\highlight.ico" | ||||
| ICO_KICKED              ICON                    "icons\\kick.ico" | ||||
| ICO_PMSG                ICON                    "icons\\message.ico" | ||||
| ICO_SNOTICE             ICON                    "icons\\notice.ico" | ||||
| ICO_DISCONNECTED        ICON                    "icons\\disconnect.ico" | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Bitmap | ||||
| // | ||||
| 
 | ||||
| IDB_SD_LOGO             BITMAP                  "bitmaps\\sd.bmp" | ||||
| #endif    // English (U.S.) resources | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef APSTUDIO_INVOKED | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| // | ||||
| // Generated from the TEXTINCLUDE 3 resource. | ||||
| // | ||||
| hextray.h | ||||
| ///////////////////////////////////////////////////////////////////////////// | ||||
| #endif    // not APSTUDIO_INVOKED | ||||
| 
 | ||||
|  | @ -1,109 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #include <windows.h> | ||||
| #include <winuser.h> | ||||
| #include <stdio.h> | ||||
| #include "utility.h" | ||||
| #include "resource.h" | ||||
| #include "sdAlerts.h" | ||||
| 
 | ||||
| int g_iAlerts = 0; | ||||
| 
 | ||||
| void sdSystemAlert(HINSTANCE hModule, UINT uiDialog, char *szMsg, char *szName, unsigned int iTime) | ||||
| { | ||||
| 	TCHAR wszMsg[256]; | ||||
| 	TCHAR wszName[64]; | ||||
| 
 | ||||
| 	HWND hDialog; | ||||
| 	RECT rcWorkArea, rcDlg; | ||||
| 	int ixPos, iyPos; | ||||
| 	int iNumPerCol; | ||||
| 	 | ||||
| 	hDialog = CreateDialog(hModule, MAKEINTRESOURCE(uiDialog), NULL, (DLGPROC)sdAlertProc); | ||||
| 
 | ||||
| 	SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0); | ||||
| 	GetWindowRect(hDialog, &rcDlg); | ||||
| 
 | ||||
| 	iNumPerCol = ((rcWorkArea.bottom - rcWorkArea.top) / (rcDlg.bottom - rcDlg.top)); | ||||
| 	ixPos = rcWorkArea.right - (rcDlg.right - rcDlg.left) + 1; | ||||
| 	iyPos = rcWorkArea.bottom - (rcDlg.bottom - rcDlg.top); | ||||
| 
 | ||||
| 	if((g_iAlerts >= iNumPerCol) && (iNumPerCol > 0)) | ||||
| 	{ | ||||
| 		ixPos -= ((g_iAlerts / iNumPerCol) * (rcDlg.right - rcDlg.left)); | ||||
| 		iyPos -= ((g_iAlerts - (iNumPerCol * (g_iAlerts / iNumPerCol))) * (rcDlg.bottom - rcDlg.top)); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		iyPos -= (g_iAlerts * (rcDlg.bottom - rcDlg.top)); | ||||
| 	} | ||||
| 	SetWindowPos(hDialog, HWND_TOPMOST, ixPos, iyPos, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE); | ||||
| 	 | ||||
| 	ConvertString(szName, wszName, 64); | ||||
| 	ConvertString(szMsg, wszMsg, 256); | ||||
| 
 | ||||
| 	SetWindowText(hDialog, wszName); | ||||
| 	SetDlgItemText(hDialog, IDC_ALERT_MSG, wszMsg); | ||||
| 	ShowWindow(hDialog, SW_SHOWNA); | ||||
| 
 | ||||
| 	if(iTime > 0) | ||||
| 	{ | ||||
| 		SetTimer(hDialog, 1, iTime, NULL); | ||||
| 	} | ||||
| 
 | ||||
| 	g_iAlerts++; | ||||
| } | ||||
| 
 | ||||
| void sdCloseAlerts() | ||||
| { | ||||
| 	PostMessage(HWND_BROADCAST, RegisterWindowMessage(TEXT("xTray:CloseAllAlertWindows")), 0, 0); | ||||
| } | ||||
| 
 | ||||
| LRESULT CALLBACK sdAlertProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) | ||||
| { | ||||
| 	switch(msg) | ||||
| 	{ | ||||
| 	case WM_CLOSE: | ||||
| 		if(g_iAlerts > 0){ g_iAlerts--; } | ||||
| 		DestroyWindow(hwnd); | ||||
| 		return TRUE; | ||||
| 		break; | ||||
| 	case WM_TIMER: | ||||
| 		if(g_iAlerts > 0){ g_iAlerts--; } | ||||
| 		AnimateWindow(hwnd, 600, AW_SLIDE | AW_HIDE | AW_VER_POSITIVE); | ||||
| 		DestroyWindow(hwnd); | ||||
| 		return TRUE; | ||||
| 		break; | ||||
| 	default: | ||||
| 		if(msg == RegisterWindowMessage(TEXT("xTray:CloseAllAlertWindows"))) | ||||
| 		{ | ||||
| 			if(g_iAlerts > 0){ g_iAlerts--; } | ||||
| 			DestroyWindow(hwnd); | ||||
| 			return TRUE; | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
| int sdAlertNum() | ||||
| { | ||||
| 	return g_iAlerts; | ||||
| } | ||||
|  | @ -1,26 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _H_SDALERTS_H | ||||
| #define _H_SDALERTS_H | ||||
| 
 | ||||
| void				sdSystemAlert	(HINSTANCE, UINT, char *, char *, UINT); | ||||
| LRESULT CALLBACK	sdAlertProc		(HWND, UINT, WPARAM, LPARAM); | ||||
| int					sdAlertNum		(); | ||||
| void				sdCloseAlerts	(); | ||||
| #endif | ||||
|  | @ -1,207 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| #define _WIN32_IE 0x601 | ||||
| #include <windows.h> | ||||
| #include <stdio.h> | ||||
| #include <tchar.h> | ||||
| #include "sdTray.h" | ||||
| #include "utility.h" | ||||
| 
 | ||||
| HANDLE hThread; | ||||
| iBlink *tData	= NULL; | ||||
| 
 | ||||
| int AddIcon(HWND hwnd, UINT id, HICON hicon, char *szTip, unsigned short flags, unsigned int cbMsg) | ||||
| { | ||||
| 	NOTIFYICONDATA nidata; | ||||
| 
 | ||||
| 	nidata.cbSize			= NOTIFYICONDATA_V2_SIZE; | ||||
| 	nidata.hIcon			= hicon; | ||||
| 	nidata.hWnd				= hwnd; | ||||
| 	nidata.uCallbackMessage = cbMsg; | ||||
| 	nidata.uFlags			= flags; | ||||
| 	nidata.uID				= id; | ||||
| 
 | ||||
| 	if(szTip != NULL) | ||||
| 	{ | ||||
| 		TCHAR *szTemp = new TCHAR[64]; | ||||
| 
 | ||||
| 		ConvertString(szTip, szTemp, 64); | ||||
| 		_tcsncpy(nidata.szTip, szTemp, 64); | ||||
| 
 | ||||
| 		delete[] szTemp; | ||||
| 	} | ||||
| 
 | ||||
| 	return Shell_NotifyIcon(NIM_ADD, &nidata); | ||||
| } | ||||
| 
 | ||||
| int RemoveIcon(HWND hwnd, UINT id) | ||||
| { | ||||
| 	if(hThread != NULL) | ||||
| 	{ | ||||
| 		TerminateThread(hThread, 0); | ||||
| 		hThread = NULL; | ||||
| 
 | ||||
| 		delete tData; | ||||
| 	} | ||||
| 
 | ||||
| 	NOTIFYICONDATA nidata; | ||||
| 
 | ||||
| 	nidata.cbSize = NOTIFYICONDATA_V2_SIZE; | ||||
| 	nidata.hWnd   = hwnd; | ||||
| 	nidata.uID    = id; | ||||
| 
 | ||||
| 	return Shell_NotifyIcon(NIM_DELETE, &nidata); | ||||
| } | ||||
| 
 | ||||
| int SetIcon(HWND hwnd, UINT id, HICON hicon) | ||||
| { | ||||
| 	NOTIFYICONDATA nidata; | ||||
| 
 | ||||
| 	nidata.cbSize = NOTIFYICONDATA_V2_SIZE; | ||||
| 	nidata.hWnd   = hwnd; | ||||
| 	nidata.uID    = id; | ||||
| 	nidata.hIcon  = hicon; | ||||
| 	nidata.uFlags = NIF_ICON; | ||||
| 
 | ||||
| 	return Shell_NotifyIcon(NIM_MODIFY, &nidata); | ||||
| } | ||||
| 
 | ||||
| int SetTooltip(HWND hwnd, UINT id, char *szTip) | ||||
| { | ||||
| 	NOTIFYICONDATA nidata; | ||||
| 
 | ||||
| 	nidata.cbSize = NOTIFYICONDATA_V2_SIZE; | ||||
| 	nidata.hWnd   = hwnd; | ||||
| 	nidata.uID    = id; | ||||
| 	nidata.uFlags = NIF_TIP; | ||||
| 
 | ||||
| 	if(szTip != NULL) | ||||
| 	{ | ||||
| 		TCHAR *szTemp = new TCHAR[64]; | ||||
| 		ConvertString(szTip, szTemp, 64); | ||||
| 		_tcsncpy(nidata.szTip, szTemp, 64); | ||||
| 		delete[] szTemp; | ||||
| 	} | ||||
| 
 | ||||
| 	return Shell_NotifyIcon(NIM_MODIFY, &nidata); | ||||
| } | ||||
| 
 | ||||
| int ShowBalloon(HWND hwnd, UINT id, char *szInfo, char *szTitle, UINT time, UINT infoFlags) | ||||
| { | ||||
| 	NOTIFYICONDATA nidata; | ||||
| 
 | ||||
| 	nidata.cbSize	= NOTIFYICONDATA_V2_SIZE; | ||||
| 	nidata.hWnd		= hwnd; | ||||
| 	nidata.uID		= id; | ||||
| 	nidata.uFlags	= NIF_INFO; | ||||
| 	nidata.dwInfoFlags = infoFlags; | ||||
| 
 | ||||
| 	if(time > 0) | ||||
| 		nidata.uTimeout = time; | ||||
| 	else | ||||
| 		nidata.uTimeout = 500000; | ||||
| 
 | ||||
| 	if(szInfo != NULL) | ||||
| 	{ | ||||
| 		TCHAR *szTemp = new TCHAR[255]; | ||||
| 
 | ||||
| 		ConvertString(szInfo, szTemp, 251); | ||||
| 		szTemp[250] = 0; | ||||
| 		 | ||||
| 		if(strlen(szInfo) > 255) | ||||
| 		{ | ||||
| 			_sntprintf(szTemp, 255, _T("%s..."), szTemp); | ||||
| 		} | ||||
| 		_tcsncpy(nidata.szInfo, szTemp, 255); | ||||
| 
 | ||||
| 		delete[] szTemp; | ||||
| 	} | ||||
| 	if(szTitle != NULL) | ||||
| 	{ | ||||
| 		TCHAR *wszTitle = new TCHAR[64]; | ||||
| 		ConvertString(szTitle, wszTitle, 64); | ||||
| 		_tcsncpy(nidata.szInfoTitle, wszTitle, 64); | ||||
| 		delete[] wszTitle; | ||||
| 	} | ||||
| 
 | ||||
| 	return Shell_NotifyIcon(NIM_MODIFY, &nidata); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| DWORD WINAPI BlinkThread(LPVOID lpParam) | ||||
| { | ||||
| 	NOTIFYICONDATA nidata; | ||||
| 
 | ||||
| 	nidata.cbSize = NOTIFYICONDATA_V2_SIZE; | ||||
| 	nidata.hWnd   = tData->hwnd; | ||||
| 	nidata.uID    = tData->id; | ||||
| 	nidata.uFlags = NIF_ICON; | ||||
| 
 | ||||
| 	for(UINT i = 0; i < tData->num; i++) | ||||
| 	{ | ||||
| 		nidata.hIcon = tData->hBlink; | ||||
| 		Shell_NotifyIcon(NIM_MODIFY, &nidata); | ||||
| 
 | ||||
| 		Sleep(tData->time); | ||||
| 
 | ||||
| 		nidata.hIcon = tData->hBase; | ||||
| 		Shell_NotifyIcon(NIM_MODIFY, &nidata); | ||||
| 
 | ||||
| 		Sleep(tData->time); | ||||
| 	} | ||||
| 
 | ||||
| 	delete tData; | ||||
| 	hThread = NULL; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int BlinkIcon(HWND hwnd, UINT id, HICON hBase, HICON hBlink, UINT time, UINT num) | ||||
| { | ||||
| 	if(hThread != NULL) | ||||
| 	{ | ||||
| 		StopBlink(hwnd, id, hBase); | ||||
| 	} | ||||
| 
 | ||||
| 	DWORD dwThreadID; | ||||
| 	tData = new iBlink; | ||||
| 
 | ||||
| 	tData->hwnd		= hwnd; | ||||
| 	tData->id		= id; | ||||
| 	tData->hBase	= hBase; | ||||
| 	tData->hBlink	= hBlink; | ||||
| 	tData->time		= time; | ||||
| 	tData->num		= num; | ||||
| 
 | ||||
| 	hThread = CreateThread(NULL, 0, BlinkThread, tData, 0, &dwThreadID); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| void StopBlink(HWND hwnd, UINT id, HICON hBase) | ||||
| { | ||||
| 	if(hThread != NULL) | ||||
| 	{ | ||||
| 		TerminateThread(hThread, 0); | ||||
| 		hThread = NULL; | ||||
| 
 | ||||
| 		delete tData; | ||||
| 	} | ||||
| 
 | ||||
| 	SetIcon(hwnd, id, hBase); | ||||
| } | ||||
|  | @ -1,39 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _H_SDTRAY_H | ||||
| #define _H_SDTRAY_H | ||||
| 
 | ||||
| int				AddIcon		(HWND, UINT, HICON, char *, unsigned short, UINT); | ||||
| int				ShowBalloon	(HWND, UINT, char *, char *, UINT, UINT); | ||||
| int				BlinkIcon	(HWND, UINT, HICON, HICON, UINT, UINT); | ||||
| int				SetTooltip	(HWND, UINT, char *); | ||||
| int				SetIcon		(HWND, UINT, HICON); | ||||
| void			StopBlink	(HWND, UINT, HICON); | ||||
| int				RemoveIcon	(HWND, UINT); | ||||
| 
 | ||||
| typedef struct IBLINK | ||||
| { | ||||
| 	HICON hBase; | ||||
| 	HICON hBlink; | ||||
| 	HWND hwnd; | ||||
| 	UINT id; | ||||
| 	UINT time; | ||||
| 	UINT num; | ||||
| }iBlink; | ||||
| #endif | ||||
|  | @ -1,410 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #include <windows.h> | ||||
| #include <stdio.h> | ||||
| #include <commctrl.h> | ||||
| #include <tchar.h> | ||||
| 
 | ||||
| #include "hexchat-plugin.h" | ||||
| #include "utility.h" | ||||
| #include "hextray.h" | ||||
| #include "callbacks.h" | ||||
| #include "resource.h" | ||||
| 
 | ||||
| struct HOTKEY g_hHotKey; | ||||
| 
 | ||||
| /* we need to convert ALT and SHIFT modifiers
 | ||||
| // from <winuser.h>
 | ||||
| #define MOD_ALT         0x0001 | ||||
| #define MOD_CONTROL     0x0002 | ||||
| #define MOD_SHIFT       0x0004 | ||||
| // from <commctrl.h>
 | ||||
| #define HOTKEYF_SHIFT           0x01 | ||||
| #define HOTKEYF_CONTROL         0x02 | ||||
| #define HOTKEYF_ALT             0x04 | ||||
| */ | ||||
| 
 | ||||
| WORD HotkeyfToMod(WORD modifiers) | ||||
| { | ||||
| 	WORD newmods = 0; | ||||
| 
 | ||||
| 	if (modifiers & HOTKEYF_SHIFT) | ||||
| 		newmods |= MOD_SHIFT; | ||||
| 
 | ||||
| 	if (modifiers & HOTKEYF_CONTROL) | ||||
| 		newmods |= MOD_CONTROL; | ||||
| 
 | ||||
| 	if (modifiers & HOTKEYF_ALT) | ||||
| 		newmods |= MOD_ALT; | ||||
| 
 | ||||
| 	return newmods; | ||||
| } | ||||
| 
 | ||||
| WORD ModToHotkeyf(WORD modifiers) | ||||
| { | ||||
| 	WORD newmods = 0; | ||||
| 
 | ||||
| 	if (modifiers & MOD_SHIFT) | ||||
| 		newmods |= HOTKEYF_SHIFT; | ||||
| 
 | ||||
| 	if (modifiers & MOD_CONTROL) | ||||
| 		newmods |= HOTKEYF_CONTROL; | ||||
| 
 | ||||
| 	if (modifiers & MOD_ALT) | ||||
| 		newmods |= HOTKEYF_ALT; | ||||
| 
 | ||||
| 	return newmods; | ||||
| } | ||||
| 
 | ||||
| void SavePrefs(int iDlg) | ||||
| { | ||||
| 	hexchat_pluginpref_set_int (ph, "settings", g_dwPrefs); | ||||
| 	hexchat_pluginpref_set_int (ph, "aot", g_iTime); | ||||
| 	hexchat_pluginpref_set_int (ph, "key", g_hHotKey.key); | ||||
| 	hexchat_pluginpref_set_int (ph, "mod", g_hHotKey.mod); | ||||
| 	hexchat_pluginpref_set_str (ph, "away", (const char*) g_szAway); | ||||
| } | ||||
| 
 | ||||
| void LoadPrefs() | ||||
| { | ||||
| 	/**************************************************************************************************/ | ||||
| 	/*********************** Our Settings Section *****************************************************/ | ||||
| 	/**************************************************************************************************/ | ||||
| 
 | ||||
| 	/**************************************************************************************************/ | ||||
| 	/*************************** Get the value for each of our preferances ****************************/ | ||||
| 	/**************************************************************************************************/ | ||||
| 
 | ||||
| 	g_dwPrefs = hexchat_pluginpref_get_int (ph, "settings"); | ||||
| 	g_iTime = hexchat_pluginpref_get_int (ph, "aot"); | ||||
| 	g_hHotKey.key = hexchat_pluginpref_get_int (ph, "key"); | ||||
| 	g_hHotKey.mod = hexchat_pluginpref_get_int (ph, "mod"); | ||||
| 	hexchat_pluginpref_get_str (ph, "away", (char *) g_szAway); | ||||
| 
 | ||||
| 	/**************************************************************************************************/ | ||||
| 	/******************************** Register our hotkey with windows ********************************/ | ||||
| 	/**************************************************************************************************/ | ||||
| 	if(g_dwPrefs & (1<<PREF_UWIOB)) | ||||
| 	{ | ||||
| 		RegisterHotKey(g_hHotkeyWnd, 1, g_hHotKey.mod, g_hHotKey.key); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void CheckPrefs(HWND hwnd, int iDlg) | ||||
| { | ||||
| 	/**************************************************************************************************/ | ||||
| 	/**************** save the preferances based on the checkmarks/options ****************************/ | ||||
| 	/**************************************************************************************************/ | ||||
| 	switch(iDlg) | ||||
| 	{ | ||||
| 	case IDD_EVENTS: | ||||
| 		{ | ||||
| 			SetOption(hwnd, CHAN_HILIGHT,		CHAN_HILIGHT); | ||||
| 			SetOption(hwnd, CHAN_INVITE,		CHAN_INVITE); | ||||
| 			SetOption(hwnd, CHAN_TOPIC_CHANGE,	CHAN_TOPIC_CHANGE); | ||||
| 			SetOption(hwnd, CHAN_BANNED,		CHAN_BANNED); | ||||
| 			SetOption(hwnd, CHAN_KICKED,		CHAN_KICKED); | ||||
| 			SetOption(hwnd, CTCP_GENERIC,		CTCP_GENERIC); | ||||
| 			SetOption(hwnd, PMSG_RECEIVE,		PMSG_RECEIVE); | ||||
| 			SetOption(hwnd, SERV_KILLED,		SERV_KILLED); | ||||
| 			SetOption(hwnd, SERV_NOTICE,		SERV_NOTICE); | ||||
| 			SetOption(hwnd, SERV_DISCONNECT,	SERV_DISCONNECT); | ||||
| 			SetOption(hwnd, CHAN_MESSAGE,		CHAN_MESSAGE); | ||||
| 		} | ||||
| 		break; | ||||
| 	case IDD_ALERTS: | ||||
| 		{ | ||||
| 			SetOption(hwnd, PREF_AMAE,	PREF_AMAE); | ||||
| 			SetOption(hwnd, PREF_OSBWM,	PREF_OSBWM); | ||||
| 			SetOption(hwnd, PREF_UWIOB,	PREF_UWIOB); | ||||
| 			SetOption(hwnd, PREF_KAOI,	PREF_KAOI); | ||||
| 			SetOption(hwnd, PREF_BLINK,	PREF_BLINK); | ||||
| 
 | ||||
| 			/**************************************************************************/ | ||||
| 			/**************************************************************************/ | ||||
| 			/**************************************************************************/ | ||||
| 			TCHAR tTime[512]; | ||||
| 
 | ||||
| 			GetWindowText(GetDlgItem(hwnd, IDC_ALERT_TIME), tTime, 511); | ||||
| 			 | ||||
| 			g_iTime = _tstoi(tTime); | ||||
| 			 | ||||
| 			/**************************************************************************/ | ||||
| 			/**************** Get our Hotkey and save it                     **********/ | ||||
| 			/**************** then remove the old hotkey and add the new one **********/ | ||||
| 			/**************************************************************************/ | ||||
| 			DWORD hHotkey; | ||||
| 			hHotkey = SendDlgItemMessage(hwnd, IDC_ALERT_HOTKEY, HKM_GETHOTKEY, 0, 0); | ||||
| 			 | ||||
| 			g_hHotKey.key = LOBYTE(hHotkey); | ||||
| 			g_hHotKey.mod = HotkeyfToMod(HIBYTE(hHotkey)); | ||||
| 			 | ||||
| 			if(IsDlgButtonChecked(hwnd, PREF_UWIOB) == BST_CHECKED) | ||||
| 			{ | ||||
| 				UnregisterHotKey(g_hHotkeyWnd, 1); | ||||
| 				RegisterHotKey(g_hHotkeyWnd, 1, g_hHotKey.mod, g_hHotKey.key); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				UnregisterHotKey(g_hHotkeyWnd, 1); | ||||
| 			} | ||||
| 
 | ||||
| 			/*************************************************************************/ | ||||
| 			/*********** Get and save the away msg and alert time ********************/ | ||||
| 			/*************************************************************************/ | ||||
| 		} | ||||
| 		break; | ||||
| 	case IDD_SETTINGS: | ||||
| 		{ | ||||
| 			SetOption(hwnd, PREF_AOM, PREF_AOM); | ||||
| 			SetOption(hwnd, PREF_TOT, PREF_TOT); | ||||
| 			SetOption(hwnd, PREF_MIOC, PREF_MIOC); | ||||
| 			SetOption(hwnd, PREF_DNSIT, PREF_DNSIT); | ||||
| 
 | ||||
| 			GetDlgItemText(hwnd, IDC_AWAY_MSG, g_szAway, 511); | ||||
| 
 | ||||
| 			if(g_dwPrefs & (1<<PREF_DNSIT)) | ||||
| 			{ | ||||
| 				DWORD dwStyle; | ||||
| 				dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE); | ||||
| 				dwStyle |= (1<<WS_CHILD); | ||||
| 				SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle); | ||||
| 				SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, (LONG_PTR)g_hHotkeyWnd); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				DWORD dwStyle; | ||||
| 				dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE); | ||||
| 				dwStyle &= ~(1<<WS_CHILD); | ||||
| 				SetWindowLongPtr(g_hXchatWnd, GWL_STYLE, (LONG_PTR)dwStyle); | ||||
| 				SetWindowLongPtr(g_hXchatWnd, GWL_HWNDPARENT, NULL); | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 	}  | ||||
| } | ||||
| 
 | ||||
| void SetDialog(HWND hwnd, int iDlg) | ||||
| { | ||||
| 	switch(iDlg) | ||||
| 	{ | ||||
| 	case IDD_EVENTS: | ||||
| 		{ | ||||
| 			SetCheck(hwnd, CHAN_HILIGHT,		CHAN_HILIGHT); | ||||
| 			SetCheck(hwnd, CHAN_INVITE,			CHAN_INVITE); | ||||
| 			SetCheck(hwnd, CHAN_TOPIC_CHANGE,	CHAN_TOPIC_CHANGE); | ||||
| 			SetCheck(hwnd, CHAN_BANNED,			CHAN_BANNED); | ||||
| 			SetCheck(hwnd, CHAN_KICKED,			CHAN_KICKED); | ||||
| 			SetCheck(hwnd, CTCP_GENERIC,		CTCP_GENERIC); | ||||
| 			SetCheck(hwnd, PMSG_RECEIVE,		PMSG_RECEIVE); | ||||
| 			SetCheck(hwnd, SERV_KILLED,			SERV_KILLED); | ||||
| 			SetCheck(hwnd, SERV_NOTICE,			SERV_NOTICE); | ||||
| 			SetCheck(hwnd, SERV_DISCONNECT,		SERV_DISCONNECT); | ||||
| 			SetCheck(hwnd, CHAN_MESSAGE,		CHAN_MESSAGE); | ||||
| 		} | ||||
| 		break; | ||||
| 	case IDD_SETTINGS: | ||||
| 		{ | ||||
| 			SetCheck(hwnd, PREF_TOT,	PREF_TOT); | ||||
| 			SetCheck(hwnd, PREF_MIOC,	PREF_MIOC); | ||||
| 			SetCheck(hwnd, PREF_AOM,	PREF_AOM); | ||||
| 			SetCheck(hwnd, PREF_DNSIT,	PREF_DNSIT); | ||||
| 
 | ||||
| 			SetDlgItemText(hwnd, IDC_AWAY_MSG, g_szAway); | ||||
| 		} | ||||
| 		break; | ||||
| 	case IDD_ALERTS: | ||||
| 		{ | ||||
| 			 | ||||
| 			SetCheck(hwnd, PREF_BLINK,	PREF_BLINK); | ||||
| 			SetCheck(hwnd, PREF_OSBWM,	PREF_OSBWM); | ||||
| 			SetCheck(hwnd, PREF_UWIOB,	PREF_UWIOB); | ||||
| 			SetCheck(hwnd, PREF_KAOI,	PREF_KAOI); | ||||
| 
 | ||||
| 			/**********************************************************/ | ||||
| 			/**********************************************************/ | ||||
| 			/**********************************************************/ | ||||
| 			if(SetCheck(hwnd, PREF_AMAE, PREF_AMAE) == false) | ||||
| 			{ | ||||
| 				SetToggle(hwnd, PREF_OSBWM,				PREF_AMAE, TRUE); | ||||
| 				SetToggle(hwnd, PREF_UWIOB,				PREF_AMAE, TRUE); | ||||
| 				SetToggle(hwnd, PREF_KAOI,				PREF_AMAE, TRUE); | ||||
| 				SetToggle(hwnd, IDC_ALERT_TIME,			PREF_AMAE, TRUE); | ||||
| 				SetToggle(hwnd, IDC_ALERT_TIME_TEXT,	PREF_AMAE, TRUE); | ||||
| 				SetToggle(hwnd, IDC_ALERT_HOTKEY,		PREF_AMAE, TRUE); | ||||
| 				SetToggle(hwnd, IDC_ALERT_HOTKEY_TEXT,	PREF_AMAE, TRUE); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 
 | ||||
| 				SetToggle(hwnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE); | ||||
| 				SetToggle(hwnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE); | ||||
| 				SetToggle(hwnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE); | ||||
| 				SetToggle(hwnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE); | ||||
| 			} | ||||
| 
 | ||||
| 			/**********************************************************/ | ||||
| 			/**********************************************************/ | ||||
| 			/**********************************************************/ | ||||
| 			TCHAR tTime[255]; | ||||
| 			SendDlgItemMessage(hwnd, IDC_ALERT_TIME,	WM_SETTEXT, 0, (LPARAM)_itot(g_iTime, tTime, 10)); | ||||
| 			SendDlgItemMessage(hwnd, IDC_ALERT_HOTKEY,	HKM_SETHOTKEY, MAKEWORD(g_hHotKey.key, ModToHotkeyf(g_hHotKey.mod)), 0); | ||||
| 		} | ||||
| 		break; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| int SetCheck(HWND hDialog, unsigned int uiCheckBox, unsigned int uiPref) | ||||
| { | ||||
| 	if((g_dwPrefs & (1<<uiPref))) | ||||
| 	{ | ||||
| 		CheckDlgButton(hDialog, uiCheckBox, BST_CHECKED); | ||||
| 		return 1; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		CheckDlgButton(hDialog, uiCheckBox, BST_UNCHECKED); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int SetToggle(HWND hDialog, unsigned int uiCheckBox, unsigned int uiTestbox, bool offeqoff) | ||||
| { | ||||
| 	/**************************************************************************************************/ | ||||
| 	/*********************** if(true) then if option is off turn toggle off ***************************/ | ||||
| 	/*********************** if(false) then if option is off turn toggle on ***************************/ | ||||
| 	/**************************************************************************************************/ | ||||
| 	if(offeqoff) | ||||
| 	{ | ||||
| 		if(IsDlgButtonChecked(hDialog, uiTestbox) == BST_CHECKED) | ||||
| 		{ | ||||
| 			EnableWindow(GetDlgItem(hDialog, uiCheckBox), TRUE); | ||||
| 			return 1; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			EnableWindow(GetDlgItem(hDialog, uiCheckBox), FALSE); | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if(IsDlgButtonChecked(hDialog, uiTestbox) == BST_CHECKED) | ||||
| 		{ | ||||
| 			EnableWindow(GetDlgItem(hDialog, uiCheckBox), FALSE); | ||||
| 			return 1; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			EnableWindow(GetDlgItem(hDialog, uiCheckBox), TRUE); | ||||
| 			return 0; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int SetOption(HWND hDialog, unsigned int uiCheckBox, unsigned int uiPref) | ||||
| { | ||||
| 	if(IsDlgButtonChecked(hDialog, uiCheckBox) == BST_CHECKED) | ||||
| 	{ | ||||
| 		g_dwPrefs |= (1<<uiPref); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		g_dwPrefs &= ~(1<<uiPref); | ||||
| 	} | ||||
| 
 | ||||
| 	return (g_dwPrefs & (1<<uiPref)); | ||||
| } | ||||
| 
 | ||||
| // For cleanup ( Closing windows and the such )
 | ||||
| void HoldClose() | ||||
| { | ||||
| 	HANDLE hcThread; | ||||
| 	DWORD dwThreadID; | ||||
| 	hcThread = CreateThread(NULL, 0, HoldCloseThread, 0, 0, &dwThreadID); | ||||
| } | ||||
| 
 | ||||
| DWORD WINAPI HoldCloseThread(LPVOID lpParam) | ||||
| { | ||||
| 	Sleep(1000); | ||||
| 	PostMessage(g_hXchatWnd, WM_CLOSE, 0, 0); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| bool FileExists(TCHAR *file) | ||||
| { | ||||
| 	HANDLE hTemp = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); | ||||
| 	int nRet = GetLastError(); | ||||
| 	CloseHandle(hTemp); | ||||
| 
 | ||||
| 	if(nRet == 0) | ||||
| 	{ | ||||
| 		return true; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| void ConvertString(const char *in, wchar_t *out, int size) | ||||
| { | ||||
| 	MultiByteToWideChar(CP_UTF8, 0, in,  -1, out, size); | ||||
| } | ||||
| 
 | ||||
| void ConvertString(const wchar_t *in, char *out, int size) | ||||
| { | ||||
| 	WideCharToMultiByte(CP_UTF8, 0, in, (size - 1), out, size, NULL, NULL); | ||||
| } | ||||
| 
 | ||||
| void ConvertString(const char *in, char *out, int size) | ||||
| { | ||||
| 	strncpy(out, in, size); | ||||
| } | ||||
| 
 | ||||
| void ErrorDebug(LPTSTR lpszFunction) | ||||
| {  | ||||
|     TCHAR szBuf[80];  | ||||
|     LPVOID lpMsgBuf; | ||||
|     DWORD dw = GetLastError();  | ||||
| 
 | ||||
|     FormatMessage( | ||||
|         FORMAT_MESSAGE_ALLOCATE_BUFFER |  | ||||
|         FORMAT_MESSAGE_FROM_SYSTEM, | ||||
|         NULL, | ||||
|         dw, | ||||
|         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), | ||||
|         (LPTSTR) &lpMsgBuf, | ||||
|         0, NULL ); | ||||
| 
 | ||||
|     _stprintf(szBuf,  | ||||
|         _T("%s failed with error %d: %s"),  | ||||
|         lpszFunction, dw, lpMsgBuf);  | ||||
|   | ||||
|     MessageBox(NULL, szBuf, _T("Error"), MB_OK);  | ||||
| 
 | ||||
|     LocalFree(lpMsgBuf); | ||||
| } | ||||
| 
 | ||||
|  | @ -1,46 +0,0 @@ | |||
| /* X-Tray
 | ||||
|  * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com> | ||||
|  * | ||||
|  * X-Tray is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation; either version 2 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  *  | ||||
|  * X-Tray is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  *  | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with X-Tray; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _H_UTILITY_H | ||||
| #define _H_UTILITY_H | ||||
| 
 | ||||
| WORD					HotkeyfToMod	(WORD); | ||||
| WORD					ModToHotkeyf	(WORD); | ||||
| 
 | ||||
| int						SetOption		(HWND, unsigned int, unsigned int); | ||||
| int						SetCheck		(HWND, unsigned int, unsigned int); | ||||
| int						SetToggle		(HWND, unsigned int, unsigned int, bool); | ||||
| void					ErrorDebug		(LPTSTR lpszFunction); | ||||
| void					SetDialog		(HWND, int); | ||||
| void					CheckPrefs		(HWND, int); | ||||
| bool					FileExists		(TCHAR *); | ||||
| DWORD WINAPI			HoldCloseThread	(LPVOID); | ||||
| void					SavePrefs		(int); | ||||
| void					LoadPrefs		(); | ||||
| void					HoldClose		(); | ||||
| 
 | ||||
| void ConvertString(const char *in,		wchar_t *out,	int size); | ||||
| void ConvertString(const wchar_t *in,	char *out,		int size); | ||||
| void ConvertString(const char *in,		char *out,		int size); | ||||
| 
 | ||||
| struct HOTKEY | ||||
| { | ||||
| 	WORD key; | ||||
| 	WORD mod; | ||||
| }; | ||||
| #endif | ||||
|  | @ -52,8 +52,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winamp", "..\plugins\winamp | |||
| EndProject | ||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sysinfo", "..\plugins\sysinfo\sysinfo.vcxproj", "{6C0CA980-97C5-427A-BE61-5BCECAFABBDA}" | ||||
| EndProject | ||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hextray", "..\plugins\hextray\hextray.vcxproj", "{3024CF36-85E5-4E00-9608-7002E2C7EF14}" | ||||
| EndProject | ||||
| Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "release", "release", "{0FD996A7-464F-4981-8380-3DCA3A244A13}" | ||||
| EndProject | ||||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nls", "nls\nls.vcxproj", "{B10A2C41-344C-43E0-A32D-B9587C198D8B}" | ||||
|  | @ -63,7 +61,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "copy", "copy\copy.vcxproj", | |||
| 		{C2321A03-0BA7-45B3-8740-ABD82B36B0BF} = {C2321A03-0BA7-45B3-8740-ABD82B36B0BF} | ||||
| 		{19C52A0A-A790-409E-A28A-9745FF990F5C} = {19C52A0A-A790-409E-A28A-9745FF990F5C} | ||||
| 		{4980AF24-9D42-427D-A8E6-0DF3B97C455D} = {4980AF24-9D42-427D-A8E6-0DF3B97C455D} | ||||
| 		{3024CF36-85E5-4E00-9608-7002E2C7EF14} = {3024CF36-85E5-4E00-9608-7002E2C7EF14} | ||||
| 		{17E4BE39-76F7-4A06-AD21-EFD0C5091F76} = {17E4BE39-76F7-4A06-AD21-EFD0C5091F76} | ||||
| 		{B10A2C41-344C-43E0-A32D-B9587C198D8B} = {B10A2C41-344C-43E0-A32D-B9587C198D8B} | ||||
| 		{461DC24A-A410-4171-8C02-CCDBF3702C2A} = {461DC24A-A410-4171-8C02-CCDBF3702C2A} | ||||
|  | @ -158,8 +155,6 @@ Global | |||
| 		{6C0CA980-97C5-427A-BE61-5BCECAFABBDA}.Release|Win32.Build.0 = Release|Win32 | ||||
| 		{6C0CA980-97C5-427A-BE61-5BCECAFABBDA}.Release|x64.ActiveCfg = Release|x64 | ||||
| 		{6C0CA980-97C5-427A-BE61-5BCECAFABBDA}.Release|x64.Build.0 = Release|x64 | ||||
| 		{3024CF36-85E5-4E00-9608-7002E2C7EF14}.Release|Win32.ActiveCfg = Release|Win32 | ||||
| 		{3024CF36-85E5-4E00-9608-7002E2C7EF14}.Release|x64.ActiveCfg = Release|x64 | ||||
| 		{B10A2C41-344C-43E0-A32D-B9587C198D8B}.Release|Win32.ActiveCfg = Release|Win32 | ||||
| 		{B10A2C41-344C-43E0-A32D-B9587C198D8B}.Release|Win32.Build.0 = Release|Win32 | ||||
| 		{B10A2C41-344C-43E0-A32D-B9587C198D8B}.Release|x64.ActiveCfg = Release|x64 | ||||
|  | @ -209,7 +204,6 @@ Global | |||
| 		{461DC24A-A410-4171-8C02-CCDBF3702C2A} = {561126F4-FA18-45FC-A2BF-8F858F161D6D} | ||||
| 		{E78C0D9A-798E-4BF6-B0CC-6FECB8CA2FCE} = {561126F4-FA18-45FC-A2BF-8F858F161D6D} | ||||
| 		{6C0CA980-97C5-427A-BE61-5BCECAFABBDA} = {561126F4-FA18-45FC-A2BF-8F858F161D6D} | ||||
| 		{3024CF36-85E5-4E00-9608-7002E2C7EF14} = {561126F4-FA18-45FC-A2BF-8F858F161D6D} | ||||
| 		{19C52A0A-A790-409E-A28A-9745FF990F5C} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240} | ||||
| 		{D90BC3E3-1341-4849-9354-5F40489D39D1} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240} | ||||
| 		{C2321A03-0BA7-45B3-8740-ABD82B36B0BF} = {D237DA6B-BD5F-46C0-8BEA-50E9A1340240} | ||||
|  |  | |||