LibreCAD
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
Layers Class Reference

Widget which shows a list of layers. More...

#include <layers.h>

Inheritance diagram for Layers:
Collaboration diagram for Layers:

Signals

void layerChanged (lc::Layer_CSPtr layer)
 

Public Member Functions

 Layers (CadMdiChild *mdiChild=nullptr, QWidget *parent=0)
 Create widget. More...
 
 ~Layers ()
 
void setMdiChild (CadMdiChild *mdiChild=nullptr)
 Set new document. More...
 

Protected Member Functions

void createLayer (lc::Layer_CSPtr layer)
 
void deleteLayer (lc::Layer_CSPtr layer)
 
void replaceLayer (lc::Layer_CSPtr oldLayer, lc::Layer_CSPtr newLayer)
 

Protected Attributes

Ui::Layers * ui
 
LayerModelmodel
 

Private Slots

void onSelectionChanged (const QItemSelection &selected, const QItemSelection &deselected)
 
void on_newButton_clicked ()
 
void on_deleteButton_clicked ()
 
void on_layerList_clicked (const QModelIndex &index)
 
void changeLayerName (lc::Layer_CSPtr &layer, const std::string &name)
 

Private Member Functions

void updateLayerList ()
 
void on_addLayerEvent (const lc::AddLayerEvent &)
 
void on_removeLayerEvent (const lc::RemoveLayerEvent &)
 
void on_replaceLayerEvent (const lc::ReplaceLayerEvent &)
 

Private Attributes

CadMdiChild_mdiChild
 

Detailed Description

Widget which shows a list of layers.

Definition at line 22 of file layers.h.

Constructor & Destructor Documentation

Layers::Layers ( CadMdiChild mdiChild = nullptr,
QWidget *  parent = 0 
)

Create widget.

Definition at line 6 of file layers.cpp.

6  :
7  QDockWidget(parent),
8  ui(new Ui::Layers),
9  _mdiChild(nullptr) {
10 
11  ui->setupUi(this);
12 
13  model = new LayerModel(this);
14  setMdiChild(mdiChild);
15 
16  ui->layerList->setModel(model);
17  ui->layerList->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
18  ui->layerList->horizontalHeader()->setSectionResizeMode(LayerModel::NAME, QHeaderView::Stretch);
19 
21  connect(ui->layerList->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
22  this, SLOT(onSelectionChanged(const QItemSelection &, const QItemSelection &)));
23 }
CadMdiChild * _mdiChild
Definition: layers.h:59
void onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
Definition: layers.cpp:185
void nameChanged(lc::Layer_CSPtr &layer, const std::string &name)
Signal when layer name was changed by double clicking.
void changeLayerName(lc::Layer_CSPtr &layer, const std::string &name)
Definition: layers.cpp:100
Model to display a list of layers in a QTableView.
Definition: layermodel.h:11
void setMdiChild(CadMdiChild *mdiChild=nullptr)
Set new document.
Definition: layers.cpp:29
LayerModel * model
Definition: layers.h:52
Ui::Layers * ui
Definition: layers.h:51
Layers::~Layers ( )

Definition at line 25 of file layers.cpp.

25  {
26  delete ui;
27 }
Ui::Layers * ui
Definition: layers.h:51

Member Function Documentation

void Layers::changeLayerName ( lc::Layer_CSPtr &  layer,
const std::string &  name 
)
privateslot

Definition at line 100 of file layers.cpp.

100  {
101  if(name.empty()) {
102  return;
103  }
104 
105  auto newLayer = std::make_shared<const lc::Layer>(
106  name,
107  layer->lineWidth(),
108  layer->color(),
109  layer->linePattern(),
110  layer->isFrozen()
111  );
112 
113  replaceLayer(layer, newLayer);
114 }
void replaceLayer(lc::Layer_CSPtr oldLayer, lc::Layer_CSPtr newLayer)
Definition: layers.cpp:135
void Layers::createLayer ( lc::Layer_CSPtr  layer)
protected

Definition at line 116 of file layers.cpp.

116  {
117  if(_mdiChild != nullptr) {
118  auto operation = std::make_shared<lc::operation::AddLayer>(_mdiChild->document(), layer);
119  operation->execute();
120  }
121 }
CadMdiChild * _mdiChild
Definition: layers.h:59
std::shared_ptr< lc::Document > document() const
void Layers::deleteLayer ( lc::Layer_CSPtr  layer)
protected

Definition at line 123 of file layers.cpp.

