146 lines
4.7 KiB
C++
146 lines
4.7 KiB
C++
|
#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<chart_markers*>(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<chart_markers*>(model())->bgnd_color().name() + ";}" + "QHeaderView:section{background-color: " + static_cast<chart_markers*>(model())->bgnd_color().name() + "; color: " + static_cast<chart_markers*>(model())->color().name() + "; border-style:none; border-bottom: 1px solid #808080;}");
|
||
|
}
|
||
|
}
|
||
|
}
|