aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Visualization/vis_milk2/config2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/Visualization/vis_milk2/config2.cpp')
-rw-r--r--Src/Plugins/Visualization/vis_milk2/config2.cpp425
1 files changed, 425 insertions, 0 deletions
diff --git a/Src/Plugins/Visualization/vis_milk2/config2.cpp b/Src/Plugins/Visualization/vis_milk2/config2.cpp
new file mode 100644
index 00000000..ce4abb10
--- /dev/null
+++ b/Src/Plugins/Visualization/vis_milk2/config2.cpp
@@ -0,0 +1,425 @@
+/*
+ LICENSE
+ -------
+Copyright 2005-2013 Nullsoft, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of Nullsoft nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "api__vis_milk2.h"
+#include "pluginshell.h"
+#include "resource.h"
+#include "utility.h"
+#include <strsafe.h>
+
+int g_nFontSize[] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30, 32,
+ 36, 40, 44, 48, 52, 56, 60, 64, 72, 80, 88, 96, 104, 112, 120, 128 };
+
+int CALLBACK EnumFontsProc(
+ CONST LOGFONT *lplf, // logical-font data
+ CONST TEXTMETRIC *lptm, // physical-font data
+ DWORD dwType, // font type
+ LPARAM lpData // application-defined data
+)
+{
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT1), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT2), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT3), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT4), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT5), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT6), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT7), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT8), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT9), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
+ return 1;
+}
+
+void SaveFont2(td_fontinfo *fi, DWORD ctrl1, DWORD ctrl2, DWORD bold_id, DWORD ital_id, DWORD aa_id, HWND hwnd)
+{
+ HWND fontbox = GetDlgItem( hwnd, ctrl1 );
+ HWND sizebox = GetDlgItem( hwnd, ctrl2 );
+
+ // font face
+ int t = SendMessage( fontbox, CB_GETCURSEL, 0, 0);
+ SendMessageW( fontbox, CB_GETLBTEXT, t, (LPARAM)fi->szFace);
+
+ // font size
+ t = SendMessage( sizebox, CB_GETCURSEL, 0, 0);
+ if (t != CB_ERR)
+ {
+ int nMax = sizeof(g_nFontSize)/sizeof(int);
+ fi->nSize =g_nFontSize[nMax-1 - t];
+ }
+
+ // font options
+ fi->bBold = DlgItemIsChecked(hwnd, bold_id);
+ fi->bItalic = DlgItemIsChecked(hwnd, ital_id);
+ fi->bAntiAliased = DlgItemIsChecked(hwnd, aa_id);
+}
+
+void InitFont2(td_fontinfo *fi, DWORD ctrl1, DWORD ctrl2, DWORD bold_id, DWORD ital_id, DWORD aa_id, HWND hwnd, DWORD ctrl4, wchar_t* szFontName)
+{
+ HWND namebox = ctrl4 ? GetDlgItem( hwnd, ctrl4 ) : 0;
+ HWND fontbox = GetDlgItem( hwnd, ctrl1 );
+ HWND sizebox = GetDlgItem( hwnd, ctrl2 );
+ ShowWindow(fontbox, SW_NORMAL);
+ ShowWindow(sizebox, SW_NORMAL);
+ ShowWindow(GetDlgItem(hwnd,bold_id), SW_NORMAL);
+ ShowWindow(GetDlgItem(hwnd,ital_id), SW_NORMAL);
+ ShowWindow(GetDlgItem(hwnd,aa_id), SW_NORMAL);
+ if (namebox && szFontName && szFontName[0])
+ {
+ ShowWindow(namebox, SW_NORMAL);
+ wchar_t buf[256];
+ StringCbPrintfW(buf, sizeof(buf), L"%s:", szFontName);
+ SetWindowTextW(GetDlgItem(hwnd,ctrl4), buf);
+ }
+
+ // set selection
+ int nPos = SendMessageW( fontbox, CB_FINDSTRINGEXACT, -1, (LPARAM)fi->szFace);
+ if (nPos == CB_ERR)
+ nPos = 0;
+ SendMessage( fontbox, CB_SETCURSEL, nPos, 0);
+
+ //---------font size box-------------------
+ int nSel = 0;
+ int nMax = sizeof(g_nFontSize)/sizeof(int);
+ for (int i=0; i<nMax; i++)
+ {
+ wchar_t buf[256];
+ int s = g_nFontSize[nMax-1 - i];
+ StringCbPrintfW(buf, sizeof(buf), L" %2d ", s);
+ SendMessageW(sizebox, CB_ADDSTRING, i, (LPARAM)buf);
+ if (s == fi->nSize)
+ nSel = i;
+ }
+ SendMessage(sizebox, CB_SETCURSEL, nSel, 0);
+
+ //---------font options box-------------------
+ CheckDlgButton(hwnd, bold_id, fi->bBold);
+ CheckDlgButton(hwnd, ital_id, fi->bItalic);
+ CheckDlgButton(hwnd, aa_id, fi->bAntiAliased);
+}
+
+void SCOOT_CONTROL(HWND hwnd, int ctrl_id, int dx, int dy)
+{
+ RECT r;
+ GetWindowRect(GetDlgItem(hwnd,ctrl_id), &r);
+ ScreenToClient(hwnd, (LPPOINT)&r);
+ SetWindowPos (GetDlgItem(hwnd,ctrl_id), NULL, r.left + dx, r.top + dy, 0, 0, SWP_NOSIZE|SWP_NOZORDER);
+}
+
+BOOL CALLBACK CPluginShell::FontDialogProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ if (msg==WM_INITDIALOG && lParam > 0 && GetWindowLongPtr(hwnd,GWLP_USERDATA)==0)
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
+
+ CPluginShell* p = (CPluginShell*)GetWindowLongPtr(hwnd,GWLP_USERDATA);
+
+ if (p)
+ return p->PluginShellFontDialogProc(hwnd, msg, wParam, lParam);
+ else
+ return FALSE;
+}
+
+BOOL CPluginShell::PluginShellFontDialogProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ #ifdef _DEBUG
+ OutputDebugMessage("FontDlgProc: ", hwnd, msg, wParam, lParam);
+ #endif
+
+ switch (msg)
+ {
+ case WM_DESTROY:
+ return 0;
+
+ case WM_INITDIALOG:
+ {
+ // Initialize all font dialog global variables here:
+ // ...
+
+ HDC hdc = GetDC(hwnd);
+ if (hdc)
+ {
+ EnumFonts(hdc, NULL, &EnumFontsProc, (LPARAM)hwnd);
+ ReleaseDC(hwnd, hdc);
+ }
+
+ #define InitFont(n, m) InitFont2(&m_fontinfo[n-1], IDC_FONT##n, IDC_FONTSIZE##n, IDC_FONTBOLD##n, IDC_FONTITAL##n, IDC_FONTAA##n, hwnd, IDC_FONT_NAME_##n, m)
+ InitFont(1, 0);
+ InitFont(2, 0);
+ InitFont(3, 0);
+ InitFont(4, 0);
+ #if (NUM_EXTRA_FONTS >= 1)
+ InitFont(5, WASABI_API_LNGSTRINGW(IDS_EXTRA_FONT_1_NAME));
+ #endif
+ #if (NUM_EXTRA_FONTS >= 2)
+ InitFont(6, WASABI_API_LNGSTRINGW(IDS_EXTRA_FONT_2_NAME));
+ #endif
+ #if (NUM_EXTRA_FONTS >= 3)
+ InitFont(7, EXTRA_FONT_3_NAME);
+ #endif
+ #if (NUM_EXTRA_FONTS >= 4)
+ InitFont(5, EXTRA_FONT_4_NAME);
+ #endif
+ #if (NUM_EXTRA_FONTS >= 5)
+ InitFont(9, EXTRA_FONT_5_NAME);
+ #endif
+
+ // Finally, if not all extra fonts are in use, shrink the window size, and
+ // move up any controls that were at the bottom:
+ RECT r;
+ GetWindowRect(hwnd, &r);
+ int scoot_factor = 128*(MAX_EXTRA_FONTS-NUM_EXTRA_FONTS)/MAX_EXTRA_FONTS;
+ if (scoot_factor>0)
+ {
+ SetWindowPos(hwnd, NULL, 0, 0, r.right-r.left, r.bottom-r.top - scoot_factor, SWP_NOMOVE|SWP_NOZORDER);
+ SCOOT_CONTROL(hwnd, IDC_FONT_TEXT, 0, -scoot_factor);
+ SCOOT_CONTROL(hwnd, IDOK, 0, -scoot_factor);
+ SCOOT_CONTROL(hwnd, IDCANCEL, 0, -scoot_factor);
+ }
+ }
+ break;
+
+ case WM_COMMAND:
+ {
+ int id = LOWORD(wParam);
+ switch(id)
+ {
+ case IDOK:
+
+ #define SaveFont(n) SaveFont2(&m_fontinfo[n-1], IDC_FONT##n, IDC_FONTSIZE##n, IDC_FONTBOLD##n, IDC_FONTITAL##n, IDC_FONTAA##n, hwnd)
+ SaveFont(1);
+ SaveFont(2);
+ SaveFont(3);
+ SaveFont(4);
+ #if (NUM_EXTRA_FONTS >= 1)
+ SaveFont(5);
+ #endif
+ #if (NUM_EXTRA_FONTS >= 2)
+ SaveFont(6);
+ #endif
+ #if (NUM_EXTRA_FONTS >= 3)
+ SaveFont(7);
+ #endif
+ #if (NUM_EXTRA_FONTS >= 4)
+ SaveFont(5);
+ #endif
+ #if (NUM_EXTRA_FONTS >= 5)
+ SaveFont(9);
+ #endif
+
+ EndDialog(hwnd,id);
+ break;
+
+ case IDCANCEL:
+ EndDialog(hwnd,id);
+ break;
+ }
+ }
+ break;
+
+ }
+
+ return 0;
+}
+
+void EnableStuff(HWND hwnd, int bEnable)
+{
+ EnableWindow(GetDlgItem(hwnd, IDC_CB_BOX), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_CB_MANUAL_SCOOT), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_DM_ALPHA_FIX_CAPTION), bEnable);
+ EnableWindow(GetDlgItem(hwnd, IDC_DM_ALPHA_FIX), bEnable);
+}
+
+BOOL CALLBACK CPluginShell::DesktopOptionsDialogProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ if (msg==WM_INITDIALOG && lParam > 0 && GetWindowLongPtr(hwnd,GWLP_USERDATA)==0)
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
+
+ CPluginShell* p = (CPluginShell*)GetWindowLongPtr(hwnd,GWLP_USERDATA);
+
+ if (p)
+ return p->PluginShellDesktopOptionsDialogProc(hwnd, msg, wParam, lParam);
+ else
+ return FALSE;
+}
+
+BOOL CPluginShell::PluginShellDesktopOptionsDialogProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ #ifdef _DEBUG
+ OutputDebugMessage("DmDlgProc: ", hwnd, msg, wParam, lParam);
+ #endif
+
+ switch (msg)
+ {
+ case WM_DESTROY:
+ return 0;
+
+ case WM_INITDIALOG:
+ {
+ CheckDlgButton(hwnd, IDC_CB_SHOW_ICONS, m_desktop_show_icons );
+ CheckDlgButton(hwnd, IDC_CB_BOX, m_desktop_textlabel_boxes );
+ CheckDlgButton(hwnd, IDC_CB_MANUAL_SCOOT, m_desktop_manual_icon_scoot);
+
+ HWND ctrl = GetDlgItem(hwnd, IDC_DM_ALPHA_FIX);
+ SendMessageW( ctrl, CB_ADDSTRING, 0, (LPARAM)WASABI_API_LNGSTRINGW(IDS_5_6_5_TEXTURE));
+ SendMessageW( ctrl, CB_ADDSTRING, 1, (LPARAM)WASABI_API_LNGSTRINGW(IDS_5_5_5_TEXTURE));
+ SendMessageW( ctrl, CB_ADDSTRING, 2, (LPARAM)WASABI_API_LNGSTRINGW(IDS_8_8_8_TEXTURE));
+ SendMessageW( ctrl, CB_SETCURSEL, m_desktop_555_fix, 0 );
+
+ EnableStuff(hwnd, m_desktop_show_icons);
+ }
+ break;
+
+ case WM_COMMAND:
+ {
+ int id = LOWORD(wParam);
+ switch(id)
+ {
+ case IDC_CB_SHOW_ICONS:
+ m_desktop_show_icons = DlgItemIsChecked(hwnd, IDC_CB_SHOW_ICONS);
+ EnableStuff(hwnd, m_desktop_show_icons);
+ break;
+
+ case IDOK:
+ m_desktop_show_icons = DlgItemIsChecked(hwnd, IDC_CB_SHOW_ICONS);
+ m_desktop_textlabel_boxes = DlgItemIsChecked(hwnd, IDC_CB_BOX);
+ m_desktop_manual_icon_scoot = DlgItemIsChecked(hwnd, IDC_CB_MANUAL_SCOOT);
+ m_desktop_555_fix = SendMessage( GetDlgItem(hwnd, IDC_DM_ALPHA_FIX), CB_GETCURSEL, 0, 0 );
+
+ EndDialog(hwnd,id);
+ break;
+
+ case IDCANCEL:
+ EndDialog(hwnd,id);
+ break;
+ }
+ }
+ break;
+
+ case WM_HELP:
+ if (lParam)
+ {
+ HELPINFO *ph = (HELPINFO*)lParam;
+ wchar_t title[1024];
+ wchar_t buf[2048];
+ wchar_t ctrl_name[1024];
+ GetWindowTextW(GetDlgItem(hwnd, ph->iCtrlId), ctrl_name, sizeof(ctrl_name)/sizeof(*ctrl_name));
+ RemoveSingleAmpersands(ctrl_name);
+ buf[0] = 0;
+
+ switch(ph->iCtrlId)
+ {
+ case IDC_DM_ALPHA_FIX:
+ case IDC_DM_ALPHA_FIX_CAPTION:
+ WASABI_API_LNGSTRINGW_BUF(IDS_NO_ALPHA_FALLBACK, title, 1024);
+ WASABI_API_LNGSTRINGW_BUF(IDS_NO_ALPHA_FALLBACK_HELP, buf, 2048);
+ break;
+
+ case IDC_CB_SHOW_ICONS:
+ StringCbPrintfW(title, sizeof(title), WASABI_API_LNGSTRINGW(IDS_HELP_ON_X_CHECKBOX), ctrl_name);
+ WASABI_API_LNGSTRINGW_BUF(IDS_CB_SHOW_ICONS_HELP, buf, 2048);
+ break;
+
+ case IDC_CB_BOX:
+ WASABI_API_LNGSTRINGW_BUF(IDS_CB_BOX, title, 1024);
+ WASABI_API_LNGSTRINGW_BUF(IDS_CB_BOX_HELP, buf, 2048);
+ break;
+
+ case IDC_CB_MANUAL_SCOOT:
+ WASABI_API_LNGSTRINGW_BUF(IDS_CB_MANUAL_SCOOT, title, 1024);
+ WASABI_API_LNGSTRINGW_BUF(IDS_CB_MANUAL_SCOOT_HELP, buf, 2048);
+ break;
+ }
+
+ if (buf[0])
+ MessageBoxW(hwnd, buf, title, MB_OK|MB_SETFOREGROUND|MB_TOPMOST|MB_TASKMODAL);
+ }
+ break;
+ }
+ return 0;
+}
+
+BOOL CALLBACK CPluginShell::DualheadDialogProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ if (msg==WM_INITDIALOG && lParam > 0 && GetWindowLongPtr(hwnd,GWLP_USERDATA)==0)
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam);
+
+ CPluginShell* p = (CPluginShell*)GetWindowLongPtr(hwnd,GWLP_USERDATA);
+
+ if (p)
+ return p->PluginShellDualheadDialogProc(hwnd, msg, wParam, lParam);
+ else
+ return FALSE;
+}
+
+BOOL CPluginShell::PluginShellDualheadDialogProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ #ifdef _DEBUG
+ OutputDebugMessage("DHDlgProc: ", hwnd, msg, wParam, lParam);
+ #endif
+
+ switch (msg)
+ {
+ case WM_DESTROY:
+ return 0;
+
+ case WM_INITDIALOG:
+ {
+ HWND ctrl = GetDlgItem(hwnd, IDC_H_PICK);
+ SendMessageW( ctrl, CB_ADDSTRING, 0, (LPARAM)WASABI_API_LNGSTRINGW(IDS_SPAN_BOTH_SCREENS));
+ SendMessageW( ctrl, CB_ADDSTRING, 1, (LPARAM)WASABI_API_LNGSTRINGW(IDS_USE_LEFT_SCREEN_ONLY));
+ SendMessageW( ctrl, CB_ADDSTRING, 2, (LPARAM)WASABI_API_LNGSTRINGW(IDS_USE_RIGHT_SCREEN_ONLY));
+ SendMessage( ctrl, CB_SETCURSEL, m_dualhead_horz, 0 );
+
+ ctrl = GetDlgItem(hwnd, IDC_V_PICK);
+ SendMessageW( ctrl, CB_ADDSTRING, 0, (LPARAM)WASABI_API_LNGSTRINGW(IDS_SPAN_BOTH_SCREENS));
+ SendMessageW( ctrl, CB_ADDSTRING, 1, (LPARAM)WASABI_API_LNGSTRINGW(IDS_USE_TOP_SCREEN_ONLY));
+ SendMessageW( ctrl, CB_ADDSTRING, 2, (LPARAM)WASABI_API_LNGSTRINGW(IDS_USE_BOTTOM_SCREEN_ONLY));
+ SendMessage( ctrl, CB_SETCURSEL, m_dualhead_vert, 0 );
+ }
+ break;
+
+ case WM_COMMAND:
+ {
+ int id = LOWORD(wParam);
+ switch(id)
+ {
+ case IDOK:
+ m_dualhead_horz = SendMessage( GetDlgItem(hwnd, IDC_H_PICK), CB_GETCURSEL, 0, 0 );
+ m_dualhead_vert = SendMessage( GetDlgItem(hwnd, IDC_V_PICK), CB_GETCURSEL, 0, 0 );
+
+ EndDialog(hwnd,id);
+ break;
+
+ case IDCANCEL:
+ EndDialog(hwnd,id);
+ break;
+ }
+ }
+ break;
+ }
+ return 0;
+} \ No newline at end of file