From bd3b7ea36de5335f3e2d7b6746d0a57e6a75307b Mon Sep 17 00:00:00 2001
From: John Tapsell <johnflux@gmail.com>
Date: Fri, 18 Oct 2013 22:32:40 +0100
Subject: [PATCH] Merge the startEditMode() and endEditMode() functions into
 one, and remove code duplication

---
 src/ui/designer/QGCComboBox.cc           |  88 +++++++++----------------
 src/ui/designer/QGCComboBox.h            |   4 +-
 src/ui/designer/QGCCommandButton.cc      | 110 +++++++------------------------
 src/ui/designer/QGCCommandButton.h       |   4 +-
 src/ui/designer/QGCParamSlider.cc        | 109 +++++++++++++-----------------
 src/ui/designer/QGCParamSlider.h         |   4 +-
 src/ui/designer/QGCRadioChannelDisplay.h |   1 +
 src/ui/designer/QGCTextLabel.cc          |  64 +++---------------
 src/ui/designer/QGCTextLabel.h           |   3 +-
 src/ui/designer/QGCToolWidgetItem.cc     |  25 ++++++-
 src/ui/designer/QGCToolWidgetItem.h      |  14 ++--
 11 files changed, 153 insertions(+), 273 deletions(-)

diff --git a/src/ui/designer/QGCComboBox.cc b/src/ui/designer/QGCComboBox.cc
index c5ae6a4..1b8345b 100644
--- a/src/ui/designer/QGCComboBox.cc
+++ b/src/ui/designer/QGCComboBox.cc
@@ -167,70 +167,42 @@ void QGCComboBox::selectParameter(int paramIndex)
     }
 }
 
