xoblite™ / Blackbox for Windows bb5 | RC6 preview | 0.25.2.14
http://xoblite.net/
WorkspacesMenuItem Class Reference

#include <WorkspacesMenu.h>

Public Member Functions

 WorkspacesMenuItem (char *pszTitleANSI, wchar_t *pszTitleUnicode, int nDesktop)
 
virtual ~WorkspacesMenuItem ()
 
bool Active (bool bActivate)
 
void UpdateFolder ()
 
void Invoke ()
 
void AddWindow (HWND hWnd)
 
void Attached (Menu *pMenu)
 
void Timer (int nTimer)
 
- Public Member Functions inherited from FolderItem
 FolderItem (Menu *pSubMenu, char *pszTitleANSI, wchar_t *pszTitleUnicode)
 
virtual ~FolderItem ()
 
void Invoke ()
 
void ShowSubMenu ()
 
- Public Member Functions inherited from MenuItem
 MenuItem (int type, char *pszTitleANSI, wchar_t *pszTitleUnicode, char *pszCommand, char *pszArgument, bool isSelected)
 
virtual ~MenuItem ()
 
virtual LRESULT NcHitTest (int x, int y)
 
int IsOver (int x, int y)
 
virtual void Mouse (UINT nMsg, POINT pt)
 
virtual void Invoke (int button)
 
virtual bool IsActive ()
 
virtual char * GetSortString ()
 
virtual void GetItemRect (RECT *r)
 
virtual void GetTitleRect (RECT *r)
 
virtual UINT GetDrawTextFormat ()
 
virtual void SetTitleANSI (char *pszTitleANSI)
 
virtual void SetTitleUnicode (wchar_t *pszTitleUnicode)
 
void AddToSelectionGroup (int group)
 
void ItemSetTimer ()
 
void ItemKillTimer ()
 
virtual void SetWidth (int nWidth)
 
virtual int GetWidth ()
 
virtual void SetHeight (int nHeight)
 
virtual int GetHeight ()
 
virtual void SetPosition (int nLeft, int nTop)
 
virtual void SetSortPriority (int nSortPriority)
 
virtual int GetSortPriority ()
 
virtual LRESULT Command (WPARAM wParam, LPARAM lParam)
 
virtual bool OnUser (int nMessage, WPARAM wParam, LPARAM lParam, LRESULT &lResult)
 
virtual void Moving ()
 
virtual HWND GetWindow ()
 
void ToggleSelected ()
 

Public Attributes

int m_nDesktop
 
int m_nTimer
 
int numberOfTasksOnThisWorkspace
 
- Public Attributes inherited from FolderItem
UINT m_nTimerId
 
- Public Attributes inherited from MenuItem
char * m_pszTitleANSI
 
wchar_t * m_pszTitleUnicode
 
int itemType
 
char * m_pszCommand
 
char * m_pszArgument
 
char * m_pszOriginalTitleANSI
 
wchar_t * m_pszOriginalTitleUnicode
 
bool m_isSelected
 
int m_selectionGroup
 
int m_currentValue
 
int m_minValue
 
int m_maxValue
 
POINT m_mousePos
 
int m_nSortPriority
 
Menum_pParent
 
Menum_pSubMenu
 
int m_nLeft
 
int m_nTop
 
int m_nWidth
 
int m_nHeight
 
bool m_bActive
 
UINT m_nTimerId
 
int m_nLastMouseButton
 

Friends

BOOL CALLBACK CheckTaskEnumProc (HWND hwnd, LPARAM lParam)
 

Additional Inherited Members

- Static Public Member Functions inherited from MenuItem
static bool Compare (MenuItem *pM1, MenuItem *pM2)
 

Constructor & Destructor Documentation

◆ WorkspacesMenuItem()

