1 | #include "i18n.h"
|
---|
2 | #include "wrapper.h"
|
---|
3 | #include "../textdrawing/textedit.h"
|
---|
4 |
|
---|
5 | #include <qaction.h>
|
---|
6 | #include <qlayout.h>
|
---|
7 | #include <qvbox.h>
|
---|
8 | #include <qworkspace.h>
|
---|
9 | #include <qpopupmenu.h>
|
---|
10 | #include <qmenubar.h>
|
---|
11 | #include <qtoolbar.h>
|
---|
12 | #include <qtoolbutton.h>
|
---|
13 | #include <qpixmap.h>
|
---|
14 | #include <qiconset.h>
|
---|
15 | #include <qapplication.h>
|
---|
16 | #include <qwidgetlist.h>
|
---|
17 | #include <qlabel.h>
|
---|
18 | #include <qtextedit.h>
|
---|
19 |
|
---|
20 |
|
---|
21 | static int windowIdNumber = 5000;
|
---|
22 | static bool firstShow = TRUE;
|
---|
23 |
|
---|
24 |
|
---|
25 | I18nDemo::I18nDemo(QWidget *parent, const char *name)
|
---|
26 | : QMainWindow(parent, name, 0), lastwrapper(0)
|
---|
27 | {
|
---|
28 | initActions();
|
---|
29 | initMenuBar();
|
---|
30 |
|
---|
31 | QVBox *box = new QVBox(this);
|
---|
32 | box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
|
---|
33 | box->setMargin( 1 );
|
---|
34 | box->setLineWidth( 1 );
|
---|
35 |
|
---|
36 | workspace = new QWorkspace(box);
|
---|
37 | connect(workspace, SIGNAL(windowActivated(QWidget *)),
|
---|
38 | SLOT(windowActivated(QWidget *)));
|
---|
39 | workspace->setBackgroundMode(PaletteMid);
|
---|
40 |
|
---|
41 | setCentralWidget(box);
|
---|
42 | }
|
---|
43 |
|
---|
44 |
|
---|
45 | I18nDemo::~I18nDemo()
|
---|
46 | {
|
---|
47 | }
|
---|
48 |
|
---|
49 |
|
---|
50 | void I18nDemo::initActions()
|
---|
51 | {
|
---|
52 | actionClose = new QAction(tr("Close the current window."),
|
---|
53 | tr("Close"),
|
---|
54 | CTRL + Key_F4,
|
---|
55 | this);
|
---|
56 | connect(actionClose, SIGNAL(activated()), SLOT(closeSlot()));
|
---|
57 |
|
---|
58 | actionCloseAll = new QAction(tr("Close all opened windows."),
|
---|
59 | tr("Close All"),
|
---|
60 | 0,
|
---|
61 | this);
|
---|
62 | connect(actionCloseAll, SIGNAL(activated()), SLOT(closeAllSlot()));
|
---|
63 |
|
---|
64 | actionTile = new QAction(tr("Tile opened windows."),
|
---|
65 | tr("Tile"),
|
---|
66 | 0,
|
---|
67 | this);
|
---|
68 | connect(actionTile, SIGNAL(activated()), SLOT(tileSlot()));
|
---|
69 |
|
---|
70 | actionCascade = new QAction(tr("Cascade opened windows."),
|
---|
71 | tr("Cascade"),
|
---|
72 | 0,
|
---|
73 | this);
|
---|
74 | connect(actionCascade, SIGNAL(activated()), SLOT(cascadeSlot()));
|
---|
75 | }
|
---|
76 |
|
---|
77 |
|
---|
78 | void I18nDemo::initMenuBar()
|
---|
79 | {
|
---|
80 | newMenu = new QPopupMenu(this);
|
---|
81 | connect(newMenu, SIGNAL(activated(int)), SLOT(newSlot(int)));
|
---|
82 |
|
---|
83 | newMenu->insertItem("&English", 0);
|
---|
84 | newMenu->insertItem("&Japanese", 1);
|
---|
85 | newMenu->insertItem("&Korean", 2);
|
---|
86 | newMenu->insertItem("&Norwegian", 3);
|
---|
87 |
|
---|
88 | windowMenu = new QPopupMenu(this);
|
---|
89 | connect(windowMenu, SIGNAL(activated(int)), SLOT(windowSlot(int)));
|
---|
90 |
|
---|
91 | windowMenu->setCheckable(TRUE);
|
---|
92 |
|
---|
93 | actionClose->addTo(windowMenu);
|
---|
94 | actionCloseAll->addTo(windowMenu);
|
---|
95 | windowMenu->insertSeparator();
|
---|
96 | actionTile->addTo(windowMenu);
|
---|
97 | actionCascade->addTo(windowMenu);
|
---|
98 | windowMenu->insertSeparator();
|
---|
99 |
|
---|
100 | menuBar()->insertItem(tr("&New"), newMenu);
|
---|
101 | menuBar()->insertItem(tr("&Window"), windowMenu);
|
---|
102 | }
|
---|
103 |
|
---|
104 |
|
---|
105 | void I18nDemo::newSlot(int id)
|
---|
106 | {
|
---|
107 | QString qmfile;
|
---|
108 | switch (id) {
|
---|
109 | default:
|
---|
110 | case 0: qmfile = "i18n/en.qm"; break;
|
---|
111 | case 1: qmfile = "i18n/ja.qm"; break;
|
---|
112 | case 2: qmfile = "i18n/ko.qm"; break;
|
---|
113 | case 3: qmfile = "i18n/no.qm"; break;
|
---|
114 | }
|
---|
115 |
|
---|
116 | if (lastwrapper) {
|
---|
117 | qApp->removeTranslator(&lastwrapper->translator);
|
---|
118 | lastwrapper = 0;
|
---|
119 | }
|
---|
120 |
|
---|
121 | Wrapper *wrapper = new Wrapper(workspace, windowIdNumber);
|
---|
122 | wrapper->translator.load(qmfile, ".");
|
---|
123 |
|
---|
124 | qApp->installTranslator(&wrapper->translator);
|
---|
125 |
|
---|
126 | connect(wrapper, SIGNAL(destroyed()), SLOT(wrapperDead()));
|
---|
127 | wrapper->setCaption(tr("--language--"));
|
---|
128 |
|
---|
129 | TextEdit *te = new TextEdit(wrapper);
|
---|
130 | te->layout()->setResizeMode( QLayout::FreeResize );
|
---|
131 | te->setMinimumSize(500, 400);
|
---|
132 | te->fileNew();
|
---|
133 | te->currentEditor()->
|
---|
134 | setText(tr("<h3>About Qt</h3>"
|
---|
135 | "<p>This program uses Qt version %1, a multiplatform C++ "
|
---|
136 | "GUI toolkit from Trolltech. Qt provides single-source "
|
---|
137 | "portability across Windows 95/98/NT/2000, Mac OS X, Linux, Solaris, "
|
---|
138 | "HP-UX and many other versions of Unix with X11.</p>"
|
---|
139 | "<p>See <tt>http://www.trolltech.com/qt/</tt> for more "
|
---|
140 | "information.</p>").arg(QT_VERSION_STR));
|
---|
141 |
|
---|
142 | qApp->removeTranslator(&wrapper->translator);
|
---|
143 |
|
---|
144 | te->show();
|
---|
145 | wrapper->show();
|
---|
146 |
|
---|
147 | windowMenu->insertItem(wrapper->caption(), wrapper->id);
|
---|
148 | windowMenu->setItemChecked(wrapper->id, TRUE);
|
---|
149 | lastwrapper = wrapper;
|
---|
150 |
|
---|
151 | windowIdNumber++;
|
---|
152 | }
|
---|
153 |
|
---|
154 |
|
---|
155 | void I18nDemo::windowSlot(int id)
|
---|
156 | {
|
---|
157 | if (id < 5000)
|
---|
158 | return;
|
---|
159 |
|
---|
160 | QWidgetList list = workspace->windowList();
|
---|
161 | Wrapper *wrapper = (Wrapper *) list.first();
|
---|
162 | while (wrapper) {
|
---|
163 | if (wrapper->id == id) {
|
---|
164 | wrapper->setFocus();
|
---|
165 | break;
|
---|
166 | }
|
---|
167 |
|
---|
168 | wrapper = (Wrapper *) list.next();
|
---|
169 | }
|
---|
170 | }
|
---|
171 |
|
---|
172 |
|
---|
173 | void I18nDemo::windowActivated(QWidget *w)
|
---|
174 | {
|
---|
175 | if (lastwrapper) {
|
---|
176 | qApp->removeTranslator(&lastwrapper->translator);
|
---|
177 | windowMenu->setItemChecked(lastwrapper->id, FALSE);
|
---|
178 | }
|
---|
179 |
|
---|
180 | if (! w) {
|
---|
181 | lastwrapper = 0;
|
---|
182 | return;
|
---|
183 | }
|
---|
184 |
|
---|
185 | Wrapper *wrapper = (Wrapper *) w;
|
---|
186 |
|
---|
187 | windowMenu->setItemChecked(wrapper->id, TRUE);
|
---|
188 | lastwrapper = wrapper;
|
---|
189 | }
|
---|
190 |
|
---|
191 |
|
---|
192 | void I18nDemo::closeSlot()
|
---|
193 | {
|
---|
194 | QWidget *w = workspace->activeWindow();
|
---|
195 | delete w;
|
---|
196 | }
|
---|
197 |
|
---|
198 |
|
---|
199 | void I18nDemo::closeAllSlot()
|
---|
200 | {
|
---|
201 | QWidget *w;
|
---|
202 | while ((w = workspace->activeWindow()))
|
---|
203 | w->close(TRUE);
|
---|
204 | }
|
---|
205 |
|
---|
206 |
|
---|
207 | void I18nDemo::tileSlot()
|
---|
208 | {
|
---|
209 | workspace->tile();
|
---|
210 | }
|
---|
211 |
|
---|
212 |
|
---|
213 | void I18nDemo::cascadeSlot()
|
---|
214 | {
|
---|
215 | workspace->cascade();
|
---|
216 | }
|
---|
217 |
|
---|
218 |
|
---|
219 | void I18nDemo::wrapperDead()
|
---|
220 | {
|
---|
221 | Wrapper *w = (Wrapper *) sender();
|
---|
222 |
|
---|
223 | if (w == lastwrapper) {
|
---|
224 | qApp->removeTranslator(&w->translator);
|
---|
225 | lastwrapper = 0;
|
---|
226 | }
|
---|
227 |
|
---|
228 | windowMenu->removeItem(w->id);
|
---|
229 | }
|
---|
230 |
|
---|
231 |
|
---|
232 | void I18nDemo::showEvent(QShowEvent *)
|
---|
233 | {
|
---|
234 | if (firstShow) {
|
---|
235 | newSlot(1);
|
---|
236 | firstShow = FALSE;
|
---|
237 | return;
|
---|
238 | }
|
---|
239 |
|
---|
240 | if (! lastwrapper)
|
---|
241 | return;
|
---|
242 |
|
---|
243 | qApp->installTranslator(&lastwrapper->translator);
|
---|
244 | }
|
---|
245 |
|
---|
246 |
|
---|
247 | void I18nDemo::hideEvent(QHideEvent *)
|
---|
248 | {
|
---|
249 | if (! lastwrapper)
|
---|
250 | return;
|
---|
251 |
|
---|
252 | qApp->removeTranslator(&lastwrapper->translator);
|
---|
253 | }
|
---|