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