-void QGCComboBox::startEditMode()
+void QGCComboBox::setEditMode(bool editMode)
 {
-    ui->nameLabel->hide();
-    ui->writeButton->hide();
-    ui->readButton->hide();
-
-    ui->editInfoCheckBox->show();
-    ui->editDoneButton->show();
-    ui->editNameLabel->show();
-    ui->editRefreshParamsButton->show();
-    ui->editSelectParamComboBox->show();
-    ui->editSelectComponentComboBox->show();
-    ui->editStatusLabel->show();
-    ui->writeButton->hide();
-    ui->readButton->hide();
-    ui->editLine1->show();
-    ui->editLine2->show();
-    ui->editAddItemButton->show();
-    ui->editRemoveItemButton->show();
-    ui->editItemValueSpinBox->show();
-    ui->editItemNameLabel->show();
-    ui->itemValueLabel->show();
-    ui->itemNameLabel->show();
-    if (isDisabled)
-    {
-        ui->editOptionComboBox->setEnabled(true);
+    if(!editMode) {
+        // Store component id
+        selectComponent(ui->editSelectComponentComboBox->currentIndex());
+        // Store parameter name and id
+        selectParameter(ui->editSelectParamComboBox->currentIndex());
     }
-    isInEditMode = true;
-}
-
-void QGCComboBox::endEditMode()
-{
-    // Store component id
-    selectComponent(ui->editSelectComponentComboBox->currentIndex());
 
-    // Store parameter name and id
-    selectParameter(ui->editSelectParamComboBox->currentIndex());
-
-    // Min/max
-
-    ui->editInfoCheckBox->hide();
-    ui->editDoneButton->hide();
-    ui->editNameLabel->hide();
-    ui->editRefreshParamsButton->hide();
-    ui->editSelectParamComboBox->hide();
-    ui->editSelectComponentComboBox->hide();
-    ui->editStatusLabel->hide();
-    ui->editLine1->hide();
-    ui->editLine2->hide();
-    ui->writeButton->show();
-    ui->readButton->show();
-    ui->editAddItemButton->hide();
-    ui->editRemoveItemButton->hide();
-    ui->editItemValueSpinBox->hide();
-    ui->editItemNameLabel->hide();
-    ui->itemValueLabel->hide();
-    ui->itemNameLabel->hide();
-    ui->nameLabel->show();
+    ui->nameLabel->setVisible(!editMode);
+    ui->writeButton->setVisible(!editMode);
+    ui->readButton->setVisible(!editMode);
+
+    ui->editInfoCheckBox->setVisible(editMode);
+    ui->editDoneButton->setVisible(editMode);
+    ui->editNameLabel->setVisible(editMode);
+    ui->editRefreshParamsButton->setVisible(editMode);
+    ui->editSelectParamComboBox->setVisible(editMode);
+    ui->editSelectComponentComboBox->setVisible(editMode);
+    ui->editStatusLabel->setVisible(editMode);
+    ui->writeButton->setVisible(!editMode);
+    ui->readButton->setVisible(!editMode);
+    ui->editLine1->setVisible(editMode);
+    ui->editLine2->setVisible(editMode);
+    ui->editAddItemButton->setVisible(editMode);
+    ui->editRemoveItemButton->setVisible(editMode);
+    ui->editItemValueSpinBox->setVisible(editMode);
+    ui->editItemNameLabel->setVisible(editMode);
+    ui->itemValueLabel->setVisible(editMode);
+    ui->itemNameLabel->setVisible(editMode);
     if (isDisabled)
     {
-        ui->editOptionComboBox->setEnabled(false);
+        ui->editOptionComboBox->setEnabled(editMode);
     }
-    isInEditMode = false;
-    emit editingFinished();
+
+    QGCToolWidgetItem::setEditMode(editMode);
 }
 
 void QGCComboBox::setParamPending()
diff --git a/src/ui/designer/QGCComboBox.h b/src/ui/designer/QGCComboBox.h
index 9b4b9c6..c81a636 100644
--- a/src/ui/designer/QGCComboBox.h
+++ b/src/ui/designer/QGCComboBox.h
@@ -22,9 +22,9 @@ public:
     explicit QGCComboBox(QWidget *parent = 0);
     ~QGCComboBox();
 
+    virtual void setEditMode(bool editMode) override;
+
 public slots:
-    void startEditMode();
-    void endEditMode();
     /** @brief Queue parameter for sending to the MAV (add to pending list)*/
     void setParamPending();
     /** @brief Update the UI with the new parameter value */
diff --git a/src/ui/designer/QGCCommandButton.cc b/src/ui/designer/QGCCommandButton.cc
index 24bdc7d..69efc00 100644
--- a/src/ui/designer/QGCCommandButton.cc
+++ b/src/ui/designer/QGCCommandButton.cc
@@ -159,93 +159,33 @@ void QGCCommandButton::setCommandButtonName(QString text)
     ui->commandButton->setText(text);
 }
 
