summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichele Calgaro <[email protected]>2023-05-16 10:38:36 +0900
committerMichele Calgaro <[email protected]>2023-05-16 10:38:36 +0900
commitdfb1b9f10a0c18ace12de3323e3eea410efa3b6c (patch)
treec0ec1ada481c63bb428ae6a11a0f84383249cd26
parent5fa736197b0b111d7d1eb3d7622499375f3f17f9 (diff)
downloaduniversal-indent-gui-tqt-dfb1b9f10a0c18ace12de3323e3eea410efa3b6c.tar.gz
universal-indent-gui-tqt-dfb1b9f10a0c18ace12de3323e3eea410efa3b6c.zip
Added initial empty GUI for the indenter
Signed-off-by: Michele Calgaro <[email protected]>
-rw-r--r--icons/CMakeLists.txt5
-rwxr-xr-xicons/help.png (renamed from icons/__TODO/help.png)bin2231 -> 2231 bytes
-rwxr-xr-xicons/load_indent_cfg.png (renamed from icons/__TODO/load_indent_cfg.png)bin1673 -> 1673 bytes
-rwxr-xr-xicons/save_indent_cfg.png (renamed from icons/__TODO/save_indent_cfg.png)bin1666 -> 1666 bytes
-rwxr-xr-xicons/shell.png (renamed from icons/__TODO/shell.png)bin474 -> 474 bytes
-rwxr-xr-xicons/view-refresh.png (renamed from icons/__TODO/view-refresh.png)bin2024 -> 2024 bytes
-rw-r--r--src/CMakeLists.txt7
-rw-r--r--src/IndentHandler.cpp1741
-rw-r--r--src/IndentHandler.h180
-rw-r--r--src/MainWindow.cpp54
-rw-r--r--src/MainWindow.h12
-rwxr-xr-xsrc/MainWindowBase.ui65
-rw-r--r--src/SettingsPaths.cpp4
-rw-r--r--src/__TODO/IndentHandler.cpp2042
-rw-r--r--src/__TODO/IndentHandler.h195
-rwxr-xr-xsrc/__TODO/MainWindow.ui51
-rw-r--r--src/__TODO/TemplateBatchScript.cpp97
17 files changed, 2021 insertions, 2432 deletions
diff --git a/icons/CMakeLists.txt b/icons/CMakeLists.txt
index 90f4bf4..9e83cf4 100644
--- a/icons/CMakeLists.txt
+++ b/icons/CMakeLists.txt
@@ -8,9 +8,13 @@ install(
edit-clear.png
exporthtml.png
exportpdf.png
+ help.png
info.png
live-preview.png
+ load_indent_cfg.png
preferences-system.png
+ save_indent_cfg.png
+ shell.png
syntax-highlight.png
system-log-out.png
tooltip.png
@@ -19,5 +23,6 @@ install(
universalIndentGUI_32x32.xpm
universalIndentGUI_64x64.png
universalIndentGUI_512x512.png
+ view-refresh.png
DESTINATION ${SHARE_INSTALL_PREFIX}/universal-indent-gui-tqt/icons
)
diff --git a/icons/__TODO/help.png b/icons/help.png
index d60425f..d60425f 100755
--- a/icons/__TODO/help.png
+++ b/icons/help.png
Binary files differ
diff --git a/icons/__TODO/load_indent_cfg.png b/icons/load_indent_cfg.png
index b51c82d..b51c82d 100755
--- a/icons/__TODO/load_indent_cfg.png
+++ b/icons/load_indent_cfg.png
Binary files differ
diff --git a/icons/__TODO/save_indent_cfg.png b/icons/save_indent_cfg.png
index 2276121..2276121 100755
--- a/icons/__TODO/save_indent_cfg.png
+++ b/icons/save_indent_cfg.png
Binary files differ
diff --git a/icons/__TODO/shell.png b/icons/shell.png
index da59c67..da59c67 100755
--- a/icons/__TODO/shell.png
+++ b/icons/shell.png
Binary files differ
diff --git a/icons/__TODO/view-refresh.png b/icons/view-refresh.png
index 606ea9e..606ea9e 100755
--- a/icons/__TODO/view-refresh.png
+++ b/icons/view-refresh.png
Binary files differ
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 34b7dd8..cff46f3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -26,17 +26,18 @@ link_directories(
set( target universal-indent-gui-tqt )
set( ${target}_SRCS
- #completed
+ # completed
+ MainWindowBase.ui
ToolBarWidget.ui
SettingsPaths.cpp
UiGuiVersion.cpp
- #ongoing
+ # ongoing
AboutDialogBase.ui
- MainWindowBase.ui
AboutDialog.cpp
+ IndentHandler.cpp
MainWindow.cpp
main.cpp
UiGuiSettings.cpp
diff --git a/src/IndentHandler.cpp b/src/IndentHandler.cpp
new file mode 100644
index 0000000..76033dc
--- /dev/null
+++ b/src/IndentHandler.cpp
@@ -0,0 +1,1741 @@
+/***************************************************************************
+ * Copyright (C) 2006-2012 by Thomas Schweitzer *
+ * thomas-schweitzer(at)arcor.de *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License version 2.0 as *
+ * published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program in the file LICENSE.GPL; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "config.h"
+#include "IndentHandler.h"
+
+#include "MainWindow.h"
+#include "SettingsPaths.h"
+//--- #include "UiGuiSettings.h"
+//--- #include "UiGuiErrorMessage.h"
+//--- #include "TemplateBatchScript.h"
+//--- #include "UiGuiIniFileParser.h"
+
+#include <tqcombobox.h>
+#include <tqdir.h>
+#include <tqlayout.h>
+#include <tqpopupmenu.h>
+#include <tqtoolbox.h>
+#include <tqtoolbutton.h>
+//--- #include <tqapplication.h>
+//--- #include <tqcheckbox.h>
+//--- #include <tqfile.h>
+//--- #include <tqprocess.h>
+//--- #include <tqsettings.h>
+//--- #include <tqstringlist.h>
+//--- #include <tqlineedit.h>
+//--- #include <tqspinbox.h>
+//--- #include <tqlabel.h>
+//--- #include <tqbytearray.h>
+//--- #include <tqmessagebox.h>
+//--- #include <tqtextstream.h>
+//--- #include <tqtextcodec.h>
+//--- #include <tqtscript.h>
+//--- #include <tqdesktopservices.h>
+//--- #include <tqaction.h>
+//--- #include <tqcontextmenuevent.h>
+//--- #include <tqfiledialog.h>
+//--- #include <tqtdebug.h>
+
+// \defgroup grp_Indenter All concerning handling of the indenter.
+
+/*
+ \class IndentHandler
+ \brief A widget for handling many indenters that are configured by an ini file.
+
+ This is a widget that is used by the main window. It handles access to the
+ indenter config file and calls the chosen indenter to reformat the source text.
+ Calls the indenter each time a setting has been changed and informs
+ the main window about the reformatted source code.
+*/
+
+
+/*
+ \brief Constructor of the indent handler.
+
+ By calling this constructor the indenter to be loaded, can be selected by setting
+ its \a indenterID, which is the number of found indenter ini files in alphabetic
+ order starting at index 0.
+ */
+IndentHandler::IndentHandler(int indenterID, MainWindow *mainWindow, TQWidget *parent)
+ : TQWidget(parent), m_mainWindow(mainWindow), m_parent(parent), m_toolBoxContainerLayout(nullptr),
+ m_indenterSelectionCombobox(nullptr), m_indenterParameterHelpButton(nullptr),
+ m_indenterParameterCategoriesToolBox(nullptr)
+//--- _indenterSettings(nullptr), _errorMessageDialog(nullptr)
+{
+ if (indenterID < 0)
+ {
+ indenterID = 0;
+ }
+
+ // define this widgets resize behavior
+ setSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Expanding);
+
+ if (m_mainWindow)
+ {
+ connect((TQObject*)m_mainWindow->actionLoadIndenterConfigFile, SIGNAL(activated()),
+ this, SLOT(openConfigFileDialog()));
+ connect((TQObject*)m_mainWindow->actionSaveIndenterConfigFile, SIGNAL(activated()),
+ this, SLOT(saveasIndentCfgFileDialog()));
+ connect((TQObject*)m_mainWindow->actionCreateShellScript, SIGNAL(activated()),
+ this, SLOT(createIndenterCallShellScript()));
+ connect((TQObject*)m_mainWindow->actionResetIndenterParameters, SIGNAL(activated()),
+ this, SLOT(resetIndenterParameter()));
+ }
+
+ // create vertical layout box, into which the toolbox will be added
+ m_toolBoxContainerLayout = new TQVBoxLayout(this);
+ m_toolBoxContainerLayout->setMargin(2);
+ m_toolBoxContainerLayout->setSpacing(5);
+
+ // Create horizontal layout for indenter selector and help button.
+ TQHBoxLayout *hboxLayout = new TQHBoxLayout();
+ hboxLayout->setSpacing(5);
+ m_toolBoxContainerLayout->addLayout(hboxLayout);
+
+ // Create the indenter selection combo box.
+ m_indenterSelectionCombobox = new TQComboBox(this);
+ m_indenterSelectionCombobox->setSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::Minimum);
+ connect(m_indenterSelectionCombobox, SIGNAL(activated(int)), this, SLOT(setIndenter(int)));
+ hboxLayout->addWidget(m_indenterSelectionCombobox);
+
+ // Create the indenter parameter help button.
+ m_indenterParameterHelpButton = new TQToolButton(this);
+ m_indenterParameterHelpButton->setIconSet(TQPixmap(TQString(APP_ICONS_PATH)+ "help.png"));
+ connect(m_indenterParameterHelpButton, SIGNAL(clicked()), this, SLOT(showIndenterManual()));
+ hboxLayout->addWidget(m_indenterParameterHelpButton);
+
+ // create a toolbox and set its resize behavior
+ m_indenterParameterCategoriesToolBox = new TQToolBox(this);
+ m_indenterParameterCategoriesToolBox->setSizePolicy(TQSizePolicy::MinimumExpanding,
+ TQSizePolicy::Expanding);
+ m_toolBoxContainerLayout->addWidget(m_indenterParameterCategoriesToolBox);
+
+ m_indenterExecutableCallString = "";
+ m_indenterExecutableSuffix = "";
+
+ m_indenterDirectoryStr = SettingsPaths::getIndenterPath();
+ m_tempDirectoryStr = SettingsPaths::getTempPath();
+ m_settingsDirectoryStr = SettingsPaths::getSettingsPath();
+ TQDir indenterDirectory = TQDir(m_indenterDirectoryStr);
+
+//--- if (m_mainWindow != nullptr)
+//--- {
+//--- _errorMessageDialog = new UiGuiErrorMessage(m_mainWindow);
+//--- }
+//--- else
+//--- {
+//--- _errorMessageDialog = new UiGuiErrorMessage(this);
+//--- }
+
+//--- _indenterIniFileList = indenterDirectory.entryList(TQStringList("uigui_*.ini"));
+//--- if (_indenterIniFileList.count() > 0)
+//--- {
+//--- // Take care if the selected indenterID is smaller or greater than the number of existing
+//--- // indenters
+//--- if (indenterID < 0)
+//--- {
+//--- indenterID = 0;
+//--- }
+//--- if (indenterID >= _indenterIniFileList.count())
+//--- {
+//--- indenterID = _indenterIniFileList.count() - 1;
+//--- }
+//---
+//--- // Reads and parses the by indenterID defined indent ini file and creates toolbox entries
+//--- readIndentIniFile(m_indenterDirectoryStr + "/" + _indenterIniFileList.at(indenterID));
+//---
+//--- // Find out how the indenter can be executed.
+//--- createIndenterCallString();
+//---
+//--- // Load the users last settings made for this indenter.
+//--- loadConfigFile(m_settingsDirectoryStr + "/" + _indenterFileName + ".cfg");
+//---
+//--- // Fill the indenter selection combo box with the list of available indenters.
+//--- if (!getAvailableIndenters().isEmpty())
+//--- {
+//--- m_indenterSelectionCombobox->addItems(getAvailableIndenters());
+//--- m_indenterSelectionCombobox->setCurrentIndex(indenterID);
+//--- connect(m_indenterSelectionCombobox, SIGNAL(currentIndexChanged(int)), this,
+//--- SIGNAL(selectedIndenterIndexChanged(int)));
+//--- }
+//--- }
+//--- else
+//--- {
+//--- _errorMessageDialog->showMessage(tr("No indenter ini files"),
+//--- tr("There exists no indenter ini files in the directory \"") +
+//--- TQDir(m_indenterDirectoryStr).absolutePath() + "\".");
+//--- }
+}
+
+/*
+ \brief Implicitly writes the current indenter parameters to the indenters config file.
+ */
+IndentHandler::~IndentHandler()
+{
+//--- // Generate the parameter string that will be saved to the indenters config file.
+//--- TQString parameterString = getParameterString();
+//--- if (!_indenterFileName.isEmpty())
+//--- {
+//--- saveConfigFile(m_settingsDirectoryStr + "/" + _indenterFileName + ".cfg", parameterString);
+//--- }
+//---
+//--- delete _errorMessageDialog;
+}
+
+/*
+ \brief Opens the context menu, used for some actions like saving the indenter config file,
+ at the event position.
+ */
+void IndentHandler::contextMenuEvent(TQContextMenuEvent *event)
+{
+ if (m_mainWindow)
+ {
+ m_mainWindow->menuIndenter->exec(event->globalPos());
+ }
+}
+
+//--- /*
+//--- \brief Creates the content for a shell script that can be used as a external tool call
+//--- to indent an as parameter defined file.
+//--- */
+//--- TQString IndentHandler::generateShellScript(const TQString &configFilename)
+//--- {
+//--- TQString indenterCompleteCallString;
+//--- TQString parameterInputFile;
+//--- TQString parameterOuputFile;
+//--- TQString parameterParameterFile;
+//--- TQString replaceInputFileCommand;
+//---
+//--- // Define the placeholder for parameter variables either in batch or bash programming.
+//--- TQString shellParameterPlaceholder = "$1";
+//---
+//--- parameterInputFile = " " + _inputFileParameter + "\"" + shellParameterPlaceholder + "\"";
+//---
+//--- if (_outputFileParameter != "none" && _outputFileParameter != "stdout")
+//--- {
+//--- if (_outputFileName == _inputFileName)
+//--- {
+//--- parameterOuputFile = " " + _outputFileParameter + "\"" + shellParameterPlaceholder + "\"";
+//--- }
+//--- else
+//--- {
+//--- parameterOuputFile = " " + _outputFileParameter + _outputFileName + ".tmp";
+//--- }
+//--- }
+//---
+//--- // If the config file name is empty it is assumed that all parameters are sent via command line
+//--- // call
+//--- if (_globalConfigFilename.isEmpty())
+//--- {
+//--- parameterParameterFile = " " + getParameterString();
+//--- }
+//--- // else if needed add the parameter to the indenter call string where the config file can be
+//--- // found.
+//--- else if (_useCfgFileParameter != "none")
+//--- {
+//--- parameterParameterFile = " " + _useCfgFileParameter + "\"./" + configFilename + "\"";
+//--- }
+//---
+//--- // Assemble indenter call string for parameters according to the set order.
+//--- if (_parameterOrder == "ipo")
+//--- {
+//--- indenterCompleteCallString = parameterInputFile + parameterParameterFile + parameterOuputFile;
+//--- }
+//--- else if (_parameterOrder == "pio")
+//--- {
+//--- indenterCompleteCallString = parameterParameterFile + parameterInputFile + parameterOuputFile;
+//--- }
+//--- else if (_parameterOrder == "poi")
+//--- {
+//--- indenterCompleteCallString = parameterParameterFile + parameterOuputFile + parameterInputFile;
+//--- }
+//--- else
+//--- {
+//--- indenterCompleteCallString = parameterInputFile + parameterOuputFile + parameterParameterFile;
+//--- }
+//---
+//--- // Generate the indenter call string either for win32 or other systems.
+//--- indenterCompleteCallString = "#!/bin/bash\n" + m_indenterExecutableCallString +
+//--- indenterCompleteCallString;
+//---
+//--- // If the indenter writes to stdout pipe the output into a file
+//--- if (_outputFileParameter == "stdout")
+//--- {
+//--- indenterCompleteCallString = indenterCompleteCallString + " >" + _outputFileName + ".tmp";
+//--- }
+//---
+//--- // If the output filename is not the same as the input filename copy the output over the input.
+//--- if (_outputFileName != _inputFileName)
+//--- {
+//--- replaceInputFileCommand = "mv " + _outputFileName + ".tmp \"" + shellParameterPlaceholder +
+//--- "\"\n";
+//--- }
+//---
+//--- TQString shellScript(TemplateBatchScript::getTemplateBatchScript());
+//--- shellScript = shellScript.replace("__INDENTERCALLSTRING2__",
+//--- indenterCompleteCallString + "\n" + replaceInputFileCommand);
+//--- indenterCompleteCallString = indenterCompleteCallString.replace("$1", "$file2indent");
+//--- replaceInputFileCommand = replaceInputFileCommand.replace("$1", "$file2indent");
+//--- shellScript = shellScript.replace("__INDENTERCALLSTRING1__",
+//--- indenterCompleteCallString + "\n" + replaceInputFileCommand);
+//---
+//--- return shellScript;
+//--- }
+//---
+//--- /*
+//--- \brief Format \a sourceCode by calling the indenter.
+//---
+//--- The \a inputFileExtension has to be given as parameter so the called indenter
+//--- can identify the programming language if needed.
+//--- */
+//--- TQString IndentHandler::callIndenter(TQString sourceCode, TQString inputFileExtension)
+//--- {
+//--- if (m_indenterExecutableSuffix == ".js")
+//--- {
+//--- return callJavaScriptIndenter(sourceCode);
+//--- }
+//--- else
+//--- {
+//--- return callExecutableIndenter(sourceCode, inputFileExtension);
+//--- }
+//--- }
+//---
+//--- /*
+//--- \brief Format \a sourceCode by calling the interpreted JavaScript code of the indenter.
+//---
+//--- The \a inputFileExtension has to be given as parameter so the called indenter
+//--- can identify the programming language if needed.
+//--- */
+//--- TQString IndentHandler::callJavaScriptIndenter(TQString sourceCode)
+//--- {
+//--- TQScriptEngine engine;
+//---
+//--- engine.globalObject().setProperty("unformattedCode", sourceCode);
+//---
+//--- TQFile jsDecoderFile(m_indenterExecutableCallString);
+//--- TQString jsDecoderCode;
+//--- if (jsDecoderFile.open(TQFile::ReadOnly))
+//--- {
+//--- jsDecoderCode = jsDecoderFile.readAll();
+//--- }
+//--- jsDecoderFile.close();
+//---
+//--- TQScriptValue value = engine.evaluate(jsDecoderCode);
+//--- return value.toString();
+//--- }
+//---
+//--- /*
+//--- \brief Format \a sourceCode by calling the binary executable of the indenter.
+//---
+//--- The \a inputFileExtension has to be given as parameter so the called indenter
+//--- can identify the programming language if needed.
+//--- */
+//--- TQString IndentHandler::callExecutableIndenter(TQString sourceCode, TQString inputFileExtension)
+//--- {
+//--- Q_ASSERT_X(!_inputFileName.isEmpty(), "callIndenter", "_inputFileName is empty");
+//--- // Q_ASSERT_X( !_outputFileName.isEmpty(), "callIndenter", "_outputFileName is empty" );
+//--- Q_ASSERT_X(!_indenterFileName.isEmpty(), "callIndenter", "_indenterFileName is empty");
+//---
+//--- if (_indenterFileName.isEmpty())
+//--- {
+//--- return "";
+//--- }
+//---
+//--- TQString formattedSourceCode;
+//--- TQString indenterCompleteCallString;
+//--- TQString parameterInputFile;
+//--- TQString parameterOuputFile;
+//--- TQString parameterParameterFile;
+//--- TQProcess indentProcess;
+//--- TQString processReturnString;
+//---
+//--- // Generate the parameter string that will be saved to the indenters config file
+//--- TQString parameterString = getParameterString();
+//---
+//--- if (!_globalConfigFilename.isEmpty())
+//--- {
+//--- saveConfigFile(m_tempDirectoryStr + "/" + _globalConfigFilename, parameterString);
+//--- }
+//---
+//--- // Only add a dot to file extension if the string is not empty
+//--- if (!inputFileExtension.isEmpty())
+//--- {
+//--- inputFileExtension = "." + inputFileExtension;
+//--- }
+//---
+//--- // Delete any previously used input src file and create a new input src file.
+//--- TQFile::remove(m_tempDirectoryStr + "/" + _inputFileName + inputFileExtension);
+//--- TQFile inputSrcFile(m_tempDirectoryStr + "/" + _inputFileName + inputFileExtension);
+//--- // Write the source code to the input file for the indenter
+//--- if (inputSrcFile.open(TQFile::ReadWrite | TQFile::Text))
+//--- {
+//--- inputSrcFile.write(sourceCode.toUtf8());
+//--- inputSrcFile.close();
+//--- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Wrote to be indented source code to file " <<
+//--- inputSrcFile.fileName();
+//--- }
+//--- else
+//--- {
+//--- qCritical() << __LINE__ << " " << __FUNCTION__ <<
+//--- ": Couldn't write to be indented source code to file " << inputSrcFile.fileName();
+//--- }
+//---
+//--- // Set the input file for the to be called indenter.
+//--- if (_inputFileParameter.trimmed() == "<" || _inputFileParameter == "stdin")
+//--- {
+//--- parameterInputFile = "";
+//--- indentProcess.setStandardInputFile(inputSrcFile.fileName());
+//--- }
+//--- else
+//--- {
+//--- parameterInputFile = " " + _inputFileParameter + _inputFileName + inputFileExtension;
+//--- }
+//---
+//--- // Set the output file for the to be called indenter.
+//--- if (_outputFileParameter != "none" && _outputFileParameter != "stdout")
+//--- {
+//--- parameterOuputFile = " " + _outputFileParameter + _outputFileName + inputFileExtension;
+//--- }
+//---
+//--- // If the config file name is empty it is assumed that all parameters are sent via command line
+//--- // call
+//--- if (_globalConfigFilename.isEmpty())
+//--- {
+//--- parameterParameterFile = " " + parameterString;
+//--- }
+//--- // if needed add the parameter to the indenter call string where the config file can be found
+//--- else if (_useCfgFileParameter != "none")
+//--- {
+//--- parameterParameterFile = " " + _useCfgFileParameter + "\"" + m_tempDirectoryStr + "/" +
+//--- _globalConfigFilename + "\"";
+//--- }
+//---
+//--- // Assemble indenter call string for parameters according to the set order.
+//--- if (_parameterOrder == "ipo")
+//--- {
+//--- indenterCompleteCallString = parameterInputFile + parameterParameterFile + parameterOuputFile;
+//--- }
+//--- else if (_parameterOrder == "pio")
+//--- {
+//--- indenterCompleteCallString = parameterParameterFile + parameterInputFile + parameterOuputFile;
+//--- }
+//--- else if (_parameterOrder == "poi")
+//--- {
+//--- indenterCompleteCallString = parameterParameterFile + parameterOuputFile + parameterInputFile;
+//--- }
+//--- else
+//--- {
+//--- indenterCompleteCallString = parameterInputFile + parameterOuputFile + parameterParameterFile;
+//--- }
+//---
+//--- // If no indenter executable call string could be created before, show an error message.
+//--- if (m_indenterExecutableCallString.isEmpty())
+//--- {
+//--- _errorMessageDialog->showMessage(tr("No indenter executable"), tr(
+//--- "There exists no indenter executable with the name \"%1\" in the directory \"%2\" nor in the global environment.").arg(
+//--- _indenterFileName).arg(m_indenterDirectoryStr));
+//--- return sourceCode;
+//--- }
+//---
+//--- // Generate the indenter call string either for win32 or other systems.
+//--- indenterCompleteCallString = m_indenterExecutableCallString + indenterCompleteCallString;
+//---
+//--- // errors and standard outputs from the process call are merged together
+//--- //indentProcess.setReadChannelMode(TQProcess::MergedChannels);
+//---
+//--- // Set the directory where the indenter will be executed for the process' environment as PWD.
+//--- TQStringList env = indentProcess.environment();
+//--- env << "PWD=" + TQFileInfo(m_tempDirectoryStr).absoluteFilePath();
+//--- indentProcess.setEnvironment(env);
+//---
+//--- // Set the directory for the indenter execution
+//--- indentProcess.setWorkingDirectory(TQFileInfo(m_tempDirectoryStr).absoluteFilePath());
+//---
+//--- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Will call the indenter in the directory " <<
+//--- indentProcess.workingDirectory() << " using this commandline call: " <<
+//--- indenterCompleteCallString;
+//---
+//--- indentProcess.start(indenterCompleteCallString);
+//---
+//--- processReturnString = "";
+//--- bool calledProcessSuccessfully = indentProcess.waitForFinished(10000);
+//--- // test if there was an error during starting the process of the indenter
+//--- if (!calledProcessSuccessfully)
+//--- {
+//--- processReturnString = "<html><body>";
+//--- processReturnString += tr("<b>Returned error message:</b> ") + indentProcess.errorString() +
+//--- "<br>";
+//---
+//--- switch (indentProcess.error())
+//--- {
+//--- case TQProcess::FailedToStart:
+//--- {
+//--- processReturnString += tr("<b>Reason could be:</b> ") +
+//--- "The process failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program.<br>";
+//--- break;
+//--- }
+//---
+//--- case TQProcess::Crashed:
+//--- {
+//--- processReturnString += "The process crashed some time after starting successfully.<br>";
+//--- break;
+//--- }
+//---
+//--- case TQProcess::Timedout:
+//--- {
+//--- processReturnString +=
+//--- "The called indenter did not response for over 10 seconds, so aborted its execution.<br>";
+//--- break;
+//--- }
+//---
+//--- case TQProcess::WriteError:
+//--- {
+//--- processReturnString +=
+//--- "An error occurred when attempting to write to the process. For example, the process may not be running, or it may have closed its input channel.<br>";
+//--- break;
+//--- }
+//---
+//--- case TQProcess::ReadError:
+//--- {
+//--- processReturnString +=
+//--- "An error occurred when attempting to read from the process. For example, the process may not be running.<br>";
+//--- break;
+//--- }
+//---
+//--- case TQProcess::UnknownError:
+//--- {
+//--- processReturnString +=
+//--- "An unknown error occurred. This is the default return value of error().<br>";
+//--- break;
+//--- }
+//---
+//--- default:
+//--- {
+//--- break;
+//--- }
+//--- }
+//--- processReturnString += tr("<br><b>Callstring was:</b> ") + encodeToHTML(
+//--- indenterCompleteCallString);
+//--- processReturnString += tr("<br><br><b>Indenter output was:</b><pre>") + "<br>" + "(STDOUT):" +
+//--- encodeToHTML(indentProcess.readAllStandardOutput()) + "<br>" + "(STDERR):" +
+//--- encodeToHTML(indentProcess.readAllStandardError()) + "<br>" + "</pre></html></body>";
+//--- tqWarning() << __LINE__ << " " << __FUNCTION__ << processReturnString;
+//--- TQApplication::restoreOverrideCursor();
+//--- _errorMessageDialog->showMessage(tr("Error calling Indenter"), processReturnString);
+//--- }
+//---
+//--- // If the indenter returned an error code != 0 show its output.
+//--- if (indentProcess.exitCode() != 0)
+//--- {
+//--- TQString exitCode;
+//--- exitCode.setNum(indentProcess.exitCode());
+//--- processReturnString = tr("<b>Indenter returned with exit code:</b> ") + exitCode + "<br>" + tr(
+//--- "<b>Indent console output was:</b> ") + "<br>" + "(STDOUT):" + encodeToHTML(
+//--- indentProcess.readAllStandardOutput()) + "<br>" + "(STDERR):" + encodeToHTML(
+//--- indentProcess.readAllStandardError()) + "<br>" + tr("<br><b>Callstring was:</b> ") +
+//--- encodeToHTML(indenterCompleteCallString) + "</html></body>";
+//--- tqWarning() << __LINE__ << " " << __FUNCTION__ << processReturnString;
+//--- TQApplication::restoreOverrideCursor();
+//--- _errorMessageDialog->showMessage(tr("Indenter returned error"), processReturnString);
+//--- }
+//---
+//--- // Only get the formatted source code, if calling the indenter did succeed.
+//--- if (calledProcessSuccessfully)
+//--- {
+//--- // If the indenter results are written to stdout, read them from there...
+//--- if (indentProcess.exitCode() == 0 && _outputFileParameter == "stdout")
+//--- {
+//--- formattedSourceCode = indentProcess.readAllStandardOutput();
+//--- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Read indenter output from StdOut.";
+//--- }
+//--- // ... else read the output file generated by the indenter call.
+//--- else
+//--- {
+//--- TQFile outSrcFile(m_tempDirectoryStr + "/" + _outputFileName + inputFileExtension);
+//--- if (outSrcFile.open(TQFile::ReadOnly | TQFile::Text))
+//--- {
+//--- TQTextStream outSrcStrm(&outSrcFile);
+//--- outSrcStrm.setCodec(TQTextCodec::codecForName("UTF-8"));
+//--- formattedSourceCode = outSrcStrm.readAll();
+//--- outSrcFile.close();
+//--- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Read indenter output from file " <<
+//--- outSrcFile.fileName();
+//--- }
+//--- else
+//--- {
+//--- qCritical() << __LINE__ << " " << __FUNCTION__ <<
+//--- ": Couldn't read indenter output from file " << outSrcFile.fileName();
+//--- }
+//--- }
+//--- }
+//--- else
+//--- {
+//--- return sourceCode;
+//--- }
+//---
+//--- // Delete the temporary input and output files.
+//--- TQFile::remove(m_tempDirectoryStr + "/" + _outputFileName + inputFileExtension);
+//--- TQFile::remove(m_tempDirectoryStr + "/" + _inputFileName + inputFileExtension);
+//---
+//--- return formattedSourceCode;
+//--- }
+//---
+//--- /*
+//--- \brief Generates and returns a string with all parameters needed to call the indenter.
+//--- */
+//--- TQString IndentHandler::getParameterString()
+//--- {
+//--- TQString parameterString = "";
+//---
+//--- // generate parameter string for all boolean values
+//--- foreach(ParamBoolean pBoolean, _paramBooleans)
+//--- {
+//--- if (pBoolean.checkBox->isChecked())
+//--- {
+//--- if (!pBoolean.trueString.isEmpty())
+//--- {
+//--- parameterString += pBoolean.trueString + _cfgFileParameterEnding;
+//--- }
+//--- }
+//--- else
+//--- {
+//--- if (!pBoolean.falseString.isEmpty())
+//--- {
+//--- parameterString += pBoolean.falseString + _cfgFileParameterEnding;
+//--- }
+//--- }
+//--- }
+//---
+//--- // generate parameter string for all numeric values
+//--- foreach(ParamNumeric pNumeric, _paramNumerics)
+//--- {
+//--- if (pNumeric.valueEnabledChkBox->isChecked())
+//--- {
+//--- parameterString += pNumeric.paramCallName + TQString::number(pNumeric.spinBox->value()) +
+//--- _cfgFileParameterEnding;
+//--- }
+//--- }
+//---
+//--- // generate parameter string for all string values
+//--- foreach(ParamString pString, _paramStrings)
+//--- {
+//--- if (!pString.lineEdit->text().isEmpty() && pString.valueEnabledChkBox->isChecked())
+//--- {
+//--- // Create parameter definition for each value devided by a | sign.
+//--- foreach(TQString paramValue, pString.lineEdit->text().split("|"))
+//--- {
+//--- parameterString += pString.paramCallName + paramValue + _cfgFileParameterEnding;
+//--- }
+//--- }
+//--- }
+//---
+//--- // generate parameter string for all multiple choice values
+//--- foreach(ParamMultiple pMultiple, _paramMultiples)
+//--- {
+//--- if (pMultiple.valueEnabledChkBox->isChecked())
+//--- {
+//--- parameterString += pMultiple.choicesStrings.at(pMultiple.comboBox->currentIndex()) +
+//--- _cfgFileParameterEnding;
+//--- }
+//--- }
+//---
+//--- return parameterString;
+//--- }
+//---
+//--- /*
+//--- \brief Write settings for the indenter to a config file.
+//--- */
+//--- void IndentHandler::saveConfigFile(TQString filePathName, TQString paramString)
+//--- {
+//--- TQFile::remove(filePathName);
+//--- TQFile cfgFile(filePathName);
+//---
+//--- cfgFile.open(TQFile::ReadWrite | TQFile::Text);
+//--- cfgFile.write(paramString.toAscii());
+//--- cfgFile.close();
+//--- }
+//---
+//--- /*
+//--- \brief Load the config file for the indenter and apply the settings made there.
+//--- */
+//--- bool IndentHandler::loadConfigFile(TQString filePathName)
+//--- {
+//--- TQFile cfgFile(filePathName);
+//--- int index;
+//--- int crPos;
+//--- int paramValue = 0;
+//--- TQString paramValueStr = "";
+//--- TQString cfgFileData = "";
+//---
+//--- // If the to be loaded config file does not exist leave all values as they are and return false.
+//--- if (!cfgFile.exists())
+//--- {
+//--- return false;
+//--- }
+//--- // else if the to be read config file exists, retrieve its whole content.
+//--- else
+//--- {
+//--- // Open the config file and read all data
+//--- cfgFile.open(TQFile::ReadOnly | TQFile::Text);
+//--- cfgFileData = cfgFile.readAll();
+//--- cfgFile.close();
+//--- }
+//---
+//--- // Search for name of each boolean parameter and set its value if found.
+//--- foreach(ParamBoolean pBoolean, _paramBooleans)
+//--- {
+//--- // boolean value that will be assigned to the checkbox
+//--- bool paramValue = false;
+//---
+//--- // first search for the longer parameter string
+//--- // the true parameter string is longer than the false string
+//--- if (pBoolean.trueString.length() > pBoolean.falseString.length())
+//--- {
+//--- // search for the true string
+//--- index = cfgFileData.indexOf(pBoolean.trueString, 0, TQt::CaseInsensitive);
+//--- // if true string found set the parameter value to true
+//--- if (index != -1)
+//--- {
+//--- paramValue = true;
+//--- }
+//--- // if true string not found, search for false string
+//--- else
+//--- {
+//--- index = cfgFileData.indexOf(pBoolean.falseString, 0, TQt::CaseInsensitive);
+//--- // if false string found set the parameter value to false
+//--- if (index != -1)
+//--- {
+//--- paramValue = false;
+//--- }
+//--- // neither true nor false parameter found so use default value
+//--- else
+//--- {
+//--- paramValue = _indenterSettings->value(pBoolean.paramName + "/ValueDefault").toBool();
+//--- }
+//--- }
+//--- }
+//--- // the false parameter string is longer than the true string
+//--- else
+//--- {
+//--- // search for the false string
+//--- index = cfgFileData.indexOf(pBoolean.falseString, 0, TQt::CaseInsensitive);
+//--- // if false string found set the parameter value to false
+//--- if (index != -1)
+//--- {
+//--- paramValue = false;
+//--- }
+//--- // if false string not found, search for true string
+//--- else
+//--- {
+//--- index = cfgFileData.indexOf(pBoolean.trueString, 0, TQt::CaseInsensitive);
+//--- // if true string found set the parameter value to true
+//--- if (index != -1)
+//--- {
+//--- paramValue = true;
+//--- }
+//--- // neither true nor false parameter found so use default value
+//--- else
+//--- {
+//--- paramValue = _indenterSettings->value(pBoolean.paramName + "/ValueDefault").toBool();
+//--- }
+//--- }
+//--- }
+//--- pBoolean.checkBox->setChecked(paramValue);
+//--- }
+//---
+//--- // Search for name of each numeric parameter and set the value found behind it.
+//--- foreach(ParamNumeric pNumeric, _paramNumerics)
+//--- {
+//--- index = cfgFileData.indexOf(pNumeric.paramCallName, 0, TQt::CaseInsensitive);
+//--- // parameter was found in config file
+//--- if (index != -1)
+//--- {
+//--- // set index after the parameter name, so in front of the number
+//--- index += pNumeric.paramCallName.length();
+//---
+//--- // Find the end of the parameter by searching for set config file parameter ending. Most of
+//--- // time this is a carriage return.
+//--- crPos = cfgFileData.indexOf(_cfgFileParameterEnding, index + 1);
+//---
+//--- // get the number and convert it to int
+//--- TQString test = cfgFileData.mid(index, crPos - index);
+//--- paramValue = cfgFileData.mid(index, crPos - index).toInt(nullptr);
+//---
+//--- // disable the signal-slot connection. Otherwise signal is emmitted each time when value is
+//--- // set
+//--- TQObject::disconnect(pNumeric.spinBox, SIGNAL(valueChanged(int)), this,
+//--- SLOT(handleChangedIndenterSettings()));
+//--- pNumeric.spinBox->setValue(paramValue);
+//--- pNumeric.valueEnabledChkBox->setChecked(true);
+//--- TQObject::connect(pNumeric.spinBox, SIGNAL(valueChanged(int)), this,
+//--- SLOT(handleChangedIndenterSettings()));
+//--- }
+//--- // parameter was not found in config file
+//--- else
+//--- {
+//--- int defaultValue = _indenterSettings->value(pNumeric.paramName + "/ValueDefault").toInt();
+//--- pNumeric.spinBox->setValue(defaultValue);
+//--- pNumeric.valueEnabledChkBox->setChecked(false);
+//--- }
+//--- }
+//---
+//--- // Search for name of each string parameter and set it.
+//--- foreach(ParamString pString, _paramStrings)
+//--- {
+//--- paramValueStr = "";
+//--- // The number of the found values for this parameter name.
+//--- int numberOfValues = 0;
+//--- index = cfgFileData.indexOf(pString.paramCallName, 0, TQt::CaseInsensitive);
+//--- // If parameter was found in config file
+//--- if (index != -1)
+//--- {
+//--- while (index != -1)
+//--- {
+//--- numberOfValues++;
+//---
+//--- // Set index after the parameter name, so it points to the front of the string value.
+//--- index += pString.paramCallName.length();
+//---
+//--- // Find the end of the parameter by searching for set config file parameter ending. Most of
+//--- // time this is a carriage return.
+//--- crPos = cfgFileData.indexOf(_cfgFileParameterEnding, index + 1);
+//---
+//--- // Get the string and remember it.
+//--- if (numberOfValues < 2)
+//--- {
+//--- paramValueStr = TQString(cfgFileData.mid(index, crPos - index));
+//--- }
+//--- // If the same parameter has been set multiple times, concatenate the strings dvivided by a
+//--- // |.
+//--- else
+//--- {
+//--- paramValueStr = paramValueStr + "|" + TQString(cfgFileData.mid(index, crPos - index));
+//--- }
+//---
+//--- // Get next value for this setting, if one exists.
+//--- index = cfgFileData.indexOf(pString.paramCallName, crPos + 1, TQt::CaseInsensitive);
+//--- }
+//--- // Set the text for the line edit.
+//--- pString.lineEdit->setText(paramValueStr);
+//--- pString.valueEnabledChkBox->setChecked(true);
+//--- }
+//--- // Parameter was not found in config file
+//--- else
+//--- {
+//--- paramValueStr = _indenterSettings->value(pString.paramName + "/ValueDefault").toString();
+//--- pString.lineEdit->setText(paramValueStr);
+//--- pString.valueEnabledChkBox->setChecked(false);
+//--- }
+//--- }
+//---
+//--- // search for name of each multiple choice parameter and set it
+//--- foreach(ParamMultiple pMultiple, _paramMultiples)
+//--- {
+//--- int i = 0;
+//--- index = -1;
+//---
+//--- // search for all parameter names of the multiple choice list
+//--- // if one is found, set it and leave the while loop
+//--- while (i < pMultiple.choicesStrings.count() && index == -1)
+//--- {
+//--- index = cfgFileData.indexOf(pMultiple.choicesStrings.at(i), 0, TQt::CaseInsensitive);
+//--- if (index != -1)
+//--- {
+//--- pMultiple.comboBox->setCurrentIndex(i);
+//--- pMultiple.valueEnabledChkBox->setChecked(true);
+//--- }
+//--- i++;
+//--- }
+//---
+//--- // parameter was not set in config file, so use default value
+//--- if (index == -1)
+//--- {
+//--- int defaultValue = _indenterSettings->value(pMultiple.paramName + "/ValueDefault").toInt();
+//--- pMultiple.comboBox->setCurrentIndex(defaultValue);
+//--- pMultiple.valueEnabledChkBox->setChecked(false);
+//--- }
+//--- }
+//---
+//--- return true;
+//--- }
+//---
+//--- /*
+//--- \brief Sets all indenter parameters to their default values defined in the ini file.
+//--- */
+//--- void IndentHandler::resetToDefaultValues()
+//--- {
+//--- // Search for name of each boolean parameter and set its value if found.
+//--- foreach(ParamBoolean pBoolean, _paramBooleans)
+//--- {
+//--- // Boolean value that will be assigned to the checkbox.
+//--- bool defaultValue = _indenterSettings->value(pBoolean.paramName + "/ValueDefault").toBool();
+//--- pBoolean.checkBox->setChecked(defaultValue);
+//--- }
+//---
+//--- // Search for name of each numeric parameter and set the value found behind it.
+//--- foreach(ParamNumeric pNumeric, _paramNumerics)
+//--- {
+//--- int defaultValue = _indenterSettings->value(pNumeric.paramName + "/ValueDefault").toInt();
+//--- pNumeric.spinBox->setValue(defaultValue);
+//--- pNumeric.valueEnabledChkBox->setChecked(_indenterSettings->value(
+//--- pNumeric.paramName + "/Enabled").toBool());
+//--- }
+//---
+//--- // Search for name of each string parameter and set it.
+//--- foreach(ParamString pString, _paramStrings)
+//--- {
+//--- TQString defaultValue =
+//--- _indenterSettings->value(pString.paramName + "/ValueDefault").toString();
+//--- pString.lineEdit->setText(defaultValue);
+//--- pString.valueEnabledChkBox->setChecked(_indenterSettings->value(
+//--- pString.paramName + "/Enabled").toBool());
+//--- }
+//---
+//--- // Search for name of each multiple choice parameter and set it.
+//--- foreach(ParamMultiple pMultiple, _paramMultiples)
+//--- {
+//--- int defaultValue = _indenterSettings->value(pMultiple.paramName + "/ValueDefault").toInt();
+//--- pMultiple.comboBox->setCurrentIndex(defaultValue);
+//--- pMultiple.valueEnabledChkBox->setChecked(_indenterSettings->value(pMultiple.paramName +
+//--- "/Enabled").toBool());
+//--- }
+//--- }
+//---
+//--- /*
+//--- \brief Opens and parses the indenter ini file that is declared by \a iniFilePath.
+//--- */
+//--- void IndentHandler::readIndentIniFile(TQString iniFilePath)
+//--- {
+//--- Q_ASSERT_X(!iniFilePath.isEmpty(), "readIndentIniFile", "iniFilePath is empty");
+//---
+//--- // open the ini-file that contains all available indenter settings with their additional infos
+//--- _indenterSettings = new UiGuiIniFileParser(iniFilePath);
+//---
+//--- TQStringList categories;
+//--- //TQString indenterGroupString = "";
+//--- TQString paramToolTip = "";
+//---
+//--- //
+//--- // parse ini file indenter header
+//--- //
+//---
+//--- _indenterName = _indenterSettings->value("header/indenterName").toString();
+//--- _indenterFileName = _indenterSettings->value("header/indenterFileName").toString();
+//--- _globalConfigFilename = _indenterSettings->value("header/configFilename").toString();
+//--- _useCfgFileParameter = _indenterSettings->value("header/useCfgFileParameter").toString();
+//--- _cfgFileParameterEnding = _indenterSettings->value("header/cfgFileParameterEnding").toString();
+//--- if (_cfgFileParameterEnding == "cr")
+//--- {
+//--- _cfgFileParameterEnding = "\n";
+//--- }
+//--- _indenterShowHelpParameter = _indenterSettings->value("header/showHelpParameter").toString();
+//---
+//--- if (_indenterFileName.isEmpty())
+//--- {
+//--- _errorMessageDialog->showMessage(tr("Indenter ini file header error"), tr(
+//--- "The loaded indenter ini file \"%1\"has a faulty header. At least the indenters file name is not set.").arg(
+//--- iniFilePath));
+//--- }
+//---
+//--- // Read the parameter order. Possible values are (p=parameter[file] i=inputfile o=outputfile)
+//--- // pio, ipo, iop
+//--- _parameterOrder = _indenterSettings->value("header/parameterOrder", "pio").toString();
+//--- _inputFileParameter = _indenterSettings->value("header/inputFileParameter").toString();
+//--- _inputFileName = _indenterSettings->value("header/inputFileName").toString();
+//--- _outputFileParameter = _indenterSettings->value("header/outputFileParameter").toString();
+//--- _outputFileName = _indenterSettings->value("header/outputFileName").toString();
+//--- _fileTypes = _indenterSettings->value("header/fileTypes").toString();
+//--- _fileTypes.replace('|', " ");
+//---
+//--- // read the categories names which are separated by "|"
+//--- TQString categoriesStr = _indenterSettings->value("header/categories").toString();
+//--- categories = categoriesStr.split("|");
+//--- // Assure that the category list is never empty. At least contain a "general" section.
+//--- if (categories.isEmpty())
+//--- {
+//--- categories.append("General");
+//--- }
+//---
+//--- IndenterParameterCategoryPage categoryPage;
+//---
+//--- // create a page for each category and store its references in a toolboxpage-array
+//--- foreach(TQString category, categories)
+//--- {
+//--- categoryPage.widget = new TQWidget();
+//--- categoryPage.widget->setObjectName(category);
+//--- categoryPage.widget->setSizePolicy(TQSizePolicy::MinimumExpanding,
+//--- TQSizePolicy::MinimumExpanding);
+//--- categoryPage.vboxLayout = new TQVBoxLayout(categoryPage.widget);
+//--- categoryPage.vboxLayout->setSpacing(6);
+//--- categoryPage.vboxLayout->setMargin(9);
+//--- categoryPage.vboxLayout->setObjectName(category);
+//--- _indenterParameterCategoryPages.append(categoryPage);
+//--- m_indenterParameterCategoriesToolBox->addItem(categoryPage.widget, category);
+//--- }
+//---
+//--- //
+//--- // parse ini file indenter parameters
+//--- //
+//---
+//--- // read all possible parameters written in brackets []
+//--- _indenterParameters = _indenterSettings->childGroups();
+//---
+//--- // read each parameter to create the corresponding input field
+//--- foreach(TQString indenterParameter, _indenterParameters)
+//--- {
+//--- // if it is not the indent header definition read the parameter and add it to
+//--- // the corresponding category toolbox page
+//--- if (indenterParameter != "header")
+//--- {
+//--- // read to which category the parameter belongs
+//--- int category = _indenterSettings->value(indenterParameter + "/Category").toInt();
+//--- // Assure that the category number is never greater than the available categories.
+//--- if (category > _indenterParameterCategoryPages.size() - 1)
+//--- {
+//--- category = _indenterParameterCategoryPages.size() - 1;
+//--- }
+//--- // read which type of input field the parameter needs
+//--- TQString editType = _indenterSettings->value(indenterParameter + "/EditorType").toString();
+//---
+//--- // edit type is numeric so create a spinbox with label
+//--- if (editType == "numeric")
+//--- {
+//--- // read the parameter name as it is used at the command line or in its config file
+//--- TQString parameterCallName =
+//--- _indenterSettings->value(indenterParameter + "/CallName").toString();
+//---
+//--- // create checkbox which enables or disables the parameter
+//--- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
+//--- chkBox->setChecked(_indenterSettings->value(indenterParameter + "/Enabled").toBool());
+//--- chkBox->setToolTip(
+//--- "Enables/disables the parameter. If disabled the indenters default value will be used.");
+//--- chkBox->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
+//--- int left, top, right, bottom;
+//--- chkBox->getContentsMargins(&left, &top, &right, &bottom);
+//--- chkBox->setContentsMargins(left, top, 0, bottom);
+//---
+//--- // create the spinbox
+//--- TQSpinBox *spinBox = new TQSpinBox(_indenterParameterCategoryPages.at(category).widget);
+//--- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
+//--- spinBox->setToolTip(paramToolTip);
+//--- spinBox->setMaximumWidth(50);
+//--- spinBox->setMinimumWidth(50);
+//--- if (m_mainWindow != nullptr)
+//--- {
+//--- spinBox->installEventFilter(m_mainWindow);
+//--- }
+//--- if (_indenterSettings->value(indenterParameter + "/MinVal").toString() != "")
+//--- {
+//--- spinBox->setMinimum(_indenterSettings->value(indenterParameter + "/MinVal").toInt());
+//--- }
+//--- else
+//--- {
+//--- spinBox->setMinimum(0);
+//--- }
+//--- if (_indenterSettings->value(indenterParameter + "/MaxVal").toString() != "")
+//--- {
+//--- spinBox->setMaximum(_indenterSettings->value(indenterParameter + "/MaxVal").toInt());
+//--- }
+//--- else
+//--- {
+//--- spinBox->setMaximum(2000);
+//--- }
+//---
+//--- // create the label
+//--- TQLabel *label = new TQLabel(_indenterParameterCategoryPages.at(category).widget);
+//--- label->setText(indenterParameter);
+//--- label->setBuddy(spinBox);
+//--- label->setToolTip(paramToolTip);
+//--- if (m_mainWindow != nullptr)
+//--- {
+//--- label->installEventFilter(m_mainWindow);
+//--- }
+//---
+//--- // put all into a layout and add it to the toolbox page
+//--- TQHBoxLayout *hboxLayout = new TQHBoxLayout();
+//--- hboxLayout->addWidget(chkBox);
+//--- hboxLayout->addWidget(spinBox);
+//--- hboxLayout->addWidget(label);
+//--- _indenterParameterCategoryPages.at(category).vboxLayout->addLayout(hboxLayout);
+//---
+//--- // remember parameter name and reference to its spinbox
+//--- ParamNumeric paramNumeric;
+//--- paramNumeric.paramName = indenterParameter;
+//--- paramNumeric.paramCallName = parameterCallName;
+//--- paramNumeric.spinBox = spinBox;
+//--- paramNumeric.label = label;
+//--- paramNumeric.valueEnabledChkBox = chkBox;
+//--- paramNumeric.spinBox->setValue(_indenterSettings->value(paramNumeric.paramName +
+//--- "/ValueDefault").toInt());
+//--- _paramNumerics.append(paramNumeric);
+//---
+//--- TQObject::connect(spinBox, SIGNAL(valueChanged(int)), this,
+//--- SLOT(handleChangedIndenterSettings()));
+//--- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
+//--- }
+//--- // edit type is boolean so create a checkbox
+//--- else if (editType == "boolean")
+//--- {
+//--- // create the checkbox, make its settings and add it to the toolbox page
+//--- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
+//--- chkBox->setText(indenterParameter);
+//--- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
+//--- chkBox->setToolTip(paramToolTip);
+//--- if (m_mainWindow != nullptr)
+//--- {
+//--- chkBox->installEventFilter(m_mainWindow);
+//--- }
+//--- _indenterParameterCategoryPages.at(category).vboxLayout->addWidget(chkBox);
+//---
+//--- // remember parameter name and reference to its checkbox
+//--- ParamBoolean paramBoolean;
+//--- paramBoolean.paramName = indenterParameter;
+//--- paramBoolean.checkBox = chkBox;
+//--- TQStringList trueFalseStrings =
+//--- _indenterSettings->value(indenterParameter + "/TrueFalse").toString().split("|");
+//--- paramBoolean.trueString = trueFalseStrings.at(0);
+//--- paramBoolean.falseString = trueFalseStrings.at(1);
+//--- paramBoolean.checkBox->setChecked(_indenterSettings->value(paramBoolean.paramName +
+//--- "/ValueDefault").toBool());
+//--- _paramBooleans.append(paramBoolean);
+//---
+//--- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
+//--- }
+//--- // edit type is numeric so create a line edit with label
+//--- else if (editType == "string")
+//--- {
+//--- // read the parameter name as it is used at the command line or in its config file
+//--- TQString parameterCallName =
+//--- _indenterSettings->value(indenterParameter + "/CallName").toString();
+//---
+//--- // create check box which enables or disables the parameter
+//--- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
+//--- chkBox->setChecked(_indenterSettings->value(indenterParameter + "/Enabled").toBool());
+//--- chkBox->setToolTip(
+//--- "Enables/disables the parameter. If disabled the indenters default value will be used.");
+//--- chkBox->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
+//--- int left, top, right, bottom;
+//--- chkBox->getContentsMargins(&left, &top, &right, &bottom);
+//--- chkBox->setContentsMargins(left, top, 0, bottom);
+//---
+//--- // create the line edit
+//--- TQLineEdit *lineEdit = new TQLineEdit(_indenterParameterCategoryPages.at(category).widget);
+//--- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
+//--- lineEdit->setToolTip(paramToolTip);
+//--- lineEdit->setMaximumWidth(50);
+//--- lineEdit->setMinimumWidth(50);
+//--- if (m_mainWindow != nullptr)
+//--- {
+//--- lineEdit->installEventFilter(m_mainWindow);
+//--- }
+//---
+//--- // create the label
+//--- TQLabel *label = new TQLabel(_indenterParameterCategoryPages.at(category).widget);
+//--- label->setText(indenterParameter);
+//--- label->setBuddy(lineEdit);
+//--- label->setSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::Preferred);
+//--- label->setToolTip(paramToolTip);
+//--- if (m_mainWindow != nullptr)
+//--- {
+//--- label->installEventFilter(m_mainWindow);
+//--- }
+//---
+//--- // put all into a layout and add it to the toolbox page
+//--- TQHBoxLayout *hboxLayout = new TQHBoxLayout();
+//--- hboxLayout->addWidget(chkBox);
+//--- hboxLayout->addWidget(lineEdit);
+//--- hboxLayout->addWidget(label);
+//--- _indenterParameterCategoryPages.at(category).vboxLayout->addLayout(hboxLayout);
+//---
+//--- // remember parameter name and reference to its line edit
+//--- ParamString paramString;
+//--- paramString.paramName = indenterParameter;
+//--- paramString.paramCallName = parameterCallName;
+//--- paramString.lineEdit = lineEdit;
+//--- paramString.label = label;
+//--- paramString.valueEnabledChkBox = chkBox;
+//--- paramString.lineEdit->setText(_indenterSettings->value(paramString.paramName +
+//--- "/ValueDefault").toString());
+//--- _paramStrings.append(paramString);
+//---
+//--- TQObject::connect(lineEdit, SIGNAL(editingFinished()), this,
+//--- SLOT(handleChangedIndenterSettings()));
+//--- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
+//--- }
+//--- // edit type is multiple so create a combobox with label
+//--- else if (editType == "multiple")
+//--- {
+//--- // read the parameter name as it is used at the command line or in its config file
+//--- TQString parameterCallName =
+//--- _indenterSettings->value(indenterParameter + "/CallName").toString();
+//---
+//--- // create checkbox which enables or disables the parameter
+//--- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
+//--- chkBox->setChecked(_indenterSettings->value(indenterParameter + "/Enabled").toBool());
+//--- chkBox->setToolTip(
+//--- "Enables/disables the parameter. If disabled the indenters default value will be used.");
+//--- chkBox->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
+//--- int left, top, right, bottom;
+//--- chkBox->getContentsMargins(&left, &top, &right, &bottom);
+//--- chkBox->setContentsMargins(left, top, 0, bottom);
+//---
+//--- // create the combo box
+//--- TQComboBox *comboBox = new TQComboBox(_indenterParameterCategoryPages.at(
+//--- category).widget);
+//--- TQStringList choicesStrings =
+//--- _indenterSettings->value(indenterParameter + "/Choices").toString().split("|");
+//--- TQStringList choicesStringsReadable = _indenterSettings->value(
+//--- indenterParameter + "/ChoicesReadable").toString().split("|", TQString::SkipEmptyParts);
+//--- if (choicesStringsReadable.isEmpty())
+//--- {
+//--- comboBox->addItems(choicesStrings);
+//--- }
+//--- else
+//--- {
+//--- comboBox->addItems(choicesStringsReadable);
+//--- }
+//--- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
+//--- comboBox->setToolTip(paramToolTip);
+//--- if (m_mainWindow != nullptr)
+//--- {
+//--- comboBox->installEventFilter(m_mainWindow);
+//--- }
+//---
+//--- // put all into a layout and add it to the toolbox page
+//--- TQHBoxLayout *hboxLayout = new TQHBoxLayout();
+//--- hboxLayout->addWidget(chkBox);
+//--- hboxLayout->addWidget(comboBox);
+//--- _indenterParameterCategoryPages.at(category).vboxLayout->addLayout(hboxLayout);
+//---
+//--- // remember parameter name and reference to its lineedit
+//--- ParamMultiple paramMultiple;
+//--- paramMultiple.paramName = indenterParameter;
+//--- paramMultiple.paramCallName = parameterCallName;
+//--- paramMultiple.comboBox = comboBox;
+//--- paramMultiple.choicesStrings = choicesStrings;
+//--- paramMultiple.choicesStringsReadable = choicesStringsReadable;
+//--- paramMultiple.valueEnabledChkBox = chkBox;
+//--- paramMultiple.comboBox->setCurrentIndex(_indenterSettings->value(paramMultiple.paramName +
+//--- "/ValueDefault").toInt());
+//--- _paramMultiples.append(paramMultiple);
+//---
+//--- TQObject::connect(comboBox, SIGNAL(activated(int)), this,
+//--- SLOT(handleChangedIndenterSettings()));
+//--- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
+//--- }
+//--- }
+//--- }
+//---
+//--- // put a spacer at each page end
+//--- foreach(IndenterParameterCategoryPage categoryPage, _indenterParameterCategoryPages)
+//--- {
+//--- categoryPage.vboxLayout->addStretch();
+//--- }
+//--- }
+//---
+//--- /*
+//--- \brief Searches and returns all indenters a configuration file is found for.
+//---
+//--- Opens all uigui ini files found in the list \a _indenterIniFileList, opens each ini file
+//--- and reads the there defined real name of the indenter. These names are being returned as TQStringList.
+//--- */
+//--- TQStringList IndentHandler::getAvailableIndenters()
+//--- {
+//--- TQStringList indenterNamesList;
+//---
+//--- // Loop for every existing uigui ini file
+//--- foreach(TQString indenterIniFile, _indenterIniFileList)
+//--- {
+//--- // Open the ini file and search for the indenter name
+//--- TQFile file(m_indenterDirectoryStr + "/" + indenterIniFile);
+//--- if (file.open(TQIODevice::ReadOnly | TQIODevice::Text))
+//--- {
+//--- int index = -1;
+//--- TQByteArray line;
+//--- // Search for the string "indenterName=" and get the following string until line end.
+//--- while (index == -1 && !file.atEnd())
+//--- {
+//--- line = file.readLine();
+//--- index = line.indexOf("indenterName=", 0);
+//--- }
+//---
+//--- if (index == 0)
+//--- {
+//--- line = line.remove(0, 13);
+//--- indenterNamesList << line.trimmed();
+//--- }
+//--- }
+//--- }
+//--- return indenterNamesList;
+//--- }
+
+/*
+ \brief Deletes all elements in the toolbox and initializes the indenter selected by \a indenterID.
+ */
+void IndentHandler::setIndenter(int indenterID)
+{
+//--- TQApplication::setOverrideCursor(TQt::WaitCursor);
+//---
+//--- // Generate the parameter string that will be saved to the indenters config file.
+//--- TQString parameterString = getParameterString();
+//--- if (!_indenterFileName.isEmpty())
+//--- {
+//--- saveConfigFile(m_settingsDirectoryStr + "/" + _indenterFileName + ".cfg", parameterString);
+//--- }
+//---
+//--- // Take care if the selected indenterID is smaller or greater than the number of existing
+//--- // indenters
+//--- if (indenterID < 0)
+//--- {
+//--- indenterID = 0;
+//--- }
+//--- if (indenterID >= _indenterIniFileList.count())
+//--- {
+//--- indenterID = _indenterIniFileList.count() - 1;
+//--- }
+//---
+//--- // MIKE: TODO: need to save selected indenterID into Settings
+//---
+//--- // remove all pages from the toolbox
+//--- for (int i = 0; i < m_indenterParameterCategoriesToolBox->count(); i++)
+//--- {
+//--- m_indenterParameterCategoriesToolBox->removeItem(i);
+//--- }
+//---
+//--- // delete all toolbox pages and by this its children
+//--- foreach(IndenterParameterCategoryPage categoryPage, _indenterParameterCategoryPages)
+//--- {
+//--- delete categoryPage.widget;
+//--- }
+//---
+//--- // empty all lists, which stored infos for the toolbox pages and its widgets
+//--- _indenterParameterCategoryPages.clear();
+//--- _paramStrings.clear();
+//--- _paramNumerics.clear();
+//--- _paramBooleans.clear();
+//--- _paramMultiples.clear();
+//--- delete _indenterSettings;
+//---
+//--- readIndentIniFile(m_indenterDirectoryStr + "/" + _indenterIniFileList.at(indenterID));
+//---
+//--- // Find out how the indenter can be executed.
+//--- createIndenterCallString();
+//---
+//--- // Load the users last settings made for this indenter.
+//--- loadConfigFile(m_settingsDirectoryStr + "/" + _indenterFileName + ".cfg");
+//---
+//--- handleChangedIndenterSettings();
+//---
+//--- TQApplication::restoreOverrideCursor();
+}
+
+//--- /*
+//--- \brief Returns a string containing by the indenter supported file types/extensions divided by a space.
+//--- */
+//--- TQString IndentHandler::getPossibleIndenterFileExtensions()
+//--- {
+//--- return _fileTypes;
+//--- }
+//---
+//--- /*
+//--- \brief Returns the path and filename of the current indenter config file.
+//--- */
+//--- TQString IndentHandler::getIndenterCfgFile()
+//--- {
+//--- TQFileInfo fileInfo(m_indenterDirectoryStr + "/" + _globalConfigFilename);
+//--- return fileInfo.absoluteFilePath();
+//--- }
+//---
+//--- /*
+//--- \brief Tries to create a call path string for the indenter executable. If successful returns true.
+//--- */
+//--- bool IndentHandler::createIndenterCallString()
+//--- {
+//--- TQProcess indentProcess;
+//---
+//--- if (_indenterFileName.isEmpty())
+//--- {
+//--- return false;
+//--- }
+//---
+//--- // First try to call the indenter inside of the data dir, using some suffix
+//--- // ------------------------------------------------------------------------
+//---
+//--- // Set the directory for the indenter execution
+//--- indentProcess.setWorkingDirectory(TQFileInfo(m_indenterDirectoryStr).absoluteFilePath());
+//---
+//--- foreach(TQString suffix, TQStringList() << "" << ".exe" << ".bat" << ".com" << ".sh")
+//--- {
+//--- m_indenterExecutableSuffix = suffix;
+//--- m_indenterExecutableCallString = TQFileInfo(m_indenterDirectoryStr).absoluteFilePath() + "/" +
+//--- _indenterFileName;
+//--- m_indenterExecutableCallString += suffix;
+//---
+//--- // Only try to call the indenter, if the file exists.
+//--- if (TQFile::exists(m_indenterExecutableCallString))
+//--- {
+//--- // Only try to call the indenter directly if it is no php file
+//--- if (TQFileInfo(m_indenterExecutableCallString).suffix().toLower() != "php")
+//--- {
+//--- indentProcess.start(
+//--- "\"" + m_indenterExecutableCallString + +"\" " + _indenterShowHelpParameter);
+//--- if (indentProcess.waitForFinished(2000))
+//--- {
+//--- m_indenterExecutableCallString = "\"" + m_indenterExecutableCallString + "\"";
+//--- return true;
+//--- }
+//--- else if (indentProcess.error() == TQProcess::Timedout)
+//--- {
+//--- m_indenterExecutableCallString = "\"" + m_indenterExecutableCallString + "\"";
+//--- return true;
+//--- }
+//--- }
+//---
+//--- // Test for needed interpreters
+//--- // ----------------------------
+//--- // If the file could not be executed, try to find a shebang at its start or test if its a php
+//--- // file.
+//--- TQString interpreterName = "";
+//--- TQFile indenterExecutable(m_indenterExecutableCallString);
+//---
+//--- // If indenter executable file has .php as suffix, use php as default interpreter
+//--- if (TQFileInfo(m_indenterExecutableCallString).suffix().toLower() == "php")
+//--- {
+//--- interpreterName = "php -f";
+//--- }
+//--- // Else try to open the file and read the shebang.
+//--- else if (indenterExecutable.open(TQFile::ReadOnly))
+//--- {
+//--- // Read the first line of the file.
+//--- TQTextStream indenterExecutableContent(&indenterExecutable);
+//--- TQString firstLineOfIndenterExe = indenterExecutableContent.readLine(75);
+//--- indenterExecutable.close();
+//---
+//--- // If the initial shebang is found, read the named intepreter. e.g. perl
+//--- if (firstLineOfIndenterExe.startsWith("#!"))
+//--- {
+//--- // Get the rightmost word. by splitting the string into only full words.
+//--- interpreterName = firstLineOfIndenterExe.split("/").last();
+//--- }
+//--- }
+//---
+//--- // Try to call the interpreter, if it exists.
+//--- if (!interpreterName.isEmpty())
+//--- {
+//--- m_indenterExecutableCallString = interpreterName + " \"" + m_indenterExecutableCallString +
+//--- "\"";
+//--- indentProcess.start(interpreterName + " -h");
+//--- if (indentProcess.waitForFinished(2000))
+//--- {
+//--- return true;
+//--- }
+//--- else if (indentProcess.error() == TQProcess::Timedout)
+//--- {
+//--- return true;
+//--- }
+//--- // now we know an interpreter is needed but it could not be called, so inform the user.
+//--- else
+//--- {
+//--- _errorMessageDialog->showMessage(tr("Interpreter needed"), tr(
+//--- "To use the selected indenter the program \"%1\" needs to be available in the global environment. You should add an entry to your path settings.").arg(
+//--- interpreterName));
+//--- return true;
+//--- }
+//--- }
+//--- }
+//--- }
+//---
+//--- // If unsuccessful try if the indenter executable is a JavaScript file
+//--- // -------------------------------------------------------------------
+//--- m_indenterExecutableSuffix = ".js";
+//--- m_indenterExecutableCallString = TQFileInfo(m_indenterDirectoryStr).absoluteFilePath() + "/" +
+//--- _indenterFileName;
+//--- m_indenterExecutableCallString += m_indenterExecutableSuffix;
+//--- if (TQFile::exists(m_indenterExecutableCallString))
+//--- {
+//--- return true;
+//--- }
+//---
+//--- // If unsuccessful try to call the indenter global, using some suffix
+//--- // ------------------------------------------------------------------
+//--- foreach(TQString suffix, TQStringList() << "" << ".exe" << ".bat" << ".com" << ".sh")
+//--- {
+//--- m_indenterExecutableSuffix = suffix;
+//--- m_indenterExecutableCallString = _indenterFileName + suffix;
+//--- indentProcess.start(m_indenterExecutableCallString + " " + _indenterShowHelpParameter);
+//--- if (indentProcess.waitForFinished(2000))
+//--- {
+//--- return true;
+//--- }
+//--- else if (indentProcess.error() == TQProcess::Timedout)
+//--- {
+//--- return true;
+//--- }
+//--- }
+//---
+//--- // If even globally calling the indenter fails, try calling .com and .exe via wine
+//--- // -------------------------------------------------------------------------------
+//--- m_indenterExecutableCallString = "\"" + TQFileInfo(m_indenterDirectoryStr).absoluteFilePath() + "/" +
+//--- _indenterFileName;
+//---
+//--- foreach(TQString suffix, TQStringList() << ".exe" << ".com")
+//--- {
+//--- m_indenterExecutableSuffix = suffix;
+//--- if (TQFile::exists(m_indenterDirectoryStr + "/" + _indenterFileName + suffix))
+//--- {
+//--- TQProcess wineTestProcess;
+//--- wineTestProcess.start("wine --version");
+//--- // if the process of wine was not callable assume that wine is not installed
+//--- if (!wineTestProcess.waitForFinished(2000))
+//--- {
+//--- _errorMessageDialog->showMessage(tr("wine not installed"), tr(
+//--- "There exists only a win32 executable of the indenter and wine does not seem to be installed. Please install wine to be able to run the indenter."));
+//--- m_indenterExecutableCallString = "";
+//--- return false;
+//--- }
+//--- else
+//--- {
+//--- m_indenterExecutableCallString = "\"" +
+//--- TQFileInfo(m_indenterDirectoryStr).absoluteFilePath() + "/";
+//--- m_indenterExecutableCallString += _indenterFileName + suffix + "\"";
+//--- m_indenterExecutableCallString = "wine " + m_indenterExecutableCallString;
+//---
+//--- return true;
+//--- }
+//--- }
+//--- }
+//---
+//--- m_indenterExecutableCallString = "";
+//--- m_indenterExecutableSuffix = "";
+//--- return false;
+//--- }
+//---
+//--- /*
+//--- \brief Returns a string that points to where the indenters manual can be found.
+//--- */
+//--- TQString IndentHandler::getManual()
+//--- {
+//--- if (_indenterSettings != nullptr)
+//--- {
+//--- return _indenterSettings->value("header/manual").toString();
+//--- }
+//--- else
+//--- {
+//--- return "";
+//--- }
+//--- }
+
+/*
+ \brief This slot gets the reference to the indenters manual and opens it.
+ */
+void IndentHandler::showIndenterManual() const
+{
+//--- TQString manualReference = getManual();
+//--- TQDesktopServices::openUrl(manualReference);
+}
+
+//--- /*
+//--- \brief Returns the name of the currently selected indenter.
+//--- */
+//--- TQString IndentHandler::getCurrentIndenterName()
+//--- {
+//--- TQString currentIndenterName = m_indenterSelectionCombobox->currentText();
+//---
+//--- // Remove the supported programming languages from indenters name, which are set in braces.
+//--- if (currentIndenterName.indexOf("(") > 0)
+//--- {
+//--- // Using index-1 to also leave out the blank before the brace.
+//--- currentIndenterName = currentIndenterName.left(currentIndenterName.indexOf("(") - 1);
+//--- }
+//---
+//--- return currentIndenterName;
+//--- }
+
+/*
+ \brief Shows a file open dialog to open an existing config file for the current indenter.
+ If the file was successfully opened, the indent handler is called to load the settings
+ and update itself.
+*/
+void IndentHandler::openConfigFileDialog()
+{
+//--- TQString configFilePath;
+//---
+//--- configFilePath = TQFileDialog::getOpenFileName(nullptr, tr(
+//--- "Choose indenter config file"), getIndenterCfgFile(), "All files (*.*)");
+//---
+//--- if (configFilePath != "")
+//--- {
+//--- // If the config file was loaded successfully, inform any who is interested about it.
+//--- if (loadConfigFile(configFilePath))
+//--- {
+//--- handleChangedIndenterSettings();
+//--- }
+//--- }
+}
+
+/*
+ \brief Calls the "save as" dialog to save the indenter config file under a chosen name.
+ If the file already exists and it should be overwritten, a warning will be shown before.
+*/
+void IndentHandler::saveasIndentCfgFileDialog()
+{
+//--- TQString fileExtensions = tr("All files") + " (*.*)";
+//---
+//--- //TQString openedSourceFileContent = openFileDialog( tr("Choose source code file"), "./",
+//--- // fileExtensions );
+//--- TQString fileName = TQFileDialog::getSaveFileName(this, tr(
+//--- "Save indent config file"), getIndenterCfgFile(), fileExtensions);
+//---
+//--- if (fileName != "")
+//--- {
+//--- TQFile::remove(fileName);
+//--- TQFile outCfgFile(fileName);
+//--- outCfgFile.open(TQFile::ReadWrite | TQFile::Text);
+//--- outCfgFile.write(getParameterString().toAscii());
+//--- outCfgFile.close();
+//--- }
+}
+
+/*
+ \brief Invokes the indenter to create a shell script.
+ Lets the indenter create a shell script for calling the indenter out of any
+ other application and open a save dialog for saving the shell script.
+*/
+void IndentHandler::createIndenterCallShellScript()
+{
+//--- TQString shellScriptExtension;
+//--- shellScriptExtension = "sh";
+//---
+//--- TQString fileExtensions = tr("Shell Script") + " (*." + shellScriptExtension + ");;" + tr(
+//--- "All files") + " (*.*)";
+//---
+//--- TQString currentIndenterName = getCurrentIndenterName();
+//--- currentIndenterName = currentIndenterName.replace(" ", "_");
+//---
+//--- TQString shellScriptFileName = TQFileDialog::getSaveFileName(this, tr(
+//--- "Save shell script"), "call_" + currentIndenterName + "." + shellScriptExtension,
+//--- fileExtensions);
+//---
+//--- // Saving has been canceled if the filename is empty
+//--- if (shellScriptFileName.isEmpty())
+//--- {
+//--- return;
+//--- }
+//---
+//--- // Delete any old file, write the new contents and set executable permissions.
+//--- TQFile::remove(shellScriptFileName);
+//--- TQFile outSrcFile(shellScriptFileName);
+//--- if (outSrcFile.open(TQFile::ReadWrite | TQFile::Text))
+//--- {
+//--- TQString shellScriptConfigFilename = TQFileInfo(shellScriptFileName).baseName() + "." +
+//--- TQFileInfo(_globalConfigFilename).suffix();
+//---
+//--- // Get the content of the shell/batch script.
+//--- TQString indenterCallShellScript = generateShellScript(shellScriptConfigFilename);
+//---
+//--- // Replace placeholder for script name in script template.
+//--- indenterCallShellScript = indenterCallShellScript.replace("__INDENTERCALLSTRINGSCRIPTNAME__", TQFileInfo(
+//--- shellScriptFileName).fileName());
+//---
+//--- outSrcFile.write(indenterCallShellScript.toAscii());
+//--- // For non Windows systems set the files executable flag
+//--- outSrcFile.setPermissions(
+//--- outSrcFile.permissions() | TQFile::ExeOwner | TQFile::ExeUser | TQFile::ExeGroup);
+//--- outSrcFile.close();
+//---
+//--- // Save the indenter config file to the same directory, where the shell srcipt was saved to,
+//--- // because the script will reference it there via "./".
+//--- if (!_globalConfigFilename.isEmpty())
+//--- {
+//--- saveConfigFile(TQFileInfo(
+//--- shellScriptFileName).path() + "/" + shellScriptConfigFilename,
+//--- getParameterString());
+//--- }
+//--- }
+}
+
+/*
+ \brief Resets all parameters to the indenter's default values as they are specified
+ in the uigui ini file, but asks the user whether to do it really.
+ */
+void IndentHandler::resetIndenterParameter()
+{
+//--- int messageBoxAnswer = TQMessageBox::question(this, tr("Really reset parameters?"), tr(
+//--- "Do you really want to reset the indenter parameters to the default values?"),
+//--- TQMessageBox::Yes | TQMessageBox::Abort);
+//--- if (messageBoxAnswer == TQMessageBox::Yes)
+//--- {
+//--- resetToDefaultValues();
+//--- }
+}
+
+//--- /*
+//--- \brief Catch some events and let some other be handled by the super class.
+//---
+//--- Is needed for use as Notepad++ plugin.
+//--- */
+//--- bool IndentHandler::event(TQEvent *event)
+//--- {
+//--- if (event->type() == TQEvent::WindowActivate)
+//--- {
+//--- event->accept();
+//--- return true;
+//--- }
+//--- else if (event->type() == TQEvent::WindowDeactivate)
+//--- {
+//--- event->accept();
+//--- return true;
+//--- }
+//--- else
+//--- {
+//--- event->ignore();
+//--- return TQWidget::event(event);
+//--- }
+//--- }
+//---
+//--- /*
+//--- \brief Emits the \a indenterSettingsChanged signal
+//--- */
+//--- void IndentHandler::handleChangedIndenterSettings()
+//--- {
+//--- emit(indenterSettingsChanged());
+//--- }
+//---
+//--- /*
+//--- \brief Returns the id (list index) of the currently selected indenter.
+//--- */
+//--- int IndentHandler::getIndenterId()
+//--- {
+//--- return m_indenterSelectionCombobox->currentIndex();
+//--- }
+//---
+//--- htmlText.replace("&", "&amp;");
+//--- htmlText.replace("<", "&lt;");
+//--- htmlText.replace(">", "&gt;");
+//--- htmlText.replace('"', "&quot;");
+//--- htmlText.replace("'", "&#39;");
+//--- htmlText.replace("^", "&circ;");
+//--- htmlText.replace("~", "&tilde;");
+//--- htmlText.replace("€", "&euro;");
+//--- htmlText.replace("©", "&copy;");
+//--- return htmlText;
+//--- }
+
+#include "IndentHandler.moc"
diff --git a/src/IndentHandler.h b/src/IndentHandler.h
new file mode 100644
index 0000000..d7b9239
--- /dev/null
+++ b/src/IndentHandler.h
@@ -0,0 +1,180 @@
+/***************************************************************************
+ * Copyright (C) 2006-2012 by Thomas Schweitzer *
+ * thomas-schweitzer(at)arcor.de *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License version 2.0 as *
+ * published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program in the file LICENSE.GPL; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef INDENTHANDLER_H
+#define INDENTHANDLER_H
+
+#include <tqwidget.h>
+
+class MainWindow;
+///-- class UiGuiErrorMessage;
+///-- class UiGuiIniFileParser;
+
+class TQComboBox;
+class TQToolBox;
+class TQToolButton;
+class TQVBoxLayout;
+///-- class TQMenu;
+///-- class TQLabel;
+///-- class TQSpinBox;
+///-- class TQCheckBox;
+///-- class TQLineEdit;
+
+
+class IndentHandler : public TQWidget
+{
+ Q_OBJECT
+
+ public:
+ IndentHandler(int indenterID, MainWindow *mainWindow = nullptr, TQWidget *parent = nullptr);
+ ~IndentHandler();
+
+///-- TQString generateShellScript(const TQString &configFilename);
+///-- TQString callIndenter(TQString sourceCode, TQString inputFileExtension);
+///-- bool loadConfigFile(TQString filePathName);
+///-- void resetToDefaultValues();
+///-- TQStringList getAvailableIndenters();
+///-- TQString getPossibleIndenterFileExtensions();
+///-- TQString getParameterString();
+///-- TQString getIndenterCfgFile();
+///-- TQString getManual();
+///-- TQString getCurrentIndenterName();
+ void contextMenuEvent(TQContextMenuEvent *event);
+///-- int getIndenterId();
+///--
+///-- signals:
+///-- void indenterSettingsChanged();
+///-- void selectedIndenterIndexChanged(int index);
+///--
+///-- protected:
+///-- bool event(TQEvent *event);
+///-- void wheelEvent(TQWheelEvent *event);
+///--
+ private slots:
+ void setIndenter(int indenterID);
+ void showIndenterManual() const;
+ void openConfigFileDialog();
+ void saveasIndentCfgFileDialog();
+ void createIndenterCallShellScript();
+ void resetIndenterParameter();
+///-- void handleChangedIndenterSettings();
+///--
+///-- private:
+///-- TQString callExecutableIndenter(TQString sourceCode, TQString inputFileExtension);
+///-- TQString callJavaScriptIndenter(TQString sourceCode);
+///-- void saveConfigFile(TQString filePathName, TQString parameterString);
+///-- void readIndentIniFile(TQString iniFilePath);
+///-- bool createIndenterCallString();
+///--
+///-- // Holds a reference to all created pages of the parameter categories toolbox and the pages
+///-- // boxlayout
+///-- struct IndenterParameterCategoryPage
+///-- {
+///-- TQWidget *widget;
+///-- TQVBoxLayout *vboxLayout;
+///-- };
+///--
+///-- TQVector<IndenterParameterCategoryPage> _indenterParameterCategoryPages;
+///--
+///-- // Holds a reference to all checkboxes needed for boolean parameter setting and the parameters
+///-- // name
+///-- struct ParamBoolean
+///-- {
+///-- TQString paramName;
+///-- TQString trueString;
+///-- TQString falseString;
+///-- TQCheckBox *checkBox;
+///-- };
+///--
+///-- TQVector<ParamBoolean> _paramBooleans;
+///--
+///-- // Holds a reference to all line edits needed for parameter setting and the parameters name
+///-- struct ParamString
+///-- {
+///-- TQString paramName;
+///-- TQString paramCallName;
+///-- TQCheckBox *valueEnabledChkBox;
+///-- TQLineEdit *lineEdit;
+///-- TQLabel *label;
+///-- };
+///--
+///-- TQVector<ParamString> _paramStrings;
+///--
+///-- // Hold a reference to all spin boxes needed for parameter setting and the parameters name
+///-- struct ParamNumeric
+///-- {
+///-- TQString paramName;
+///-- TQString paramCallName;
+///-- TQCheckBox *valueEnabledChkBox;
+///-- TQSpinBox *spinBox;
+///-- TQLabel *label;
+///-- };
+///--
+///-- TQVector<ParamNumeric> _paramNumerics;
+///--
+///-- // Hold a reference to all combo boxes needed for parameter setting and the parameters name
+///-- struct ParamMultiple
+///-- {
+///-- TQString paramName;
+///-- TQString paramCallName;
+///-- TQCheckBox *valueEnabledChkBox;
+///-- TQComboBox *comboBox;
+///-- TQStringList choicesStrings;
+///-- TQStringList choicesStringsReadable;
+///-- };
+///--
+///-- TQVector<ParamMultiple> _paramMultiples;
+///--
+ TQComboBox *m_indenterSelectionCombobox;
+ TQToolButton *m_indenterParameterHelpButton;
+///-- // Vertical layout box, into which the toolbox will be added
+ TQVBoxLayout *m_toolBoxContainerLayout;
+ TQToolBox *m_indenterParameterCategoriesToolBox;
+///-- UiGuiIniFileParser *_indenterSettings;
+///-- TQStringList _indenterParameters;
+///-- // The indenters name in a descriptive form
+///-- TQString _indenterName;
+///-- // The indenters file name (w/o extension), that is being called
+///-- TQString _indenterFileName;
+ TQString m_indenterDirectoryStr;
+ TQString m_tempDirectoryStr;
+ TQString m_settingsDirectoryStr;
+///-- TQStringList _indenterIniFileList;
+///-- TQString _parameterOrder;
+///-- TQString _globalConfigFilename;
+///-- TQString _cfgFileParameterEnding;
+///-- TQString _inputFileParameter;
+///-- TQString _inputFileName;
+///-- TQString _outputFileParameter;
+///-- TQString _outputFileName;
+///-- TQString _fileTypes;
+///-- TQString _useCfgFileParameter;
+///-- TQString _indenterShowHelpParameter;
+ MainWindow *m_mainWindow;
+ TQWidget *m_parent;
+///-- UiGuiErrorMessage *_errorMessageDialog;
+ TQString m_indenterExecutableCallString;
+ TQString m_indenterExecutableSuffix;
+///--
+
+///-- //TODO: This function should go into a string helper/tool class/file.
+///-- TQString encodeToHTML(const TQString &text);
+};
+
+#endif // INDENTHANDLER_H
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 33ec315..36700d4 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -25,6 +25,7 @@
#include "stdlib.h"
#include "AboutDialog.h"
+#include "IndentHandler.h"
#include "SettingsPaths.h"
#include "UiGuiSettings.h"
#include "UiGuiVersion.h"
@@ -32,7 +33,6 @@
///-- #include "AboutDialogGraphicsView.h"
///-- #include "UiGuiSettingsDialog.h"
///-- #include "UiGuiHighlighter.h"
-///-- #include "IndentHandler.h"
#include <tqaction.h>
#include <tqapplication.h>
@@ -47,10 +47,11 @@
#include <tqpixmap.h>
#include <tqpopupmenu.h>
#include <tqpushbutton.h>
+#include <tqsplitter.h>
#include <tqstatusbar.h>
#include <tqtextcodec.h>
#include <tqtranslator.h>
-///-- #include <tqwidget.h>
+#include <tqwidget.h>
///-- #include <tqstring.h>
///-- #include <tqscrollbar.h>
///-- #include <tqtextcursor.h>
@@ -91,10 +92,11 @@ MainWindow::MainWindow(TQString file2OpenOnStart, TQWidget *parent) :
m_qTranslator(nullptr), m_uiGuiTranslator(nullptr), m_textEditLineColumnInfoLabel(nullptr),
m_oldLinesNumber(0), m_openEncodingActions(), m_saveEncodingActions(),
m_encodingActionGroup(nullptr), m_saveEncodedActionGroup(nullptr),
- m_highlighterActionGroup(nullptr), m_documentModified(false), m_previewToggled(true)
+ m_highlighterActionGroup(nullptr), m_documentModified(false), m_previewToggled(true),
+ m_indentHandler(nullptr), m_centralSplitter(nullptr)
///- _mainWindowForm(nullptr), _settings(nullptr)
///- m_highlighter(nullptr), _aboutDialogGraphicsView(nullptr), _settingsDialog(nullptr)
-///- m_textEditVScrollBar(nullptr), _toolBarWidget(nullptr), _indentHandler(nullptr)
+///- m_textEditVScrollBar(nullptr), _toolBarWidget(nullptr)
{
// Init of some variables.
m_sourceCodeChanged = false;
@@ -181,6 +183,11 @@ void MainWindow::initMainWindow()
actionExportPDF->setIconSet(TQPixmap(ICONS_PATH + "exportpdf.png"));
actionExportHTML->setIconSet(TQPixmap(ICONS_PATH + "exporthtml.png"));
actionExit->setIconSet(TQPixmap(ICONS_PATH + "system-log-out.png"));
+ // - Indenter menu
+ actionLoadIndenterConfigFile->setIconSet(TQPixmap(ICONS_PATH + "load_indent_cfg.png"));
+ actionSaveIndenterConfigFile->setIconSet(TQPixmap(ICONS_PATH + "save_indent_cfg.png"));
+ actionCreateShellScript->setIconSet(TQPixmap(ICONS_PATH + "shell.png"));
+ actionResetIndenterParameters->setIconSet(TQPixmap(ICONS_PATH + "view-refresh.png"));
// - Setting menu
actionLiveIndentPreview->setIconSet(TQPixmap(ICONS_PATH + "live-preview.png"));
actionEnableSyntaxHighlighting->setIconSet(TQPixmap(ICONS_PATH + "syntax-highlight.png"));
@@ -193,6 +200,11 @@ void MainWindow::initMainWindow()
m_actionClearRecentlyOpenedListId = popupMenuRecentlyOpenedFiles->idAt(
popupMenuRecentlyOpenedFiles->count() - 1);
+ // Central splitter
+ m_centralSplitter = new TQSplitter(this);
+ m_centralSplitter->setChildrenCollapsible(true);
+ setCentralWidget(m_centralSplitter);
+
// Handle last opened window size
// ------------------------------
bool maximized = m_settings->getValueByName("WindowIsMaximized").toBool();
@@ -242,6 +254,7 @@ void MainWindow::initMainWindow()
connect(actionSaveSourceFileAs, SIGNAL(activated()), this, SLOT(saveasSourceFileDialog()));
connect(actionExportPDF, SIGNAL(activated()), this, SLOT(exportToPDF()));
connect(actionExportHTML, SIGNAL(activated()), this, SLOT(exportToHTML()));
+
///-- connect(actionShowLog, SIGNAL(activated()),
///-- debugging::TSLogger::getInstance(), SLOT(show()));
@@ -301,7 +314,7 @@ void MainWindow::initTextEditor()
// Create the TQScintilla widget and add it to the layout.
try
{
- m_qSciSourceCodeEditor = new TQextScintilla(this);
+ m_qSciSourceCodeEditor = new TQextScintilla(m_centralSplitter);
}
catch (...)
{
@@ -311,7 +324,6 @@ void MainWindow::initTextEditor()
"versions are not mixed.");
exit(1);
}
- setCentralWidget(m_qSciSourceCodeEditor);
// Make some _settings for the TQScintilla widget.
m_qSciSourceCodeEditor->setUtf8(true);
@@ -445,15 +457,15 @@ bool MainWindow::initApplicationLanguage()
*/
void MainWindow::initIndenter()
{
-///-- // Get Id of last selected indenter.
-///-- _currentIndenterID = _settings->getValueByName("selectedIndenter").toInt();
-///--
-///-- // Create the indenter widget with the ID and add it to the layout.
-///-- _indentHandler = new IndentHandler(_currentIndenterID, this, _mainWindowForm->centralwidget);
-///-- _mainWindowForm->vboxLayout->addWidget(_indentHandler);
-///--
+ // Get Id of last selected indenter.
+ m_currentIndenterID = m_settings->getValueByName("SelectedIndenter").toInt();
+
+ // Create the indenter widget with the ID and add it to the layout.
+ m_indentHandler = new IndentHandler(m_currentIndenterID, this, m_centralSplitter);
+ m_centralSplitter->moveToFirst(m_indentHandler);
+
///-- // If _settings for the indenter have changed, let the main window know aboud it.
-///-- connect(_indentHandler, SIGNAL(indenterSettingsChanged()), this,
+///-- connect(m_indentHandler, SIGNAL(indenterSettingsChanged()), this,
///-- SLOT(indentSettingsChangedSlot()));
///--
///-- // Set this true, so the indenter is called at first program start
@@ -463,9 +475,6 @@ void MainWindow::initIndenter()
///-- // Handle if indenter parameter tool tips are enabled
///-- _settings->registerObjectProperty(actionIndenterParameterTooltipsEnabled,
///-- "checked", "indenterParameterTooltipsEnabled");
-///--
-///-- // Add the indenters context menu to the mainwindows menu.
-///-- _mainWindowForm->menuIndenter->addActions(_indentHandler->getIndenterMenuActions());
}
/*
@@ -515,7 +524,7 @@ void MainWindow::openSourceFileDialog(const TQString &fileName)
TQString openedSourceFileContent = "";
TQString fileExtensions = "*.h *.c *.cpp *.*"; // Remove this line when the indenter is available
///-- TQString fileExtensions = tr("Supported by indenter") + " (" +
-///-- _indentHandler->getPossibleIndenterFileExtensions() + ");;" + tr("All files") + " (*.*)";
+///-- m_indentHandler->getPossibleIndenterFileExtensions() + ");;" + tr("All files") + " (*.*)";
TQString fileToOpen = fileName;
if (fileToOpen.isEmpty())
@@ -558,7 +567,7 @@ bool MainWindow::saveasSourceFileDialog(TQAction *chosenEncodingAction)
{
TQString fileExtensions = "*.h *.c *.cpp *.*"; // Remove this line when the indenter is available
//--- TQString fileExtensions = tr("Supported by indenter") + " (" +
-//--- _indentHandler->getPossibleIndenterFileExtensions() + ");;" + tr("All files") + " (*.*)";
+//--- m_indentHandler->getPossibleIndenterFileExtensions() + ");;" + tr("All files") + " (*.*)";
TQString fileName = TQFileDialog::getSaveFileName(m_currentSourceFile, fileExtensions, this, nullptr,
tr("Save source code file"));
@@ -674,7 +683,7 @@ void MainWindow::updateSourceView()
void MainWindow::callIndenter()
{
TQApplication::setOverrideCursor(TQCursor(TQt::WaitCursor));
-///-- m_sourceFormattedContent = _indentHandler->callIndenter(m_sourceFileContent,
+///-- m_sourceFormattedContent = m_indentHandler->callIndenter(m_sourceFileContent,
///-- m_currentSourceFileExtension);
updateSourceView();
TQApplication::restoreOverrideCursor();
@@ -1112,7 +1121,7 @@ void MainWindow::closeEvent(TQCloseEvent *event)
///-- /*
///-- \brief This function is setup to capture tooltip events.
///--
-///-- All widgets that are created by the _indentHandler object and are responsible
+///-- All widgets that are created by the m_indentHandler object and are responsible
///-- for indenter parameters are connected with this event filter.
///-- So depending on the _settings the tooltips can be enabled and disabled for these widgets.
///-- */
@@ -1377,9 +1386,6 @@ void MainWindow::numberOfLinesChanged()
///-- // Translate the toolbar.
///-- _toolBarWidget->retranslateUi(_mainWindowForm->toolBar);
///--
-///-- // Translate the indent handler widget.
-///-- _indentHandler->retranslateUi();
-///--
///-- // Translate the load encoding menu.
///-- TQList<TQAction*> encodingActionList = m_encodingActionGroup->actions();
///-- for (i = 0; i < encodingActionList.size(); i++)
diff --git a/src/MainWindow.h b/src/MainWindow.h
index 022f967..61a9ff9 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -30,12 +30,13 @@
class AboutDialog;
/// class AboutDialogGraphicsView;
/// class UiGuiHighlighter;
-/// class IndentHandler
+class IndentHandler;
class UiGuiSettings;
class ToolBarWidget;
///
/// class TQActionGroup;
class TQextScintilla;
+class TQSplitter;
class TQLabel;
class TQScrollBar;
class TQTranslator;
@@ -50,10 +51,10 @@ class MainWindow : public MainWindowBase
MainWindow(TQString file2OpenOnStart = "", TQWidget *parent = NULL);
~MainWindow();
-///-- protected:
+ protected:
void closeEvent(TQCloseEvent *event);
///-- bool eventFilter(TQObject *obj, TQEvent *event);
-///--
+
private slots:
void openSourceFileDialog(const TQString &fileName = TQString::null);
bool saveSourceFile();
@@ -98,6 +99,7 @@ class MainWindow : public MainWindowBase
///-- void dragEnterEvent(TQDragEnterEvent *event);
///-- void dropEvent(TQDropEvent *event);
+ TQSplitter *m_centralSplitter;
TQextScintilla *m_qSciSourceCodeEditor;
UiGuiSettings *m_settings;
@@ -113,7 +115,7 @@ class MainWindow : public MainWindowBase
int m_actionClearRecentlyOpenedListId;
int m_recentlyOpenedListMaxSize;
///-- int _textEditLastScrollPos;
-///-- int _currentIndenterID;
+ int m_currentIndenterID;
int m_oldLinesNumber;
bool m_loadLastSourceCodeFileOnStartup;
TQString m_currentSourceFile;
@@ -134,7 +136,7 @@ class MainWindow : public MainWindowBase
TQStringList m_recentlyOpenedList;
ToolBarWidget *m_toolBarWidget;
-///-- IndentHandler *_indentHandler;
+ IndentHandler *m_indentHandler;
TQLabel *m_textEditLineColumnInfoLabel;
};
diff --git a/src/MainWindowBase.ui b/src/MainWindowBase.ui
index 6b55170..48679d6 100755
--- a/src/MainWindowBase.ui
+++ b/src/MainWindowBase.ui
@@ -13,17 +13,6 @@
<height>633</height>
</rect>
</property>
- <hbox>
- <property name="name">
- <cstring>centralWidget</cstring>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- </hbox>
</widget>
<menubar>
<property name="name">
@@ -60,6 +49,10 @@
<action name="actionExit" />
</item>
<item text="&amp;Indenter" name="menuIndenter">
+ <action name="actionLoadIndenterConfigFile"/>
+ <action name="actionSaveIndenterConfigFile"/>
+ <action name="actionCreateShellScript"/>
+ <action name="actionResetIndenterParameters"/>
</item>
<item text="&amp;Settings" name="menuSettings">
<action name="actionLiveIndentPreview"/>
@@ -234,6 +227,56 @@
</action>
<action>
<property name="name">
+ <cstring>actionLoadIndenterConfigFile</cstring>
+ </property>
+ <property name="text">
+ <string>Load Indenter Config File</string>
+ </property>
+ <property name="statusTip">
+ <string>Opens a file dialog to load the original config file of the indenter.</string>
+ </property>
+ <property name="accel">
+ <string>Alt+O</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>actionSaveIndenterConfigFile</cstring>
+ </property>
+ <property name="text">
+ <string>Save Indenter Config File</string>
+ </property>
+ <property name="statusTip">
+ <string>Opens a dialog to save the current indenter configuration to a file.</string>
+ </property>
+ <property name="accel">
+ <string>Alt+S</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>actionCreateShellScript</cstring>
+ </property>
+ <property name="text">
+ <string>Create Indenter Call Shell Script</string>
+ </property>
+ <property name="statusTip">
+ <string>Create a shell script that calls the current selected indenter for formatting a given file with the current indent settings.</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>actionResetIndenterParameters</cstring>
+ </property>
+ <property name="text">
+ <string>Reset indenter parameters</string>
+ </property>
+ <property name="statusTip">
+ <string>Resets all indenter parameters to the default values.</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
<cstring>actionLiveIndentPreview</cstring>
</property>
<property name="toggleAction">
diff --git a/src/SettingsPaths.cpp b/src/SettingsPaths.cpp
index 84fecb9..e5410da 100644
--- a/src/SettingsPaths.cpp
+++ b/src/SettingsPaths.cpp
@@ -63,10 +63,6 @@ void SettingsPaths::init()
m_applicationBinaryPath.truncate(m_applicationBinaryPath.length() - 1);
}
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- m_applicationBinaryPath += "/plugins/uigui";
-#endif
-
// If the "config" directory is a subdir of the applications binary path, use this one
// (portable mode)
m_settingsPath = m_applicationBinaryPath + "/config";
diff --git a/src/__TODO/IndentHandler.cpp b/src/__TODO/IndentHandler.cpp
deleted file mode 100644
index 83c79ed..0000000
--- a/src/__TODO/IndentHandler.cpp
+++ /dev/null
@@ -1,2042 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2006-2012 by Thomas Schweitzer *
- * thomas-schweitzer(at)arcor.de *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License version 2.0 as *
- * published by the Free Software Foundation. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program in the file LICENSE.GPL; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-
-#include "IndentHandler.h"
-
-#include "UiGuiSettings.h"
-#include "UiGuiErrorMessage.h"
-#include "TemplateBatchScript.h"
-#include "UiGuiIniFileParser.h"
-#include "SettingsPaths.h"
-
-#include <tntqtoolbox.h>
-#include <tqvboxlayout.h>
-#include <tntqapplication.h>
-#include <tntqcheckbox.h>
-#include <tntqcombobox.h>
-#include <tntqtoolbutton.h>
-#include <tntqfile.h>
-#include <tntqprocess.h>
-#include <tntqsettings.h>
-#include <tntqstringlist.h>
-#include <tntqlineedit.h>
-#include <tntqspinbox.h>
-#include <tntqlabel.h>
-#include <tqbytearray.h>
-#include <tntqdir.h>
-#include <tntqmessagebox.h>
-#include <tntqmainwindow.h>
-#include <tntqtextstream.h>
-#include <tntqtextcodec.h>
-#include <tqtscript.h>
-#include <tqdesktopservices.h>
-#include <tqmenu.h>
-#include <tntqaction.h>
-#include <tqcontextmenuevent.h>
-#include <tntqfiledialog.h>
-#include <tqtdebug.h>
-
-#ifdef Q_OS_WIN32
- #include <Windows.h>
-#endif
-
-// Avoid unused parameter warnings by this template
-template<typename T>
-inline void UNUSED_PARAMETER_WARNING_AVOID(T)
-{
-}
-
-// \defgroup grp_Indenter All concerning handling of the indenter.
-
-/*
- \class IndentHandler
- \ingroup grp_Indenter
- \brief A widget for handling many indenters that are configured by an ini file.
-
- This is a widget that is used by the main window. It handles access to the
- indenter config file and calls the chosen indenter to reformat the source text.
- Calls the indenter each time a setting has been changed and informs
- the main window about the reformatted source code.
-*/
-
-
-/*
- \brief Constructor of the indent handler.
-
- By calling this constructor the indenter to be loaded, can be selected by setting
- its \a indenterID, which is the number of found indenter ini files in alphabetic
- order starting at index 0.
- */
-IndentHandler::IndentHandler(int indenterID, TQWidget *mainWindow, TQWidget *parent) :
- TQWidget(parent), _indenterSelectionCombobox(NULL), _indenterParameterHelpButton(NULL),
- _toolBoxContainerLayout(NULL), _indenterParameterCategoriesToolBox(NULL), _indenterSettings(
- NULL), _mainWindow(NULL), _errorMessageDialog(NULL), _menuIndenter(NULL),
- _actionLoadIndenterConfigFile(NULL), _actionSaveIndenterConfigFile(NULL),
- _actionCreateShellScript(NULL), _actionResetIndenterParameters(NULL),
- _parameterChangedCallback(NULL), _windowClosedCallback(NULL)
-{
- Q_ASSERT_X(indenterID >= 0, "IndentHandler", "the selected indenterID is < 0");
-
- setObjectName(TQString::fromUtf8("indentHandler"));
-
- _mainWindow = mainWindow;
-
- initIndenterMenu();
-
- connect(_actionLoadIndenterConfigFile, SIGNAL(triggered()), this, SLOT(openConfigFileDialog()));
- connect(_actionSaveIndenterConfigFile, SIGNAL(triggered()), this, SLOT(
- saveasIndentCfgFileDialog()));
- connect(_actionCreateShellScript, SIGNAL(triggered()), this,
- SLOT(createIndenterCallShellScript()));
- connect(_actionResetIndenterParameters, SIGNAL(triggered()), this,
- SLOT(resetIndenterParameter()));
-
- // define this widgets resize behavior
- setSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Expanding);
-
- // create vertical layout box, into which the toolbox will be added
- _toolBoxContainerLayout = new TQVBoxLayout(this);
- _toolBoxContainerLayout->setMargin(2);
-
- // Create horizontal layout for indenter selector and help button.
- TQHBoxLayout *hboxLayout = new TQHBoxLayout();
- //hboxLayout->setMargin(2);
- _toolBoxContainerLayout->addLayout(hboxLayout);
-
- // Create the indenter selection combo box.
- _indenterSelectionCombobox = new TQComboBox(this);
- _indenterSelectionCombobox->setSizeAdjustPolicy(TQComboBox::AdjustToMinimumContentsLengthWithIcon);
- _indenterSelectionCombobox->setMinimumContentsLength(20);
- connect(_indenterSelectionCombobox, SIGNAL(activated(int)), this, SLOT(setIndenter(int)));
- UiGuiSettings::getInstance()->registerObjectProperty(_indenterSelectionCombobox, "currentIndex",
- "selectedIndenter");
- hboxLayout->addWidget(_indenterSelectionCombobox);
-
- // Create the indenter parameter help button.
- _indenterParameterHelpButton = new TQToolButton(this);
- _indenterParameterHelpButton->setObjectName(TQString::fromUtf8("indenterParameterHelpButton"));
- _indenterParameterHelpButton->setIcon(TQIcon(TQString::fromUtf8(":/mainWindow/help.png")));
- hboxLayout->addWidget(_indenterParameterHelpButton);
- // Handle if the indenter parameter help button is pressed.
- connect(_indenterParameterHelpButton, SIGNAL(clicked()), this, SLOT(showIndenterManual()));
-
- // create a toolbox and set its resize behavior
- _indenterParameterCategoriesToolBox = new TQToolBox(this);
- _indenterParameterCategoriesToolBox->setObjectName(TQString::fromUtf8(
- "_indenterParameterCategoriesToolBox"));
-
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- connect(_indenterParameterCategoriesToolBox, SIGNAL(currentChanged(int)), this,
- SLOT(updateDrawing()));
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
-
- //_indenterParameterCategoriesToolBox->setSizePolicy( TQSizePolicy::Expanding,
- // TQSizePolicy::Expanding );
- //_indenterParameterCategoriesToolBox->setMaximumSize(TQSize(16777215, 16777215));
- // insert the toolbox into the vlayout
- _toolBoxContainerLayout->addWidget(_indenterParameterCategoriesToolBox);
-
- _indenterExecutableCallString = "";
- _indenterExecutableSuffix = "";
-
- _indenterDirctoryStr = SettingsPaths::getIndenterPath();
- _tempDirctoryStr = SettingsPaths::getTempPath();
- _settingsDirctoryStr = SettingsPaths::getSettingsPath();
- TQDir indenterDirctory = TQDir(_indenterDirctoryStr);
-
- if (_mainWindow != NULL)
- {
- _errorMessageDialog = new UiGuiErrorMessage(_mainWindow);
- }
- else
- {
- _errorMessageDialog = new UiGuiErrorMessage(this);
- }
-
- _indenterIniFileList = indenterDirctory.entryList(TQStringList("uigui_*.ini"));
- if (_indenterIniFileList.count() > 0)
- {
- // Take care if the selected indenterID is smaller or greater than the number of existing
- // indenters
- if (indenterID < 0)
- {
- indenterID = 0;
- }
- if (indenterID >= _indenterIniFileList.count())
- {
- indenterID = _indenterIniFileList.count() - 1;
- }
-
- // Reads and parses the by indenterID defined indent ini file and creates toolbox entries
- readIndentIniFile(_indenterDirctoryStr + "/" + _indenterIniFileList.at(indenterID));
-
- // Find out how the indenter can be executed.
- createIndenterCallString();
-
- // Load the users last settings made for this indenter.
- loadConfigFile(_settingsDirctoryStr + "/" + _indenterFileName + ".cfg");
-
- // Fill the indenter selection combo box with the list of available indenters.
- if (!getAvailableIndenters().isEmpty())
- {
- _indenterSelectionCombobox->addItems(getAvailableIndenters());
- _indenterSelectionCombobox->setCurrentIndex(indenterID);
- connect(_indenterSelectionCombobox, SIGNAL(currentIndexChanged(int)), this,
- SIGNAL(selectedIndenterIndexChanged(int)));
- }
- }
- else
- {
- _errorMessageDialog->showMessage(tr("No indenter ini files"),
- tr("There exists no indenter ini files in the directory \"") +
- TQDir(_indenterDirctoryStr).absolutePath() + "\".");
- }
-
- retranslateUi();
-}
-
-/*
- \brief Implicitly writes the current indenter parameters to the indenters config file.
- */
-IndentHandler::~IndentHandler()
-{
- // Generate the parameter string that will be saved to the indenters config file.
- TQString parameterString = getParameterString();
- if (!_indenterFileName.isEmpty())
- {
- saveConfigFile(_settingsDirctoryStr + "/" + _indenterFileName + ".cfg", parameterString);
- }
-
- delete _errorMessageDialog;
-}
-
-/*
- \brief Initializes the context menu used for some actions like saving the indenter config file.
- */
-void IndentHandler::initIndenterMenu()
-{
- if (_menuIndenter == NULL)
- {
- _actionLoadIndenterConfigFile = new TQAction(this);
- _actionLoadIndenterConfigFile->setObjectName(TQString::fromUtf8("_actionLoadIndenterConfigFile"));
- _actionLoadIndenterConfigFile->setIcon(TQIcon(TQString::fromUtf8(
- ":/mainWindow/load_indent_cfg.png")));
-
- _actionSaveIndenterConfigFile = new TQAction(this);
- _actionSaveIndenterConfigFile->setObjectName(TQString::fromUtf8("_actionSaveIndenterConfigFile"));
- _actionSaveIndenterConfigFile->setIcon(TQIcon(TQString::fromUtf8(
- ":/mainWindow/save_indent_cfg.png")));
-
- _actionCreateShellScript = new TQAction(this);
- _actionCreateShellScript->setObjectName(TQString::fromUtf8("_actionCreateShellScript"));
- _actionCreateShellScript->setIcon(TQIcon(TQString::fromUtf8(":/mainWindow/shell.png")));
-
- _actionResetIndenterParameters = new TQAction(this);
- _actionResetIndenterParameters->setObjectName(TQString::fromUtf8(
- "_actionResetIndenterParameters"));
- _actionResetIndenterParameters->setIcon(TQIcon(TQString::fromUtf8(
- ":/mainWindow/view-refresh.png")));
-
- _menuIndenter = new TQMenu(this);
- _menuIndenter->setObjectName(TQString::fromUtf8("_menuIndenter"));
- _menuIndenter->addAction(_actionLoadIndenterConfigFile);
- _menuIndenter->addAction(_actionSaveIndenterConfigFile);
- _menuIndenter->addAction(_actionCreateShellScript);
- _menuIndenter->addAction(_actionResetIndenterParameters);
- }
-}
-
-/*
- \brief Returns the context menu used for some actions like saving the indenter config file.
- */
-TQMenu* IndentHandler::getIndenterMenu()
-{
- return _menuIndenter;
-}
-
-/*
- \brief Returns the actions of the context menu used for some actions like saving the indenter config file.
- */
-TQList<TQAction*> IndentHandler::getIndenterMenuActions()
-{
- TQList<TQAction*> actionList;
- actionList << _actionLoadIndenterConfigFile << _actionSaveIndenterConfigFile <<
- _actionCreateShellScript << _actionResetIndenterParameters;
- return actionList;
-}
-
-/*
- \brief Opens the context menu, used for some actions like saving the indenter config file, at the event position.
- */
-void IndentHandler::contextMenuEvent(TQContextMenuEvent *event)
-{
- getIndenterMenu()->exec(event->globalPos());
-}
-
-/*
- \brief Creates the content for a shell script that can be used as a external tool call
- to indent an as parameter defined file.
- */
-TQString IndentHandler::generateShellScript(const TQString &configFilename)
-{
- TQString indenterCompleteCallString;
- TQString parameterInputFile;
- TQString parameterOuputFile;
- TQString parameterParameterFile;
- TQString replaceInputFileCommand;
-
- // Define the placeholder for parameter variables either in batch or bash programming.
-#if defined (Q_OS_WIN32)
- TQString shellParameterPlaceholder = "%1";
-#else
- TQString shellParameterPlaceholder = "$1";
-#endif
-
- parameterInputFile = " " + _inputFileParameter + "\"" + shellParameterPlaceholder + "\"";
-
- if (_outputFileParameter != "none" && _outputFileParameter != "stdout")
- {
- if (_outputFileName == _inputFileName)
- {
- parameterOuputFile = " " + _outputFileParameter + "\"" + shellParameterPlaceholder + "\"";
- }
- else
- {
- parameterOuputFile = " " + _outputFileParameter + _outputFileName + ".tmp";
- }
- }
-
- // If the config file name is empty it is assumed that all parameters are sent via command line
- // call
- if (_globalConfigFilename.isEmpty())
- {
- parameterParameterFile = " " + getParameterString();
- }
- // else if needed add the parameter to the indenter call string where the config file can be
- // found.
- else if (_useCfgFileParameter != "none")
- {
- parameterParameterFile = " " + _useCfgFileParameter + "\"./" + configFilename + "\"";
- }
-
- // Assemble indenter call string for parameters according to the set order.
- if (_parameterOrder == "ipo")
- {
- indenterCompleteCallString = parameterInputFile + parameterParameterFile + parameterOuputFile;
- }
- else if (_parameterOrder == "pio")
- {
- indenterCompleteCallString = parameterParameterFile + parameterInputFile + parameterOuputFile;
- }
- else if (_parameterOrder == "poi")
- {
- indenterCompleteCallString = parameterParameterFile + parameterOuputFile + parameterInputFile;
- }
- else
- {
- indenterCompleteCallString = parameterInputFile + parameterOuputFile + parameterParameterFile;
- }
-
- // Generate the indenter call string either for win32 or other systems.
-#if defined (Q_OS_WIN32)
- indenterCompleteCallString = _indenterExecutableCallString + indenterCompleteCallString;
-#else
- indenterCompleteCallString = "#!/bin/bash\n" + _indenterExecutableCallString +
- indenterCompleteCallString;
-#endif
-
- // If the indenter writes to stdout pipe the output into a file
- if (_outputFileParameter == "stdout")
- {
- indenterCompleteCallString = indenterCompleteCallString + " >" + _outputFileName + ".tmp";
- }
-
- // If the output filename is not the same as the input filename copy the output over the input.
- if (_outputFileName != _inputFileName)
- {
-#if defined (Q_OS_WIN32)
- replaceInputFileCommand = "move /Y " + _outputFileName + ".tmp \"" + shellParameterPlaceholder +
- "\"\n";
-#else
- replaceInputFileCommand = "mv " + _outputFileName + ".tmp \"" + shellParameterPlaceholder +
- "\"\n";
-#endif
- }
-
-#if defined (Q_OS_WIN32)
- TQString shellScript(TemplateBatchScript::getTemplateBatchScript());
- shellScript = shellScript.replace("__INDENTERCALLSTRING2__",
- indenterCompleteCallString + "\n" + replaceInputFileCommand);
- indenterCompleteCallString = indenterCompleteCallString.replace("%1", "%%G");
- replaceInputFileCommand = replaceInputFileCommand.replace("%1", "%%G");
- shellScript = shellScript.replace("__INDENTERCALLSTRING1__",
- indenterCompleteCallString + "\n" + replaceInputFileCommand);
-#else
- TQString shellScript(TemplateBatchScript::getTemplateBatchScript());
- shellScript = shellScript.replace("__INDENTERCALLSTRING2__",
- indenterCompleteCallString + "\n" + replaceInputFileCommand);
- indenterCompleteCallString = indenterCompleteCallString.replace("$1", "$file2indent");
- replaceInputFileCommand = replaceInputFileCommand.replace("$1", "$file2indent");
- shellScript = shellScript.replace("__INDENTERCALLSTRING1__",
- indenterCompleteCallString + "\n" + replaceInputFileCommand);
-#endif
-
- return shellScript;
-}
-
-/*
- \brief Format \a sourceCode by calling the indenter.
-
- The \a inputFileExtension has to be given as parameter so the called indenter
- can identify the programming language if needed.
- */
-TQString IndentHandler::callIndenter(TQString sourceCode, TQString inputFileExtension)
-{
- if (_indenterExecutableSuffix == ".js")
- {
- return callJavaScriptIndenter(sourceCode);
- }
- else
- {
- return callExecutableIndenter(sourceCode, inputFileExtension);
- }
-}
-
-/*
- \brief Format \a sourceCode by calling the interpreted JavaScript code of the indenter.
-
- The \a inputFileExtension has to be given as parameter so the called indenter
- can identify the programming language if needed.
- */
-TQString IndentHandler::callJavaScriptIndenter(TQString sourceCode)
-{
- TQScriptEngine engine;
-
- engine.globalObject().setProperty("unformattedCode", sourceCode);
-
- TQFile jsDecoderFile(_indenterExecutableCallString);
- TQString jsDecoderCode;
- if (jsDecoderFile.open(TQFile::ReadOnly))
- {
- jsDecoderCode = jsDecoderFile.readAll();
- }
- jsDecoderFile.close();
-
- TQScriptValue value = engine.evaluate(jsDecoderCode);
- return value.toString();
-}
-
-/*
- \brief Format \a sourceCode by calling the binary executable of the indenter.
-
- The \a inputFileExtension has to be given as parameter so the called indenter
- can identify the programming language if needed.
- */
-TQString IndentHandler::callExecutableIndenter(TQString sourceCode, TQString inputFileExtension)
-{
- Q_ASSERT_X(!_inputFileName.isEmpty(), "callIndenter", "_inputFileName is empty");
- // Q_ASSERT_X( !_outputFileName.isEmpty(), "callIndenter", "_outputFileName is empty" );
- Q_ASSERT_X(!_indenterFileName.isEmpty(), "callIndenter", "_indenterFileName is empty");
-
- if (_indenterFileName.isEmpty())
- {
- return "";
- }
-
- TQString formattedSourceCode;
- TQString indenterCompleteCallString;
- TQString parameterInputFile;
- TQString parameterOuputFile;
- TQString parameterParameterFile;
- TQProcess indentProcess;
- TQString processReturnString;
-
- // Generate the parameter string that will be saved to the indenters config file
- TQString parameterString = getParameterString();
-
- if (!_globalConfigFilename.isEmpty())
- {
- saveConfigFile(_tempDirctoryStr + "/" + _globalConfigFilename, parameterString);
- }
-
- // Only add a dot to file extension if the string is not empty
- if (!inputFileExtension.isEmpty())
- {
- inputFileExtension = "." + inputFileExtension;
- }
-
- // Delete any previously used input src file and create a new input src file.
- TQFile::remove(_tempDirctoryStr + "/" + _inputFileName + inputFileExtension);
- TQFile inputSrcFile(_tempDirctoryStr + "/" + _inputFileName + inputFileExtension);
- // Write the source code to the input file for the indenter
- if (inputSrcFile.open(TQFile::ReadWrite | TQFile::Text))
- {
- inputSrcFile.write(sourceCode.toUtf8());
- inputSrcFile.close();
- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Wrote to be indented source code to file " <<
- inputSrcFile.fileName();
- }
- else
- {
- qCritical() << __LINE__ << " " << __FUNCTION__ <<
- ": Couldn't write to be indented source code to file " << inputSrcFile.fileName();
- }
-
- // Set the input file for the to be called indenter.
- if (_inputFileParameter.trimmed() == "<" || _inputFileParameter == "stdin")
- {
- parameterInputFile = "";
- indentProcess.setStandardInputFile(inputSrcFile.fileName());
- }
- else
- {
- parameterInputFile = " " + _inputFileParameter + _inputFileName + inputFileExtension;
- }
-
- // Set the output file for the to be called indenter.
- if (_outputFileParameter != "none" && _outputFileParameter != "stdout")
- {
- parameterOuputFile = " " + _outputFileParameter + _outputFileName + inputFileExtension;
- }
-
-#ifdef Q_OS_WIN32
- // Paths may contain Unicode or other foreign characters. Windows commands line tools will
- // receive als falsely encoded path string by TQProcess or they connot correctly handle
- // the Unicode path on their own.
- // Because of this the path gets converted to Windows short paths using the 8.3 notation.
-
- tqDebug() << __LINE__ << " " << __FUNCTION__ <<
- ": Temp dir before trying to convert it to short Windows path is" << _tempDirctoryStr;
-
- // At first convert the temp path to Windows like separators.
- TQString tempDirctoryStrHelper =
- TQDir::toNativeSeparators(_tempDirctoryStr).replace("\\", "\\\\");
- // Then convert the TQString to a WCHAR array and NULL terminate it.
- WCHAR *tempDirctoryWindowsStr = new WCHAR[tempDirctoryStrHelper.length() + 1];
- tempDirctoryStrHelper.toWCharArray(tempDirctoryWindowsStr);
- tempDirctoryWindowsStr[tempDirctoryStrHelper.length()] = (WCHAR)NULL;
-
- // Get the length of the resulting short path.
- long length = 0;
- TCHAR *buffer = NULL;
- length = GetShortPathName((LPCTSTR)tempDirctoryWindowsStr, NULL, 0);
-
- // If the short path could be retrieved, create a correct sized buffer, store the
- // short path in it and convert all back to TQString.
- if (length != 0)
- {
- #ifdef UNICODE
- buffer = new WCHAR[length];
- length = GetShortPathName((LPCTSTR)tempDirctoryWindowsStr, buffer, length);
- tempDirctoryStrHelper = TQString::fromWCharArray(buffer);
- #else
- buffer = new TCHAR[length];
- length = GetShortPathName((LPCTSTR)tempDirctoryWindowsStr, buffer, length);
- tempDirctoryStrHelper = buffer;
- #endif
- _tempDirctoryStr = TQDir::fromNativeSeparators(tempDirctoryStrHelper).replace("//", "/");
- delete[] buffer;
-
- // Check whether the short path still contains some kind of non ascii characters.
- if (_tempDirctoryStr.length() != _tempDirctoryStr.toAscii().length())
- {
- tqWarning() << __LINE__ << " " << __FUNCTION__ <<
- ": Shortened path still contains non ascii characters. Could cause some indenters not to work properly!";
- }
- }
- else
- {
- tqWarning() << __LINE__ << " " << __FUNCTION__ <<
- ": Couldn't retrieve a short version of the temporary path!";
- }
-
- tqDebug() << __LINE__ << " " << __FUNCTION__ <<
- ": Temp dir after trying to convert it to short Windows path is " << _tempDirctoryStr;
-
- delete[] tempDirctoryWindowsStr;
-#endif
-
- // If the config file name is empty it is assumed that all parameters are sent via command line
- // call
- if (_globalConfigFilename.isEmpty())
- {
- parameterParameterFile = " " + parameterString;
- }
- // if needed add the parameter to the indenter call string where the config file can be found
- else if (_useCfgFileParameter != "none")
- {
- parameterParameterFile = " " + _useCfgFileParameter + "\"" + _tempDirctoryStr + "/" +
- _globalConfigFilename + "\"";
- }
-
- // Assemble indenter call string for parameters according to the set order.
- if (_parameterOrder == "ipo")
- {
- indenterCompleteCallString = parameterInputFile + parameterParameterFile + parameterOuputFile;
- }
- else if (_parameterOrder == "pio")
- {
- indenterCompleteCallString = parameterParameterFile + parameterInputFile + parameterOuputFile;
- }
- else if (_parameterOrder == "poi")
- {
- indenterCompleteCallString = parameterParameterFile + parameterOuputFile + parameterInputFile;
- }
- else
- {
- indenterCompleteCallString = parameterInputFile + parameterOuputFile + parameterParameterFile;
- }
-
- // If no indenter executable call string could be created before, show an error message.
- if (_indenterExecutableCallString.isEmpty())
- {
- _errorMessageDialog->showMessage(tr("No indenter executable"), tr(
- "There exists no indenter executable with the name \"%1\" in the directory \"%2\" nor in the global environment.").arg(
- _indenterFileName).arg(_indenterDirctoryStr));
- return sourceCode;
- }
-
- // Generate the indenter call string either for win32 or other systems.
- indenterCompleteCallString = _indenterExecutableCallString + indenterCompleteCallString;
-
- // errors and standard outputs from the process call are merged together
- //indentProcess.setReadChannelMode(TQProcess::MergedChannels);
-
- // Set the directory where the indenter will be executed for the process' environment as PWD.
- TQStringList env = indentProcess.environment();
- env << "PWD=" + TQFileInfo(_tempDirctoryStr).absoluteFilePath();
- indentProcess.setEnvironment(env);
-
- // Set the directory for the indenter execution
- indentProcess.setWorkingDirectory(TQFileInfo(_tempDirctoryStr).absoluteFilePath());
-
- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Will call the indenter in the directory " <<
- indentProcess.workingDirectory() << " using this commandline call: " <<
- indenterCompleteCallString;
-
- indentProcess.start(indenterCompleteCallString);
-
- processReturnString = "";
- bool calledProcessSuccessfully = indentProcess.waitForFinished(10000);
- // test if there was an error during starting the process of the indenter
- if (!calledProcessSuccessfully)
- {
- processReturnString = "<html><body>";
- processReturnString += tr("<b>Returned error message:</b> ") + indentProcess.errorString() +
- "<br>";
-
- switch (indentProcess.error())
- {
- case TQProcess::FailedToStart:
- {
- processReturnString += tr("<b>Reason could be:</b> ") +
- "The process failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program.<br>";
- break;
- }
-
- case TQProcess::Crashed:
- {
- processReturnString += "The process crashed some time after starting successfully.<br>";
- break;
- }
-
- case TQProcess::Timedout:
- {
- processReturnString +=
- "The called indenter did not response for over 10 seconds, so aborted its execution.<br>";
- break;
- }
-
- case TQProcess::WriteError:
- {
- processReturnString +=
- "An error occurred when attempting to write to the process. For example, the process may not be running, or it may have closed its input channel.<br>";
- break;
- }
-
- case TQProcess::ReadError:
- {
- processReturnString +=
- "An error occurred when attempting to read from the process. For example, the process may not be running.<br>";
- break;
- }
-
- case TQProcess::UnknownError:
- {
- processReturnString +=
- "An unknown error occurred. This is the default return value of error().<br>";
- break;
- }
-
- default:
- {
- break;
- }
- }
- processReturnString += tr("<br><b>Callstring was:</b> ") + encodeToHTML(
- indenterCompleteCallString);
- processReturnString += tr("<br><br><b>Indenter output was:</b><pre>") + "<br>" + "(STDOUT):" +
- encodeToHTML(indentProcess.readAllStandardOutput()) + "<br>" + "(STDERR):" +
- encodeToHTML(indentProcess.readAllStandardError()) + "<br>" + "</pre></html></body>";
- tqWarning() << __LINE__ << " " << __FUNCTION__ << processReturnString;
- TQApplication::restoreOverrideCursor();
- _errorMessageDialog->showMessage(tr("Error calling Indenter"), processReturnString);
- }
-
- // If the indenter returned an error code != 0 show its output.
- if (indentProcess.exitCode() != 0)
- {
- TQString exitCode;
- exitCode.setNum(indentProcess.exitCode());
- processReturnString = tr("<b>Indenter returned with exit code:</b> ") + exitCode + "<br>" + tr(
- "<b>Indent console output was:</b> ") + "<br>" + "(STDOUT):" + encodeToHTML(
- indentProcess.readAllStandardOutput()) + "<br>" + "(STDERR):" + encodeToHTML(
- indentProcess.readAllStandardError()) + "<br>" + tr("<br><b>Callstring was:</b> ") +
- encodeToHTML(indenterCompleteCallString) + "</html></body>";
- tqWarning() << __LINE__ << " " << __FUNCTION__ << processReturnString;
- TQApplication::restoreOverrideCursor();
- _errorMessageDialog->showMessage(tr("Indenter returned error"), processReturnString);
- }
-
- // Only get the formatted source code, if calling the indenter did succeed.
- if (calledProcessSuccessfully)
- {
- // If the indenter results are written to stdout, read them from there...
- if (indentProcess.exitCode() == 0 && _outputFileParameter == "stdout")
- {
- formattedSourceCode = indentProcess.readAllStandardOutput();
- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Read indenter output from StdOut.";
- }
- // ... else read the output file generated by the indenter call.
- else
- {
- TQFile outSrcFile(_tempDirctoryStr + "/" + _outputFileName + inputFileExtension);
- if (outSrcFile.open(TQFile::ReadOnly | TQFile::Text))
- {
- TQTextStream outSrcStrm(&outSrcFile);
- outSrcStrm.setCodec(TQTextCodec::codecForName("UTF-8"));
- formattedSourceCode = outSrcStrm.readAll();
- outSrcFile.close();
- tqDebug() << __LINE__ << " " << __FUNCTION__ << ": Read indenter output from file " <<
- outSrcFile.fileName();
- }
- else
- {
- qCritical() << __LINE__ << " " << __FUNCTION__ <<
- ": Couldn't read indenter output from file " << outSrcFile.fileName();
- }
- }
- }
- else
- {
- return sourceCode;
- }
-
- // Delete the temporary input and output files.
- TQFile::remove(_tempDirctoryStr + "/" + _outputFileName + inputFileExtension);
- TQFile::remove(_tempDirctoryStr + "/" + _inputFileName + inputFileExtension);
-
- return formattedSourceCode;
-}
-
-/*
- \brief Generates and returns a string with all parameters needed to call the indenter.
- */
-TQString IndentHandler::getParameterString()
-{
- TQString parameterString = "";
-
- // generate parameter string for all boolean values
- foreach(ParamBoolean pBoolean, _paramBooleans)
- {
- if (pBoolean.checkBox->isChecked())
- {
- if (!pBoolean.trueString.isEmpty())
- {
- parameterString += pBoolean.trueString + _cfgFileParameterEnding;
- }
- }
- else
- {
- if (!pBoolean.falseString.isEmpty())
- {
- parameterString += pBoolean.falseString + _cfgFileParameterEnding;
- }
- }
- }
-
- // generate parameter string for all numeric values
- foreach(ParamNumeric pNumeric, _paramNumerics)
- {
- if (pNumeric.valueEnabledChkBox->isChecked())
- {
- parameterString += pNumeric.paramCallName + TQString::number(pNumeric.spinBox->value()) +
- _cfgFileParameterEnding;
- }
- }
-
- // generate parameter string for all string values
- foreach(ParamString pString, _paramStrings)
- {
- if (!pString.lineEdit->text().isEmpty() && pString.valueEnabledChkBox->isChecked())
- {
- // Create parameter definition for each value devided by a | sign.
- foreach(TQString paramValue, pString.lineEdit->text().split("|"))
- {
- parameterString += pString.paramCallName + paramValue + _cfgFileParameterEnding;
- }
- }
- }
-
- // generate parameter string for all multiple choice values
- foreach(ParamMultiple pMultiple, _paramMultiples)
- {
- if (pMultiple.valueEnabledChkBox->isChecked())
- {
- parameterString += pMultiple.choicesStrings.at(pMultiple.comboBox->currentIndex()) +
- _cfgFileParameterEnding;
- }
- }
-
- return parameterString;
-}
-
-/*
- \brief Write settings for the indenter to a config file.
- */
-void IndentHandler::saveConfigFile(TQString filePathName, TQString paramString)
-{
- TQFile::remove(filePathName);
- TQFile cfgFile(filePathName);
-
- cfgFile.open(TQFile::ReadWrite | TQFile::Text);
- cfgFile.write(paramString.toAscii());
- cfgFile.close();
-}
-
-/*
- \brief Load the config file for the indenter and apply the settings made there.
- */
-bool IndentHandler::loadConfigFile(TQString filePathName)
-{
- TQFile cfgFile(filePathName);
- int index;
- int crPos;
- int paramValue = 0;
- TQString paramValueStr = "";
- TQString cfgFileData = "";
-
- // If the to be loaded config file does not exist leave all values as they are and return false.
- if (!cfgFile.exists())
- {
- return false;
- }
- // else if the to be read config file exists, retrieve its whole content.
- else
- {
- // Open the config file and read all data
- cfgFile.open(TQFile::ReadOnly | TQFile::Text);
- cfgFileData = cfgFile.readAll();
- cfgFile.close();
- }
-
- // Search for name of each boolean parameter and set its value if found.
- foreach(ParamBoolean pBoolean, _paramBooleans)
- {
- // boolean value that will be assigned to the checkbox
- bool paramValue = false;
-
- // first search for the longer parameter string
- // the true parameter string is longer than the false string
- if (pBoolean.trueString.length() > pBoolean.falseString.length())
- {
- // search for the true string
- index = cfgFileData.indexOf(pBoolean.trueString, 0, TQt::CaseInsensitive);
- // if true string found set the parameter value to true
- if (index != -1)
- {
- paramValue = true;
- }
- // if true string not found, search for false string
- else
- {
- index = cfgFileData.indexOf(pBoolean.falseString, 0, TQt::CaseInsensitive);
- // if false string found set the parameter value to false
- if (index != -1)
- {
- paramValue = false;
- }
- // neither true nor false parameter found so use default value
- else
- {
- paramValue = _indenterSettings->value(pBoolean.paramName + "/ValueDefault").toBool();
- }
- }
- }
- // the false parameter string is longer than the true string
- else
- {
- // search for the false string
- index = cfgFileData.indexOf(pBoolean.falseString, 0, TQt::CaseInsensitive);
- // if false string found set the parameter value to false
- if (index != -1)
- {
- paramValue = false;
- }
- // if false string not found, search for true string
- else
- {
- index = cfgFileData.indexOf(pBoolean.trueString, 0, TQt::CaseInsensitive);
- // if true string found set the parameter value to true
- if (index != -1)
- {
- paramValue = true;
- }
- // neither true nor false parameter found so use default value
- else
- {
- paramValue = _indenterSettings->value(pBoolean.paramName + "/ValueDefault").toBool();
- }
- }
- }
- pBoolean.checkBox->setChecked(paramValue);
- }
-
- // Search for name of each numeric parameter and set the value found behind it.
- foreach(ParamNumeric pNumeric, _paramNumerics)
- {
- index = cfgFileData.indexOf(pNumeric.paramCallName, 0, TQt::CaseInsensitive);
- // parameter was found in config file
- if (index != -1)
- {
- // set index after the parameter name, so in front of the number
- index += pNumeric.paramCallName.length();
-
- // Find the end of the parameter by searching for set config file parameter ending. Most of
- // time this is a carriage return.
- crPos = cfgFileData.indexOf(_cfgFileParameterEnding, index + 1);
-
- // get the number and convert it to int
- TQString test = cfgFileData.mid(index, crPos - index);
- paramValue = cfgFileData.mid(index, crPos - index).toInt(NULL);
-
- // disable the signal-slot connection. Otherwise signal is emmitted each time when value is
- // set
- TQObject::disconnect(pNumeric.spinBox, SIGNAL(valueChanged(int)), this,
- SLOT(handleChangedIndenterSettings()));
- pNumeric.spinBox->setValue(paramValue);
- pNumeric.valueEnabledChkBox->setChecked(true);
- TQObject::connect(pNumeric.spinBox, SIGNAL(valueChanged(int)), this,
- SLOT(handleChangedIndenterSettings()));
- }
- // parameter was not found in config file
- else
- {
- int defaultValue = _indenterSettings->value(pNumeric.paramName + "/ValueDefault").toInt();
- pNumeric.spinBox->setValue(defaultValue);
- pNumeric.valueEnabledChkBox->setChecked(false);
- }
- }
-
- // Search for name of each string parameter and set it.
- foreach(ParamString pString, _paramStrings)
- {
- paramValueStr = "";
- // The number of the found values for this parameter name.
- int numberOfValues = 0;
- index = cfgFileData.indexOf(pString.paramCallName, 0, TQt::CaseInsensitive);
- // If parameter was found in config file
- if (index != -1)
- {
- while (index != -1)
- {
- numberOfValues++;
-
- // Set index after the parameter name, so it points to the front of the string value.
- index += pString.paramCallName.length();
-
- // Find the end of the parameter by searching for set config file parameter ending. Most of
- // time this is a carriage return.
- crPos = cfgFileData.indexOf(_cfgFileParameterEnding, index + 1);
-
- // Get the string and remember it.
- if (numberOfValues < 2)
- {
- paramValueStr = TQString(cfgFileData.mid(index, crPos - index));
- }
- // If the same parameter has been set multiple times, concatenate the strings dvivided by a
- // |.
- else
- {
- paramValueStr = paramValueStr + "|" + TQString(cfgFileData.mid(index, crPos - index));
- }
-
- // Get next value for this setting, if one exists.
- index = cfgFileData.indexOf(pString.paramCallName, crPos + 1, TQt::CaseInsensitive);
- }
- // Set the text for the line edit.
- pString.lineEdit->setText(paramValueStr);
- pString.valueEnabledChkBox->setChecked(true);
- }
- // Parameter was not found in config file
- else
- {
- paramValueStr = _indenterSettings->value(pString.paramName + "/ValueDefault").toString();
- pString.lineEdit->setText(paramValueStr);
- pString.valueEnabledChkBox->setChecked(false);
- }
- }
-
- // search for name of each multiple choice parameter and set it
- foreach(ParamMultiple pMultiple, _paramMultiples)
- {
- int i = 0;
- index = -1;
-
- // search for all parameter names of the multiple choice list
- // if one is found, set it and leave the while loop
- while (i < pMultiple.choicesStrings.count() && index == -1)
- {
- index = cfgFileData.indexOf(pMultiple.choicesStrings.at(i), 0, TQt::CaseInsensitive);
- if (index != -1)
- {
- pMultiple.comboBox->setCurrentIndex(i);
- pMultiple.valueEnabledChkBox->setChecked(true);
- }
- i++;
- }
-
- // parameter was not set in config file, so use default value
- if (index == -1)
- {
- int defaultValue = _indenterSettings->value(pMultiple.paramName + "/ValueDefault").toInt();
- pMultiple.comboBox->setCurrentIndex(defaultValue);
- pMultiple.valueEnabledChkBox->setChecked(false);
- }
- }
-
- return true;
-}
-
-/*
- \brief Sets all indenter parameters to their default values defined in the ini file.
- */
-void IndentHandler::resetToDefaultValues()
-{
- // Search for name of each boolean parameter and set its value if found.
- foreach(ParamBoolean pBoolean, _paramBooleans)
- {
- // Boolean value that will be assigned to the checkbox.
- bool defaultValue = _indenterSettings->value(pBoolean.paramName + "/ValueDefault").toBool();
- pBoolean.checkBox->setChecked(defaultValue);
- }
-
- // Search for name of each numeric parameter and set the value found behind it.
- foreach(ParamNumeric pNumeric, _paramNumerics)
- {
- int defaultValue = _indenterSettings->value(pNumeric.paramName + "/ValueDefault").toInt();
- pNumeric.spinBox->setValue(defaultValue);
- pNumeric.valueEnabledChkBox->setChecked(_indenterSettings->value(
- pNumeric.paramName + "/Enabled").toBool());
- }
-
- // Search for name of each string parameter and set it.
- foreach(ParamString pString, _paramStrings)
- {
- TQString defaultValue =
- _indenterSettings->value(pString.paramName + "/ValueDefault").toString();
- pString.lineEdit->setText(defaultValue);
- pString.valueEnabledChkBox->setChecked(_indenterSettings->value(
- pString.paramName + "/Enabled").toBool());
- }
-
- // Search for name of each multiple choice parameter and set it.
- foreach(ParamMultiple pMultiple, _paramMultiples)
- {
- int defaultValue = _indenterSettings->value(pMultiple.paramName + "/ValueDefault").toInt();
- pMultiple.comboBox->setCurrentIndex(defaultValue);
- pMultiple.valueEnabledChkBox->setChecked(_indenterSettings->value(pMultiple.paramName +
- "/Enabled").toBool());
- }
-}
-
-/*
- \brief Opens and parses the indenter ini file that is declared by \a iniFilePath.
- */
-void IndentHandler::readIndentIniFile(TQString iniFilePath)
-{
- Q_ASSERT_X(!iniFilePath.isEmpty(), "readIndentIniFile", "iniFilePath is empty");
-
- // open the ini-file that contains all available indenter settings with their additional infos
- _indenterSettings = new UiGuiIniFileParser(iniFilePath);
-
- TQStringList categories;
- //TQString indenterGroupString = "";
- TQString paramToolTip = "";
-
- //
- // parse ini file indenter header
- //
-
- _indenterName = _indenterSettings->value("header/indenterName").toString();
- _indenterFileName = _indenterSettings->value("header/indenterFileName").toString();
- _globalConfigFilename = _indenterSettings->value("header/configFilename").toString();
- _useCfgFileParameter = _indenterSettings->value("header/useCfgFileParameter").toString();
- _cfgFileParameterEnding = _indenterSettings->value("header/cfgFileParameterEnding").toString();
- if (_cfgFileParameterEnding == "cr")
- {
- _cfgFileParameterEnding = "\n";
- }
- _indenterShowHelpParameter = _indenterSettings->value("header/showHelpParameter").toString();
-
- if (_indenterFileName.isEmpty())
- {
- _errorMessageDialog->showMessage(tr("Indenter ini file header error"), tr(
- "The loaded indenter ini file \"%1\"has a faulty header. At least the indenters file name is not set.").arg(
- iniFilePath));
- }
-
- // Read the parameter order. Possible values are (p=parameter[file] i=inputfile o=outputfile)
- // pio, ipo, iop
- _parameterOrder = _indenterSettings->value("header/parameterOrder", "pio").toString();
- _inputFileParameter = _indenterSettings->value("header/inputFileParameter").toString();
- _inputFileName = _indenterSettings->value("header/inputFileName").toString();
- _outputFileParameter = _indenterSettings->value("header/outputFileParameter").toString();
- _outputFileName = _indenterSettings->value("header/outputFileName").toString();
- _fileTypes = _indenterSettings->value("header/fileTypes").toString();
- _fileTypes.replace('|', " ");
-
- // read the categories names which are separated by "|"
- TQString categoriesStr = _indenterSettings->value("header/categories").toString();
- categories = categoriesStr.split("|");
- // Assure that the category list is never empty. At least contain a "general" section.
- if (categories.isEmpty())
- {
- categories.append("General");
- }
-
- IndenterParameterCategoryPage categoryPage;
-
- // create a page for each category and store its references in a toolboxpage-array
- foreach(TQString category, categories)
- {
- categoryPage.widget = new TQWidget();
- categoryPage.widget->setObjectName(category);
- categoryPage.widget->setSizePolicy(TQSizePolicy::MinimumExpanding,
- TQSizePolicy::MinimumExpanding);
- categoryPage.vboxLayout = new TQVBoxLayout(categoryPage.widget);
- categoryPage.vboxLayout->setSpacing(6);
- categoryPage.vboxLayout->setMargin(9);
- categoryPage.vboxLayout->setObjectName(category);
- _indenterParameterCategoryPages.append(categoryPage);
- _indenterParameterCategoriesToolBox->addItem(categoryPage.widget, category);
- }
-
- //
- // parse ini file indenter parameters
- //
-
- // read all possible parameters written in brackets []
- _indenterParameters = _indenterSettings->childGroups();
-
- // read each parameter to create the corresponding input field
- foreach(TQString indenterParameter, _indenterParameters)
- {
- // if it is not the indent header definition read the parameter and add it to
- // the corresponding category toolbox page
- if (indenterParameter != "header")
- {
- // read to which category the parameter belongs
- int category = _indenterSettings->value(indenterParameter + "/Category").toInt();
- // Assure that the category number is never greater than the available categories.
- if (category > _indenterParameterCategoryPages.size() - 1)
- {
- category = _indenterParameterCategoryPages.size() - 1;
- }
- // read which type of input field the parameter needs
- TQString editType = _indenterSettings->value(indenterParameter + "/EditorType").toString();
-
- // edit type is numeric so create a spinbox with label
- if (editType == "numeric")
- {
- // read the parameter name as it is used at the command line or in its config file
- TQString parameterCallName =
- _indenterSettings->value(indenterParameter + "/CallName").toString();
-
- // create checkbox which enables or disables the parameter
- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
- chkBox->setChecked(_indenterSettings->value(indenterParameter + "/Enabled").toBool());
- chkBox->setToolTip(
- "Enables/disables the parameter. If disabled the indenters default value will be used.");
- chkBox->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
- int left, top, right, bottom;
- chkBox->getContentsMargins(&left, &top, &right, &bottom);
- chkBox->setContentsMargins(left, top, 0, bottom);
-
- // create the spinbox
- TQSpinBox *spinBox = new TQSpinBox(_indenterParameterCategoryPages.at(category).widget);
- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
- spinBox->setToolTip(paramToolTip);
- spinBox->setMaximumWidth(50);
- spinBox->setMinimumWidth(50);
- if (_mainWindow != NULL)
- {
- spinBox->installEventFilter(_mainWindow);
- }
- if (_indenterSettings->value(indenterParameter + "/MinVal").toString() != "")
- {
- spinBox->setMinimum(_indenterSettings->value(indenterParameter + "/MinVal").toInt());
- }
- else
- {
- spinBox->setMinimum(0);
- }
- if (_indenterSettings->value(indenterParameter + "/MaxVal").toString() != "")
- {
- spinBox->setMaximum(_indenterSettings->value(indenterParameter + "/MaxVal").toInt());
- }
- else
- {
- spinBox->setMaximum(2000);
- }
-
- // create the label
- TQLabel *label = new TQLabel(_indenterParameterCategoryPages.at(category).widget);
- label->setText(indenterParameter);
- label->setBuddy(spinBox);
- label->setToolTip(paramToolTip);
- if (_mainWindow != NULL)
- {
- label->installEventFilter(_mainWindow);
- }
-
- // put all into a layout and add it to the toolbox page
- TQHBoxLayout *hboxLayout = new TQHBoxLayout();
- hboxLayout->addWidget(chkBox);
- hboxLayout->addWidget(spinBox);
- hboxLayout->addWidget(label);
- _indenterParameterCategoryPages.at(category).vboxLayout->addLayout(hboxLayout);
-
- // remember parameter name and reference to its spinbox
- ParamNumeric paramNumeric;
- paramNumeric.paramName = indenterParameter;
- paramNumeric.paramCallName = parameterCallName;
- paramNumeric.spinBox = spinBox;
- paramNumeric.label = label;
- paramNumeric.valueEnabledChkBox = chkBox;
- paramNumeric.spinBox->setValue(_indenterSettings->value(paramNumeric.paramName +
- "/ValueDefault").toInt());
- _paramNumerics.append(paramNumeric);
-
- TQObject::connect(spinBox, SIGNAL(valueChanged(int)), this,
- SLOT(handleChangedIndenterSettings()));
- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(updateDrawing()));
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
- }
- // edit type is boolean so create a checkbox
- else if (editType == "boolean")
- {
- // create the checkbox, make its settings and add it to the toolbox page
- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
- chkBox->setText(indenterParameter);
- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
- chkBox->setToolTip(paramToolTip);
- if (_mainWindow != NULL)
- {
- chkBox->installEventFilter(_mainWindow);
- }
- _indenterParameterCategoryPages.at(category).vboxLayout->addWidget(chkBox);
-
- // remember parameter name and reference to its checkbox
- ParamBoolean paramBoolean;
- paramBoolean.paramName = indenterParameter;
- paramBoolean.checkBox = chkBox;
- TQStringList trueFalseStrings =
- _indenterSettings->value(indenterParameter + "/TrueFalse").toString().split("|");
- paramBoolean.trueString = trueFalseStrings.at(0);
- paramBoolean.falseString = trueFalseStrings.at(1);
- paramBoolean.checkBox->setChecked(_indenterSettings->value(paramBoolean.paramName +
- "/ValueDefault").toBool());
- _paramBooleans.append(paramBoolean);
-
- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
- }
- // edit type is numeric so create a line edit with label
- else if (editType == "string")
- {
- // read the parameter name as it is used at the command line or in its config file
- TQString parameterCallName =
- _indenterSettings->value(indenterParameter + "/CallName").toString();
-
- // create check box which enables or disables the parameter
- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
- chkBox->setChecked(_indenterSettings->value(indenterParameter + "/Enabled").toBool());
- chkBox->setToolTip(
- "Enables/disables the parameter. If disabled the indenters default value will be used.");
- chkBox->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
- int left, top, right, bottom;
- chkBox->getContentsMargins(&left, &top, &right, &bottom);
- chkBox->setContentsMargins(left, top, 0, bottom);
-
- // create the line edit
- TQLineEdit *lineEdit = new TQLineEdit(_indenterParameterCategoryPages.at(category).widget);
- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
- lineEdit->setToolTip(paramToolTip);
- lineEdit->setMaximumWidth(50);
- lineEdit->setMinimumWidth(50);
- if (_mainWindow != NULL)
- {
- lineEdit->installEventFilter(_mainWindow);
- }
-
- // create the label
- TQLabel *label = new TQLabel(_indenterParameterCategoryPages.at(category).widget);
- label->setText(indenterParameter);
- label->setBuddy(lineEdit);
- label->setSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::Preferred);
- label->setToolTip(paramToolTip);
- if (_mainWindow != NULL)
- {
- label->installEventFilter(_mainWindow);
- }
-
- // put all into a layout and add it to the toolbox page
- TQHBoxLayout *hboxLayout = new TQHBoxLayout();
- hboxLayout->addWidget(chkBox);
- hboxLayout->addWidget(lineEdit);
- hboxLayout->addWidget(label);
- _indenterParameterCategoryPages.at(category).vboxLayout->addLayout(hboxLayout);
-
- // remember parameter name and reference to its line edit
- ParamString paramString;
- paramString.paramName = indenterParameter;
- paramString.paramCallName = parameterCallName;
- paramString.lineEdit = lineEdit;
- paramString.label = label;
- paramString.valueEnabledChkBox = chkBox;
- paramString.lineEdit->setText(_indenterSettings->value(paramString.paramName +
- "/ValueDefault").toString());
- _paramStrings.append(paramString);
-
- TQObject::connect(lineEdit, SIGNAL(editingFinished()), this,
- SLOT(handleChangedIndenterSettings()));
- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- connect(lineEdit, SIGNAL(textChanged(const TQString)), this, SLOT(updateDrawing()));
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
- }
- // edit type is multiple so create a combobox with label
- else if (editType == "multiple")
- {
- // read the parameter name as it is used at the command line or in its config file
- TQString parameterCallName =
- _indenterSettings->value(indenterParameter + "/CallName").toString();
-
- // create checkbox which enables or disables the parameter
- TQCheckBox *chkBox = new TQCheckBox(_indenterParameterCategoryPages.at(category).widget);
- chkBox->setChecked(_indenterSettings->value(indenterParameter + "/Enabled").toBool());
- chkBox->setToolTip(
- "Enables/disables the parameter. If disabled the indenters default value will be used.");
- chkBox->setSizePolicy(TQSizePolicy::Fixed, TQSizePolicy::Fixed);
- int left, top, right, bottom;
- chkBox->getContentsMargins(&left, &top, &right, &bottom);
- chkBox->setContentsMargins(left, top, 0, bottom);
-
- // create the combo box
- TQComboBox *comboBox = new TQComboBox(_indenterParameterCategoryPages.at(
- category).widget);
- TQStringList choicesStrings =
- _indenterSettings->value(indenterParameter + "/Choices").toString().split("|");
- TQStringList choicesStringsReadable = _indenterSettings->value(
- indenterParameter + "/ChoicesReadable").toString().split("|", TQString::SkipEmptyParts);
- if (choicesStringsReadable.isEmpty())
- {
- comboBox->addItems(choicesStrings);
- }
- else
- {
- comboBox->addItems(choicesStringsReadable);
- }
- paramToolTip = _indenterSettings->value(indenterParameter + "/Description").toString();
- comboBox->setToolTip(paramToolTip);
- if (_mainWindow != NULL)
- {
- comboBox->installEventFilter(_mainWindow);
- }
-
- // put all into a layout and add it to the toolbox page
- TQHBoxLayout *hboxLayout = new TQHBoxLayout();
- hboxLayout->addWidget(chkBox);
- hboxLayout->addWidget(comboBox);
- _indenterParameterCategoryPages.at(category).vboxLayout->addLayout(hboxLayout);
-
- // remember parameter name and reference to its lineedit
- ParamMultiple paramMultiple;
- paramMultiple.paramName = indenterParameter;
- paramMultiple.paramCallName = parameterCallName;
- paramMultiple.comboBox = comboBox;
- paramMultiple.choicesStrings = choicesStrings;
- paramMultiple.choicesStringsReadable = choicesStringsReadable;
- paramMultiple.valueEnabledChkBox = chkBox;
- paramMultiple.comboBox->setCurrentIndex(_indenterSettings->value(paramMultiple.paramName +
- "/ValueDefault").toInt());
- _paramMultiples.append(paramMultiple);
-
- TQObject::connect(comboBox, SIGNAL(activated(int)), this,
- SLOT(handleChangedIndenterSettings()));
- TQObject::connect(chkBox, SIGNAL(clicked()), this, SLOT(handleChangedIndenterSettings()));
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- connect(comboBox, SIGNAL(activated(int)), this, SLOT(updateDrawing()));
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
- }
- }
- }
-
- // put a spacer at each page end
- foreach(IndenterParameterCategoryPage categoryPage, _indenterParameterCategoryPages)
- {
- categoryPage.vboxLayout->addStretch();
- }
-}
-
-/*
- \brief Searches and returns all indenters a configuration file is found for.
-
- Opens all uigui ini files found in the list \a _indenterIniFileList, opens each ini file
- and reads the there defined real name of the indenter. These names are being returned as TQStringList.
- */
-TQStringList IndentHandler::getAvailableIndenters()
-{
- TQStringList indenterNamesList;
-
- // Loop for every existing uigui ini file
- foreach(TQString indenterIniFile, _indenterIniFileList)
- {
- // Open the ini file and search for the indenter name
- TQFile file(_indenterDirctoryStr + "/" + indenterIniFile);
- if (file.open(TQIODevice::ReadOnly | TQIODevice::Text))
- {
- int index = -1;
- TQByteArray line;
- // Search for the string "indenterName=" and get the following string until line end.
- while (index == -1 && !file.atEnd())
- {
- line = file.readLine();
- index = line.indexOf("indenterName=", 0);
- }
-
- if (index == 0)
- {
- line = line.remove(0, 13);
- indenterNamesList << line.trimmed();
- }
- }
- }
- return indenterNamesList;
-}
-
-/*
- \brief Deletes all elements in the toolbox and initializes the indenter selected by \a indenterID.
- */
-void IndentHandler::setIndenter(int indenterID)
-{
- TQApplication::setOverrideCursor(TQt::WaitCursor);
-
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- disconnect(_indenterParameterCategoriesToolBox, SIGNAL(currentChanged(int)), this,
- SLOT(updateDrawing()));
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
-
- // Generate the parameter string that will be saved to the indenters config file.
- TQString parameterString = getParameterString();
- if (!_indenterFileName.isEmpty())
- {
- saveConfigFile(_settingsDirctoryStr + "/" + _indenterFileName + ".cfg", parameterString);
- }
-
- // Take care if the selected indenterID is smaller or greater than the number of existing
- // indenters
- if (indenterID < 0)
- {
- indenterID = 0;
- }
- if (indenterID >= _indenterIniFileList.count())
- {
- indenterID = _indenterIniFileList.count() - 1;
- }
-
- // remove all pages from the toolbox
- for (int i = 0; i < _indenterParameterCategoriesToolBox->count(); i++)
- {
- _indenterParameterCategoriesToolBox->removeItem(i);
- }
-
- // delete all toolbox pages and by this its children
- foreach(IndenterParameterCategoryPage categoryPage, _indenterParameterCategoryPages)
- {
- delete categoryPage.widget;
- }
-
- // empty all lists, which stored infos for the toolbox pages and its widgets
- _indenterParameterCategoryPages.clear();
- _paramStrings.clear();
- _paramNumerics.clear();
- _paramBooleans.clear();
- _paramMultiples.clear();
- delete _indenterSettings;
-
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- TQWidget dummyWidget;
- _indenterParameterCategoriesToolBox->addItem(&dummyWidget, "dummyText");
-#endif
-
- readIndentIniFile(_indenterDirctoryStr + "/" + _indenterIniFileList.at(indenterID));
-
- // Find out how the indenter can be executed.
- createIndenterCallString();
-
- // Load the users last settings made for this indenter.
- loadConfigFile(_settingsDirctoryStr + "/" + _indenterFileName + ".cfg");
-
- handleChangedIndenterSettings();
-
- TQApplication::restoreOverrideCursor();
-
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- connect(_indenterParameterCategoriesToolBox, SIGNAL(currentChanged(int)), this,
- SLOT(updateDrawing()));
- _indenterParameterCategoriesToolBox->removeItem(_indenterParameterCategoriesToolBox->indexOf(&
- dummyWidget));
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
-}
-
-/*
- \brief Returns a string containing by the indenter supported file types/extensions divided by a space.
- */
-TQString IndentHandler::getPossibleIndenterFileExtensions()
-{
- return _fileTypes;
-}
-
-/*
- \brief Returns the path and filename of the current indenter config file.
- */
-TQString IndentHandler::getIndenterCfgFile()
-{
- TQFileInfo fileInfo(_indenterDirctoryStr + "/" + _globalConfigFilename);
- return fileInfo.absoluteFilePath();
-}
-
-/*
- \brief Tries to create a call path string for the indenter executable. If successful returns true.
- */
-bool IndentHandler::createIndenterCallString()
-{
- TQProcess indentProcess;
-
- if (_indenterFileName.isEmpty())
- {
- return false;
- }
-
- // First try to call the indenter inside of the data dir, using some suffix
- // ------------------------------------------------------------------------
-
- // Set the directory for the indenter execution
- indentProcess.setWorkingDirectory(TQFileInfo(_indenterDirctoryStr).absoluteFilePath());
-
- foreach(TQString suffix, TQStringList() << "" << ".exe" << ".bat" << ".com" << ".sh")
- {
- _indenterExecutableSuffix = suffix;
- _indenterExecutableCallString = TQFileInfo(_indenterDirctoryStr).absoluteFilePath() + "/" +
- _indenterFileName;
- _indenterExecutableCallString += suffix;
-
- // Only try to call the indenter, if the file exists.
- if (TQFile::exists(_indenterExecutableCallString))
- {
- // Only try to call the indenter directly if it is no php file
- if (TQFileInfo(_indenterExecutableCallString).suffix().toLower() != "php")
- {
- indentProcess.start(
- "\"" + _indenterExecutableCallString + +"\" " + _indenterShowHelpParameter);
- if (indentProcess.waitForFinished(2000))
- {
- _indenterExecutableCallString = "\"" + _indenterExecutableCallString + "\"";
- return true;
- }
- else if (indentProcess.error() == TQProcess::Timedout)
- {
- _indenterExecutableCallString = "\"" + _indenterExecutableCallString + "\"";
- return true;
- }
- }
-
- // Test for needed interpreters
- // ----------------------------
- // If the file could not be executed, try to find a shebang at its start or test if its a php
- // file.
- TQString interpreterName = "";
- TQFile indenterExecutable(_indenterExecutableCallString);
-
- // If indenter executable file has .php as suffix, use php as default interpreter
- if (TQFileInfo(_indenterExecutableCallString).suffix().toLower() == "php")
- {
- interpreterName = "php -f";
- }
- // Else try to open the file and read the shebang.
- else if (indenterExecutable.open(TQFile::ReadOnly))
- {
- // Read the first line of the file.
- TQTextStream indenterExecutableContent(&indenterExecutable);
- TQString firstLineOfIndenterExe = indenterExecutableContent.readLine(75);
- indenterExecutable.close();
-
- // If the initial shebang is found, read the named intepreter. e.g. perl
- if (firstLineOfIndenterExe.startsWith("#!"))
- {
- // Get the rightmost word. by splitting the string into only full words.
- interpreterName = firstLineOfIndenterExe.split("/").last();
- }
- }
-
- // Try to call the interpreter, if it exists.
- if (!interpreterName.isEmpty())
- {
- _indenterExecutableCallString = interpreterName + " \"" + _indenterExecutableCallString +
- "\"";
- indentProcess.start(interpreterName + " -h");
- if (indentProcess.waitForFinished(2000))
- {
- return true;
- }
- else if (indentProcess.error() == TQProcess::Timedout)
- {
- return true;
- }
- // now we know an interpreter is needed but it could not be called, so inform the user.
- else
- {
- _errorMessageDialog->showMessage(tr("Interpreter needed"), tr(
- "To use the selected indenter the program \"%1\" needs to be available in the global environment. You should add an entry to your path settings.").arg(
- interpreterName));
- return true;
- }
- }
- }
- }
-
- // If unsuccessful try if the indenter executable is a JavaScript file
- // -------------------------------------------------------------------
- _indenterExecutableSuffix = ".js";
- _indenterExecutableCallString = TQFileInfo(_indenterDirctoryStr).absoluteFilePath() + "/" +
- _indenterFileName;
- _indenterExecutableCallString += _indenterExecutableSuffix;
- if (TQFile::exists(_indenterExecutableCallString))
- {
- return true;
- }
-
- // If unsuccessful try to call the indenter global, using some suffix
- // ------------------------------------------------------------------
- foreach(TQString suffix, TQStringList() << "" << ".exe" << ".bat" << ".com" << ".sh")
- {
- _indenterExecutableSuffix = suffix;
- _indenterExecutableCallString = _indenterFileName + suffix;
- indentProcess.start(_indenterExecutableCallString + " " + _indenterShowHelpParameter);
- if (indentProcess.waitForFinished(2000))
- {
- return true;
- }
- else if (indentProcess.error() == TQProcess::Timedout)
- {
- return true;
- }
- }
-
- // If even globally calling the indenter fails, try calling .com and .exe via wine
- // -------------------------------------------------------------------------------
- _indenterExecutableCallString = "\"" + TQFileInfo(_indenterDirctoryStr).absoluteFilePath() + "/" +
- _indenterFileName;
-
- foreach(TQString suffix, TQStringList() << ".exe" << ".com")
- {
- _indenterExecutableSuffix = suffix;
- if (TQFile::exists(_indenterDirctoryStr + "/" + _indenterFileName + suffix))
- {
- TQProcess wineTestProcess;
- wineTestProcess.start("wine --version");
- // if the process of wine was not callable assume that wine is not installed
- if (!wineTestProcess.waitForFinished(2000))
- {
- _errorMessageDialog->showMessage(tr("wine not installed"), tr(
- "There exists only a win32 executable of the indenter and wine does not seem to be installed. Please install wine to be able to run the indenter."));
- _indenterExecutableCallString = "";
- return false;
- }
- else
- {
- _indenterExecutableCallString = "\"" +
- TQFileInfo(_indenterDirctoryStr).absoluteFilePath() + "/";
- _indenterExecutableCallString += _indenterFileName + suffix + "\"";
- _indenterExecutableCallString = "wine " + _indenterExecutableCallString;
-
- return true;
- }
- }
- }
-
- _indenterExecutableCallString = "";
- _indenterExecutableSuffix = "";
- return false;
-}
-
-/*
- \brief Returns a string that points to where the indenters manual can be found.
- */
-TQString IndentHandler::getManual()
-{
- if (_indenterSettings != NULL)
- {
- return _indenterSettings->value("header/manual").toString();
- }
- else
- {
- return "";
- }
-}
-
-/*
- \brief This slot gets the reference to the indenters manual and opens it.
- */
-void IndentHandler::showIndenterManual()
-{
- TQString manualReference = getManual();
- TQDesktopServices::openUrl(manualReference);
-}
-
-/*
- \brief Can be called to update all widgets text to the currently selected language.
- */
-void IndentHandler::retranslateUi()
-{
- _indenterSelectionCombobox->setToolTip(tr(
- "<html><head><meta name=\"qrichtext\" content=\"1\" /></head><body style=\" white-space: pre-wrap; font-family:MS Shell Dlg; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\"><p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Shows the currently chosen indenters name and lets you choose other available indenters</p></body></html>"));
- _indenterParameterHelpButton->setToolTip(tr(
- "Brings you to the online manual of the currently selected indenter, where you can get further help on the possible parameters."));
-
- _actionLoadIndenterConfigFile->setText(TQApplication::translate("IndentHandler",
- "Load Indenter Config File", 0, TQApplication::UnicodeUTF8));
- _actionLoadIndenterConfigFile->setStatusTip(TQApplication::translate("IndentHandler",
- "Opens a file dialog to load the original config file of the indenter.", 0,
- TQApplication::UnicodeUTF8));
- _actionLoadIndenterConfigFile->setShortcut(TQApplication::translate("IndentHandler", "Alt+O", 0,
- TQApplication::UnicodeUTF8));
-
- _actionSaveIndenterConfigFile->setText(TQApplication::translate("IndentHandler",
- "Save Indenter Config File", 0, TQApplication::UnicodeUTF8));
- _actionSaveIndenterConfigFile->setStatusTip(TQApplication::translate("IndentHandler",
- "Opens a dialog to save the current indenter configuration to a file.", 0,
- TQApplication::UnicodeUTF8));
- _actionSaveIndenterConfigFile->setShortcut(TQApplication::translate("IndentHandler", "Alt+S", 0,
- TQApplication::UnicodeUTF8));
-
- _actionCreateShellScript->setText(TQApplication::translate("IndentHandler",
- "Create Indenter Call Shell Script", 0, TQApplication::UnicodeUTF8));
- _actionCreateShellScript->setToolTip(TQApplication::translate("IndentHandler",
- "Create a shell script that calls the current selected indenter for formatting an as parameter given file with the current indent settings.",
- 0, TQApplication::UnicodeUTF8));
- _actionCreateShellScript->setStatusTip(TQApplication::translate("IndentHandler",
- "Create a shell script that calls the current selected indenter for formatting an as parameter given file with the current indent settings.",
- 0, TQApplication::UnicodeUTF8));
-
- _actionResetIndenterParameters->setText(TQApplication::translate("IndentHandler",
- "Reset indenter parameters", 0, TQApplication::UnicodeUTF8));
- _actionResetIndenterParameters->setToolTip(TQApplication::translate("IndentHandler",
- "Resets all indenter parameters to the default values.", 0, TQApplication::UnicodeUTF8));
- _actionResetIndenterParameters->setStatusTip(TQApplication::translate("IndentHandler",
- "Resets all indenter parameters to the default values.", 0, TQApplication::UnicodeUTF8));
-}
-
-/*
- \brief Returns the name of the currently selected indenter.
- */
-TQString IndentHandler::getCurrentIndenterName()
-{
- TQString currentIndenterName = _indenterSelectionCombobox->currentText();
-
- // Remove the supported programming languages from indenters name, which are set in braces.
- if (currentIndenterName.indexOf("(") > 0)
- {
- // Using index-1 to also leave out the blank before the brace.
- currentIndenterName = currentIndenterName.left(currentIndenterName.indexOf("(") - 1);
- }
-
- return currentIndenterName;
-}
-
-/*
- \brief Shows a file open dialog to open an existing config file for the currently selected indenter.
-
- If the file was successfully opened the indent handler is called to load the settings and update itself.
-*/
-void IndentHandler::openConfigFileDialog()
-{
- TQString configFilePath;
-
- configFilePath = TQFileDialog::getOpenFileName(NULL, tr(
- "Choose indenter config file"), getIndenterCfgFile(), "All files (*.*)");
-
- if (configFilePath != "")
- {
- // If the config file was loaded successfully, inform any who is interested about it.
- if (loadConfigFile(configFilePath))
- {
- handleChangedIndenterSettings();
- }
- }
-}
-
-/*
- \brief Calls the indenter config file save as dialog to save the config file under a chosen name.
-
- If the file already exists and it should be overwritten, a warning is shown before.
-*/
-void IndentHandler::saveasIndentCfgFileDialog()
-{
- TQString fileExtensions = tr("All files") + " (*.*)";
-
- TQString fileName = TQFileDialog::getSaveFileName(this, tr(
- "Save indent config file"), getIndenterCfgFile(), fileExtensions);
-
- if (fileName != "")
- {
- TQFile::remove(fileName);
- TQFile outCfgFile(fileName);
- outCfgFile.open(TQFile::ReadWrite | TQFile::Text);
- outCfgFile.write(getParameterString().toAscii());
- outCfgFile.close();
- }
-}
-
-/*
- \brief Invokes the indenter to create a shell script.
-
- Lets the indenter create a shell script for calling the indenter out of any
- other application and open a save dialog for saving the shell script.
-*/
-void IndentHandler::createIndenterCallShellScript()
-{
- TQString shellScriptExtension;
-#if defined (Q_OS_WIN32)
- shellScriptExtension = "bat";
-#else
- shellScriptExtension = "sh";
-#endif
-
- TQString fileExtensions = tr("Shell Script") + " (*." + shellScriptExtension + ");;" + tr(
- "All files") + " (*.*)";
-
- TQString currentIndenterName = getCurrentIndenterName();
- currentIndenterName = currentIndenterName.replace(" ", "_");
-
- TQString shellScriptFileName = TQFileDialog::getSaveFileName(this, tr(
- "Save shell script"), "call_" + currentIndenterName + "." + shellScriptExtension,
- fileExtensions);
-
- // Saving has been canceled if the filename is empty
- if (shellScriptFileName.isEmpty())
- {
- return;
- }
-
- // Delete any old file, write the new contents and set executable permissions.
- TQFile::remove(shellScriptFileName);
- TQFile outSrcFile(shellScriptFileName);
- if (outSrcFile.open(TQFile::ReadWrite | TQFile::Text))
- {
- TQString shellScriptConfigFilename = TQFileInfo(shellScriptFileName).baseName() + "." +
- TQFileInfo(_globalConfigFilename).suffix();
-
- // Get the content of the shell/batch script.
- TQString indenterCallShellScript = generateShellScript(shellScriptConfigFilename);
-
- // Replace placeholder for script name in script template.
- indenterCallShellScript = indenterCallShellScript.replace("__INDENTERCALLSTRINGSCRIPTNAME__", TQFileInfo(
- shellScriptFileName).fileName());
-
- outSrcFile.write(indenterCallShellScript.toAscii());
-#if !defined (Q_OS_WIN32)
- // For none Windows systems set the files executable flag
- outSrcFile.setPermissions(
- outSrcFile.permissions() | TQFile::ExeOwner | TQFile::ExeUser | TQFile::ExeGroup);
-#endif
- outSrcFile.close();
-
- // Save the indenter config file to the same directory, where the shell srcipt was saved to,
- // because the script will reference it there via "./".
- if (!_globalConfigFilename.isEmpty())
- {
- saveConfigFile(TQFileInfo(
- shellScriptFileName).path() + "/" + shellScriptConfigFilename,
- getParameterString());
- }
- }
-}
-
-/*
- \brief Resets all parameters to the indenters default values as they are specified in the uigui ini file
- but asks the user whether to do it really.
- */
-void IndentHandler::resetIndenterParameter()
-{
- int messageBoxAnswer = TQMessageBox::question(this, tr("Really reset parameters?"), tr(
- "Do you really want to reset the indenter parameters to the default values?"),
- TQMessageBox::Yes | TQMessageBox::Abort);
- if (messageBoxAnswer == TQMessageBox::Yes)
- {
- resetToDefaultValues();
- }
-}
-
-/*
- \brief Catch some events and let some other be handled by the super class.
-
- Is needed for use as Notepad++ plugin.
- */
-bool IndentHandler::event(TQEvent *event)
-{
- if (event->type() == TQEvent::WindowActivate)
- {
- event->accept();
- return true;
- }
- else if (event->type() == TQEvent::WindowDeactivate)
- {
- event->accept();
- return true;
- }
- else
- {
- event->ignore();
- return TQWidget::event(event);
- }
-}
-
-/*
- \brief Sets the function pointer \a _parameterChangedCallback to the given callback
- function \a paramChangedCallback.
-
- Is needed for use as Notepad++ plugin.
- */
-void IndentHandler::setParameterChangedCallback(void (*paramChangedCallback)(void))
-{
- _parameterChangedCallback = paramChangedCallback;
-}
-
-/*
- \brief Emits the \a indenterSettingsChanged signal and if set executes the \a _parameterChangedCallback function.
-
- Is needed for use as Notepad++ plugin.
- */
-void IndentHandler::handleChangedIndenterSettings()
-{
- emit(indenterSettingsChanged());
-
- if (_parameterChangedCallback != NULL)
- {
- _parameterChangedCallback();
- }
-}
-
-/*
- \brief Sets a callback function that shall be called, when the this indenter parameter window gets closed.
-
- Is needed for use as Notepad++ plugin.
- */
-void IndentHandler::setWindowClosedCallback(void (*winClosedCallback)(void))
-{
- _windowClosedCallback = winClosedCallback;
-}
-
-/*
- \brief Is called on this indenter parameter window close and if set calls the function \a _windowClosedCallback.
-
- Is needed for use as Notepad++ plugin.
- */
-void IndentHandler::closeEvent(TQCloseEvent *event)
-{
- if (_windowClosedCallback != NULL)
- {
- _windowClosedCallback();
- }
- event->accept();
-}
-
-/*
- \brief Returns the id (list index) of the currently selected indenter.
- */
-int IndentHandler::getIndenterId()
-{
- return _indenterSelectionCombobox->currentIndex();
-}
-
-void IndentHandler::updateDrawing()
-{
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- if (isVisible())
- {
- TQRect savedGeometry = geometry();
- setGeometry(savedGeometry.adjusted(0, 0, 0, 1));
- repaint();
- setGeometry(savedGeometry);
- }
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
-}
-
-void IndentHandler::wheelEvent(TQWheelEvent *event)
-{
- UNUSED_PARAMETER_WARNING_AVOID(event);
-#ifdef UNIVERSALINDENTGUI_NPP_EXPORTS
- TQWidget::wheelEvent(event);
- updateDrawing();
-#endif // UNIVERSALINDENTGUI_NPP_EXPORTS
-}
-
-/*
- \brief Converts characters < > and & in the \a text to HTML codes &lt &gt and &amp.
- */
-
-//TODO: This function should go into a string helper/tool class/file.
-TQString IndentHandler::encodeToHTML(const TQString &text)
-{
- TQString htmlText = text;
- htmlText.replace("&", "&amp;");
- htmlText.replace("<", "&lt;");
- htmlText.replace(">", "&gt;");
- htmlText.replace('"', "&quot;");
- htmlText.replace("'", "&#39;");
- htmlText.replace("^", "&circ;");
- htmlText.replace("~", "&tilde;");
- htmlText.replace("€", "&euro;");
- htmlText.replace("©", "&copy;");
- return htmlText;
-}
diff --git a/src/__TODO/IndentHandler.h b/src/__TODO/IndentHandler.h
deleted file mode 100644
index 579807d..0000000
--- a/src/__TODO/IndentHandler.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2006-2012 by Thomas Schweitzer *
- * thomas-schweitzer(at)arcor.de *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License version 2.0 as *
- * published by the Free Software Foundation. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program in the file LICENSE.GPL; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-
-#ifndef INDENTHANDLER_H
-#define INDENTHANDLER_H
-
-#include <tntqwidget.h>
-
-class UiGuiErrorMessage;
-class UiGuiIniFileParser;
-
-class TQMenu;
-class TQVBoxLayout;
-class TQLabel;
-class TQSpinBox;
-class TQComboBox;
-class TQCheckBox;
-class TQLineEdit;
-class TQToolButton;
-class TQToolBox;
-
-
-class IndentHandler : public TQWidget
-{
- Q_OBJECT
-
- public:
- IndentHandler(int indenterID, TQWidget *mainWindow = NULL, TQWidget *parent = NULL);
- ~IndentHandler();
-
- TQString generateShellScript(const TQString &configFilename);
- TQString callIndenter(TQString sourceCode, TQString inputFileExtension);
- bool loadConfigFile(TQString filePathName);
- void resetToDefaultValues();
- TQStringList getAvailableIndenters();
- TQString getPossibleIndenterFileExtensions();
- TQString getParameterString();
- TQString getIndenterCfgFile();
- TQString getManual();
- void retranslateUi();
- TQString getCurrentIndenterName();
- TQMenu* getIndenterMenu();
- TQList<TQAction*> getIndenterMenuActions();
- void contextMenuEvent(TQContextMenuEvent *event);
- void setParameterChangedCallback(void (*paramChangedCallback)(void));
- void setWindowClosedCallback(void (*winClosedCallback)(void));
- int getIndenterId();
-
- signals:
- void indenterSettingsChanged();
- void selectedIndenterIndexChanged(int index);
-
- protected:
- bool event(TQEvent *event);
- void closeEvent(TQCloseEvent *event);
- void wheelEvent(TQWheelEvent *event);
-
- private slots:
- void setIndenter(int indenterID);
- void showIndenterManual();
- void openConfigFileDialog();
- void saveasIndentCfgFileDialog();
- void createIndenterCallShellScript();
- void resetIndenterParameter();
- void handleChangedIndenterSettings();
- void updateDrawing();
-
- private:
- TQString callExecutableIndenter(TQString sourceCode, TQString inputFileExtension);
- TQString callJavaScriptIndenter(TQString sourceCode);
- void saveConfigFile(TQString filePathName, TQString parameterString);
- void readIndentIniFile(TQString iniFilePath);
- bool createIndenterCallString();
- void initIndenterMenu();
-
- // Holds a reference to all created pages of the parameter categories toolbox and the pages
- // boxlayout
- struct IndenterParameterCategoryPage
- {
- TQWidget *widget;
- TQVBoxLayout *vboxLayout;
- };
-
- TQVector<IndenterParameterCategoryPage> _indenterParameterCategoryPages;
-
- // Holds a reference to all checkboxes needed for boolean parameter setting and the parameters
- // name
- struct ParamBoolean
- {
- TQString paramName;
- TQString trueString;
- TQString falseString;
- TQCheckBox *checkBox;
- };
-
- TQVector<ParamBoolean> _paramBooleans;
-
- // Holds a reference to all line edits needed for parameter setting and the parameters name
- struct ParamString
- {
- TQString paramName;
- TQString paramCallName;
- TQCheckBox *valueEnabledChkBox;
- TQLineEdit *lineEdit;
- TQLabel *label;
- };
-
- TQVector<ParamString> _paramStrings;
-
- // Hold a reference to all spin boxes needed for parameter setting and the parameters name
- struct ParamNumeric
- {
- TQString paramName;
- TQString paramCallName;
- TQCheckBox *valueEnabledChkBox;
- TQSpinBox *spinBox;
- TQLabel *label;
- };
-
- TQVector<ParamNumeric> _paramNumerics;
-
- // Hold a reference to all combo boxes needed for parameter setting and the parameters name
- struct ParamMultiple
- {
- TQString paramName;
- TQString paramCallName;
- TQCheckBox *valueEnabledChkBox;
- TQComboBox *comboBox;
- TQStringList choicesStrings;
- TQStringList choicesStringsReadable;
- };
-
- TQVector<ParamMultiple> _paramMultiples;
-
- TQComboBox *_indenterSelectionCombobox;
- TQToolButton *_indenterParameterHelpButton;
- // Vertical layout box, into which the toolbox will be added
- TQVBoxLayout *_toolBoxContainerLayout;
- TQToolBox *_indenterParameterCategoriesToolBox;
- UiGuiIniFileParser *_indenterSettings;
- TQStringList _indenterParameters;
- // The indenters name in a descriptive form
- TQString _indenterName;
- // The indenters file name (w/o extension), that is being called
- TQString _indenterFileName;
- TQString _indenterDirctoryStr;
- TQString _tempDirctoryStr;
- TQString _settingsDirctoryStr;
- TQStringList _indenterIniFileList;
- TQString _parameterOrder;
- TQString _globalConfigFilename;
- TQString _cfgFileParameterEnding;
- TQString _inputFileParameter;
- TQString _inputFileName;
- TQString _outputFileParameter;
- TQString _outputFileName;
- TQString _fileTypes;
- TQString _useCfgFileParameter;
- TQString _indenterShowHelpParameter;
- TQWidget *_mainWindow;
- UiGuiErrorMessage *_errorMessageDialog;
- TQString _indenterExecutableCallString;
- TQString _indenterExecutableSuffix;
-
- TQMenu *_menuIndenter;
- TQAction *_actionLoadIndenterConfigFile;
- TQAction *_actionSaveIndenterConfigFile;
- TQAction *_actionCreateShellScript;
- TQAction *_actionResetIndenterParameters;
- // Needed for the NPP plugin.
- void (*_parameterChangedCallback)(void);
- // Needed for the NPP plugin.
- void (*_windowClosedCallback)(void);
-
- //TODO: This function should go into a string helper/tool class/file.
- TQString encodeToHTML(const TQString &text);
-};
-
-#endif // INDENTHANDLER_H
diff --git a/src/__TODO/MainWindow.ui b/src/__TODO/MainWindow.ui
deleted file mode 100755
index 73200d1..0000000
--- a/src/__TODO/MainWindow.ui
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
- <author>Thomas_-_S</author>
- <class>MainWindowUi</class>
- <widget class="TQMainWindow">
- <property name="name">
- <cstring>MainWindowUi</cstring>
- </property>
- <widget class="TQWidget" name="centralwidget"/>
- <widget class="TQStatusBar" name="statusbar"/>
- <widget class="TQDockWidget" name="dockWidget">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="features">
- <set>TQDockWidget::DockWidgetFloatable|TQDockWidget::DockWidgetMovable</set>
- </property>
- <property name="allowedAreas">
- <set>TQt::LeftDockWidgetArea|TQt::RightDockWidgetArea</set>
- </property>
- <property name="windowTitle">
- <string>Indenter Settings</string>
- </property>
- <attribute name="dockWidgetArea">
- <number>1</number>
- </attribute>
- <widget class="TQWidget" name="dockWidgetContents">
- <layout class="TQHBoxLayout">
- <property name="spacing">
- <number>6</number>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- <item>
- <layout class="TQVBoxLayout">
- <property name="spacing">
- <number>0</number>
- </property>
- <property name="margin">
- <number>0</number>
- </property>
- </layout>
- </item>
- </layout>
- </widget>
- </widget>
- </widget>
-</UI>
diff --git a/src/__TODO/TemplateBatchScript.cpp b/src/__TODO/TemplateBatchScript.cpp
index cdbf42a..56215e1 100644
--- a/src/__TODO/TemplateBatchScript.cpp
+++ b/src/__TODO/TemplateBatchScript.cpp
@@ -19,9 +19,6 @@
#include "TemplateBatchScript.h"
-// Need to include TQObject here so that platform specific defines like Q_OS_WIN32 are set.
-#include <tntqobject.h>
-
/*
\brief The only and static function of this class returns a batch or shell script
as string that can be used to call an indenter with the current settings from
@@ -36,51 +33,6 @@
const char* TemplateBatchScript::getTemplateBatchScript()
{
static const char *templateBatchScript =
-#if defined (Q_OS_WIN32)
- "@echo off\n"
- "\n"
- "IF (%1)==() GOTO error\n"
- "dir /b /ad %1 >nul 2>nul && GOTO indentDir\n"
- "IF NOT EXIST %1 GOTO error\n"
- "goto indentFile\n"
- "\n"
- ":indentDir\n"
- "set searchdir=%1\n"
- "\n"
- "IF (%2)==() GOTO assignDefaultSuffix\n"
- "set filesuffix=%2\n"
- "\n"
- "GOTO run\n"
- "\n"
- ":assignDefaultSuffix\n"
- "::echo !!!!DEFAULT SUFFIX!!!\n"
- "set filesuffix=*\n"
- "\n"
- ":run\n"
- "FOR /F \"tokens=*\" %%G IN ('DIR /B /S %searchdir%\\*.%filesuffix%') DO (\n"
- "echo Indenting file \"%%G\"\n"
- "__INDENTERCALLSTRING1__\n"
- ")\n"
- "GOTO ende\n"
- "\n"
- ":indentFile\n"
- "echo Indenting one file %1\n"
- "__INDENTERCALLSTRING2__\n"
- "\n"
- "GOTO ende\n"
- "\n"
- ":error\n"
- "echo .\n"
- "echo ERROR: As parameter given directory or file does not exist!\n"
- "echo Syntax is: __INDENTERCALLSTRINGSCRIPTNAME__ dirname filesuffix\n"
- "echo Syntax is: __INDENTERCALLSTRINGSCRIPTNAME__ filename\n"
- "echo Example: __INDENTERCALLSTRINGSCRIPTNAME__ temp cpp\n"
- "echo .\n"
- "\n"
- ":ende\n";
-
-#else
-
"#!/bin/sh \n"
"\n"
"if [ ! -n \"$1\" ]; then\n"
@@ -118,54 +70,5 @@ const char* TemplateBatchScript::getTemplateBatchScript()
"exit 1\n"
"fi\n"
"fi\n";
-#endif // #if defined(Q_OS_WIN32)
return templateBatchScript;
}
-
-/* Here comes the original batch script without the c++ markup
-@echo off
-
-IF (%1)==() GOTO error
-dir /b /ad %1 >nul 2>nul && GOTO indentDir
-IF NOT EXIST %1 GOTO error
-goto indentFile
-
-:indentDir
-set searchdir=%1
-
-IF (%2)==() GOTO assignDefaultSuffix
-set filesuffix=%2
-
-GOTO run
-
-:assignDefaultSuffix
-::echo !!!!DEFAULT SUFFIX!!!
-set filesuffix=*
-
-:run
-FOR /F "tokens=*" %%G IN ('DIR /B /S %searchdir%\*.%filesuffix%') DO (
- echo Indenting file "%%G"
- ::call call_CSSTidy.bat "%%G"
- "C:/Dokumente und Einstellungen/ts/Eigene Dateien/Visual Studio 2005/Projects/UiGuixy/indenters/csstidy.exe" "%%G" --timestamp=true --allow_html_in_templates=false --compress_colors=true --compress_font=true --lowercase_s=false --preserve_css=false --remove_last_;=false --remove_bslash=true --sort_properties=false --sort_selectors=false indentoutput.css
- move /Y indentoutput.css "%%G"
-)
-GOTO ende
-
-:indentFile
-echo Indenting one file %1
-"C:/Dokumente und Einstellungen/ts/Eigene Dateien/Visual Studio 2005/Projects/UiGuixy/indenters/csstidy.exe" %1 --timestamp=true --allow_html_in_templates=false --compress_colors=true --compress_font=true --lowercase_s=false --preserve_css=false --remove_last_;=false --remove_bslash=true --sort_properties=false --sort_selectors=false indentoutput.css
-move /Y indentoutput.css %1
-
-GOTO ende
-
-:error
-echo .
-echo ERROR: As parameter given directory or file does not exist!
-echo Syntax is: recurse.bat dirname filesuffix
-echo Syntax is: recurse.bat filename
-echo Example: recurse.bat temp cpp
-echo .
-
-:ende
-
-*/