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 }