]> Shamusworld >> Repos - architektonas/blobdiff - src/layerwidget.cpp
Fixes for the Layer widget.
[architektonas] / src / layerwidget.cpp
index 33221206a456172f62d28cebfb9b7a3374d1a941..faaf5b999854423f546b39724f854e7419900fa3 100644 (file)
 //
 
 #include "layerwidget.h"
+#include "global.h"
 #include "layeritemwidget.h"
 
 
 LayerWidget::LayerWidget(void): QWidget(),
-       list(new QListWidget)
+       addLayer(new QToolButton), removeLayer(new QToolButton),
+       editLayer(new QToolButton), layerUp(new QToolButton),
+       layerDown(new QToolButton), list(new QListWidget)
 {
        LayerItemWidget * liw = new LayerItemWidget("Background");
        QListWidgetItem * qlwi = new QListWidgetItem(list);
        list->setItemWidget(qlwi, liw);
 
-#if 0
-       QPushButton * pb1 = new QPushButton("+");
-       QPushButton * pb2 = new QPushButton("-");
-       QPushButton * pb3 = new QPushButton("Edit");
-       QPushButton * pb4 = new QPushButton("^");
-       QPushButton * pb5 = new QPushButton("v");
-#else
-       QToolButton * pb1 = new QToolButton;
-       QToolButton * pb2 = new QToolButton;
-       QToolButton * pb3 = new QToolButton;
-       QToolButton * pb4 = new QToolButton;
-       QToolButton * pb5 = new QToolButton;
-
-       pb1->setIcon(QIcon(":/res/layer-add.png"));
-       pb2->setIcon(QIcon(":/res/layer-delete.png"));
-       pb3->setIcon(QIcon(":/res/layer-edit.png"));
-       pb4->setIcon(QIcon(":/res/layer-up.png"));
-       pb5->setIcon(QIcon(":/res/layer-down.png"));
-
-       pb1->setToolTip(tr("Add layer"));
-       pb2->setToolTip(tr("Remove layer"));
-       pb3->setToolTip(tr("Edit layer"));
-       pb4->setToolTip(tr("Move layer up"));
-       pb5->setToolTip(tr("Move layer down"));
-#endif
+//     QToolButton * pb1 = new QToolButton;
+//     QToolButton * pb2 = new QToolButton;
+//     QToolButton * pb3 = new QToolButton;
+//     QToolButton * pb4 = new QToolButton;
+//     QToolButton * pb5 = new QToolButton;
+
+       addLayer->setIcon(QIcon(":/res/layer-add.png"));
+       removeLayer->setIcon(QIcon(":/res/layer-delete.png"));
+       editLayer->setIcon(QIcon(":/res/layer-edit.png"));
+       layerUp->setIcon(QIcon(":/res/layer-up.png"));
+       layerDown->setIcon(QIcon(":/res/layer-down.png"));
+
+       addLayer->setToolTip(tr("Add layer"));
+       removeLayer->setToolTip(tr("Remove layer"));
+       editLayer->setToolTip(tr("Edit layer"));
+       layerUp->setToolTip(tr("Move layer up"));
+       layerDown->setToolTip(tr("Move layer down"));
 
        QHBoxLayout * hbox1 = new QHBoxLayout;
-       hbox1->addWidget(pb1);
-       hbox1->addWidget(pb2);
-       hbox1->addWidget(pb3);
-       hbox1->addWidget(pb4);
-       hbox1->addWidget(pb5);
+       hbox1->addWidget(addLayer);
+       hbox1->addWidget(removeLayer);
+       hbox1->addWidget(editLayer);
+       hbox1->addWidget(layerUp);
+       hbox1->addWidget(layerDown);
        hbox1->addStretch();
 
        QVBoxLayout * mainLayout = new QVBoxLayout;
@@ -63,12 +58,13 @@ LayerWidget::LayerWidget(void): QWidget(),
        setLayout(mainLayout);
 
        connect(list, SIGNAL(currentRowChanged(int)), this, SLOT(HandleLayerSelected(int)));
-       list->setCurrentRow(4);
-       connect(pb1, SIGNAL(clicked()), this, SLOT(AddLayer()));
-       connect(pb2, SIGNAL(clicked()), this, SLOT(DeleteLayer()));
-       connect(pb3, SIGNAL(clicked()), this, SLOT(EditLayer()));
-       connect(pb4, SIGNAL(clicked()), this, SLOT(MoveLayerUp()));
-       connect(pb5, SIGNAL(clicked()), this, SLOT(MoveLayerDown()));
+       connect(addLayer, SIGNAL(clicked()), this, SLOT(AddLayer()));
+       connect(removeLayer, SIGNAL(clicked()), this, SLOT(DeleteLayer()));
+       connect(editLayer, SIGNAL(clicked()), this, SLOT(EditLayer()));
+       connect(layerUp, SIGNAL(clicked()), this, SLOT(MoveLayerUp()));
+       connect(layerDown, SIGNAL(clicked()), this, SLOT(MoveLayerDown()));
+
+       list->setCurrentRow(0);
 }
 
 
