]> Shamusworld >> Repos - architektonas/blob - src/layerwidget.cpp
faaf5b999854423f546b39724f854e7419900fa3
[architektonas] / src / layerwidget.cpp
1 // layerwidget.cpp: Layer add/remove/use widget
2 //
3 // Part of the Architektonas Project
4 // (C) 2011 Underground Software
5 // See the README and GPLv3 files for licensing and warranty information
6 //
7 // JLH = James Hammons <jlhamm@acm.org>
8 //
9 // WHO  WHEN        WHAT
10 // ---  ----------  ------------------------------------------------------------
11 // JLH  07/11/2013  Created this file
12 //
13
14 #include "layerwidget.h"
15 #include "global.h"
16 #include "layeritemwidget.h"
17
18
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)
23 {
24         LayerItemWidget * liw = new LayerItemWidget("Background");
25         QListWidgetItem * qlwi = new QListWidgetItem(list);
26         list->setItemWidget(qlwi, liw);
27
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;
33
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"));
39
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"));
45
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);
52         hbox1->addStretch();
53
54         QVBoxLayout * mainLayout = new QVBoxLayout;
55         mainLayout->addWidget(list);
56         mainLayout->addLayout(hbox1);
57
58         setLayout(mainLayout);
59
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()));
66
67         list->setCurrentRow(0);
68 }
69
70
71 LayerWidget::~LayerWidget()
72 {
73 }
74
75
76 void LayerWidget::HandleLayerSelected(int currentRow)
77 {
78 //printf("LayerWidget::HandleLayerSelected(): currentRow = %i\n", currentRow);
79 //      emit(LayerSelected(currentRow));
80
81         QListWidgetItem * qlwi = list->item(currentRow);
82         LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
83         Global::activeLayer = currentRow;
84         Global::layerIsLocked = li->editibility->isChecked();
85
86         // Set button states to sane values
87         SetButtonStates();
88 }
89
90
91 void LayerWidget::AddLayer(void)
92 {
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);
99
100         SetButtonStates();
101 }
102
103
104 void LayerWidget::DeleteLayer(void)
105 {
106         int numItems = list->count();
107
108         if (numItems == 1)
109                 return;
110
111         QListWidgetItem * qlwi = list->currentItem();
112         list->removeItemWidget(qlwi);
113         delete qlwi;
114
115         SetButtonStates();
116
117         // N.B.: Also, we need to delete the layer in the Drawing as well!
118 }
119
120
121 void LayerWidget::EditLayer(void)
122 {
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();
127
128         bool ok;
129         QString result = QInputDialog::getText(this, tr("Edit Layer Name"), tr("Layer Name:"), QLineEdit::Normal, s, &ok);
130
131         if (ok && !result.isEmpty())
132                 li->name->setText(result);
133 }
134
135
136 void LayerWidget::MoveLayerUp(void)
137 {
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();
145
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);
152 }
153
154
155 void LayerWidget::MoveLayerDown(void)
156 {
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();
164
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);
171 }
172
173
174 //
175 // Set button states in this widget to sane values
176 //
177 void LayerWidget::SetButtonStates(void)
178 {
179         int numItems = list->count();
180         int currentRow = list->currentRow();
181
182         layerDown->setEnabled(currentRow == (numItems - 1) ? false : true);
183         layerUp->setEnabled(currentRow == 0 ? false : true);
184         removeLayer->setEnabled(numItems == 1 ? false : true);
185 }
186