]> Some of my projects - localmylist.git/commitdiff
Add rename settings to management-gui
authorAPTX <marek321@gmail.com>
Tue, 19 Jun 2012 15:38:08 +0000 (17:38 +0200)
committerAPTX <marek321@gmail.com>
Tue, 19 Jun 2012 15:38:08 +0000 (17:38 +0200)
management-gui/mainwindow.cpp
management-gui/mainwindow.h
management-gui/mainwindow.ui
management-gui/management-gui.pro
management-gui/mylistview.cpp
management-gui/mylistview.h
management-gui/renamesettingsdialog.cpp [new file with mode: 0644]
management-gui/renamesettingsdialog.h [new file with mode: 0644]
management-gui/renamesettingsdialog.ui [new file with mode: 0644]

index 4016db77e365d6ebd922ad0ad749d4e8343a09ef..0d24621c2ef2a5759256bbda12921f12fe08ae4e 100644 (file)
@@ -6,11 +6,13 @@
 #include <QFileDialog>
 #include <QDesktopServices>
 #include <QUrl>
+#include <QSortFilterProxyModel>
 
 #include "mylist.h"
 #include "database.h"
 #include "mylistmodel.h"
 #include "unknownfilelookuptask.h"
+#include "renamesettingsdialog.h"
 
 #include <QDebug>
 
@@ -18,7 +20,7 @@ using namespace LocalMyList;
 
 MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
-       ui(new Ui::MainWindow)
+       ui(new Ui::MainWindow), renameSettingsDialog(0)
 {
        ui->setupUi(this);
        taskCountLabel = new QLabel(this);
@@ -40,8 +42,15 @@ MainWindow::MainWindow(QWidget *parent) :
        MyList::instance()->database()->connect();
 
        myListModel = new MyListModel(this);
+       myListFilterModel = new QSortFilterProxyModel();
+       myListFilterModel->setSourceModel(myListModel);
        ui->myListView->setModel(myListModel);
-       ui->myListView->setColumnWidth(0, 450);
+
+       ui->myListView->header()->setResizeMode(0, QHeaderView::Stretch);
+       ui->myListView->header()->setStretchLastSection(false);
+       ui->myListView->header()->resizeSection(4, 200);
+
+       connect(ui->myListView, SIGNAL(renameTest(int)), this, SLOT(openRenameScriptEditor(int)));
 }
 
 MainWindow::~MainWindow()
@@ -85,6 +94,16 @@ void MainWindow::allTasksFinished()
        ui->statusBar->showMessage(tr("All tasks finished."));
 }
 
