File: environmentconfigurebutton.cpp

package info (click to toggle)
kdevelop 4%3A5.6.2-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 57,892 kB
  • sloc: cpp: 278,773; javascript: 3,558; python: 3,385; sh: 1,317; ansic: 689; xml: 273; php: 95; makefile: 40; lisp: 13; sed: 12
file content (108 lines) | stat: -rw-r--r-- 3,564 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*  This file is part of KDevelop

    Copyright 2010 Milian Wolff <mail@milianw.de>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

#include "environmentconfigurebutton.h"

#include <util/environmentselectionwidget.h>
#include "settings/environmentpreferences.h"

#include <QApplication>
#include <QDialog>
#include <QDialogButtonBox>
#include <QIcon>
#include <QVBoxLayout>

#include <util/scopeddialog.h>

#include <KLocalizedString>

namespace KDevelop {

class EnvironmentConfigureButtonPrivate
{
public:
    explicit EnvironmentConfigureButtonPrivate(EnvironmentConfigureButton* _q)
        : q(_q), selectionWidget(nullptr)
    {
    }

    void showDialog()
    {
        ScopedDialog<QDialog> dlg(qApp->activeWindow());
        QString selected;
        if (selectionWidget) {
            selected = selectionWidget->effectiveProfileName();
        }

        auto prefs = new EnvironmentPreferences(selected, q);

        // TODO: This should be implicit when constructing EnvironmentPreferences
        prefs->initConfigManager();
        prefs->reset();

        auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
                                     | QDialogButtonBox::Cancel);
        QObject::connect(buttonBox, &QDialogButtonBox::accepted, dlg.data(), &QDialog::accept);
        QObject::connect(buttonBox, &QDialogButtonBox::rejected, dlg.data(), &QDialog::reject);
        auto layout = new QVBoxLayout;
        layout->addWidget(prefs);
        layout->addWidget(buttonBox);
        dlg->setLayout(layout);
        dlg->setWindowTitle(prefs->fullName());
        dlg->setWindowIcon(prefs->icon());
        dlg->resize(800, 600);
        if (dlg->exec() == QDialog::Accepted) {
            prefs->apply();
            emit q->environmentConfigured();
        }
    }

    EnvironmentConfigureButton* const q;
    EnvironmentSelectionWidget *selectionWidget;
};

EnvironmentConfigureButton::EnvironmentConfigureButton(QWidget* parent)
    : QPushButton(parent),
      d_ptr(new EnvironmentConfigureButtonPrivate(this))
{
    setText(QString());
    setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    setIcon(QIcon::fromTheme(QStringLiteral("configure")));
    setToolTip(i18nc("@info:tooltip", "Configure environment variables"));

    connect(this, &EnvironmentConfigureButton::clicked,
            this, [this] { Q_D(EnvironmentConfigureButton); d->showDialog(); });
}

EnvironmentConfigureButton::~EnvironmentConfigureButton() = default;

void EnvironmentConfigureButton::setSelectionWidget(EnvironmentSelectionWidget* widget)
{
    Q_D(EnvironmentConfigureButton);

    connect(this, &EnvironmentConfigureButton::environmentConfigured,
            widget, &EnvironmentSelectionWidget::reconfigure);
    d->selectionWidget = widget;
}


}

#include "moc_environmentconfigurebutton.cpp"