Commit | Line | Data |
---|---|---|
2340bcd3 JVH |
1 | /**************************************************************************** |
2 | ** | |
3 | ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). | |
4 | ** All rights reserved. | |
5 | ** | |
6 | ** Contact: Nokia Corporation (qt-info@nokia.com) | |
7 | ** | |
8 | ** This file is part of a Qt Solutions component. | |
9 | ** | |
10 | ** You may use this file under the terms of the BSD license as follows: | |
11 | ** | |
12 | ** "Redistribution and use in source and binary forms, with or without | |
13 | ** modification, are permitted provided that the following conditions are | |
14 | ** met: | |
15 | ** * Redistributions of source code must retain the above copyright | |
16 | ** notice, this list of conditions and the following disclaimer. | |
17 | ** * Redistributions in binary form must reproduce the above copyright | |
18 | ** notice, this list of conditions and the following disclaimer in | |
19 | ** the documentation and/or other materials provided with the | |
20 | ** distribution. | |
21 | ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor | |
22 | ** the names of its contributors may be used to endorse or promote | |
23 | ** products derived from this software without specific prior written | |
24 | ** permission. | |
25 | ** | |
26 | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
27 | ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
28 | ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
29 | ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
30 | ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
31 | ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
32 | ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
33 | ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
34 | ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
35 | ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
36 | ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | |
37 | ** | |
38 | ****************************************************************************/ | |
39 | ||
40 | #include <qtsingleapplication.h> | |
41 | #include <QtCore/QFile> | |
42 | #include <QtGui/QMainWindow> | |
43 | #include <QtGui/QPrinter> | |
44 | #include <QtGui/QPainter> | |
45 | #include <QtGui/QTextEdit> | |
46 | #include <QtGui/QMdiArea> | |
47 | #include <QtCore/QTextStream> | |
48 | ||
49 | class MainWindow : public QMainWindow | |
50 | { | |
51 | Q_OBJECT | |
52 | public: | |
53 | MainWindow(); | |
54 | ||
55 | public slots: | |
56 | void handleMessage(const QString& message); | |
57 | ||
58 | signals: | |
59 | void needToShow(); | |
60 | ||
61 | private: | |
62 | QMdiArea *workspace; | |
63 | }; | |
64 | ||
65 | MainWindow::MainWindow() | |
66 | { | |
67 | workspace = new QMdiArea(this); | |
68 | ||
69 | setCentralWidget(workspace); | |
70 | } | |
71 | ||
72 | void MainWindow::handleMessage(const QString& message) | |
73 | { | |
74 | enum Action { | |
75 | Nothing, | |
76 | Open, | |
77 | ||
78 | } action; | |
79 | ||
80 | action = Nothing; | |
81 | QString filename = message; | |
82 | if (message.toLower().startsWith("/print ")) { | |
83 | filename = filename.mid(7); | |
84 | action = Print; | |
85 | } else if (!message.isEmpty()) { | |
86 | action = Open; | |
87 | } | |
88 | if (action == Nothing) { | |
89 | emit needToShow(); | |
90 | return; | |
91 | } | |
92 | ||
93 | QFile file(filename); | |
94 | QString contents; | |
95 | if (file.open(QIODevice::ReadOnly)) | |
96 | contents = file.readAll(); | |
97 | else | |
98 | contents = "[[Error: Could not load file " + filename + "]]"; | |
99 | ||
100 | QTextEdit *view = new QTextEdit; | |
101 | view->setPlainText(contents); | |
102 | ||
103 | switch(action) { | |
104 | case Print: | |
105 | { | |
106 | QPrinter printer; | |
107 | view->print(&printer); | |
108 | delete view; | |
109 | } | |
110 | break; | |
111 | ||
112 | case Open: | |
113 | { | |
114 | workspace->addSubWindow(view); | |
115 | view->setWindowTitle(message); | |
116 | view->show(); | |
117 | emit needToShow(); | |
118 | } | |
119 | break; | |
120 | default: | |
121 | break; | |
122 | }; | |
123 | } | |
124 | ||
125 | #include "main.moc" | |
126 | ||
127 | int main(int argc, char **argv) | |
128 | { | |
129 | QtSingleApplication instance("File loader QtSingleApplication example", argc, argv); | |
130 | QString message; | |
131 | for (int a = 1; a < argc; ++a) { | |
132 | message += argv[a]; | |
133 | if (a < argc-1) | |
134 | message += " "; | |
135 | } | |
136 | ||
137 | if (instance.sendMessage(message)) | |
138 | return 0; | |
139 | ||
140 | MainWindow mw; | |
141 | mw.handleMessage(message); | |
142 | mw.show(); | |
143 | ||
144 | QObject::connect(&instance, SIGNAL(messageReceived(const QString&)), | |
145 | &mw, SLOT(handleMessage(const QString&))); | |
146 | ||
147 | instance.setActivationWindow(&mw, false); | |
148 | QObject::connect(&mw, SIGNAL(needToShow()), &instance, SLOT(activateWindow())); | |
149 | ||
150 | return instance.exec(); | |
151 | } |