123  {
124  if(_mdiChild != nullptr) {
125  try {
126  auto operation = std::make_shared<lc::operation::RemoveLayer>(_mdiChild->document(), layer);
127  operation->execute();
128  }
129  catch(const char* message) {
130  QMessageBox::critical(nullptr, "Error", message);
131  }
132  }
133 }
CadMdiChild * _mdiChild
Definition: layers.h:59
std::shared_ptr< lc::Document > document() const
void Layers::layerChanged ( lc::Layer_CSPtr  layer)
signal
void Layers::on_addLayerEvent ( const lc::AddLayerEvent &  event)
private

Definition at line 163 of file layers.cpp.

163  {
164  _mdiChild->setActiveLayer(event.layer());
165 
166  updateLayerList();
167 }
void setActiveLayer(const lc::Layer_CSPtr &activeLayer)
CadMdiChild * _mdiChild
Definition: layers.h:59
void updateLayerList()
Definition: layers.cpp:142
void Layers::on_deleteButton_clicked ( )
privateslot

Definition at line 60 of file layers.cpp.

60  {
61  QModelIndexList selection = ui->layerList->selectionModel()->selectedRows();
62 
63  deleteLayer(model->layerAt(selection.first().row()));
64 }
lc::Layer_CSPtr layerAt(int row)
Get layer at specific row.
Definition: layermodel.cpp:71
void deleteLayer(lc::Layer_CSPtr layer)
Definition: layers.cpp:123
LayerModel * model
Definition: layers.h:52
Ui::Layers * ui
Definition: layers.h:51
void Layers::on_layerList_clicked ( const QModelIndex &  index)
privateslot

Definition at line 66 of file layers.cpp.

66  {
67  if(!index.isValid() || _mdiChild == nullptr) {
68  return;
69  }
70 
71  auto layer = model->layerAt(index.row());
72  if(index.column() != LayerModel::NAME) {
73  auto locked = layer->isFrozen();
74 
75  switch (index.column()) {
76  case LayerModel::LOCKED:
77  locked = !locked;
78  break;
79 
80  case LayerModel::EDIT:
81  auto dialog = new AddLayerDialog(layer, _mdiChild->document(), this);
82  dialog->show();
83 
84  connect(dialog, &AddLayerDialog::editLayer, this, &Layers::replaceLayer);
85  return;
86  }
87 
88  auto newLayer = std::make_shared<const lc::Layer>(
89  layer->name(),
90  layer->lineWidth(),
91  layer->color(),
92  layer->linePattern(),
93  locked
94  );
95 
96  replaceLayer(layer, newLayer);
97  }
98 }
lc::Layer_CSPtr layerAt(int row)
Get layer at specific row.
Definition: layermodel.cpp:71
void editLayer(lc::Layer_CSPtr oldLayer, lc::Layer_CSPtr newLayer)
CadMdiChild * _mdiChild
Definition: layers.h:59
void replaceLayer(lc::Layer_CSPtr oldLayer, lc::Layer_CSPtr newLayer)
Definition: layers.cpp:135
std::shared_ptr< lc::Document > document() const
Create a dialog with all required fields to create a new layer.
LayerModel * model
Definition: layers.h:52
void Layers::on_newButton_clicked ( )
privateslot

Definition at line 49 of file layers.cpp.

49  {
50  if(_mdiChild == nullptr) {
51  return;
52  }
53 
54  auto dialog = new AddLayerDialog(_mdiChild->document(), this);
55  dialog->show();
56 
57  connect(dialog, &AddLayerDialog::newLayer, this, &Layers::createLayer);
58 }
CadMdiChild * _mdiChild
Definition: layers.h:59
void createLayer(lc::Layer_CSPtr layer)
Definition: layers.cpp:116
std::shared_ptr< lc::Document > document() const
Create a dialog with all required fields to create a new layer.
void newLayer(lc::Layer_CSPtr)
void Layers::on_removeLayerEvent ( const lc::RemoveLayerEvent &  event)
private

Definition at line 169 of file layers.cpp.

169  {
170  if(_mdiChild->activeLayer() == event.layer()) {
171  _mdiChild->setActiveLayer(_mdiChild->document()->layerByName("0"));
172  }
173 
174  updateLayerList();
175 }
void setActiveLayer(const lc::Layer_CSPtr &activeLayer)
CadMdiChild * _mdiChild
Definition: layers.h:59
void updateLayerList()
Definition: layers.cpp:142
std::shared_ptr< lc::Document > document() const
lc::Layer_CSPtr activeLayer() const
Get the selected layer.
void Layers::on_replaceLayerEvent ( const lc::ReplaceLayerEvent &  event)
private

Definition at line 177 of file layers.cpp.

177  {
178  if(_mdiChild->activeLayer() == event.oldLayer()) {
179  _mdiChild->setActiveLayer(event.newLayer());
180  }
181 
182  updateLayerList();
183 }
void setActiveLayer(const lc::Layer_CSPtr &activeLayer)
CadMdiChild * _mdiChild
Definition: layers.h:59
void updateLayerList()
Definition: layers.cpp:142
lc::Layer_CSPtr activeLayer() const
Get the selected layer.
void Layers::onSelectionChanged ( const QItemSelection &  selected,
const QItemSelection &  deselected 
)
privateslot

