Skip to content
Snippets Groups Projects
Select Git revision
  • a63ae69a853dde1099eae4d2545986c26422e232
  • master default protected
  • xaml-ver
3 results

LayerDock.cpp

Blame
  • user avatar
    passscod authored
    a63ae69a
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    LayerDock.cpp 7.58 KiB
    #include "LayerDock.h"
    
    LayerDock::LayerDock(InteractionTool *interaction){
        interactionTool = interaction;
        createLayerDock();
    }
    LayerDock::~LayerDock(){
    
    }
    void LayerDock::updateLayers(){
        for (unsigned int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
            QPixmap pic;
            pic.convertFromImage(*interactionTool->getPicture()->getLayerAsQ(i));
            layerButtons[i*5+1]->setIcon(pic);
            layerButtons[i*5+1]->setChecked(false);
        }
        layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+1]->setChecked(true);
        if(interactionTool->getPicture()->getLayerCount()>1){
            layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(false);
        }
    
    }
    void LayerDock::updateLayerCount(){
    
        layerButtons = std::vector<QPushButton*>(); //TODO vector zu Qvector ändern
        layerCheckboxes = std::vector<QCheckBox*>();
        layerDock = new QDockWidget(tr("Layers"));
        layerDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
        layerLayout = new QGridLayout();
        layerButtons.push_back(new QPushButton("+"));
        layerLayout->addWidget(layerButtons[0],0,0,2,2);
        layerButtons[0]->setMaximumWidth(25);
        layerButtons[0]->setCheckable(true);
        connect(layerButtons[0], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
        for (unsigned int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
            layerButtons.push_back(new QPushButton);
            QPixmap pic(100,100);
            pic.convertFromImage(*interactionTool->getPicture()->getLayerAsQ(i));
            layerButtons[i*5+1]->setIconSize(QSize(100,100));
            layerButtons[i*5+1]->setIcon(pic);
            layerLayout->addWidget(layerButtons[i*5+1],i*5+1,2,5,1);
            layerButtons[i*5+1]->setCheckable(true);
            connect(layerButtons[i*5+1], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
            layerButtons.push_back(new QPushButton("^"));
            layerLayout->addWidget(layerButtons[i*5+2],i*5+2,0,1,2);
            layerButtons[i*5+2]->setMaximumWidth(25);
            layerButtons[i*5+2]->setCheckable(true);
            if (i==0){
                layerButtons[i*5+2]->setEnabled(false);
            }
            connect(layerButtons[i*5+2], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
            layerButtons.push_back(new QPushButton("-"));
            layerLayout->addWidget(layerButtons[i*5+3],i*5+3,0,1,1);
            layerButtons[i*5+3]->setMaximumWidth(25);
            layerButtons[i*5+3]->setCheckable(true);
            connect(layerButtons[i*5+3], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
            layerCheckboxes.push_back(new QCheckBox());
            layerLayout->addWidget(layerCheckboxes[i],i*5+3,1,1,1);
            layerCheckboxes[i]->setChecked(true);
            connect(layerCheckboxes[i], SIGNAL(clicked()),this, SLOT(updateVisible()));
            layerButtons.push_back(new QPushButton("v"));
            layerLayout->addWidget(layerButtons[i*5+4],i*5+4,0,1,2);
            layerButtons[i*5+4]->setMaximumWidth(25);
            layerButtons[i*5+4]->setCheckable(true);
            if (i+1==interactionTool->getPicture()->getLayerCount()){
                layerButtons[i*5+4]->setEnabled(false);
            }
            connect(layerButtons[i*5+4], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
            layerButtons.push_back(new QPushButton("+"));
            layerLayout->addWidget(layerButtons[i*5+5],i*5+5,0,2,2);
            layerButtons[i*5+5]->setMaximumWidth(25);
            layerButtons[i*5+5]->setCheckable(true);
            connect(layerButtons[i*5+5], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
        }
        layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+1]->setChecked(true);
            layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(false);
        //}
        layers = new QWidget(layerDock);
        layers->setLayout(layerLayout);
        layerScrollArea = new QScrollArea();
        layerScrollArea->setWidget(layers);
        layerDock->setWidget(layerScrollArea);
        emit updateLayerDock();
        layerDock->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
    }
    void LayerDock::changeCurrentLayer(){
        if (layerButtons[0]->isChecked()){
            emit newLayer();
            layerButtons[0]->setChecked(false);
        }
        for (int i = 0; i < interactionTool->getPicture()->getLayerCount(); i++) {
            if (layerButtons[i*5+1]->isChecked()&&i!=interactionTool->getPicture()->getCurrentLayerIndex()){
                layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+1]->setChecked(false);
                layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(true);
                interactionTool->getPicture()->setCurrentLayer(i);
                emit update();
                layerButtons[interactionTool->getPicture()->getCurrentLayerIndex()*5+3]->setEnabled(false);
            } else if(layerButtons[i*5+2]->isChecked()){
                interactionTool->getPicture()->moveLayer(i,i-1);
                updateLayers();
                layerButtons[i*5+2]->setChecked(false);
                bool h = layerCheckboxes[i]->isChecked();
                layerCheckboxes[i]->setChecked(layerCheckboxes[i-1]->isChecked());
                layerCheckboxes[i-1]->setChecked(h);
                emit update();
            } else if(layerButtons[i*5+3]->isChecked()){
                layerButtons[i*5+3]->setChecked(false);
                interactionTool->getPicture()->removeLayer(i);
                if(interactionTool->getPicture()->getLayerCount()==0){//TODO
    
                }
                updateLayerCount();
                emit update();
            } else if(layerButtons[i*5+4]->isChecked()){
                interactionTool->getPicture()->moveLayer(i+1,i);
                bool h = layerCheckboxes[i]->isChecked();
                layerCheckboxes[i]->setChecked(layerCheckboxes[i+1]->isChecked());
                layerCheckboxes[i+1]->setChecked(h);
                updateLayers();
                layerButtons[i*5+4]->setChecked(false);
                emit update();
            } else if(layerButtons[i*5+5]->isChecked()&&i+1!=interactionTool->getPicture()->getLayerCount()){
                layerButtons[i*5+5]->setChecked(false);
                param = new toolParameters_t;
                param->tool = merge;
                param->layerIndex1 = i;
                param->layerIndex2 = i+1;
                this->i=i;
    
                emit getParams(param);
    
            } else if(layerButtons[i*5+5]->isChecked()&&i+1==interactionTool->getPicture()->getLayerCount()){
                newLayer();
                layerButtons[i*5+5]->setChecked(false);
            }
        }
    }
    void LayerDock::createLayerDock(){
        layerDock = new QDockWidget(tr("Layers"));
        layerDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
        layerLayout = new QGridLayout();
        layerButtons.push_back(new QPushButton("+"));
        layerLayout->addWidget(layerButtons[0],0,0,2,1);
        layerButtons[0]->setMaximumWidth(25);
        layerButtons[0]->setCheckable(true);
        connect(layerButtons[0], SIGNAL(clicked()),this, SLOT(changeCurrentLayer()));
        layers = new QWidget(layerDock);
        layers->setLayout(layerLayout);
        layerScrollArea = new QScrollArea();
        layerScrollArea->setWidget(layers);
        layerDock->setWidget(layerScrollArea);
        layerDock->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
    }
    
    QDockWidget *LayerDock::getDockWidget(){
        return layerDock;
    }
    bool LayerDock::isLayerCheckboxChecked(int i){
        return layerCheckboxes[i]->isChecked();
    }
    void LayerDock::doMergeII(toolParameters_t *param){
        interactionTool->useTool(param);
        interactionTool->getPicture()->removeLayer(i+1);
        interactionTool->getPicture()->removeLayer(i);
        param = nullptr;
        updateLayerCount();
        emit update();
    }
    void LayerDock::updateVisible(){
        emit update();
    }