]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GAboutlyx.C
Change glob() API to accept a dir parameter.
[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
13 // Too hard to make concept checks work with this file
14 #ifdef _GLIBCPP_CONCEPT_CHECKS
15 #undef _GLIBCPP_CONCEPT_CHECKS
16 #endif
17
18 #include "ControlAboutlyx.h"
19 #include "GAboutlyx.h"
20 #include "ghelpers.h"
21 #include "version.h"
22
23 #include <libglademm.h>
24
25 #include <sstream>
26
27 using std::ostringstream;
28 using std::string;
29
30 namespace lyx {
31 namespace frontend {
32
33 namespace {
34
35 enum TranslateState {NORMAL, BEGIN, IN_AT, IN_BOLD, IN_ITALIC};
36
37
38 Glib::ustring translateMarkup(Glib::ustring const & lyxMarkup)
39 {
40         Glib::ustring::const_iterator it = lyxMarkup.begin();
41         Glib::ustring pangoMarkup;
42         TranslateState state = BEGIN;
43         for (; it != lyxMarkup.end(); it++) {
44                 switch (state) {
45                 case BEGIN:
46                         switch (*it) {
47                         case '@':
48                                 state = IN_AT;
49                                 break;
50                         case '\n':
51                                 state = BEGIN;
52                                 pangoMarkup.push_back('\n');
53                                 break;
54                         default:
55                                 state = NORMAL;
56                                 pangoMarkup.push_back(*it);
57                                 break;
58                         }
59                         break;
60                 case IN_AT:
61                         switch (*it) {
62                         case 'b':
63                                 state = IN_BOLD;
64                                 pangoMarkup += "<b>";
65                                 break;
66                         case 'i':
67                                 state = IN_ITALIC;
68                                 pangoMarkup += "<i>";
69                                 break;
70                         case '\n':
71                                 state = BEGIN;
72                                 pangoMarkup.push_back('@');
73                                 pangoMarkup.push_back('\n');
74                                 break;
75                         default:
76                                 state = NORMAL;
77                                 pangoMarkup.push_back('@');
78                                 pangoMarkup.push_back(*it);
79                         }
80                         break;
81                 case IN_BOLD:
82                         switch (*it) {
83                         case '\n':
84                                 state = BEGIN;
85                                 pangoMarkup += "</b>\n";
86                                 break;
87                         default:
88                                 pangoMarkup.push_back(*it);
89                         }
90                         break;
91                 case IN_ITALIC:
92                         switch (*it) {
93                         case '\n':
94                                 state = BEGIN;
95                                 pangoMarkup += "</i>\n";
96                                 break;
97                         default:
98                                 pangoMarkup.push_back(*it);
99                         }
100                         break;
101                 case NORMAL:
102                         switch (*it) {
103                         case '\n':
104                                 state = BEGIN;
105                                 pangoMarkup.push_back('\n');
106                                 break;
107                         default:
108                                 pangoMarkup.push_back(*it);
109                         }
110                 }
111                 switch (*it) {
112                 case '&':
113                         pangoMarkup += "amp;";
114                         break;
115                 case '<':
116                         pangoMarkup.erase(--(pangoMarkup.end()));
117                         pangoMarkup += "&lt;";
118                         break;
119                 case '>':
120                         pangoMarkup.erase(--(pangoMarkup.end()));
121                         pangoMarkup += "&gt;";
122                         break;
123                 default:
124                         break;
125                 }
126         }
127         switch (state) {
128         case IN_AT:
129                 pangoMarkup.push_back('@');
130                 break;
131         case IN_ITALIC:
132                 pangoMarkup += "</i>";
133                 break;
134         case IN_BOLD:
135                 pangoMarkup += "</b>";
136                 break;
137         default:
138                 break;
139         }
140         return pangoMarkup;
141 }
142
143
144 }
145
146
147 GAboutlyx::GAboutlyx(Dialog & parent)
148         : GViewCB<ControlAboutlyx, GViewGladeB>(parent, "About LyX")
149 {
150 }
151
152
153 void GAboutlyx::doBuild()
154 {
155         string const gladeName = findGladeFile("aboutlyx");
156         xml_ = Gnome::Glade::Xml::create(gladeName);
157         Gtk::Label * version;
158         Gtk::Label * credits;
159         Gtk::Label * license;
160         xml_->get_widget("version", version);
161         xml_->get_widget("credits", credits);
162         xml_->get_widget("license", license);
163         std::ostringstream vs;
164         vs << controller().getVersion()
165            << std::endl << lyx_version_info;
166         version->set_text(Glib::locale_to_utf8(vs.str()));
167         std::ostringstream crs;
168         controller().getCredits(crs);
169         credits->set_markup(
170                 translateMarkup(Glib::convert(crs.str(),
171                                               "UTF-8",
172                                               "ISO8859-1")));
173         std::ostringstream ls;
174         ls << controller().getCopyright() << "\n\n"
175            << controller().getLicense() << "\n\n"
176            << controller().getDisclaimer();
177         license->set_text(Glib::locale_to_utf8(ls.str()));
178         Gtk::Button * btn;
179         xml_->get_widget("close_button", btn);
180         setCancel(btn);
181         //btn->signal_clicked().connect(sigc::mem_fun(*this, &GViewBase::onCancel));
182 }
183
184 } // namespace frontend
185 } // namespace lyx