summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/tableview.cpp90
-rw-r--r--qt-ui/tableview.h45
-rw-r--r--qt-ui/tableview.ui63
3 files changed, 198 insertions, 0 deletions
diff --git a/qt-ui/tableview.cpp b/qt-ui/tableview.cpp
new file mode 100644
index 000000000..6956d3941
--- /dev/null
+++ b/qt-ui/tableview.cpp
@@ -0,0 +1,90 @@
+#include "tableview.h"
+#include "ui_tableview.h"
+#include "models.h"
+
+#include <QPushButton>
+#include <QFile>
+#include <QTextStream>
+#include <QSettings>
+
+TableView::TableView(QWidget *parent) : QWidget(parent), ui(new Ui::TableView){
+ ui->setupUi(this);
+ QFile cssFile(":table-css");
+ cssFile.open(QIODevice::ReadOnly);
+ QTextStream reader(&cssFile);
+ QString css = reader.readAll();
+ ui->tableView->setStyleSheet(css);
+
+ QIcon plusIcon(":plus");
+ plusBtn = new QPushButton(plusIcon, QString(), ui->groupBox);
+ plusBtn->setFlat(true);
+ plusBtn->setToolTip(tr("Add Cylinder"));
+ connect(plusBtn, SIGNAL(clicked(bool)), this, SIGNAL(addButtonClicked()));
+}
+
+TableView::~TableView()
+{
+ QSettings s;
+ s.beginGroup(objectName());
+ for (int i = 0; i < ui->tableView->model()->columnCount(); i++) {
+ s.setValue(QString("colwidth%1").arg(i), ui->tableView->columnWidth(i));
+ }
+ s.endGroup();
+ s.sync();
+}
+
+void TableView::setBtnToolTip(const QString& tooltip)
+{
+ plusBtn->setToolTip(tooltip);
+}
+
+void TableView::setTitle(const QString& title)
+{
+ ui->groupBox->setTitle(title);
+}
+
+void TableView::setModel(QAbstractItemModel *model){
+ ui->tableView->setModel(model);
+ connect(ui->tableView, SIGNAL(clicked(QModelIndex)), model, SLOT(remove(QModelIndex)));
+
+ QSettings s;
+ s.beginGroup(objectName());
+ for (int i = 0; i < ui->tableView->model()->columnCount(); i++) {
+ QVariant width = s.value(QString("colwidth%1").arg(i));
+ if (width.isValid())
+ ui->tableView->setColumnWidth(i, width.toInt());
+ else
+ ui->tableView->resizeColumnToContents(i);
+ }
+ s.endGroup();
+
+ ui->tableView->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
+ QFontMetrics metrics(defaultModelFont());
+ ui->tableView->verticalHeader()->setDefaultSectionSize( metrics.height() + 8 );
+}
+
+void TableView::fixPlusPosition()
+{
+ plusBtn->setGeometry(ui->groupBox->contentsRect().width() - 30, 2, 24,24);
+}
+
+// We need to manually position the 'plus' on cylinder and weight.
+void TableView::resizeEvent(QResizeEvent* event)
+{
+ fixPlusPosition();
+ QWidget::resizeEvent(event);
+}
+
+void TableView::showEvent(QShowEvent* event)
+{
+ QWidget::showEvent(event);
+ fixPlusPosition();
+}
+
+void TableView::edit(const QModelIndex& index){
+ ui->tableView->edit(index);
+}
+
+QTableView *TableView::view(){
+ return ui->tableView;
+}
diff --git a/qt-ui/tableview.h b/qt-ui/tableview.h
new file mode 100644
index 000000000..d22f466b5
--- /dev/null
+++ b/qt-ui/tableview.h
@@ -0,0 +1,45 @@
+#ifndef TABLEVIEW_H
+#define TABLEVIEW_H
+
+/* This TableView is prepared to have the CSS,
+ * the methods to restore / save the state of
+ * the column widths and the 'plus' button.
+ */
+#include <QWidget>
+
+class QPushButton;
+class QAbstractItemModel;
+class QModelIndex;
+class QTableView;
+namespace Ui{
+ class TableView;
+};
+
+class TableView : public QWidget {
+Q_OBJECT
+public:
+ TableView(QWidget *parent = 0);
+ virtual ~TableView();
+ void setTitle(const QString& title);
+ /* The model is expected to have a 'remove' slot, that takes a QModelIndex as parameter.
+ * It's also expected to have the column '1' as a trash icon. I most probably should create a
+ * proxy model and add that column, will mark that as TODO. see? marked.
+ */
+ void setModel(QAbstractItemModel* model);
+ void setBtnToolTip(const QString& tooltip);
+ void fixPlusPosition();
+ void edit(const QModelIndex& index);
+ QTableView *view();
+protected:
+ virtual void showEvent(QShowEvent* );
+ virtual void resizeEvent(QResizeEvent* );
+
+signals:
+ void addButtonClicked();
+
+private:
+ Ui::TableView *ui;
+ QPushButton *plusBtn;
+};
+
+#endif
diff --git a/qt-ui/tableview.ui b/qt-ui/tableview.ui
new file mode 100644
index 000000000..10b5f79f9
--- /dev/null
+++ b/qt-ui/tableview.ui
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TableView</class>
+ <widget class="QWidget" name="TableView">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string/>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTableView" name="tableView"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>