#ifndef FRAMEWORK_H #define FRAMEWORK_H class PRIVATE_MESSAGE; #ifndef DIALOG_H #include #endif class FRAMEWORK_MSGS; class FRAMEWORK_INFO: public ARRAY_OBJ{ public: void *data; const char *graphical_context; int nbdocument; FRAMEWORK_MSGS &msgs; int noarea; class _F_FRAMEWORK *c; bool has_focus; // These are message often used by application. // They are generally issue from // the taskdo and menudo functag // The framework issue the taskbar and menubar message to the document // having the focus struct { PRIVATE_MESSAGE save; // Save its data PRIVATE_MESSAGE saveas; // Save its data PRIVATE_MESSAGE close; // The document must close PRIVATE_MESSAGE focus; // This document is now visible // This message is sent by the framework PRIVATE_MESSAGE taskbar; // Sent when a button is hit in the taskbar // taskid hold the id of the button PRIVATE_MESSAGE menubar; // Sent when an entry is selected in the menubar // menuid hold the id of the entry PRIVATE_MESSAGE user[10]; // various messages }docmsgs; int taskid; int menuid; int uithread_id; /*~PROTOBEG~ FRAMEWORK_INFO */ public: FRAMEWORK_INFO (FRAMEWORK_MSGS&_msgs); /*~PROTOEND~ FRAMEWORK_INFO */ }; class FRAMEWORK_INFOS: public ARRAY{ /*~PROTOBEG~ FRAMEWORK_INFOS */ public: FRAMEWORK_INFO *getitem (int no)const; /*~PROTOEND~ FRAMEWORK_INFOS */ }; class FRAMEWORK_DOCUMENT: public ARRAY_OBJ{ public: virtual bool same(const FRAMEWORK_DOCUMENT &other)=0; }; #define _TLMP_FRAMEWORK class _F_FRAMEWORK{ void pushid (char id[10]); void layout_area (int noarea, bool isbook); public: class FRAMEWORK_PRIVATE *priv; void topmenu (const char *title); void helpmenu (); // Open the help menu with about and index // you define other help topics with menuentry // and use endmenu to close void menuentry (int id, const char *title); void submenu (const char *title); void endmenu (); void newbutton(int id, const char *icon, const char *title, const char *help); void newdocument(); void newdocument(void *data, int noarea); void newdocument(void *data); void newdocument(FRAMEWORK_DOCUMENT *data, int noarea); void newdocument(FRAMEWORK_DOCUMENT *data); void end(); void endok(); bool must_end (FRAMEWORK_MSGS &); bool must_end (); bool ismenuid (int menuid); bool istaskid (int menuid); bool isclose (); void waitforall (DIALOG &); void setdocumentid(const char *s, ...); // Helper function for the layout tag void layout_form (); void layout_group (const char *title); void layout_book (); void layout_page (const char *title); void layout_end (); void layout_area1(bool isbook); void layout_area2(bool isbook); void layout_area3(bool isbook); void layout_area4(bool isbook); void layout_area5(bool isbook); void layout_newline(); void layout_dispolast(GUI_H_DISPO,int nbhcell, GUI_V_DISPO, int nbvcell); void layout_cmd(int cmd, const char *ctl, ...); void call_area (int noarea, void *data); #define _F_FRAMEWORK_layout(nom) void nom layout() virtual _F_FRAMEWORK_layout( ); #define _F_FRAMEWORK_menubar(nom) void nom menubar() virtual _F_FRAMEWORK_menubar( ); #define _F_FRAMEWORK_menudo(nom) void nom menudo(int id, FRAMEWORK_INFOS infos[], FRAMEWORK_INFO *focus[]) virtual _F_FRAMEWORK_menudo( ); #define _F_FRAMEWORK_taskbar(nom) void nom taskbar() virtual _F_FRAMEWORK_taskbar( ); #define _F_FRAMEWORK_taskdo(nom) void nom taskdo(int id, FRAMEWORK_INFOS infos[], FRAMEWORK_INFO *focus[]) virtual _F_FRAMEWORK_taskdo( ); #define _F_FRAMEWORK_area1(nom) void nom area1(FRAMEWORK_INFO &info) virtual _F_FRAMEWORK_area1( ); #define _F_FRAMEWORK_area2(nom) void nom area2(FRAMEWORK_INFO &info) virtual _F_FRAMEWORK_area2( ); #define _F_FRAMEWORK_area3(nom) void nom area3(FRAMEWORK_INFO &info) virtual _F_FRAMEWORK_area3( ); #define _F_FRAMEWORK_area4(nom) void nom area4(FRAMEWORK_INFO &info) virtual _F_FRAMEWORK_area4( ); #define _F_FRAMEWORK_area5(nom) void nom area5(FRAMEWORK_INFO &info) virtual _F_FRAMEWORK_area5( ); // document is called if the areaN tag is not defined #define _F_FRAMEWORK_document(nom) void nom document(int noarea, FRAMEWORK_INFO &info) virtual _F_FRAMEWORK_document( ); #define _F_FRAMEWORK_about(nom) void nom about() virtual _F_FRAMEWORK_about( ); #define _F_FRAMEWORK_helpindex(nom) void nom helpindex() virtual _F_FRAMEWORK_helpindex( ); // Called when a message is received #define _F_FRAMEWORK_message(nom) void nom message() virtual _F_FRAMEWORK_message( ); // Called when there is no more document displayed #define _F_FRAMEWORK_nodocument(nom) void nom nodocument(int area, bool &end) virtual _F_FRAMEWORK_nodocument( ); #define _F_FRAMEWORK_status(nom) void nom status(PRIVATE_MESSAGE &ending) virtual _F_FRAMEWORK_status( ); #define _F_FRAMEWORK_messages(nom) void nom messages () virtual _F_FRAMEWORK_messages( ); #define _F_FRAMEWORK_ending(nom) void nom ending (bool &do_not_end) virtual _F_FRAMEWORK_ending( ); }; class FRAMEWORK{ _F_FRAMEWORK *c; /*~PROTOBEG~ FRAMEWORK */ public: FRAMEWORK (_F_FRAMEWORK&_c, const char *title, FRAMEWORK_INFO&info); FRAMEWORK (_F_FRAMEWORK&_c, const char *title, PRIVATE_MESSAGE&msg); FRAMEWORK (_F_FRAMEWORK&_c, FRAMEWORK_INFO&info); FRAMEWORK (_F_FRAMEWORK&_c, const char *title); int getdocumentids (SSTRINGS&tb); private: void init (_F_FRAMEWORK&_c, const char *title, PRIVATE_MESSAGE *msg, FRAMEWORK_INFO *info); public: void loop (void); void manage (void); void newdocument (FRAMEWORK_DOCUMENT *p); void newdocument (FRAMEWORK_DOCUMENT *p, int noarea); void newdocument (void *p); void newdocument (void *p, int noarea); void newdocument (void); private: void sendmsg2focus (int menuid, int taskid); public: void setmsg (PRIVATE_MESSAGE&msg); /*~PROTOEND~ FRAMEWORK */ }; #define _TLMP_guilayout struct _F_guilayout { class GUILAYOUT_PRIVATE *priv; void guiform(); void guigroup(const char *title); void guigroupfit(const char *title); void guibook(); void guiend(); void guinewline(); void guidispolast(GUI_H_DISPO,int nbhcell, GUI_V_DISPO, int nbvcell); void guicmd(int cmd, const char *ctl, ...); // Request the layout to terminate all areas void end(); // Confirm that this area accept to terminate // This is sent when it receives the message "mayend". // It will die later when it will receive the message // "ending". void endok(); // Return the number of document (0 or 1 generally) alive in a given // area. int isareaalive(int noarea); // Indicate where to position the document in the layout // end tells if the document is needed immediatly void setuparea1(bool atstartup); void setuparea2(bool atstartup); void setuparea3(bool atstartup); void setuparea4(bool atstartup); void setuparea5(bool atstartup); void setuparea6(bool atstartup); void setuparea7(bool atstartup); void setuparea8(bool atstartup); void setuparea9(bool atstartup); // Trigger the document in one area void callarea1(); void callarea2(); void callarea3(); void callarea4(); void callarea5(); void callarea6(); void callarea7(); void callarea8(); void callarea9(); #define _F_guilayout_setup(nom) void nom setup() virtual _F_guilayout_setup( )=0; #define _F_guilayout_area1(nom) void nom area1(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area1( )=0; #define _F_guilayout_area2(nom) void nom area2(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area2( )=0; #define _F_guilayout_area3(nom) void nom area3(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area3( ); #define _F_guilayout_area4(nom) void nom area4(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area4( ); #define _F_guilayout_area5(nom) void nom area5(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area5( ); #define _F_guilayout_area6(nom) void nom area6(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area6( ); #define _F_guilayout_area7(nom) void nom area7(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area7( ); #define _F_guilayout_area8(nom) void nom area8(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area8( ); #define _F_guilayout_area9(nom) void nom area9(PRIVATE_MESSAGE &mayend, PRIVATE_MESSAGE &ending) virtual _F_guilayout_area9( ); }; #define _TLMP_aboutbox struct _F_aboutbox{ class aboutbox_private *priv; void setgpl(); void printf (const char *ctl, ...); #define _F_aboutbox_license(x) void x license(const char *name, const char *version) virtual _F_aboutbox_license( )=0; #define _F_aboutbox_authors(x) void x authors(const char *name, const char *version) virtual _F_aboutbox_authors( )=0; #define _F_aboutbox_intro(x) void x intro(const char *name, const char *version) virtual _F_aboutbox_intro( )=0; #define _F_aboutbox_see_also(x) void x see_also(const char *name, const char *version) virtual _F_aboutbox_see_also( ); }; #define _TLMP_statusbar struct _F_statusbar{ class _F_statusbar_private *priv; void settimer(int nbseconds); #define _F_statusbar_layout(x) void x layout(DIALOG &dia) virtual _F_statusbar_layout( )=0; #define _F_statusbar_message(x) void x message(DIALOG &dia) virtual _F_statusbar_message( ); #define _F_statusbar_timer(x) void x timer(DIALOG &dia) virtual _F_statusbar_timer( ); }; #include "framework.pp" #endif