+void MainWindow::openRenameScriptEditor(int fid)
+{
+       if (!renameSettingsDialog)
+               renameSettingsDialog = new RenameSettingsDialog();
+
+       renameSettingsDialog->setupEnvForFile(fid);
+
+       renameSettingsDialog->show();
+}
+
 void MainWindow::on_actionScanDirectory_triggered()
 {
        QString dir = QFileDialog::getExistingDirectory(this, tr("Scan Directory"));
@@ -261,3 +280,8 @@ void MainWindow::on_refreshButton_clicked()
 {
        myListModel->reload();
 }
+
+void MainWindow::on_actionRenameScript_triggered()
+{
+       openRenameScriptEditor(0);
+}
index 653e70ad1c3bacc173446d15c79d390ffdd2c532..602a827ddb2476da7d1b099f03ddac88be65e069 100644 (file)
@@ -12,6 +12,9 @@ namespace LocalMyList {
        class MyListModel;
 }
 class QLabel;
+class QSortFilterProxyModel;
+
+class RenameSettingsDialog;
 
 class MainWindow : public QMainWindow
 {
@@ -32,6 +35,8 @@ private slots:
        void taskCountChanged();
        void allTasksFinished();
 
+       void openRenameScriptEditor(int fid);
+
        void on_actionDisconnect_triggered();
        void on_actionScanDirectory_triggered();
        void on_actionImportMyList_triggered();
@@ -51,14 +56,17 @@ private slots:
        void on_actionAddFiles_triggered();
        void on_actionRemoveKnownUnknownFiles_triggered();
        void on_refreshButton_clicked();
+       void on_actionRenameScript_triggered();
 
 private:
        Ui::MainWindow *ui;
+       RenameSettingsDialog *renameSettingsDialog;
 
        QLabel *databaseConnectionStatusIndicator;
        QLabel *taskCountLabel;
 
        LocalMyList::MyListModel *myListModel;
+       QSortFilterProxyModel *myListFilterModel;
 };
 
 #endif // MAINWINDOW_H
index 89742de4ecc8dbd132dc7afcad176f776e578b3a..ee3e12399d6334d15c7fd09cb62e2b78a30a5ebf 100644 (file)
@@ -70,6 +70,7 @@
      <string>Settings</string>
     </property>
     <addaction name="actionConnection"/>
+    <addaction name="actionRenameScript"/>
    </widget>
    <widget class="QMenu" name="menu_Actions">
     <property name="title">
     <string>Remove Known Unknown Files</string>
    </property>
   </action>
+  <action name="actionRenameScript">
+   <property name="text">
+    <string>Rename Script...</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <customwidgets>
index a662923d01883d842c837709b89070f4dd40f5f5..92704563d08eae7b6bb34057059a9b8832acf70b 100644 (file)
@@ -1,4 +1,4 @@
-QT       += core gui
+QT += core gui
 
 include(../config.pri)
 
@@ -10,16 +10,21 @@ TEMPLATE = app
 SOURCES += main.cpp\
                mainwindow.cpp \
        databaseconnectiondialog.cpp \
-    mylistview.cpp
+       mylistview.cpp \
+       renamesettingsdialog.cpp
 
-HEADERS  += mainwindow.h \
+HEADERS += mainwindow.h \
        databaseconnectiondialog.h \
-    mylistview.h
+       mylistview.h \
+       renamesettingsdialog.h
 
-FORMS    += mainwindow.ui \
-       databaseconnectiondialog.ui
+FORMS += mainwindow.ui \
+       databaseconnectiondialog.ui \
+       renamesettingsdialog.ui
 
 include(../localmylist.pri)
 
+LIBS += -lanidbudpclient
+
 target.path = $${PREFIX}/bin
 INSTALLS += target
index 368cb9fa0802616896da8837c921e038d7c8fed2..5c647b61e4e777fa8600227703610a598653a184 100644 (file)
@@ -3,12 +3,13 @@
 #include "mylist.h"
 #include "mylistmodel.h"
 
+#include <QHeaderView>
 #include <QMenu>
 #include <QDesktopServices>
 #include <QUrl>
 
 MyListView::MyListView(QWidget *parent) :
-    QTreeView(parent)
+       QTreeView(parent)
 {
        setContextMenuPolicy(Qt::CustomContextMenu);
        connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showCustomContextMenu(QPoint)));
@@ -21,6 +22,8 @@ MyListView::MyListView(QWidget *parent) :
        connect(markWatchedAction, SIGNAL(triggered()), this, SLOT(markWatched()));
        aniDBLinkAction = new QAction(tr("Open AniDB Page"), this);
        connect(aniDBLinkAction, SIGNAL(triggered()), this, SLOT(openAnidbPage()));
+       renameTestAction = new QAction(tr("Use For Rename Testing"), this);
+       connect(renameTestAction, SIGNAL(triggered()), this, SLOT(renameTest()));
 }
 
 LocalMyList::MyListModel *MyListView::myListModel() const
@@ -57,7 +60,8 @@ void MyListView::showCustomContextMenu(const QPoint &pos)
                        aniDBLinkAction->setText(tr("Open AniDB Page (%1%2)").arg('f').arg(id));
                        actions << aniDBLinkAction
                                        << openAction
-                                       << markWatchedAction;
+                                       << markWatchedAction
+                                       << renameTestAction;
                break;
        }
 
@@ -102,3 +106,10 @@ void MyListView::openAnidbPage()
                break;
        }
 }
+
+void MyListView::renameTest()
+{
+       int id = myListModel()->id(customContextMenuIndex);
+       if (id)
+               emit renameTest(id);
+}
index 8f30ad08be8febff9b9c6478808c985df8d3c22d..dd85f9205b291fff40fe840d4cfece3c2383f07e 100644 (file)
@@ -16,6 +16,7 @@ public:
 
 signals:
        void openFileRequested(const QModelIndex &index);
+       void renameTest(int fid);
 
 private slots:
        LocalMyList::MyListModel *myListModel() const;
@@ -23,6 +24,8 @@ private slots:
        void requestOpenFile();
        void markWatched();
        void openAnidbPage();
+       void renameTest();
+
 private:
        QModelIndex customContextMenuIndex;
 