WorkspacesMenuItem::WorkspacesMenuItem ( char * pszTitleANSI,
wchar_t * pszTitleUnicode,
int nDesktop )
134 : FolderItem(NULL, pszTitleANSI, pszTitleUnicode)
135{
136 m_nDesktop = nDesktop;
137 m_nTimer = 0;
138}
FolderItem(Menu *pSubMenu, char *pszTitleANSI, wchar_t *pszTitleUnicode)
Definition FolderItem.cpp:43
int m_nDesktop
Definition WorkspacesMenu.h:65
int m_nTimer
Definition WorkspacesMenu.h:66

◆ ~WorkspacesMenuItem()

WorkspacesMenuItem::~WorkspacesMenuItem ( )
virtual
141{
142 m_pParent->RemoveChild(m_pSubMenu);
143 if (m_pSubMenu) delete m_pSubMenu;
144 m_pSubMenu = NULL;
145}
Menu * m_pSubMenu
Definition MenuItem.h:181
Menu * m_pParent
Definition MenuItem.h:180

Member Function Documentation

◆ Active()

bool WorkspacesMenuItem::Active ( bool bActivate)
virtual

Reimplemented from FolderItem.

159{
160 if (bActivate && !m_bActive) UpdateFolder();
161 return FolderItem::Active(bActivate);
162}
bool Active(bool bActivate)
Definition FolderItem.cpp:76
bool m_bActive
Definition MenuItem.h:188
void UpdateFolder()
Definition WorkspacesMenu.cpp:166

◆ UpdateFolder()

void WorkspacesMenuItem::UpdateFolder ( )
167{
168 m_pSubMenu->DeleteMenuItems();
169
171
173 EnumWindows(CheckTaskEnumProc, (LPARAM)this);
174 if (numberOfTasksOnThisWorkspace == 0) pMenuCommon->CreateMenuItem(m_pSubMenu, MENUITEM_NOP, NULL, NULL, "(No tasks on this workspace)", false);
175
177
178 m_pSubMenu->Sort(2,2); // Skip the header+footer items and top+bottom marginWidth padding items...
179
180 m_pSubMenu->Invalidate();
181 m_pSubMenu->Validate();
182}
MenuCommon * pMenuCommon
Definition Blackbox.cpp:41
#define MENUITEM_NOP
Definition MenuItem.h:46
void AddFooterItem(Menu *pMenu, LPSTR pszTitle)
Definition MenuCommon.cpp:813
MenuItem * CreateMenuItem(Menu *pMenu, int itemType, char *pszCommand, char *pszArgument, char *pszTitle, bool isSelected)
Definition MenuCommon.cpp:1065
void AddHeaderItem(Menu *pMenu, LPSTR pszTitle)
Definition MenuCommon.cpp:791
char * m_pszTitleANSI
Definition MenuItem.h:93
friend BOOL CALLBACK CheckTaskEnumProc(HWND hwnd, LPARAM lParam)
Definition WorkspacesMenu.cpp:223
int numberOfTasksOnThisWorkspace
Definition WorkspacesMenu.h:67

◆ Invoke()

void WorkspacesMenuItem::Invoke ( )
150{
152 m_pParent->Hide(HIDE_PARENTS);
154}
Workspaces * pWorkspaces
Definition Blackbox.cpp:51
#define HIDE_PARENTS
Definition Menu.h:41
#define HIDE_CHILDREN
Definition Menu.h:39
void SwitchToWorkspace(int workspace)
Definition Workspaces.cpp:389

◆ AddWindow()

