diff options
Diffstat (limited to 'examples/xml/streambookmarks')
-rw-r--r-- | examples/xml/streambookmarks/frank.xbel | 230 | ||||
-rw-r--r-- | examples/xml/streambookmarks/jennifer.xbel | 93 | ||||
-rw-r--r-- | examples/xml/streambookmarks/main.cpp | 55 | ||||
-rw-r--r-- | examples/xml/streambookmarks/mainwindow.cpp | 177 | ||||
-rw-r--r-- | examples/xml/streambookmarks/mainwindow.h | 80 | ||||
-rw-r--r-- | examples/xml/streambookmarks/streambookmarks.pro | 14 | ||||
-rw-r--r-- | examples/xml/streambookmarks/xbelreader.cpp | 205 | ||||
-rw-r--r-- | examples/xml/streambookmarks/xbelreader.h | 82 | ||||
-rw-r--r-- | examples/xml/streambookmarks/xbelwriter.cpp | 93 | ||||
-rw-r--r-- | examples/xml/streambookmarks/xbelwriter.h | 65 |
10 files changed, 1094 insertions, 0 deletions
diff --git a/examples/xml/streambookmarks/frank.xbel b/examples/xml/streambookmarks/frank.xbel new file mode 100644 index 0000000..d6a12c6 --- /dev/null +++ b/examples/xml/streambookmarks/frank.xbel @@ -0,0 +1,230 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE xbel> +<xbel version="1.0"> + <folder folded="yes"> + <title>Literate Programming</title> + <bookmark href="http://www.vivtek.com/litprog.html"> + <title>Synopsis of Literate Programming</title> + </bookmark> + <bookmark href="http://vasc.ri.cmu.edu/old_help/Programming/Literate/literate.html"> + <title>Literate Programming: Propaganda and Tools</title> + </bookmark> + <bookmark href="http://www.isy.liu.se/%7Eturbell/litprog/"> + <title>Literate Programming by Henrik Turbell</title> + </bookmark> + <bookmark href="http://www.desy.de/user/projects/LitProg.html"> + <title>Literate Programming Library</title> + </bookmark> + <bookmark href="http://www.loria.fr/services/tex/english/litte.html"> + <title>Literate Programming Basics</title> + </bookmark> + <bookmark href="http://ei.cs.vt.edu/%7Ecs5014/courseNotes/4.LiterateProgramming/literate_prog.html"> + <title>Literate Programming Overview</title> + </bookmark> + <bookmark href="http://www.perl.com/pub/a/tchrist/litprog.html"> + <title>POD is not Literate Programming</title> + </bookmark> + <bookmark href="http://www.cornellcollege.edu/%7Eltabak/publications/articles/swsafety.html"> + <title>Computers That We Can Count On</title> + </bookmark> + <bookmark href="http://www.cs.auc.dk/%7Enormark/litpro/issues-and-problems.html"> + <title>Literate Programming - Issues and Problems</title> + </bookmark> + <bookmark href="http://c2.com/cgi/wiki?LiterateProgramming"> + <title>Literate Programming - Wiki Pages</title> + </bookmark> + <bookmark href="http://developers.slashdot.org/developers/02/05/19/2216233.shtml"> + <title>What is well-commented code?</title> + </bookmark> + <bookmark href="http://liinwww.ira.uka.de/bibliography/SE/litprog.html"> + <title>Bibliography on literate programming - A searchable bibliography</title> + </bookmark> + <bookmark href="http://www2.umassd.edu/SWPI/ProcessBibliography/bib-codereading.html"> + <title>Program comprehension and code reading bibliography</title> + </bookmark> + <bookmark href="http://www.cs.auc.dk/%7Enormark/elucidative-programming/"> + <title>Elucidative Programming</title> + </bookmark> + <bookmark href="http://www.msu.edu/%7Epfaffben/avl/index.html"> + <title>AVL Trees (TexiWeb)</title> + </bookmark> + <bookmark href="http://literate-programming.wikiverse.org/"> + <title>Literate Programming on Wikiverse</title> + </bookmark> + <bookmark href="http://www.pbrt.org/"> + <title>Physically Based Rendering: From Theory to Implementation</title> + </bookmark> + </folder> + <folder folded="no"> + <title>Useful C++ Links</title> + <folder folded="no"> + <title>STL</title> + <bookmark href="http://www.sgi.com/tech/stl/table_of_contents.html"> + <title>STL Reference Documentation</title> + </bookmark> + <bookmark href="http://www.yrl.co.uk/~phil/stl/stl.htmlx"> + <title>STL Tutorial</title> + </bookmark> + <bookmark href="http://www.cppreference.com/cpp_stl.html"> + <title>STL Reference</title> + </bookmark> + </folder> + <folder folded="no"> + <title>Qt</title> + <bookmark href="http://doc.trolltech.com/2.3/"> + <title>Qt 2.3 Reference</title> + </bookmark> + <bookmark href="http://doc.trolltech.com/3.3/"> + <title>Qt 3.3 Reference</title> + </bookmark> + <bookmark href="http://doc.trolltech.com/4.0/"> + <title>Qt 4.0 Reference</title> + </bookmark> + <bookmark href="http://qtsoftware.com/"> + <title>Trolltech Home Page</title> + </bookmark> + </folder> + <folder folded="yes"> + <title>IOStreams</title> + <bookmark href="http://www.cplusplus.com/ref/iostream/index.html"> + <title>IO Stream Library</title> + </bookmark> + <bookmark href="http://courses.cs.vt.edu/~cs2604/fall01/binio.html"> + <title>Binary I/O</title> + </bookmark> + <bookmark href="http://www.parashift.com/c++-faq-lite/input-output.html"> + <title>I/O Stream FAQ</title> + </bookmark> + </folder> + <folder folded="yes"> + <title>gdb</title> + <bookmark href="http://www.cs.princeton.edu/~benjasik/gdb/gdbtut.html"> + <title>GDB Tutorial</title> + </bookmark> + <bookmark href="http://www.gnu.org/manual/gdb-4.17/html_mono/gdb.html"> + <title>Debugging with GDB</title> + </bookmark> + <bookmark href="http://www.cs.washington.edu/orgs/acm/tutorials/dev-in-unix/gdb-refcard.pdf"> + <title>GDB Quick Reference Page (PDF) (Handy)</title> + </bookmark> + </folder> + <folder folded="yes"> + <title>Classes and Constructors</title> + <bookmark href="http://www.parashift.com/c++-faq-lite/ctors.html"> + <title>Constructor FAQ</title> + </bookmark> + <bookmark href="http://www.juicystudio.com/tutorial/cpp/index.html"> + <title>Organizing Classes</title> + </bookmark> + </folder> + </folder> + <folder folded="yes"> + <title>Software Documentation or System Documentation</title> + <bookmark href="http://www.martinfowler.com/distributedComputing/thud.html"> + <title>The Almighty Thud</title> + </bookmark> + <bookmark href="http://msdn.microsoft.com/library/techart/cfr.htm"> + <title>Microsoft Coding Techniques and Programming Practices</title> + </bookmark> + <bookmark href="http://www.bearcave.com/software/prog_docs.html"> + <title>Software and Documentation</title> + </bookmark> + <bookmark href="http://c2.com/cgi/wiki?TheSourceCodeIsTheDesign"> + <title>The Source Code is the Design</title> + </bookmark> + <bookmark href="http://www.bleading-edge.com/Publications/C++Journal/Cpjour2.htm"> + <title>What is Software Design?</title> + </bookmark> + <bookmark href="http://www.mindprod.com/unmain.html"> + <title>How To Write Unmaintainable Code</title> + </bookmark> + <bookmark href="http://www.idinews.com/selfDoc.html"> + <title>Self Documenting Program Code Remains a Distant Goal</title> + </bookmark> + <bookmark href="http://www.sdmagazine.com/documents/s=730/sdm0106m/0106m.htm"> + <title>Place Tab A in Slot B</title> + </bookmark> + <bookmark href="http://www.holub.com/class/uml/uml.html"> + <title>UML Reference Card</title> + </bookmark> + </folder> + <folder folded="yes"> + <title>TeX Resources</title> + <bookmark href="http://www.tug.org/"> + <title>The TeX User's Group</title> + </bookmark> + <bookmark href="http://www.miktex.org/"> + <title>MikTeX website</title> + </bookmark> + <bookmark href="http://cm.bell-labs.com/who/hobby/MetaPost.html"> + <title>MetaPost website</title> + </bookmark> + <bookmark href="http://pauillac.inria.fr/%7Emaranget/hevea/"> + <title>HEVEA is a quite complete and fast LATEX to HTML translator</title> + </bookmark> + </folder> + <folder folded="no"> + <title>Portable Document Format (PDF)</title> + <bookmark href="http://www.adobe.com/"> + <title>Adobe - The postscript and PDF standards</title> + </bookmark> + <bookmark href="http://partners.adobe.com/asn/developer/technotes/acrobatpdf.html"> + <title>Reference Manual Portable Document Format</title> + </bookmark> + <bookmark href="http://partners.adobe.com/asn/developer/acrosdk/main.html"> + <title>Adobe Acrobat Software Development Kit</title> + </bookmark> + </folder> + <folder folded="yes"> + <title>Literature Sites</title> + <bookmark href="http://www.cc.columbia.edu/cu/libraries/subjects/speccol.html"> + <title>Guide to Special Collections (Columbia University)</title> + </bookmark> + <bookmark href="http://www.ipl.org/ref/litcrit/"> + <title>Literary Criticism on the Web from the Internet Public Library</title> + </bookmark> + <bookmark href="http://www.victorianweb.org/"> + <title>Victorian Web.</title> + </bookmark> + <bookmark href="http://vos.ucsb.edu/"> + <title>Voice of the Shuttle.</title> + </bookmark> + <bookmark href="http://www.modjourn.brown.edu/"> + <title>Modernist Journals Project</title> + </bookmark> + <bookmark href="http://www.poetspath.com"> + <title>Museum of American Poetics</title> + </bookmark> + <bookmark href="http://www.english.uiuc.edu/maps/"> + <title>Modern American Poetry</title> + </bookmark> + <bookmark href="http://www.findarticles.com/"> + <title>FindArticles.com</title> + </bookmark> + <bookmark href="http://www.literaryhistory.com"> + <title>Literary History</title> + </bookmark> + <bookmark href="http://www.litencyc.com/LitEncycFrame.htm"> + <title>Literary Encyclopedia</title> + </bookmark> + <separator/> + <bookmark href="http://texts.cdlib.org/ucpress/"> + <title>The University of California Press</title> + </bookmark> + <bookmark href="http://www.letrs.indiana.edu/web/w/wright2/"> + <title>Wright American Fiction, 1851-1875</title> + </bookmark> + <bookmark href="http://docsouth.unc.edu/"> + <title>Documenting the American South: Beginnings to 1920</title> + </bookmark> + <bookmark href="http://etext.lib.virginia.edu/eng-on.html"> + <title>Electronic Text Center at the University of Virginia</title> + </bookmark> + <bookmark href="http://digital.nypl.org/schomburg/writers_aa19/"> + <title>The Schomburg Center for Research in Black Culture</title> + </bookmark> + <bookmark href="http://www.infomotions.com/alex2/"> + <title>Alex Catalogue of Electronic Texts.</title> + </bookmark> + </folder> +</xbel> diff --git a/examples/xml/streambookmarks/jennifer.xbel b/examples/xml/streambookmarks/jennifer.xbel new file mode 100644 index 0000000..597880a --- /dev/null +++ b/examples/xml/streambookmarks/jennifer.xbel @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE xbel> +<xbel version="1.0"> + <folder folded="no"> + <title>Qt Resources</title> + <folder folded="yes"> + <title>Trolltech Partners</title> + <bookmark href="http://partners.trolltech.com/partners/training.html"> + <title>Training Partners</title> + </bookmark> + <bookmark href="http://partners.trolltech.com/partners/service.html"> + <title>Consultants and System Integrators</title> + </bookmark> + <bookmark href="http://partners.trolltech.com/partners/tech.html"> + <title>Technology Partners</title> + </bookmark> + <bookmark href="http://partners.trolltech.com/partners/resellers.html"> + <title>Value Added Resellers (VARs)</title> + </bookmark> + </folder> + <folder folded="yes"> + <title>Community Resources</title> + <bookmark href="http://www.qtforum.org/"> + <title>QtForum.org</title> + </bookmark> + <bookmark href="http://www.digitalfanatics.org/projects/qt_tutorial/"> + <title>The Independent Qt Tutorial</title> + </bookmark> + <bookmark href="http://prog.qt.free.fr/"> + <title>French PROG.Qt</title> + </bookmark> + <bookmark href="http://www.qtforum.de/"> + <title>German Qt Forum</title> + </bookmark> + <bookmark href="http://www.korone.net/"> + <title>Korean Qt Community Site</title> + </bookmark> + <bookmark href="http://prog.org.ru/forum/forum_14.html"> + <title>Russian Qt Forum</title> + </bookmark> + <bookmark href="http://qt4.digitalfanatics.org/"> + <title>Digitalfanatics: The QT 4 Resource Center</title> + </bookmark> + <bookmark href="http://www.qtquestions.org/"> + <title>QtQuestions</title> + </bookmark> + </folder> + <bookmark href="http://doc.trolltech.com/qq/"> + <title>Qt Quarterly</title> + </bookmark> + <bookmark href="http://qtsoftware.com/"> + <title>Trolltech's home page</title> + </bookmark> + <bookmark href="http://doc.trolltech.com/4.0/"> + <title>Qt 4.0 documentation</title> + </bookmark> + <bookmark href="http://qtsoftware.com/developer/faqs/"> + <title>Frequently Asked Questions</title> + </bookmark> + </folder> + <folder folded="no"> + <title>Online Dictionaries</title> + <bookmark href="http://www.dictionary.com/"> + <title>Dictionary.com</title> + </bookmark> + <bookmark href="http://www.m-w.com/"> + <title>Merriam-Webster Online</title> + </bookmark> + <bookmark href="http://dictionary.cambridge.org/"> + <title>Cambridge Dictionaries Online</title> + </bookmark> + <bookmark href="http://www.onelook.com/"> + <title>OneLook Dictionary Search</title> + </bookmark> + <separator/> + <bookmark href="www.iee.et.tu-dresden.de/"> + <title>The New English-German Dictionary</title> + </bookmark> + <bookmark href="http://dict.tu-chemnitz.de/"> + <title>TU Chemnitz German-English Dictionary</title> + </bookmark> + <separator/> + <bookmark href="http://atilf.atilf.fr/tlf.htm"> + <title>Trésor de la Langue Française informatisé</title> + </bookmark> + <bookmark href="http://dictionnaires.atilf.fr/dictionnaires/ACADEMIE/"> + <title>Dictionnaire de l'Académie Française</title> + </bookmark> + <bookmark href="http://elsap1.unicaen.fr/cgi-bin/cherches.cgi"> + <title>Dictionnaire des synonymes</title> + </bookmark> + </folder> +</xbel> diff --git a/examples/xml/streambookmarks/main.cpp b/examples/xml/streambookmarks/main.cpp new file mode 100644 index 0000000..58b5c5e --- /dev/null +++ b/examples/xml/streambookmarks/main.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QApplication> + +#include "mainwindow.h" + +//! [0] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow mainWin; + mainWin.show(); + mainWin.open(); + return app.exec(); +} +//! [0] diff --git a/examples/xml/streambookmarks/mainwindow.cpp b/examples/xml/streambookmarks/mainwindow.cpp new file mode 100644 index 0000000..2136b4b --- /dev/null +++ b/examples/xml/streambookmarks/mainwindow.cpp @@ -0,0 +1,177 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "mainwindow.h" +#include "xbelreader.h" +#include "xbelwriter.h" + +//! [0] +MainWindow::MainWindow() +{ + QStringList labels; + labels << tr("Title") << tr("Location"); + + treeWidget = new QTreeWidget; + treeWidget->header()->setResizeMode(QHeaderView::Stretch); + treeWidget->setHeaderLabels(labels); + setCentralWidget(treeWidget); + + createActions(); + createMenus(); + + statusBar()->showMessage(tr("Ready")); + + setWindowTitle(tr("QXmlStream Bookmarks")); + resize(480, 320); +} +//! [0] + +//! [1] +void MainWindow::open() +{ + QString fileName = + QFileDialog::getOpenFileName(this, tr("Open Bookmark File"), + QDir::currentPath(), + tr("XBEL Files (*.xbel *.xml)")); + if (fileName.isEmpty()) + return; + + treeWidget->clear(); + + + QFile file(fileName); + if (!file.open(QFile::ReadOnly | QFile::Text)) { + QMessageBox::warning(this, tr("QXmlStream Bookmarks"), + tr("Cannot read file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } + + XbelReader reader(treeWidget); + if (!reader.read(&file)) { + QMessageBox::warning(this, tr("QXmlStream Bookmarks"), + tr("Parse error in file %1 at line %2, column %3:\n%4") + .arg(fileName) + .arg(reader.lineNumber()) + .arg(reader.columnNumber()) + .arg(reader.errorString())); + } else { + statusBar()->showMessage(tr("File loaded"), 2000); + } + +} +//! [1] + +//! [2] +void MainWindow::saveAs() +{ + QString fileName = + QFileDialog::getSaveFileName(this, tr("Save Bookmark File"), + QDir::currentPath(), + tr("XBEL Files (*.xbel *.xml)")); + if (fileName.isEmpty()) + return; + + QFile file(fileName); + if (!file.open(QFile::WriteOnly | QFile::Text)) { + QMessageBox::warning(this, tr("QXmlStream Bookmarks"), + tr("Cannot write file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } + + XbelWriter writer(treeWidget); + if (writer.writeFile(&file)) + statusBar()->showMessage(tr("File saved"), 2000); +} +//! [2] + +//! [3] +void MainWindow::about() +{ + QMessageBox::about(this, tr("About QXmlStream Bookmarks"), + tr("The <b>QXmlStream Bookmarks</b> example demonstrates how to use Qt's " + "QXmlStream classes to read and write XML documents.")); +} +//! [3] + +//! [4] +void MainWindow::createActions() +{ + openAct = new QAction(tr("&Open..."), this); + openAct->setShortcut(tr("Ctrl+O")); + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); + + saveAsAct = new QAction(tr("&Save As..."), this); + saveAsAct->setShortcut(tr("Ctrl+S")); + connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); + + exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcut(tr("Ctrl+Q")); + connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); + + aboutAct = new QAction(tr("&About"), this); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + + aboutQtAct = new QAction(tr("About &Qt"), this); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); +} +//! [4] + +//! [5] +void MainWindow::createMenus() +{ + fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(openAct); + fileMenu->addAction(saveAsAct); + fileMenu->addAction(exitAct); + + menuBar()->addSeparator(); + + helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); +} +//! [5] diff --git a/examples/xml/streambookmarks/mainwindow.h b/examples/xml/streambookmarks/mainwindow.h new file mode 100644 index 0000000..8bed33d --- /dev/null +++ b/examples/xml/streambookmarks/mainwindow.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> + +QT_BEGIN_NAMESPACE +class QTreeWidget; +QT_END_NAMESPACE + +//! [0] +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void open(); + void saveAs(); + void about(); + +private: + void createActions(); + void createMenus(); + + QTreeWidget *treeWidget; + + QMenu *fileMenu; + QMenu *helpMenu; + QAction *openAct; + QAction *saveAsAct; + QAction *exitAct; + QAction *aboutAct; + QAction *aboutQtAct; +}; +//! [0] + +#endif diff --git a/examples/xml/streambookmarks/streambookmarks.pro b/examples/xml/streambookmarks/streambookmarks.pro new file mode 100644 index 0000000..e66b95a --- /dev/null +++ b/examples/xml/streambookmarks/streambookmarks.pro @@ -0,0 +1,14 @@ +HEADERS = mainwindow.h \ + xbelreader.h \ + xbelwriter.h +SOURCES = main.cpp \ + mainwindow.cpp \ + xbelreader.cpp \ + xbelwriter.cpp +QT += xml + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/xml/streambookmarks +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS streambookmarks.pro *.xbel +sources.path = $$[QT_INSTALL_EXAMPLES]/xml/streambookmarks +INSTALLS += target sources diff --git a/examples/xml/streambookmarks/xbelreader.cpp b/examples/xml/streambookmarks/xbelreader.cpp new file mode 100644 index 0000000..561997a --- /dev/null +++ b/examples/xml/streambookmarks/xbelreader.cpp @@ -0,0 +1,205 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "xbelreader.h" + +//! [0] +XbelReader::XbelReader(QTreeWidget *treeWidget) + : treeWidget(treeWidget) +{ + QStyle *style = treeWidget->style(); + + folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), + QIcon::Normal, QIcon::Off); + folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), + QIcon::Normal, QIcon::On); + bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon)); +} +//! [0] + +//! [1] +bool XbelReader::read(QIODevice *device) +{ + setDevice(device); + + while (!atEnd()) { + readNext(); + + if (isStartElement()) { + if (name() == "xbel" && attributes().value("version") == "1.0") + readXBEL(); + else + raiseError(QObject::tr("The file is not an XBEL version 1.0 file.")); + } + } + + return !error(); +} +//! [1] + +//! [2] +void XbelReader::readUnknownElement() +{ + Q_ASSERT(isStartElement()); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + readUnknownElement(); + } +} +//! [2] + +//! [3] +void XbelReader::readXBEL() +{ + Q_ASSERT(isStartElement() && name() == "xbel"); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + if (name() == "folder") + readFolder(0); + else if (name() == "bookmark") + readBookmark(0); + else if (name() == "separator") + readSeparator(0); + else + readUnknownElement(); + } + } +} +//! [3] + +//! [4] +void XbelReader::readTitle(QTreeWidgetItem *item) +{ + Q_ASSERT(isStartElement() && name() == "title"); + + QString title = readElementText(); + item->setText(0, title); +} +//! [4] + +//! [5] +void XbelReader::readSeparator(QTreeWidgetItem *item) +{ + QTreeWidgetItem *separator = createChildItem(item); + separator->setFlags(item->flags() & ~Qt::ItemIsSelectable); + separator->setText(0, QString(30, 0xB7)); + readElementText(); +} +//! [5] + +void XbelReader::readFolder(QTreeWidgetItem *item) +{ + Q_ASSERT(isStartElement() && name() == "folder"); + + QTreeWidgetItem *folder = createChildItem(item); + bool folded = (attributes().value("folded") != "no"); + treeWidget->setItemExpanded(folder, !folded); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + if (name() == "title") + readTitle(folder); + else if (name() == "folder") + readFolder(folder); + else if (name() == "bookmark") + readBookmark(folder); + else if (name() == "separator") + readSeparator(folder); + else + readUnknownElement(); + } + } +} + +void XbelReader::readBookmark(QTreeWidgetItem *item) +{ + Q_ASSERT(isStartElement() && name() == "bookmark"); + + QTreeWidgetItem *bookmark = createChildItem(item); + bookmark->setFlags(bookmark->flags() | Qt::ItemIsEditable); + bookmark->setIcon(0, bookmarkIcon); + bookmark->setText(0, QObject::tr("Unknown title")); + bookmark->setText(1, attributes().value("href").toString()); + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + if (name() == "title") + readTitle(bookmark); + else + readUnknownElement(); + } + } +} + +QTreeWidgetItem *XbelReader::createChildItem(QTreeWidgetItem *item) +{ + QTreeWidgetItem *childItem; + if (item) { + childItem = new QTreeWidgetItem(item); + } else { + childItem = new QTreeWidgetItem(treeWidget); + } + childItem->setData(0, Qt::UserRole, name().toString()); + return childItem; +} diff --git a/examples/xml/streambookmarks/xbelreader.h b/examples/xml/streambookmarks/xbelreader.h new file mode 100644 index 0000000..dc5eac9 --- /dev/null +++ b/examples/xml/streambookmarks/xbelreader.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef XBELREADER_H +#define XBELREADER_H + +#include <QIcon> +#include <QXmlStreamReader> + +QT_BEGIN_NAMESPACE +class QTreeWidget; +class QTreeWidgetItem; +QT_END_NAMESPACE + +//! [0] +class XbelReader : public QXmlStreamReader +{ +public: +//! [1] + XbelReader(QTreeWidget *treeWidget); +//! [1] + + bool read(QIODevice *device); + +private: +//! [2] + void readUnknownElement(); + void readXBEL(); + void readTitle(QTreeWidgetItem *item); + void readSeparator(QTreeWidgetItem *item); + void readFolder(QTreeWidgetItem *item); + void readBookmark(QTreeWidgetItem *item); + + QTreeWidgetItem *createChildItem(QTreeWidgetItem *item); + + QTreeWidget *treeWidget; +//! [2] + + QIcon folderIcon; + QIcon bookmarkIcon; +}; +//! [0] + +#endif diff --git a/examples/xml/streambookmarks/xbelwriter.cpp b/examples/xml/streambookmarks/xbelwriter.cpp new file mode 100644 index 0000000..b3ce288 --- /dev/null +++ b/examples/xml/streambookmarks/xbelwriter.cpp @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "xbelwriter.h" + +//! [0] +XbelWriter::XbelWriter(QTreeWidget *treeWidget) + : treeWidget(treeWidget) +{ + setAutoFormatting(true); +} +//! [0] + +//! [1] +bool XbelWriter::writeFile(QIODevice *device) +{ + setDevice(device); + + writeStartDocument(); + writeDTD("<!DOCTYPE xbel>"); + writeStartElement("xbel"); + writeAttribute("version", "1.0"); + for (int i = 0; i < treeWidget->topLevelItemCount(); ++i) + writeItem(treeWidget->topLevelItem(i)); + + writeEndDocument(); + return true; +} +//! [1] + +//! [2] +void XbelWriter::writeItem(QTreeWidgetItem *item) +{ + QString tagName = item->data(0, Qt::UserRole).toString(); + if (tagName == "folder") { + bool folded = !treeWidget->isItemExpanded(item); + writeStartElement(tagName); + writeAttribute("folded", folded ? "yes" : "no"); + writeTextElement("title", item->text(0)); + for (int i = 0; i < item->childCount(); ++i) + writeItem(item->child(i)); + writeEndElement(); + } else if (tagName == "bookmark") { + writeStartElement(tagName); + if (!item->text(1).isEmpty()) + writeAttribute("href", item->text(1)); + writeTextElement("title", item->text(0)); + writeEndElement(); + } else if (tagName == "separator") { + writeEmptyElement(tagName); + } +} +//! [2] diff --git a/examples/xml/streambookmarks/xbelwriter.h b/examples/xml/streambookmarks/xbelwriter.h new file mode 100644 index 0000000..ec80e05 --- /dev/null +++ b/examples/xml/streambookmarks/xbelwriter.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef XBELWRITER_H +#define XBELWRITER_H + +#include <QXmlStreamWriter> + +QT_BEGIN_NAMESPACE +class QTreeWidget; +class QTreeWidgetItem; +QT_END_NAMESPACE + +//! [0] +class XbelWriter : public QXmlStreamWriter +{ +public: + XbelWriter(QTreeWidget *treeWidget); + bool writeFile(QIODevice *device); + +private: + void writeItem(QTreeWidgetItem *item); + QTreeWidget *treeWidget; +}; +//! [0] + +#endif |