]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GAboutlyx.C
Compilation fix.
[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
24
25 namespace {
26
27 enum TranslateState {NORMAL, BEGIN, IN_AT, IN_BOLD, IN_ITALIC};
28
29
30 Glib::ustring translateMarkup(Glib::ustring const & lyxMarkup)
31 {
32         Glib::ustring::const_iterator it = lyxMarkup.begin();
33         Glib::ustring pangoMarkup;
34         TranslateState state = BEGIN;
35         for (; it != lyxMarkup.end(); it++) {
36                 switch (state) {
37                 case BEGIN:
38                         switch (*it) {
39                         case '@':
40                                 state = IN_AT;
41                                 break;
42                         case '\n':
43                                 state = BEGIN;
44                                 pangoMarkup.push_back('\n');
45                                 break;
46                         default:
47                                 state = NORMAL;
48                                 pangoMarkup.push_back(*it);
49                                 break;
50                         }
51                         break;
52                 case IN_AT:
53                         switch (*it) {
54                         case 'b':
55                                 state = IN_BOLD;
56                                 pangoMarkup += "<b>";
57                                 break;
58                         case 'i':
59                                 state = IN_ITALIC;
60                                 pangoMarkup += "<i>";
61                                 break;
62                         case '\n':
63                                 state = BEGIN;
64                                 pangoMarkup.push_back('@');
65                                 pangoMarkup.push_back('\n');
66                                 break;
67                         default:
68                                 state = NORMAL;
69                                 pangoMarkup.push_back('@');
70                                 pangoMarkup.push_back(*it);
71                         }
72                         break;
73                 case IN_BOLD:
74                         switch (*it) {
75                         case '\n':
76                                 state = BEGIN;
77                                 pangoMarkup += "</b>\n";
78                                 break;
79                         default:
80                                 pangoMarkup.push_back(*it);
81                         }
82                         break;
83                 case IN_ITALIC:
84                         switch (*it) {
85                         case '\n':
86                                 state = BEGIN;
87                                 pangoMarkup += "</i>\n";
88                                 break;
89                         default:
90                                 pangoMarkup.push_back(*it);
91                         }
92                         break;
93                 case NORMAL:
94                         switch (*it) {
95                         case '\n':
96                                 state = BEGIN;
97                                 pangoMarkup.push_back('\n');
98                                 break;
99                         default:
100                                 pangoMarkup.push_back(*it);
101                         }
102                 }
103                 switch (*it) {
104                 case '&':
105                         pangoMarkup += "amp;";
106                         break;
107                 case '<':
108                         pangoMarkup.erase(--(pangoMarkup.end()));
109                         pangoMarkup += "&lt;";
110                         break;
111                 case '>':
112                         pangoMarkup.erase(--(pangoMarkup.end()));
113                         pangoMarkup += "&gt;";
114                         break;
115                 default:
116                         break;
117                 }
118         }
119         switch (state) {
120         case IN_AT:
121                 pangoMarkup.push_back('@');
122                 break;
123         case IN_ITALIC:
124                 pangoMarkup += "</i>";
125                 break;
126         case IN_BOLD:
127                 pangoMarkup += "</b>";
128                 break;
129         default:
130                 break;
131         }
132         return pangoMarkup;
133 }
134
135
136 }
137
138
139 GAboutlyx::GAboutlyx(Dialog & parent)
140         : GViewCB<ControlAboutlyx, GViewGladeB>(parent, "About LyX")
141 {
142 }
143
144
145 void GAboutlyx::doBuild()
146 {
147         string const gladeName =
148                 lyx::support::LibFileSearch("glade", "aboutlyx", "glade");
149         xml_ = Gnome::Glade::Xml::create(gladeName);
150         Gtk::Label * version;
151         Gtk::Label * credits;
152         Gtk::Label * license;
153         xml_->get_widget("version", version);
154         xml_->get_widget("credits", credits);
155         xml_->get_widget("license", license);
156         std::ostringstream vs;
157         vs << controller().getVersion()
158            << std::endl << lyx_version_info;
159         version->set_text(Glib::locale_to_utf8(vs.str()));
160         std::ostringstream crs;
161         controller().getCredits(crs);
162         credits->set_markup(translateMarkup(Glib::locale_to_utf8(crs.str())));
163         std::ostringstream ls;
164         ls << controller().getCopyright() << "\n\n"
165            << controller().getLicense() << "\n\n"
166            << controller().getDisclaimer();
167         license->set_text(Glib::locale_to_utf8(ls.str()));
168         Gtk::Button * btn;
169         xml_->get_widget("close_button", btn);
170         btn->signal_clicked().connect(SigC::slot(*this, &GViewBase::onCancel));
171 }