LibreCAD
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
linepatternmodel.cpp
Go to the documentation of this file.
1 #include "linepatternmodel.h"
2 
4  QAbstractTableModel(parent) {
5 }
6 
7 void LinePatternModel::setLinePatterns(std::vector<lc::DxfLinePatternByValue_CSPtr> linePatterns) {
8  beginResetModel();
9 
10  _linePatterns = linePatterns;
11 
12  endResetModel();
13 }
14 
15 lc::DxfLinePattern_CSPtr LinePatternModel::linePatternAt(const int index) const {
16  return _linePatterns.at(index);
17 }
18 
19 int LinePatternModel::rowCount(const QModelIndex&) const {
20  return _linePatterns.size();
21 }
22 
23 int LinePatternModel::columnCount(const QModelIndex&) const {
24  return LAST;
25 }
26 
27 QVariant LinePatternModel::data(const QModelIndex &index, int role) const {
28  if (!index.isValid()) {
29  return QVariant();
30  }
31 
32  auto linePattern = _linePatterns.at(index.row());
33 
34  if(role == Qt::DecorationRole && index.column() == PREVIEW) {
35  QPixmap pixmap(PREVIEW_WIDTH, PREVIEW_HEIGHT);
36 
37  auto linePatternByValue = std::dynamic_pointer_cast<const lc::DxfLinePatternByValue>(linePattern);
38 
39  if(linePatternByValue != nullptr) {
40  auto painter = LinePatternPainter(&pixmap, linePatternByValue);
41  painter.drawLinePattern();
42  }
43 
44  return pixmap;
45  }
46 
47  if(role == Qt::SizeHintRole && index.column() == PREVIEW) {
48  return QSize(PREVIEW_WIDTH, PREVIEW_HEIGHT);
49  }
50 
51  if(role == Qt::DisplayRole) {
52  switch (index.column()) {
53  case NAME:
54  return linePattern->name().c_str();
55 
56  case DESCRIPTION:
57  return linePattern->description().c_str();
58  }
59  }
60 
61  return QVariant();
62 }
63 
64 QVariant LinePatternModel::headerData(int section, Qt::Orientation orientation, int role) const {
65  if (orientation == Qt::Horizontal) {
66  if(role == Qt::DisplayRole) {
67  switch(section) {
68  case PREVIEW:
69  return "Preview";
70 
71  case NAME:
72  return "Name";
73 
74  case DESCRIPTION:
75  return "Description";
76  }
77  }
78  }
79 
80  return QAbstractTableModel::headerData(section, orientation, role);
81 }
int rowCount(const QModelIndex &parent=QModelIndex()) const
int columnCount(const QModelIndex &parent=QModelIndex()) const
#define PREVIEW_HEIGHT
#define PREVIEW_WIDTH
QVariant headerData(int section, Qt::Orientation orientation, int role) const
void setLinePatterns(std::vector< lc::DxfLinePatternByValue_CSPtr > linePatterns)
Set the new list of line patterns.
std::vector< lc::DxfLinePatternByValue_CSPtr > _linePatterns
LinePatternModel(QObject *parent=0)
Create widget.
Painting line patterns on a QPaintDevice.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
lc::DxfLinePattern_CSPtr linePatternAt(const int index) const
Return line pattern at specific row.