static void SetupButton(const QAction* action, THUMBBUTTON* button) { if (action) { button->hIcon = action->icon().pixmap(Windows7ThumbBar::kIconSize).toWinHICON(); button->dwFlags = action->isEnabled() ? THBF_ENABLED : THBF_DISABLED; // This is unsafe - doesn't obey 260-char restriction action->text().toWCharArray(button->szTip); button->szTip[action->text().count()] = L'\0'; if (!action->isVisible()) { button->dwFlags = THUMBBUTTONFLAGS(button->dwFlags | THBF_HIDDEN); } button->dwMask = THUMBBUTTONMASK(THB_ICON | THB_TOOLTIP | THB_FLAGS); } else { button->hIcon = 0; button->szTip[0] = L'\0'; button->dwFlags = THBF_NOBACKGROUND; button->dwMask = THUMBBUTTONMASK(THB_FLAGS); } }
void MainInterface::createTaskBarButtons() { taskbar_wmsg = WM_NULL; /*Here is the code for the taskbar thumb buttons FIXME:We need pretty buttons in 16x16 px that are handled correctly by masks in Qt FIXME:the play button's picture doesn't changed to pause when clicked */ CoInitialize( 0 ); if( S_OK == CoCreateInstance( CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, (void **)&p_taskbl) ) { p_taskbl->HrInit(); if( (himl = ImageList_Create( 20, //cx 20, //cy ILC_COLOR32,//flags 4,//initial nb of images 0//nb of images that can be added ) ) != NULL ) { QPixmap img = QPixmap(":/win7/prev"); QPixmap img2 = QPixmap(":/win7/pause"); QPixmap img3 = QPixmap(":/win7/play"); QPixmap img4 = QPixmap(":/win7/next"); QBitmap mask = img.createMaskFromColor(Qt::transparent); QBitmap mask2 = img2.createMaskFromColor(Qt::transparent); QBitmap mask3 = img3.createMaskFromColor(Qt::transparent); QBitmap mask4 = img4.createMaskFromColor(Qt::transparent); if(-1 == ImageList_Add(himl, img.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask.toWinHBITMAP())) msg_Err( p_intf, "First ImageList_Add failed" ); if(-1 == ImageList_Add(himl, img2.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask2.toWinHBITMAP())) msg_Err( p_intf, "Second ImageList_Add failed" ); if(-1 == ImageList_Add(himl, img3.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask3.toWinHBITMAP())) msg_Err( p_intf, "Third ImageList_Add failed" ); if(-1 == ImageList_Add(himl, img4.toWinHBITMAP(QPixmap::PremultipliedAlpha),mask4.toWinHBITMAP())) msg_Err( p_intf, "Fourth ImageList_Add failed" ); } // Define an array of two buttons. These buttons provide images through an // image list and also provide tooltips. THUMBBUTTONMASK dwMask = THUMBBUTTONMASK(THB_BITMAP | THB_FLAGS); THUMBBUTTON thbButtons[3]; thbButtons[0].dwMask = dwMask; thbButtons[0].iId = 0; thbButtons[0].iBitmap = 0; thbButtons[0].dwFlags = THBF_HIDDEN; thbButtons[1].dwMask = dwMask; thbButtons[1].iId = 1; thbButtons[1].iBitmap = 2; thbButtons[1].dwFlags = THBF_HIDDEN; thbButtons[2].dwMask = dwMask; thbButtons[2].iId = 2; thbButtons[2].iBitmap = 3; thbButtons[2].dwFlags = THBF_HIDDEN; HRESULT hr = p_taskbl->ThumbBarSetImageList(winId(), himl ); if(S_OK != hr) msg_Err( p_intf, "ThumbBarSetImageList failed with error %08lx", hr ); else { hr = p_taskbl->ThumbBarAddButtons(winId(), 3, thbButtons); if(S_OK != hr) msg_Err( p_intf, "ThumbBarAddButtons failed with error %08lx", hr ); } CONNECT( THEMIM->getIM(), playingStatusChanged( int ), this, changeThumbbarButtons( int ) ); }