File indexing completed on 2024-04-28 04:34:21

0001 /***************************************************************************
0002  *   Copyright 2009 Sandro Andrade <sandroandrade@kde.org>                 *
0003  *                                                                         *
0004  *   This program is free software; you can redistribute it and/or modify  *
0005  *   it under the terms of the GNU Library General Public License as       *
0006  *   published by the Free Software Foundation; either version 2 of the    *
0007  *   License, or (at your option) any later version.                       *
0008  *                                                                         *
0009  *   This program is distributed in the hope that it will be useful,       *
0010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0012  *   GNU General Public License for more details.                          *
0013  *                                                                         *
0014  *   You should have received a copy of the GNU Library General Public     *
0015  *   License along with this program; if not, write to the                 *
0016  *   Free Software Foundation, Inc.,                                       *
0017  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
0018  ***************************************************************************/
0019 
0020 #include "controlflowgraphfiledialog.h"
0021 
0022 #include <QRadioButton>
0023 
0024 #include <interfaces/icore.h>
0025 #include <interfaces/iprojectcontroller.h>
0026 
0027 #include "ui_controlflowgraphexportconfiguration.h"
0028 
0029 using namespace KDevelop;
0030 
0031 ControlFlowGraphFileDialog::ControlFlowGraphFileDialog(const KUrl& startDir, const QString& filter,
0032                                                        QWidget *parent, const QString & caption, OpeningMode mode)
0033 : KFileDialog(startDir, filter, parent), m_configurationWidget(0)
0034 {
0035     setCaption(caption);
0036     setOperationMode(KFileDialog::Saving);
0037     setConfirmOverwrite(true);
0038     setMode(KFile::File);
0039 
0040     if (mode != NoConfigurationButtons)
0041     {
0042         m_configurationWidget = new Ui::ControlFlowGraphExportConfiguration;
0043         QWidget *widget = new QWidget;
0044         m_configurationWidget->setupUi(widget);
0045 
0046         m_configurationWidget->controlFlowFunctionRadioButton->setIcon(KIcon("flag-blue"));
0047         m_configurationWidget->controlFlowClassRadioButton->setIcon(KIcon("flag-green"));
0048         m_configurationWidget->controlFlowNamespaceRadioButton->setIcon(KIcon("flag-red"));
0049         m_configurationWidget->clusteringClassCheckBox->setIcon(KIcon("code-class"));
0050         m_configurationWidget->clusteringNamespaceCheckBox->setIcon(KIcon("namespace"));
0051         m_configurationWidget->clusteringProjectCheckBox->setIcon(KIcon("folder-development"));
0052         m_configurationWidget->limitMaxLevelCheckBox->setIcon(KIcon("zoom-fit-height"));
0053         m_configurationWidget->drawIncomingArcsCheckBox->setIcon(KIcon("draw-arrow-down"));
0054         m_configurationWidget->useFolderNameCheckBox->setIcon(KIcon("folder-favorites"));
0055         m_configurationWidget->useShortNamesCheckBox->setIcon(KIcon("application-x-arc"));
0056 
0057         connect(m_configurationWidget->controlFlowFunctionRadioButton, SIGNAL(toggled(bool)), SLOT(setControlFlowMode(bool)));
0058         connect(m_configurationWidget->controlFlowClassRadioButton, SIGNAL(toggled(bool)), SLOT(setControlFlowMode(bool)));
0059         connect(m_configurationWidget->controlFlowNamespaceRadioButton, SIGNAL(toggled(bool)), SLOT(setControlFlowMode(bool)));
0060 
0061         connect(m_configurationWidget->clusteringClassCheckBox, SIGNAL(stateChanged(int)), SLOT(setClusteringModes(int)));
0062         connect(m_configurationWidget->clusteringNamespaceCheckBox, SIGNAL(stateChanged(int)), SLOT(setClusteringModes(int)));
0063         connect(m_configurationWidget->clusteringProjectCheckBox, SIGNAL(stateChanged(int)), SLOT(setClusteringModes(int)));
0064 
0065         connect(m_configurationWidget->limitMaxLevelCheckBox, SIGNAL(stateChanged(int)), SLOT(slotLimitMaxLevelChanged(int)));
0066 
0067         if (ICore::self()->projectController()->projectCount() > 0)
0068         {
0069             m_configurationWidget->clusteringProjectCheckBox->setEnabled(true);
0070             m_configurationWidget->useFolderNameCheckBox->setEnabled(true);
0071         }
0072 
0073         (dynamic_cast<QBoxLayout *>(mainWidget()->layout()))->insertWidget(1, widget);
0074     }
0075 }
0076 
0077 ControlFlowGraphFileDialog::~ControlFlowGraphFileDialog()
0078 {
0079     delete m_configurationWidget;
0080 }
0081 
0082 DUChainControlFlow::ControlFlowMode ControlFlowGraphFileDialog::controlFlowMode() const
0083 {
0084     return (m_configurationWidget->controlFlowFunctionRadioButton->isChecked() ?
0085             DUChainControlFlow::ControlFlowFunction :
0086             ((m_configurationWidget->controlFlowClassRadioButton->isChecked()) ?
0087                 DUChainControlFlow::ControlFlowClass : DUChainControlFlow::ControlFlowNamespace)
0088            );
0089 }
0090 
0091 DUChainControlFlow::ClusteringModes ControlFlowGraphFileDialog::clusteringModes() const
0092 {
0093     DUChainControlFlow::ClusteringModes clusteringModes;
0094 
0095     if (m_configurationWidget->clusteringClassCheckBox->isChecked())
0096         clusteringModes |= DUChainControlFlow::ClusteringClass;
0097     if (m_configurationWidget->clusteringNamespaceCheckBox->isChecked())
0098         clusteringModes |= DUChainControlFlow::ClusteringNamespace;
0099     if (m_configurationWidget->clusteringProjectCheckBox->isChecked())
0100         clusteringModes |= DUChainControlFlow::ClusteringProject;
0101 
0102     return clusteringModes;
0103 }
0104 
0105 int ControlFlowGraphFileDialog::maxLevel() const
0106 {
0107     if (m_configurationWidget->limitMaxLevelCheckBox->isChecked())
0108         return m_configurationWidget->maxLevelSpinBox->value();
0109     else
0110         return 0;
0111 }
0112 
0113 bool ControlFlowGraphFileDialog::useFolderName() const
0114 {
0115     return m_configurationWidget->useFolderNameCheckBox->isChecked();
0116 }
0117 
0118 bool ControlFlowGraphFileDialog::useShortNames() const
0119 {
0120     return m_configurationWidget->useShortNamesCheckBox->isChecked();
0121 }
0122 
0123 bool ControlFlowGraphFileDialog::drawIncomingArcs() const
0124 {
0125     return m_configurationWidget->drawIncomingArcsCheckBox->isChecked();
0126 }
0127 
0128 void ControlFlowGraphFileDialog::setControlFlowMode(bool checked)
0129 {
0130     if (checked)
0131     {
0132         QRadioButton *radioButton = qobject_cast<QRadioButton *>(sender());
0133         if (radioButton->objectName() == "controlFlowFunctionRadioButton")
0134         {
0135             m_configurationWidget->clusteringClassCheckBox->setEnabled(true);
0136             m_configurationWidget->clusteringNamespaceCheckBox->setEnabled(true);
0137         }
0138         if (radioButton->objectName() == "controlFlowClassRadioButton")
0139         {
0140             m_configurationWidget->clusteringClassCheckBox->setChecked(false);
0141             m_configurationWidget->clusteringClassCheckBox->setEnabled(false);
0142             m_configurationWidget->clusteringNamespaceCheckBox->setEnabled(true);
0143         }
0144         if (radioButton->objectName() == "controlFlowNamespaceRadioButton")
0145         {
0146             m_configurationWidget->clusteringClassCheckBox->setChecked(false);
0147             m_configurationWidget->clusteringClassCheckBox->setEnabled(false);
0148             m_configurationWidget->clusteringNamespaceCheckBox->setChecked(false);
0149             m_configurationWidget->clusteringNamespaceCheckBox->setEnabled(false);
0150         }
0151     }
0152 }
0153 
0154 void ControlFlowGraphFileDialog::setClusteringModes(int state)
0155 {
0156     Q_UNUSED(state);
0157     m_configurationWidget->useShortNamesCheckBox->setEnabled(m_configurationWidget->clusteringClassCheckBox->isChecked() ||
0158                                                              m_configurationWidget->clusteringNamespaceCheckBox->isChecked() ||
0159                                                              m_configurationWidget->clusteringProjectCheckBox->isChecked());
0160 }
0161 
0162 void ControlFlowGraphFileDialog::slotLimitMaxLevelChanged(int state)
0163 {
0164     m_configurationWidget->maxLevelSpinBox->setEnabled((state == Qt::Checked) ? true:false);
0165 }