Add support for ColumnView, ListView, TableView and TreeView
authorTobias Koenig <tobias.koenig@kdab.com>
Wed, 31 Oct 2012 12:02:35 +0000 (13:02 +0100)
committerTobias Koenig <tobias.koenig@kdab.com>
Wed, 31 Oct 2012 12:02:35 +0000 (13:02 +0100)
declarativeobjects.cpp
declarativeobjects_p.h
declarativewidgetdocument.cpp
gallery.qml
main.cpp
objectadaptors.cpp
objectadaptors_p.h
qwidgets.list

index 7ff433e..0bd2bb9 100644 (file)
@@ -765,6 +765,14 @@ DeclarativeColorDialogAttached *DeclarativeColorDialog::qmlAttachedProperties(QO
 
 CUSTOM_METAOBJECT(DeclarativeColorDialog, QColorDialog)
 
+// DeclarativeColumnView
+DeclarativeColumnView::DeclarativeColumnView(QObject *parent) : DeclarativeWidgetProxy<ColumnView>(parent)
+{
+  connectAllSignals(m_proxiedObject, this);
+}
+
+CUSTOM_METAOBJECT(DeclarativeColumnView, ColumnView)
+
 // DeclarativeCommandLinkButton
 DeclarativeCommandLinkButton::DeclarativeCommandLinkButton(QObject *parent) : DeclarativeWidgetProxy<QCommandLinkButton>(parent)
 {
@@ -1329,6 +1337,14 @@ DeclarativeLineEdit::DeclarativeLineEdit(QObject *parent) : DeclarativeWidgetPro
 
 CUSTOM_METAOBJECT(DeclarativeLineEdit, QLineEdit)
 
+// DeclarativeListView
+DeclarativeListView::DeclarativeListView(QObject *parent) : DeclarativeWidgetProxy<ListView>(parent)
+{
+  connectAllSignals(m_proxiedObject, this);
+}
+
+CUSTOM_METAOBJECT(DeclarativeListView, ListView)
+
 // DeclarativeMainWindow
 DeclarativeMainWindow::DeclarativeMainWindow(QObject *parent) : DeclarativeWidgetProxy<QMainWindow>(parent)
 {
@@ -1665,6 +1681,14 @@ DeclarativeStatusBarAttached *DeclarativeStatusBar::qmlAttachedProperties(QObjec
 
 CUSTOM_METAOBJECT(DeclarativeStatusBar, QStatusBar)
 
+// DeclarativeTableView
+DeclarativeTableView::DeclarativeTableView(QObject *parent) : DeclarativeWidgetProxy<TableView>(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<TreeView>(parent)
+{
+  connectAllSignals(m_proxiedObject, this);
+}
+
+CUSTOM_METAOBJECT(DeclarativeTreeView, TreeView)
+
 // DeclarativeWebView
 DeclarativeWebView::DeclarativeWebView(QObject *parent) : DeclarativeWidgetProxy<QWebView>(parent)
 {
index c19b2d5..497c242 100644 (file)
@@ -528,6 +528,14 @@ class DeclarativeColorDialog : public DeclarativeWidgetProxy<QColorDialog>
 
 QML_DECLARE_TYPEINFO(DeclarativeColorDialog, QML_HAS_ATTACHED_PROPERTIES)
 
+class DeclarativeColumnView : public DeclarativeWidgetProxy<ColumnView>
+{
+  DECLARATIVE_OBJECT
+
+  public:
+    DeclarativeColumnView(QObject *parent = 0);
+};
+
 class DeclarativeCommandLinkButton : public DeclarativeWidgetProxy<QCommandLinkButton>
 {
   DECLARATIVE_OBJECT
@@ -803,6 +811,14 @@ class DeclarativeLineEdit : public DeclarativeWidgetProxy<QLineEdit>
     DeclarativeLineEdit(QObject *parent = 0);
 };
 
+class DeclarativeListView : public DeclarativeWidgetProxy<ListView>
+{
+  DECLARATIVE_OBJECT
+
+  public:
+    DeclarativeListView(QObject *parent = 0);
+};
+
 class DeclarativeMainWindow : public DeclarativeWidgetProxy<QMainWindow>
 {
   DECLARATIVE_OBJECT
@@ -981,6 +997,14 @@ class DeclarativeStatusBar : public DeclarativeWidgetProxy<QStatusBar>
 
 QML_DECLARE_TYPEINFO(DeclarativeStatusBar, QML_HAS_ATTACHED_PROPERTIES)
 
+class DeclarativeTableView : public DeclarativeWidgetProxy<TableView>
+{
+  DECLARATIVE_OBJECT
+
+  public:
+    DeclarativeTableView(QObject *parent = 0);
+};
+
 // attached property for DeclarativeTabWidget
 class DeclarativeTabWidgetAttached : public QObject
 {
@@ -1069,6 +1093,14 @@ class DeclarativeToolButton : public DeclarativeWidgetProxy<QToolButton>
     DeclarativeToolButton(QObject *parent = 0);
 };
 
+class DeclarativeTreeView : public DeclarativeWidgetProxy<TreeView>
+{
+  DECLARATIVE_OBJECT
+
+  public:
+    DeclarativeTreeView(QObject *parent = 0);
+};
+
 class DeclarativeWebView : public DeclarativeWidgetProxy<QWebView>
 {
   DECLARATIVE_OBJECT
index f0b1c17..3099c3e 100644 (file)
@@ -29,6 +29,9 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p
   : QObject(parent)
   , d(new Private(this, url))
 {
+  qmlRegisterType<QAbstractItemModel>();
+  qmlRegisterType<QItemSelectionModel>();
+
   // objects
   qmlRegisterType<QAction>();
   qmlRegisterType<DeclarativeAction>("QtGui", 1, 0, "Action");
@@ -51,6 +54,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p
   qmlRegisterType<DeclarativeCheckBox>("QtGui", 1, 0, "CheckBox");
   qmlRegisterType<DeclarativeColorDialogAttached>();
   qmlRegisterType<DeclarativeColorDialog>("QtGui", 1, 0, "ColorDialog");
+  qmlRegisterType<DeclarativeColumnView>("QtGui", 1, 0, "ColumnView");
   qmlRegisterType<DeclarativeCommandLinkButton>("QtGui", 1, 0, "CommandLinkButton");
   qmlRegisterType<DeclarativeDateEdit>("QtGui", 1, 0, "DateEdit");
   qmlRegisterType<DeclarativeDateTimeEdit>("QtGui", 1, 0, "DateTimeEdit");
@@ -68,6 +72,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p
   qmlRegisterType<DeclarativeLabel>("QtGui", 1, 0, "Label");
   qmlRegisterType<DeclarativeLCDNumber>("QtGui", 1, 0, "LCDNumber");
   qmlRegisterType<DeclarativeLineEdit>("QtGui", 1, 0, "LineEdit");
+  qmlRegisterType<DeclarativeListView>("QtGui", 1, 0, "ListView");
   qmlRegisterType<DeclarativeMainWindow>("QtGui", 1, 0, "MainWindow");
   qmlRegisterType<DeclarativeMenu>("QtGui", 1, 0, "Menu");
   qmlRegisterType<DeclarativeMenuBar>("QtGui", 1, 0, "MenuBar");
@@ -83,6 +88,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p
   qmlRegisterType<DeclarativeStackedWidget>("QtGui", 1, 0, "StackedWidget");
   qmlRegisterType<DeclarativeStatusBarAttached>();
   qmlRegisterType<DeclarativeStatusBar>("QtGui", 1, 0, "StatusBar");
+  qmlRegisterType<DeclarativeTableView>("QtGui", 1, 0, "TableView");
   qmlRegisterType<DeclarativeTabWidgetAttached>();
   qmlRegisterType<DeclarativeTabWidget>("QtGui", 1, 0, "TabWidget");
   qmlRegisterType<DeclarativeTextBrowser>("QtGui", 1, 0, "TextBrowser");
@@ -90,6 +96,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p
   qmlRegisterType<DeclarativeTimeEdit>("QtGui", 1, 0, "TimeEdit");
   qmlRegisterType<DeclarativeToolBar>("QtGui", 1, 0, "ToolBar");
   qmlRegisterType<DeclarativeToolButton>("QtGui", 1, 0, "ToolButton");
+  qmlRegisterType<DeclarativeTreeView>("QtGui", 1, 0, "TreeView");
   qmlRegisterType<DeclarativeWebView>("QtGui", 1, 0, "WebView");
   qmlRegisterType<DeclarativeWidget>("QtGui", 1, 0, "Widget");
 
index 955453a..954c500 100644 (file)
@@ -37,6 +37,21 @@ TabWidget {
 
   Widget {
     TabWidget.label: "ItemViews"
+
+    VBoxLayout {
+      ListView {
+        model: _fileSystemModel
+      }
+      TreeView {
+        model: _fileSystemModel
+      }
+      TableView {
+        model: _fileSystemModel
+      }
+      ColumnView {
+        model: _fileSystemModel
+      }
+    }
   }
 
   Widget {
index e9331f9..201c796 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -5,6 +5,7 @@
 #include <QtCore/QTimer>
 #include <QtDeclarative/QDeclarativeEngine>
 #include <QtGui/QApplication>
+#include <QtGui/QFileSystemModel>
 #include <QtGui/QWidget>
 #include <QDebug>
 
@@ -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<QWidget>();
   if (widget)
index c3e8e5d..7bd564b 100644 (file)
@@ -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);
+}
index 30a75cb..cc0850a 100644 (file)
@@ -3,10 +3,14 @@
 
 #include <QtGui/QAction>
 #include <QtGui/QButtonGroup>
+#include <QtGui/QColumnView>
 #include <QtGui/QFileDialog>
 #include <QtGui/QInputDialog>
+#include <QtGui/QListView>
 #include <QtGui/QStackedLayout>
+#include <QtGui/QTableView>
 #include <QtGui/QTextEdit>
+#include <QtGui/QTreeView>
 
 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
index 63851c3..ea9e820 100644 (file)
@@ -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