@@ -80,7 +76,15 @@ LayerWidget::~LayerWidget()
 void LayerWidget::HandleLayerSelected(int currentRow)
 {
 //printf("LayerWidget::HandleLayerSelected(): currentRow = %i\n", currentRow);
-       emit(LayerSelected(currentRow));
+//     emit(LayerSelected(currentRow));
+
+       QListWidgetItem * qlwi = list->item(currentRow);
+       LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
+       Global::activeLayer = currentRow;
+       Global::layerIsLocked = li->editibility->isChecked();
+
+       // Set button states to sane values
+       SetButtonStates();
 }
 
 
@@ -92,25 +96,91 @@ void LayerWidget::AddLayer(void)
        QListWidgetItem * qlwi = new QListWidgetItem();
        list->insertItem(0, qlwi);
        list->setItemWidget(qlwi, liw);
+
+       SetButtonStates();
 }
 
 
 void LayerWidget::DeleteLayer(void)
 {
+       int numItems = list->count();
+
+       if (numItems == 1)
+               return;
+
+       QListWidgetItem * qlwi = list->currentItem();
+       list->removeItemWidget(qlwi);
+       delete qlwi;
+
+       SetButtonStates();
+
+       // N.B.: Also, we need to delete the layer in the Drawing as well!
 }
 
 
 void LayerWidget::EditLayer(void)
 {
+       // Get the LayerItemWidget so we can edit it (its name, anyway)...
+       QListWidgetItem * qlwi = list->currentItem();
+       LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
+       QString s = li->name->text();
+
+       bool ok;
+       QString result = QInputDialog::getText(this, tr("Edit Layer Name"), tr("Layer Name:"), QLineEdit::Normal, s, &ok);
+
+       if (ok && !result.isEmpty())
+               li->name->setText(result);
 }
 
 
 void LayerWidget::MoveLayerUp(void)
 {
+       // Get information out of the LayerItemWidget (& get it from the list!)
+       int currentRow = list->currentRow();
+       QListWidgetItem * qlwi = list->currentItem();
+       LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
+       QString s = li->name->text();
+       bool visible = li->visibility->isChecked();
+       bool editible = li->editibility->isChecked();
+
+       // We have to make a new LayerItemWidget because it destroys the old one!
+       list->takeItem(currentRow);
+       list->insertItem(currentRow - 1, qlwi);
+       li = new LayerItemWidget(s, visible, editible);
+       list->setItemWidget(qlwi, li);
+       list->setCurrentItem(qlwi);
 }
 
 
 void LayerWidget::MoveLayerDown(void)
 {
+       // Get information out of the LayerItemWidget (& get it from the list!)
+       int currentRow = list->currentRow();
+       QListWidgetItem * qlwi = list->currentItem();
+       LayerItemWidget * li = (LayerItemWidget *)list->itemWidget(qlwi);
+       QString s = li->name->text();
+       bool visible = li->visibility->isChecked();
+       bool editible = li->editibility->isChecked();
+
+       // We have to make a new LayerItemWidget because it destroys the old one!
+       list->takeItem(currentRow);
+       list->insertItem(currentRow + 1, qlwi);
+       li = new LayerItemWidget(s, visible, editible);
+       list->setItemWidget(qlwi, li);
+       list->setCurrentItem(qlwi);
+}
+
+
+//
+// Set button states in this widget to sane values
+//
+void LayerWidget::SetButtonStates(void)
+{
+       int numItems = list->count();
+       int currentRow = list->currentRow();
+
+       layerDown->setEnabled(currentRow == (numItems - 1) ? false : true);
+       layerUp->setEnabled(currentRow == 0 ? false : true);
+       removeLayer->setEnabled(numItems == 1 ? false : true);
 }