From 0a621fc1bdf9dd7eba2505d5d8a67abec924f20e Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Wed, 31 Oct 2012 13:02:35 +0100 Subject: [PATCH] Add support for ColumnView, ListView, TableView and TreeView --- declarativeobjects.cpp | 32 ++++++++++++ declarativeobjects_p.h | 32 ++++++++++++ declarativewidgetdocument.cpp | 7 +++ gallery.qml | 15 ++++++ main.cpp | 5 ++ objectadaptors.cpp | 108 +++++++++++++++++++++++++++++++++++++++++ objectadaptors_p.h | 76 +++++++++++++++++++++++++++++ qwidgets.list | 4 -- 8 files changed, 275 insertions(+), 4 deletions(-) diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index 7ff433e..0bd2bb9 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -765,6 +765,14 @@ DeclarativeColorDialogAttached *DeclarativeColorDialog::qmlAttachedProperties(QO CUSTOM_METAOBJECT(DeclarativeColorDialog, QColorDialog) +// DeclarativeColumnView +DeclarativeColumnView::DeclarativeColumnView(QObject *parent) : DeclarativeWidgetProxy(parent) +{ + connectAllSignals(m_proxiedObject, this); +} + +CUSTOM_METAOBJECT(DeclarativeColumnView, ColumnView) + // DeclarativeCommandLinkButton DeclarativeCommandLinkButton::DeclarativeCommandLinkButton(QObject *parent) : DeclarativeWidgetProxy(parent) { @@ -1329,6 +1337,14 @@ DeclarativeLineEdit::DeclarativeLineEdit(QObject *parent) : DeclarativeWidgetPro CUSTOM_METAOBJECT(DeclarativeLineEdit, QLineEdit) +// DeclarativeListView +DeclarativeListView::DeclarativeListView(QObject *parent) : DeclarativeWidgetProxy(parent) +{ + connectAllSignals(m_proxiedObject, this); +} + +CUSTOM_METAOBJECT(DeclarativeListView, ListView) + // DeclarativeMainWindow DeclarativeMainWindow::DeclarativeMainWindow(QObject *parent) : DeclarativeWidgetProxy(parent) { @@ -1665,6 +1681,14 @@ DeclarativeStatusBarAttached *DeclarativeStatusBar::qmlAttachedProperties(QObjec CUSTOM_METAOBJECT(DeclarativeStatusBar, QStatusBar) +// DeclarativeTableView +DeclarativeTableView::DeclarativeTableView(QObject *parent) : DeclarativeWidgetProxy(parent) +{ + connectAllSignals(m_proxiedObject, this); +} + +CUSTOM_METAOBJECT(DeclarativeTableView, TableView) + // DeclarativeTabWidget class DeclarativeTabWidgetAttached::Private { @@ -1813,6 +1837,14 @@ DeclarativeToolButton::DeclarativeToolButton(QObject *parent) : DeclarativeWidge CUSTOM_METAOBJECT(DeclarativeToolButton, QToolButton) +// DeclarativeTreeView +DeclarativeTreeView::DeclarativeTreeView(QObject *parent) : DeclarativeWidgetProxy(parent) +{ + connectAllSignals(m_proxiedObject, this); +} + +CUSTOM_METAOBJECT(DeclarativeTreeView, TreeView) + // DeclarativeWebView DeclarativeWebView::DeclarativeWebView(QObject *parent) : DeclarativeWidgetProxy(parent) { diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index c19b2d5..497c242 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -528,6 +528,14 @@ class DeclarativeColorDialog : public DeclarativeWidgetProxy QML_DECLARE_TYPEINFO(DeclarativeColorDialog, QML_HAS_ATTACHED_PROPERTIES) +class DeclarativeColumnView : public DeclarativeWidgetProxy +{ + DECLARATIVE_OBJECT + + public: + DeclarativeColumnView(QObject *parent = 0); +}; + class DeclarativeCommandLinkButton : public DeclarativeWidgetProxy { DECLARATIVE_OBJECT @@ -803,6 +811,14 @@ class DeclarativeLineEdit : public DeclarativeWidgetProxy DeclarativeLineEdit(QObject *parent = 0); }; +class DeclarativeListView : public DeclarativeWidgetProxy +{ + DECLARATIVE_OBJECT + + public: + DeclarativeListView(QObject *parent = 0); +}; + class DeclarativeMainWindow : public DeclarativeWidgetProxy { DECLARATIVE_OBJECT @@ -981,6 +997,14 @@ class DeclarativeStatusBar : public DeclarativeWidgetProxy QML_DECLARE_TYPEINFO(DeclarativeStatusBar, QML_HAS_ATTACHED_PROPERTIES) +class DeclarativeTableView : public DeclarativeWidgetProxy +{ + DECLARATIVE_OBJECT + + public: + DeclarativeTableView(QObject *parent = 0); +}; + // attached property for DeclarativeTabWidget class DeclarativeTabWidgetAttached : public QObject { @@ -1069,6 +1093,14 @@ class DeclarativeToolButton : public DeclarativeWidgetProxy DeclarativeToolButton(QObject *parent = 0); }; +class DeclarativeTreeView : public DeclarativeWidgetProxy +{ + DECLARATIVE_OBJECT + + public: + DeclarativeTreeView(QObject *parent = 0); +}; + class DeclarativeWebView : public DeclarativeWidgetProxy { DECLARATIVE_OBJECT diff --git a/declarativewidgetdocument.cpp b/declarativewidgetdocument.cpp index f0b1c17..3099c3e 100644 --- a/declarativewidgetdocument.cpp +++ b/declarativewidgetdocument.cpp @@ -29,6 +29,9 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p : QObject(parent) , d(new Private(this, url)) { + qmlRegisterType(); + qmlRegisterType(); + // objects qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "Action"); @@ -51,6 +54,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p qmlRegisterType("QtGui", 1, 0, "CheckBox"); qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "ColorDialog"); + qmlRegisterType("QtGui", 1, 0, "ColumnView"); qmlRegisterType("QtGui", 1, 0, "CommandLinkButton"); qmlRegisterType("QtGui", 1, 0, "DateEdit"); qmlRegisterType("QtGui", 1, 0, "DateTimeEdit"); @@ -68,6 +72,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p qmlRegisterType("QtGui", 1, 0, "Label"); qmlRegisterType("QtGui", 1, 0, "LCDNumber"); qmlRegisterType("QtGui", 1, 0, "LineEdit"); + qmlRegisterType("QtGui", 1, 0, "ListView"); qmlRegisterType("QtGui", 1, 0, "MainWindow"); qmlRegisterType("QtGui", 1, 0, "Menu"); qmlRegisterType("QtGui", 1, 0, "MenuBar"); @@ -83,6 +88,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p qmlRegisterType("QtGui", 1, 0, "StackedWidget"); qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "StatusBar"); + qmlRegisterType("QtGui", 1, 0, "TableView"); qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "TabWidget"); qmlRegisterType("QtGui", 1, 0, "TextBrowser"); @@ -90,6 +96,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p qmlRegisterType("QtGui", 1, 0, "TimeEdit"); qmlRegisterType("QtGui", 1, 0, "ToolBar"); qmlRegisterType("QtGui", 1, 0, "ToolButton"); + qmlRegisterType("QtGui", 1, 0, "TreeView"); qmlRegisterType("QtGui", 1, 0, "WebView"); qmlRegisterType("QtGui", 1, 0, "Widget"); diff --git a/gallery.qml b/gallery.qml index 955453a..954c500 100644 --- a/gallery.qml +++ b/gallery.qml @@ -37,6 +37,21 @@ TabWidget { Widget { TabWidget.label: "ItemViews" + + VBoxLayout { + ListView { + model: _fileSystemModel + } + TreeView { + model: _fileSystemModel + } + TableView { + model: _fileSystemModel + } + ColumnView { + model: _fileSystemModel + } + } } Widget { diff --git a/main.cpp b/main.cpp index e9331f9..201c796 100644 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -25,10 +26,14 @@ int main(int argc, char **argv) const QFileInfo qmlFile(QDir::current(), arguments[1]); const QUrl documentUrl = QUrl::fromLocalFile(qmlFile.absoluteFilePath()); + QFileSystemModel model; + model.setRootPath("/"); + DeclarativeWidgetDocument document(documentUrl); QObject::connect(document.engine(), SIGNAL(quit()), &app, SLOT(quit())); document.setContextProperty("_timer", &timer); + document.setContextProperty("_fileSystemModel", &model); QWidget *widget = document.create(); if (widget) diff --git a/objectadaptors.cpp b/objectadaptors.cpp index c3e8e5d..7bd564b 100644 --- a/objectadaptors.cpp +++ b/objectadaptors.cpp @@ -104,6 +104,33 @@ QVariantList ButtonGroup::buttons() const return m_buttons; } +// ColumnView +ColumnView::ColumnView(QWidget *parent) + : QColumnView(parent) +{ +} + +void ColumnView::setModel(QAbstractItemModel *model) +{ + if (this->model() == model) + return; + + QColumnView::setModel(model); + + emit modelChanged(model); + emit selectionModelChanged(selectionModel()); +} + +void ColumnView::setSelectionModel(QItemSelectionModel *selectionModel) +{ + if (this->selectionModel() == selectionModel) + return; + + QColumnView::setSelectionModel(selectionModel); + + emit selectionModelChanged(selectionModel); +} + // FileDialog FileDialog::FileDialog(QWidget *parent) : QFileDialog(parent) @@ -119,6 +146,60 @@ InputDialog::InputDialog(QWidget *parent) connect(this, SIGNAL(doubleValueChanged(double)), this, SIGNAL(customDoubleValueChanged())); } +// ListView +ListView::ListView(QWidget *parent) + : QListView(parent) +{ +} + +void ListView::setModel(QAbstractItemModel *model) +{ + if (this->model() == model) + return; + + QListView::setModel(model); + + emit modelChanged(model); + emit selectionModelChanged(selectionModel()); +} + +void ListView::setSelectionModel(QItemSelectionModel *selectionModel) +{ + if (this->selectionModel() == selectionModel) + return; + + QListView::setSelectionModel(selectionModel); + + emit selectionModelChanged(selectionModel); +} + +// TableView +TableView::TableView(QWidget *parent) + : QTableView(parent) +{ +} + +void TableView::setModel(QAbstractItemModel *model) +{ + if (this->model() == model) + return; + + QTableView::setModel(model); + + emit modelChanged(model); + emit selectionModelChanged(selectionModel()); +} + +void TableView::setSelectionModel(QItemSelectionModel *selectionModel) +{ + if (this->selectionModel() == selectionModel) + return; + + QTableView::setSelectionModel(selectionModel); + + emit selectionModelChanged(selectionModel); +} + // TextEdit TextEdit::TextEdit(QWidget *parent) : QTextEdit(parent) @@ -130,3 +211,30 @@ bool TextEdit::modified() const { return document()->isModified(); } + +// TreeView +TreeView::TreeView(QWidget *parent) + : QTreeView(parent) +{ +} + +void TreeView::setModel(QAbstractItemModel *model) +{ + if (this->model() == model) + return; + + QTreeView::setModel(model); + + emit modelChanged(model); + emit selectionModelChanged(selectionModel()); +} + +void TreeView::setSelectionModel(QItemSelectionModel *selectionModel) +{ + if (this->selectionModel() == selectionModel) + return; + + QTreeView::setSelectionModel(selectionModel); + + emit selectionModelChanged(selectionModel); +} diff --git a/objectadaptors_p.h b/objectadaptors_p.h index 30a75cb..cc0850a 100644 --- a/objectadaptors_p.h +++ b/objectadaptors_p.h @@ -3,10 +3,14 @@ #include #include +#include #include #include +#include #include +#include #include +#include class ActionItem : public QObject { @@ -50,6 +54,24 @@ class ButtonGroup : public QButtonGroup QVariantList m_buttons; }; +class ColumnView : public QColumnView +{ + Q_OBJECT + + Q_PROPERTY(QAbstractItemModel* model READ model WRITE setModel NOTIFY modelChanged) + Q_PROPERTY(QItemSelectionModel* selectionModel READ selectionModel WRITE setSelectionModel NOTIFY selectionModelChanged) + + public: + ColumnView(QWidget *parent = 0); + + void setModel(QAbstractItemModel *model); + void setSelectionModel(QItemSelectionModel *selectionModel); + + Q_SIGNALS: + void modelChanged(QAbstractItemModel*); + void selectionModelChanged(QItemSelectionModel*); +}; + class FileDialog : public QFileDialog { Q_OBJECT @@ -94,6 +116,24 @@ class InputDialog : public QInputDialog void customDoubleValueChanged(); }; +class ListView : public QListView +{ + Q_OBJECT + + Q_PROPERTY(QAbstractItemModel* model READ model WRITE setModel NOTIFY modelChanged) + Q_PROPERTY(QItemSelectionModel* selectionModel READ selectionModel WRITE setSelectionModel NOTIFY selectionModelChanged) + + public: + ListView(QWidget *parent = 0); + + void setModel(QAbstractItemModel *model); + void setSelectionModel(QItemSelectionModel *selectionModel); + + Q_SIGNALS: + void modelChanged(QAbstractItemModel*); + void selectionModelChanged(QItemSelectionModel*); +}; + class StackedLayout : public QStackedLayout { Q_OBJECT @@ -101,6 +141,24 @@ class StackedLayout : public QStackedLayout Q_PROPERTY(int count READ count) }; +class TableView : public QTableView +{ + Q_OBJECT + + Q_PROPERTY(QAbstractItemModel* model READ model WRITE setModel NOTIFY modelChanged) + Q_PROPERTY(QItemSelectionModel* selectionModel READ selectionModel WRITE setSelectionModel NOTIFY selectionModelChanged) + + public: + TableView(QWidget *parent = 0); + + void setModel(QAbstractItemModel *model); + void setSelectionModel(QItemSelectionModel *selectionModel); + + Q_SIGNALS: + void modelChanged(QAbstractItemModel*); + void selectionModelChanged(QItemSelectionModel*); +}; + class TextEdit : public QTextEdit { Q_OBJECT @@ -117,4 +175,22 @@ class TextEdit : public QTextEdit bool modified() const; }; +class TreeView : public QTreeView +{ + Q_OBJECT + + Q_PROPERTY(QAbstractItemModel* model READ model WRITE setModel NOTIFY modelChanged) + Q_PROPERTY(QItemSelectionModel* selectionModel READ selectionModel WRITE setSelectionModel NOTIFY selectionModelChanged) + + public: + TreeView(QWidget *parent = 0); + + void setModel(QAbstractItemModel *model); + void setSelectionModel(QItemSelectionModel *selectionModel); + + Q_SIGNALS: + void modelChanged(QAbstractItemModel*); + void selectionModelChanged(QItemSelectionModel*); +}; + #endif diff --git a/qwidgets.list b/qwidgets.list index 63851c3..ea9e820 100644 --- a/qwidgets.list +++ b/qwidgets.list @@ -5,7 +5,6 @@ qprintpreviewdialog.h qprogressdialog.h // widgets -qcolumnview.h qcombobox.h qdockwidget.h qfocusframe.h @@ -13,7 +12,6 @@ qfontcombobox.h qgraphicsview.h qgraphicswidget.h qheaderview.h -qlistview.h qlistwidget.h qmdiarea.h qmdisubwindow.h @@ -22,10 +20,8 @@ qscrollarea.h qsplashscreen.h qsplitter.h qtabbar.h -qtableview.h qtablewidget.h qtoolbox.h -qtreeview.h qtreewidget.h qundoview.h qwizard.h -- 1.7.2.5