aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/wndclass/appbarwnd.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/appbarwnd.h')
-rw-r--r--Src/Wasabi/api/wnd/wndclass/appbarwnd.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/appbarwnd.h b/Src/Wasabi/api/wnd/wndclass/appbarwnd.h
new file mode 100644
index 00000000..7b8fba35
--- /dev/null
+++ b/Src/Wasabi/api/wnd/wndclass/appbarwnd.h
@@ -0,0 +1,155 @@
+#ifndef _APPBARWND_H
+#define _APPBARWND_H
+
+#include <bfc/common.h>
+#include <shellapi.h>
+#include <api/wnd/wndclass/clickwnd.h>
+
+#define APPBARWND_PARENT ClickWnd
+
+#define APPBAR_TOP_ENABLED 1
+#define APPBAR_LEFT_ENABLED 2
+#define APPBAR_BOTTOM_ENABLED 4
+#define APPBAR_RIGHT_ENABLED 8
+
+#define APPABR_ALL_ENABLED (APPBAR_TOP_ENABLED|APPBAR_LEFT_ENABLED|APPBAR_BOTTOM_ENABLED|APPBAR_RIGHT_ENABLED)
+
+#define APPBAR_CALLBACK WM_USER + 1010
+
+#define IDT_AUTOHIDE 0x10000
+#define IDT_AUTOUNHIDE 0x10001
+
+#ifdef WIN32
+#define APPBAR_NOTDOCKED -1
+#define APPBAR_LEFT ABE_LEFT
+#define APPBAR_TOP ABE_TOP
+#define APPBAR_RIGHT ABE_RIGHT
+#define APPBAR_BOTTOM ABE_BOTTOM
+#else
+#error port me
+#endif
+
+// todo : dispatch
+class AppBar {
+public:
+ virtual void appbar_dock(int side)=0;
+ virtual int appbar_isDocked()=0;
+ virtual int appbar_getSide()=0;
+ virtual void appbar_setEnabledSides(int mask)=0;
+ virtual int appbar_getEnabledSides()=0;
+ virtual int appbar_isSideEnabled(int side)=0;
+ virtual int appbar_testDock(int x, int y, RECT *dockrect=NULL)=0;
+ virtual int appbar_updateAutoHide()=0;
+ virtual int appbar_updateAlwaysOnTop()=0;
+ virtual int appbar_isHiding()=0;
+ virtual int appbar_wantAutoHide()=0;
+ virtual int appbar_wantAlwaysOnTop()=0;
+ virtual int appbar_isAutoHiding()=0;
+ virtual void appbar_onDock(int side) {}
+ virtual void appbar_onUnDock() {}
+ virtual void appbar_onSlide() {}
+ virtual void appbar_posChanged()=0;
+ virtual int appbar_isSideAutoHideSafe(int side)=0;
+ virtual int appbar_getAutoHideWidthHeight()=0;
+ virtual void appbar_setNoRestore(int no)=0;
+};
+
+// {242CFAA4-31B3-4b01-97C8-2F0A9FFDEF79}
+static const GUID appBarGuid =
+{ 0x242cfaa4, 0x31b3, 0x4b01, { 0x97, 0xc8, 0x2f, 0xa, 0x9f, 0xfd, 0xef, 0x79 } };
+
+class api_region;
+
+// TODO: benski> only class making active use of being derived from this seems to be Layout and GuiObjectWnd
+// maybe just layout ...
+
+class AppBarWnd : public APPBARWND_PARENT, public AppBar {
+ public:
+ AppBarWnd();
+ virtual ~AppBarWnd();
+
+ void appbar_dock(int side);
+ int appbar_isDocked();
+ int appbar_getSide();
+
+ void appbar_setEnabledSides(int mask);
+ int appbar_getEnabledSides();
+ int appbar_isSideEnabled(int side);
+
+ int appbar_testDock(int x, int y, RECT *dockrect=NULL);
+
+ int appbar_updateAutoHide();
+ int appbar_updateAlwaysOnTop();
+
+ int appbar_isSideAutoHideSafe(int side);
+
+ virtual int appbar_wantAutoHide() { return 1; }
+ virtual int appbar_wantAlwaysOnTop() { return 1; }
+
+ int appbar_isHiding();
+ int appbar_isAutoHiding();
+
+ void appbar_posChanged();
+ void appbar_setNoRestore(int no);
+ virtual int appbar_getAutoHideWidthHeight() { return 2; }
+
+ virtual LRESULT wndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
+ virtual void onAfterReinit();
+ virtual void onSetVisible(int show);
+
+ virtual void onRatioChanged();
+
+ private:
+
+ void appBarCallback(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+ int registerWinAppBar();
+ void unregisterWinAppBar();
+ void notifyWinAppBarPosition(int side, RECT rect);
+
+ OSWINDOWHANDLE getCurAutoHide(int side);
+
+ void getDockRect(int side, RECT *rc);
+ void getEdge(int side, RECT *rc);
+ void straightenRect(int side, RECT *r);
+ void updateDocking();
+ void updateSide();
+ void updateTimers();
+ void resetAutoHideSide(int side);
+ void setAutoHideSide(int side);
+ void setAutoHideTimer();
+ void setAutoUnHideTimer();
+ void resetAutoHideTimer();
+ void resetAutoUnHideTimer();
+ void onAutoHideTimer();
+ void onAutoUnHideTimer();
+ void autoHide();
+ void autoUnHide();
+ void slideWindow(RECT *prc);
+ int screenCorner(POINT *pt);
+ void snapAdjust(RECT *r, int way);
+
+ void dock(int side);
+ void unDock();
+
+ void unOwn();
+ void reOwn();
+
+ int m_registered;
+ int m_side;
+ int m_enabled;
+ int m_cur_autohide;
+ int m_cur_side;
+ int m_cur_hiding;
+ OSWINDOWHANDLE m_oldZOrder;
+ int m_destroying;
+ int m_norestore;
+ int m_autohide_timer_set;
+ int m_autounhide_timer_set;
+ int m_sliding;
+ int m_suspended;
+ int m_fs;
+ int m_wahidden;
+};
+
+#endif //_APPBARWND_H \ No newline at end of file