Mercurial > projects > qtd
annotate examples/desktop/screenshot/screenshot.d @ 374:681af90e1d53
Removed debug writelns. Fixed build script.
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Thu, 08 Jul 2010 22:21:56 +0300 |
parents | 256ab6cb8e85 |
children |
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 screenshot; | |
42 | |
43 | |
44 import qt.gui.QPixmap; | |
45 import qt.gui.QWidget; | |
46 import qt.gui.QCheckBox; | |
47 import qt.gui.QGridLayout; | |
48 import qt.gui.QGroupBox; | |
49 import qt.gui.QHBoxLayout; | |
50 import qt.gui.QLabel; | |
51 import qt.gui.QPushButton; | |
52 import qt.gui.QSpinBox; | |
53 import qt.gui.QVBoxLayout; | |
54 import qt.gui.QFileDialog; | |
55 import qt.core.QDir; | |
56 import qt.core.QTimer; | |
57 | |
58 import tango.text.convert.Format; | |
59 import tango.text.Ascii; | |
60 | |
61 | |
62 class Screenshot : public QWidget | |
63 { | |
64 public: | |
65 | |
66 this() | |
67 { | |
68 screenshotLabel = new QLabel; | |
69 screenshotLabel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding); | |
70 screenshotLabel.setAlignment(Qt.AlignCenter); | |
71 screenshotLabel.setMinimumSize(240, 160); | |
72 | |
73 createOptionsGroupBox(); | |
74 createButtonsLayout(); | |
75 | |
76 mainLayout = new QVBoxLayout; | |
77 mainLayout.addWidget(screenshotLabel); | |
78 mainLayout.addWidget(optionsGroupBox); | |
79 mainLayout.addLayout(buttonsLayout); | |
80 setLayout(mainLayout); | |
81 | |
82 shootScreen(); | |
83 delaySpinBox.setValue(5); | |
84 | |
85 setWindowTitle(tr("Screenshot")); | |
86 resize(300, 200); | |
87 } | |
88 | |
89 protected: | |
90 | |
91 void resizeEvent(QResizeEvent /* event */) | |
92 { | |
93 QSize scaledSize = originalPixmap.size(); | |
94 scaledSize.scale(screenshotLabel.size(), Qt.KeepAspectRatio); | |
95 if (!screenshotLabel.pixmap() || scaledSize != screenshotLabel.pixmap().size()) | |
96 updateScreenshotLabel(); | |
97 } | |
98 | |
99 private: | |
100 | |
101 void newScreenshot() | |
102 { | |
103 if (hideThisWindowCheckBox.isChecked()) | |
104 hide(); | |
105 newScreenshotButton.setDisabled(true); | |
106 | |
107 QTimer.singleShot(delaySpinBox.value() * 1000, this, SLOT(shootScreen())); | |
108 } | |
109 | |
110 void saveScreenshot() | |
111 { | |
112 string format = "png"; | |
113 string initialPath = QDir.currentPath() + tr("/untitled.") + format; | |
114 | |
115 string fileName = QFileDialog.getSaveFileName(this, tr("Save As"), initialPath, | |
116 Format(tr("{} Files (*.{});;All Files (*)"), toUpper(format), format)); | |
117 if (fileName.length) | |
118 originalPixmap.save(fileName, format); | |
119 } | |
120 | |
121 void shootScreen() | |
122 { | |
123 if (delaySpinBox.value() != 0) | |
124 QApplication.beep(); | |
125 | |
126 originalPixmap = new QPixmap(); // clear image for low memory situations | |
127 | |
128 // on embedded devices. | |
129 originalPixmap = QPixmap.grabWindow(QApplication.desktop().winId()); | |
130 updateScreenshotLabel(); | |
131 | |
132 newScreenshotButton.setDisabled(false); | |
133 if (hideThisWindowCheckBox.isChecked()) | |
134 show(); | |
135 } | |
136 | |
137 void updateCheckBox() | |
138 { | |
139 if (delaySpinBox.value() == 0) { | |
140 hideThisWindowCheckBox.setDisabled(true); | |
141 hideThisWindowCheckBox.setChecked(false); | |
142 } | |
143 else | |
144 hideThisWindowCheckBox.setDisabled(false); | |
145 } | |
146 | |
147 private: | |
148 | |
149 void createOptionsGroupBox() | |
150 { | |
151 optionsGroupBox = new QGroupBox(tr("Options")); | |
152 | |
153 delaySpinBox = new QSpinBox; | |
154 delaySpinBox.setSuffix(tr(" s")); | |
155 delaySpinBox.setMaximum(60); | |
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
|
156 connect!("valueChanged")(delaySpinBox, &this.updateCheckBox); |
120 | 157 |
158 delaySpinBoxLabel = new QLabel(tr("Screenshot Delay:")); | |
159 | |
160 hideThisWindowCheckBox = new QCheckBox(tr("Hide This Window")); | |
161 | |
162 optionsGroupBoxLayout = new QGridLayout; | |
163 optionsGroupBoxLayout.addWidget(delaySpinBoxLabel, 0, 0); | |
164 optionsGroupBoxLayout.addWidget(delaySpinBox, 0, 1); | |
165 optionsGroupBoxLayout.addWidget(hideThisWindowCheckBox, 1, 0, 1, 2); | |
166 optionsGroupBox.setLayout(optionsGroupBoxLayout); | |
167 } | |
168 | |
169 void createButtonsLayout() | |
170 { | |
171 newScreenshotButton = createButton(tr("New Screenshot"), &this.newScreenshot); | |
172 | |
173 saveScreenshotButton = createButton(tr("Save Screenshot"), &this.saveScreenshot); | |
174 | |
175 quitScreenshotButton = createButton(tr("Quit"), &this.close); | |
176 | |
177 buttonsLayout = new QHBoxLayout; | |
178 buttonsLayout.addStretch(); | |
179 buttonsLayout.addWidget(newScreenshotButton); | |
180 buttonsLayout.addWidget(saveScreenshotButton); | |
181 buttonsLayout.addWidget(quitScreenshotButton); | |
182 } | |
183 | |
184 QPushButton createButton(string text, void delegate() slot) | |
185 { | |
186 QPushButton button = new QPushButton(text); | |
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
|
187 connect!("clicked")(button, slot); |
120 | 188 return button; |
189 } | |
190 | |
191 void updateScreenshotLabel() | |
192 { | |
193 screenshotLabel.setPixmap(originalPixmap.scaled(screenshotLabel.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)); | |
194 } | |
195 | |
196 QPixmap originalPixmap; | |
197 | |
198 QLabel screenshotLabel; | |
199 QGroupBox optionsGroupBox; | |
200 QSpinBox delaySpinBox; | |
201 QLabel delaySpinBoxLabel; | |
202 QCheckBox hideThisWindowCheckBox; | |
203 QPushButton newScreenshotButton; | |
204 QPushButton saveScreenshotButton; | |
205 QPushButton quitScreenshotButton; | |
206 | |
207 QVBoxLayout mainLayout; | |
208 QGridLayout optionsGroupBoxLayout; | |
209 QHBoxLayout buttonsLayout; | |
210 } |