// Calterm, the Gnome Terminal frontend for Calculators // Copyright (C) 2001, Sebastian Ritterbusch (Rascal@Ritterbusch.de) // Davide Angelocola // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // #ifndef CALTERM_HPP_INCLUDED #define CALTERM_HPP_INCLUDED #include #include using std::string; using std::vector; #include class Calterm; class MenuEntry; class Calterm { public: // ---------- Constructors --------- Calterm(void); // when using this, you have to use setClientPath later! Calterm(string aClientPath); Calterm(string aWindowName, string aClientPath, int aScrollBackLines=1000, int aScrollPosRight=1, int aCursorBlink=1); Calterm(string aWindowName, string aClientPath, string aClientCommandLineOptions, int aScrollBackLines=1000, int aScrollPosRight=1, int aCursorBlink=1); // ---------- Configuration before start ------- string WindowName(void) const { return iWindowName; } Calterm & setWindowName(string aWindowName) { iWindowName=aWindowName; return *this; } string ClientPath(void) const { return iClientPath; } Calterm & setClientPath(string aClientPath) { iClientPath=aClientPath; return *this; } int ScrollBackLines(void) const { return iScrollBackLines; } Calterm & setScrollBackLines(int aScrollBackLines) { iScrollBackLines=aScrollBackLines; return *this; } int ScrollPosRight(void) const { return iScrollPosRight; } Calterm & setScrollPosRight(int aScrollPosRight) { iScrollPosRight=aScrollPosRight; return *this; } int CursorBlink(void) const { return iCursorBlink; } Calterm & setCursorBlink(int aCursorBlink) { iCursorBlink=aCursorBlink; return *this; } Calterm & addMenu(MenuEntry * a) { iMenuEntries.push_back(a); return *this; } // ---------- Starting the client ------- void start(int *argcP,char ***argvP); // This starts the application // Invoke this method after all // configuration is done. // ---------- Methods after start ------- string do_command(string c,int transparent=0); // sends string to client // and returns result // show in window if // transparent is "on" void send_command(string c); // send command to client // just like user input // ---------- Destructor ---------------- ~Calterm(void); // ---------- Internal data ------------- private: string iWindowName; // Name in titlebar string iClientPath; // Path and name of client program string iClientCommandLineOptions; // Command line options for client int iScrollBackLines; // How many lines in Scrollback buffer int iScrollPosRight; // Where shall the scroll slider be int iCursorBlink; // Shall the cursor blink? Calterm & operator =(const Calterm &) { return *this; } // No assignment allowed GtkWidget *iTerminal; // The terminal widget GtkWidget *iWindow; // The window vector iMenuEntries; // List of dynamically generated // Menuitems }; // // MenuEntry helpers to be used with "addMenu"-method above: // // Generally all helpers have "menu" and "shortcut" (alias accelerator) // parameters. A valid "menu" parameter is "/File/_Open". // // MenuFileSelect(menu,shortcut,title,function) // Creates Menuitem that starts a fileselector-box // with "title". On success the function will be called // with the string of the filename that was choosen. // // MenuFunction(menu,shortcut,function) // Creates a Menuitem which calls the function specified // This should be used for functions which open own windows as well // // MenuShowUrl(menu,shortcut,url) // Creates a Menuitem which opens a browser and displays the url // // MenuSimpleSend(menu,shortcut,send) // Selecting this menuitem sends the string "send" to the client // // MenuGtkFunction(menu,shortcut,function) // Like MenuFunction, but the functions have gtk-parameters // // MenuSeparator(menu) // Inserts a separation-line (just take a dummy name // like "/File/sep1" for the menu-name) // // MenuTop(menu,shortcut) // Inserts a top-menu (left aligned) like "File", "Edit", ... // // MenuTopRightAlign(menu,shortcut) // Inserts a top-menu (right alignment) for "Help" // class MenuEntry { public: MenuEntry(string aMenu,string aShortcut=""); GtkItemFactoryEntry Entry(void); protected: virtual GtkItemFactoryCallback CallBack(void) { return NULL; } virtual guint CallBackAction(void) { return 0; } virtual gchar * ItemType(void) { return ""; } private: string iMenu,iShortcut; }; class MenuFileSelect : public MenuEntry { public: MenuFileSelect(string aMenu,string aShortcut, string aTitle,void (*aFunction)(string,Calterm &)); virtual GtkItemFactoryCallback CallBack(void); virtual guint CallBackAction(void) { return iAction; } virtual gchar * ItemType(void) { return ""; } private: int iAction; }; class MenuFunction : public MenuEntry { public: MenuFunction(string aMenu,string aShortcut, void (*aFunction)(Calterm &)); virtual GtkItemFactoryCallback CallBack(void); virtual guint CallBackAction(void) { return iAction; } virtual gchar * ItemType(void) { return ""; } private: int iAction; }; class MenuShowUrl : public MenuEntry { public: MenuShowUrl(string aMenu,string aShortcut,string aUrl); virtual GtkItemFactoryCallback CallBack(void); virtual guint CallBackAction(void) { return iAction; } virtual gchar * ItemType(void) { return ""; } private: int iAction; }; class MenuSimpleSend : public MenuEntry { public: MenuSimpleSend(string aMenu,string aShortcut,string aSend); virtual GtkItemFactoryCallback CallBack(void); virtual guint CallBackAction(void) { return iAction; } virtual gchar * ItemType(void) { return ""; } private: int iAction; }; class MenuGtkFunction : public MenuEntry { public: MenuGtkFunction(string aMenu,string aShortcut,GtkItemFactoryCallback aCallback) : MenuEntry(aMenu,aShortcut), iCallback(aCallback) {} MenuGtkFunction(string aMenu,string aShortcut,GtkItemFactoryCallback1 aCallback) : MenuEntry(aMenu,aShortcut), iCallback((GtkItemFactoryCallback)aCallback) {} virtual GtkItemFactoryCallback CallBack(void) { return iCallback; } virtual guint CallBackAction(void) { return 0; } virtual gchar * ItemType(void) { return ""; } private: GtkItemFactoryCallback iCallback; }; class MenuSeparator : public MenuEntry { public: MenuSeparator(string aMenu) : MenuEntry(aMenu,"") {} virtual GtkItemFactoryCallback CallBack(void) { return NULL; } virtual guint CallBackAction(void) { return 0; } virtual gchar * ItemType(void) { return ""; } }; class MenuTop : public MenuEntry { public: MenuTop(string aMenu, string aShortcut="") : MenuEntry(aMenu,aShortcut) {} virtual GtkItemFactoryCallback CallBack(void) { return NULL; } virtual guint CallBackAction(void) { return 0; } virtual gchar * ItemType(void) { return ""; } }; class MenuTopRightAlign : public MenuEntry { public: MenuTopRightAlign(string aMenu, string aShortcut="") : MenuEntry(aMenu,aShortcut) {} virtual GtkItemFactoryCallback CallBack(void) { return NULL; } virtual guint CallBackAction(void) { return 0; } virtual gchar * ItemType(void) { return ""; } }; #endif