1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*
Copyright (C) 2008 Ricardo Pescuma Domenecci
This is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this file; see the file license.txt. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#ifndef __M_SKINS_H__
# define __M_SKINS_H__
#include <windows.h>
#define MIID_SKINS { 0x917db7a4, 0xd0fe, 0x4b1c, { 0x8c, 0xa3, 0x6d, 0xc1, 0x44, 0x80, 0xf5, 0xcc } }
typedef void * SKINNED_DIALOG;
typedef void * SKINNED_FIELD;
typedef void * SKINNED_DIALOG_STATE;
typedef void * SKINNED_FIELD_STATE;
typedef void (*SkinOptionsChangedCallback)(void *param, SKINNED_DIALOG dlg);
#define SKN_HALIGN_LEFT 1
#define SKN_HALIGN_CENTER 2
#define SKN_HALIGN_RIGHT 3
#define SKN_VALIGN_TOP 1
#define SKN_VALIGN_CENTER 2
#define SKN_VALIGN_BOTTOM 3
/// Some common parameters:
/// - name : internal name and name used inside skin file
/// - description : name shown to the user
/// - module : the module name where the settings will be stored
/// Do not translate any parameters.
struct SKIN_INTERFACE
{
int cbSize;
// Global methods
SKINNED_DIALOG (*RegisterDialog)(const char *name, const char *description, const char *module);
void (*DeleteDialog)(SKINNED_DIALOG dlg);
void (*SetSkinChangedCallback)(SKINNED_DIALOG dlg, SkinOptionsChangedCallback cb, void *param);
void (*FinishedConfiguring)(SKINNED_DIALOG dlg);
// Dialog methods
SKINNED_FIELD (*AddTextField)(SKINNED_DIALOG dlg, const char *name, const char *description);
SKINNED_FIELD (*AddIconField)(SKINNED_DIALOG dlg, const char *name, const char *description);
SKINNED_FIELD (*AddImageField)(SKINNED_DIALOG dlg, const char *name, const char *description);
SKINNED_FIELD (*GetField)(SKINNED_DIALOG dlg, const char *name);
void (*SetDialogSize)(SKINNED_DIALOG dlg, int width, int height);
void (*SetInfoInt)(SKINNED_DIALOG dlg, const char *name, int value);
void (*SetInfoDouble)(SKINNED_DIALOG dlg, const char *name, double value);
void (*SetInfoBool)(SKINNED_DIALOG dlg, const char *name, BOOL value);
void (*SetInfoString)(SKINNED_DIALOG dlg, const char *name, const TCHAR *value);
void (*RemoveInfo)(SKINNED_DIALOG dlg, const char *name);
// Field methods
void (*SetEnabled)(SKINNED_FIELD field, BOOL enabled);
void (*SetToolTipA)(SKINNED_FIELD field, const char *tooltip);
void (*SetToolTipW)(SKINNED_FIELD field, const WCHAR *tooltip);
// TextField methods
void (*SetTextA)(SKINNED_FIELD field, const char *text);
void (*SetTextW)(SKINNED_FIELD field, const WCHAR *text);
// IconField methods
void (*SetIcon)(SKINNED_FIELD field, HICON hIcon);
// ImageField methods
void (*SetImage)(SKINNED_FIELD field, HBITMAP hBmp);
// Run the skin and get an state from it
SKINNED_DIALOG_STATE (*Run)(SKINNED_DIALOG dialog);
// Dialog State methods
SKINNED_FIELD_STATE (*GetFieldState)(SKINNED_DIALOG_STATE dlg, const char *name);
RECT (*GetDialogBorders)(SKINNED_DIALOG_STATE dlg);
// Field State methods
RECT (*GetRect)(SKINNED_FIELD_STATE field); // With borders
RECT (*GetInsideRect)(SKINNED_FIELD_STATE field); // Without borders
RECT (*GetRawRect)(SKINNED_FIELD_STATE field); // With borders, without processing to assert inside window
RECT (*GetRawInsideRect)(SKINNED_FIELD_STATE field); // Without borders, without processing to assert inside window
RECT (*GetBorders)(SKINNED_FIELD_STATE field);
BOOL (*IsVisible)(SKINNED_FIELD_STATE field);
char * (*GetToolTipA)(SKINNED_FIELD field); // You have to free the result
WCHAR * (*GetToolTipW)(SKINNED_FIELD field); // You have to free the result
int (*GetHorizontalAlign)(SKINNED_FIELD_STATE field); // one of SKN_HALIGN_*
int (*GetVerticalAlign)(SKINNED_FIELD_STATE field); // one of SKN_VALIGN_*
// TextField State methods
char * (*GetTextA)(SKINNED_FIELD_STATE field); // You have to free the result
WCHAR * (*GetTextW)(SKINNED_FIELD_STATE field); // You have to free the result
HFONT (*GetFont)(SKINNED_FIELD_STATE field);
COLORREF (*GetFontColor)(SKINNED_FIELD_STATE field);
// IconField State methods
HICON (*GetIcon)(SKINNED_FIELD_STATE field);
// ImageField State methods
HBITMAP (*GetImage)(SKINNED_FIELD_STATE field);
};
/*
Skins/GetInterface service
Fill the function pointers for a SKIN_INTERFACE struct
wparam = 0
lparam = (SKIN_INTERFACE *) struct to be filled
returns: 0 on success
*/
#define MS_SKINS_GETINTERFACE "Skins/GetInterface"
static int mir_skins_getInterface(struct SKIN_INTERFACE *dest)
{
dest->cbSize = sizeof(SKIN_INTERFACE);
return CallService(MS_SKINS_GETINTERFACE, 0, (LPARAM) dest);
}
#endif // __M_SKINS_H__
|