class InfoCtrl : public FrameLR { public: virtual void Paint(Draw& w); virtual void FrameLayout(Rect& r); private: struct Tab { PaintRect info; int width; Tab() { width = 0; } }; Array tab; PaintRect temp; bool right; String defaulttext; TimeCallback temptime; public: void Set(int tab, const PaintRect& info, int width); void Set(int tab, const Value& info, int width); void Set(const PaintRect& info); void Set(const Value& info); void Temporary(const PaintRect& info, int timeoout = 2000); void Temporary(const Value& info, int timeout = 2000); void EndTemporary(); int GetTabCount() const { return tab.GetCount(); } int GetTabOffset(int t) const; int GetRealTabWidth(int tabi, int width) const; void operator=(const String& s) { Set(s); } InfoCtrl& SetDefault(const String& d) { defaulttext = d; Refresh(); return *this; } InfoCtrl& Left(int w); InfoCtrl& Right(int w); typedef InfoCtrl CLASSNAME; InfoCtrl(); }; class StatusBar : public InfoCtrl { public: virtual void FrameLayout(Rect& r); virtual void FrameAddSize(Size& sz); virtual void Paint(Draw& w); public: struct Style : public ChStyle