summaryrefslogtreecommitdiff
path: root/plugins/SplashScreen/src/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/SplashScreen/src/options.cpp')
-rw-r--r--plugins/SplashScreen/src/options.cpp448
1 files changed, 448 insertions, 0 deletions
diff --git a/plugins/SplashScreen/src/options.cpp b/plugins/SplashScreen/src/options.cpp
new file mode 100644
index 0000000000..b400eca26d
--- /dev/null
+++ b/plugins/SplashScreen/src/options.cpp
@@ -0,0 +1,448 @@
+/*
+Splash Screen Plugin for Miranda-IM (www.miranda-im.org)
+(c) 2004-2007 nullbie, (c) 2005-2007 Thief
+
+This program 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.
+
+This program 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 this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+File name : $URL: http://svn.miranda.im/mainrepo/splashscreen/trunk/src/options.cpp $
+Revision : $Rev: 951 $
+Last change on : $Date: 2007-10-16 18:46:53 +0400 (Вт, 16 окт 2007) $
+Last change by : $Author: Thief $
+
+DESCRIPTION: Options dialog handling code
+
+*/
+
+#include "headers.h"
+
+TCHAR szPath2Spash [MAX_PATH], szSoundFilePath[MAX_PATH];
+
+// Reads values from db
+void ReadIniConfig()
+{
+ options.active = DBGetContactSettingByte(NULL, MODNAME, "Active", 1);
+ options.playsnd = DBGetContactSettingByte(NULL, MODNAME, "PlaySound", 0);
+ options.fadein = DBGetContactSettingByte(NULL, MODNAME, "FadeIn", 1);
+ options.fadeout = DBGetContactSettingByte(NULL, MODNAME, "FadeOut", 1);
+ options.showtime = DBGetContactSettingDword(NULL, MODNAME, "TimeToShow", 2000);
+ options.fisteps = DBGetContactSettingDword(NULL, MODNAME, "FadeinSpeed", 5);
+ options.fosteps = DBGetContactSettingDword(NULL, MODNAME, "FadeoutSpeed", 5);
+ options.inheritGS = DBGetContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 1);
+ options.showversion = DBGetContactSettingByte(NULL, MODNAME, "ShowVersion", 0);
+ options.random = DBGetContactSettingByte(NULL, MODNAME, "Random", 0);
+ options.runonce = DBGetContactSettingByte(NULL, MODNAME, "DisableAfterStartup", 0);
+}
+
+BOOL Exists(LPCTSTR strName)
+{
+ return GetFileAttributes(strName) != INVALID_FILE_ATTRIBUTES;
+}
+
+INT_PTR CALLBACK DlgProcOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ if (!png2dibavail)
+ {
+ ShowWindow(GetDlgItem(hwndDlg, IDC_PNG2DIBWARN), SW_SHOW);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ACTIVE), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_RANDOM), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_SPLASHPATH), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHOOSESPLASH), false);
+ }
+ ReadIniConfig();
+ TCHAR inBuf[80];
+ DBVARIANT dbv = {0};
+ DBGetContactSettingTString(NULL, MODNAME, "Path", &dbv);
+ if (lstrcmp(dbv.ptszVal, NULL) == 0)
+ {
+ _tcscpy_s(inBuf, _T("splash\\splash.png"));
+ DBFreeVariant(&dbv);
+ }
+ else
+ _tcscpy_s(inBuf, dbv.ptszVal);
+ dbv.ptszVal = NULL;
+ SetWindowText(GetDlgItem(hwndDlg, IDC_SPLASHPATH),inBuf);
+ DBGetContactSettingTString(NULL, MODNAME, "Sound", &dbv);
+ if (lstrcmp(dbv.ptszVal, NULL) == 0)
+ {
+ _tcscpy_s(inBuf, _T("sounds\\startup.wav"));
+ DBFreeVariant(&dbv);
+ }
+ else
+ _tcscpy_s(inBuf, dbv.ptszVal);
+ dbv.ptszVal = NULL;
+ SetWindowText(GetDlgItem(hwndDlg, IDC_SNDPATH),inBuf);
+ DBGetContactSettingTString(NULL, MODNAME, "VersionPrefix", &dbv);
+ if (lstrcmp(dbv.ptszVal, NULL) == 0)
+ {
+ _tcscpy_s(inBuf, _T(""));
+ DBFreeVariant(&dbv);
+ }
+ else
+ _tcscpy_s(inBuf, dbv.ptszVal);
+ dbv.ptszVal = NULL;
+ SetWindowText(GetDlgItem(hwndDlg, IDC_VERSIONPREFIX), inBuf);
+ if (options.active) CheckDlgButton(hwndDlg, IDC_ACTIVE, BST_CHECKED);
+ if (options.playsnd && !options.inheritGS) CheckDlgButton(hwndDlg, IDC_PLAYSND, BST_INDETERMINATE);
+ else if (options.playsnd) CheckDlgButton(hwndDlg, IDC_PLAYSND, BST_CHECKED);
+ //if (options.loopsnd) CheckDlgButton(hwndDlg, IDC_LOOPSOUND, BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOOPSOUND), false);
+ if (options.fadein) CheckDlgButton(hwndDlg, IDC_FADEIN, BST_CHECKED);
+ if (options.fadeout) CheckDlgButton(hwndDlg, IDC_FADEOUT, BST_CHECKED);
+ if (options.random) CheckDlgButton(hwndDlg, IDC_RANDOM, BST_CHECKED);
+ if (options.showversion) CheckDlgButton(hwndDlg, IDC_SHOWVERSION, BST_CHECKED);
+
+ SetWindowText(GetDlgItem(hwndDlg, IDC_SHOWTIME), _itot(options.showtime, inBuf, 10));
+ SetWindowText(GetDlgItem(hwndDlg, IDC_FISTEP), _itot(options.fisteps, inBuf, 10));
+ SetWindowText(GetDlgItem(hwndDlg, IDC_FOSTEP), _itot(options.fosteps, inBuf, 10));
+
+ SendDlgItemMessage(hwndDlg, IDC_SHOWTIME, EM_LIMITTEXT, 5, 0);
+ /*
+ SendDlgItemMessage(hwndDlg, IDC_ST_SPIN, UDM_SETRANGE32, 0, 20000);
+ SendDlgItemMessage(hwndDlg, IDC_FI_SPIN, UDM_SETRANGE32, 1, 7);
+ SendDlgItemMessage(hwndDlg, IDC_FO_SPIN, UDM_SETRANGE32, 1, 7);
+ */
+
+ return TRUE;
+ }
+
+ case WM_COMMAND:
+ {
+ switch(LOWORD(wParam))
+ {
+ case IDC_PREVIEW:
+ {
+ ShowSplash(true);
+ break;
+ }
+
+ case IDC_ACTIVE:
+ case IDC_PLAYSND:
+ case IDC_LOOPSOUND:
+ case IDC_FADEIN:
+ case IDC_FADEOUT:
+ case IDC_SHOWTIME:
+ case IDC_RANDOM:
+ case IDC_SHOWVERSION:
+ case IDC_FISTEP:
+ case IDC_FOSTEP:
+ {
+ if (IsDlgButtonChecked(hwndDlg, IDC_FADEIN))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FISTEP), true);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FI_SPIN), true);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FISTEP), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FI_SPIN), false);
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_FADEOUT))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FOSTEP), true);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FO_SPIN), true);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FOSTEP), false);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_FO_SPIN), false);
+ }
+
+ if ((HWND)lParam != GetFocus())
+ return 0;
+ else {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ }
+ break;
+ }
+
+ case IDC_CHOOSESPLASH:
+ {
+ TCHAR szTempPath[MAX_PATH], initDir[MAX_PATH];
+ TCHAR *pos;
+
+ if (Exists(szSplashFile))
+ {
+ lstrcpy(initDir, szSplashFile);
+ pos = _tcsrchr(initDir, _T('\\'));
+ if(pos != NULL) *pos = 0;
+ }
+ else
+ {
+ szMirDir = Utils_ReplaceVarsT(_T("%miranda_path%"));
+ lstrcpy(initDir, szMirDir);
+ mir_free(szMirDir);
+ }
+
+ OPENFILENAME ofn = {0};
+ ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
+ TCHAR tmp[MAX_PATH];
+ mir_sntprintf(tmp, SIZEOF(tmp), _T("%s (*.png, *.bmp)%c*.png;*.bmp%c%c"), TranslateT("Graphic files"), 0, 0, 0);
+ ofn.lpstrFilter = tmp;
+ ofn.hwndOwner = 0;
+ ofn.lpstrFile = szTempPath;
+ ofn.nMaxFile = MAX_PATH;
+ ofn.nMaxFileTitle = MAX_PATH;
+ ofn.Flags = OFN_HIDEREADONLY;
+ ofn.lpstrInitialDir = initDir;
+ *szTempPath = '\0';
+ ofn.lpstrDefExt = _T("");
+
+ if (GetOpenFileName(&ofn))
+ {
+ lstrcpy(szSplashFile, szTempPath);
+
+ #ifdef _DEBUG
+ logMessage(_T("Set path"), szSplashFile);
+ #endif
+
+ // Make path relative
+ int result = CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)szTempPath, (LPARAM)szPath2Spash);
+
+ if(result && lstrlen(szPath2Spash) > 0)
+ {
+ if (options.random)
+ {
+ TCHAR *pos;
+ pos = _tcsrchr(szPath2Spash, _T('\\'));
+ if (pos != NULL)
+ {
+ *pos = 0;
+ lstrcat(szPath2Spash, _T("\\"));
+ }
+ }
+
+ SetWindowText(GetDlgItem(hwndDlg, IDC_SPLASHPATH), szPath2Spash);
+ }
+
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+
+ break;
+ }
+
+ case IDC_CHOOSESND:
+ {
+ TCHAR szTempPath[MAX_PATH], initDir[MAX_PATH];
+ TCHAR *pos;
+
+ if (Exists(szSoundFile))
+ {
+ lstrcpy(initDir, szSoundFile);
+ pos = _tcsrchr(initDir, _T('\\'));
+ if(pos != NULL) *pos = 0;
+ }
+ else
+ {
+ szMirDir = Utils_ReplaceVarsT(_T("%miranda_path%"));
+ lstrcpy(initDir, szMirDir);
+ mir_free(szMirDir);
+ }
+
+ OPENFILENAME ofn = {0};
+ ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
+ TCHAR tmp[MAX_PATH];
+ mir_sntprintf(tmp, SIZEOF(tmp), _T("%s (*.wav, *.mp3)%c*.wav;*.mp3%c%c"), TranslateT("Sound Files"), 0, 0, 0);
+ ofn.lpstrFilter = tmp;
+ ofn.hwndOwner = 0;
+ ofn.lpstrFile = szTempPath;
+ ofn.nMaxFile = MAX_PATH;
+ ofn.nMaxFileTitle = MAX_PATH;
+ ofn.Flags = OFN_HIDEREADONLY;
+ ofn.lpstrInitialDir = initDir;
+ *szTempPath = '\0';
+ ofn.lpstrDefExt = _T("");
+
+ if (GetOpenFileName(&ofn))
+ {
+ lstrcpy(szSoundFile,szTempPath);
+
+ #ifdef _DEBUG
+ logMessage(_T("Set sound path"), szSoundFile);
+ #endif
+
+ // Make path relative
+ int result = CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)szTempPath, (LPARAM)szSoundFilePath);
+
+ if(result && lstrlen(szSoundFile) > 0)
+ SetWindowText(GetDlgItem(hwndDlg, IDC_SNDPATH),szSoundFilePath);
+
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+
+ break;
+ }
+ }
+
+ default:
+ {
+ if (HIWORD(wParam) != EN_CHANGE || (HWND) lParam != GetFocus())
+ return 0;
+ else
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ }
+
+ case WM_NOTIFY:
+ {
+ if (((LPNMHDR)lParam)->idFrom == 0)
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case PSN_APPLY:
+ {
+ TCHAR tmp[MAX_PATH];
+
+ GetWindowText(GetDlgItem(hwndDlg, IDC_SPLASHPATH), tmp, MAX_PATH);
+ DBWriteContactSettingTString(NULL, MODNAME, "Path", tmp);
+
+ GetWindowText(GetDlgItem(hwndDlg, IDC_SNDPATH), tmp, MAX_PATH);
+ DBWriteContactSettingTString(NULL, MODNAME, "Sound", tmp);
+
+ GetWindowText(GetDlgItem(hwndDlg, IDC_VERSIONPREFIX), tmp, MAX_PATH);
+ DBWriteContactSettingTString(NULL, MODNAME, "VersionPrefix", tmp);
+ lstrcpy(szPrefix, tmp);
+
+ GetWindowText(GetDlgItem(hwndDlg, IDC_SHOWTIME), tmp, MAX_PATH);
+ DBWriteContactSettingDword(NULL, MODNAME, "TimeToShow", _ttoi(tmp));
+ options.showtime = _ttoi(tmp);
+
+ GetWindowText(GetDlgItem(hwndDlg, IDC_FISTEP), tmp, MAX_PATH);
+ DBWriteContactSettingDword(NULL, MODNAME, "FadeinSpeed", _ttoi(tmp));
+ options.fisteps = _ttoi(tmp);
+
+ GetWindowText(GetDlgItem(hwndDlg, IDC_FOSTEP), tmp, MAX_PATH);
+ DBWriteContactSettingDword(NULL, MODNAME, "FadeoutSpeed", _ttoi(tmp));
+ options.fosteps = _ttoi(tmp);
+
+ if (IsDlgButtonChecked(hwndDlg, IDC_ACTIVE))
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "Active", 1);
+ options.active = 1;
+ }
+ else
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "Active", 0);
+ options.active = 0;
+ }
+
+ if (IsDlgButtonChecked(hwndDlg, IDC_PLAYSND))
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "PlaySound", 1);
+ options.playsnd = 1;
+ DBWriteContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 1);
+ options.inheritGS = 1;
+ }
+ else
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "PlaySound", 0);
+ options.playsnd = 0;
+ DBWriteContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 0);
+ options.inheritGS = 0;
+ }
+
+ if (IsDlgButtonChecked(hwndDlg, IDC_PLAYSND) == BST_INDETERMINATE)
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "PlaySound", 1);
+ options.playsnd = 1;
+ DBWriteContactSettingByte(NULL, MODNAME, "InheritGlobalSound", 0);
+ options.inheritGS = 0;
+ }
+
+ /*
+ if (IsDlgButtonChecked(hwndDlg, IDC_LOOPSOUND))
+ {
+ WritePrivateProfileString("Splash","LoopSound","1",szIniFile);
+ options.loopsnd = 1;
+ }
+ else
+ {
+ WritePrivateProfileString("Splash","LoopSound","0",szIniFile);
+ options.loopsnd = 0;
+ }
+ */
+
+ if (IsDlgButtonChecked(hwndDlg, IDC_FADEIN))
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "FadeIn", 1);
+ options.fadein = 1;
+ }
+ else
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "FadeIn", 0);
+ options.fadein = 0;
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_FADEOUT))
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "FadeOut", 1);
+ options.fadeout = 1;
+ }
+ else
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "FadeOut", 0);
+ options.fadeout = 0;
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_RANDOM))
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "Random", 1);
+ options.random = 1;
+ }
+ else
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "Random", 0);
+ options.random = 0;
+ }
+ if (IsDlgButtonChecked(hwndDlg, IDC_SHOWVERSION))
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "ShowVersion", 1);
+ options.showversion = 1;
+ }
+ else
+ {
+ DBWriteContactSettingByte(NULL, MODNAME, "ShowVersion", 0);
+ options.showversion = 0;
+ }
+ return TRUE;
+ }
+ }
+ }
+
+ case WM_DESTROY:
+ break;
+ }
+ return FALSE;
+}
+
+int OptInit(WPARAM wParam, LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp;
+
+ ZeroMemory(&odp, sizeof(odp));
+ odp.cbSize = sizeof(odp);
+ odp.position = 0;
+ odp.hInstance = hInst;
+ odp.ptszGroup = _T("Skins");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_SPLASH_OPT);
+ odp.ptszTitle = _T("Splash Screen");
+ odp.pfnDlgProc = DlgProcOptions;
+ odp.flags = ODPF_TCHAR | ODPF_BOLDGROUPS;
+ CallService(MS_OPT_ADDPAGE, wParam, (LPARAM) &odp);
+ return 0;
+}