Qt: more of the same warnings killing
[vlc/vlc-skelet.git] / modules / gui / qt4 / main_interface_win32.cpp
blob002ea6556240eb6e52df36eeca381aa0d335e8ff
1 /*****************************************************************************
2 * main_interface.cpp : Main interface
3 ****************************************************************************
4 * Copyright (C) 2006-2010 VideoLAN and AUTHORS
5 * $Id$
7 * Authors: Jean-Baptiste Kempf <jb@videolan.org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22 *****************************************************************************/
25 #include "main_interface.hpp"
27 #include "input_manager.hpp"
28 #include "actions_manager.hpp"
30 #ifdef WIN32
31 #include <QBitmap>
32 #include <vlc_windows_interfaces.h>
34 #define WM_APPCOMMAND 0x0319
36 #define APPCOMMAND_VOLUME_MUTE 8
37 #define APPCOMMAND_VOLUME_DOWN 9
38 #define APPCOMMAND_VOLUME_UP 10
39 #define APPCOMMAND_MEDIA_NEXTTRACK 11
40 #define APPCOMMAND_MEDIA_PREVIOUSTRACK 12
41 #define APPCOMMAND_MEDIA_STOP 13
42 #define APPCOMMAND_MEDIA_PLAY_PAUSE 14
43 #define APPCOMMAND_LAUNCH_MEDIA_SELECT 16
44 #define APPCOMMAND_BASS_DOWN 19
45 #define APPCOMMAND_BASS_BOOST 20
46 #define APPCOMMAND_BASS_UP 21
47 #define APPCOMMAND_TREBLE_DOWN 22
48 #define APPCOMMAND_TREBLE_UP 23
49 #define APPCOMMAND_MICROPHONE_VOLUME_MUTE 24
50 #define APPCOMMAND_MICROPHONE_VOLUME_DOWN 25
51 #define APPCOMMAND_MICROPHONE_VOLUME_UP 26
52 #define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE 43
53 #define APPCOMMAND_MIC_ON_OFF_TOGGLE 44
54 #define APPCOMMAND_MEDIA_PLAY 46
55 #define APPCOMMAND_MEDIA_PAUSE 47
56 #define APPCOMMAND_MEDIA_RECORD 48
57 #define APPCOMMAND_MEDIA_FAST_FORWARD 49
58 #define APPCOMMAND_MEDIA_REWIND 50
59 #define APPCOMMAND_MEDIA_CHANNEL_UP 51
60 #define APPCOMMAND_MEDIA_CHANNEL_DOWN 52
62 #define FAPPCOMMAND_MOUSE 0x8000
63 #define FAPPCOMMAND_KEY 0
64 #define FAPPCOMMAND_OEM 0x1000
65 #define FAPPCOMMAND_MASK 0xF000
67 #define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK))
68 #define GET_DEVICE_LPARAM(lParam) ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK))
69 #define GET_MOUSEORKEY_LPARAM GET_DEVICE_LPARAM
70 #define GET_FLAGS_LPARAM(lParam) (LOWORD(lParam))
71 #define GET_KEYSTATE_LPARAM(lParam) GET_FLAGS_LPARAM(lParam)
73 void MainInterface::createTaskBarButtons()
75 taskbar_wmsg = WM_NULL;
76 /*Here is the code for the taskbar thumb buttons
77 FIXME:We need pretty buttons in 16x16 px that are handled correctly by masks in Qt
78 FIXME:the play button's picture doesn't changed to pause when clicked
81 CoInitialize( 0 );
83 if( S_OK == CoCreateInstance( &clsid_ITaskbarList,
84 NULL, CLSCTX_INPROC_SERVER,
85 &IID_ITaskbarList3,
86 (void **)&p_taskbl) )
88 p_taskbl->vt->HrInit(p_taskbl);
90 if(himl = ImageList_Create( 20, //cx
91 20, //cy
92 ILC_COLOR32,//flags
93 4,//initial nb of images
94 0//nb of images that can be added
97 QPixmap img = QPixmap(":/win7/prev");
98 QPixmap img2 = QPixmap(":/win7/pause");
99 QPixmap img3 = QPixmap(":/win7/play");
100 QPixmap img4 = QPixmap(":/win7/next");
101 QBitmap mask = img.createMaskFromColor(Qt::transparent);
102 QBitmap mask2 = img2.createMaskFromColor(Qt::transparent);
103 QBitmap mask3 = img3.createMaskFromColor(Qt::transparent);
104 QBitmap mask4 = img4.createMaskFromColor(Qt::transparent);
106 if(-1 == ImageList_Add(himl, img.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask.toWinHBITMAP()))
107 msg_Err( p_intf, "ImageList_Add failed" );
108 if(-1 == ImageList_Add(himl, img2.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask2.toWinHBITMAP()))
109 msg_Err( p_intf, "ImageList_Add failed" );
110 if(-1 == ImageList_Add(himl, img3.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask3.toWinHBITMAP()))
111 msg_Err( p_intf, "ImageList_Add failed" );
112 if(-1 == ImageList_Add(himl, img4.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask4.toWinHBITMAP()))
113 msg_Err( p_intf, "ImageList_Add failed" );
116 // Define an array of two buttons. These buttons provide images through an
117 // image list and also provide tooltips.
118 DWORD dwMask = THB_BITMAP | THB_FLAGS;
120 THUMBBUTTON thbButtons[3];
121 thbButtons[0].dwMask = dwMask;
122 thbButtons[0].iId = 0;
123 thbButtons[0].iBitmap = 0;
124 thbButtons[0].dwFlags = THBF_HIDDEN;
126 thbButtons[1].dwMask = dwMask;
127 thbButtons[1].iId = 1;
128 thbButtons[1].iBitmap = 2;
129 thbButtons[1].dwFlags = THBF_HIDDEN;
131 thbButtons[2].dwMask = dwMask;
132 thbButtons[2].iId = 2;
133 thbButtons[2].iBitmap = 3;
134 thbButtons[2].dwFlags = THBF_HIDDEN;
136 HRESULT hr = p_taskbl->vt->ThumbBarSetImageList(p_taskbl, winId(), himl );
137 if(S_OK != hr)
138 msg_Err( p_intf, "ThumbBarSetImageList failed with error %08lx", hr );
139 else
141 hr = p_taskbl->vt->ThumbBarAddButtons(p_taskbl, winId(), 3, thbButtons);
142 if(S_OK != hr)
143 msg_Err( p_intf, "ThumbBarAddButtons failed with error %08lx", hr );
145 CONNECT( THEMIM->getIM(), playingStatusChanged( int ), this, changeThumbbarButtons( int ) );
147 else
149 himl = NULL;
150 p_taskbl = NULL;
155 bool MainInterface::winEvent ( MSG * msg, long * result )
157 if (msg->message == taskbar_wmsg)
159 //We received the taskbarbuttoncreated, now we can really create th buttons
160 createTaskBarButtons();
163 short cmd;
164 switch( msg->message )
166 case WM_COMMAND:
167 if (HIWORD(msg->wParam) == THBN_CLICKED)
169 switch(LOWORD(msg->wParam))
171 case 0:
172 THEMIM->prev();
173 break;
174 case 1:
175 THEMIM->togglePlayPause();
176 break;
177 case 2:
178 THEMIM->next();
179 break;
182 break;
183 case WM_APPCOMMAND:
184 cmd = GET_APPCOMMAND_LPARAM(msg->lParam);
186 if( p_intf->p_sys->disable_volume_keys &&
187 ( cmd == APPCOMMAND_VOLUME_DOWN ||
188 cmd == APPCOMMAND_VOLUME_UP ||
189 cmd == APPCOMMAND_VOLUME_MUTE ) )
191 break;
194 *result = TRUE;
196 switch(cmd)
198 case APPCOMMAND_MEDIA_PLAY_PAUSE:
199 THEMIM->togglePlayPause();
200 break;
201 case APPCOMMAND_MEDIA_PLAY:
202 THEMIM->play();
203 break;
204 case APPCOMMAND_MEDIA_PAUSE:
205 THEMIM->pause();
206 break;
207 case APPCOMMAND_MEDIA_CHANNEL_DOWN:
208 case APPCOMMAND_MEDIA_PREVIOUSTRACK:
209 THEMIM->prev();
210 break;
211 case APPCOMMAND_MEDIA_CHANNEL_UP:
212 case APPCOMMAND_MEDIA_NEXTTRACK:
213 THEMIM->next();
214 break;
215 case APPCOMMAND_MEDIA_STOP:
216 THEMIM->stop();
217 break;
218 case APPCOMMAND_MEDIA_RECORD:
219 THEAM->record();
220 break;
221 case APPCOMMAND_VOLUME_DOWN:
222 THEAM->AudioDown();
223 break;
224 case APPCOMMAND_VOLUME_UP:
225 THEAM->AudioUp();
226 break;
227 case APPCOMMAND_VOLUME_MUTE:
228 THEAM->toggleMuteAudio();
229 break;
230 default:
231 msg_Dbg( p_intf, "unknown APPCOMMAND = %d", cmd);
232 *result = FALSE;
233 break;
235 if (*result) return true;
236 break;
238 return false;
240 #endif
242 //moc doesn't know about #ifdef, so we have to build this method for every platform
243 void MainInterface::changeThumbbarButtons( int i_status)
245 #ifdef WIN32
246 // Define an array of three buttons. These buttons provide images through an
247 // image list and also provide tooltips.
248 DWORD dwMask = THB_BITMAP | THB_FLAGS;
250 THUMBBUTTON thbButtons[3];
251 //prev
252 thbButtons[0].dwMask = dwMask;
253 thbButtons[0].iId = 0;
254 thbButtons[0].iBitmap = 0;
256 //play/pause
257 thbButtons[1].dwMask = dwMask;
258 thbButtons[1].iId = 1;
260 //next
261 thbButtons[2].dwMask = dwMask;
262 thbButtons[2].iId = 2;
263 thbButtons[2].iBitmap = 3;
265 switch( i_status )
267 case OPENING_S:
268 case PLAYING_S:
270 thbButtons[0].dwFlags = THBF_ENABLED;
271 thbButtons[1].dwFlags = THBF_ENABLED;
272 thbButtons[2].dwFlags = THBF_ENABLED;
273 thbButtons[1].iBitmap = 1;
274 break;
276 case END_S:
277 case PAUSE_S:
278 case ERROR_S:
280 thbButtons[0].dwFlags = THBF_ENABLED;
281 thbButtons[1].dwFlags = THBF_ENABLED;
282 thbButtons[2].dwFlags = THBF_ENABLED;
283 thbButtons[1].iBitmap = 2;
284 break;
286 default:
287 return;
289 HRESULT hr = p_taskbl->vt->ThumbBarUpdateButtons(p_taskbl, this->winId(), 3, thbButtons);
290 if(S_OK != hr)
291 msg_Err( p_intf, "ThumbBarUpdateButtons failed with error %08lx", hr );
292 #endif