diff options
Diffstat (limited to 'examples/xml')
36 files changed, 3607 insertions, 0 deletions
diff --git a/examples/xml/README b/examples/xml/README new file mode 100644 index 0000000..a6d81bb --- /dev/null +++ b/examples/xml/README @@ -0,0 +1,40 @@ +XML parsing and handling is supported through SAX and DOM compliant APIs. + +Qt's SAX compliant classes allow you to parse XML incrementally; the DOM +classes enable more complex document-level operations to be performed on +XML files. + + +The example launcher provided with Qt can be used to explore each of the +examples in this directory. + +Documentation for these examples can be found via the Tutorial and Examples +link in the main Qt documentation. + + +Finding the Qt Examples and Demos launcher +========================================== + +On Windows: + +The launcher can be accessed via the Windows Start menu. Select the menu +entry entitled "Qt Examples and Demos" entry in the submenu containing +the Qt tools. + +On Mac OS X: + +For the binary distribution, the qtdemo executable is installed in the +/Developer/Applications/Qt directory. For the source distribution, it is +installed alongside the other Qt tools on the path specified when Qt is +configured. + +On Unix/Linux: + +The qtdemo executable is installed alongside the other Qt tools on the path +specified when Qt is configured. + +On all platforms: + +The source code for the launcher can be found in the demos/qtdemo directory +in the Qt package. This example is built at the same time as the Qt libraries, +tools, examples, and demonstrations. diff --git a/examples/xml/dombookmarks/dombookmarks.pro b/examples/xml/dombookmarks/dombookmarks.pro new file mode 100644 index 0000000..e55754f --- /dev/null +++ b/examples/xml/dombookmarks/dombookmarks.pro @@ -0,0 +1,18 @@ +HEADERS = mainwindow.h \ + xbeltree.h +SOURCES = main.cpp \ + mainwindow.cpp \ + xbeltree.cpp +QT += xml + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/xml/dombookmarks +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS dombookmarks.pro *.xbel +sources.path = $$[QT_INSTALL_EXAMPLES]/xml/dombookmarks +INSTALLS += target sources + +wince*: { + addFiles.sources = frank.xbel jennifer.xbel + addFiles.path = \My Documents + DEPLOYMENT += addFiles +} diff --git a/examples/xml/dombookmarks/frank.xbel b/examples/xml/dombookmarks/frank.xbel new file mode 100644 index 0000000..d6a12c6 --- /dev/null +++ b/examples/xml/dombookmarks/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/dombookmarks/jennifer.xbel b/examples/xml/dombookmarks/jennifer.xbel new file mode 100644 index 0000000..597880a --- /dev/null +++ b/examples/xml/dombookmarks/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/dombookmarks/main.cpp b/examples/xml/dombookmarks/main.cpp new file mode 100644 index 0000000..3f0a207 --- /dev/null +++ b/examples/xml/dombookmarks/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** 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" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow mainWin; + mainWin.show(); + mainWin.open(); + return app.exec(); +} diff --git a/examples/xml/dombookmarks/mainwindow.cpp b/examples/xml/dombookmarks/mainwindow.cpp new file mode 100644 index 0000000..6b0c101 --- /dev/null +++ b/examples/xml/dombookmarks/mainwindow.cpp @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** 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 "xbeltree.h" + +MainWindow::MainWindow() +{ + xbelTree = new XbelTree; + setCentralWidget(xbelTree); + + createActions(); + createMenus(); + + statusBar()->showMessage(tr("Ready")); + + setWindowTitle(tr("DOM Bookmarks")); + resize(480, 320); +} + +void MainWindow::open() +{ + QString fileName = + QFileDialog::getOpenFileName(this, tr("Open Bookmark File"), + QDir::currentPath(), + tr("XBEL Files (*.xbel *.xml)")); + if (fileName.isEmpty()) + return; + + QFile file(fileName); + if (!file.open(QFile::ReadOnly | QFile::Text)) { + QMessageBox::warning(this, tr("SAX Bookmarks"), + tr("Cannot read file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } + + if (xbelTree->read(&file)) + statusBar()->showMessage(tr("File loaded"), 2000); +} + +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("SAX Bookmarks"), + tr("Cannot write file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } + + if (xbelTree->write(&file)) + statusBar()->showMessage(tr("File saved"), 2000); +} + +void MainWindow::about() +{ + QMessageBox::about(this, tr("About DOM Bookmarks"), + tr("The <b>DOM Bookmarks</b> example demonstrates how to " + "use Qt's DOM classes to read and write XML " + "documents.")); +} + +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())); +} + +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); +} diff --git a/examples/xml/dombookmarks/mainwindow.h b/examples/xml/dombookmarks/mainwindow.h new file mode 100644 index 0000000..cf30a3e --- /dev/null +++ b/examples/xml/dombookmarks/mainwindow.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** 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> + +class XbelTree; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void open(); + void saveAs(); + void about(); + +private: + void createActions(); + void createMenus(); + + XbelTree *xbelTree; + + QMenu *fileMenu; + QMenu *helpMenu; + QAction *openAct; + QAction *saveAsAct; + QAction *exitAct; + QAction *aboutAct; + QAction *aboutQtAct; +}; + +#endif diff --git a/examples/xml/dombookmarks/xbeltree.cpp b/examples/xml/dombookmarks/xbeltree.cpp new file mode 100644 index 0000000..37e8bb2 --- /dev/null +++ b/examples/xml/dombookmarks/xbeltree.cpp @@ -0,0 +1,187 @@ +/**************************************************************************** +** +** 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 "xbeltree.h" + +XbelTree::XbelTree(QWidget *parent) + : QTreeWidget(parent) +{ + QStringList labels; + labels << tr("Title") << tr("Location"); + + header()->setResizeMode(QHeaderView::Stretch); + setHeaderLabels(labels); + + 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)); +} + +bool XbelTree::read(QIODevice *device) +{ + QString errorStr; + int errorLine; + int errorColumn; + + if (!domDocument.setContent(device, true, &errorStr, &errorLine, + &errorColumn)) { + QMessageBox::information(window(), tr("DOM Bookmarks"), + tr("Parse error at line %1, column %2:\n%3") + .arg(errorLine) + .arg(errorColumn) + .arg(errorStr)); + return false; + } + + QDomElement root = domDocument.documentElement(); + if (root.tagName() != "xbel") { + QMessageBox::information(window(), tr("DOM Bookmarks"), + tr("The file is not an XBEL file.")); + return false; + } else if (root.hasAttribute("version") + && root.attribute("version") != "1.0") { + QMessageBox::information(window(), tr("DOM Bookmarks"), + tr("The file is not an XBEL version 1.0 " + "file.")); + return false; + } + + clear(); + + disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), + this, SLOT(updateDomElement(QTreeWidgetItem *, int))); + + QDomElement child = root.firstChildElement("folder"); + while (!child.isNull()) { + parseFolderElement(child); + child = child.nextSiblingElement("folder"); + } + + connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), + this, SLOT(updateDomElement(QTreeWidgetItem *, int))); + + return true; +} + +bool XbelTree::write(QIODevice *device) +{ + const int IndentSize = 4; + + QTextStream out(device); + domDocument.save(out, IndentSize); + return true; +} + +void XbelTree::updateDomElement(QTreeWidgetItem *item, int column) +{ + QDomElement element = domElementForItem.value(item); + if (!element.isNull()) { + if (column == 0) { + QDomElement oldTitleElement = element.firstChildElement("title"); + QDomElement newTitleElement = domDocument.createElement("title"); + + QDomText newTitleText = domDocument.createTextNode(item->text(0)); + newTitleElement.appendChild(newTitleText); + + element.replaceChild(newTitleElement, oldTitleElement); + } else { + if (element.tagName() == "bookmark") + element.setAttribute("href", item->text(1)); + } + } +} + +void XbelTree::parseFolderElement(const QDomElement &element, + QTreeWidgetItem *parentItem) +{ + QTreeWidgetItem *item = createItem(element, parentItem); + + QString title = element.firstChildElement("title").text(); + if (title.isEmpty()) + title = QObject::tr("Folder"); + + item->setFlags(item->flags() | Qt::ItemIsEditable); + item->setIcon(0, folderIcon); + item->setText(0, title); + + bool folded = (element.attribute("folded") != "no"); + setItemExpanded(item, !folded); + + QDomElement child = element.firstChildElement(); + while (!child.isNull()) { + if (child.tagName() == "folder") { + parseFolderElement(child, item); + } else if (child.tagName() == "bookmark") { + QTreeWidgetItem *childItem = createItem(child, item); + + QString title = child.firstChildElement("title").text(); + if (title.isEmpty()) + title = QObject::tr("Folder"); + + childItem->setFlags(item->flags() | Qt::ItemIsEditable); + childItem->setIcon(0, bookmarkIcon); + childItem->setText(0, title); + childItem->setText(1, child.attribute("href")); + } else if (child.tagName() == "separator") { + QTreeWidgetItem *childItem = createItem(child, item); + childItem->setFlags(item->flags() & ~(Qt::ItemIsSelectable | Qt::ItemIsEditable)); + childItem->setText(0, QString(30, 0xB7)); + } + child = child.nextSiblingElement(); + } +} + +QTreeWidgetItem *XbelTree::createItem(const QDomElement &element, + QTreeWidgetItem *parentItem) +{ + QTreeWidgetItem *item; + if (parentItem) { + item = new QTreeWidgetItem(parentItem); + } else { + item = new QTreeWidgetItem(this); + } + domElementForItem.insert(item, element); + return item; +} diff --git a/examples/xml/dombookmarks/xbeltree.h b/examples/xml/dombookmarks/xbeltree.h new file mode 100644 index 0000000..4f2d304 --- /dev/null +++ b/examples/xml/dombookmarks/xbeltree.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** 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 XBELTREE_H +#define XBELTREE_H + +#include <QDomDocument> +#include <QHash> +#include <QIcon> +#include <QTreeWidget> + +class XbelTree : public QTreeWidget +{ + Q_OBJECT + +public: + XbelTree(QWidget *parent = 0); + + bool read(QIODevice *device); + bool write(QIODevice *device); + +private slots: + void updateDomElement(QTreeWidgetItem *item, int column); + +private: + void parseFolderElement(const QDomElement &element, + QTreeWidgetItem *parentItem = 0); + QTreeWidgetItem *createItem(const QDomElement &element, + QTreeWidgetItem *parentItem = 0); + + QDomDocument domDocument; + QHash<QTreeWidgetItem *, QDomElement> domElementForItem; + QIcon folderIcon; + QIcon bookmarkIcon; +}; + +#endif diff --git a/examples/xml/rsslisting/main.cpp b/examples/xml/rsslisting/main.cpp new file mode 100644 index 0000000..0c9b275 --- /dev/null +++ b/examples/xml/rsslisting/main.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +/* +main.cpp + +Provides the main function for the RSS news reader example. +*/ + +#include <QtGui> + +#include "rsslisting.h" + +/*! + Create an application and a main widget. Open the main widget for + user input, and exit with an appropriate return value when it is + closed. +*/ + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + RSSListing *rsslisting = new RSSListing; + rsslisting->show(); + return app.exec(); +} diff --git a/examples/xml/rsslisting/rsslisting.cpp b/examples/xml/rsslisting/rsslisting.cpp new file mode 100644 index 0000000..9212c11 --- /dev/null +++ b/examples/xml/rsslisting/rsslisting.cpp @@ -0,0 +1,239 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +/* +rsslisting.cpp + +Provides a widget for displaying news items from RDF news sources. +RDF is an XML-based format for storing items of information (see +http://www.w3.org/RDF/ for details). + +The widget itself provides a simple user interface for specifying +the URL of a news source, and controlling the downloading of news. + +The widget downloads and parses the XML asynchronously, feeding the +data to an XML reader in pieces. This allows the user to interrupt +its operation, and also allows very large data sources to be read. +*/ + + +#include <QtCore> +#include <QtGui> +#include <QtNetwork> + +#include "rsslisting.h" + + +/* + Constructs an RSSListing widget with a simple user interface, and sets + up the XML reader to use a custom handler class. + + The user interface consists of a line edit, two push buttons, and a + list view widget. The line edit is used for entering the URLs of news + sources; the push buttons start and abort the process of reading the + news. +*/ + +RSSListing::RSSListing(QWidget *parent) + : QWidget(parent) +{ + lineEdit = new QLineEdit(this); + lineEdit->setText("http://labs.trolltech.com/blogs/feed"); + + fetchButton = new QPushButton(tr("Fetch"), this); + abortButton = new QPushButton(tr("Abort"), this); + abortButton->setEnabled(false); + + treeWidget = new QTreeWidget(this); + connect(treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*, int)), + this, SLOT(itemActivated(QTreeWidgetItem*))); + QStringList headerLabels; + headerLabels << tr("Title") << tr("Link"); + treeWidget->setHeaderLabels(headerLabels); + treeWidget->header()->setResizeMode(QHeaderView::ResizeToContents); + + connect(&http, SIGNAL(readyRead(const QHttpResponseHeader &)), + this, SLOT(readData(const QHttpResponseHeader &))); + + connect(&http, SIGNAL(requestFinished(int, bool)), + this, SLOT(finished(int, bool))); + + connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(fetch())); + connect(fetchButton, SIGNAL(clicked()), this, SLOT(fetch())); + connect(abortButton, SIGNAL(clicked()), &http, SLOT(abort())); + + QVBoxLayout *layout = new QVBoxLayout(this); + + QHBoxLayout *hboxLayout = new QHBoxLayout; + + hboxLayout->addWidget(lineEdit); + hboxLayout->addWidget(fetchButton); + hboxLayout->addWidget(abortButton); + + layout->addLayout(hboxLayout); + layout->addWidget(treeWidget); + + setWindowTitle(tr("RSS listing example")); + resize(640,480); +} + +/* + Starts fetching data from a news source specified in the line + edit widget. + + The line edit is made read only to prevent the user from modifying its + contents during the fetch; this is only for cosmetic purposes. + The fetch button is disabled, and the abort button is enabled to allow + the user to interrupt processing. The list view is cleared, and we + define the last list view item to be 0, meaning that there are no + existing items in the list. + + The HTTP handler is supplied with the raw contents of the line edit and + a fetch is initiated. We keep the ID value returned by the HTTP handler + for future reference. +*/ + +void RSSListing::fetch() +{ + lineEdit->setReadOnly(true); + fetchButton->setEnabled(false); + abortButton->setEnabled(true); + treeWidget->clear(); + + xml.clear(); + + QUrl url(lineEdit->text()); + + http.setHost(url.host()); + connectionId = http.get(url.path()); +} + +/* + Reads data received from the RDF source. + + We read all the available data, and pass it to the XML + stream reader. Then we call the XML parsing function. + + If parsing fails for any reason, we abort the fetch. +*/ + +void RSSListing::readData(const QHttpResponseHeader &resp) +{ + if (resp.statusCode() != 200) + http.abort(); + else { + xml.addData(http.readAll()); + parseXml(); + } +} + +/* + Finishes processing an HTTP request. + + The default behavior is to keep the text edit read only. + + If an error has occurred, the user interface is made available + to the user for further input, allowing a new fetch to be + started. + + If the HTTP get request has finished, we make the + user interface available to the user for further input. +*/ + +void RSSListing::finished(int id, bool error) +{ + if (error) { + qWarning("Received error during HTTP fetch."); + lineEdit->setReadOnly(false); + abortButton->setEnabled(false); + fetchButton->setEnabled(true); + } + else if (id == connectionId) { + lineEdit->setReadOnly(false); + abortButton->setEnabled(false); + fetchButton->setEnabled(true); + } +} + + +/* + Parses the XML data and creates treeWidget items accordingly. +*/ +void RSSListing::parseXml() +{ + while (!xml.atEnd()) { + xml.readNext(); + if (xml.isStartElement()) { + if (xml.name() == "item") + linkString = xml.attributes().value("rss:about").toString(); + currentTag = xml.name().toString(); + } else if (xml.isEndElement()) { + if (xml.name() == "item") { + + QTreeWidgetItem *item = new QTreeWidgetItem; + item->setText(0, titleString); + item->setText(1, linkString); + treeWidget->addTopLevelItem(item); + + titleString.clear(); + linkString.clear(); + } + + } else if (xml.isCharacters() && !xml.isWhitespace()) { + if (currentTag == "title") + titleString += xml.text().toString(); + else if (currentTag == "link") + linkString += xml.text().toString(); + } + } + if (xml.error() && xml.error() != QXmlStreamReader::PrematureEndOfDocumentError) { + qWarning() << "XML ERROR:" << xml.lineNumber() << ": " << xml.errorString(); + http.abort(); + } +} + +/* + Open the link in the browser +*/ +void RSSListing::itemActivated(QTreeWidgetItem * item) +{ + QDesktopServices::openUrl(QUrl(item->text(1))); +} diff --git a/examples/xml/rsslisting/rsslisting.h b/examples/xml/rsslisting/rsslisting.h new file mode 100644 index 0000000..f0007de --- /dev/null +++ b/examples/xml/rsslisting/rsslisting.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** 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 RSSLISTING_H +#define RSSLISTING_H + +#include <QHttp> +#include <QWidget> +#include <QBuffer> +#include <QXmlStreamReader> + +QT_BEGIN_NAMESPACE +class QLineEdit; +class QTreeWidget; +class QTreeWidgetItem; +class QPushButton; +QT_END_NAMESPACE + +class RSSListing : public QWidget +{ + Q_OBJECT +public: + RSSListing(QWidget *widget = 0); + +public slots: + void fetch(); + void finished(int id, bool error); + void readData(const QHttpResponseHeader &); + void itemActivated(QTreeWidgetItem * item); + +private: + void parseXml(); + + QXmlStreamReader xml; + QString currentTag; + QString linkString; + QString titleString; + + QHttp http; + int connectionId; + + QLineEdit *lineEdit; + QTreeWidget *treeWidget; + QPushButton *abortButton; + QPushButton *fetchButton; +}; + +#endif + diff --git a/examples/xml/rsslisting/rsslisting.pro b/examples/xml/rsslisting/rsslisting.pro new file mode 100644 index 0000000..95a23e9 --- /dev/null +++ b/examples/xml/rsslisting/rsslisting.pro @@ -0,0 +1,10 @@ +HEADERS += rsslisting.h +SOURCES += main.cpp rsslisting.cpp +QT += network xml + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/xml/rsslisting +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS rsslisting.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/xml/rsslisting +INSTALLS += target sources + diff --git a/examples/xml/saxbookmarks/frank.xbel b/examples/xml/saxbookmarks/frank.xbel new file mode 100644 index 0000000..d6a12c6 --- /dev/null +++ b/examples/xml/saxbookmarks/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/saxbookmarks/jennifer.xbel b/examples/xml/saxbookmarks/jennifer.xbel new file mode 100644 index 0000000..597880a --- /dev/null +++ b/examples/xml/saxbookmarks/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/saxbookmarks/main.cpp b/examples/xml/saxbookmarks/main.cpp new file mode 100644 index 0000000..3f0a207 --- /dev/null +++ b/examples/xml/saxbookmarks/main.cpp @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** 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" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow mainWin; + mainWin.show(); + mainWin.open(); + return app.exec(); +} diff --git a/examples/xml/saxbookmarks/mainwindow.cpp b/examples/xml/saxbookmarks/mainwindow.cpp new file mode 100644 index 0000000..2cba559 --- /dev/null +++ b/examples/xml/saxbookmarks/mainwindow.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** 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 "xbelgenerator.h" +#include "xbelhandler.h" + +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("SAX Bookmarks")); + resize(480, 320); +} + +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(); + + XbelHandler handler(treeWidget); + QXmlSimpleReader reader; + reader.setContentHandler(&handler); + reader.setErrorHandler(&handler); + + QFile file(fileName); + if (!file.open(QFile::ReadOnly | QFile::Text)) { + QMessageBox::warning(this, tr("SAX Bookmarks"), + tr("Cannot read file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } + + QXmlInputSource xmlInputSource(&file); + if (reader.parse(xmlInputSource)) + statusBar()->showMessage(tr("File loaded"), 2000); +} + +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("SAX Bookmarks"), + tr("Cannot write file %1:\n%2.") + .arg(fileName) + .arg(file.errorString())); + return; + } + + XbelGenerator generator(treeWidget); + if (generator.write(&file)) + statusBar()->showMessage(tr("File saved"), 2000); +} + +void MainWindow::about() +{ + QMessageBox::about(this, tr("About SAX Bookmarks"), + tr("The <b>SAX Bookmarks</b> example demonstrates how to use Qt's " + "SAX classes to read XML documents and how to generate XML by " + "hand.")); +} + +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())); +} + +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); +} diff --git a/examples/xml/saxbookmarks/mainwindow.h b/examples/xml/saxbookmarks/mainwindow.h new file mode 100644 index 0000000..2c70d4a --- /dev/null +++ b/examples/xml/saxbookmarks/mainwindow.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** 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 + +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; +}; + +#endif diff --git a/examples/xml/saxbookmarks/saxbookmarks.pro b/examples/xml/saxbookmarks/saxbookmarks.pro new file mode 100644 index 0000000..d0eec44 --- /dev/null +++ b/examples/xml/saxbookmarks/saxbookmarks.pro @@ -0,0 +1,20 @@ +HEADERS = mainwindow.h \ + xbelgenerator.h \ + xbelhandler.h +SOURCES = main.cpp \ + mainwindow.cpp \ + xbelgenerator.cpp \ + xbelhandler.cpp +QT += xml + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/xml/saxbookmarks +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS saxbookmarks.pro *.xbel +sources.path = $$[QT_INSTALL_EXAMPLES]/xml/saxbookmarks +INSTALLS += target sources + +wince*: { + addFiles.sources = frank.xbel jennifer.xbel + addFiles.path = \My Documents + DEPLOYMENT += addFiles +} diff --git a/examples/xml/saxbookmarks/xbelgenerator.cpp b/examples/xml/saxbookmarks/xbelgenerator.cpp new file mode 100644 index 0000000..cafaf51 --- /dev/null +++ b/examples/xml/saxbookmarks/xbelgenerator.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** 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 "xbelgenerator.h" + +XbelGenerator::XbelGenerator(QTreeWidget *treeWidget) + : treeWidget(treeWidget) +{ +} + +bool XbelGenerator::write(QIODevice *device) +{ + out.setDevice(device); + out.setCodec("UTF-8"); + out << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + << "<!DOCTYPE xbel>\n" + << "<xbel version=\"1.0\">\n"; + + for (int i = 0; i < treeWidget->topLevelItemCount(); ++i) + generateItem(treeWidget->topLevelItem(i), 1); + + out << "</xbel>\n"; + return true; +} + +QString XbelGenerator::indent(int depth) +{ + const int IndentSize = 4; + return QString(IndentSize * depth, ' '); +} + +QString XbelGenerator::escapedText(const QString &str) +{ + QString result = str; + result.replace("&", "&"); + result.replace("<", "<"); + result.replace(">", ">"); + return result; +} + +QString XbelGenerator::escapedAttribute(const QString &str) +{ + QString result = escapedText(str); + result.replace("\"", """); + result.prepend("\""); + result.append("\""); + return result; +} + +void XbelGenerator::generateItem(QTreeWidgetItem *item, int depth) +{ + QString tagName = item->data(0, Qt::UserRole).toString(); + if (tagName == "folder") { + bool folded = !treeWidget->isItemExpanded(item); + out << indent(depth) << "<folder folded=\"" << (folded ? "yes" : "no") + << "\">\n" + << indent(depth + 1) << "<title>" << escapedText(item->text(0)) + << "</title>\n"; + + for (int i = 0; i < item->childCount(); ++i) + generateItem(item->child(i), depth + 1); + + out << indent(depth) << "</folder>\n"; + } else if (tagName == "bookmark") { + out << indent(depth) << "<bookmark"; + if (!item->text(1).isEmpty()) + out << " href=" << escapedAttribute(item->text(1)); + out << ">\n" + << indent(depth + 1) << "<title>" << escapedText(item->text(0)) + << "</title>\n" + << indent(depth) << "</bookmark>\n"; + } else if (tagName == "separator") { + out << indent(depth) << "<separator/>\n"; + } +} diff --git a/examples/xml/saxbookmarks/xbelgenerator.h b/examples/xml/saxbookmarks/xbelgenerator.h new file mode 100644 index 0000000..023d626 --- /dev/null +++ b/examples/xml/saxbookmarks/xbelgenerator.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** 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 XBELGENERATOR_H +#define XBELGENERATOR_H + +#include <QTextStream> + +QT_BEGIN_NAMESPACE +class QTreeWidget; +class QTreeWidgetItem; +QT_END_NAMESPACE + +class XbelGenerator +{ +public: + XbelGenerator(QTreeWidget *treeWidget); + + bool write(QIODevice *device); + +private: + static QString indent(int indentLevel); + static QString escapedText(const QString &str); + static QString escapedAttribute(const QString &str); + void generateItem(QTreeWidgetItem *item, int depth); + + QTreeWidget *treeWidget; + QTextStream out; +}; + +#endif diff --git a/examples/xml/saxbookmarks/xbelhandler.cpp b/examples/xml/saxbookmarks/xbelhandler.cpp new file mode 100644 index 0000000..2fdb1fa --- /dev/null +++ b/examples/xml/saxbookmarks/xbelhandler.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** 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 "xbelhandler.h" + +XbelHandler::XbelHandler(QTreeWidget *treeWidget) + : treeWidget(treeWidget) +{ + item = 0; + metXbelTag = false; + + 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)); +} + +bool XbelHandler::startElement(const QString & /* namespaceURI */, + const QString & /* localName */, + const QString &qName, + const QXmlAttributes &attributes) +{ + if (!metXbelTag && qName != "xbel") { + errorStr = QObject::tr("The file is not an XBEL file."); + return false; + } + + if (qName == "xbel") { + QString version = attributes.value("version"); + if (!version.isEmpty() && version != "1.0") { + errorStr = QObject::tr("The file is not an XBEL version 1.0 file."); + return false; + } + metXbelTag = true; + } else if (qName == "folder") { + item = createChildItem(qName); + item->setFlags(item->flags() | Qt::ItemIsEditable); + item->setIcon(0, folderIcon); + item->setText(0, QObject::tr("Folder")); + bool folded = (attributes.value("folded") != "no"); + treeWidget->setItemExpanded(item, !folded); + } else if (qName == "bookmark") { + item = createChildItem(qName); + item->setFlags(item->flags() | Qt::ItemIsEditable); + item->setIcon(0, bookmarkIcon); + item->setText(0, QObject::tr("Unknown title")); + item->setText(1, attributes.value("href")); + } else if (qName == "separator") { + item = createChildItem(qName); + item->setFlags(item->flags() & ~Qt::ItemIsSelectable); + item->setText(0, QString(30, 0xB7)); + } + + currentText.clear(); + return true; +} + +bool XbelHandler::endElement(const QString & /* namespaceURI */, + const QString & /* localName */, + const QString &qName) +{ + if (qName == "title") { + if (item) + item->setText(0, currentText); + } else if (qName == "folder" || qName == "bookmark" + || qName == "separator") { + item = item->parent(); + } + return true; +} + +bool XbelHandler::characters(const QString &str) +{ + currentText += str; + return true; +} + +bool XbelHandler::fatalError(const QXmlParseException &exception) +{ + QMessageBox::information(treeWidget->window(), QObject::tr("SAX Bookmarks"), + QObject::tr("Parse error at line %1, column %2:\n" + "%3") + .arg(exception.lineNumber()) + .arg(exception.columnNumber()) + .arg(exception.message())); + return false; +} + +QString XbelHandler::errorString() const +{ + return errorStr; +} + +QTreeWidgetItem *XbelHandler::createChildItem(const QString &tagName) +{ + QTreeWidgetItem *childItem; + if (item) { + childItem = new QTreeWidgetItem(item); + } else { + childItem = new QTreeWidgetItem(treeWidget); + } + childItem->setData(0, Qt::UserRole, tagName); + return childItem; +} diff --git a/examples/xml/saxbookmarks/xbelhandler.h b/examples/xml/saxbookmarks/xbelhandler.h new file mode 100644 index 0000000..5b6c0c0 --- /dev/null +++ b/examples/xml/saxbookmarks/xbelhandler.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** 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 XBELHANDLER_H +#define XBELHANDLER_H + +#include <QIcon> +#include <QXmlDefaultHandler> + +QT_BEGIN_NAMESPACE +class QTreeWidget; +class QTreeWidgetItem; +QT_END_NAMESPACE + +class XbelHandler : public QXmlDefaultHandler +{ +public: + XbelHandler(QTreeWidget *treeWidget); + + bool startElement(const QString &namespaceURI, const QString &localName, + const QString &qName, const QXmlAttributes &attributes); + bool endElement(const QString &namespaceURI, const QString &localName, + const QString &qName); + bool characters(const QString &str); + bool fatalError(const QXmlParseException &exception); + QString errorString() const; + +private: + QTreeWidgetItem *createChildItem(const QString &tagName); + + QTreeWidget *treeWidget; + QTreeWidgetItem *item; + QString currentText; + QString errorStr; + bool metXbelTag; + + QIcon folderIcon; + QIcon bookmarkIcon; +}; + +#endif 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 diff --git a/examples/xml/xml.pro b/examples/xml/xml.pro new file mode 100644 index 0000000..866b0cc --- /dev/null +++ b/examples/xml/xml.pro @@ -0,0 +1,12 @@ +TEMPLATE = subdirs +SUBDIRS = dombookmarks \ + rsslisting \ + saxbookmarks \ + streambookmarks \ + xmlstreamlint + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/xml +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS xml.pro README +sources.path = $$[QT_INSTALL_EXAMPLES]/xml +INSTALLS += target sources diff --git a/examples/xml/xmlstreamlint/main.cpp b/examples/xml/xmlstreamlint/main.cpp new file mode 100644 index 0000000..6063b84 --- /dev/null +++ b/examples/xml/xmlstreamlint/main.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** 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 <QCoreApplication> +#include <QFile> +#include <QStringList> +#include <QTextStream> +#include <QXmlStreamReader> + +/* + This class exists for the sole purpose of creating a translation context. +*/ +class XmlStreamLint +{ +public: + Q_DECLARE_TR_FUNCTIONS(XmlStreamLint) +}; + +int main(int argc, char *argv[]) +{ + enum ExitCode + { + Success, + ParseFailure, + ArgumentError, + WriteError, + FileFailure + }; + + QCoreApplication app(argc, argv); + + QTextStream errorStream(stderr); + + if (argc != 2) + { + errorStream << XmlStreamLint::tr( + "Usage: xmlstreamlint <path to XML file>\n"); + return ArgumentError; + } + + QString inputFilePath(QCoreApplication::arguments().at(1)); + QFile inputFile(inputFilePath); + + if (!QFile::exists(inputFilePath)) + { + errorStream << XmlStreamLint::tr( + "File %1 does not exist.\n").arg(inputFilePath); + return FileFailure; + + } else if (!inputFile.open(QIODevice::ReadOnly)) { + errorStream << XmlStreamLint::tr( + "Failed to open file %1.\n").arg(inputFilePath); + return FileFailure; + } + + QFile outputFile; + if (!outputFile.open(stdout, QIODevice::WriteOnly)) + { + errorStream << XmlStreamLint::tr("Failed to open stdout."); + return WriteError; + } + +//! [0] + QXmlStreamReader reader(&inputFile); + QXmlStreamWriter writer(&outputFile); +//! [0] + +//! [1] + while (!reader.atEnd()) + { + reader.readNext(); + + if (reader.error()) + { + errorStream << XmlStreamLint::tr( + "Error: %1 in file %2 at line %3, column %4.\n").arg( + reader.errorString(), inputFilePath, + QString::number(reader.lineNumber()), + QString::number(reader.columnNumber())); + return ParseFailure; +//! [1] + +//! [2] + } else + writer.writeCurrentToken(reader); + } +//! [2] + + return Success; +} diff --git a/examples/xml/xmlstreamlint/xmlstreamlint.pro b/examples/xml/xmlstreamlint/xmlstreamlint.pro new file mode 100644 index 0000000..7034e7b --- /dev/null +++ b/examples/xml/xmlstreamlint/xmlstreamlint.pro @@ -0,0 +1,10 @@ +CONFIG += console +QT -= gui +QT += xml +SOURCES += main.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/xml/xmlstreamlint +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS xmlstreamlint.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/xml/xmlstreamlint +INSTALLS += target sources |