// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! \example dombookmarks \title DOM Bookmarks Application \examplecategory {Data Processing & I/O} \ingroup xml-examples \meta tag {xml} \brief Provides a reader for XML Bookmark Exchange Language files. The DOM Bookmarks Application provides a reader for XML Bookmark Exchange Language (XBEL) files that uses Qt's DOM-based XML API to read and parse the files. The \l {QXmlStream Bookmarks Example} provides an alternative way to read this type of file. \image screenshot.png \section1 The XbelTree Class Definition The XbelTree class has functions for reading and writing to the filesystem. It inherits from the QTreeWidget class, contains the model for the displaying of the bookmarks, and allows it to be edited. \snippet dombookmarks/xbeltree.h 0 \section1 The XbelTree Class Implementation The \c XbelTree constructor accepts a QWidget within which it is placed. The \c folderIcon is set to QIcon::Normal mode where the pixmap is only displayed when the user is not interacting with the icon. The QStyle::SP_DirClosedIcon, QStyle::SP_DirOpenIcon, and QStyle::SP_FileIcon correspond to standard pixmaps that follow the style of your GUI. \snippet dombookmarks/xbeltree.cpp 0 The \c read() function opens the given QIODevice using QDomDocument::setContent. If it succeeds opening the file and the top level headers are verified, the contents of the class is cleared before the file contents is parsed by iterating all the top level XML nodes and calling \c parseFolderElement() on each of them. \snippet dombookmarks/xbeltree.cpp 1 The \c parseFolderElement() function handles the different element types and calls itself recursively if the element is a subfolder. \snippet dombookmarks/xbeltree.cpp 3 The \c write() function saves the domDocument to the given QIODevice using QDomDocument::save. \snippet dombookmarks/xbeltree.cpp 2 \section1 The MainWindow Class Definition The \c MainWindow class is a subclass of QMainWindow, with a \c File menu and a \c Help menu. \snippet dombookmarks/mainwindow.h 0 \section1 The MainWindow Class Implementation The \c MainWindow constructor instantiates the member XbelTree object, and sets its header with a QStringList object, \c labels. The constructor also invokes \c createMenus() to set up the menus. The \c statusBar() is used to display the message "Ready". \snippet dombookmarks/mainwindow.cpp 0 The \c createMenus() function populates the menus and sets keyboard shortcuts. \snippet dombookmarks/mainwindow.cpp 4 The \c open() function enables the user to open an XBEL file using QFileDialog. A warning message is displayed along with the \c fileName and \c errorString if the file cannot be read or if there is a parse error. If it succeeds it calls \c XbelTree::read(). \snippet dombookmarks/mainwindow.cpp 1 The \c saveAs() function displays a QFileDialog, prompting the user for a \c fileName. Similar to the \c open() function, this function also displays a warning message if the file cannot be written to. If this succeeds it calls \c XbelTree::write(). \snippet dombookmarks/mainwindow.cpp 2 The \c about() function displays a QMessageBox with a brief description of the example. \snippet dombookmarks/mainwindow.cpp 3 See the \l{http://pyxml.sourceforge.net/topics/xbel/}{XML Bookmark Exchange Language Resource Page} for more information about XBEL files. */