core/vgui/vgui_shell_tableau.h
Go to the documentation of this file.
00001 // This is core/vgui/vgui_shell_tableau.h
00002 #ifndef vgui_shell_tableau_h_
00003 #define vgui_shell_tableau_h_
00004 //:
00005 // \file
00006 // \author fsm
00007 // \brief  Tableau to go at the top of one's tableau hierarchy.
00008 //
00009 //  Contains classes:  vgui_shell_tableau  vgui_shell_tableau_new  vgui_shell_tableau_bindings
00010 //
00011 // \verbatim
00012 //  Modifications
00013 //   18 Sept 00 capes@robots. Added set_enable_key_bindings().
00014 //                            Key bindings are OFF by default.
00015 //   07-Aug-2002 K.Y.McGaul - Converted to Doxygen style comments.
00016 // \endverbatim
00017 
00018 #include "vgui_shell_tableau_sptr.h"
00019 
00020 #include <vgui/vgui_composite_tableau.h>
00021 #include <vgui/vgui_clear_tableau_sptr.h>
00022 #include <vgui/vgui_tview_launcher_tableau_sptr.h>
00023 #include <vgui/vgui_event_condition.h>
00024 
00025 
00026 //: Key bindings for vgui_shell_tableau
00027 //
00028 // The events are
00029 //
00030 // - quit (Alt-Q), which exits the application
00031 //
00032 // - close (Alt-W), which closes the window (and exits the application
00033 //   if there is only one window)
00034 //
00035 // The \p set_default_* member functions can be used to change the
00036 // default bindings for all \e future shell tableaux. It will not
00037 // change the bindings of already created tableaux.
00038 //
00039 class vgui_shell_tableau_bindings
00040 {
00041  public:
00042   //:
00043   vgui_shell_tableau_bindings()
00044     : quit( default_quit ), close( default_close ), graph( default_graph ) {}
00045 
00046   //:
00047   vgui_shell_tableau_bindings& set_quit( vgui_event_condition cond )
00048   { quit = cond; return *this; }
00049 
00050   //:
00051   vgui_shell_tableau_bindings& set_close( vgui_event_condition cond )
00052   { close = cond; return *this; }
00053 
00054   vgui_shell_tableau_bindings& set_graph( vgui_event_condition cond )
00055   { graph = cond; return *this; }
00056 
00057   //:
00058   static void set_default_quit( vgui_event_condition cond )
00059   { default_quit = cond; }
00060 
00061   //:
00062   static void set_default_close( vgui_event_condition cond )
00063   { default_close = cond; }
00064 
00065   //:
00066   static void set_default_graph( vgui_event_condition cond )
00067   { default_graph = cond; }
00068 
00069   vgui_event_condition quit;
00070   vgui_event_condition close;
00071   vgui_event_condition graph;
00072 
00073   static vgui_event_condition default_quit;
00074   static vgui_event_condition default_close;
00075   static vgui_event_condition default_graph;
00076 };
00077 
00078 
00079 //:  Tableau to go at the top of one's tableau hierarchy.
00080 //
00081 // A shell tableau is a handy collection of things one often wants
00082 // at the very top of one's tableau hierarchy. It is essentially an
00083 // acetate with m utility tableaux at the bottom :
00084 //
00085 // \verbatim
00086 //    m+n your_tableau_n <--- last user added child.
00087 //    .   ...
00088 //    .   ...
00089 //    m=3 your_tableau_0 <--- first user added child.
00090 // ^  2   clear_tableau
00091 // |  1   quit_tableau
00092 // |  0   tview_launch_tableau <--- first child.
00093 // \endverbatim
00094 class vgui_shell_tableau : public vgui_composite_tableau
00095 {
00096   typedef vgui_shell_tableau_bindings key_bindings_type;
00097 
00098   bool do_quit;
00099   bool enable_key_bindings;
00100   key_bindings_type bindings;
00101   vgui_clear_tableau_sptr clear;
00102   vgui_tview_launcher_tableau_sptr graph;
00103  public:
00104   vgui_shell_tableau() { init(); }
00105 
00106   vgui_shell_tableau(vgui_tableau_sptr const &);
00107   vgui_shell_tableau(vgui_tableau_sptr const &,
00108                      vgui_tableau_sptr const &);
00109   vgui_shell_tableau(vgui_tableau_sptr const &,
00110                      vgui_tableau_sptr const &,
00111                      vgui_tableau_sptr const &);
00112   vgui_shell_tableau(vgui_tableau_sptr const &,
00113                      vgui_tableau_sptr const &,
00114                      vgui_tableau_sptr const &,
00115                      vgui_tableau_sptr const &);
00116 
00117   bool handle(vgui_event const &);
00118   vcl_string type_name() const { return "vgui_shell_tableau"; }
00119 
00120   void get_popup(vgui_popup_params const &, vgui_menu &);
00121   void set_quit(bool on);
00122   void set_enable_key_bindings(bool on);
00123 
00124   vgui_clear_tableau_sptr get_clear() const { return clear; }
00125   vgui_tview_launcher_tableau_sptr get_graph() const { return graph; }
00126 
00127  protected:
00128   ~vgui_shell_tableau();
00129 
00130  private:
00131   void init();
00132 };
00133 
00134 //: Create a smart-pointer to a vgui_shell_tableau.
00135 struct vgui_shell_tableau_new : public vgui_shell_tableau_sptr
00136 {
00137   typedef vgui_shell_tableau_sptr base;
00138   vgui_shell_tableau_new()
00139     : base(new vgui_shell_tableau()) {}
00140   vgui_shell_tableau_new(vgui_tableau_sptr const &a)
00141     : base(new vgui_shell_tableau(a)) {}
00142   vgui_shell_tableau_new(vgui_tableau_sptr const &a,vgui_tableau_sptr const &b)
00143     : base(new vgui_shell_tableau(a, b)) {}
00144   vgui_shell_tableau_new(vgui_tableau_sptr const &a,vgui_tableau_sptr const &b,vgui_tableau_sptr const &c)
00145     : base(new vgui_shell_tableau(a, b, c)) {}
00146   vgui_shell_tableau_new(vgui_tableau_sptr const &a,vgui_tableau_sptr const &b,vgui_tableau_sptr const &c,vgui_tableau_sptr const&d)
00147     : base(new vgui_shell_tableau(a, b, c, d)) {}
00148 };
00149 
00150 #endif // vgui_shell_tableau_h_