summaryrefslogtreecommitdiffstats
path: root/parts/classview/classtooldlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parts/classview/classtooldlg.cpp')
-rw-r--r--parts/classview/classtooldlg.cpp373
1 files changed, 373 insertions, 0 deletions
diff --git a/parts/classview/classtooldlg.cpp b/parts/classview/classtooldlg.cpp
new file mode 100644
index 00000000..91ed28fc
--- /dev/null
+++ b/parts/classview/classtooldlg.cpp
@@ -0,0 +1,373 @@
+/***************************************************************************
+ * Copyright (C) 1999 by Jonas Nordin *
+ * Copyright (C) 2000-2001 by Bernd Gehrmann *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "classtooldlg.h"
+
+#include <qlistbox.h>
+#include <qpushbutton.h>
+#include <qtooltip.h>
+#include <kdialog.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+#include "kdevlanguagesupport.h"
+#include "classstore.h"
+#include "parsedclass.h"
+#include "classviewpart.h"
+
+
+ClassToolDialog::ClassToolDialog( ClassViewPart *part )
+ : QWidget(0, "class tool dialog")
+{
+ currentOperation = ViewNone;
+ comboAccess = (PIAccess)-1;
+ currentClass = 0;
+ m_part = part;
+
+ class_combo = new QComboBox(false, this);
+
+ QPushButton *close_button = new KPushButton(KStdGuiItem::close(), this);
+
+ parents_button = new QToolButton(this);
+ parents_button->setPixmap( UserIcon("CTparents", KIcon::DefaultState, ClassViewFactory::instance()) );
+ parents_button->setToggleButton(true);
+ parents_button->setFixedSize(parents_button->sizeHint());
+ QToolTip::add(parents_button, i18n("Show parents"));
+
+ children_button = new QToolButton(this);
+ children_button->setPixmap( UserIcon("CTchildren", KIcon::DefaultState, ClassViewFactory::instance()) );
+ children_button->setToggleButton(true);
+ children_button->setFixedSize(children_button->sizeHint());
+ QToolTip::add(children_button, i18n("Show children"));
+
+ clients_button = new QToolButton(this);
+ clients_button->setPixmap( UserIcon("CTclients", KIcon::DefaultState, ClassViewFactory::instance()) );
+ clients_button->setToggleButton(true);
+ clients_button->setFixedSize(clients_button->sizeHint());
+ QToolTip::add(clients_button, i18n("Show clients"));
+
+ suppliers_button = new QToolButton(this);
+ suppliers_button->setPixmap( UserIcon("CTsuppliers", KIcon::DefaultState, ClassViewFactory::instance()) );
+ suppliers_button->setToggleButton(true);
+ suppliers_button->setFixedSize(suppliers_button->sizeHint());
+ QToolTip::add(suppliers_button, i18n("Show suppliers"));
+
+ methods_button = new QToolButton(this);
+ methods_button->setPixmap( UserIcon("CVpublic_meth", KIcon::DefaultState, ClassViewFactory::instance()) );
+ methods_button->setToggleButton(true);
+ methods_button->setFixedSize(methods_button->sizeHint());
+ QToolTip::add(methods_button, i18n("Show methods"));
+
+ attributes_button = new QToolButton(this);
+ attributes_button->setPixmap( UserIcon("CVpublic_var", KIcon::DefaultState, ClassViewFactory::instance()) );
+ attributes_button->setToggleButton(true);
+ attributes_button->setFixedSize(attributes_button->sizeHint());
+ QToolTip::add(attributes_button, i18n("Show attributes"));
+
+ access_combo = new QComboBox(false, this, "access combo");
+ access_combo->setMinimumWidth(100);
+ access_combo->setSizeLimit(10);
+ access_combo->insertItem(i18n("member access","All"));
+ access_combo->insertItem(i18n("member access","Public"));
+ access_combo->insertItem(i18n("member access","Protected"));
+ access_combo->insertItem(i18n("member access","Private"));
+ access_combo->insertItem(i18n("member access","Package"));
+
+ class_tree = new ClassToolWidget(part, this);
+ // classTree->setMinimumSize( 500, 400 );
+
+ QVBoxLayout *layout = new QVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
+ QHBoxLayout *firstrowLayout = new QHBoxLayout();
+ QHBoxLayout *secondrowLayout = new QHBoxLayout();
+ layout->addLayout(firstrowLayout);
+ layout->addLayout(secondrowLayout);
+
+ firstrowLayout->addWidget(class_combo, 1);
+ firstrowLayout->addWidget(close_button, 0);
+
+ secondrowLayout->addWidget(parents_button);
+ secondrowLayout->addWidget(children_button);
+ secondrowLayout->addWidget(clients_button);
+ secondrowLayout->addWidget(suppliers_button);
+ secondrowLayout->addStretch();
+ secondrowLayout->addWidget(methods_button);
+ secondrowLayout->addWidget(attributes_button);
+ secondrowLayout->addWidget(access_combo);
+
+ layout->addWidget(class_tree, 10);
+
+ connect( class_combo, SIGNAL(activated(const QString&)),
+ this, SLOT(slotClassComboChoice(const QString&)) );
+ connect( close_button, SIGNAL(clicked()),
+ this, SLOT(slotClose()) );
+ connect( access_combo, SIGNAL(activated(const QString&)),
+ this, SLOT(slotAccessComboChoice(const QString&)) );
+ connect( parents_button, SIGNAL(clicked()), SLOT(viewParents()));
+ connect( children_button, SIGNAL(clicked()), SLOT(viewChildren()));
+ connect( clients_button, SIGNAL(clicked()), SLOT(viewClients()));
+ connect( suppliers_button, SIGNAL(clicked()), SLOT(viewSuppliers()));
+ connect( methods_button, SIGNAL(clicked()), SLOT(viewMethods()));
+ connect( attributes_button, SIGNAL(clicked()), SLOT(viewAttributes()));
+
+ connect( part, SIGNAL(setLanguageSupport(KDevLanguageSupport*)),
+ this, SLOT(setLanguageSupport(KDevLanguageSupport*)) );
+
+ m_part->registerClassToolDialog(this);
+}
+
+
+ClassToolDialog::~ClassToolDialog()
+{
+ m_part->unregisterClassToolDialog(this);
+}
+
+
+void ClassToolDialog::setLanguageSupport(KDevLanguageSupport *ls)
+{
+ if (ls) {
+ disconnect(ls, 0, this, 0);
+ connect(ls, SIGNAL(updatedSourceInfo()), this, SLOT(refresh()));
+ } else
+ refresh();
+
+ currentOperation = ViewNone;
+}
+
+
+void ClassToolDialog::setClassName(const QString &name)
+{
+ if ( class_combo->count() == 0 ) refresh();
+
+ QListBox *lb = class_combo->listBox();
+
+ for (int i=0; i < (int)lb->count(); ++i)
+ if (lb->text(i) == name) {
+ class_combo->setCurrentItem(i);
+ break;
+ }
+
+ if (!name.isEmpty())
+ currentClass = m_part->classStore()->getClassByName(name);
+ else
+ currentClass = 0;
+}
+
+
+void ClassToolDialog::viewNone()
+{
+ currentOperation = ViewNone;
+ refresh();
+}
+
+
+/** View the parents of the current class. */
+void ClassToolDialog::viewParents()
+{
+ currentOperation = ViewParents;
+ refresh();
+}
+
+
+/** View the children of the current class. */
+void ClassToolDialog::viewChildren()
+{
+ currentOperation = ViewChildren;
+ refresh();
+}
+
+
+/** View all classes that has this class as an attribute. */
+void ClassToolDialog::viewClients()
+{
+ currentOperation = ViewClients;
+ refresh();
+}
+
+
+/** View all classes that this class has as attributes. */
+void ClassToolDialog::viewSuppliers()
+{
+ currentOperation = ViewSuppliers;
+ refresh();
+}
+
+
+/** View methods in this class and parents. */
+void ClassToolDialog::viewMethods()
+{
+ currentOperation = ViewMethods;
+ refresh();
+}
+
+
+/** View attributes in this class and parents. */
+void ClassToolDialog::viewAttributes()
+{
+ currentOperation = ViewAttributes;
+ refresh();
+}
+
+
+void ClassToolDialog::slotAccessComboChoice(const QString &str)
+{
+ if( str == i18n("member access","All") )
+ comboAccess = (PIAccess)-1;
+ else if( str == i18n("member access","Public") )
+ comboAccess = PIE_PUBLIC;
+ else if( str == i18n("member access","Protected") )
+ comboAccess = PIE_PROTECTED;
+ else if( str == i18n("member access","Private") )
+ comboAccess = PIE_PRIVATE;
+ else if( str == i18n("member access","Package") )
+ comboAccess = PIE_PACKAGE;
+
+ // Update the view if the choice affected the data.
+ if (currentOperation == ViewMethods || currentOperation == ViewAttributes)
+ buildTree();
+}
+
+
+void ClassToolDialog::slotClose()
+{
+ delete this;
+ // QTimer::singleShot(0, this, SLOT(delayedClose()));
+}
+
+
+void ClassToolDialog::delayedClose()
+{
+ delete this;
+}
+
+
+void ClassToolDialog::slotClassComboChoice(const QString &str)
+{
+ setClassName(str);
+ refresh();
+}
+
+
+void ClassToolDialog::refresh()
+{
+ // Clear the combo box and fill it with the new items.
+ // Try to select the previously selected class
+
+ QString oldName = class_combo->currentText();
+
+ class_combo->clear();
+ QStringList list = m_part->classStore()->getSortedClassNameList();
+ class_combo->insertStringList(list);
+ setClassName(oldName);
+
+ // Rebuild the tree and caption/button state
+ buildTree();
+}
+
+
+/** Change the caption depending on the current operation. */
+void ClassToolDialog::updateCaptionAndButtons()
+{
+ QString caption;
+ QToolButton *button;
+
+ switch (currentOperation)
+ {
+ case ViewParents:
+ button = parents_button;
+ caption = i18n("Parents");
+ break;
+ case ViewChildren:
+ button = children_button;
+ caption = i18n("Children");
+ break;
+ case ViewClients:
+ button = clients_button;
+ caption = i18n("Clients");
+ break;
+ case ViewSuppliers:
+ button = suppliers_button;
+ caption = i18n("Suppliers");
+ break;
+ case ViewMethods:
+ button = methods_button;
+ caption = i18n("%1 Methods").arg(access_combo->currentText());
+ break;
+ case ViewAttributes:
+ button = attributes_button;
+ caption = i18n("%1 Attributes").arg(access_combo->currentText());
+ break;
+ default:
+ button = 0;
+ caption = i18n("Class Tool Dialog");
+ break;
+ }
+
+ parents_button->setOn(false);
+ children_button->setOn(false);
+ clients_button->setOn(false);
+ suppliers_button->setOn(false);
+ methods_button->setOn(false);
+ attributes_button->setOn(false);
+
+ if (button) {
+ button->setOn(true);
+ setCaption(i18n("%1 of Class %2").arg(caption).arg(currentClass->name()));
+ } else
+ setCaption(caption);
+}
+
+
+void ClassToolDialog::buildTree()
+{
+ if (!currentClass)
+ currentOperation = ViewNone;
+
+ updateCaptionAndButtons();
+
+ class_tree->clear();
+
+ switch (currentOperation)
+ {
+ case ViewParents:
+ class_tree->insertClassAndClasses(currentClass, currentClass->parents);
+ break;
+ case ViewChildren:
+ {
+ QValueList<ParsedClass*> list = m_part->classStore()->getClassesByParent(currentClass->name());
+ class_tree->insertClassAndClasses(currentClass, list);
+ }
+ break;
+ case ViewClients:
+ {
+ QValueList<ParsedClass*> list = m_part->classStore()->getClassClients(currentClass->name());
+ class_tree->insertClassAndClasses(currentClass, list);
+ }
+ break;
+ case ViewSuppliers:
+ {
+ QValueList<ParsedClass*> list = m_part->classStore()->getClassSuppliers(currentClass->name());
+ class_tree->insertClassAndClasses(currentClass, list);
+ }
+ break;
+ case ViewMethods:
+ class_tree->insertAllClassMethods(currentClass, comboAccess);
+ break;
+ case ViewAttributes:
+ class_tree->insertAllClassAttributes(currentClass, comboAccess);
+ break;
+ default:
+ break;
+ }
+}
+
+#include "classtooldlg.moc"