@@ -31,6 +34,7 @@ private:
        QAction *openNextAction;
        QAction *markWatchedAction;
        QAction *aniDBLinkAction;
+       QAction *renameTestAction;
 };
 
 #endif // MYLISTVIEW_H
diff --git a/management-gui/renamesettingsdialog.cpp b/management-gui/renamesettingsdialog.cpp
new file mode 100644 (file)
index 0000000..406fd82
--- /dev/null
@@ -0,0 +1,313 @@
+#include "renamesettingsdialog.h"
+#include "ui_renamesettingsdialog.h"
+
+#include <LocalMyList/MyList>
+#include <LocalMyList/Database>
+#include <LocalMyList/RenameUtils>
+#include <QSqlQuery>
+#include <QSqlRecord>
+
+static const char *rulesStrAniAdd =
+               "AT := [%ATr%, %ATe%, %ATk%]\n"
+               "ET := [%ETe%, %ETr%, %ETk%]\n"
+               "GT := \"[\" [%GTs%, %GTl%] \"]\"\n"
+               "EpNoPad := $pad(%EpNo%, $max($len(%EpHiNo%), $len(%EpCount%)), \"0\")\n"
+               "SrcStyled := \"[\" %Source% \"]\"\n"
+               "isMovieType := {(%Type% = \"Movie\") ? \"True\" : \"False\"}\n"
+               "isDepr := {%Depr% ? \"[Depr]\" : \"\"}\n"
+               "isCen := {%Cen% ? \"[Cen]\" : \"\"}\n"
+               "VerStyled := %Ver% = \"1\" ? \"\" : \"v\" %Ver%\n"
+               "\n"
+               "FileName := %AT% \" \" %EpNoPad% %VerStyled% \" - \" %ET% \" \" %GT% %isDepr% %isCen% %SrcStyled%\n"
+               "PathName := \"E:\\Anime\\!Processed\\\" %AT%";
+
+static const char *rulesStrAniAddNoCompat =
+               "AT := [ATr, ATe, ATk]\n"
+               "ET := [ETe, ETr, ETk]\n"
+               "GT := \"[\" [GTs, GTl] \"]\"\n"
+               "EpNoPad := $pad(EpNo, $max($len(EpHiNo), $len(EpCount)), 0)\n"
+               "SrcStyled := \"[\" Source \"]\"\n"
+               "isMovieType := Type = \"Movie\" ? \"True\" : \"False\"\n"
+               "isDepr := Depr ? \"[Depr]\" : \"\"\n"
+               "isCen := Cen ? \"[Cen]\" : \"\"\n"
+               "VerStyled := Ver = 1 ? \"\" : \"v\" Ver\n"
+               "\n"
+               "FileName := AT \" \" EpNoPad VerStyled \" - \" ET \" \" GT isDepr isCen SrcStyled\n"
+               "PathName := \"E:\\Anime\\!Processed\\\" AT";
+
+static const char *rulesStrECMA =
+               "var AT = alt(ATr, ATe, ATk);\n"
+               "var ET = alt(ETe, ETr, ETk);\n"
+               "var GT = \"[\" + alt(GTs, GTl) + \"]\";\n"
+               "var EpNoPad = pad(EpNo, max(len(EpHiNo), len(EpCount)), \"0\");\n"
+               "var SrcStyled = \"[\" + Source + \"]\";\n"
+               "\n"
+               "var isMovieType = (Type == \"Movie\") ? \"True\" : \"False\";\n"
+               "var isDepr = parseInt(Depr) ? \"[Depr]\" : \"\";\n"
+               "var isCen = parseInt(Cen) ? \"[Cen]\" : \"\";\n"
+               "var VerStyled = Ver == \"1\" ? \"\" : \"v\" + Ver;\n"
+               "\n"
+               "var FileName = AT + \" \" + EpNoPad + VerStyled + \" - \" + ET + \" \" + GT + isDepr + isCen + SrcStyled;\n"
+               "var PathName = \"E:\\\\Anime\\\\!Processed\\\\\" + AT;";
+
+static const char *envStrAniAdd =
+               "ATr := \"Suzumiya Haruhi no Yuuutsu (2009)\"\n"
+               "ATe := \"The Melancholy of Haruhi Suzumiya (2009)\"\n"
+               "ATk := \"涼宮ハルヒの憂鬱 (2009)\"\n"
+               "ETr := \"Sasa no Ha Rhapsody\"\n"
+               "ETe := \"Bamboo Leaf Rhapsody\"\n"
+               "ETk := \"笹の葉ラプソディ\"\n"
+               "GTs := \"a.f.k.\"\n"
+               "GTl := \"a.f.k. (Long)\"\n"
+               "EpNo := \"1\"\n"
+               "EpHiNo := \"1\"\n"
+               "EpCount := \"1\"\n"
+               "Type := \"TV\"\n"
+               "Depr := \"0\"\n"
+               "Cen := \"0\"\n"
+               "Ver := \"1\"\n"
+               "Source := \"HDTV\"";
+
+static const char *envStrECMA =
+               "var ATr = \"Suzumiya Haruhi no Yuuutsu (2009)\";\n"
+               "var ATe = \"The Melancholy of Haruhi Suzumiya (2009)\";\n"
+               "var ATk = \"涼宮ハルヒの憂鬱 (2009)\";\n"
+               "var ETr = \"Sasa no Ha Rhapsody\";\n"
+               "var ETe = \"Bamboo Leaf Rhapsody\";\n"
+               "var ETk = \"笹の葉ラプソディ\";\n"
+               "var GTs = \"a.f.k.\";\n"
+               "var GTl = \"a.f.k. (Long)\";\n"
+               "var EpNo = 1;\n"
+               "var EpHiNo = 1;\n"
+               "var EpCount = 1;\n"
+               "var Type = \"TV\";\n"
+               "var Depr = 0;\n"
+               "var Cen = 0;\n"
+               "var Ver = 1;\n"
+               "var Source = \"HDTV\";";
+
+
+RenameSettingsDialog::RenameSettingsDialog(QWidget *parent) :
+    QDialog(parent),
+    ui(new Ui::RenameSettingsDialog)
+{
+    ui->setupUi(this);
+
+       environmentEngine = new RenameParser::RenameEngine;
+       rulesEngine = new RenameParser::RenameEngine;
+
+       ui->input->setPlainText(QString::fromUtf8(envStrAniAdd));
+       originalScript = LocalMyList::instance()->settings()->get("renameScript").toString();
+       ui->renameScript->setPlainText(originalScript);
+
+       QStringList parsers;
+       parsers << "AniAdd"
+                       << "ECMAScript";
+
+       ui->scriptLanguage->addItems(parsers);
+       originalParserType = RenameParser::RenameEngine::ParserType(LocalMyList::instance()->settings()->get("renameLanguage").toInt());
+       setParserType(originalParserType);
+}
+
+RenameSettingsDialog::~RenameSettingsDialog()
+{
+    delete ui;
+}
+
+QString RenameSettingsDialog::renameEnv() const
+{
+       return ui->input->toPlainText();
+}
+
+void RenameSettingsDialog::setRenameEnv(const QString &renameEnv)
+{
+       ui->input->setPlainText(renameEnv);
+       originalEnv = renameEnv;
+}
+
+bool RenameSettingsDialog::filterResults() const
+{
+       return ui->filterResultsCheckbox->isChecked();
+}
+
+void RenameSettingsDialog::setFilterResults(bool filterResults)
+{
+       ui->filterResultsCheckbox->setChecked(filterResults);
+}
+
+RenameParser::RenameEngine::ParserType RenameSettingsDialog::parserType() const
+{
+       return RenameParser::RenameEngine::ParserType(ui->scriptLanguage->currentIndex());
+}
+
+void RenameSettingsDialog::setParserType(RenameParser::RenameEngine::ParserType parserType)
+{
+       ui->scriptLanguage->setCurrentIndex(parserType);
+       originalParserType = parserType;
+}
+
+void RenameSettingsDialog::setupEnvForFile(int fid)
+{
+       using namespace LocalMyList;
+
+       if (!fid)
+               return;
+
+       Database *db = MyList::instance()->database();
+
+       QSqlQuery q(db->connection());
+
+       q.prepare("SELECT fid, eid, aid, gid, anime_anidb_update, anime_entry_update, anime_my_update, anime_title_english, anime_title_romaji, anime_title_kanji, "
+                         "             description, year, start_date, end_date, anime_type, anime_rating, anime_votes, temp_rating, temp_votes, anime_my_vote, anime_my_vote_date, my_temp_vote, my_temp_vote_date, "
+                         "episode_anidb_update, episode_entry_update, episode_my_update, epno, episode_title_english, episode_title_romaji, episode_title_kanji, episode_length, airdate, state, special, recap, "
+                         "             opening, ending, rating, votes, my_vote, my_vote_date, "
+                         "anidb_update, entry_update, my_update, ed2k, size, length, extension, group_name, group_name_short, crc, release_date, version, censored, type, quality_id, quality, resolution, "
+                         "             video_codec, audio_codec, audio_language, subtitle_language, aspect_ratio, my_watched, my_state, my_file_state, my_storage, my_source, my_other, host_id, path, renamed "
+                         "FROM rename_data "
+                         "WHERE fid = :fid ");
+
+       q.bindValue(":id", fid);
+
+       if (!db->exec(q))
+               return;
+
+       if (!q.next())
+               return;
+
+       QSqlRecord record = q.record();
+
+       RenameParser::Environment env;
+
+       setupRenameEnv(record, env);
+
+       QString s;
+       for (RenameParser::Environment::const_iterator i = env.constBegin(); i != env.constEnd(); ++i)
+       {
+               s += i.key() + " := \"" + i.value() + "\"\n";
+       }
+       ui->input->setText(s);
+}
+
+void RenameSettingsDialog::saveSettings()
+{
+       using namespace LocalMyList;
+
+       RenameParser::RenameEngine::ParserType parserType = RenameParser::RenameEngine::ParserType(ui->scriptLanguage->currentIndex());
+       QString renameScript = ui->renameScript->toPlainText();
+
+       Settings *s = MyList::instance()->settings();
+
+       s->set("renameLanguage", QString::number(parserType));
+       s->set("renameScript", renameScript);
+       s->commit();
+}
+
+void RenameSettingsDialog::restoreOriginalSettings()
+{
+       setParserType(originalParserType);
+       ui->renameScript->setPlainText(originalScript);
+}
+
+
+void RenameSettingsDialog::on_input_textChanged()
+{
+       bool success = environmentEngine->parse(ui->input->toPlainText() + "\n");
+
+       if (!success)
+       {
+               ui->status->setText("Error in input field: " + environmentEngine->error());
+               updateResult(RenameParser::Environment());
+               return;
+       }
+       RenameParser::Environment newEnv;
+       environmentEngine->evaluate(newEnv);
+       env = newEnv;
+
+       rulesEngine->evaluate(newEnv);
+       updateResult(newEnv);
+}
+
+void RenameSettingsDialog::on_renameScript_textChanged()
+{
+       RenameParser::Environment newEnv = env;
+
+       bool success = rulesEngine->parse(ui->renameScript->toPlainText() + "\n");
+
+       if (!success)
+       {
+               ui->status->setText("Error: " + rulesEngine->error());
+               updateResult(RenameParser::Environment());
+               return;
+       }
+       rulesEngine->evaluate(newEnv);
+       updateResult(newEnv);
+       ui->status->setText("Success");
+}
+
+void RenameSettingsDialog::on_scriptLanguage_currentIndexChanged()
+{
+       rulesEngine->setCurrentParserType(RenameParser::RenameEngine::ParserType(ui->scriptLanguage->currentIndex()));
+       on_input_textChanged();
+}
+
+void RenameSettingsDialog::updateResult(const RenameParser::Environment &env)
+{
+       QString s;
+       if (ui->filterResultsCheckbox->isChecked())
+       {
+               s += "FileName := \"" + env["FileName"] + "\"\n";
+               s += "PathName := \"" + env["PathName"] + "\"";
+       }
+       else
+       {
+               for (RenameParser::Environment::const_iterator i = env.constBegin(); i != env.constEnd(); ++i)
+               {
+                       s += i.key() + " := \"" + i.value() + "\"\n";
+               }
+       }
+       ui->result->setPlainText(s);
+}
+
+void RenameSettingsDialog::on_filterResultsCheckbox_toggled()
+{
+       on_renameScript_textChanged();
+}
+
+QString RenameSettingsDialog::renameString() const
+{
+       QString s = ui->renameScript->toPlainText();
+       if (!s.endsWith(QChar('\n')))
+               s += QChar('\n');
+       return s;
+}
+
+void RenameSettingsDialog::setRenameString(const QString &renameScript)
+{
+       ui->renameScript->setPlainText(renameScript);
+       originalScript = renameScript;
+}
+
+void RenameSettingsDialog::on_buttonBox_clicked(QAbstractButton *button)
+{
+       switch (ui->buttonBox->standardButton(button))
+       {
+               case QDialogButtonBox::Reset:
+                       restoreOriginalSettings();
+               break;
+               case QDialogButtonBox::RestoreDefaults:
+               {
+                       ui->input->setPlainText(QString::fromUtf8(envStrAniAdd));
+                       setParserType(RenameParser::RenameEngine::AniAdd);
+                       ui->renameScript->setPlainText(QString::fromUtf8(rulesStrAniAddNoCompat));
+               }
+               break;
+               case QDialogButtonBox::Save:
+                       saveSettings();
+               break;
+               case QDialogButtonBox::Cancel:
+                       restoreOriginalSettings();
+               break;
+               default:
+               break;
+       }
+}
diff --git a/management-gui/renamesettingsdialog.h b/management-gui/renamesettingsdialog.h
new file mode 100644 (file)
index 0000000..851386e
--- /dev/null
@@ -0,0 +1,65 @@
+#ifndef RENAMESETTINGSDIALOG_H
+#define RENAMESETTINGSDIALOG_H
+
+#include <QDialog>
+#include <RenameParser/RenameEngine>
+
+namespace Ui {
+    class RenameSettingsDialog;
+}
+
+class QAbstractButton;
+
+class RenameSettingsDialog : public QDialog
+{
+    Q_OBJECT
+       Q_PROPERTY(QString renameString READ renameString WRITE setRenameString)
+
+public:
+    explicit RenameSettingsDialog(QWidget *parent = 0);
+    ~RenameSettingsDialog();
+
+       QString renameString() const;
+       void setRenameString(const QString &renameString);
+
+       QString renameEnv() const;
+       void setRenameEnv(const QString &renameEnv);
+
+       bool filterResults() const;
+       void setFilterResults(bool filterResults);
+
+       RenameParser::RenameEngine::ParserType parserType() const;
+       void setParserType(RenameParser::RenameEngine::ParserType parserType);
+
+public slots:
+       void setupEnvForFile(int fid);
+       void saveSettings();
+       void restoreOriginalSettings();
+
+       void on_input_textChanged();
+       void on_renameScript_textChanged();
+
+       void on_scriptLanguage_currentIndexChanged();
+
+private slots:
+       void on_filterResultsCheckbox_toggled();
+
+       void on_buttonBox_clicked(QAbstractButton *button);
+
+private:
+       void updateResult(const RenameParser::Environment &env);
+
+    Ui::RenameSettingsDialog *ui;
+
+
+       RenameParser::RenameEngine *environmentEngine;
+       RenameParser::RenameEngine *rulesEngine;
+
+       RenameParser::Environment env;
+
+       QString originalEnv;
+       RenameParser::RenameEngine::ParserType originalParserType;
+       QString originalScript;
+};
+
+#endif // RENAMESETTINGSDIALOG_H
diff --git a/management-gui/renamesettingsdialog.ui b/management-gui/renamesettingsdialog.ui
new file mode 100644 (file)
index 0000000..4107d85
--- /dev/null
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>RenameSettingsDialog</class>
+ <widget class="QDialog" name="RenameSettingsDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1029</width>
+    <height>678</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Rename Script</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QGroupBox" name="groupBox">
+       <property name="title">
+        <string>Input</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_4">
+        <item>
+         <widget class="QTextEdit" name="input">
+          <property name="font">
+           <font>
+            <family>DejaVu Sans Mono</family>
+           </font>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox_2">
+       <property name="title">
+        <string>Result</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <item>
+         <widget class="QTextEdit" name="result">
+          <property name="font">
+           <font>
+            <family>DejaVu Sans Mono</family>
+           </font>
+          </property>
+          <property name="readOnly">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QCheckBox" name="filterResultsCheckbox">
+          <property name="text">
+           <string>Only show FileName and PathName</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Rename Script</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <layout class="QFormLayout" name="formLayout">
+          <item row="0" column="0">
+           <widget class="QLabel" name="scriptLanguageLabel">
+            <property name="text">
+             <string>Script Language:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QComboBox" name="scriptLanguage"/>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <widget class="QTextEdit" name="renameScript">
+        <property name="font">
+         <font>
+          <family>DejaVu Sans Mono</family>
+         </font>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_4">
+     <property name="title">
+      <string>Status</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_3">
+      <item>
+       <widget class="QLabel" name="status">
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults|QDialogButtonBox::Save</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>RenameSettingsDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>RenameSettingsDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>