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