bookmarks.h
上传用户:huahtool
上传日期:2015-12-10
资源大小:1089k
文件大小:9k
源码类别:

浏览器

开发平台:

Visual C++

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the demonstration applications of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef BOOKMARKS_H
  38. #define BOOKMARKS_H
  39. #include <QtCore/QObject>
  40. #include <QtCore/QAbstractItemModel>
  41. #include <QtGui/QUndoCommand>
  42. /*!
  43.     Bookmark manager, owner of the bookmarks, loads, saves and basic tasks
  44.   */
  45. class AutoSaver;
  46. class BookmarkNode;
  47. class BookmarksModel;
  48. class BookmarksManager : public QObject
  49. {
  50.     Q_OBJECT
  51. signals:
  52.     void entryAdded(BookmarkNode *item);
  53.     void entryRemoved(BookmarkNode *parent, int row, BookmarkNode *item);
  54.     void entryChanged(BookmarkNode *item);
  55. public:
  56.     BookmarksManager(QObject *parent = 0);
  57.     ~BookmarksManager();
  58.     void addBookmark(BookmarkNode *parent, BookmarkNode *node, int row = -1);
  59.     void removeBookmark(BookmarkNode *node);
  60.     void setTitle(BookmarkNode *node, const QString &newTitle);
  61.     void setUrl(BookmarkNode *node, const QString &newUrl);
  62.     void changeExpanded();
  63.     BookmarkNode *bookmarks();
  64.     BookmarkNode *menu();
  65.     BookmarkNode *toolbar();
  66.     BookmarksModel *bookmarksModel();
  67.     QUndoStack *undoRedoStack() { return &m_commands; };
  68. public slots:
  69.     void importBookmarks();
  70.     void exportBookmarks();
  71. private slots:
  72.     void save() const;
  73. private:
  74.     void load();
  75.     bool m_loaded;
  76.     AutoSaver *m_saveTimer;
  77.     BookmarkNode *m_bookmarkRootNode;
  78.     BookmarksModel *m_bookmarkModel;
  79.     QUndoStack m_commands;
  80.     friend class RemoveBookmarksCommand;
  81.     friend class ChangeBookmarkCommand;
  82. };
  83. class RemoveBookmarksCommand : public QUndoCommand
  84. {
  85. public:
  86.     RemoveBookmarksCommand(BookmarksManager *m_bookmarkManagaer, BookmarkNode *parent, int row);
  87.     ~RemoveBookmarksCommand();
  88.     void undo();
  89.     void redo();
  90. protected:
  91.     int m_row;
  92.     BookmarksManager *m_bookmarkManagaer;
  93.     BookmarkNode *m_node;
  94.     BookmarkNode *m_parent;
  95.     bool m_done;
  96. };
  97. class InsertBookmarksCommand : public RemoveBookmarksCommand
  98. {
  99. public:
  100.     InsertBookmarksCommand(BookmarksManager *m_bookmarkManagaer,
  101.         BookmarkNode *parent, BookmarkNode *node, int row);
  102.     void undo() { RemoveBookmarksCommand::redo(); }
  103.     void redo() { RemoveBookmarksCommand::undo(); }
  104. };
  105. class ChangeBookmarkCommand : public QUndoCommand
  106. {
  107. public:
  108.     ChangeBookmarkCommand(BookmarksManager *m_bookmarkManagaer,
  109.         BookmarkNode *node, const QString &newValue, bool title);
  110.     void undo();
  111.     void redo();
  112. private:
  113.     BookmarksManager *m_bookmarkManagaer;
  114.     bool m_title;
  115.     QString m_oldValue;
  116.     QString m_newValue;
  117.     BookmarkNode *m_node;
  118. };
  119. /*!
  120.     BookmarksModel is a QAbstractItemModel wrapper around the BookmarkManager
  121.   */
  122. #include <QtGui/QIcon>
  123. class BookmarksModel : public QAbstractItemModel
  124. {
  125.     Q_OBJECT
  126. public slots:
  127.     void entryAdded(BookmarkNode *item);
  128.     void entryRemoved(BookmarkNode *parent, int row, BookmarkNode *item);
  129.     void entryChanged(BookmarkNode *item);
  130. public:
  131.     enum Roles {
  132.         TypeRole = Qt::UserRole + 1,
  133.         UrlRole = Qt::UserRole + 2,
  134.         UrlStringRole = Qt::UserRole + 3,
  135.         SeparatorRole = Qt::UserRole + 4
  136.     };
  137.     BookmarksModel(BookmarksManager *bookmarkManager, QObject *parent = 0);
  138.     inline BookmarksManager *bookmarksManager() const { return m_bookmarksManager; }
  139.     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
  140.     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
  141.     int columnCount(const QModelIndex &parent = QModelIndex()) const;
  142.     int rowCount(const QModelIndex &parent = QModelIndex()) const;
  143.     QModelIndex index(int, int, const QModelIndex& = QModelIndex()) const;
  144.     QModelIndex parent(const QModelIndex& index= QModelIndex()) const;
  145.     Qt::ItemFlags flags(const QModelIndex &index) const;
  146.     Qt::DropActions supportedDropActions () const;
  147.     bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
  148.     bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
  149.     QMimeData *mimeData(const QModelIndexList &indexes) const;
  150.     QStringList mimeTypes() const;
  151.     bool dropMimeData(const QMimeData *data,
  152.         Qt::DropAction action, int row, int column, const QModelIndex &parent);
  153.     bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
  154.     BookmarkNode *node(const QModelIndex &index) const;
  155.     QModelIndex index(BookmarkNode *node) const;
  156. private:
  157.     bool m_endMacro;
  158.     BookmarksManager *m_bookmarksManager;
  159. };
  160. // Menu that is dynamically populated from the bookmarks
  161. #include "modelmenu.h"
  162. class BookmarksMenu : public ModelMenu
  163. {
  164.     Q_OBJECT
  165. signals:
  166.     void openUrl(const QUrl &url);
  167. public:
  168.      BookmarksMenu(QWidget *parent = 0);
  169.      void setInitialActions(QList<QAction*> actions);
  170. protected:
  171.     bool prePopulated();
  172. private slots:
  173.     void activated(const QModelIndex &index);
  174. private:
  175.     BookmarksManager *m_bookmarksManager;
  176.     QList<QAction*> m_initialActions;
  177. };
  178. /*
  179.     Proxy model that filters out the bookmarks so only the folders
  180.     are left behind.  Used in the add bookmark dialog combobox.
  181.  */
  182. #include <QtGui/QSortFilterProxyModel>
  183. class AddBookmarkProxyModel : public QSortFilterProxyModel
  184. {
  185.     Q_OBJECT
  186. public:
  187.     AddBookmarkProxyModel(QObject * parent = 0);
  188.     int columnCount(const QModelIndex & parent = QModelIndex()) const;
  189. protected:
  190.     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
  191. };
  192. /*!
  193.     Add bookmark dialog
  194.  */
  195. #include "ui_addbookmarkdialog.h"
  196. class AddBookmarkDialog : public QDialog, public Ui_AddBookmarkDialog
  197. {
  198.     Q_OBJECT
  199. public:
  200.     AddBookmarkDialog(const QString &url, const QString &title, QWidget *parent = 0, BookmarksManager *bookmarkManager = 0);
  201. private slots:
  202.     void accept();
  203. private:
  204.     QString m_url;
  205.     BookmarksManager *m_bookmarksManager;
  206.     AddBookmarkProxyModel *m_proxyModel;
  207. };
  208. #include "ui_bookmarks.h"
  209. class TreeProxyModel;
  210. class BookmarksDialog : public QDialog, public Ui_BookmarksDialog
  211. {
  212.     Q_OBJECT
  213. signals:
  214.     void openUrl(const QUrl &url);
  215. public:
  216.     BookmarksDialog(QWidget *parent = 0, BookmarksManager *manager = 0);
  217.     ~BookmarksDialog();
  218. private slots:
  219.     void customContextMenuRequested(const QPoint &pos);
  220.     void open();
  221.     void newFolder();
  222. private:
  223.     void expandNodes(BookmarkNode *node);
  224.     bool saveExpandedNodes(const QModelIndex &parent);
  225.     BookmarksManager *m_bookmarksManager;
  226.     BookmarksModel *m_bookmarksModel;
  227.     TreeProxyModel *m_proxyModel;
  228. };
  229. #include <QtGui/QToolBar>
  230. class BookmarksToolBar : public QToolBar
  231. {
  232.     Q_OBJECT
  233. signals:
  234.     void openUrl(const QUrl &url);
  235. public:
  236.     BookmarksToolBar(BookmarksModel *model, QWidget *parent = 0);
  237.     void setRootIndex(const QModelIndex &index);
  238.     QModelIndex rootIndex() const;
  239. protected:
  240.     void dragEnterEvent(QDragEnterEvent *event);
  241.     void dropEvent(QDropEvent *event);
  242. private slots:
  243.     void triggered(QAction *action);
  244.     void activated(const QModelIndex &index);
  245.     void build();
  246. private:
  247.     BookmarksModel *m_bookmarksModel;
  248.     QPersistentModelIndex m_root;
  249. };
  250. #endif // BOOKMARKS_H