#include "gtl_gui_chart_markers_view.h" #include "gtl_gui_chart_markers_item_delegate.h" #include "gtl_gui_chart_markers.h" namespace gtl { namespace gui { chart_markers_view::chart_markers_view(QWidget* parent) : QTableView(parent) { setItemDelegate(new chart_markers_item_delegate(this)); setCornerButtonEnabled(false); setShowGrid(false); QFont font("MS Shell Dlg 2", 8); setFont(font); setSelectionMode(QAbstractItemView::SelectionMode::NoSelection); setFocusPolicy(Qt::FocusPolicy::NoFocus); verticalHeader()->setDefaultSectionSize(18); verticalHeader()->setFont(font); verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); horizontalHeader()->setVisible(false); horizontalHeader()->setMaximumHeight(16); horizontalHeader()->setMinimumSectionSize(0); horizontalHeader()->setFont(font); set_height(); } void chart_markers_view::setModel(QAbstractItemModel *model) { QTableView::setModel(model); connect(model, &QAbstractItemModel::rowsInserted, this, &chart_markers_view::rows_and_columns_count_changed); connect(model, &QAbstractItemModel::rowsRemoved, this, &chart_markers_view::rows_and_columns_count_changed); connect(model, &QAbstractItemModel::columnsInserted, this, &chart_markers_view::rows_and_columns_count_changed); connect(model, &QAbstractItemModel::columnsRemoved, this, &chart_markers_view::rows_and_columns_count_changed); connect(static_cast(model), &chart_markers::color_changed, this, &chart_markers_view::markers_color_changed); markers_color_changed(); } void chart_markers_view::set_height() { int height = 0; if(model() == NULL) { } else if(model()->rowCount() > 1 && model()->columnCount() > 2) { height = horizontalHeader()->height(); if (model()->columnCount() == 0) { // height = 0; // setVisible(false); } else { // setVisible(true); for (int i = 0; i < model()->rowCount(); i++) height += rowHeight(i)/* + 1*/; } if (horizontalScrollBar()->isVisible()) { height += horizontalScrollBar()->height(); } } height += 2; setMinimumSize(0, height); setMaximumSize(1000000, height); if(model() == NULL) return; QFontMetrics metrics(font()); for (int i = 0; i < model()->columnCount(); i++) { QString str = model()->data(model()->index(0, i), Qt::DisplayRole).toString(); QRect rect = metrics.boundingRect(str); if (i == 0) { setColumnWidth(i, rect.width() + 10); horizontalHeader()->setSectionResizeMode(i, QHeaderView::Fixed); } else if (i % 2 == 1) { if (rowSpan(1, i) != model()->rowCount()) setSpan(1, i, model()->rowCount(), 1); setColumnWidth(i, rect.width() + 10); horizontalHeader()->setSectionResizeMode(i, QHeaderView::Fixed); } else { // if (columnWidth(i) < rect.width() + 10) setColumnWidth(i, rect.width() + 10); horizontalHeader()->setSectionResizeMode(i, QHeaderView::ResizeToContents); } } } void chart_markers_view::resizeEvent(QResizeEvent *event) { QTableView::resizeEvent(event); set_height(); } void chart_markers_view::rows_and_columns_count_changed(const QModelIndex &/*parent*/, int/* start*/, int/* end*/) { set_height(); } void chart_markers_view::markers_color_changed() { setStyleSheet( "QTableView{background-color: " + static_cast(model())->bgnd_color().name() + ";}" + "QHeaderView:section{background-color: " + static_cast(model())->bgnd_color().name() + "; color: " + static_cast(model())->color().name() + "; border-style:none; border-bottom: 1px solid #808080;}"); } } }