-void QGCCommandButton::startEditMode()
+void QGCCommandButton::setEditMode(bool editMode)
 {
     // Hide elements
-    ui->commandButton->hide();
-    ui->nameLabel->hide();
-
-    ui->editCommandComboBox->blockSignals(false);
-    ui->editCommandComboBox->show();
-    ui->editFinishButton->show();
-    ui->editNameLabel->show();
-    ui->editButtonName->show();
-    ui->editConfirmationCheckBox->show();
-    ui->editComponentSpinBox->show();
-    ui->editParamsVisibleCheckBox->show();
-    ui->editParam1SpinBox->show();
-    ui->editParam2SpinBox->show();
-    ui->editParam3SpinBox->show();
-    ui->editParam4SpinBox->show();
-    ui->editParam5SpinBox->show();
-    ui->editParam6SpinBox->show();
-    ui->editParam7SpinBox->show();
-    ui->editLine1->show();
-    ui->editLine2->show();
-
-    // Attempt to undock the dock widget
-    QWidget* p = this;
-    QDockWidget* dock;
-
-    do {
-        p = p->parentWidget();
-        dock = dynamic_cast<QDockWidget*>(p);
-
-        if (dock)
-        {
-            dock->setFloating(true);
-            break;
-        }
-    } while (p && !dock);
-
-    isInEditMode = true;
-}
-
-void QGCCommandButton::endEditMode()
-{
-    ui->editCommandComboBox->blockSignals(true);
-    ui->editCommandComboBox->hide();
-    ui->editFinishButton->hide();
-    ui->editNameLabel->hide();
-    ui->editButtonName->hide();
-    ui->editConfirmationCheckBox->hide();
-    ui->editComponentSpinBox->hide();
-    ui->editParamsVisibleCheckBox->hide();
-    ui->editLine1->hide();
-    ui->editLine2->hide();
-    if (!ui->editParamsVisibleCheckBox->isChecked())
-    {
-        ui->editParam1SpinBox->hide();
-        ui->editParam2SpinBox->hide();
-        ui->editParam3SpinBox->hide();
-        ui->editParam4SpinBox->hide();
-        ui->editParam5SpinBox->hide();
-        ui->editParam6SpinBox->hide();
-        ui->editParam7SpinBox->hide();
-    }
-
-    ui->commandButton->show();
-    ui->nameLabel->show();
-
-    // Write to settings
-    emit editingFinished();
-
-    // Attempt to dock the dock widget
-    QWidget* p = this;
-    QDockWidget* dock;
-
-    do {
-        p = p->parentWidget();
-        dock = dynamic_cast<QDockWidget*>(p);
-
-        if (dock)
-        {
-            dock->setFloating(false);
-            break;
-        }
-    } while (p && !dock);
-
-    isInEditMode = false;
+    ui->commandButton->setVisible(!editMode);
+    ui->nameLabel->setVisible(!editMode);
+
+    ui->editCommandComboBox->blockSignals(!editMode);
+    ui->editCommandComboBox->setVisible(editMode);
+    ui->editFinishButton->setVisible(editMode);
+    ui->editNameLabel->setVisible(editMode);
+    ui->editButtonName->setVisible(editMode);
+    ui->editConfirmationCheckBox->setVisible(editMode);
+    ui->editComponentSpinBox->setVisible(editMode);
+    ui->editParamsVisibleCheckBox->setVisible(editMode);
+    bool showParams = editMode || ui->editParamsVisibleCheckBox->isChecked();
+    ui->editParam1SpinBox->setVisible(showParams);
+    ui->editParam2SpinBox->setVisible(showParams);
+    ui->editParam3SpinBox->setVisible(showParams);
+    ui->editParam4SpinBox->setVisible(showParams);
+    ui->editParam5SpinBox->setVisible(showParams);
+    ui->editParam6SpinBox->setVisible(showParams);
+    ui->editParam7SpinBox->setVisible(showParams);
+
+    ui->editLine1->setVisible(editMode);
+    ui->editLine2->setVisible(editMode);
+
+    QGCToolWidgetItem::setEditMode(editMode);
 }
 
 void QGCCommandButton::writeSettings(QSettings& settings)
diff --git a/src/ui/designer/QGCCommandButton.h b/src/ui/designer/QGCCommandButton.h
index 320cc97..a1c858a 100644
--- a/src/ui/designer/QGCCommandButton.h
+++ b/src/ui/designer/QGCCommandButton.h
@@ -18,11 +18,11 @@ public:
     explicit QGCCommandButton(QWidget *parent = 0);
     ~QGCCommandButton();
 
+    virtual void setEditMode(bool editMode) override;
+
 public slots:
     void sendCommand();
     void setCommandButtonName(QString text);
-    void startEditMode();
-    void endEditMode();
     void writeSettings(QSettings& settings);
     void readSettings(const QSettings& settings);
     void readSettings(const QString& pre,const QVariantMap& settings);
