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