Commit ea61fd37 authored by Frank Richter's avatar Frank Richter Committed by Alexandre Julliard

Add an "Install theme" button to the appearance page to allow

convenient copying of the .msstyles file to the Right Place inside the Windows dir.
parent e364f090
...@@ -171,13 +171,13 @@ IDD_APPEARANCE DIALOG DISCARDABLE 0, 0, 260, 250 ...@@ -171,13 +171,13 @@ IDD_APPEARANCE DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
GROUPBOX " Oberflche ",IDC_STATIC,8,10,244,94 LTEXT "Motiv:",IDC_STATIC,8,10,244,8
LTEXT "Motiv:",IDC_STATIC,15,22,228,8 COMBOBOX IDC_THEME_THEMECOMBO,8,18,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_THEME_THEMECOMBO,15,30,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Motiv installieren...",IDC_THEME_INSTALL,152,32,100,14
LTEXT "Farbe:",IDC_THEME_COLORTEXT,15,48,228,8 LTEXT "Farbe:",IDC_THEME_COLORTEXT,8,48,244,8
COMBOBOX IDC_THEME_COLORCOMBO,15,56,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_THEME_COLORCOMBO,8,56,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Gre:",IDC_THEME_SIZETEXT,15,74,228,8 LTEXT "Gre:",IDC_THEME_SIZETEXT,8,74,244,8
COMBOBOX IDC_THEME_SIZECOMBO,15,82,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_THEME_SIZECOMBO,8,82,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
...@@ -195,4 +195,6 @@ BEGIN ...@@ -195,4 +195,6 @@ BEGIN
IDS_TAB_AUDIO "Audio" IDS_TAB_AUDIO "Audio"
IDS_TAB_ABOUT "ber" IDS_TAB_ABOUT "ber"
IDS_WINECFG_TITLE "Wine-Konfiguration" IDS_WINECFG_TITLE "Wine-Konfiguration"
IDS_THEMEFILE "Motiv-Dateien"
IDS_THEMEFILE_SELECT "Motiv-Datei auswhlen"
END END
...@@ -173,13 +173,13 @@ IDD_APPEARANCE DIALOG DISCARDABLE 0, 0, 260, 250 ...@@ -173,13 +173,13 @@ IDD_APPEARANCE DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
GROUPBOX " Theming ",IDC_STATIC,8,10,244,94 LTEXT "Theme:",IDC_STATIC,8,10,244,8
LTEXT "Theme:",IDC_STATIC,15,22,228,8 COMBOBOX IDC_THEME_THEMECOMBO,8,18,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_THEME_THEMECOMBO,15,30,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Install theme...",IDC_THEME_INSTALL,152,32,100,14
LTEXT "Color:",IDC_THEME_COLORTEXT,15,48,228,8 LTEXT "Color:",IDC_THEME_COLORTEXT,8,48,244,8
COMBOBOX IDC_THEME_COLORCOMBO,15,56,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_THEME_COLORCOMBO,8,56,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Size:",IDC_THEME_SIZETEXT,15,74,228,8 LTEXT "Size:",IDC_THEME_SIZETEXT,8,74,244,8
COMBOBOX IDC_THEME_SIZECOMBO,15,82,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_THEME_SIZECOMBO,8,82,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
...@@ -197,6 +197,8 @@ BEGIN ...@@ -197,6 +197,8 @@ BEGIN
IDS_TAB_AUDIO "Audio" IDS_TAB_AUDIO "Audio"
IDS_TAB_ABOUT "About" IDS_TAB_ABOUT "About"
IDS_WINECFG_TITLE "Wine configuration" IDS_WINECFG_TITLE "Wine configuration"
IDS_THEMEFILE "Theme files"
IDS_THEMEFILE_SELECT "Select a theme file"
END END
...@@ -240,11 +242,11 @@ IDD_APPEARANCE DIALOG DISCARDABLE 0, 0, 260, 250 ...@@ -240,11 +242,11 @@ IDD_APPEARANCE DIALOG DISCARDABLE 0, 0, 260, 250
STYLE WS_CHILD | WS_DISABLED STYLE WS_CHILD | WS_DISABLED
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg"
BEGIN BEGIN
GROUPBOX " Theming ",IDC_STATIC,8,10,244,94 LTEXT "Theme:",IDC_STATIC,8,10,244,8
LTEXT "Theme:",IDC_STATIC,15,22,228,8 COMBOBOX IDC_THEME_THEMECOMBO,8,18,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_THEME_THEMECOMBO,15,30,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Install theme...",IDC_THEME_INSTALL,152,32,100,14
LTEXT "Colour:",IDC_THEME_COLORTEXT,15,48,228,8 LTEXT "Colour:",IDC_THEME_COLORTEXT,8,48,244,8
COMBOBOX IDC_THEME_COLORCOMBO,15,56,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_THEME_COLORCOMBO,8,56,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Size:",IDC_THEME_SIZETEXT,15,74,228,8 LTEXT "Size:",IDC_THEME_SIZETEXT,8,74,244,8
COMBOBOX IDC_THEME_SIZECOMBO,15,82,228,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_THEME_SIZECOMBO,8,82,244,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END END
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
#define IDS_TAB_AUDIO 11 #define IDS_TAB_AUDIO 11
#define IDS_TAB_ABOUT 12 #define IDS_TAB_ABOUT 12
#define IDS_WINECFG_TITLE 13 #define IDS_WINECFG_TITLE 13
#define IDS_THEMEFILE 14
#define IDS_THEMEFILE_SELECT 15
#define IDD_MAINDLG 101 #define IDD_MAINDLG 101
#define IDB_WINE 104 #define IDB_WINE 104
#define IDD_ABOUTCFG 107 #define IDD_ABOUTCFG 107
...@@ -146,3 +148,4 @@ ...@@ -146,3 +148,4 @@
#define IDC_THEME_SIZECOMBO 1403 #define IDC_THEME_SIZECOMBO 1403
#define IDC_THEME_SIZETEXT 1404 #define IDC_THEME_SIZETEXT 1404
#define IDC_THEME_THEMECOMBO 1405 #define IDC_THEME_THEMECOMBO 1405
#define IDC_THEME_INSTALL 1406
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <uxtheme.h> #include <uxtheme.h>
#include <tmschema.h> #include <tmschema.h>
#include <shlobj.h> #include <shlobj.h>
#include <shlwapi.h>
#include <wine/debug.h> #include <wine/debug.h>
#include "resource.h" #include "resource.h"
...@@ -468,6 +469,103 @@ static void apply_theme(HWND dialog) ...@@ -468,6 +469,103 @@ static void apply_theme(HWND dialog)
theme_dirty = FALSE; theme_dirty = FALSE;
} }
static void on_theme_install(HWND dialog)
{
static const WCHAR filterMask[] = {0,'*','.','m','s','s','t','y','l','e','s',0,0};
const int filterMaskLen = sizeof(filterMask)/sizeof(filterMask[0]);
OPENFILENAMEW ofn;
WCHAR filetitle[MAX_PATH];
WCHAR file[MAX_PATH];
WCHAR filter[100];
WCHAR title[100];
LoadStringW (GetModuleHandle (NULL), IDS_THEMEFILE,
filter, sizeof (filter) / sizeof (filter[0]) - filterMaskLen);
memcpy (filter + lstrlenW (filter), filterMask,
filterMaskLen * sizeof (WCHAR));
LoadStringW (GetModuleHandle (NULL), IDS_THEMEFILE_SELECT,
title, sizeof (title) / sizeof (title[0]));
ofn.lStructSize = sizeof(OPENFILENAMEW);
ofn.hwndOwner = 0;
ofn.hInstance = 0;
ofn.lpstrFilter = filter;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
ofn.lpstrFile = file;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(file)/sizeof(filetitle[0]);
ofn.lpstrFileTitle = filetitle;
ofn.lpstrFileTitle[0] = '\0';
ofn.nMaxFileTitle = sizeof(filetitle)/sizeof(filetitle[0]);
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = title;
ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
if (GetOpenFileNameW(&ofn))
{
static const WCHAR themesSubdir[] = { '\\','T','h','e','m','e','s',0 };
static const WCHAR backslash[] = { '\\',0 };
WCHAR themeFilePath[MAX_PATH];
SHFILEOPSTRUCTW shfop;
if (FAILED (SHGetFolderPathW (NULL, CSIDL_RESOURCES, NULL,
SHGFP_TYPE_CURRENT, themeFilePath))) return;
PathRemoveExtensionW (filetitle);
/* Construct path into which the theme file goes */
lstrcatW (themeFilePath, themesSubdir);
lstrcatW (themeFilePath, backslash);
lstrcatW (themeFilePath, filetitle);
/* Create the directory */
SHCreateDirectoryExW (dialog, themeFilePath, NULL);
/* Append theme file name itself */
lstrcatW (themeFilePath, backslash);
lstrcatW (themeFilePath, PathFindFileNameW (file));
/* SHFileOperation() takes lists as input, so double-nullterminate */
themeFilePath[lstrlenW (themeFilePath)+1] = 0;
file[lstrlenW (file)+1] = 0;
/* Do the copying */
WINE_TRACE("copying: %s -> %s\n", wine_dbgstr_w (file),
wine_dbgstr_w (themeFilePath));
shfop.hwnd = dialog;
shfop.wFunc = FO_COPY;
shfop.pFrom = file;
shfop.pTo = themeFilePath;
shfop.fFlags = FOF_NOCONFIRMMKDIR;
if (SHFileOperationW (&shfop) == 0)
{
scan_theme_files();
if (!fill_theme_list (GetDlgItem (dialog, IDC_THEME_THEMECOMBO),
GetDlgItem (dialog, IDC_THEME_COLORCOMBO),
GetDlgItem (dialog, IDC_THEME_SIZECOMBO)))
{
SendMessageW (GetDlgItem (dialog, IDC_THEME_COLORCOMBO), CB_SETCURSEL, (WPARAM)-1, 0);
SendMessageW (GetDlgItem (dialog, IDC_THEME_SIZECOMBO), CB_SETCURSEL, (WPARAM)-1, 0);
enable_size_and_color_controls (dialog, FALSE);
}
else
{
enable_size_and_color_controls (dialog, TRUE);
}
}
else
WINE_TRACE("copy operation failed\n");
}
else WINE_TRACE("user cancelled\n");
}
INT_PTR CALLBACK INT_PTR CALLBACK
ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
...@@ -500,6 +598,16 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) ...@@ -500,6 +598,16 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
default: default:
break; break;
} }
switch (LOWORD(wParam))
{
case IDC_THEME_INSTALL:
if (HIWORD(wParam) != BN_CLICKED) break;
on_theme_install (hDlg);
break;
default:
break;
}
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment