Mercurial > projects > qtd
annotate examples/desktop/systray/window.d @ 282:256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
author | eldar |
---|---|
date | Fri, 16 Oct 2009 02:43:59 +0000 |
parents | 2c9ef955a171 |
children | 7a3c43424dca |
rev | line source |
---|---|
120 | 1 /**************************************************************************** |
2 ** | |
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). | |
4 ** Contact: Qt Software Information (qt-info@nokia.com) | |
5 ** | |
6 ** This file is part of the examples of the Qt Toolkit. | |
7 ** | |
8 ** $QT_BEGIN_LICENSE:LGPL$ | |
9 ** Commercial Usage | |
10 ** Licensees holding valid Qt Commercial licenses may use this file in | |
11 ** accordance with the Qt Commercial License Agreement provided with the | |
12 ** Software or, alternatively, in accordance with the terms contained in | |
13 ** a written agreement between you and Nokia. | |
14 ** | |
15 ** GNU Lesser General Public License Usage | |
16 ** Alternatively, this file may be used under the terms of the GNU Lesser | |
17 ** General Public License version 2.1 as published by the Free Software | |
18 ** Foundation and appearing in the file LICENSE.LGPL included in the | |
19 ** packaging of this file. Please review the following information to | |
20 ** ensure the GNU Lesser General Public License version 2.1 requirements | |
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | |
22 ** | |
23 ** In addition, as a special exception, Nokia gives you certain | |
24 ** additional rights. These rights are described in the Nokia Qt LGPL | |
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this | |
26 ** package. | |
27 ** | |
28 ** GNU General Public License Usage | |
29 ** Alternatively, this file may be used under the terms of the GNU | |
30 ** General Public License version 3.0 as published by the Free Software | |
31 ** Foundation and appearing in the file LICENSE.GPL included in the | |
32 ** packaging of this file. Please review the following information to | |
33 ** ensure the GNU General Public License version 3.0 requirements will be | |
34 ** met: http://www.gnu.org/copyleft/gpl.html. | |
35 ** | |
36 ** If you are unsure which license is appropriate for your use, please | |
37 ** contact the sales department at qt-sales@nokia.com. | |
38 ** $QT_END_LICENSE$ | |
39 ** | |
40 ****************************************************************************/ | |
41 module window; | |
42 | |
43 import qt.gui.QSystemTrayIcon; | |
44 import qt.gui.QDialog; | |
45 import qt.gui.QAction; | |
46 import qt.gui.QCheckBox; | |
47 import qt.gui.QComboBox; | |
48 import qt.gui.QGroupBox; | |
49 import qt.gui.QLabel; | |
50 import qt.gui.QLineEdit; | |
51 import qt.gui.QMenu; | |
52 import qt.gui.QPushButton; | |
53 import qt.gui.QSpinBox; | |
54 import qt.gui.QTextEdit; | |
55 import qt.gui.QVBoxLayout; | |
56 import qt.gui.QHBoxLayout; | |
57 import qt.gui.QMessageBox; | |
58 import qt.gui.QGridLayout; | |
59 | |
60 | |
61 class Window : public QDialog | |
62 { | |
63 public: | |
64 | |
65 this() | |
66 { | |
67 createIconGroupBox(); | |
68 createMessageGroupBox(); | |
69 | |
70 iconLabel.setMinimumWidth(durationLabel.sizeHint().width()); | |
71 | |
72 createActions(); | |
73 createTrayIcon(); | |
74 | |
282
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
75 connect!("clicked")(showMessageButton, &this.showMessage); |
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
76 connect!("toggled")(showIconCheckBox, &trayIcon.setVisible); |
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
77 connect!("currentIndexChanged")(iconComboBox, &this.setIcon); |
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
78 connect!("messageClicked")(trayIcon, &this.messageClicked); |
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
79 connect!("activated")(trayIcon, &this.iconActivated); |
120 | 80 |
81 QVBoxLayout mainLayout = new QVBoxLayout; | |
82 mainLayout.addWidget(iconGroupBox); | |
83 mainLayout.addWidget(messageGroupBox); | |
84 setLayout(mainLayout); | |
85 | |
86 iconComboBox.setCurrentIndex(1); | |
87 trayIcon.show(); | |
88 | |
89 setWindowTitle(tr("Systray")); | |
90 resize(400, 300); | |
91 } | |
92 | |
93 void setVisible(bool visible) | |
94 { | |
95 minimizeAction.setEnabled(visible); | |
96 maximizeAction.setEnabled(!isMaximized()); | |
97 restoreAction.setEnabled(isMaximized() || !visible); | |
98 QDialog.setVisible(visible); | |
99 } | |
100 | |
101 protected: | |
102 | |
103 void closeEvent(QCloseEvent event) | |
104 { | |
105 if (trayIcon.isVisible()) { | |
106 QMessageBox.information(this, tr("Systray"), | |
107 tr("The program will keep running in the system tray. To terminate the program, " | |
108 "choose <b>Quit</b> in the context menu of the system tray entry.")); | |
109 hide(); | |
110 event.ignore(); | |
111 } | |
112 } | |
113 | |
114 private: | |
115 | |
116 void setIcon(int index) | |
117 { | |
118 QIcon icon = iconComboBox.itemIcon(index); | |
119 trayIcon.setIcon(icon); | |
120 setWindowIcon(icon); | |
121 | |
122 trayIcon.setToolTip(iconComboBox.itemText(index)); | |
123 } | |
124 | |
125 void iconActivated(QSystemTrayIcon.ActivationReason reason) | |
126 { | |
127 switch (reason) { | |
128 case QSystemTrayIcon.Trigger: | |
129 case QSystemTrayIcon.DoubleClick: | |
130 iconComboBox.setCurrentIndex((iconComboBox.currentIndex() + 1) % iconComboBox.count()); | |
131 break; | |
132 case QSystemTrayIcon.MiddleClick: | |
133 showMessage(); | |
134 break; | |
135 default: | |
136 } | |
137 } | |
138 | |
139 void showMessage() | |
140 { | |
141 QSystemTrayIcon.MessageIcon icon = cast(QSystemTrayIcon.MessageIcon) | |
142 typeComboBox.itemData(typeComboBox.currentIndex()).toInt(); | |
143 trayIcon.showMessage(titleEdit.text(), bodyEdit.toPlainText(), icon, durationSpinBox.value() * 1000); | |
144 } | |
145 | |
146 void messageClicked() | |
147 { | |
148 QMessageBox.information(null, tr("Systray"), | |
149 tr("Sorry, I already gave what help I could.\nMaybe you should try asking a human?")); | |
150 } | |
151 | |
152 private: | |
153 | |
154 void createIconGroupBox() | |
155 { | |
156 iconGroupBox = new QGroupBox(tr("Tray Icon")); | |
157 | |
158 iconLabel = new QLabel("Icon:"); | |
159 | |
160 iconComboBox = new QComboBox; | |
161 iconComboBox.addItem(new QIcon(":/images/bad.svg"), tr("Bad")); | |
162 iconComboBox.addItem(new QIcon(":/images/heart.svg"), tr("Heart")); | |
163 iconComboBox.addItem(new QIcon(":/images/trash.svg"), tr("Trash")); | |
164 | |
165 showIconCheckBox = new QCheckBox(tr("Show icon")); | |
166 showIconCheckBox.setChecked(true); | |
167 | |
168 QHBoxLayout iconLayout = new QHBoxLayout; | |
169 iconLayout.addWidget(iconLabel); | |
170 iconLayout.addWidget(iconComboBox); | |
171 iconLayout.addStretch(); | |
172 iconLayout.addWidget(showIconCheckBox); | |
173 iconGroupBox.setLayout(iconLayout); | |
174 } | |
175 | |
176 void createMessageGroupBox() | |
177 { | |
178 messageGroupBox = new QGroupBox(tr("Balloon Message")); | |
179 | |
180 typeLabel = new QLabel(tr("Type:")); | |
181 | |
182 typeComboBox = new QComboBox; | |
183 typeComboBox.addItem(tr("None"), new QVariant(cast(ulong) QSystemTrayIcon.NoIcon)); | |
184 typeComboBox.addItem(style().standardIcon( | |
185 QStyle.SP_MessageBoxInformation), tr("Information"), | |
186 new QVariant(cast(ulong) QSystemTrayIcon.Information)); | |
187 typeComboBox.addItem(style().standardIcon( | |
188 QStyle.SP_MessageBoxWarning), tr("Warning"), | |
189 new QVariant(cast(ulong) QSystemTrayIcon.Warning)); | |
190 typeComboBox.addItem(style().standardIcon( | |
191 QStyle.SP_MessageBoxCritical), tr("Critical"), | |
192 new QVariant(cast(ulong) QSystemTrayIcon.Critical)); | |
193 typeComboBox.setCurrentIndex(1); | |
194 | |
195 durationLabel = new QLabel(tr("Duration:")); | |
196 | |
197 durationSpinBox = new QSpinBox; | |
198 durationSpinBox.setRange(5, 60); | |
199 durationSpinBox.setSuffix(" s"); | |
200 durationSpinBox.setValue(15); | |
201 | |
202 durationWarningLabel = new QLabel(tr("(some systems might ignore this hint)")); | |
203 durationWarningLabel.setIndent(10); | |
204 | |
205 titleLabel = new QLabel(tr("Title:")); | |
206 | |
207 titleEdit = new QLineEdit(tr("Cannot connect to network")); | |
208 | |
209 bodyLabel = new QLabel(tr("Body:")); | |
210 | |
211 bodyEdit = new QTextEdit; | |
212 bodyEdit.setPlainText(tr("Don't believe me. Honestly, I don't have a clue.\nClick this balloon for details.")); | |
213 | |
214 showMessageButton = new QPushButton(tr("Show Message")); | |
215 showMessageButton.setDefault(true); | |
216 | |
217 QGridLayout messageLayout = new QGridLayout; | |
218 messageLayout.addWidget(typeLabel, 0, 0); | |
219 messageLayout.addWidget(typeComboBox, 0, 1, 1, 2); | |
220 messageLayout.addWidget(durationLabel, 1, 0); | |
221 messageLayout.addWidget(durationSpinBox, 1, 1); | |
222 messageLayout.addWidget(durationWarningLabel, 1, 2, 1, 3); | |
223 messageLayout.addWidget(titleLabel, 2, 0); | |
224 messageLayout.addWidget(titleEdit, 2, 1, 1, 4); | |
225 messageLayout.addWidget(bodyLabel, 3, 0); | |
226 messageLayout.addWidget(bodyEdit, 3, 1, 2, 4); | |
227 messageLayout.addWidget(showMessageButton, 5, 4); | |
228 messageLayout.setColumnStretch(3, 1); | |
229 messageLayout.setRowStretch(4, 1); | |
230 messageGroupBox.setLayout(messageLayout); | |
231 } | |
232 | |
233 void createActions() | |
234 { | |
235 minimizeAction = new QAction(tr("Mi&nimize"), this); | |
282
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
236 connect!("triggered")(minimizeAction, &this.hide); |
120 | 237 |
238 maximizeAction = new QAction(tr("Ma&ximize"), this); | |
282
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
239 connect!("triggered")(maximizeAction, &this.showMaximized); |
120 | 240 |
241 restoreAction = new QAction(tr("&Restore"), this); | |
282
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
242 connect!("triggered")(restoreAction, &this.showNormal); |
120 | 243 |
244 quitAction = new QAction(tr("&Quit"), this); | |
282
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
120
diff
changeset
|
245 connect!("triggered")(quitAction, &QApplication.quit); |
120 | 246 } |
247 | |
248 void createTrayIcon() | |
249 { | |
250 trayIconMenu = new QMenu(this); | |
251 trayIconMenu.addAction(minimizeAction); | |
252 trayIconMenu.addAction(maximizeAction); | |
253 trayIconMenu.addAction(restoreAction); | |
254 trayIconMenu.addSeparator(); | |
255 trayIconMenu.addAction(quitAction); | |
256 | |
257 trayIcon = new QSystemTrayIcon(this); | |
258 trayIcon.setContextMenu(trayIconMenu); | |
259 } | |
260 | |
261 QGroupBox iconGroupBox; | |
262 QLabel iconLabel; | |
263 QComboBox iconComboBox; | |
264 QCheckBox showIconCheckBox; | |
265 | |
266 QGroupBox messageGroupBox; | |
267 QLabel typeLabel; | |
268 QLabel durationLabel; | |
269 QLabel durationWarningLabel; | |
270 QLabel titleLabel; | |
271 QLabel bodyLabel; | |
272 QComboBox typeComboBox; | |
273 QSpinBox durationSpinBox; | |
274 QLineEdit titleEdit; | |
275 QTextEdit bodyEdit; | |
276 QPushButton showMessageButton; | |
277 | |
278 QAction minimizeAction; | |
279 QAction maximizeAction; | |
280 QAction restoreAction; | |
281 QAction quitAction; | |
282 | |
283 QSystemTrayIcon trayIcon; | |
284 QMenu trayIconMenu; | |
285 } |