diff --git a/src/ui/designer/QGCParamSlider.cc b/src/ui/designer/QGCParamSlider.cc
index 6331ac7..c5f2da5 100644
--- a/src/ui/designer/QGCParamSlider.cc
+++ b/src/ui/designer/QGCParamSlider.cc
@@ -207,74 +207,57 @@ void QGCParamSlider::selectParameter(int paramIndex)
     }
 }
 
-void QGCParamSlider::startEditMode()
+void QGCParamSlider::setEditMode(bool editMode)
 {
-    ui->valueSlider->hide();
-    ui->doubleValueSpinBox->hide();
-    ui->intValueSpinBox->hide();
-    ui->nameLabel->hide();
-    ui->writeButton->hide();
-    ui->readButton->hide();
-
-    ui->editInfoCheckBox->show();
-    ui->editDoneButton->show();
-    ui->editNameLabel->show();
-    ui->editRefreshParamsButton->show();
-    ui->editSelectParamComboBox->show();
-    ui->editSelectComponentComboBox->show();
-    ui->editStatusLabel->show();
-    ui->editMinSpinBox->show();
-    ui->editMaxSpinBox->show();
-    ui->writeButton->hide();
-    ui->readButton->hide();
-    ui->editLine1->show();
-    ui->editLine2->show();
-    isInEditMode = true;
-}
+    if(!editMode) {
+        // Store component id
+        selectComponent(ui->editSelectComponentComboBox->currentIndex());
 
-void QGCParamSlider::endEditMode()
-{
-    // Store component id
-    selectComponent(ui->editSelectComponentComboBox->currentIndex());
+        // Store parameter name and id
+        selectParameter(ui->editSelectParamComboBox->currentIndex());
 
-    // Store parameter name and id
-    selectParameter(ui->editSelectParamComboBox->currentIndex());
-
-    // Min/max
-    parameterMin = ui->editMinSpinBox->value();
-    parameterMax = ui->editMaxSpinBox->value();
+        // Min/max
+        parameterMin = ui->editMinSpinBox->value();
+        parameterMax = ui->editMaxSpinBox->value();
 
-    ui->editInfoCheckBox->hide();
-    ui->editDoneButton->hide();
-    ui->editNameLabel->hide();
-    ui->editRefreshParamsButton->hide();
-    ui->editSelectParamComboBox->hide();
-    ui->editSelectComponentComboBox->hide();
-    ui->editStatusLabel->hide();
-    ui->editMinSpinBox->hide();
-    ui->editMaxSpinBox->hide();
-    ui->editLine1->hide();
-    ui->editLine2->hide();
-    ui->writeButton->show();
-    ui->readButton->show();
-    ui->valueSlider->show();
-    switch ((int)parameterValue.type())
-    {
-    case QVariant::Char:
-    case QVariant::Int:
-    case QVariant::UInt:
-        ui->intValueSpinBox->show();
-        break;
-    case QMetaType::Float:
-        ui->doubleValueSpinBox->show();
-        break;
-    default:
-        qCritical() << "ERROR: NO VALID PARAM TYPE";
-        return;
+        switch ((int)parameterValue.type())
+        {
+        case QVariant::Char:
+        case QVariant::Int:
+        case QVariant::UInt:
+            ui->intValueSpinBox->show();
+            break;
+        case QMetaType::Float:
+            ui->doubleValueSpinBox->show();
+            break;
+        default:
+            qCritical() << "ERROR: NO VALID PARAM TYPE";
+            return;
+        }
+    } else {
+        ui->doubleValueSpinBox->hide();
+        ui->intValueSpinBox->hide();
     }
-    ui->nameLabel->show();
-    isInEditMode = false;
-    emit editingFinished();
+    ui->valueSlider->setVisible(!editMode);
+    ui->nameLabel->setVisible(!editMode);
+    ui->writeButton->setVisible(!editMode);
+    ui->readButton->setVisible(!editMode);
+
+    ui->editInfoCheckBox->setVisible(editMode);
+    ui->editDoneButton->setVisible(editMode);
+    ui->editNameLabel->setVisible(editMode);
+    ui->editRefreshParamsButton->setVisible(editMode);
+    ui->editSelectParamComboBox->setVisible(editMode);
+    ui->editSelectComponentComboBox->setVisible(editMode);
+    ui->editStatusLabel->setVisible(editMode);
+    ui->editMinSpinBox->setVisible(editMode);
+    ui->editMaxSpinBox->setVisible(editMode);
+    ui->writeButton->setVisible(!editMode);
+    ui->readButton->setVisible(!editMode);
+    ui->editLine1->setVisible(editMode);
+    ui->editLine2->setVisible(editMode);
+
+    QGCToolWidgetItem::setEditMode(editMode);
 }
 
 void QGCParamSlider::setParamPending()
diff --git a/src/ui/designer/QGCParamSlider.h b/src/ui/designer/QGCParamSlider.h
index 74df0db..b5b5862 100644
--- a/src/ui/designer/QGCParamSlider.h
+++ b/src/ui/designer/QGCParamSlider.h
@@ -20,9 +20,9 @@ public:
     explicit QGCParamSlider(QWidget *parent = 0);
     ~QGCParamSlider();
 
+    virtual void setEditMode(bool editMode) override;
+
 public slots:
-    void startEditMode();
-    void endEditMode();
     /** @brief Queue parameter for sending to the MAV (add to pending list)*/
     void setParamPending();
     /** @brief Set the slider value as parameter value */
diff --git a/src/ui/designer/QGCRadioChannelDisplay.h b/src/ui/designer/QGCRadioChannelDisplay.h
index 59bb654..2b90a94 100644
--- a/src/ui/designer/QGCRadioChannelDisplay.h
+++ b/src/ui/designer/QGCRadioChannelDisplay.h
@@ -20,6 +20,7 @@ public:
     int value() { return m_value; }
     int min() { return m_min; }
     int max() { return m_max; }
+
 protected:
     void paintEvent(QPaintEvent *event);
 private:
diff --git a/src/ui/designer/QGCTextLabel.cc b/src/ui/designer/QGCTextLabel.cc
index ceb645f..0a74c9d 100644
--- a/src/ui/designer/QGCTextLabel.cc
+++ b/src/ui/designer/QGCTextLabel.cc
@@ -31,61 +31,17 @@ QGCTextLabel::~QGCTextLabel()
     delete ui;
 }
 