void WorkspacesMenuItem::AddWindow ( HWND hWnd)
187{
188 char pszWindowText[1024], wndstring[10];
189 wchar_t pszWindowTextUnicode[1024];
190
191 // First we get the window title text...
192 GetWindowText(hWnd, pszWindowText, sizeof(pszWindowText));
193 GetWindowTextW(hWnd, pszWindowTextUnicode, sizeof(pszWindowTextUnicode));
194 // ...then we convert its hwnd to a string with hexadecimal format... (pretty cool, eh? :D )
195 _ultoa((unsigned long)hWnd, wndstring, 16);
196 // Finally, we create a normal CommandItem but with the hwnd-string as argument!
197 pMenuCommon->CreateMenuItemUnicode(m_pSubMenu, MENUITEM_COMMAND, "<task_item>", wndstring, pszWindowTextUnicode, false);
198
200}
#define MENUITEM_COMMAND
Definition MenuItem.h:42
MenuItem * CreateMenuItemUnicode(Menu *pMenu, int itemType, char *pszCommand, char *pszArgument, wchar_t *pszTitleUnicode, bool isSelected)
Definition MenuCommon.cpp:1131

◆ Attached()

void WorkspacesMenuItem::Attached ( Menu * pMenu)
virtual

Reimplemented from FolderItem.

203{
205 m_pSubMenu = new Menu(pMenuCommon->hInst);
206 m_pParent->AddChild(m_pSubMenu);
207 m_pSubMenu->SetParent(m_pParent);
208 SetTimer(GetWindow(), WORKSPACES_FOLDER_TIMER, 2000, NULL);
209}
Menu * pMenu
Definition Blackbox.cpp:40
#define WORKSPACES_FOLDER_TIMER
Definition WorkspacesMenu.cpp:44
HINSTANCE hInst
Definition MenuCommon.h:94
virtual HWND GetWindow()
Definition MenuItem.cpp:472

◆ Timer()

void WorkspacesMenuItem::Timer ( int nTimer)
virtual

Reimplemented from FolderItem.

212{
213 FolderItem::Timer(nTimer);
214
215 if (nTimer == WORKSPACES_FOLDER_TIMER && IsWindowVisible(m_pSubMenu->GetWindow()))
216 {
217 UpdateFolder();
218 }
219}
void Timer(int nTimer)
Definition FolderItem.cpp:107

Friends And Related Symbol Documentation

◆ CheckTaskEnumProc

BOOL CALLBACK CheckTaskEnumProc ( HWND hwnd,
LPARAM lParam )
friend
224{
225 if (!IsAppWindow(hwnd)) return true;
226
227 // Check for DWM cloaked windows... (e.g. preloading Windows 10 apps like Microsoft Edge etc, see also Taskbar::CheckCloakedWindow())
228 int cloaked = 0;
229 HRESULT hr = DwmGetWindowAttribute(hwnd, DWMWA_CLOAKED, &cloaked, 4);
230 if ((hr == S_OK) && (cloaked > 0)) return true;
231
232 //====================
233
235
236 if (wmi->m_nDesktop == 255) // -> Minimized tasks
237 {
238 if (IsIconic(hwnd)) wmi->AddWindow(hwnd);
239 }
240 else if (wmi->m_nDesktop == 254) // -> All tasks
241 {
242 wmi->AddWindow(hwnd);
243 }
244 else // -> Tasks on this specific workspace?
245 {
246 if (!IsIconic(hwnd) && (pWorkspaces->GetWorkspaceByWindow(hwnd) == wmi->m_nDesktop)) wmi->AddWindow(hwnd);
247 }
248
249 return true;
250}
bool IsAppWindow(HWND hWnd)
Definition BBApi.cpp:1836
int GetWorkspaceByWindow(HWND window)
Definition Workspaces.cpp:512
WorkspacesMenuItem(char *pszTitleANSI, wchar_t *pszTitleUnicode, int nDesktop)
Definition WorkspacesMenu.cpp:134
void AddWindow(HWND hWnd)
Definition WorkspacesMenu.cpp:186

Member Data Documentation

◆ m_nDesktop

int WorkspacesMenuItem::m_nDesktop

◆ m_nTimer

int WorkspacesMenuItem::m_nTimer

◆ numberOfTasksOnThisWorkspace

int WorkspacesMenuItem::numberOfTasksOnThisWorkspace