]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GAboutlyx.C
Minipage is no more (long live the box inset)
[lyx.git] / src / frontends / gtk / GAboutlyx.C
1 /**
2  * \file GAboutlyx.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Huang Ying
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12 #include <gtkmm.h>
13
14 #include <libglademm.h>
15 #include <sstream>
16
17 #include "ControlAboutlyx.h"
18 #include "GAboutlyx.h"
19 #include "support/filetools.h"
20 #include "version.h"
21
22 using std::ostringstream;
23 using std::string;
24
25
26 namespace {
27
28 enum TranslateState {NORMAL, BEGIN, IN_AT, IN_BOLD, IN_ITALIC};
29
30
31 Glib::ustring translateMarkup(Glib::ustring const & lyxMarkup)
32 {
33         Glib::ustring::const_iterator it = lyxMarkup.begin();
34         Glib::ustring pangoMarkup;
35         TranslateState state = BEGIN;
36         for (; it != lyxMarkup.end(); it++) {
37                 switch (state) {
38                 case BEGIN:
39                         switch (*it) {
40                         case '@':
41                                 state = IN_AT;
42                                 break;
43                         case '\n':
44                                 state = BEGIN;
45                                 pangoMarkup.push_back('\n');
46                                 break;
47                         default:
48                                 state = NORMAL;
49                                 pangoMarkup.push_back(*it);
50                                 break;
51                         }
52                         break;
53                 case IN_AT:
54                         switch (*it) {
55                         case 'b':
56                                 state = IN_BOLD;
57                                 pangoMarkup += "<b>";
58                                 break;
59                         case 'i':
60                                 state = IN_ITALIC;
61                                 pangoMarkup += "<i>";
62                                 break;
63                         case '\n':
64                                 state = BEGIN;
65                                 pangoMarkup.push_back('@');
66                                 pangoMarkup.push_back('\n');
67                                 break;
68                         default:
69                                 state = NORMAL;
70                                 pangoMarkup.push_back('@');
71                                 pangoMarkup.push_back(*it);
72                         }
73                         break;
74                 case IN_BOLD:
75                         switch (*it) {
76                         case '\n':
77                                 state = BEGIN;
78                                 pangoMarkup += "</b>\n";
79                                 break;
80                         default:
81                                 pangoMarkup.push_back(*it);
82                         }
83                         break;
84                 case IN_ITALIC:
85                         switch (*it) {
86                         case '\n':
87                                 state = BEGIN;
88                                 pangoMarkup += "</i>\n";
89                                 break;
90                         default:
91                                 pangoMarkup.push_back(*it);
92                         }
93                         break;
94                 case NORMAL:
95                         switch (*it) {
96                         case '\n':
97                                 state = BEGIN;
98                                 pangoMarkup.push_back('\n');
99                                 break;
100                         default:
101                                 pangoMarkup.push_back(*it);
102                         }
103                 }
104                 switch (*it) {
105                 case '&':
106                         pangoMarkup += "amp;";
107                         break;
108                 case '<':
109                         pangoMarkup.erase(--(pangoMarkup.end()));
110                         pangoMarkup += "&lt;";
111                         break;
112                 case '>':
113                         pangoMarkup.erase(--(pangoMarkup.end()));
114                         pangoMarkup += "&gt;";
115                         break;
116                 default:
117                         break;
118                 }
119         }
120         switch (state) {
121         case IN_AT:
122                 pangoMarkup.push_back('@');
123                 break;
124         case IN_ITALIC:
125                 pangoMarkup += "</i>";
126                 break;
127         case IN_BOLD:
128                 pangoMarkup += "</b>";
129                 break;
130         default:
131                 break;
132         }
133         return pangoMarkup;
134 }
135
136
137 }
138
139
140 GAboutlyx::GAboutlyx(Dialog & parent)
141         : GViewCB<ControlAboutlyx, GViewGladeB>(parent, "About LyX")
142 {
143 }
144
145
146 void GAboutlyx::doBuild()
147 {
148         string const gladeName =
149                 lyx::support::LibFileSearch("glade", "aboutlyx", "glade");
150         xml_ = Gnome::Glade::Xml::create(gladeName);
151         Gtk::Label * version;
152         Gtk::Label * credits;
153         Gtk::Label * license;
154         xml_->get_widget("version", version);
155         xml_->get_widget("credits", credits);
156         xml_->get_widget("license", license);
157         std::ostringstream vs;
158         vs << controller().getVersion()
159            << std::endl << lyx_version_info;
160         version->set_text(Glib::locale_to_utf8(vs.str()));
161         std::ostringstream crs;
162         controller().getCredits(crs);
163         credits->set_markup(translateMarkup(Glib::locale_to_utf8(crs.str())));
164         std::ostringstream ls;
165         ls << controller().getCopyright() << "\n\n"
166            << controller().getLicense() << "\n\n"
167            << controller().getDisclaimer();
168         license->set_text(Glib::locale_to_utf8(ls.str()));
169         Gtk::Button * btn;
170         xml_->get_widget("close_button", btn);
171         btn->signal_clicked().connect(SigC::slot(*this, &GViewBase::onCancel));
172 }