]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/branchpropeditor.cpp
New upstream version 2.9.22
[sven/vym.git] / src / branchpropeditor.cpp
diff --git a/src/branchpropeditor.cpp b/src/branchpropeditor.cpp
new file mode 100644 (file)
index 0000000..1a002d3
--- /dev/null
@@ -0,0 +1,477 @@
+#include "branchpropeditor.h"
+
+#include <QColorDialog>
+
+#include "attributeitem.h"
+#include "branchitem.h"
+#include "frameobj.h"
+#include "settings.h"
+#include "vymmodel.h"
+
+extern Settings settings;
+extern QString vymName;
+
+BranchPropertyEditor::BranchPropertyEditor(QWidget *parent)
+    : QDialog(parent) // FIXME-4 not updating when data is set elsewhere
+                      // (connect to dataCHanged)
+
+{
+    ui.setupUi(this);
+
+    setWindowTitle(vymName + " - " + tr("Property Editor", "Window caption"));
+
+    branchObj = NULL;
+    branchItem = NULL;
+    model = NULL;
+
+    ui.tabWidget->setEnabled(false);
+
+    penColor = QColor(Qt::black);
+    brushColor = QColor(Qt::black);
+    QPixmap pix(16, 16);
+    pix.fill(penColor);
+    ui.framePenColorButton->setIcon(pix);
+    ui.frameBrushColorButton->setIcon(pix);
+
+    if (!settings.value("/mainwindow/showTestMenu", false).toBool())
+        ui.tabWidget->widget(3)->hide();
+
+    //Create Model and View to hold attributes
+    attributeModel = new QStandardItemModel (1, 3, this);
+    attributeModel->setHeaderData(0, 
+            Qt::Horizontal, 
+            tr("Name","Branchprop window: Attribute name")); 
+    attributeModel->setHeaderData(1, 
+            Qt::Horizontal,
+            tr("Value","Branchprop window: Attribute value"));
+    attributeModel->setHeaderData(2, 
+            Qt::Horizontal, 
+            tr("Type","Branchprop window: Attribute type")); 
+    ui.attributeTableView->setModel (attributeModel);
+
+    // Load Settings
+    resize(
+        settings
+            .value("/satellite/propertywindow/geometry/size", QSize(450, 600))
+            .toSize());
+    move(settings
+             .value("/satellite/propertywindow/geometry/pos", QPoint(250, 50))
+             .toPoint());
+
+    if (settings.value("/satellite/propertywindow/showWithMain", true).toBool())
+        show();
+    else
+        hide();
+    
+    connectSignals();
+}
+
+BranchPropertyEditor::~BranchPropertyEditor()
+{
+    settings.setValue("/satellite/propertywindow/geometry/size", size());
+    settings.setValue("/satellite/propertywindow/geometry/pos", pos());
+    settings.setValue("/satellite/propertywindow/showWithMain", isVisible());
+
+    delete (attributeModel);
+}
+
+void BranchPropertyEditor::setItem(TreeItem *ti)
+{
+    disconnectSignals();
+    if (!ti)
+        ui.tabWidget->setEnabled(false);
+    else if (ti->isBranchLikeType()) {
+        branchItem = (BranchItem *)ti;
+
+        branchObj = (BranchObj *)(branchItem->getLMO());
+        if (branchObj) // FIXME-4 replace by branchItem later, when Frame is
+                       // ported...
+        {
+            ui.tabWidget->setEnabled(true);
+            for (int i = 0; i < 4; ++i)
+                ui.tabWidget->setTabEnabled(i, true);
+            ui.tabWidget->setTabEnabled(4, false);
+
+            // Frame
+            FrameObj::FrameType t = branchObj->getFrameType();
+            if (t == FrameObj::NoFrame) // FIXME-3 Check if all below depends on
+                                        // frame type???
+            {
+                ui.frameTypeCombo->setCurrentIndex(0);
+                penColor = Qt::white;
+                brushColor = Qt::white;
+                ui.colorGroupBox->setEnabled(false);
+                ui.framePaddingSpinBox->setEnabled(false);
+                ui.frameWidthSpinBox->setEnabled(false);
+                ui.framePaddingLabel->setEnabled(false);
+                ui.frameBorderLabel->setEnabled(false);
+                ui.includeChildrenCheckBox->setEnabled(false);
+                ui.includeChildrenCheckBox->setEnabled(false);
+            }
+            else {
+                penColor = branchObj->getFramePenColor();
+                brushColor = branchObj->getFrameBrushColor();
+                QPixmap pix(16, 16);
+                pix.fill(penColor);
+                ui.framePenColorButton->setIcon(pix);
+                pix.fill(brushColor);
+                ui.frameBrushColorButton->setIcon(pix);
+                ui.colorGroupBox->setEnabled(true);
+                ui.framePaddingSpinBox->setEnabled(true);
+                ui.framePaddingSpinBox->setValue(branchObj->getFramePadding());
+                ui.frameWidthSpinBox->setEnabled(true);
+                ui.frameWidthSpinBox->setValue(
+                    branchObj->getFrameBorderWidth());
+                ui.framePaddingLabel->setEnabled(true);
+                ui.frameBorderLabel->setEnabled(true);
+                ui.includeChildrenCheckBox->setEnabled(true);
+
+                switch (t) {
+                case FrameObj::Rectangle:
+                    ui.frameTypeCombo->setCurrentIndex(1);
+                    break;
+                case FrameObj::RoundedRectangle:
+                    ui.frameTypeCombo->setCurrentIndex(2);
+                    break;
+                case FrameObj::Ellipse:
+                    ui.frameTypeCombo->setCurrentIndex(3);
+                    break;
+                case FrameObj::Cloud:
+                    ui.frameTypeCombo->setCurrentIndex(4);
+                    break;
+                default:
+                    break;
+                }
+                if (branchItem->getFrameIncludeChildren())
+                    ui.includeChildrenCheckBox->setCheckState(Qt::Checked);
+                else
+                    ui.includeChildrenCheckBox->setCheckState(Qt::Unchecked);
+            }
+            // Link
+            if (branchItem->getHideLinkUnselected())
+                ui.hideLinkIfUnselected->setCheckState(Qt::Checked);
+            else
+                ui.hideLinkIfUnselected->setCheckState(Qt::Unchecked);
+
+            // Layout
+            if (branchItem->getIncludeImagesVer())
+                ui.incImgVer->setCheckState(Qt::Checked);
+            else
+                ui.incImgVer->setCheckState(Qt::Unchecked);
+            if (branchItem->getIncludeImagesHor())
+                ui.incImgHor->setCheckState(Qt::Checked);
+            else
+                ui.incImgHor->setCheckState(Qt::Unchecked);
+            if (branchItem->getChildrenLayout() == BranchItem::FreePositioning)
+                ui.childrenFreePositioning->setCheckState(Qt::Checked);
+            else
+                ui.childrenFreePositioning->setCheckState(Qt::Unchecked);
+
+            // Task
+            Task *task = branchItem->getTask();
+            if (task) {
+                ui.taskPrioDelta->setEnabled(true);
+                ui.taskPrioDelta->setValue(task->getPriorityDelta());
+                ui.lineEditDateCreation->setText(
+                    task->getDateCreation().toString() + " - " +
+                    QString(tr("%1 days ago", "task related times"))
+                        .arg(task->getAgeCreation()));
+                QDateTime dt = task->getDateModification();
+                if (dt.isValid()) {
+                    ui.lineEditDateModification->setText(
+                        dt.toString() + " - " +
+                        QString(tr("%1 days ago", "task related times"))
+                            .arg(task->getAgeModification()));
+                }
+                else {
+                    ui.lineEditDateModification->setText("");
+                }
+
+                dt = task->getSleep();
+                if (dt.isValid()) {
+                    QString s;
+                    qint64 daysSleep = task->getDaysSleep();
+                    daysSleep >= 0 ? s = QString(dt.toString() + " - " +
+                                                 tr("sleeping %1 days",
+                                                    "task related times"))
+                                             .arg(daysSleep)
+                                   : s = QString(tr("Task is awake",
+                                                    "task related times"));
+                    ui.lineEditSleep->setText(s);
+                }
+                else {
+                    ui.lineEditSleep->setText("");
+                }
+            }
+            else {
+                ui.taskPrioDelta->setEnabled(false);
+                ui.taskPrioDelta->setValue(0);
+                ui.lineEditDateCreation->setText("");
+                ui.lineEditDateModification->setText("");
+                ui.lineEditSleep->setText("");
+            }
+
+        // Attributes
+        attributeModel->removeRows(0, attributeModel->rowCount(), QModelIndex());
+
+        for (int i = 0; i < branchItem->attributeCount(); i++)
+        {
+            AttributeItem *ai = branchItem->getAttributeNum(i);
+            if (ai) {
+                attributeModel->insertRow (i, QModelIndex ());
+                attributeModel->setData(attributeModel->index(i, 0, QModelIndex()),
+                    ai->getKey());
+                attributeModel->setData(attributeModel->index(i, 1, QModelIndex()),
+                    ai->getValue().toString());
+                attributeModel->setData(attributeModel->index(i, 2, QModelIndex()),
+                    ai->getAttributeTypeString());
+            }
+        }
+
+        ui.attributeTableView->resizeColumnsToContents();
+
+        // Initialize Delegate
+        //attributeDelegate.setAttributeTable (mapEditor->attributeTable());
+        //ui.attributeTableView->setItemDelegate (&attributeDelegate);
+
+        } // BranchItem
+    }
+    else if (ti->getType() == TreeItem::Image) {
+        ui.tabWidget->setEnabled(true);
+        for (int i = 0; i < ui.tabWidget->count(); ++i)
+            ui.tabWidget->setTabEnabled(i, false);
+        ui.tabWidget->setTabEnabled(3, true);
+        ui.tabWidget->setCurrentIndex(3);
+    }
+    else if (ti->getType() == TreeItem::Attribute) {
+        ui.tabWidget->setEnabled(true);
+        for (int i = 0; i < 3; ++i)
+            ui.tabWidget->setTabEnabled(i, false);
+        ui.tabWidget->setTabEnabled(3, true);
+    }
+    else {
+        ui.tabWidget->setEnabled(false);
+    }
+    connectSignals();
+}
+
+void BranchPropertyEditor::setModel(VymModel *m)
+{
+    model = m;
+    if (model)
+        setItem(model->getSelectedItem());
+    else
+        ui.tabWidget->setEnabled(false);
+}
+
+void BranchPropertyEditor::frameTypeChanged(int i)
+{
+    if (model) {
+        switch (i) {
+        case 0:
+            model->setFrameType(FrameObj::NoFrame);
+            break;
+        case 1:
+            model->setFrameType(FrameObj::Rectangle);
+            break;
+        case 2:
+            model->setFrameType(FrameObj::RoundedRectangle);
+            break;
+        case 3:
+            model->setFrameType(FrameObj::Ellipse);
+            break;
+        case 4:
+            model->setFrameType(FrameObj::Cloud);
+            break;
+        }
+        setItem(branchItem);
+    }
+}
+
+void BranchPropertyEditor::framePenColorClicked()
+{
+    if (model) {
+        QColor col = QColorDialog::getColor(penColor, this);
+        if (col.isValid()) {
+            penColor = col;
+            model->setFramePenColor(penColor);
+        }
+    }
+}
+
+void BranchPropertyEditor::frameBrushColorClicked()
+{
+    if (model) {
+        QColor col = QColorDialog::getColor(brushColor, this);
+        if (col.isValid()) {
+            brushColor = col;
+            model->setFrameBrushColor(brushColor);
+        }
+    }
+}
+
+void BranchPropertyEditor::framePaddingChanged(int i)
+{
+    if (model)
+        model->setFramePadding(i);
+}
+
+void BranchPropertyEditor::frameBorderWidthChanged(int i)
+{
+    if (model)
+        model->setFrameBorderWidth(i);
+}
+
+void BranchPropertyEditor::frameIncludeChildrenChanged(int i)
+{
+    if (model)
+        model->setFrameIncludeChildren(i);
+}
+
+void BranchPropertyEditor::linkHideUnselectedChanged(int i)
+{
+    model->setHideLinkUnselected(i);
+}
+
+void BranchPropertyEditor::incImgVerChanged(int i)
+{
+    if (model)
+        model->setIncludeImagesVer(i);
+}
+
+void BranchPropertyEditor::incImgHorChanged(int i)
+{
+    if (model)
+        model->setIncludeImagesHor(i);
+}
+
+void BranchPropertyEditor::childrenFreePositioningChanged(int i)
+{
+    if (model) {
+        if (i > 0)
+            model->setChildrenLayout(BranchItem::FreePositioning);
+        else
+            model->setChildrenLayout(BranchItem::AutoPositioning);
+    }
+}
+
+void BranchPropertyEditor::taskPriorityDeltaChanged(int n)
+{
+    if (model)
+        model->setTaskPriorityDelta(n);
+}
+
+void BranchPropertyEditor::closeEvent(QCloseEvent *ce)
+{
+    ce->accept(); // can be reopened with show()
+    hide();
+    emit(windowClosed());
+    return;
+}
+
+void BranchPropertyEditor::addAttributeClicked()
+{
+    qDebug() << "BranchPropEditor::addAttribute";
+
+/*
+    // Add empty line for adding attributes
+    attributeModel->insertRow (attributeModel->rowCount (),QModelIndex ());
+    attributeModel->setData(attributeModel->index(attributeModel->rowCount()-1,
+0, QModelIndex()),  "Add new");
+    attributeModel->setData(attributeModel->index(attributeModel->rowCount()-1,
+2, QModelIndex()),  "Undefined");
+
+    // Select attribute from list
+    ui.attributeTableView->edit
+(attributeModel->index(attributeModel->rowCount()-1,0, QModelIndex() ));
+    ui.attributeTableView->resizeColumnsToContents();
+
+//  QString attname=attributeModel->in
+//  attributeModel->setData(attributeModel->index(attributeModel->rowCount()-1,
+2, QModelIndex()),  );
+
+
+
+    ui.attributeTableView->edit
+(attributeModel->index(attributeModel->rowCount()-1,1, QModelIndex() ));
+*/
+
+}
+
+void BranchPropertyEditor::deleteAttributeClicked()
+{
+    qDebug() << "BranchPropEditor::deleteAttribute";
+}
+
+void BranchPropertyEditor::connectSignals()
+{
+    // Frame
+    connect(ui.framePenColorButton, SIGNAL(clicked()), this,
+            SLOT(framePenColorClicked()));
+    connect(ui.framePaddingSpinBox, SIGNAL(valueChanged(int)), this,
+            SLOT(framePaddingChanged(int)));
+    connect(ui.frameWidthSpinBox, SIGNAL(valueChanged(int)), this,
+            SLOT(frameBorderWidthChanged(int)));
+    connect(ui.frameBrushColorButton, SIGNAL(clicked()), this,
+            SLOT(frameBrushColorClicked()));
+    connect(ui.frameTypeCombo, SIGNAL(currentIndexChanged(int)), this,
+            SLOT(frameTypeChanged(int)));
+    connect(ui.includeChildrenCheckBox, SIGNAL(stateChanged(int)), this,
+            SLOT(frameIncludeChildrenChanged(int)));
+
+    // Link
+    connect(ui.hideLinkIfUnselected, SIGNAL(stateChanged(int)), this,
+            SLOT(linkHideUnselectedChanged(int)));
+
+    // Layout
+    connect(ui.incImgVer, SIGNAL(stateChanged(int)), this,
+            SLOT(incImgVerChanged(int)));
+    connect(ui.incImgHor, SIGNAL(stateChanged(int)), this,
+            SLOT(incImgHorChanged(int)));
+    connect(ui.childrenFreePositioning, SIGNAL(stateChanged(int)), this,
+            SLOT(childrenFreePositioningChanged(int)));
+
+    // Tasks
+    connect(ui.taskPrioDelta, SIGNAL(valueChanged(int)), this,
+            SLOT(taskPriorityDeltaChanged(int)));
+
+    // Attributes
+    // For the time being hide above buttons, not used
+    /*
+    connect (
+        ui.addAttributeButton, SIGNAL (clicked()),
+        this, SLOT (addAttributeClicked()));
+    connect (
+        ui.deleteAttributeButton, SIGNAL (clicked()),
+        this, SLOT (deleteAttributeClicked()));
+
+    */
+    ui.addAttributeButton->hide();
+    ui.deleteAttributeButton->hide();
+}
+
+void BranchPropertyEditor::disconnectSignals()
+{
+    // Frame
+    disconnect(ui.framePenColorButton, 0, 0, 0);
+    disconnect(ui.framePaddingSpinBox, 0, 0, 0);
+    disconnect(ui.frameWidthSpinBox, 0, 0, 0);
+    disconnect(ui.frameBrushColorButton, 0, 0, 0);
+    disconnect(ui.frameTypeCombo, 0, 0, 0);
+    disconnect(ui.includeChildrenCheckBox, 0, 0, 0);
+
+    // Link
+    disconnect(ui.hideLinkIfUnselected, 0, 0, 0);
+
+    // Layout
+    disconnect(ui.incImgVer, 0, 0, 0);
+    disconnect(ui.incImgHor, 0, 0, 0);
+    disconnect(ui.childrenFreePositioning, 0, 0, 0);
+
+    // Task
+    disconnect(ui.taskPrioDelta, 0, 0, 0);
+
+    // Attributes
+    disconnect (ui.addAttributeButton, 0, 0, 0);
+    disconnect (ui.deleteAttributeButton, 0, 0, 0);
+}