fb2tree.hpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #ifndef FB2TREE_H
  2. #define FB2TREE_H
  3. #include <QAbstractItemModel>
  4. #include <QTreeView>
  5. #include <QTimer>
  6. #include <QWebElement>
  7. class Fb2WebView;
  8. class Fb2TreeModel;
  9. class Fb2TreeItem: public QObject
  10. {
  11. Q_OBJECT
  12. public:
  13. explicit Fb2TreeItem(QWebElement &element, Fb2TreeItem *parent = 0, int index = 0);
  14. virtual ~Fb2TreeItem();
  15. Fb2TreeItem * item(const QModelIndex &index) const;
  16. Fb2TreeItem * item(int row) const;
  17. int index(Fb2TreeItem * child) const {
  18. return m_list.indexOf(child);
  19. }
  20. int count() const {
  21. return m_list.size();
  22. }
  23. const QWebElement element() const {
  24. return element();
  25. }
  26. Fb2TreeItem * parent() const {
  27. return m_parent;
  28. }
  29. QString text() const;
  30. const QString & name() const {
  31. return m_name;
  32. }
  33. QPoint pos() const {
  34. return m_element.geometry().topLeft();
  35. }
  36. QString selector() const;
  37. Fb2TreeItem * content(const Fb2TreeModel &model, int number, QModelIndex &index) const;
  38. private:
  39. QString static title(const QWebElement &element);
  40. void addChildren(QWebElement &parent, bool direct = true);
  41. private:
  42. QList<Fb2TreeItem*> m_list;
  43. QWebElement m_element;
  44. QString m_name;
  45. QString m_text;
  46. Fb2TreeItem * m_parent;
  47. int m_number;
  48. };
  49. class Fb2TreeModel: public QAbstractItemModel
  50. {
  51. Q_OBJECT
  52. public:
  53. explicit Fb2TreeModel(Fb2WebView &view, QObject *parent = 0);
  54. virtual ~Fb2TreeModel();
  55. QModelIndex index(const QString &location, QModelIndex current) const;
  56. Fb2WebView & view() { return m_view; }
  57. void selectText(const QModelIndex &index);
  58. void expandBody(QTreeView *view);
  59. public:
  60. virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
  61. virtual QModelIndex parent(const QModelIndex &child) const;
  62. virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
  63. virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
  64. virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
  65. protected:
  66. Fb2TreeItem * item(const QModelIndex &index) const;
  67. private:
  68. Fb2WebView & m_view;
  69. Fb2TreeItem * m_root;
  70. };
  71. class Fb2TreeView : public QTreeView
  72. {
  73. Q_OBJECT
  74. public:
  75. explicit Fb2TreeView(Fb2WebView &view, QWidget *parent = 0);
  76. public slots:
  77. void updateTree();
  78. private slots:
  79. void activated(const QModelIndex &index);
  80. void contentsChanged();
  81. void selectionChanged();
  82. void selectTree();
  83. private:
  84. Fb2WebView & m_view;
  85. QTimer m_timerSelect;
  86. QTimer m_timerUpdate;
  87. };
  88. #endif // FB2TREE_H