/* EcWin7 - Support library for integrating Windows 7 taskbar features * into any Qt application * Copyright (C) 2010 Emanuele Colombo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ECWIN7_H #define ECWIN7_H #include #include // Windows only data definitions #ifdef W7TASKBAR #include #include #define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK // Structs types and enums definitions for Windows 7 taskbar typedef enum THUMBBUTTONMASK { THB_BITMAP = 0x1, THB_ICON = 0x2, THB_TOOLTIP = 0x4, THB_FLAGS = 0x8 } THUMBBUTTONMASK; typedef enum THUMBBUTTONFLAGS { THBF_ENABLED = 0, THBF_DISABLED = 0x1, THBF_DISMISSONCLICK = 0x2, THBF_NOBACKGROUND = 0x4, THBF_HIDDEN = 0x8, THBF_NONINTERACTIVE = 0x10 } THUMBBUTTONFLAGS; typedef struct THUMBBUTTON { THUMBBUTTONMASK dwMask; UINT iId; UINT iBitmap; HICON hIcon; WCHAR szTip[260]; THUMBBUTTONFLAGS dwFlags; } THUMBBUTTON; typedef struct THUMBBUTTON *LPTHUMBBUTTON; typedef enum TBPFLAG { TBPF_NOPROGRESS = 0, TBPF_INDETERMINATE = 0x1, TBPF_NORMAL = 0x2, TBPF_ERROR = 0x4, TBPF_PAUSED = 0x8 } TBPFLAG; typedef IUnknown *HIMAGELIST; // Taskbar interface DECLARE_INTERFACE_(ITaskbarList3,IUnknown) { // IUnknown STDMETHOD(QueryInterface) (THIS_ REFIID riid,void **ppv) PURE; STDMETHOD_(ULONG,AddRef) (THIS) PURE; STDMETHOD_(ULONG,Release) (THIS) PURE; // ITaskbarList STDMETHOD(HrInit) (THIS) PURE; STDMETHOD(AddTab) (THIS_ HWND hwnd) PURE; STDMETHOD(DeleteTab) (THIS_ HWND hwnd) PURE; STDMETHOD(ActivateTab) (THIS_ HWND hwnd) PURE; STDMETHOD(SetActiveAlt) (THIS_ HWND hwnd) PURE; STDMETHOD (MarkFullscreenWindow) (THIS_ HWND hwnd, int fFullscreen) PURE; // ITaskbarList3 STDMETHOD (SetProgressValue) (THIS_ HWND hwnd, ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE; STDMETHOD (SetProgressState) (THIS_ HWND hwnd, TBPFLAG tbpFlags) PURE; STDMETHOD (RegisterTab) (THIS_ HWND hwndTab,HWND hwndMDI) PURE; STDMETHOD (UnregisterTab) (THIS_ HWND hwndTab) PURE; STDMETHOD (SetTabOrder) (THIS_ HWND hwndTab, HWND hwndInsertBefore) PURE; STDMETHOD (SetTabActive) (THIS_ HWND hwndTab, HWND hwndMDI, DWORD dwReserved) PURE; STDMETHOD (ThumbBarAddButtons) (THIS_ HWND hwnd, UINT cButtons, LPTHUMBBUTTON pButton) PURE; STDMETHOD (ThumbBarUpdateButtons) (THIS_ HWND hwnd, UINT cButtons, LPTHUMBBUTTON pButton) PURE; STDMETHOD (ThumbBarSetImageList) (THIS_ HWND hwnd, HIMAGELIST himl) PURE; STDMETHOD (SetOverlayIcon) (THIS_ HWND hwnd, HICON hIcon, LPCWSTR pszDescription) PURE; STDMETHOD (SetThumbnailTooltip) (THIS_ HWND hwnd, LPCWSTR pszTip) PURE; STDMETHOD (SetThumbnailClip) (THIS_ HWND hwnd, RECT *prcClip) PURE; }; typedef ITaskbarList3 *LPITaskbarList3; // ******************************************************************** // EcWin7 class - Windows 7 taskbar handling for Qt and MinGW class EcWin7 { public: // Initialization methods EcWin7(); void init(WId wid); bool winEvent(MSG * message, long * result); // Overlay icon handling void setOverlayIcon(QString iconName, QString description); // Progress indicator handling enum ToolBarProgressState { NoProgress = 0, Indeterminate = 1, Normal = 2, Error = 4, Paused = 8 }; void setProgressValue(int value, int max); void setProgressState(ToolBarProgressState state); private: WId mWindowId; UINT mTaskbarMessageId; ITaskbarList3 *mTaskbar; HICON mOverlayIcon; }; // Windows only data definitions - END #endif #endif // ECWIN7_H