-void QGCTextLabel::startEditMode()
+void QGCTextLabel::setEditMode(bool editMode)
 {
-    // Hide elements
-    ui->editFinishButton->show();
-    ui->editNameLabel->show();
-    ui->editLine1->show();
-    ui->editLine2->show();
-    ui->isMavCommand->show();
-
-    // Attempt to undock the dock widget
-    QWidget* p = this;
-    QDockWidget* dock;
-
-    do {
-        p = p->parentWidget();
-        dock = dynamic_cast<QDockWidget*>(p);
-
-        if (dock)
-        {
-            dock->setFloating(true);
-            break;
-        }
-    } while (p && !dock);
-
-    isInEditMode = true;
-}
-
-void QGCTextLabel::endEditMode()
-{
-    update_isMavCommand();
-    ui->editFinishButton->hide();
-    ui->editNameLabel->hide();
-    ui->editLine1->hide();
-    ui->editLine2->hide();
-    ui->isMavCommand->hide();
-
-    // Write to settings
-    emit editingFinished();
-
-    // Attempt to dock the dock widget
-    QWidget* p = this;
-    QDockWidget* dock;
-
-    do {
-        p = p->parentWidget();
-        dock = dynamic_cast<QDockWidget*>(p);
-
-        if (dock)
-        {
-            dock->setFloating(false);
-            break;
-        }
-    } while (p && !dock);
-
-    isInEditMode = false;
+    if(!editMode)
+        update_isMavCommand();
+    ui->editFinishButton->setVisible(editMode);
+    ui->editNameLabel->setVisible(editMode);
+    ui->editLine1->setVisible(editMode);
+    ui->editLine2->setVisible(editMode);
+    ui->isMavCommand->setVisible(editMode);
+
+    QGCToolWidgetItem::setEditMode(editMode);
 }
 
 void QGCTextLabel::writeSettings(QSettings& settings)
