source: trunk/examples/demo/i18n/i18n.cpp@ 202

Last change on this file since 202 was 160, checked in by dmik, 19 years ago

Imported table and iconview modules and a bunch of dependent examples from the official release 3.3.1 from Trolltech.

  • Property svn:keywords set to Id
File size: 5.6 KB
Line 
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
21static int windowIdNumber = 5000;
22static bool firstShow = TRUE;
23
24
25I18nDemo::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
45I18nDemo::~I18nDemo()
46{
47}
48
49
50void 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
78void 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
105void 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
155void 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
173void 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
192void I18nDemo::closeSlot()
193{
194 QWidget *w = workspace->activeWindow();
195 delete w;
196}
197
198
199void I18nDemo::closeAllSlot()
200{
201 QWidget *w;
202 while ((w = workspace->activeWindow()))
203 w->close(TRUE);
204}
205
206
207void I18nDemo::tileSlot()
208{
209 workspace->tile();
210}
211
212
213void I18nDemo::cascadeSlot()
214{
215 workspace->cascade();
216}
217
218
219void 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
232void 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
247void I18nDemo::hideEvent(QHideEvent *)
248{
249 if (! lastwrapper)
250 return;
251
252 qApp->removeTranslator(&lastwrapper->translator);
253}
Note: See TracBrowser for help on using the repository browser.