Docking: fix all red formating warnings for DockCont and DockableCtrl.

This commit is contained in:
Zbigniew Rębacz 2026-02-15 11:19:40 +01:00
parent 6aa7ec52f9
commit ce2ed1a301
4 changed files with 278 additions and 283 deletions

View file

@ -17,18 +17,12 @@ void ImgButton::Paint(Draw &w)
}
// DockContHandle frame
int DockCont::DockContHandle::GetHandleSize(const DockableCtrl::Style &s) const
int DockCont::DockContHandle::GetHandleSize(const DockableCtrl::Style& s) const
{
return (IsNull(s.title_font) ? DPI(12) : s.title_font.GetCy() + DPI(2))
+ (s.handle_vert ? s.handle_margins.GetWidth() : s.handle_margins.GetHeight());
return (IsNull(s.title_font) ? DPI(12) : s.title_font.GetCy() + DPI(2)) +
(s.handle_vert ? s.handle_margins.GetWidth() : s.handle_margins.GetHeight());
}
/*
void DockCont::DockContHandle::RefreshFocus(bool _focus)
{
if (focus != _focus)
{ focus = _focus; Refresh(); }
}
*/
void DockCont::DockContHandle::FrameLayout(Rect& r)
{
if (!dc || !IsShown()) return;
@ -133,11 +127,11 @@ void DockCont::ChildAdded(Ctrl *child)
{
if (child->GetParent() != this)
return;
else if (DockableCtrl *dc = dynamic_cast<DockableCtrl *>(child)) {
else if (DockableCtrl *dc = dynamic_cast<DockableCtrl*>(child)) {
Value v = ValueCast(dc);
tabbar.InsertKey(0, v, dc->GetTitle(), dc->GetIcon(), dc->GetGroup(), true);
}
else if (DockCont *dc = dynamic_cast<DockCont *>(child)) {
else if (DockCont *dc = dynamic_cast<DockCont*>(child)) {
Value v = ValueCast(dc);
tabbar.InsertKey(0, v, dc->GetTitle(), Null, Null, true);
}
@ -267,9 +261,10 @@ void DockCont::TabDragged(int ix)
void DockCont::TabContext(int ix)
{
MenuBar bar;
DockContMenu menu(base);
DockMenu tabmenu(base);
MenuBar bar;
DockContMenu menu(base);
DockMenu tabmenu(base);
if (ix >= 0) {
Value v = tabbar.GetKey(ix);
if (IsDockCont(v))
@ -396,7 +391,7 @@ void DockCont::Clear()
{
if (tabbar.GetCount()) {
// Copy tabbar values and clear to prevent this being called multple times if child
// if destroyed on closing. pfft
// if destroyed on closing. pfft
Vector<Value> v;
v.SetCount(tabbar.GetCount());
for (int i = 0; i < tabbar.GetCount(); i++)
@ -655,8 +650,9 @@ DockableCtrl * DockCont::Get0(int ix) const
WString DockCont::GetTitle(bool force_count) const
{
if ((IsTabbed() || force_count) && tabbar.GetCount() > 1)
return (WString)Format("%s (%d/%d)", GetCurrent().GetTitle(), tabbar.GetCursor()+1, tabbar.GetCount());
if((IsTabbed() || force_count) && tabbar.GetCount() > 1)
return (WString)Format("%s (%d/%d)", GetCurrent().GetTitle(), tabbar.GetCursor() + 1,
tabbar.GetCount());
return GetCurrent().GetTitle();
}
@ -784,8 +780,8 @@ void DockCont::DockContMenu::MenuClose(DockableCtrl *dc)
void DockCont::Lock(bool lock)
{
tabbar.Crosses(!lock && base && base->HasCloseButtons());
tabbar.WhenDrag = lock ? Callback1<int>() : THISBACK(TabDragged);
tabbar.WhenContext = lock ? Callback1<int>() : THISBACK(TabContext);
tabbar.WhenDrag = lock ? Callback1<int>() : THISBACK(TabDragged);
tabbar.WhenContext = lock ? Callback1<int>() : THISBACK(TabContext);
SyncFrames(lock && !base->IsShowingLockedHandles());
RefreshLayout();
}
@ -829,9 +825,9 @@ DockCont::DockCont()
handle.WhenContext = THISBACK(WindowMenu);
handle.WhenLeftDrag = THISBACK(MoveBegin);
handle.WhenLeftDouble = THISBACK(RestoreCurrent);
close.Tip(t_("Close")) <<= THISBACK(CloseAll);
autohide.Tip(t_("Auto-Hide")) <<= THISBACK(AutoHide);
windowpos.Tip(t_("Window Menu")) <<= THISBACK(WindowMenu);
close.Tip(t_("Close")) <<= THISBACK(CloseAll);
autohide.Tip(t_("Auto-Hide")) <<= THISBACK(AutoHide);
windowpos.Tip(t_("Window Menu")) <<= THISBACK(WindowMenu);
AddFrame(NullFrame());
AddFrame(tabbar);

View file

@ -1,35 +1,30 @@
class DockWindow;
struct ImgButton : public Pusher {
private:
const Value *look;
Image img;
public:
ImgButton() { Transparent(true); }
virtual void Paint(Draw& w);
virtual void MouseEnter(Point p, dword kflags) { Refresh(); Pusher::MouseEnter(p, kflags); }
virtual void MouseLeave() { Refresh(); Pusher::MouseLeave(); }
private:
const Value *look;
Image img;
public:
ImgButton() { Transparent(true); }
virtual void Paint(Draw& w);
virtual void MouseEnter(Point p, dword kflags) { Refresh(); Pusher::MouseEnter(p, kflags); }
virtual void MouseLeave() { Refresh(); Pusher::MouseLeave(); }
ImgButton& SetImage(const Image& _img) { img = _img; Refresh(); return *this; }
ImgButton& SetLook(const Value *_look) { look = _look; Refresh(); return *this; }
ImgButton& SetImage(const Image& _img) { img = _img; Refresh(); return *this; }
ImgButton& SetLook(const Value *_look) { look = _look; Refresh(); return *this; }
};
class DockCont : public ToolWin {
public:
typedef DockCont CLASSNAME;
virtual void RightDown(Point p, dword keyflags) { WindowMenu(); }
virtual void RightDown(Point p, dword keyflags) { WindowMenu(); }
virtual void Layout();
virtual void ChildRemoved(Ctrl *child);
virtual void ChildAdded(Ctrl *child);
virtual bool Key(dword key, int count);
/* virtual void ChildGotFocus() { handle.RefreshFocus(true); TopWindow::ChildGotFocus(); }
virtual void ChildLostFocus() { handle.RefreshFocus(HasFocusDeep()); TopWindow::ChildLostFocus(); }
virtual void GotFocus() { handle.RefreshFocus(true); }
virtual void LostFocus() { handle.RefreshFocus(HasFocusDeep()); } */
public:
enum DockState {
STATE_NONE = -1,
@ -69,138 +64,139 @@ private:
Callback WhenContext;
Callback WhenLeftDrag;
Callback WhenLeftDouble;
DockContHandle() { dc = NULL; /*focus = false;*/ }
DockContHandle() { dc = NULL; }
DockableCtrl *dc;
// bool focus;
virtual void FrameLayout(Rect& r);
virtual void FrameAddSize(Size& sz);
virtual void Paint(Draw& w);
virtual void LeftDrag(Point p, dword keyflags) { /*RefreshFocus(true);*/ WhenLeftDrag(); }
virtual void LeftDouble(Point p, dword keyflags) { /*RefreshFocus(true);*/ WhenLeftDouble(); }
virtual void RightDown(Point p, dword keyflags) { /*RefreshFocus(true);*/ WhenContext(); }
virtual void LeftDrag(Point p, dword keyflags) { WhenLeftDrag(); }
virtual void LeftDouble(Point p, dword keyflags) { WhenLeftDouble(); }
virtual void RightDown(Point p, dword keyflags) { WhenContext(); }
//void RefreshFocus(bool _focus);
int GetHandleSize(const DockableCtrl::Style& s) const;
};
DockState dockstate;
DockTabBar tabbar;
DockContHandle handle;
ImgButton close, autohide, windowpos;
Size usersize;
bool waitsync:1;
bool animating:1;
DockWindow * base;
DockState dockstate;
DockTabBar tabbar;
DockContHandle handle;
ImgButton close, autohide, windowpos;
Size usersize;
bool waitsync:1;
bool animating:1;
DockWindow *base;
const DockableCtrl::Style *style;
// Callbacks
// Tab callbacks
void TabSelected();
void TabDragged(int ix);
void TabContext(int ix);
void TabClosed0(Value v);
void TabClosed(Value v);
void TabsClosed(ValueArray vv);
void TabSelected();
void TabDragged(int ix);
void TabContext(int ix);
void TabClosed0(Value v);
void TabClosed(Value v);
void TabsClosed(ValueArray vv);
// Menus/Buttons
void Float();
void Dock(int align);
void AutoHide();
void AutoHideAlign(int align);
void RestoreCurrent();
void Float();
void Dock(int align);
void AutoHide();
void AutoHideAlign(int align);
void RestoreCurrent();
void CloseAll();
void CloseAll();
DockableCtrl *Get0(int ix) const;
DockableCtrl *GetCurrent0() const { return Get0(tabbar.GetCursor()); }
DockableCtrl* Get0(int ix) const;
DockableCtrl* GetCurrent0() const { return Get0(tabbar.GetCursor()); }
void AddRemoveButton(Ctrl& c, bool state);
bool IsDockAllowed0(int align, const Value& v) const;
void SyncButtons(DockableCtrl& dc);
Ctrl *FindFirstChild() const;
void ChildTitleChanged(Ctrl *child, WString title, Image icon);
void AddRemoveButton(Ctrl& c, bool state);
bool IsDockAllowed0(int align, const Value& v) const;
void SyncButtons(DockableCtrl& dc);
Ctrl* FindFirstChild() const;
void ChildTitleChanged(Ctrl *child, WString title, Image icon);
void State(DockWindow& dock, DockCont::DockState state);
static Ctrl *CtrlCast(const Value& v) { return IsDockCont(v) ? (Ctrl *)ContCast(v) : (Ctrl *)DockCast(v); }
static DockCont *ContCast(const Value& v) { return ValueTo<DockCont *>(v); }
static DockableCtrl *DockCast(const Value& v) { return ValueTo<DockableCtrl *>(v); }
static bool IsDockCont(const Value& v) { return IsType<DockCont *>(v); }
Ctrl *GetCtrl(int ix) const { return CtrlCast(tabbar.GetKey(ix)); }
static Value ValueCast(DockableCtrl *dc) { return RawToValue<DockableCtrl *>(dc); }
static Value ValueCast(DockCont *dc) { return RawToValue<DockCont *>(dc); }
static Ctrl* CtrlCast(const Value& v) { return IsDockCont(v) ? (Ctrl *)ContCast(v) : (Ctrl *)DockCast(v); }
static DockCont* ContCast(const Value& v) { return ValueTo<DockCont *>(v); }
static DockableCtrl* DockCast(const Value& v) { return ValueTo<DockableCtrl *>(v); }
static bool IsDockCont(const Value& v) { return IsType<DockCont *>(v); }
Ctrl* GetCtrl(int ix) const { return CtrlCast(tabbar.GetKey(ix)); }
static Value ValueCast(DockableCtrl *dc) { return RawToValue<DockableCtrl *>(dc); }
static Value ValueCast(DockCont *dc) { return RawToValue<DockCont *>(dc); }
public:
void SetCursor(int ix) { tabbar.SetCursor(ix); TabSelected(); }
void SetCursor(Ctrl& c);
int GetCursor() const { return tabbar.GetCursor(); }
DockableCtrl& Get(int ix) const { return *Get0(ix); }
DockableCtrl& GetCurrent() const { return Get(tabbar.GetCursor()); }
void AddFrom(DockCont& cont, int except = -1);
void SetCursor(int ix) { tabbar.SetCursor(ix); TabSelected(); }
void SetCursor(Ctrl& c);
int GetCursor() const { return tabbar.GetCursor(); }
DockableCtrl& Get(int ix) const { return *Get0(ix); }
DockableCtrl& GetCurrent() const { return Get(tabbar.GetCursor()); }
void AddFrom(DockCont& cont, int except = -1);
int GetCount() const { return tabbar.GetCount(); }
void Clear();
void Clear();
void SortTabs(bool b);
void SortTabs(ValueOrder &sorter);
void SortTabsOnce();
void SortTabsOnce(ValueOrder &sorter);
void SortTabs(bool b);
void SortTabs(ValueOrder &sorter);
void SortTabsOnce();
void SortTabsOnce(ValueOrder &sorter);
virtual void MoveBegin();
virtual void Moving();
virtual void MoveEnd();
virtual void WindowMenu();
virtual void MoveBegin();
virtual void Moving();
virtual void MoveEnd();
virtual void WindowMenu();
void Animate(Rect target, int ticks, int interval = 0);
void Animate(Rect target, int ticks, int interval = 0);
bool IsDocked() const { return dockstate == STATE_DOCKED; }
int GetDockAlign() const;
int GetAutoHideAlign() const;
bool IsFloating() const { return dockstate == STATE_FLOATING; }
bool IsAutoHide() const { return dockstate == STATE_AUTOHIDE; }
bool IsTabbed() const { return dockstate == STATE_TABBED; }
bool IsDockedAny() const { return dockstate != STATE_FLOATING && dockstate != STATE_NONE; }
bool IsHidden() const { return dockstate == STATE_NONE; }
DockState GetDockState() const { return dockstate; }
bool IsDocked() const { return dockstate == STATE_DOCKED; }
int GetDockAlign() const;
int GetAutoHideAlign() const;
bool IsFloating() const { return dockstate == STATE_FLOATING; }
bool IsAutoHide() const { return dockstate == STATE_AUTOHIDE; }
bool IsTabbed() const { return dockstate == STATE_TABBED; }
bool IsDockedAny() const { return dockstate != STATE_FLOATING && dockstate != STATE_NONE; }
bool IsHidden() const { return dockstate == STATE_NONE; }
DockState GetDockState() const { return dockstate; }
void StateNotDocked(DockWindow *dock = NULL) { if (dock) base = dock; dockstate = STATE_NONE; }
void StateDocked(DockWindow& dock) { State(dock, STATE_DOCKED); }
void StateFloating(DockWindow& dock) { State(dock, STATE_FLOATING); Title(GetTitle()); }
void StateAutoHide(DockWindow& dock) { State(dock, STATE_AUTOHIDE); Hide(); }
void StateTabbed(DockWindow& dock) { State(dock, STATE_TABBED); Hide(); }
void StateNotDocked(DockWindow *dock = NULL) { if (dock) base = dock; dockstate = STATE_NONE; }
void StateDocked(DockWindow& dock) { State(dock, STATE_DOCKED); }
void StateFloating(DockWindow& dock) { State(dock, STATE_FLOATING); Title(GetTitle()); }
void StateAutoHide(DockWindow& dock) { State(dock, STATE_AUTOHIDE); Hide(); }
void StateTabbed(DockWindow& dock) { State(dock, STATE_TABBED); Hide(); }
void SetAllDockerPos();
DockWindow *GetDockWindow() const { return base; }
void SyncButtons() { if (GetCount()) SyncButtons(GetCurrent()); }
void SyncTabs(int align, bool text);
void Lock(bool lock);
void SyncFrames();
void SyncFrames(bool hidehandle);
void SignalStateChange();
void SignalStateChange(int from, int to);
DockWindow* GetDockWindow() const { return base; }
void SyncButtons() { if (GetCount()) SyncButtons(GetCurrent()); }
void SyncTabs(int align, bool text);
void Lock(bool lock);
void SyncFrames();
void SyncFrames(bool hidehandle);
void SignalStateChange();
void SignalStateChange(int from, int to);
void Grouping(bool grouping) { tabbar.Grouping(grouping); GroupRefresh(); }
void GroupRefresh();
void GetGroups(Vector<String>& groups);
void Grouping(bool grouping) { tabbar.Grouping(grouping); GroupRefresh(); }
void GroupRefresh();
void GetGroups(Vector<String>& groups);
void WindowButtons(bool menu, bool hide, bool close);
void WindowButtons(bool menu, bool hide, bool close);
void Highlight();
Image GetHighlightImage();
void Highlight();
Image GetHighlightImage();
virtual Size GetMinSize() const;
virtual Size GetMaxSize() const;
virtual Size GetStdSize() const;
Size GetUserSize() const { return usersize; }
void SetUserSize(Size sz) { usersize = sz; }
void SyncUserSize(bool h, bool v);
virtual Size GetMinSize() const;
virtual Size GetMaxSize() const;
virtual Size GetStdSize() const;
Size GetUserSize() const { return usersize; }
void SetUserSize(Size sz) { usersize = sz; }
void SyncUserSize(bool h, bool v);
WString GetTitle(bool force_count = false) const;
void ChildTitleChanged(DockableCtrl &dc);
void ChildTitleChanged(DockCont &dc);
WString GetTitle(bool force_count = false) const;
void ChildTitleChanged(DockableCtrl &dc);
void ChildTitleChanged(DockCont &dc);
bool IsDockAllowed(int align, int dc_ix = -1) const;
bool IsDockAllowed(int align, int dc_ix = -1) const;
virtual void Serialize(Stream& s);
virtual void Serialize(Stream& s);
DockCont();
};

View file

@ -18,8 +18,9 @@ DockableCtrl& DockableCtrl::Set(const Image& _icon, const char *_title, String
bool DockableCtrl::IsHotKey(dword key)
{
return (keycode == key || (keyinfo &&
(key == keyinfo().key[0] || key == keyinfo().key[1] || key == keyinfo().key[2] || key == keyinfo().key[3])));
return (keycode == key ||
(keyinfo && (key == keyinfo().key[0] || key == keyinfo().key[1] ||
key == keyinfo().key[2] || key == keyinfo().key[3])));
}
DockableCtrl& DockableCtrl::SizeHint(const Size& min, const Size& max, const Size& std)
@ -172,8 +173,8 @@ CH_STYLE(DockableCtrl, Style, StyleDefault)
handle_vert = false;
title_font = StdFont();
title_ink[0] = SColorInfoText(); // No focus
title_ink[1] = SColorHighlightText(); // Focus
title_ink[0] = SColorInfoText(); // No focus
title_ink[1] = SColorHighlightText(); // Focus
DockableCtrlImgsLook(close, DockingImg::I_DClosed, 4);
DockableCtrlImgsLook(windowpos, DockingImg::I_DMenud, 4);

View file

@ -25,78 +25,80 @@ public:
enum { TIMEID_HIGHLIGHT = ParentCtrl::TIMEID_COUNT, TIMEID_COUNT };
private:
Size minsize;
Size minsize;
Size maxsize;
Size stdsize;
Image icon;
WString title;
String group;
bool dockable[4];
dword keycode;
KeyInfo&(* keyinfo)();
Image icon;
WString title;
String group;
bool dockable[4];
dword keycode;
KeyInfo& (*keyinfo)();
const Style *style;
void StopHighlight() { Refresh(); }
void StopHighlight() { Refresh(); }
protected:
DockCont *GetContainer() const;
public:
Callback1<Bar&> WhenMenuBar;
Callback WhenState;
virtual void WindowMenu(Bar& bar) { WhenMenuBar(bar); }
virtual void WindowMenu(Bar& bar) { WhenMenuBar(bar); }
const Image& GetIcon() { return icon; }
DockableCtrl& Icon(const Image& m);
DockableCtrl& Title(const char *_title) { return Title((WString)_title); }
DockableCtrl& Title(const WString& _title);
const WString& GetTitle() { return title; }
const Image& GetIcon() { return icon; }
DockableCtrl& Icon(const Image& m);
DockableCtrl& Title(const char *_title) { return Title((WString)_title); }
DockableCtrl& Title(const WString& _title);
const WString& GetTitle() { return title; }
DockableCtrl& Set(const Image& icon, const char *_title, String group = Null);
DockableCtrl& SetHotKey(dword key) { keycode = key; return *this; }
DockableCtrl& SetHotKey(KeyInfo&(*key)()) { keyinfo = key; return *this; }
bool IsHotKey(dword key);
DockableCtrl& Set(const Image& icon, const char *_title, String group = Null);
DockableCtrl& SetHotKey(dword key) { keycode = key; return *this; }
DockableCtrl& SetHotKey(KeyInfo&(*key)()) { keyinfo = key; return *this; }
bool IsHotKey(dword key);
DockableCtrl& SizeHint(const Size& min, const Size& max = Null, const Size& std = Null);
void SetMinSize(Size sz) { minsize = sz; }
void SetMaxSize(Size sz) { maxsize = sz; }
void SetStdSize(Size sz) { stdsize = sz; }
virtual Size GetMinSize() const { return minsize; }
virtual Size GetMaxSize() const { return maxsize.IsNullInstance() ? Ctrl::GetMaxSize() : maxsize; }
virtual Size GetStdSize() const { return stdsize.IsNullInstance() ? minsize : stdsize; }
DockableCtrl& SizeHint(const Size& min, const Size& max = Null, const Size& std = Null);
void SetMinSize(Size sz) { minsize = sz; }
void SetMaxSize(Size sz) { maxsize = sz; }
void SetStdSize(Size sz) { stdsize = sz; }
virtual Size GetMinSize() const { return minsize; }
virtual Size GetMaxSize() const { return maxsize.IsNullInstance() ? Ctrl::GetMaxSize() : maxsize; }
virtual Size GetStdSize() const { return stdsize.IsNullInstance() ? minsize : stdsize; }
DockableCtrl& SetStyle(const Style& s) { style = &s; RefreshParentLayout(); return *this; }
const Style& GetStyle() { return style ? *style : StyleDefault(); }
DockableCtrl& SetStyle(const Style& s) { style = &s; RefreshParentLayout(); return *this; }
const Style& GetStyle() { return style ? *style : StyleDefault(); }
virtual const String& GetGroup() const { return group; }
virtual const String& GetGroup() const { return group; }
virtual DockableCtrl& SetGroup(const String& g);
DockableCtrl& AllowDockAll() { return AllowDockLeft().AllowDockRight().AllowDockTop().AllowDockBottom(); }
DockableCtrl& AllowDockNone() { return AllowDockLeft(false).AllowDockRight(false).AllowDockTop(false).AllowDockBottom(false); }
DockableCtrl& AllowDockLeft(bool v = true) { dockable[0] = v; return *this; }
DockableCtrl& AllowDockTop(bool v = true) { dockable[1] = v; return *this; }
DockableCtrl& AllowDockRight(bool v = true) { dockable[2] = v; return *this; }
DockableCtrl& AllowDockBottom(bool v = true) { dockable[3] = v; return *this; }
DockableCtrl& AllowDock(int a, bool v = true) { ASSERT(a >= 0 && a < 4); dockable[a] = v; return *this; }
bool IsDockAllowed(int a) const { ASSERT(a >= 0 && a < 4); return dockable[a]; }
bool IsDockAllowedLeft() const { return dockable[0]; }
bool IsDockAllowedTop() const { return dockable[1]; }
bool IsDockAllowedRight() const { return dockable[2]; }
bool IsDockAllowedBottom() const { return dockable[3]; }
bool IsDockAllowedAny() const { return dockable[0] || dockable[1] || dockable[2] || dockable[3]; }
bool IsDockAllowedNone() const { return !IsDockAllowedAny(); }
DockableCtrl& AllowDockAll() { return AllowDockLeft().AllowDockRight().AllowDockTop().AllowDockBottom(); }
DockableCtrl& AllowDockNone() { return AllowDockLeft(false).AllowDockRight(false).AllowDockTop(false).AllowDockBottom(false); }
DockableCtrl& AllowDockLeft(bool v = true) { dockable[0] = v; return *this; }
DockableCtrl& AllowDockTop(bool v = true) { dockable[1] = v; return *this; }
DockableCtrl& AllowDockRight(bool v = true) { dockable[2] = v; return *this; }
DockableCtrl& AllowDockBottom(bool v = true) { dockable[3] = v; return *this; }
DockableCtrl& AllowDock(int a, bool v = true) { ASSERT(a >= 0 && a < 4); dockable[a] = v; return *this; }
bool IsDockAllowed(int a) const { ASSERT(a >= 0 && a < 4); return dockable[a]; }
bool IsDockAllowedLeft() const { return dockable[0]; }
bool IsDockAllowedTop() const { return dockable[1]; }
bool IsDockAllowedRight() const { return dockable[2]; }
bool IsDockAllowedBottom() const { return dockable[3]; }
bool IsDockAllowedAny() const { return dockable[0] || dockable[1] || dockable[2] || dockable[3]; }
bool IsDockAllowedNone() const { return !IsDockAllowedAny(); }
bool IsFloating() const;
bool IsDocked() const;
bool IsAutoHide() const;
bool IsTabbed() const;
bool IsHidden() const;
int GetDockAlign() const;
bool IsFloating() const;
bool IsDocked() const;
bool IsAutoHide() const;
bool IsTabbed() const;
bool IsHidden() const;
int GetDockAlign() const;
void Highlight();
void TimedHighlight(int ms);
void Highlight();
void TimedHighlight(int ms);
virtual Value GetSortValue() { return GetTitle(); }
virtual Value GetSortValue() { return GetTitle(); }
DockableCtrl();
};