source: trunk/examples/xml/saxbookmarks/mainwindow.cpp@ 651

Last change on this file since 651 was 651, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.2 sources.

File size: 5.8 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the examples of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this 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 have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include <QtGui>
43
44#include "mainwindow.h"
45#include "xbelgenerator.h"
46#include "xbelhandler.h"
47
48MainWindow::MainWindow()
49{
50 QStringList labels;
51 labels << tr("Title") << tr("Location");
52
53 treeWidget = new QTreeWidget;
54 treeWidget->header()->setResizeMode(QHeaderView::Stretch);
55 treeWidget->setHeaderLabels(labels);
56 setCentralWidget(treeWidget);
57
58 createActions();
59 createMenus();
60
61 statusBar()->showMessage(tr("Ready"));
62
63 setWindowTitle(tr("SAX Bookmarks"));
64 resize(480, 320);
65}
66
67void MainWindow::open()
68{
69#if defined(Q_OS_SYMBIAN)
70 // Look for bookmarks on the same drive where the application is installed to,
71 // if drive is not read only. QDesktopServices::DataLocation does this check,
72 // and returns writable drive.
73 QString bookmarksFolder =
74 QDesktopServices::storageLocation(QDesktopServices::DataLocation).left(1);
75 bookmarksFolder.append(":/Data/qt/saxbookmarks");
76 QDir::setCurrent(bookmarksFolder);
77#endif
78 QString fileName =
79 QFileDialog::getOpenFileName(this, tr("Open Bookmark File"),
80 QDir::currentPath(),
81 tr("XBEL Files (*.xbel *.xml)"));
82 if (fileName.isEmpty())
83 return;
84
85 treeWidget->clear();
86
87 XbelHandler handler(treeWidget);
88 QXmlSimpleReader reader;
89 reader.setContentHandler(&handler);
90 reader.setErrorHandler(&handler);
91
92 QFile file(fileName);
93 if (!file.open(QFile::ReadOnly | QFile::Text)) {
94 QMessageBox::warning(this, tr("SAX Bookmarks"),
95 tr("Cannot read file %1:\n%2.")
96 .arg(fileName)
97 .arg(file.errorString()));
98 return;
99 }
100
101 QXmlInputSource xmlInputSource(&file);
102 if (reader.parse(xmlInputSource))
103 statusBar()->showMessage(tr("File loaded"), 2000);
104}
105
106void MainWindow::saveAs()
107{
108 QString fileName =
109 QFileDialog::getSaveFileName(this, tr("Save Bookmark File"),
110 QDir::currentPath(),
111 tr("XBEL Files (*.xbel *.xml)"));
112 if (fileName.isEmpty())
113 return;
114
115 QFile file(fileName);
116 if (!file.open(QFile::WriteOnly | QFile::Text)) {
117 QMessageBox::warning(this, tr("SAX Bookmarks"),
118 tr("Cannot write file %1:\n%2.")
119 .arg(fileName)
120 .arg(file.errorString()));
121 return;
122 }
123
124 XbelGenerator generator(treeWidget);
125 if (generator.write(&file))
126 statusBar()->showMessage(tr("File saved"), 2000);
127}
128
129void MainWindow::about()
130{
131 QMessageBox::about(this, tr("About SAX Bookmarks"),
132 tr("The <b>SAX Bookmarks</b> example demonstrates how to use Qt's "
133 "SAX classes to read XML documents and how to generate XML by "
134 "hand."));
135}
136
137void MainWindow::createActions()
138{
139 openAct = new QAction(tr("&Open..."), this);
140 openAct->setShortcuts(QKeySequence::Open);
141 connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
142
143 saveAsAct = new QAction(tr("&Save As..."), this);
144 saveAsAct->setShortcuts(QKeySequence::SaveAs);
145 connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));
146
147 exitAct = new QAction(tr("E&xit"), this);
148 exitAct->setShortcuts(QKeySequence::Quit);
149 connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
150
151 aboutAct = new QAction(tr("&About"), this);
152 connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
153
154 aboutQtAct = new QAction(tr("About &Qt"), this);
155 connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
156}
157
158void MainWindow::createMenus()
159{
160 fileMenu = menuBar()->addMenu(tr("&File"));
161 fileMenu->addAction(openAct);
162 fileMenu->addAction(saveAsAct);
163 fileMenu->addAction(exitAct);
164
165 menuBar()->addSeparator();
166
167 helpMenu = menuBar()->addMenu(tr("&Help"));
168 helpMenu->addAction(aboutAct);
169 helpMenu->addAction(aboutQtAct);
170}
Note: See TracBrowser for help on using the repository browser.