LibreCAD
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
linepatternmanager.cpp
Go to the documentation of this file.
1 #include "linepatternmanager.h"
2 #include "ui_linepatternmanager.h"
3 
4 LinePatternManager::LinePatternManager(lc::Document_SPtr document, QWidget* parent) :
5  QDialog(parent),
6  ui(new Ui::LinePatternManager),
7  _model(new LinePatternModel(this)) {
8 
9  ui->setupUi(this);
10 
11  setDocument(document);
12 
13  ui->lpView->setModel(_model);
14  ui->lpView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
15  ui->lpView->horizontalHeader()->setSectionResizeMode(LinePatternModel::NAME, QHeaderView::Stretch);
16 
17  show();
18 }
19 
21  delete ui;
22  delete _model;
23 }
24 
25 void LinePatternManager::setDocument(lc::Document_SPtr document) {
26  if(_document != nullptr) {
27  _document->addLinePatternEvent().disconnect<LinePatternManager, &LinePatternManager::on_addLinePatternEvent>(this);
28  _document->removeLinePatternEvent().disconnect<LinePatternManager, &LinePatternManager::on_removeLinePatternEvent>(this);
29  _document->replaceLinePatternEvent().disconnect<LinePatternManager, &LinePatternManager::on_replaceLinePatternEvent>(this);
30  }
31 
32  _document = document;
33 
34  if(_document != nullptr) {
35  _document->addLinePatternEvent().connect<LinePatternManager, &LinePatternManager::on_addLinePatternEvent>(this);
36  _document->removeLinePatternEvent().connect<LinePatternManager, &LinePatternManager::on_removeLinePatternEvent>(this);
37  _document->replaceLinePatternEvent().connect<LinePatternManager, &LinePatternManager::on_replaceLinePatternEvent>(this);
38  }
39 
40  updateModel();
41 }
42 
44  QItemSelectionModel* select = ui->lpView->selectionModel();
45  if(!select->hasSelection()) {
46  return;
47  }
48 
49  auto row = select->selectedRows().first().row();
50  auto linePattern = std::dynamic_pointer_cast<const lc::DxfLinePatternByValue>(_model->linePatternAt(row));
51  if(linePattern == nullptr) {
52  return;
53  }
54 
55  auto dialog = new AddLinePatternDialog(_document, linePattern, this);
56  dialog->show();
57 }
58 
60  auto dialog = new AddLinePatternDialog(_document, this);
61  dialog->show();
62 }
63 
64 void LinePatternManager::on_lpView_doubleClicked(const QModelIndex &index) {
65  if(!index.isValid()) {
66  return;
67  }
68 
69  auto linePattern = std::dynamic_pointer_cast<const lc::DxfLinePatternByValue>(_model->linePatternAt(index.row()));
70  if(!linePattern) {
71  return;
72  }
73 
74  auto dialog = new AddLinePatternDialog(_document, linePattern, this);
75  dialog->show();
76 }
77 
79  _model->setLinePatterns(_document->linePatterns());
80 }
81 
82 void LinePatternManager::on_addLinePatternEvent(const lc::AddLinePatternEvent &) {
83  updateModel();
84 }
85 
86 void LinePatternManager::on_removeLinePatternEvent(const lc::RemoveLinePatternEvent &) {
87  updateModel();
88 }
89 
90 void LinePatternManager::on_replaceLinePatternEvent(const lc::ReplaceLinePatternEvent &) {
91  updateModel();
92 }
lc::Document_SPtr _document
void on_editButton_pressed()
Create update dialog. This function is called when "Edit" button is pressed. It create a new dialog p...
LinePatternManager(lc::Document_SPtr document, QWidget *parent=0)
Create window.
void on_removeLinePatternEvent(const lc::RemoveLinePatternEvent &)
void on_newButton_pressed()
Create new line pattern dialog. It create a new dialog to create a line pattern. This function is cal...
void on_lpView_doubleClicked(const QModelIndex &index)
Create update dialog. It create a new dialog pre-filled with the line pattern information. This function is called when an element of the list is double clicked.
Ui::LinePatternManager * ui
void setLinePatterns(std::vector< lc::DxfLinePatternByValue_CSPtr > linePatterns)
Set the new list of line patterns.
Model to display a list of DxfLinePatterns in a QTableView. Show preview, name and description...
Create a new window which shows a list of line patterns.
Create a dialog with all required fields to create a new line pattern.
void on_addLinePatternEvent(const lc::AddLinePatternEvent &)
lc::DxfLinePattern_CSPtr linePatternAt(const int index) const
Return line pattern at specific row.
void setDocument(lc::Document_SPtr document)
Set a new document and update the list of line patterns. Document can be set to nullptr to clear the ...
LinePatternModel * _model
void on_replaceLinePatternEvent(const lc::ReplaceLinePatternEvent &)
void updateModel()
Refresh line patterns list.