Definition at line 185 of file layers.cpp.

185  {
186  if(selected.isEmpty()) {
187  return;
188  }
189 
190  auto layer = model->layerAt(selected.first().top());
191  _mdiChild->setActiveLayer(layer);
192  emit layerChanged(layer);
193 }
lc::Layer_CSPtr layerAt(int row)
Get layer at specific row.
Definition: layermodel.cpp:71
void setActiveLayer(const lc::Layer_CSPtr &activeLayer)
CadMdiChild * _mdiChild
Definition: layers.h:59
void layerChanged(lc::Layer_CSPtr layer)
LayerModel * model
Definition: layers.h:52
void Layers::replaceLayer ( lc::Layer_CSPtr  oldLayer,
lc::Layer_CSPtr  newLayer 
)
protected

Definition at line 135 of file layers.cpp.

135  {
136  if(_mdiChild != nullptr) {
137  auto operation = std::make_shared<lc::operation::ReplaceLayer>(_mdiChild->document(), oldLayer, newLayer);
138  operation->execute();
139  }
140 }
CadMdiChild * _mdiChild
Definition: layers.h:59
std::shared_ptr< lc::Document > document() const
void Layers::setMdiChild ( CadMdiChild mdiChild = nullptr)

Set new document.

Parameters
documentNew document Update the layer list.

Definition at line 29 of file layers.cpp.

29  {
30  if(_mdiChild != nullptr) {
31  auto document = _mdiChild->document();
32  document->addLayerEvent().disconnect<Layers, &Layers::on_addLayerEvent>(this);
33  document->removeLayerEvent().disconnect<Layers, &Layers::on_removeLayerEvent>(this);
34  document->replaceLayerEvent().disconnect<Layers, &Layers::on_replaceLayerEvent>(this);
35  }
36 
37  _mdiChild = mdiChild;
38 
39  if(mdiChild != nullptr) {
40  auto document = mdiChild->document();
41  document->addLayerEvent().connect<Layers, &Layers::on_addLayerEvent>(this);
42  document->removeLayerEvent().connect<Layers, &Layers::on_removeLayerEvent>(this);
43  document->replaceLayerEvent().connect<Layers, &Layers::on_replaceLayerEvent>(this);
44  }
45 
47 }
CadMdiChild * _mdiChild
Definition: layers.h:59
void on_addLayerEvent(const lc::AddLayerEvent &)
Definition: layers.cpp:163
void updateLayerList()
Definition: layers.cpp:142
Layers(CadMdiChild *mdiChild=nullptr, QWidget *parent=0)
Create widget.
Definition: layers.cpp:6
void on_replaceLayerEvent(const lc::ReplaceLayerEvent &)
Definition: layers.cpp:177
void on_removeLayerEvent(const lc::RemoveLayerEvent &)
Definition: layers.cpp:169
std::shared_ptr< lc::Document > document() const
void Layers::updateLayerList ( )
private

Definition at line 142 of file layers.cpp.

142  {
143  std::vector<lc::Layer_CSPtr> layersVector;
144 
145  if (_mdiChild != nullptr) {
146  auto layersMap = _mdiChild->document()->allLayers();
147 
148  for (auto layer : layersMap) {
149  layersVector.insert(layersVector.begin(), layer.second);
150  }
151  }
152 
153  model->setLayers(layersVector);
154 
155  if(_mdiChild != nullptr && _mdiChild->activeLayer() != nullptr) {
156  auto layer = _mdiChild->activeLayer();
157  ui->layerList->selectRow(model->indexOf(layer));
158 
159  emit layerChanged(layer);
160  }
161 }
CadMdiChild * _mdiChild
Definition: layers.h:59
unsigned int indexOf(lc::Layer_CSPtr layer)
Give the index of the given layer.
Definition: layermodel.cpp:80
std::shared_ptr< lc::Document > document() const
void layerChanged(lc::Layer_CSPtr layer)
LayerModel * model
Definition: layers.h:52
Ui::Layers * ui
Definition: layers.h:51
void setLayers(std::vector< lc::Layer_CSPtr > layers)
Update the list of layers.
Definition: layermodel.cpp:11
lc::Layer_CSPtr activeLayer() const
Get the selected layer.

Member Data Documentation

CadMdiChild* Layers::_mdiChild
private

Definition at line 59 of file layers.h.

LayerModel* Layers::model
protected

Definition at line 52 of file layers.h.

Ui::Layers* Layers::ui
protected

Definition at line 51 of file layers.h.


The documentation for this class was generated from the following files: