summaryrefslogtreecommitdiff
path: root/plugins/Scriver/src/tabs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Scriver/src/tabs.cpp')
-rw-r--r--plugins/Scriver/src/tabs.cpp258
1 files changed, 134 insertions, 124 deletions
diff --git a/plugins/Scriver/src/tabs.cpp b/plugins/Scriver/src/tabs.cpp
index dbeabcd992..f2ea48ab19 100644
--- a/plugins/Scriver/src/tabs.cpp
+++ b/plugins/Scriver/src/tabs.cpp
@@ -174,24 +174,23 @@ static void ReleaseIcon(int index)
g_dat.tabIconListUsage[i].used = 0;
}
-void ParentWindowData::ActivateChild(HWND child)
+void ParentWindowData::ActivateChild(CMsgDialog *pDlg)
{
+ if (pDlg == nullptr)
+ return;
+
RECT rcChild;
GetChildWindowRect(&rcChild);
- SetWindowPos(child, HWND_TOP, rcChild.left, rcChild.top, rcChild.right - rcChild.left, rcChild.bottom - rcChild.top, 0);
+ SetWindowPos(pDlg->GetHwnd(), HWND_TOP, rcChild.left, rcChild.top, rcChild.right - rcChild.left, rcChild.bottom - rcChild.top, 0);
- int i = GetTabFromHWND(child);
+ int i = GetTabFromHWND(pDlg->GetHwnd());
if (i == -1)
return;
- CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, i);
- if (pDlg == nullptr)
- return;
-
m_hContact = pDlg->m_hContact;
- if (child != m_hwndActive) {
+ if (pDlg->GetHwnd() != m_hwndActive) {
HWND hwndPrev = m_hwndActive;
- m_hwndActive = child;
+ m_hwndActive = pDlg->GetHwnd();
SetupStatusBar(this);
pDlg->UpdateStatusBar();
pDlg->UpdateTitle();
@@ -207,50 +206,55 @@ void ParentWindowData::ActivateChild(HWND child)
SendMessage(m_hwndActive, DM_ACTIVATE, WA_ACTIVE, 0);
}
-void ParentWindowData::AddChild(CMsgDialog *pDlg)
+void ParentWindowData::ActivateChildByIndex(int index)
{
- m_iChildrenCount++;
+ int l = TabCtrl_GetItemCount(m_hwndTabs);
+ if (index < l) {
+ CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, index);
+ if (pDlg != nullptr)
+ ActivateChild(pDlg);
+ }
+ SetFocus(m_hwndActive);
+}
+
+void ParentWindowData::ActivateNextChild(HWND child)
+{
+ int i = GetTabFromHWND(child);
+ int l = TabCtrl_GetItemCount(m_hwndTabs);
+ i = (i + 1) % l;
+ ActivateChild(GetChildFromTab(m_hwndTabs, i));
+ SetFocus(m_hwndActive);
+}
+void ParentWindowData::ActivatePrevChild(HWND child)
+{
+ int i = GetTabFromHWND(child);
+ int l = TabCtrl_GetItemCount(m_hwndTabs);
+ i = (i + l - 1) % l;
+ ActivateChild(GetChildFromTab(m_hwndTabs, i));
+ SetFocus(m_hwndActive);
+}
+
+void ParentWindowData::AddChild(CMsgDialog *pDlg)
+{
TCITEM tci;
tci.mask = TCIF_PARAM | TCIF_IMAGE | TCIF_TEXT;
tci.lParam = (LPARAM)pDlg;
tci.iImage = -1;
tci.pszText = L"";
- TabCtrl_InsertItem(m_hwndTabs, m_iChildrenCount - 1, &tci);
+ TabCtrl_InsertItem(m_hwndTabs, m_iChildrenCount, &tci);
+
+ m_iChildrenCount++;
+
SetWindowPos(pDlg->GetHwnd(), HWND_TOP, childRect.left, childRect.top, childRect.right - childRect.left, childRect.bottom - childRect.top, SWP_HIDEWINDOW);
SendMessage(m_hwnd, WM_SIZE, 0, 0);
EnableThemeDialogTexture(pDlg->GetHwnd(), ETDT_ENABLETAB);
}
-void ParentWindowData::RemoveChild(HWND child)
-{
- int tab = GetTabFromHWND(child);
- if (tab >= 0) {
- TCITEM tci;
- tci.mask = TCIF_PARAM | TCIF_IMAGE;
- TabCtrl_GetItem(m_hwndTabs, tab, &tci);
- TabCtrl_DeleteItem(m_hwndTabs, tab);
- m_iChildrenCount--;
- if (child == m_hwndActive) {
- if (tab == TabCtrl_GetItemCount(m_hwndTabs)) tab--;
- if (tab >= 0)
- ActivateChild(GetChildFromTab(m_hwndTabs, tab)->GetHwnd());
- else
- m_hwndActive = nullptr;
- }
- ReleaseIcon(tci.iImage);
- }
-
- if (m_iChildrenCount != 0)
- SetFocus(m_hwndActive);
- else
- PostMessage(m_hwnd, WM_CLOSE, 0, 0);
-}
-
void ParentWindowData::CloseOtherChilden(CMsgDialog *pChildDlg)
{
- ActivateChild(pChildDlg->GetHwnd());
+ ActivateChild(pChildDlg);
for (int i = m_iChildrenCount - 1; i >= 0; i--) {
CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, i);
@@ -258,39 +262,19 @@ void ParentWindowData::CloseOtherChilden(CMsgDialog *pChildDlg)
pDlg->Close();
}
- ActivateChild(pChildDlg->GetHwnd());
+ ActivateChild(pChildDlg);
}
-void ParentWindowData::ActivateNextChild(HWND child)
+void ParentWindowData::MessageSend(const MessageSendQueueItem &msg)
{
- int i = GetTabFromHWND(child);
- int l = TabCtrl_GetItemCount(m_hwndTabs);
- i = (i + 1) % l;
- ActivateChild(GetChildFromTab(m_hwndTabs, i)->GetHwnd());
- SetFocus(m_hwndActive);
-}
-
-void ParentWindowData::ActivatePrevChild(HWND child)
-{
- int i = GetTabFromHWND(child);
- int l = TabCtrl_GetItemCount(m_hwndTabs);
- i = (i + l - 1) % l;
- ActivateChild(GetChildFromTab(m_hwndTabs, i)->GetHwnd());
- SetFocus(m_hwndActive);
-}
-
-void ParentWindowData::ActivateChildByIndex(int index)
-{
- int l = TabCtrl_GetItemCount(m_hwndTabs);
- if (index < l) {
- CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, index);
+ for (int i = 0; i < m_iChildrenCount; i++) {
+ CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, i);
if (pDlg != nullptr)
- ActivateChild(pDlg->GetHwnd());
+ pDlg->MessageSend(msg);
}
- SetFocus(m_hwndActive);
}
-void ParentWindowData::PopupWindow(HWND hwnd, bool bIncoming)
+void ParentWindowData::PopupWindow(CMsgDialog *pDlg, bool bIncoming)
{
EnableWindow(m_hwnd, TRUE);
if (bIncoming) { /* incoming message */
@@ -299,13 +283,13 @@ void ParentWindowData::PopupWindow(HWND hwnd, bool bIncoming)
ShowWindow(m_hwnd, SW_SHOWMINNOACTIVE);
if (m_iChildrenCount == 1 || (g_dat.flags2.bSwitchToActive && (IsIconic(m_hwnd) || GetForegroundWindow() != m_hwnd)))
- ActivateChild(hwnd);
+ ActivateChild(pDlg);
}
else {
ShowWindow(m_hwnd, IsIconic(m_hwnd) ? SW_SHOWNORMAL : SW_SHOWNA);
if (m_iChildrenCount == 1 || (g_dat.flags2.bSwitchToActive && (IsIconic(m_hwnd) || GetForegroundWindow() != m_hwnd)))
- ActivateChild(hwnd);
+ ActivateChild(pDlg);
SetWindowPos(m_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
@@ -313,10 +297,35 @@ void ParentWindowData::PopupWindow(HWND hwnd, bool bIncoming)
else { /* outgoing message */
ShowWindow(m_hwnd, IsIconic(m_hwnd) ? SW_SHOWNORMAL : SW_SHOW);
SetForegroundWindow(m_hwnd);
- SetFocus(hwnd);
+ SetFocus(pDlg->GetHwnd());
}
}
+void ParentWindowData::RemoveChild(HWND child)
+{
+ int tab = GetTabFromHWND(child);
+ if (tab >= 0) {
+ TCITEM tci;
+ tci.mask = TCIF_PARAM | TCIF_IMAGE;
+ TabCtrl_GetItem(m_hwndTabs, tab, &tci);
+ TabCtrl_DeleteItem(m_hwndTabs, tab);
+ m_iChildrenCount--;
+ if (child == m_hwndActive) {
+ if (tab == TabCtrl_GetItemCount(m_hwndTabs)) tab--;
+ if (tab >= 0)
+ ActivateChild(GetChildFromTab(m_hwndTabs, tab));
+ else
+ m_hwndActive = nullptr;
+ }
+ ReleaseIcon(tci.iImage);
+ }
+
+ if (m_iChildrenCount != 0)
+ SetFocus(m_hwndActive);
+ else
+ PostMessage(m_hwnd, WM_CLOSE, 0, 0);
+}
+
void ParentWindowData::SetContainerWindowStyle()
{
ShowWindow(m_hwndStatus, (flags2.bShowStatusBar) ? SW_SHOW : SW_HIDE);
@@ -359,6 +368,54 @@ void ParentWindowData::StartFlashing()
}
}
+void ParentWindowData::ToggleInfoBar()
+{
+ flags2.bShowInfoBar = !flags2.bShowInfoBar;
+
+ for (int i = 0; i < m_iChildrenCount; i++) {
+ CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, i);
+ if (pDlg)
+ pDlg->SetDialogToType();
+ }
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+}
+
+void ParentWindowData::ToggleStatusBar()
+{
+ flags2.bShowStatusBar = !flags2.bShowStatusBar;
+ ShowWindow(m_hwndStatus, (flags2.bShowStatusBar) ? SW_SHOW : SW_HIDE);
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+}
+
+void ParentWindowData::ToggleTitleBar()
+{
+ flags2.bShowTitleBar = !flags2.bShowTitleBar;
+
+ DWORD ws = GetWindowLongPtr(m_hwnd, GWL_STYLE) & ~(WS_CAPTION);
+ if (flags2.bShowTitleBar)
+ ws |= WS_CAPTION;
+ SetWindowLongPtr(m_hwnd, GWL_STYLE, ws);
+
+ RECT rc;
+ GetWindowRect(m_hwnd, &rc);
+ SetWindowPos(m_hwnd, nullptr, 0, 0, rc.right - rc.left, rc.bottom - rc.top,
+ SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOSENDCHANGING);
+ RedrawWindow(m_hwnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
+}
+
+void ParentWindowData::ToggleToolBar()
+{
+ flags2.bShowToolBar = !flags2.bShowToolBar;
+
+ for (int i = 0; i < m_iChildrenCount; i++) {
+ CMsgDialog *pDlg = GetChildFromTab(m_hwndTabs, i);
+ if (pDlg)
+ pDlg->SetDialogToType();
+ }
+
+ SendMessage(m_hwnd, WM_SIZE, 0, 0);
+}
+
void ParentWindowData::UpdateStatusBar(const StatusBarData &sbd, HWND hwnd)
{
if (m_hwndActive == hwnd) {
@@ -690,8 +747,6 @@ static INT_PTR CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wPara
if (!dat && msg != WM_INITDIALOG)
return FALSE;
- DWORD ws;
-
switch (msg) {
case WM_INITDIALOG:
{
@@ -875,8 +930,8 @@ static INT_PTR CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wPara
int iSel = TabCtrl_GetCurSel(dat->m_hwndTabs);
tci.mask = TCIF_PARAM;
if (TabCtrl_GetItem(dat->m_hwndTabs, iSel, &tci)) {
- CMsgDialog * pDlg = (CMsgDialog *)tci.lParam;
- dat->ActivateChild(pDlg->GetHwnd());
+ CMsgDialog *pDlg = (CMsgDialog *)tci.lParam;
+ dat->ActivateChild(pDlg);
SetFocus(dat->m_hwndActive);
}
}
@@ -973,7 +1028,7 @@ static INT_PTR CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wPara
case WM_ACTIVATE:
if (LOWORD(wParam) == WA_INACTIVE) {
- ws = GetWindowLongPtr(hwndDlg, GWL_EXSTYLE) & ~WS_EX_LAYERED;
+ DWORD ws = GetWindowLongPtr(hwndDlg, GWL_EXSTYLE) & ~WS_EX_LAYERED;
ws |= dat->flags2.bUseTransparency ? WS_EX_LAYERED : 0;
SetWindowLongPtr(hwndDlg, GWL_EXSTYLE, ws);
if (dat->flags2.bUseTransparency)
@@ -981,7 +1036,7 @@ static INT_PTR CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wPara
break;
}
if (dat->m_hwndActive != nullptr) {
- dat->ActivateChild(dat->m_hwndActive);
+ dat->ActivateChild(dat->GetChildFromHWND(dat->m_hwndActive));
g_dat.hFocusWnd = dat->m_hwndActive;
PostMessage(dat->m_hwndActive, DM_SETFOCUS, 0, msg);
}
@@ -989,9 +1044,12 @@ static INT_PTR CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wPara
FlashWindow(hwndDlg, FALSE);
dat->nFlash = 0;
}
- ws = GetWindowLongPtr(hwndDlg, GWL_EXSTYLE) & ~WS_EX_LAYERED;
- ws |= dat->flags2.bUseTransparency ? WS_EX_LAYERED : 0;
- SetWindowLongPtr(hwndDlg, GWL_EXSTYLE, ws);
+
+ {
+ DWORD ws = GetWindowLongPtr(hwndDlg, GWL_EXSTYLE) & ~WS_EX_LAYERED;
+ ws |= dat->flags2.bUseTransparency ? WS_EX_LAYERED : 0;
+ SetWindowLongPtr(hwndDlg, GWL_EXSTYLE, ws);
+ }
if (dat->flags2.bUseTransparency)
SetLayeredWindowAttributes(hwndDlg, RGB(255, 255, 255), (BYTE)(255 - g_dat.activeAlpha), LWA_ALPHA);
break;
@@ -1108,13 +1166,6 @@ static INT_PTR CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wPara
mir_free(dat);
break;
- case DM_SENDMESSAGE:
- for (int i = 0; i < dat->m_iChildrenCount; i++) {
- CMsgDialog * pDlg = GetChildFromTab(dat->m_hwndTabs, i);
- SendMessage(pDlg->GetHwnd(), DM_SENDMESSAGE, wParam, lParam);
- }
- break;
-
case DM_OPTIONSAPPLIED:
dat->flags2 = g_dat.flags2;
dat->SetContainerWindowStyle();
@@ -1127,47 +1178,6 @@ static INT_PTR CALLBACK DlgProcParentWindow(HWND hwndDlg, UINT msg, WPARAM wPara
RedrawWindow(dat->m_hwndStatus, nullptr, nullptr, RDW_ERASE | RDW_INVALIDATE | RDW_UPDATENOW);
break;
- case DM_SWITCHINFOBAR:
- dat->flags2.bShowInfoBar = !dat->flags2.bShowInfoBar;
-
- for (int i = 0; i < dat->m_iChildrenCount; i++) {
- CMsgDialog * pDlg = GetChildFromTab(dat->m_hwndTabs, i);
- SendMessage(pDlg->GetHwnd(), DM_SWITCHINFOBAR, 0, 0);
- }
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- break;
-
- case DM_SWITCHSTATUSBAR:
- dat->flags2.bShowStatusBar = !dat->flags2.bShowStatusBar;
- ShowWindow(dat->m_hwndStatus, (dat->flags2.bShowStatusBar) ? SW_SHOW : SW_HIDE);
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- break;
-
- case DM_SWITCHTOOLBAR:
- dat->flags2.bShowToolBar = !dat->flags2.bShowToolBar;
-
- for (int i = 0; i < dat->m_iChildrenCount; i++) {
- CMsgDialog * pDlg = GetChildFromTab(dat->m_hwndTabs, i);
- SendMessage(pDlg->GetHwnd(), DM_SWITCHTOOLBAR, 0, 0);
- }
-
- SendMessage(hwndDlg, WM_SIZE, 0, 0);
- break;
-
- case DM_SWITCHTITLEBAR:
- dat->flags2.bShowTitleBar = !dat->flags2.bShowTitleBar;
- ws = GetWindowLongPtr(hwndDlg, GWL_STYLE) & ~(WS_CAPTION);
- if (dat->flags2.bShowTitleBar)
- ws |= WS_CAPTION;
-
- SetWindowLongPtr(hwndDlg, GWL_STYLE, ws);
- RECT rc;
- GetWindowRect(hwndDlg, &rc);
- SetWindowPos(hwndDlg, nullptr, 0, 0, rc.right - rc.left, rc.bottom - rc.top,
- SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED | SWP_NOSENDCHANGING);
- RedrawWindow(hwndDlg, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
- break;
-
case DM_CASCADENEWWINDOW:
if ((HWND)wParam != hwndDlg) {
RECT rcThis, rcNew;