summaryrefslogtreecommitdiffstats
path: root/parts/astyle/astyle_widget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parts/astyle/astyle_widget.cpp')
-rw-r--r--parts/astyle/astyle_widget.cpp346
1 files changed, 346 insertions, 0 deletions
diff --git a/parts/astyle/astyle_widget.cpp b/parts/astyle/astyle_widget.cpp
new file mode 100644
index 00000000..0622b91b
--- /dev/null
+++ b/parts/astyle/astyle_widget.cpp
@@ -0,0 +1,346 @@
+#include "astyle_part.h"
+#include "astyle_widget.h"
+
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+#include <qmultilineedit.h>
+#include <qbuttongroup.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kdevcore.h>
+
+
+AStyleWidget::AStyleWidget(AStylePart * part, bool global, QWidget *parent, const char *name)
+ : AStyleConfig(parent, name), m_part(part), isGlobalWidget(global)
+{
+ // which style changed - disable the other pages.
+ connect(StyleGroup, SIGNAL(clicked(int)), this, SLOT(styleChanged()));
+ connect(ConfigTabs, SIGNAL(currentChanged(QWidget*)), this, SLOT(styleChanged()) );
+
+ connect(FillingGroup, SIGNAL(clicked(int)), this, SLOT(styleChanged()));
+ connect(Fill_ForceTabs, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Fill_TabCount, SIGNAL(valueChanged(int)), this, SLOT(styleChanged()));
+ connect(Fill_SpaceCount, SIGNAL(valueChanged(int)), this, SLOT(styleChanged()));
+
+ connect(BracketGroup, SIGNAL(clicked(int)), this, SLOT(styleChanged()));
+ connect(Brackets_CloseHeaders, SIGNAL(clicked()), this, SLOT(styleChanged()));
+
+ connect(Indent_Switches, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Indent_Cases, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Indent_Classes, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Indent_Brackets, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Indent_Namespaces, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Indent_Labels, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Indent_Blocks, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Indent_Preprocessors, SIGNAL(clicked()), this, SLOT(styleChanged()));
+
+ connect(Continue_MaxStatement, SIGNAL(valueChanged(int)), this, SLOT(styleChanged()));
+ connect(Continue_MinConditional, SIGNAL(valueChanged(int)), this, SLOT(styleChanged()));
+
+ connect(Block_Break, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Block_BreakAll, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Block_IfElse, SIGNAL(clicked()), this, SLOT(styleChanged()));
+
+ connect(Pad_ParenthesesIn, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Pad_ParenthesesOut, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Pad_ParenthesesUn, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Pad_Operators, SIGNAL(clicked()), this, SLOT(styleChanged()));
+
+ connect(Keep_Statements, SIGNAL(clicked()), this, SLOT(styleChanged()));
+ connect(Keep_Blocks, SIGNAL(clicked()), this, SLOT(styleChanged()));
+
+
+ QMap<QString, QVariant> option;
+ if ( isGlobalWidget){
+ Style_Global->hide();
+ option = m_part->getGlobalOptions();
+ }
+ else{
+ Style_Global->show();
+ option = m_part->getProjectOptions();
+ }
+
+ // style
+ QString s = option["FStyle"].toString();
+ // fake the id so we disable the other pages.
+ int id=0;
+ if (s == "ANSI") id=1;
+ if (s == "KR") id=2;
+ if (s == "Linux") id=3;
+ if (s == "GNU") id=4;
+ if (s == "JAVA") id=5;
+ if (s == "GLOBAL") id = 6;
+ StyleGroup->setButton(id);
+
+ if ( isGlobalWidget ){
+ GeneralExtension->setText(m_part->getGlobalExtensions());
+ GeneralExtension->setEnabled(true);
+ globalOptions=true;
+ }
+ else{
+ if ( id == 6){
+ GeneralExtension->setText(m_part->getGlobalExtensions());
+ GeneralExtension->setEnabled(false);
+ globalOptions=true;
+ }
+ else{
+ GeneralExtension->setText(m_part->getProjectExtensions());
+ GeneralExtension->setEnabled(true);
+ globalOptions=false;
+ }
+ }
+
+ m_lastExt=GeneralExtension->text();
+
+ if (s == "UserDefined" || s =="GLOBAL" )
+ {
+ int wsCount = option["FillCount"].toInt();
+ if (option["Fill"].toString() == "Tabs")
+ {
+ Fill_Tabs->setChecked(true);
+ Fill_TabCount->setValue(wsCount);
+ Fill_TabCount->setEnabled(true);
+ Fill_ForceTabs->setChecked(option["FillForce"].toBool());
+ Fill_ForceTabs->setEnabled(true);
+ }
+ else
+ {
+ Fill_Spaces->setChecked(true);
+ Fill_SpaceCount->setValue(wsCount);
+ Fill_SpaceCount->setEnabled(true);
+ Fill_ConvertTabs->setChecked(option["FillForce"].toBool());
+ Fill_ConvertTabs->setEnabled(true);
+ }
+
+ Fill_EmptyLines->setChecked(option["FillEmptyLines"].toBool());
+
+ // indent
+ Indent_Switches->setChecked(option["IndentSwitches"].toBool());
+ Indent_Cases->setChecked(option["IndentCases"].toBool());
+ Indent_Classes->setChecked(option["IndentClasses"].toBool());
+ Indent_Brackets->setChecked(option["IndentBrackets"].toBool());
+ Indent_Namespaces->setChecked(option["IndentNamespaces"].toBool());
+ Indent_Labels->setChecked(option["IndentLabels"].toBool());
+ Indent_Blocks->setChecked(option["IndentBlocks"].toBool());
+ Indent_Preprocessors->setChecked(option["IndentPreprocessors"].toBool());
+
+ // contiuation
+ Continue_MaxStatement->setValue(option["MaxStatement"].toInt());
+ Continue_MinConditional->setValue(option["MinConditional"].toInt());
+
+ // brackets
+ s = option["Brackets"].toString();
+ if (s == "Break")
+ Brackets_Break->setChecked(true);
+ else if (s == "Attach")
+ Brackets_Attach->setChecked(true);
+ else if (s == "Linux")
+ Brackets_Linux->setChecked(true);
+ else
+ Brackets_None->setChecked(true);
+
+ Brackets_CloseHeaders->setChecked(option["BracketsCloseHeaders"].toBool());
+
+ Block_Break->setChecked(option["BlockBreak"].toBool());
+ Block_BreakAll->setChecked(option["BlockBreakAll"].toBool());
+ Block_IfElse->setChecked(option["BlockIfElse"].toBool());
+
+ // padding
+ Pad_ParenthesesIn->setChecked(option["PadParenthesesIn"].toBool());
+ Pad_ParenthesesOut->setChecked(option["PadParenthesesOut"].toBool());
+ Pad_ParenthesesUn->setChecked(option["PadParenthesesUn"].toBool());
+
+ Pad_Operators->setChecked(option["PadOperators"].toBool());
+
+ // oneliner
+ Keep_Statements->setChecked(option["KeepStatements"].toBool());
+ Keep_Blocks->setChecked(option["KeepBlocks"].toBool());
+ }
+
+
+ styleChanged();
+}
+
+
+AStyleWidget::~AStyleWidget()
+{
+}
+
+
+void AStyleWidget::accept()
+{
+ QMap<QString, QVariant>* m_option;
+ if ( isGlobalWidget){
+ m_option = &(m_part->getGlobalOptions());
+ m_part->setExtensions(GeneralExtension->text(),true);
+ }
+ else{
+ m_option = &(m_part->getProjectOptions());
+ m_part->setExtensions(GeneralExtension->text(),false);
+ }
+
+
+ // style
+ if (Style_ANSI->isChecked())
+ (*m_option)["FStyle"] = "ANSI";
+ else if (Style_KR->isChecked())
+ (*m_option)["FStyle"] = "KR";
+ else if (Style_Linux->isChecked())
+ (*m_option)["FStyle"] = "Linux";
+ else if (Style_GNU->isChecked())
+ (*m_option)["FStyle"] = "GNU";
+ else if (Style_JAVA->isChecked())
+ (*m_option)["FStyle"] = "JAVA";
+ else if (Style_Global->isChecked()){
+ QMap<QString,QVariant>& global = m_part->getGlobalOptions();
+ QMap<QString,QVariant>& project = m_part->getProjectOptions();
+ project=global;
+ project["FStyle"]="GLOBAL";
+ }
+ else if (Style_UserDefined->isChecked())
+ {
+ (*m_option)["FStyle"] = "UserDefined";
+
+ // fill
+ if (Fill_Tabs->isChecked())
+ {
+ (*m_option)["Fill"] = "Tabs";
+ (*m_option)["FillCount"] = Fill_TabCount->value();
+ (*m_option)["FillForce"] = Fill_ForceTabs->isChecked();
+ }
+ else
+ {
+ (*m_option)["Fill"] = "Spaces";
+ (*m_option)["FillCount"] = Fill_SpaceCount->value();
+ (*m_option)["FillForce"] = Fill_ConvertTabs->isChecked();
+ }
+
+ (*m_option)["FillEmptyLines"] = Fill_EmptyLines->isChecked();
+
+ // indent
+ (*m_option)["IndentSwitches"] = Indent_Switches->isChecked();
+ (*m_option)["IndentCases"] = Indent_Cases->isChecked();
+ (*m_option)["IndentClasses"] = Indent_Classes->isChecked();
+ (*m_option)["IndentBrackets"] = Indent_Brackets->isChecked();
+ (*m_option)["IndentNamespaces"] = Indent_Namespaces->isChecked();
+ (*m_option)["IndentLabels"] = Indent_Labels->isChecked();
+ (*m_option)["IndentBlocks"] = Indent_Blocks->isChecked();
+ (*m_option)["IndentPreprocessors"] = Indent_Preprocessors->isChecked();
+
+ // continuation
+ (*m_option)["MaxStatement"] = Continue_MaxStatement->value();
+ (*m_option)["MinConditional"] = Continue_MinConditional->value();
+
+ // brackets
+ if ( Brackets_None->isChecked())
+ (*m_option)["Brackets"] = "None";
+ else if (Brackets_Break->isChecked())
+ (*m_option)["Brackets"] = "Break";
+ else if (Brackets_Attach->isChecked())
+ (*m_option)["Brackets"] = "Attach";
+ else if (Brackets_Linux->isChecked())
+ (*m_option)["Brackets"] = "Linux";
+
+ (*m_option)["BracketsCloseHeaders"] = Brackets_CloseHeaders->isChecked();
+
+ // blocks
+ (*m_option)["BlockBreak"] = Block_Break->isChecked();
+ (*m_option)["BlockBreakAll"] = Block_BreakAll->isChecked();
+ (*m_option)["BlockIfElse"] = Block_IfElse->isChecked();
+
+ // padding
+ (*m_option)["PadParenthesesIn"] = Pad_ParenthesesIn->isChecked();
+ (*m_option)["PadParenthesesOut"] = Pad_ParenthesesOut->isChecked();
+ (*m_option)["PadParenthesesUn"] = Pad_ParenthesesUn->isChecked();
+
+ (*m_option)["PadOperators"] = Pad_Operators->isChecked();
+
+ // oneliner
+ (*m_option)["KeepStatements"] = Keep_Statements->isChecked();
+ (*m_option)["KeepBlocks"] = Keep_Blocks->isChecked();
+ }
+
+ if ( isGlobalWidget){
+ QMap<QString, QVariant>& project = m_part->getProjectOptions();
+ if ( project["FStyle"] == "GLOBAL"){
+ project = m_part->getGlobalOptions();
+ project["FStyle"] = "GLOBAL";
+ }
+ m_part->saveGlobal();
+ }
+
+// for ( QMap<QString, QVariant>::ConstIterator iter = m_option->begin();iter != m_option->end();iter++ )
+// {
+// kdDebug ( 9009 ) << "widget: " << iter.key() << "=" << iter.data() << endl;
+// }
+
+}
+
+/**
+ * Change the sample formatting text depending on what tab is selected.
+ *
+ * @param id Tab selected
+ */
+void AStyleWidget::styleChanged( )
+{
+ // disable the tabs for predefined sample
+ // only user define id==0, enables the other tabs
+ ConfigTabs->setTabEnabled(tab_2, Style_UserDefined->isChecked());
+ ConfigTabs->setTabEnabled(tab_3, Style_UserDefined->isChecked());
+ ConfigTabs->setTabEnabled(tab_4, Style_UserDefined->isChecked());
+
+ int id = ConfigTabs->currentPageIndex();
+
+ StyleExample->clear();
+
+ QString bracketSample = "namespace foospace {\n\tint Foo(){\n\tif (isBar)\n{\nbar(); \n\treturn 1; } else \nreturn 0;}}\n\nvoid test(){\n\tif (isFoo){\n\tbar();\n} else\n{\n\tbar();\n}\n}\n";
+
+ QString indentSample = "#define foobar(A)\\\n{Foo();Bar();}\n#define anotherFoo(B)\\\nreturn Bar()\n\nnamespace Bar\n{\nclass Foo\n{public:\nFoo();\nvirtual ~Foo();\n};\nswitch (foo)\n{\ncase 1:\na+=1;\nbreak;\ncase 2:\n{\na += 2;\n break;\n}\n}\nif (isFoo)\n{\nbar();\n}\nelse\n{\nanotherBar();\n}\nint foo()\n\twhile(isFoo)\n\t\t{\n\t\t\t...\n\t\t\tgoto error;\n\t\t....\n\t\terror:\n\t\t\t...\n\t\t}\n\t}\nfooArray[]={ red,\n\tgreen,\n\tdarkblue};\nfooFunction(barArg1,\n\tbarArg2,\n\tbarArg3);\n";
+
+ QString formattingSample = "void func(){\n\tif(isFoo(a,b))\n\tbar(a,b);\nif(isFoo)\n\ta=bar((b-c)*a,*d--);\nif( isFoo( a,b ) )\n\tbar(a, b);\nif (isFoo) {isFoo=false;cat << isFoo <<endl;}\nif(isFoo)DoBar();if (isFoo){\n\tbar();\n}\n\telse if(isBar()){\n\tannotherBar();\n}\n}\n";
+
+ QString styleSample = "\t//Tabs & Brackets\nnamespace foo{\n" + bracketSample + "}\n\t// Indentation\n" + indentSample + "\t// Formatting\n" + formattingSample;
+
+ switch(id){
+ case 1:
+ StyleExample->setText( m_part->formatSource( bracketSample, this,m_part->getProjectOptions() ) );
+ break;
+ case 2:
+ StyleExample->setText( m_part->formatSource( indentSample, this,m_part->getProjectOptions() ) );
+ break;
+ case 3:
+ StyleExample->setText( m_part->formatSource( formattingSample, this,m_part->getProjectOptions() ) );
+ break;
+ default:
+ {
+ if ( Style_Global->isChecked() ){
+ StyleExample->setText( m_part->formatSource( styleSample, 0, m_part->getGlobalOptions()) );
+ }
+ else
+ {
+ StyleExample->setText( m_part->formatSource( styleSample, this, m_part->getProjectOptions() ) );
+ }
+ }
+ }
+
+ if ( Style_Global->isChecked()){
+ if ( !globalOptions){
+ m_lastExt = GeneralExtension->text();
+ GeneralExtension->setEnabled ( false );
+ GeneralExtension->setText ( m_part->getGlobalExtensions() );
+ globalOptions=!globalOptions;
+ }
+ }
+ else{
+ if ( globalOptions){
+ GeneralExtension->setEnabled ( true );
+ GeneralExtension->setText ( m_lastExt );
+ globalOptions=!globalOptions;
+ }
+ }
+}
+
+#include "astyle_widget.moc"