summaryrefslogtreecommitdiffstats
path: root/quanta/dialogs/dtepeditdlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quanta/dialogs/dtepeditdlg.cpp')
-rw-r--r--quanta/dialogs/dtepeditdlg.cpp556
1 files changed, 556 insertions, 0 deletions
diff --git a/quanta/dialogs/dtepeditdlg.cpp b/quanta/dialogs/dtepeditdlg.cpp
new file mode 100644
index 00000000..c0bf4797
--- /dev/null
+++ b/quanta/dialogs/dtepeditdlg.cpp
@@ -0,0 +1,556 @@
+/***************************************************************************
+ dtepeditdlg.cpp - description
+ -------------------
+ begin : Tue Feb 1 11:07:24 2005
+ copyright : (C) 2005 Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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; version 2 of the License. *
+ * *
+ ***************************************************************************/
+
+#include <qcheckbox.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qgroupbox.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+#include <qwidgetstack.h>
+
+
+//kde includes
+#include <kcombobox.h>
+#include <kconfig.h>
+#include <kfiledialog.h>
+#include <kicondialog.h>
+#include <klistbox.h>
+#include <klineedit.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kstandarddirs.h>
+
+//own includes
+#include "dtepeditdlg.h"
+#include "dtepstructureeditdlgs.h"
+#include "dtds.h"
+#include "resource.h"
+#include "quantacommon.h"
+
+DTEPEditDlg::DTEPEditDlg(const QString& descriptionFile, QWidget *parent, const char *name)
+ : DTEPEditDlgS(parent, name)
+{
+ nameEdit->setFocus();
+ m_descriptionFile = descriptionFile;
+
+ m_config = new KConfig(m_descriptionFile, false, false);
+ init();
+
+}
+
+
+DTEPEditDlg::~DTEPEditDlg()
+{
+ delete m_config;
+}
+
+void DTEPEditDlg::slotFamilyChanged(int family)
+{
+ if (family == 0 && m_family != 0)
+ tabWidget->insertTab(m_pagesWidget, i18n("&Pages"), 1);
+ else
+ if (family == 1)
+ tabWidget->removePage(m_pagesWidget);
+ m_family = family;
+}
+
+void DTEPEditDlg::init()
+{
+ m_pagesWidget = tabWidget->page(1);
+ readGeneral();
+ if (m_family == 0)
+ readPages();
+ else
+ tabWidget->removePage(m_pagesWidget);
+ readParserRules();
+ readStructures();
+}
+
+void DTEPEditDlg::readGeneral()
+{
+ m_config->setGroup("General");
+ nameEdit->setText(m_config->readEntry("Name"));
+ nickNameEdit->setText(m_config->readEntry("NickName"));
+ m_family = m_config->readNumEntry("Family", 1) - 1;
+ extensionEdit->setText(m_config->readEntry("DefaultExtension"));
+ mimeTypeEdit->setText(m_config->readEntry("MimeTypes"));
+ typeCombo->setCurrentItem(m_family);
+ rulesWidgetStack->raiseWidget(m_family);
+ generalWidgetStack->raiseWidget(m_family);
+ caseSensitive->setChecked(m_config->readBoolEntry("CaseSensitive", false));
+ QString inherits = m_config->readEntry("Inherits");
+ QStringList lst(DTDs::ref()->nameList());
+ inheritsCombo->insertStringList(lst);
+ int idx = lst.findIndex(inherits);
+ if (idx == -1)
+ inheritsCombo->insertItem(inherits, 0);
+ else
+ inheritsCombo->setCurrentItem(idx);
+
+ urlEdit->setText(m_config->readEntry("URL"));
+ doctypeEdit->setText(m_config->readEntry("DoctypeString"));
+ topLevel->setChecked(m_config->readBoolEntry("TopLevel", false));
+
+ m_config->setGroup("Toolbars");
+ toolbarFolderEdit->setText(QuantaCommon::readPathEntry(m_config, "Location"));
+ toolbarsEdit->setText(m_config->readEntry("Names"));
+
+}
+
+void DTEPEditDlg::readPages()
+{
+ int i = 1;
+ while (m_config->hasGroup(QString("Page%1").arg(i)) && i < 6)
+ {
+ m_config->setGroup(QString("Page%1").arg(i));
+ QString title = m_config->readEntry("Title");
+ QString groups = m_config->readEntry("Groups");
+ if (i == 1)
+ {
+ enablePage1->setChecked(true);
+ pageTitleEdit1->setText(title);
+ groupsEdit1->setText(groups);
+ } else
+ if (i == 2)
+ {
+ enablePage2->setChecked(true);
+ pageTitleEdit2->setText(title);
+ groupsEdit2->setText(groups);
+ } else
+ if (i == 3)
+ {
+ enablePage3->setChecked(true);
+ pageTitleEdit3->setText(title);
+ groupsEdit3->setText(groups);
+ } else
+ if (i == 4)
+ {
+ enablePage4->setChecked(true);
+ pageTitleEdit4->setText(title);
+ groupsEdit4->setText(groups);
+ } else
+ if (i == 5)
+ {
+ enablePage5->setChecked(true);
+ pageTitleEdit5->setText(title);
+ groupsEdit5->setText(groups);
+ }
+ i++;
+ }
+}
+
+void DTEPEditDlg::readParserRules()
+{
+ m_config->setGroup("Extra rules");
+ enableMinusInWords->setChecked(m_config->readBoolEntry("MinusAllowedInWord", false));
+ attributeSeparatorEdit->setText(m_config->readEntry("AttributeSeparator"));
+ tagSeparatorEdit->setText(m_config->readEntry("TagSeparator"));
+ tagAfterEdit->setText(m_config->readEntry("TagAutoCompleteAfter"));
+
+ if (m_family == 0)
+ {
+ extendedBooleans->setChecked(m_config->readEntry("BooleanAttributes", "extended") == "extended");
+ trueEdit->setText(m_config->readEntry("BooleanTrue","true"));
+ falseEdit->setText(m_config->readEntry("BooleanFalse","false"));
+ xmlStyleTags->setChecked(m_config->readEntry("Single Tag Style", "xml").lower() == "xml");
+ } else
+ {
+ attributesAfterEdit->setText(m_config->readEntry("AttributeAutoCompleteAfter"));
+ membersAfterEdit->setText(m_config->readEntry("MemberAutoCompleteAfter"));
+ }
+
+ m_config->setGroup("Parsing rules");
+ commentsEdit->setText(m_config->readEntry("Comments"));
+ mayContainEdit->setText(m_config->readEntry("MayContain"));
+
+ if (m_family == 0)
+ {
+ specialAreasEdit->setText(m_config->readEntry("SpecialAreas"));
+ specialAreaNamesEdit->setText(m_config->readEntry("SpecialAreaNames"));
+ specialTagsEdit->setText(m_config->readEntry("SpecialTags"));
+ useCommonRules->setChecked(m_config->readBoolEntry("AppendCommonSpecialAreas", true));
+ } else
+ {
+ areaBordersEdit->setText(m_config->readEntry("AreaBorders"));
+ definitionTagsEdit->setText(m_config->readEntry("Tags"));
+ structKeywordsEdit->setText(m_config->readEntry("StructKeywords"));
+ localStructKeywordsEdit->setText(m_config->readEntry("LocalScopeKeywords"));
+ structBeginEdit->setText(m_config->readEntry("StructBeginStr"));
+ structEndEdit->setText(m_config->readEntry("StructEndStr"));
+ structRxEdit->setText(m_config->readEntry("StructRx"));
+ }
+
+}
+
+void DTEPEditDlg::saveResult()
+{
+ QString targetFile = m_descriptionFile;
+ QFileInfo f(targetFile);
+ if (!f.isWritable())
+ {
+ if (f.exists())
+ {
+ if (KMessageBox::questionYesNo(this, i18n("<qt>The file <b>%1</b> is not writable.<br>Do you want to save the configuration to a different file?</qt>").arg(f.filePath()),i18n("Save As"),i18n("Save to Different File"), i18n("Do Not Save")) == KMessageBox::Yes)
+ {
+ targetFile = KFileDialog::getSaveFileName(locateLocal("data", resourceDir + "dtep/description.rc"), i18n("*.rc|DTEP Description"), this, i18n("Save Description As"));
+ } else
+ targetFile = "";
+ }
+ }
+ if (!targetFile.isEmpty())
+ {
+ QFile f(targetFile);
+ if (f.exists())
+ f.remove();
+ KConfig* newConfig = m_config->copyTo(targetFile);
+ newConfig->sync();
+ writeGeneral(newConfig);
+ writePages(newConfig);
+ writeParserRules(newConfig);
+ writeStructures(newConfig);
+ newConfig->sync();
+ delete newConfig;
+ }
+}
+
+void DTEPEditDlg::writeGeneral(KConfig *config)
+{
+ config->setGroup("General");
+ writeEntry(config, "Name", nameEdit->text());
+ writeEntry(config, "NickName", nickNameEdit->text());
+ config->writeEntry("Family", typeCombo->currentItem() + 1);
+ config->writeEntry("CaseSensitive", caseSensitive->isChecked());
+ writeEntry(config, "Inherits", inheritsCombo->currentText());
+ writeEntry(config, "URL", urlEdit->text());
+ writeEntry(config, "DoctypeString", doctypeEdit->text());
+ writeEntry(config, "DefaultExtension", extensionEdit->text());
+ writeEntry(config, "MimeTypes", mimeTypeEdit->text());
+ if (m_family == 1)
+ config->writeEntry("TopLevel", topLevel->isChecked());
+
+ config->setGroup("Toolbars");
+ writeEntry(config, "Location", toolbarFolderEdit->text());
+ writeEntry(config, "Names", toolbarsEdit->text());
+}
+
+void DTEPEditDlg::writePages(KConfig *config)
+{
+ config->deleteGroup("Pages");
+ if (m_family == 0)
+ {
+ int num = 0;
+ if (enablePage1->isChecked())
+ {
+ num++;
+ config->setGroup(QString("Page%1").arg(num));
+ writeEntry(config, "Title", pageTitleEdit1->text());
+ writeEntry(config, "Groups", groupsEdit1->text());
+ }
+ if (enablePage2->isChecked())
+ {
+ num++;
+ config->setGroup(QString("Page%1").arg(num));
+ writeEntry(config, "Title", pageTitleEdit2->text());
+ writeEntry(config, "Groups", groupsEdit2->text());
+ }
+ if (enablePage3->isChecked())
+ {
+ num++;
+ config->setGroup(QString("Page%1").arg(num));
+ writeEntry(config, "Title", pageTitleEdit3->text());
+ writeEntry(config, "Groups", groupsEdit3->text());
+ }
+ if (enablePage4->isChecked())
+ {
+ num++;
+ config->setGroup(QString("Page%1").arg(num));
+ writeEntry(config, "Title", pageTitleEdit4->text());
+ writeEntry(config, "Groups", groupsEdit4->text());
+ }
+ if (enablePage5->isChecked())
+ {
+ num++;
+ config->setGroup(QString("Page%1").arg(num));
+ writeEntry(config, "Title", pageTitleEdit5->text());
+ writeEntry(config, "Groups", groupsEdit5->text());
+ }
+ config->setGroup("General");
+ config->writeEntry("NumOfPages", num);
+ }
+}
+
+void DTEPEditDlg::writeParserRules(KConfig *config)
+{
+ config->setGroup("Extra rules");
+ config->writeEntry("MinusAllowedInWord", enableMinusInWords->isChecked());
+ writeEntry(config, "AttributeSeparator", attributeSeparatorEdit->text());
+ writeEntry(config, "TagSeparator", tagSeparatorEdit->text());
+ writeEntry(config, "TagAutoCompleteAfter", tagAfterEdit->text());
+
+ if (m_family == 0)
+ {
+ writeEntry(config, "BooleanAttributes", extendedBooleans->isChecked() ? "extended" : "simple");
+ writeEntry(config, "BooleanTrue", trueEdit->text());
+ writeEntry(config, "BooleanFalse", falseEdit->text());
+ writeEntry(config, "Single Tag Style", xmlStyleTags->isChecked() ? "xml" : "html");
+ } else
+ {
+ writeEntry(config, "AttributeAutoCompleteAfter", attributesAfterEdit->text());
+ writeEntry(config, "MemberAutoCompleteAfter", membersAfterEdit->text());
+ }
+
+ config->setGroup("Parsing rules");
+ writeEntry(config, "Comments", commentsEdit->text());
+ writeEntry(config, "MayContain", mayContainEdit->text());
+
+ if (m_family == 0)
+ {
+ writeEntry(config, "SpecialAreas", specialAreasEdit->text());
+ writeEntry(config, "SpecialAreaNames", specialAreaNamesEdit->text());
+ writeEntry(config, "SpecialTags", specialTagsEdit->text());
+ config->writeEntry("AppendCommonSpecialAreas", useCommonRules->isChecked());
+ } else
+ {
+ writeEntry(config, "AreaBorders", areaBordersEdit->text());
+ writeEntry(config, "Tags", definitionTagsEdit->text());
+ writeEntry(config, "StructKeywords", structKeywordsEdit->text());
+ writeEntry(config, "LocalScopeKeywords", localStructKeywordsEdit->text());
+ writeEntry(config, "StructBeginStr", structBeginEdit->text());
+ writeEntry(config, "StructEndStr", structEndEdit->text());
+ writeEntry(config, "StructRx", structRxEdit->text());
+ }
+}
+
+void DTEPEditDlg::readStructures()
+{
+ m_config->setGroup("Extra rules");
+ int variableGroupId = m_config->readNumEntry("VariableGroupIndex", -1);
+ int functionGroupId = m_config->readNumEntry("FunctionGroupIndex", -1);
+ int classGroupId = m_config->readNumEntry("ClassGroupIndex", -1);
+ int objectGroupId = m_config->readNumEntry("ObjectGroupIndex", -1);
+
+ int i = 1;
+ while (m_config->hasGroup(QString("StructGroup_%1").arg(i)))
+ {
+ StructGroup group;
+ m_config->setGroup(QString("StructGroup_%1").arg(i));
+ group.name = m_config->readEntry("Name");
+ group.noName = m_config->readEntry("No_Name");
+ group.icon = m_config->readEntry("Icon");
+ group.tag = m_config->readEntry("Tag");
+ group.hasFileName = m_config->readBoolEntry("HasFileName", false);
+ group.fileNameRx = m_config->readEntry("FileNameRx");
+ group.appendToTags = m_config->readBoolEntry("AppendToTags", false);
+ group.parentGroup = m_config->readEntry("ParentGroup");
+ group.definitionRx = m_config->readEntry("DefinitionRx");
+ group.definitionRxMinimal = m_config->readBoolEntry("DefinitionRx_Minimal", false);
+ group.usageRx = m_config->readEntry("UsageRx");
+ group.typeRx = m_config->readEntry("TypeRx");
+ group.tagType = m_config->readEntry("TagType");
+ group.parseFile = m_config->readBoolEntry("ParseFile", false);
+ group.completeAfterRx = m_config->readEntry("AutoCompleteAfter");
+ group.removeRx = m_config->readEntry("RemoveFromAutoCompleteWord");
+ group.variableGroup = (variableGroupId == i);
+ group.functionGroup = (functionGroupId == i);
+ group.classGroup = (classGroupId == i);
+ group.objectGroup = (objectGroupId == i);
+ group.simpleGroup = (!group.variableGroup && !group.functionGroup && !group.classGroup && !group.objectGroup);
+
+ m_structGroups.append(group);
+ i++;
+ }
+ for (QValueList<StructGroup>::ConstIterator it = m_structGroups.constBegin(); it != m_structGroups.constEnd(); ++it)
+ {
+ structuresList->insertItem((*it).name);
+ }
+}
+
+void DTEPEditDlg::writeStructures(KConfig *config)
+{
+ config->setGroup("Extra rules");
+ config->writeEntry("StructGroupsCount", m_structGroups.count());
+
+ int i = 1;
+ for (QValueList<StructGroup>::ConstIterator it = m_structGroups.constBegin(); it != m_structGroups.constEnd(); ++it)
+ {
+ StructGroup group = *it;
+ config->setGroup(QString("StructGroup_%1").arg(i));
+ writeEntry(config, "Name", group.name);
+ writeEntry(config, "No_Name", group.noName);
+ writeEntry(config, "Icon", group.icon);
+ writeEntry(config, "Tag", group.tag);
+ config->writeEntry("HasFileName", group.hasFileName);
+ writeEntry(config, "FileNameRx", group.fileNameRx);
+ config->writeEntry("AppendToTags", group.appendToTags);
+ if (m_family == 1)
+ {
+ writeEntry(config, "ParentGroup", group.parentGroup);
+ writeEntry(config, "DefinitionRx", group.definitionRx);
+ config->writeEntry("DefinitionRx_Minimal", group.definitionRxMinimal);
+ writeEntry(config, "UsageRx", group.usageRx);
+ writeEntry(config, "TypeRx", group.typeRx);
+ writeEntry(config, "TagType", group.tagType);
+ config->writeEntry("ParseFile", group.parseFile);
+ writeEntry(config, "AutoCompleteAfter", group.completeAfterRx);
+ writeEntry(config, "RemoveFromAutoCompleteWord", group.removeRx);
+ if (group.variableGroup)
+ {
+ config->setGroup("Extra rules");
+ config->writeEntry("VariableGroupIndex", i);
+ } else
+ if (group.functionGroup)
+ {
+ config->setGroup("Extra rules");
+ config->writeEntry("FunctionGroupIndex", i);
+ } else
+ if (group.classGroup)
+ {
+ config->setGroup("Extra rules");
+ config->writeEntry("ClassGroupIndex", i);
+ } else
+ if (group.objectGroup)
+ {
+ config->setGroup("Extra rules");
+ config->writeEntry("ObjectGroupIndex", i);
+ }
+ }
+
+ i++;
+ }
+ for (QValueList<StructGroup>::ConstIterator it = m_structGroups.constBegin(); it != m_structGroups.constEnd(); ++it)
+ {
+ structuresList->insertItem((*it).name);
+ }
+}
+
+void DTEPEditDlg::slotEditStructGroup()
+{
+ int currentItem = structuresList->currentItem();
+ if (currentItem != -1)
+ {
+ KDialogBase editDlg(this, "edit_group", true, i18n("Edit Structure Group"), KDialogBase::Ok | KDialogBase::Cancel);
+ DTEPStructureEditDlgS structDlg(&editDlg);
+ editDlg.setMainWidget(&structDlg);
+
+ StructGroup group = m_structGroups[currentItem];
+ structDlg.nameEdit->setText(group.name);
+ structDlg.noNameEdit->setText(group.noName);
+ structDlg.iconButton->setIcon(group.icon);
+ structDlg.tagEdit->setText(group.tag);
+ structDlg.hasFilename->setChecked(group.hasFileName);
+ structDlg.fileNameRxEdit->setText(group.fileNameRx);
+ structDlg.appendToTags->setChecked(group.appendToTags);
+ structDlg.parentGroupEdit->setText(group.parentGroup);
+ for (int i = 0; i < structDlg.tagTypeCombo->count(); i++)
+ {
+ if (structDlg.tagTypeCombo->text(i) == group.tagType)
+ {
+ structDlg.tagTypeCombo->setCurrentItem(i);
+ break;
+ }
+ }
+
+ structDlg.definitionRxEdit->setText(group.definitionRx);
+ structDlg.definitionRxMinimal->setChecked(group.definitionRxMinimal);
+ structDlg.usageRxEdit->setText(group.usageRx);
+ structDlg.typeRxEdit->setText(group.typeRx);
+ structDlg.autoCompleteRxEdit->setText(group.completeAfterRx);
+ structDlg.removeRxEdit->setText(group.removeRx);
+ structDlg.parseFile->setChecked(group.parseFile);
+ structDlg.simpleGroup->setChecked(group.simpleGroup);
+ structDlg.variableGroup->setChecked(group.variableGroup);
+ structDlg.functionGroup->setChecked(group.functionGroup);
+ structDlg.classGroup->setChecked(group.classGroup);
+ structDlg.objectGroup->setChecked(group.objectGroup);
+
+ if (m_family == 0)
+ structDlg.pseudoGroupBox->setEnabled(false);
+
+ if (editDlg.exec())
+ {
+ StructGroup group = readFromStructDlg(&structDlg);
+ m_structGroups[currentItem] = group;
+ structuresList->removeItem(currentItem);
+ structuresList->insertItem(group.name, currentItem);
+ }
+ }
+}
+
+void DTEPEditDlg::slotAddStructGroup()
+{
+ KDialogBase editDlg(this, "edit_group", true, i18n("Add Structure Group"), KDialogBase::Ok | KDialogBase::Cancel);
+ DTEPStructureEditDlgS structDlg(&editDlg);
+ editDlg.setMainWidget(&structDlg);
+ if (editDlg.exec())
+ {
+ StructGroup group = readFromStructDlg(&structDlg);
+ m_structGroups.append(group);
+ structuresList->insertItem(group.name);
+ }
+}
+
+StructGroup DTEPEditDlg::readFromStructDlg(DTEPStructureEditDlgS *structDlg)
+{
+ StructGroup group;
+
+ group.name = structDlg->nameEdit->text();
+ group.noName = structDlg->noNameEdit->text();
+ group.icon = structDlg->iconButton->icon();
+ group.tag = structDlg->tagEdit->text();
+ group.hasFileName = structDlg->hasFilename->isChecked();
+ group.fileNameRx = structDlg->fileNameRxEdit->text();
+ group.appendToTags = structDlg->appendToTags->isChecked();
+ group.parentGroup = structDlg->parentGroupEdit->text();
+ group.tagType = structDlg->tagTypeCombo->currentText();
+ group.definitionRx = structDlg->definitionRxEdit->text();
+ group.definitionRxMinimal = structDlg->definitionRxMinimal->isChecked();
+ group.usageRx = structDlg->usageRxEdit->text();
+ group.typeRx = structDlg->typeRxEdit->text();
+ group.completeAfterRx = structDlg->autoCompleteRxEdit->text();
+ group.removeRx = structDlg->removeRxEdit->text();
+ group.parseFile = structDlg->parseFile->isChecked();
+ group.simpleGroup = structDlg->simpleGroup->isChecked();
+ group.variableGroup = structDlg->variableGroup->isChecked();
+ group.functionGroup = structDlg->functionGroup->isChecked();
+ group.classGroup = structDlg->classGroup->isChecked();
+ group.objectGroup = structDlg->objectGroup->isChecked();
+
+ return group;
+}
+
+void DTEPEditDlg::slotDeleteStructGroup()
+{
+ int currentItem = structuresList->currentItem();
+ if (currentItem != -1)
+ {
+ if (KMessageBox::warningContinueCancel(this, i18n("<qt>Do you really want to delete the <b>%1</b> group?</qt>").arg(structuresList->currentText()), i18n("Delete Group"),KStdGuiItem::del()) == KMessageBox::Continue)
+ {
+ m_structGroups.remove(m_structGroups.at(currentItem));
+ structuresList->removeItem(currentItem);
+ }
+ }
+}
+
+void DTEPEditDlg::writeEntry(KConfig *config, const QString &key, const QString &value)
+{
+ if (value.isEmpty())
+ config->deleteEntry(key);
+ else
+ config->writeEntry(key, value);
+}
+
+
+#include "dtepeditdlg.moc"