diff --git a/src/ui/designer/QGCTextLabel.h b/src/ui/designer/QGCTextLabel.h
index a1c1d1d..bc0a799 100644
--- a/src/ui/designer/QGCTextLabel.h
+++ b/src/ui/designer/QGCTextLabel.h
@@ -19,9 +19,8 @@ public:
     ~QGCTextLabel();
     void setActiveUAS(UASInterface *uas);
     void enableText(int num);
+    virtual void setEditMode(bool editMode) override;
 public slots:
-    void startEditMode();
-    void endEditMode();
     void writeSettings(QSettings& settings);
     void readSettings(const QSettings& settings);
     void readSettings(const QString& pre,const QVariantMap& settings);
diff --git a/src/ui/designer/QGCToolWidgetItem.cc b/src/ui/designer/QGCToolWidgetItem.cc
index d2a8c65..236ae6e 100644
--- a/src/ui/designer/QGCToolWidgetItem.cc
+++ b/src/ui/designer/QGCToolWidgetItem.cc
@@ -5,12 +5,13 @@
 
 #include "QGCToolWidget.h"
 #include "UASManager.h"
+#include <QDockWidget>
 
 QGCToolWidgetItem::QGCToolWidgetItem(const QString& name, QWidget *parent) :
     QWidget(parent),
+    uas(NULL),
     isInEditMode(false),
     qgcToolWidgetItemName(name),
-    uas(NULL),
     _component(-1)
 {
     startEditAction = new QAction(tr("Edit %1").arg(qgcToolWidgetItemName), this);
@@ -49,3 +50,25 @@ void QGCToolWidgetItem::setActiveUAS(UASInterface *uas)
 {
     this->uas = uas;
 }
+
+void QGCToolWidgetItem::setEditMode(bool editMode)
+{
+    isInEditMode = editMode;
+
+    // Attempt to undock the dock widget
+    QWidget* p = this;
+    QDockWidget* dock;
+
+    do {
+        p = p->parentWidget();
+        dock = dynamic_cast<QDockWidget*>(p);
+
+        if (dock)
+        {
+            dock->setFloating(editMode);
+            break;
+        }
+    } while (p && !dock);
+
+    emit editingFinished();
+}
diff --git a/src/ui/designer/QGCToolWidgetItem.h b/src/ui/designer/QGCToolWidgetItem.h
index ac09123..a3b9686 100644
--- a/src/ui/designer/QGCToolWidgetItem.h
+++ b/src/ui/designer/QGCToolWidgetItem.h
@@ -18,9 +18,12 @@ public:
         return _component;
     }
 
+    virtual void setEditMode(bool editMode);
+    bool isEditMode() const { return isInEditMode; }
 public slots:
-    virtual void startEditMode() {}
-    virtual void endEditMode() {}
+    void startEditMode() { setEditMode(true); }
+    void endEditMode() { setEditMode(false); }
+
     virtual void setComponent(int comp) {
         _component = comp;
     }
@@ -33,15 +36,18 @@ signals:
     void editingFinished();
 
 protected:
+    void contextMenuEvent (QContextMenuEvent* event);
+    UASInterface* uas;
+
+private:
     QAction* startEditAction;
     QAction* stopEditAction;
     QAction* deleteAction;
     bool isInEditMode;
     QString qgcToolWidgetItemName;
-    UASInterface* uas;
     int _component;          ///< The MAV component (the process or device ID)
 
-    void contextMenuEvent (QContextMenuEvent* event);
+
 
 };