test_sdk/gui/gtl_gui_chart_markers_view.cpp

146 lines
4.7 KiB
C++
Raw Normal View History

#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;}");
}
}
}