diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/appbarwnd.h')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/appbarwnd.h | 155 |
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 |