]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GViewBase.h
Wrap most of the frontend code up inside namespace lyx::frontend.
[lyx.git] / src / frontends / gtk / GViewBase.h
1 // -*- C++ -*-
2 /**
3  * \file GViewBase.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Huang Ying
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #ifndef GVIEWBASE_H
13 #define GVIEWBASE_H
14
15 #include <gtkmm.h>
16 #include <libglademm.h>
17 #include <boost/scoped_ptr.hpp>
18 #include "Dialog.h"
19 #include "ButtonPolicies.h"
20 #include "GBC.h"
21
22 namespace lyx {
23 namespace frontend {
24
25 class GViewBase : public Dialog::View, public SigC::Object
26 {
27 public:
28         GViewBase(Dialog &, std::string const &, bool allowResize);
29         virtual ~GViewBase();
30         void setCancel(Gtk::Button * cancel);
31         void setApply(Gtk::Button * apply);
32         void setOK(Gtk::Button * ok);
33         void setRestore(Gtk::Button * restore);
34 protected:
35         // Build the dialog
36         virtual void build();
37         virtual void doBuild() = 0;
38         // Hide the dialog
39         virtual void hide();
40         // Create the dialog if necessary, update it and display it.
41         virtual void show();
42         //
43         virtual bool isVisible() const;
44         GBC & bcview();
45         void onApply();
46         void onOK();
47         void onCancel();
48         void onRestore();
49         bool onDeleteEvent(GdkEventAny *);
50 private:
51         virtual Gtk::Window * window() = 0;
52         virtual Gtk::Window const * window() const = 0;
53         bool allowResize_;
54 };
55
56 template <class Dialog>
57 class GViewDB : public GViewBase
58 {
59 protected:
60         GViewDB(Dialog &, std::string const &, bool allowResize);
61         virtual const Gtk::Window * window() const;
62         virtual Gtk::Window * window();
63         boost::scoped_ptr<Dialog> dialog_;
64 };
65
66
67 template <class Dialog>
68 GViewDB<Dialog>::GViewDB(Dialog & parent, std::string const & t, bool allowResize) :
69         GViewBase(parent, t, allowResize)
70 {
71 }
72
73
74 template <class Dialog>
75 Gtk::Window * GViewDB<Dialog>::window()
76 {
77         return dialog_.get();
78 }
79
80
81 template <class Dialog>
82 const Gtk::Window * GViewDB<Dialog>::window() const
83 {
84         return dialog_.get();
85 }
86
87
88 class GViewGladeB : public GViewBase
89 {
90 protected:
91         GViewGladeB(Dialog & parent, std::string const & t, bool allowResize);
92         virtual const Gtk::Window * window() const;
93         virtual Gtk::Window * window();
94         Glib::RefPtr<Gnome::Glade::Xml> xml_;
95 };
96
97
98 template <class Controller, class Base>
99 class GViewCB : public Base
100 {
101 public:
102         Controller & controller();
103         Controller const & controller() const;
104 protected:
105         GViewCB(Dialog & parent, std::string const & t, bool allowResize = false);
106 };
107
108
109 template <class Controller, class Base>
110 GViewCB<Controller, Base>::GViewCB(Dialog & parent, std::string const & t,
111                                    bool allowResize) :
112         Base(parent, t, allowResize)
113 {
114 }
115
116
117 template <class Controller, class Base>
118 Controller & GViewCB<Controller, Base>::controller()
119 {
120         return static_cast<Controller &>(getController());
121 }
122
123
124 template <class Controller, class Base>
125 Controller const & GViewCB<Controller, Base>::controller() const
126 {
127         return static_cast<Controller const &>(getController());
128 }
129
130 } // namespace frontend
131 } // namespace lyx
132
133 #endif