1 // layerwidget.cpp: Layer add/remove/use widget
3 // Part of the Architektonas Project
4 // (C) 2011 Underground Software
5 // See the README and GPLv3 files for licensing and warranty information
7 // JLH = James Hammons <jlhamm@acm.org>
10 // --- ---------- ------------------------------------------------------------
11 // JLH 07/11/2013 Created this file
14 #include "layerwidget.h"
16 #include "layeritemwidget.h"
19 LayerWidget::LayerWidget(void): QWidget(),
20 addLayer(new QToolButton), removeLayer(new QToolButton),
21 editLayer(new QToolButton), layerUp(new QToolButton),
22 layerDown(new QToolButton), list(new QListWidget)
24 LayerItemWidget * liw = new LayerItemWidget("Background");
25 QListWidgetItem * qlwi = new QListWidgetItem(list);
26 list->setItemWidget(qlwi, liw);
28 // QToolButton * pb1 = new QToolButton;
29 // QToolButton * pb2 = new QToolButton;
30 // QToolButton * pb3 = new QToolButton;
31 // QToolButton * pb4 = new QToolButton;
32 // QToolButton * pb5 = new QToolButton;
34 addLayer->setIcon(QIcon(":/res/layer-add.png"));
35 removeLayer->setIcon(QIcon(":/res/layer-delete.png"));
36 editLayer->setIcon(QIcon(":/res/layer-edit.png"));
37 layerUp->setIcon(QIcon(":/res/layer-up.png"));
38 layerDown->setIcon(QIcon(":/res/layer-down.png"));
40 addLayer->setToolTip(tr("Add layer"));
41 removeLayer->setToolTip(tr("Remove layer"));
42 editLayer->setToolTip(tr("Edit layer"));
43 layerUp->setToolTip(tr("Move layer up"));
44 layerDown->setToolTip(tr("Move layer down"));
46 QHBoxLayout * hbox1 = new QHBoxLayout;
47 hbox1->addWidget(addLayer);
48 hbox1->addWidget(removeLayer);
49 hbox1->addWidget(editLayer);
50 hbox1->addWidget(layerUp);
51 hbox1->addWidget(layerDown);
54 QVBoxLayout * mainLayout = new QVBoxLayout;
55 mainLayout->addWidget(list);
56 mainLayout->addLayout(hbox1);
58 setLayout(mainLayout);
60 connect(list, SIGNAL(currentRowChanged(int)), this, SLOT(HandleLayerSelected(int)));
61 connect(addLayer, SIGNAL(clicked()), this, SLOT(AddLayer()));
62 connect(removeLayer, SIGNAL(clicked()), this, SLOT(DeleteLayer()));
63 connect(editLayer, SIGNAL(clicked()), this, SLOT(EditLayer()));
64 connect(layerUp, SIGNAL(clicked()), this, SLOT(MoveLayerUp()));
65 connect(layerDown, SIGNAL(clicked()), this, SLOT(MoveLayerDown()));
67 list->setCurrentRow(0);
71 LayerWidget::~LayerWidget()
76 void LayerWidget::HandleLayerSelected(int currentRow)
78 //printf("LayerWidget::HandleLayerSelected(): currentRow = %i\n", currentRow);
79 // emit(LayerSelected(currentRow));
81 QListWidgetItem * qlwi = list->item(currentRow);
82 LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
83 Global::activeLayer = currentRow;
84 Global::layerIsLocked = li->editibility->isChecked();
86 // Set button states to sane values
91 void LayerWidget::AddLayer(void)
93 int count = list->count();
94 QString text = QString("Layer #%1").arg(count);
95 LayerItemWidget * liw = new LayerItemWidget(text);
96 QListWidgetItem * qlwi = new QListWidgetItem();
97 list->insertItem(0, qlwi);
98 list->setItemWidget(qlwi, liw);
104 void LayerWidget::DeleteLayer(void)
106 int numItems = list->count();
111 QListWidgetItem * qlwi = list->currentItem();
112 list->removeItemWidget(qlwi);
117 // N.B.: Also, we need to delete the layer in the Drawing as well!
121 void LayerWidget::EditLayer(void)
123 // Get the LayerItemWidget so we can edit it (its name, anyway)...
124 QListWidgetItem * qlwi = list->currentItem();
125 LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
126 QString s = li->name->text();
129 QString result = QInputDialog::getText(this, tr("Edit Layer Name"), tr("Layer Name:"), QLineEdit::Normal, s, &ok);
131 if (ok && !result.isEmpty())
132 li->name->setText(result);
136 void LayerWidget::MoveLayerUp(void)
138 // Get information out of the LayerItemWidget (& get it from the list!)
139 int currentRow = list->currentRow();
140 QListWidgetItem * qlwi = list->currentItem();
141 LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
142 QString s = li->name->text();
143 bool visible = li->visibility->isChecked();
144 bool editible = li->editibility->isChecked();
146 // We have to make a new LayerItemWidget because it destroys the old one!
147 list->takeItem(currentRow);
148 list->insertItem(currentRow - 1, qlwi);
149 li = new LayerItemWidget(s, visible, editible);
150 list->setItemWidget(qlwi, li);
151 list->setCurrentItem(qlwi);
155 void LayerWidget::MoveLayerDown(void)
157 // Get information out of the LayerItemWidget (& get it from the list!)
158 int currentRow = list->currentRow();
159 QListWidgetItem * qlwi = list->currentItem();
160 LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
161 QString s = li->name->text();
162 bool visible = li->visibility->isChecked();
163 bool editible = li->editibility->isChecked();
165 // We have to make a new LayerItemWidget because it destroys the old one!
166 list->takeItem(currentRow);
167 list->insertItem(currentRow + 1, qlwi);
168 li = new LayerItemWidget(s, visible, editible);
169 list->setItemWidget(qlwi, li);
170 list->setCurrentItem(qlwi);
175 // Set button states in this widget to sane values
177 void LayerWidget::SetButtonStates(void)
179 int numItems = list->count();
180 int currentRow = list->currentRow();
182 layerDown->setEnabled(currentRow == (numItems - 1) ? false : true);
183 layerUp->setEnabled(currentRow == 0 ? false : true);
184 removeLayer->setEnabled(numItems == 1 ? false : true);