diff --git a/src/plugins/projectexplorer/images/targetremovebutton.png b/src/plugins/projectexplorer/images/targetremovebutton.png new file mode 100644 index 0000000000000000000000000000000000000000..0c18dc1d806d17498460d75ec1198c33363393ff Binary files /dev/null and b/src/plugins/projectexplorer/images/targetremovebutton.png differ diff --git a/src/plugins/projectexplorer/projectexplorer.qrc b/src/plugins/projectexplorer/projectexplorer.qrc index ab7296d4de08a9baa5da5f260f56019e1d97313c..1ac214079e3ef5d59263bb20db784d0d38d47610 100644 --- a/src/plugins/projectexplorer/projectexplorer.qrc +++ b/src/plugins/projectexplorer/projectexplorer.qrc @@ -27,5 +27,6 @@ <file>images/leftselection.png</file> <file>images/rightselection.png</file> <file>images/midselection.png</file> + <file>images/targetremovebutton.png</file> </qresource> </RCC> diff --git a/src/plugins/projectexplorer/targetselector.cpp b/src/plugins/projectexplorer/targetselector.cpp index f58319929d0529bcf1cc173d0e80df61a4a2ab9a..43799e27e52acbf605e574616f122cd27f5f4e27 100644 --- a/src/plugins/projectexplorer/targetselector.cpp +++ b/src/plugins/projectexplorer/targetselector.cpp @@ -16,7 +16,10 @@ TargetSelector::TargetSelector(QWidget *parent) : m_runselected(QLatin1String(":/projectexplorer/images/targetrunselected.png")), m_buildselected(QLatin1String(":/projectexplorer/images/targetbuildselected.png")), m_targetaddbutton(QLatin1String(":/projectexplorer/images/targetaddbutton.png")), - m_currentTargetIndex(-1) + m_targetremovebutton(QLatin1String(":/projectexplorer/images/targetremovebutton.png")), + m_currentTargetIndex(-1), + m_addButtonEnabled(true), + m_removeButtonEnabled(false) { QFont f = font(); f.setPixelSize(10); @@ -67,6 +70,16 @@ void TargetSelector::setCurrentIndex(int index) m_currentTargetIndex >= 0 ? m_targets.at(m_currentTargetIndex).currentSubIndex : -1); } +void TargetSelector::setAddButtonEnabled(bool enabled) +{ + m_addButtonEnabled = enabled; +} + +void TargetSelector::setRemoveButtonEnabled(bool enabled) +{ + m_removeButtonEnabled = enabled; +} + void TargetSelector::setCurrentSubIndex(int subindex) { if (subindex < 0 || @@ -85,20 +98,35 @@ TargetSelector::Target TargetSelector::targetAt(int index) const return m_targets.at(index); } +bool TargetSelector::isAddButtonEnabled() const +{ + return m_addButtonEnabled; +} + +bool TargetSelector::isRemoveButtonEnabled() const +{ + return m_removeButtonEnabled; +} + QSize TargetSelector::minimumSizeHint() const { - return QSize((TARGET_WIDTH + 1) * m_targets.size() + ADDBUTTON_WIDTH + 2, TARGET_HEIGHT + 2); + return QSize((TARGET_WIDTH + 1) * m_targets.size() + (ADDBUTTON_WIDTH + 1) * 2 + 1, TARGET_HEIGHT + 2); } void TargetSelector::mousePressEvent(QMouseEvent *event) { - if (event->x() > (TARGET_WIDTH + 1) * m_targets.size()) { + if (event->x() < ADDBUTTON_WIDTH) { + event->accept(); + if (m_removeButtonEnabled) + emit removeButtonClicked(); + } else if (event->x() > ADDBUTTON_WIDTH + (TARGET_WIDTH + 1) * m_targets.size()) { // check for add button event->accept(); - emit addButtonClicked(); + if (m_addButtonEnabled) + emit addButtonClicked(); } else { // find the clicked target button - int x = 1; + int x = ADDBUTTON_WIDTH; int index; for (index = 0; index < m_targets.size(); ++index) { if (event->x() <= x) { @@ -143,6 +171,11 @@ void TargetSelector::paintEvent(QPaintEvent *event) int x = 1; int index = 0; QFontMetrics fm(font()); + p.drawPixmap(x, 1, m_targetremovebutton); + x += m_targetremovebutton.width(); + p.setPen(QColor(0, 0, 0)); + p.drawLine(x, 1, x, TARGET_HEIGHT); + x += 1; foreach (const Target &target, m_targets) { const QPixmap *pixmap = &m_unselected; if (index == m_currentTargetIndex) { diff --git a/src/plugins/projectexplorer/targetselector.h b/src/plugins/projectexplorer/targetselector.h index 824e6c1f56786e1fb34a4007e8ee979961dbd87d..84a1c0d4b30e21096711bd4432f1760fe5eb99ff 100644 --- a/src/plugins/projectexplorer/targetselector.h +++ b/src/plugins/projectexplorer/targetselector.h @@ -26,15 +26,21 @@ public: int currentIndex() const { return m_currentTargetIndex; } int currentSubIndex() const { return m_targets.at(m_currentTargetIndex).currentSubIndex; } + bool isAddButtonEnabled() const; + bool isRemoveButtonEnabled() const; + public slots: void addTarget(const QString &name); void markActive(int index); void removeTarget(int index); void setCurrentIndex(int index); void setCurrentSubIndex(int subindex); + void setAddButtonEnabled(bool enabled); + void setRemoveButtonEnabled(bool enabled); signals: void addButtonClicked(); + void removeButtonClicked(); void currentIndexChanged(int targetIndex, int subIndex); protected: @@ -46,10 +52,13 @@ private: const QPixmap m_runselected; const QPixmap m_buildselected; const QPixmap m_targetaddbutton; + const QPixmap m_targetremovebutton; QList<Target> m_targets; int m_currentTargetIndex; + bool m_addButtonEnabled; + bool m_removeButtonEnabled; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp index 6cc50afd3a7f79e9245d0cee3fdd4f37762d78a5..f38e26c57efaa0496109c9596f79edcb1157e06c 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.cpp +++ b/src/plugins/projectexplorer/targetsettingspanel.cpp @@ -130,7 +130,7 @@ TargetSettingsPanelWidget::TargetSettingsPanelWidget(Project *project) : connect(m_project, SIGNAL(addedTarget(ProjectExplorer::Target*)), this, SLOT(targetAdded(ProjectExplorer::Target*))); connect(m_project, SIGNAL(aboutToRemoveTarget(ProjectExplorer::Target*)), - this, SLOT(targetRemoved(ProjectExplorer::Target*))); + this, SLOT(aboutToRemoveTarget(ProjectExplorer::Target*))); connect(m_project, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)), this, SLOT(activeTargetChanged(ProjectExplorer::Target*))); } @@ -178,6 +178,8 @@ void TargetSettingsPanelWidget::setupUi() this, SLOT(currentTargetIndexChanged(int,int))); connect(m_selector, SIGNAL(addButtonClicked()), this, SLOT(addTarget())); + connect(m_selector, SIGNAL(removeButtonClicked()), + this, SLOT(removeTarget())); if (m_project->targets().count()) currentTargetIndexChanged(m_project->targets().indexOf(m_project->activeTarget()), 0); @@ -241,16 +243,25 @@ void TargetSettingsPanelWidget::addTarget() dialog.exec(); } +void TargetSettingsPanelWidget::removeTarget() +{ + int index = m_selector->currentIndex(); + Target *t = m_project->targets().at(index); + // TODO: Ask before removal? + m_project->removeTarget(t); +} + void TargetSettingsPanelWidget::targetAdded(ProjectExplorer::Target *target) { Q_ASSERT(m_project == target->project()); Q_ASSERT(m_selector); m_selector->addTarget(target->displayName()); - // TODO: Disable/enable add button. + m_selector->setAddButtonEnabled(m_project->possibleTargetIds().count() > 0); + m_selector->setRemoveButtonEnabled(m_project->targets().count() > 1); } -void TargetSettingsPanelWidget::targetRemoved(ProjectExplorer::Target *target) +void TargetSettingsPanelWidget::aboutToRemoveTarget(ProjectExplorer::Target *target) { Q_ASSERT(m_project == target->project()); Q_ASSERT(m_selector); @@ -259,7 +270,8 @@ void TargetSettingsPanelWidget::targetRemoved(ProjectExplorer::Target *target) if (index < 0) return; m_selector->removeTarget(index); - // TODO: Disable/enable add button. + m_selector->setAddButtonEnabled(m_project->possibleTargetIds().count() > 0); + m_selector->setRemoveButtonEnabled(m_project->targets().count() > 2); // target is not yet removed! } void TargetSettingsPanelWidget::activeTargetChanged(ProjectExplorer::Target *target) diff --git a/src/plugins/projectexplorer/targetsettingspanel.h b/src/plugins/projectexplorer/targetsettingspanel.h index 3eb7834b86b75da43a5c7503a0e930ba362605e7..3c801feef0d08d386794f3f78c1d0ec7e9343200 100644 --- a/src/plugins/projectexplorer/targetsettingspanel.h +++ b/src/plugins/projectexplorer/targetsettingspanel.h @@ -85,8 +85,9 @@ public: private slots: void currentTargetIndexChanged(int targetIndex, int subIndex); void addTarget(); + void removeTarget(); void targetAdded(ProjectExplorer::Target *target); - void targetRemoved(ProjectExplorer::Target *target); + void aboutToRemoveTarget(ProjectExplorer::Target *target); void activeTargetChanged(ProjectExplorer::Target *target); private: diff --git a/src/plugins/projectexplorer/targetsettingswidget.cpp b/src/plugins/projectexplorer/targetsettingswidget.cpp index eeafaf7b0c149a6ac66371e5d227c52a7f7351e7..9ae34358942ffb16b0160eb0302bebb8716c6de5 100644 --- a/src/plugins/projectexplorer/targetsettingswidget.cpp +++ b/src/plugins/projectexplorer/targetsettingswidget.cpp @@ -1,7 +1,7 @@ #include "targetsettingswidget.h" #include "ui_targetsettingswidget.h" -static int WIDTH = 750; +static int WIDTH = 900; using namespace ProjectExplorer::Internal; @@ -17,6 +17,8 @@ TargetSettingsWidget::TargetSettingsWidget(QWidget *parent) : m_targetSelector->raise(); connect(m_targetSelector, SIGNAL(addButtonClicked()), this, SIGNAL(addButtonClicked())); + connect(m_targetSelector, SIGNAL(removeButtonClicked()), + this, SIGNAL(removeButtonClicked())); connect(m_targetSelector, SIGNAL(currentIndexChanged(int,int)), this, SIGNAL(currentIndexChanged(int,int))); updateTargetSelector(); @@ -53,6 +55,16 @@ void TargetSettingsWidget::setCurrentSubIndex(int index) m_targetSelector->setCurrentSubIndex(index); } +void TargetSettingsWidget::setAddButtonEnabled(bool enabled) +{ + m_targetSelector->setAddButtonEnabled(enabled); +} + +void TargetSettingsWidget::setRemoveButtonEnabled(bool enabled) +{ + m_targetSelector->setRemoveButtonEnabled(enabled); +} + QString TargetSettingsWidget::targetNameAt(int index) const { return m_targetSelector->targetAt(index).name; @@ -78,6 +90,16 @@ int TargetSettingsWidget::currentSubIndex() const return m_targetSelector->currentSubIndex(); } +bool TargetSettingsWidget::isAddButtonEnabled() const +{ + return m_targetSelector->isAddButtonEnabled(); +} + +bool TargetSettingsWidget::isRemoveButtonEnabled() const +{ + return m_targetSelector->isRemoveButtonEnabled(); +} + void TargetSettingsWidget::updateTargetSelector() { m_targetSelector->setGeometry((WIDTH-m_targetSelector->minimumSizeHint().width())/2, 12, diff --git a/src/plugins/projectexplorer/targetsettingswidget.h b/src/plugins/projectexplorer/targetsettingswidget.h index af250dec47d9439799f95d47f075961944b1534d..ae1b1b2b0b652d684eaf82bb5bc4acf192bc2302 100644 --- a/src/plugins/projectexplorer/targetsettingswidget.h +++ b/src/plugins/projectexplorer/targetsettingswidget.h @@ -25,15 +25,21 @@ public: int currentIndex() const; int currentSubIndex() const; + bool isAddButtonEnabled() const; + bool isRemoveButtonEnabled() const; + public slots: void addTarget(const QString &name); void markActive(int index); void removeTarget(int index); void setCurrentIndex(int index); void setCurrentSubIndex(int index); + void setAddButtonEnabled(bool enabled); + void setRemoveButtonEnabled(bool enabled); signals: void addButtonClicked(); + void removeButtonClicked(); void currentIndexChanged(int targetIndex, int subIndex); protected: