void Animate(Ctrl& c, const Rect& target, int type = -1); void Animate(Ctrl& c, int x, int y, int cx, int cy, int type = -1); bool CtrlLibDisplayError(const Value& ev); bool EditText(String& s, const char *title, const char *label, int (*filter)(int), int maxlen = 0); bool EditText(String& s, const char *title, const char *label, int maxlen = 0); bool EditText(WString& s, const char *title, const char *label, int (*filter)(int), int maxlen = 0); bool EditText(WString& s, const char *title, const char *label, int maxlen = 0); void Show2(Ctrl& ctrl1, Ctrl& ctrl, bool show = true); void Hide2(Ctrl& ctrl1, Ctrl& ctrl); #ifndef PLATFORM_WINCE //TODO? void UpdateFile(const char *filename); void SelfUpdate(); bool SelfUpdateSelf(); #endif void WindowsList(); void WindowsMenu(Bar& bar); class DelayCallback : public Pte { Callback target; int delay; public: void Invoke(); void operator<<=(Callback x) { target = x; } void SetDelay(int ms) { delay = ms; } Callback Get() { return callback(this, &DelayCallback::Invoke); } Callback operator~() { return Get(); } operator Callback() { return Get(); } DelayCallback() { delay = 2000; } ~DelayCallback() { KillTimeCallback(this); } }; #ifdef PLATFORM_WIN32 struct Win32PrintDlg_; #endif #ifndef PLATFORM_WINCE class PrinterJob { #ifdef PLATFORM_WIN32 One pdlg; #endif #ifdef PLATFORM_X11 Size pgsz; #endif One draw; Vector page; int from, to, current; bool landscape; String name; String options; bool Execute0(bool dodlg); public: Draw& GetDraw(); operator Draw&() { return GetDraw(); } const Vector& GetPages() const { return page; } int operator[](int i) const { return page[i]; } int GetPageCount() const { return page.GetCount(); } bool Execute(); PrinterJob& Landscape(bool b = true) { landscape = b; return *this; } PrinterJob& MinMaxPage(int minpage, int maxpage); PrinterJob& PageCount(int n) { return MinMaxPage(0, n - 1); } PrinterJob& CurrentPage(int currentpage); PrinterJob(const char *name = NULL); ~PrinterJob(); }; #endif #ifdef PLATFORM_X11 class TrayIcon : Ctrl { virtual bool HookProc(XEvent *event); virtual void Paint(Draw& draw); virtual void LeftDown(Point p, dword keyflags); virtual void LeftUp(Point p, dword keyflags); virtual void LeftDouble(Point p, dword keyflags); virtual void RightDown(Point p, dword keyflags); private: void AddToTray(); Window traywin; Image icon; void DoMenu(Bar& bar); void Call(int code, unsigned long d1, unsigned long d2, unsigned long d3); void Message(const char *title, const char *text, int timeout); public: virtual void LeftDown(); virtual void LeftUp(); virtual void LeftDouble(); virtual void Menu(Bar& bar); Callback WhenLeftDown; Callback WhenLeftUp; Callback WhenLeftDouble; Callback1 WhenBar; void Break() { EndLoop(0); } void Run() { EventLoop(this); } void Show(bool b = true); void Hide() { Show(false); } void Info(const char *title, const char *text, int timeout = 10) { Message(title, text, timeout); } void Warning(const char *title, const char *text, int timeout = 10) { Message(title, text, timeout); } void Error(const char *title, const char *text, int timeout = 10) { Message(title, text, timeout); } TrayIcon& Icon(const Image &img) { icon = img; Refresh(); } TrayIcon& Tip(const char *text) { Ctrl::Tip(text); } typedef TrayIcon CLASSNAME; TrayIcon(); }; #endif #ifdef PLATFORM_WIN32 #ifndef PLATFORM_WINCE class TrayIcon : private Ctrl { typedef struct NotifyIconOld { dword sz; HWND hwnd; dword id; dword flags; dword message; HICON icon; char tip[64]; }; typedef struct NotifyIconNew { dword sz; HWND hwnd; dword id; dword flags; dword message; HICON icon; char tip[128]; dword state; dword statemask; char info[256]; dword timeout; char title[64]; dword infoflags; }; Image icon; bool visible; String tip; NotifyIconNew nid; HWND hwnd; virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); void Notify(dword msg); void DoMenu(Bar& bar); void Message(int type, const char *title, const char *text, int timeout = 10); public: virtual void Menu(Bar& bar); virtual void LeftDown(); virtual void LeftUp(); virtual void LeftDouble(); Callback WhenLeftDown; Callback WhenLeftUp; Callback WhenLeftDouble; Callback1 WhenBar; void Show(bool b = true); void Hide() { Show(false); } void Break() { EndLoop(0); } void Run() { EventLoop(this); } void Info(const char *title, const char *text, int timeout = 10) { Message(1, title, text, timeout); } void Warning(const char *title, const char *text, int timeout = 10) { Message(2, title, text, timeout); } void Error(const char *title, const char *text, int timeout = 10) { Message(3, title, text, timeout); } TrayIcon& Icon(const Image &img); TrayIcon& Tip(const char *text); typedef TrayIcon CLASSNAME; TrayIcon(); ~TrayIcon(); }; class FileSelector { protected: struct FileType : Moveable { String name; String ext; }; Vector type; int activetype; String activedir; String defext; bool rdonly; bool multi; bool readonly; bool asking; Vector filename; public: void Serialize(Stream& s); void New() { filename.Clear(); } bool IsNew() const { return filename.IsEmpty(); } bool Execute(bool open, const char *title = NULL); bool ExecuteOpen(const char *title = NULL) { return Execute(true, title); } bool ExecuteSaveAs(const char *title = NULL) { return Execute(false, title); } String Get() const; void Set(const String& s) { filename.At(0) = s; } operator String() const { return Get(); } void operator=(const String& s) { Set(s); } String operator~() const { return Get(); } void operator<<=(const String& s) { Set(s); } int GetCount() const { return filename.GetCount(); } const String& operator[](int i) const { return filename[i]; } bool GetReadOnly() const { return readonly; } String GetActiveDir() const { return activedir; } FileSelector& Type(const char *name, const char *ext); FileSelector& AllFilesType(); FileSelector& ActiveDir(const String& dir) { activedir = dir; return *this; } FileSelector& ActiveType(int i) { activetype = i; return *this; } FileSelector& DefaultExt(const char *ext) { defext = ext; return *this; } FileSelector& Multi(bool b = true) { multi = b; return *this; } FileSelector& ReadOnlyOption(bool b = true) { rdonly = b; return *this; } FileSelector& Asking(bool b = true) { asking = b; return *this; } FileSelector& NoAsking() { return Asking(false); } FileSelector(); }; #endif #endif #ifdef PLATFORM_X11 typedef FileSel FileSelector; #endif class CtrlRetriever { public: struct Item { virtual void Retrieve() = 0; }; private: struct CtrlItem0 : Item { Ctrl *ctrl; }; template struct CtrlItem : CtrlItem0 { T *value; virtual void Retrieve() { *value = ~*ctrl; } }; Array item; public: void Put(Item *newitem) { item.Add(newitem); } template void Put(Ctrl& ctrl, T& val); template CtrlRetriever& operator()(Ctrl& ctrl, T& val) { Put(ctrl, val); return *this; } void Retrieve(); Callback operator<<=(Callback cb); }; template void CtrlRetriever::Put(Ctrl& ctrl, T& val) { CtrlItem *m = new CtrlItem(); m->ctrl = &ctrl; m->value = &val; ctrl <<= val; Put(m); } void UpdateFile(String dst, String src); void MemoryProfileInfo();