Skip to content
Snippets Groups Projects
paint.cpp 4.57 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pelotrio's avatar
    Pelotrio committed
    #include <QPushButton>
    #include <QComboBox>
    #include <QLabel>
    #include <QColorDialog>
    #include <QGridLayout>
    #include <QCheckBox>
    #include <QDebug>
    #include "paint.h"
    #include "canvas.h"
    
    #include <iostream>
    
    /** c'tor */
    Paint::Paint(QWidget *parent)
            : QWidget(parent) {
        // instantiate Canvas and button
        viewport = new Canvas();
    
        btnClearCanvas = new QPushButton("&Clear Canvas");
    
        btnScene1 = new QPushButton("&Scene 1");
        btnScene2 = new QPushButton("&Scene 2");
        btnScene3 = new QPushButton("&Scene 3");
    
        cobPrimModes = new QComboBox();
        cobPrimModes->addItem(tr("None"), NONE);
        cobPrimModes->addItem(tr("Line"), LINE);
        cobPrimModes->addItem(tr("Freehand"), FREE_HAND);
        cobPrimModes->addItem(tr("Circle"), CIRCLE);
        cobPrimModes->addItem(tr("Rectangle"), RECTANGLE);
        //cobPrimModes->addItem(tr("Triangle"), TRIANGLE);
        //cobPrimModes->addItem(tr("Polygon"), POLYGON);
    
        cobTrafoModes = new QComboBox();
        cobTrafoModes->addItem(tr("Create"), CREATE);
        cobTrafoModes->addItem(tr("Paint"), PAINT);
        cobTrafoModes->addItem(tr("Move"), MOVE);
        //cobTrafoModes->addItem(tr("Scale"), SCALE);
        //cobTrafoModes->addItem(tr("Rotate"), ROTATE);
        cobTrafoModes->addItem(tr("Delete"), DELETE);
    
        lblPrimModes = new QLabel("Primitive Mode");
        lblPrimModes->setBuddy(cobPrimModes);
    
        btnDeleteObj = new QPushButton("&Delete Selected");
        btnDeleteObj->setDisabled(true);
        btnChangeCol = new QPushButton("C&hange Color");
    
        cbOutline = new QCheckBox("Show Only &Outline", this);
    
        // create layout and add gui elements to it
        QGridLayout *mainLayout = new QGridLayout;
    
        mainLayout->addWidget(viewport, 0, 0, 1, 4);
        mainLayout->addWidget(btnChangeCol, 1, 0);
        mainLayout->addWidget(cbOutline, 1, 1, Qt::AlignLeft);
        mainLayout->addWidget(lblPrimModes, 1, 2, Qt::AlignRight);
        mainLayout->addWidget(cobPrimModes, 1, 3);
        mainLayout->addWidget(cobTrafoModes, 2, 0);
        mainLayout->addWidget(btnScene1, 2, 1);
        mainLayout->addWidget(btnScene2, 2, 2);
        mainLayout->addWidget(btnClearCanvas, 2, 3);
    
        // add layout to this widget instance
        setLayout(mainLayout);
    
        // connect button click event to clear canvas handler
        connect(btnClearCanvas, SIGNAL(clicked()),
                this, SLOT(clearBtnPressed()));
        // connect button click event to delete selected object handler
        connect(btnDeleteObj, SIGNAL(clicked()),
                this, SLOT(deleteBtnPressed()));
        // connect button click event to color chooser handler
        connect(btnChangeCol, SIGNAL(clicked()),
                this, SLOT(colorBtnPressed()));
        // connect list view to primitive changed event handler
        connect(cobPrimModes, SIGNAL(activated(int)),
                this, SLOT(primModeChanged()));
    
        connect(cobTrafoModes, SIGNAL(activated(int)),
                this, SLOT(trafoModeChanged()));
        // connect checkbox to toggle outline event handler
        connect(cbOutline, SIGNAL(toggled(bool)),
                this, SLOT(showOutlineOnly(bool)));
    
        connect(btnScene1, SIGNAL(clicked()), this, SLOT(scene1Pressed()));
        connect(btnScene2, SIGNAL(clicked()), this, SLOT(scene2Pressed()));
    }
    
    /** d'tor */
    Paint::~Paint() {
    }
    
    /** method for handling button clicked event */
    void Paint::clearBtnPressed() {
        viewport->clearCanvas();
    
        // force redraw
        update();
        qDebug() << "Clear image called";
    }
    
    void Paint::deleteBtnPressed() {
        // Implementation requires inside test for all objects for selection
        qDebug() << "Next action: delete selected item (NYI)";
    }
    
    void Paint::colorBtnPressed() {
        QColor color = QColorDialog::getColor(Qt::yellow, this);
        if (color.isValid()) {
            qDebug() << "Color Choosen : " << color.name();
            viewport->s->setColour(color);
        }
    }
    
    void Paint::changeScene(int index) {
        viewport->s->changeCD(index);
        update();
    }
    
    void Paint::scene1Pressed() {
        changeScene(1);
        std::cout << "Changed Scene to Scene1.\n";
    }
    
    void Paint::scene2Pressed() {
        changeScene(2);
        std::cout << "Changed Scene to Scene2.\n";
    }
    
    
    void Paint::showOutlineOnly(bool outline) {
        qDebug() << "Only show outline: " << outline;
        viewport->s->setOutline(outline);
    }
    
    void Paint::primModeChanged() {
        int mode = cobPrimModes->itemData(
                cobPrimModes->currentIndex(), Qt::UserRole).toInt();
        viewport->s->setMode(mode);
        qDebug() << "Primitive Mode changed to " << mode;
    }
    
    void Paint::trafoModeChanged() {
        int mode = cobTrafoModes->itemData(
                cobTrafoModes->currentIndex(), Qt::UserRole).toInt();
        viewport->s->setDefaultTrafo(mode);
        qDebug() << "Trafo Mode changed to " << mode;
    }