diff options
Diffstat (limited to 'qt-ui/tableview.cpp')
-rw-r--r-- | qt-ui/tableview.cpp | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/qt-ui/tableview.cpp b/qt-ui/tableview.cpp deleted file mode 100644 index 40d5199ec..000000000 --- a/qt-ui/tableview.cpp +++ /dev/null @@ -1,145 +0,0 @@ -#include "tableview.h" -#include "modeldelegates.h" - -#include <QPushButton> -#include <QSettings> - -TableView::TableView(QWidget *parent) : QGroupBox(parent) -{ - ui.setupUi(this); - ui.tableView->setItemDelegate(new DiveListDelegate(this)); - - QFontMetrics fm(defaultModelFont()); - int text_ht = fm.height(); - - metrics.icon = &defaultIconMetrics(); - - metrics.rm_col_width = metrics.icon->sz_small + 2*metrics.icon->spacing; - metrics.header_ht = text_ht + 10; // TODO DPI - - /* We want to get rid of the margin around the table, but - * we must be careful with some styles (e.g. GTK+) where the top - * margin is actually used to hold the label. We thus check the - * rectangles for the label and contents to make sure they do not - * overlap, and adjust the top contentsMargin accordingly - */ - - // start by setting all the margins at zero - QMargins margins; - - // grab the label and contents dimensions and positions - QStyleOptionGroupBox option; - initStyleOption(&option); - QRect labelRect = style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::SC_GroupBoxLabel, this); - QRect contentsRect = style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::SC_GroupBoxContents, this); - - /* we need to ensure that the bottom of the label is higher - * than the top of the contents */ - int delta = contentsRect.top() - labelRect.bottom(); - const int min_gap = metrics.icon->spacing; - if (delta <= min_gap) { - margins.setTop(min_gap - delta); - } - layout()->setContentsMargins(margins); - - QIcon plusIcon(":plus"); - plusBtn = new QPushButton(plusIcon, QString(), this); - plusBtn->setFlat(true); - - /* now determine the icon and button size. Since the button will be - * placed in the label, make sure that we do not overflow, as it might - * get clipped - */ - int iconSize = metrics.icon->sz_small; - int btnSize = iconSize + 2*min_gap; - if (btnSize > labelRect.height()) { - btnSize = labelRect.height(); - iconSize = btnSize - 2*min_gap; - } - plusBtn->setIconSize(QSize(iconSize, iconSize)); - plusBtn->resize(btnSize, btnSize); - connect(plusBtn, SIGNAL(clicked(bool)), this, SIGNAL(addButtonClicked())); -} - -TableView::~TableView() -{ - QSettings s; - s.beginGroup(objectName()); - // remove the old default - bool oldDefault = (ui.tableView->columnWidth(0) == 30); - for (int i = 1; oldDefault && i < ui.tableView->model()->columnCount(); i++) { - if (ui.tableView->columnWidth(i) != 80) - oldDefault = false; - } - if (oldDefault) { - s.remove(""); - } else { - for (int i = 0; i < ui.tableView->model()->columnCount(); i++) { - if (ui.tableView->columnWidth(i) == defaultColumnWidth(i)) - s.remove(QString("colwidth%1").arg(i)); - else - s.setValue(QString("colwidth%1").arg(i), ui.tableView->columnWidth(i)); - } - } - s.endGroup(); -} - -void TableView::setBtnToolTip(const QString &tooltip) -{ - plusBtn->setToolTip(tooltip); -} - -void TableView::setModel(QAbstractItemModel *model) -{ - ui.tableView->setModel(model); - connect(ui.tableView, SIGNAL(clicked(QModelIndex)), model, SLOT(remove(QModelIndex))); - - QSettings s; - s.beginGroup(objectName()); - const int columnCount = ui.tableView->model()->columnCount(); - for (int i = 0; i < columnCount; i++) { - QVariant width = s.value(QString("colwidth%1").arg(i), defaultColumnWidth(i)); - ui.tableView->setColumnWidth(i, width.toInt()); - } - s.endGroup(); - - ui.tableView->horizontalHeader()->setMinimumHeight(metrics.header_ht); -} - -void TableView::fixPlusPosition() -{ - QStyleOptionGroupBox option; - initStyleOption(&option); - QRect labelRect = style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::SC_GroupBoxLabel, this); - QRect contentsRect = style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::QStyle::SC_GroupBoxFrame, this); - plusBtn->setGeometry( contentsRect.width() - plusBtn->width(), labelRect.y(), plusBtn->width(), labelRect.height()); -} - -// 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); -} - -int TableView::defaultColumnWidth(int col) -{ - QString text = ui.tableView->model()->headerData(col, Qt::Horizontal).toString(); - return text.isEmpty() ? metrics.rm_col_width : defaultModelFontMetrics().width(text) + 4; // add small margin -} - -QTableView *TableView::view() -{ - return ui.tableView; -} |