summaryrefslogtreecommitdiff
path: root/plugins/Themes/Oxygen2
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Themes/Oxygen2')
-rwxr-xr-xplugins/Themes/Oxygen2/DarkButton.cpp99
-rwxr-xr-xplugins/Themes/Oxygen2/DarkButton.h22
-rwxr-xr-xplugins/Themes/Oxygen2/DebugEngineMacro.h28
-rwxr-xr-xplugins/Themes/Oxygen2/Environment.h10
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/ar/translation.qmbin0 -> 6338 bytes
-rw-r--r--plugins/Themes/Oxygen2/Languages/ar/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/de/translation.qmbin0 -> 7079 bytes
-rw-r--r--plugins/Themes/Oxygen2/Languages/de/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/el/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/el/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/en/translation.qmbin0 -> 334 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/en/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/es/translation.qmbin0 -> 6112 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/es/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/fr/translation.qmbin0 -> 6702 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/fr/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/hi/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/hi/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/hu/translation.qmbin0 -> 5898 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/hu/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/id/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/id/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/it/translation.qmbin0 -> 7360 bytes
-rw-r--r--plugins/Themes/Oxygen2/Languages/it/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/ja/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/ja/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/ko/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/ko/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/nl/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/nl/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/no/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/no/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/pl/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/pl/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/pt/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/pt/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/ru/translation.qmbin0 -> 1581 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/ru/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/th/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/th/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/tr/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/tr/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/zh/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/Languages/zh/translation.ts382
-rwxr-xr-xplugins/Themes/Oxygen2/Oxygen2Environment.h10
-rwxr-xr-xplugins/Themes/Oxygen2/Oxygen2Variable.h18
-rwxr-xr-xplugins/Themes/Oxygen2/ProgressBarDark.cpp69
-rwxr-xr-xplugins/Themes/Oxygen2/ProgressBarDark.h17
-rwxr-xr-xplugins/Themes/Oxygen2/README.md4
-rwxr-xr-xplugins/Themes/Oxygen2/StructEnumDefinition.h1
-rwxr-xr-xplugins/Themes/Oxygen2/ThemesFactory.cpp573
-rwxr-xr-xplugins/Themes/Oxygen2/ThemesFactory.h89
-rwxr-xr-xplugins/Themes/Oxygen2/TransferModel.cpp755
-rwxr-xr-xplugins/Themes/Oxygen2/TransferModel.h106
-rwxr-xr-xplugins/Themes/Oxygen2/VerticalLabel.cpp44
-rwxr-xr-xplugins/Themes/Oxygen2/VerticalLabel.h21
-rwxr-xr-xplugins/Themes/Oxygen2/chartarea.cpp117
-rwxr-xr-xplugins/Themes/Oxygen2/chartarea.h31
-rwxr-xr-xplugins/Themes/Oxygen2/documentation.dox31
-rwxr-xr-xplugins/Themes/Oxygen2/fileTree.cpp149
-rwxr-xr-xplugins/Themes/Oxygen2/fileTree.h133
-rwxr-xr-xplugins/Themes/Oxygen2/informations.xml26
-rwxr-xr-xplugins/Themes/Oxygen2/interface.cpp1995
-rwxr-xr-xplugins/Themes/Oxygen2/interface.h259
-rwxr-xr-xplugins/Themes/Oxygen2/interface.pro8
-rwxr-xr-xplugins/Themes/Oxygen2/interface.ui1098
-rwxr-xr-xplugins/Themes/Oxygen2/interfaceInclude.pri73
-rwxr-xr-xplugins/Themes/Oxygen2/interfaceResources.qrc36
-rwxr-xr-xplugins/Themes/Oxygen2/interfaceResources_unix.qrc7
-rwxr-xr-xplugins/Themes/Oxygen2/interfaceResources_windows.qrc7
-rwxr-xr-xplugins/Themes/Oxygen2/options.ui280
-rwxr-xr-xplugins/Themes/Oxygen2/plugin.json1
-rwxr-xr-xplugins/Themes/Oxygen2/radialMap/labels.cpp338
-rwxr-xr-xplugins/Themes/Oxygen2/radialMap/map.cpp421
-rwxr-xr-xplugins/Themes/Oxygen2/radialMap/map.h85
-rwxr-xr-xplugins/Themes/Oxygen2/radialMap/radialMap.h109
-rwxr-xr-xplugins/Themes/Oxygen2/radialMap/widget.cpp211
-rwxr-xr-xplugins/Themes/Oxygen2/radialMap/widget.h118
-rwxr-xr-xplugins/Themes/Oxygen2/radialMap/widgetEvents.cpp254
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/add.pngbin0 -> 552 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/exit.pngbin0 -> 874 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/informations.pngbin0 -> 841 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/options.pngbin0 -> 624 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Unix.pngbin0 -> 1093 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Windows.pngbin0 -> 623 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Unix.pngbin0 -> 1174 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Windows.pngbin0 -> 677 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Unix.pngbin0 -> 665 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Windows.pngbin0 -> 439 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/add.pngbin0 -> 552 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/cancel.pngbin0 -> 874 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/cancelDarkD.pngbin0 -> 151 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/cancelDarkE.pngbin0 -> 473 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/click.opusbin0 -> 632 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkButton.pngbin0 -> 3632 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkButtonOver.pngbin0 -> 4286 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkButtonPushed.pngbin0 -> 3541 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkmoveDown.pngbin0 -> 1349 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkmoveUp.pngbin0 -> 1530 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkplayer_end.pngbin0 -> 1153 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkplayer_pause.pngbin0 -> 1059 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/darkplayer_play.pngbin0 -> 1166 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/export-transfer-list.pngbin0 -> 455 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/import-transfer-list.pngbin0 -> 454 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/main.pngbin0 -> 623 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/moveDown.pngbin0 -> 466 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/moveUp.pngbin0 -> 466 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/over.opusbin0 -> 527 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/player_end.pngbin0 -> 696 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/player_pause.pngbin0 -> 640 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/player_play.pngbin0 -> 673 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/progressBarin.pngbin0 -> 4487 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/progressBarout.pngbin0 -> 1287 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/putOnBottom.pngbin0 -> 676 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/putOnTop.pngbin0 -> 681 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/remove.pngbin0 -> 683 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/resources/search.pngbin0 -> 781 bytes
-rwxr-xr-xplugins/Themes/Oxygen2/themesOptions.ui466
118 files changed, 15759 insertions, 0 deletions
diff --git a/plugins/Themes/Oxygen2/DarkButton.cpp b/plugins/Themes/Oxygen2/DarkButton.cpp
new file mode 100755
index 0000000..06b09f1
--- /dev/null
+++ b/plugins/Themes/Oxygen2/DarkButton.cpp
@@ -0,0 +1,99 @@
+#include "DarkButton.h"
+#include <QPainter>
+
+DarkButton::DarkButton(QWidget *parent) :
+ QPushButton(parent)
+{
+ setMinimumHeight(36);
+ setMaximumHeight(36);
+ setStyleSheet("border:none;color:#afb;");
+ over=false;
+ enabled=true;
+}
+
+void DarkButton::paintEvent(QPaintEvent * event)
+{
+ if(backgroundLeft.isNull() || backgroundLeft.height()!=height())
+ {
+ QPixmap background(":/Themes/Oxygen2/resources/darkButton.png");
+ if(background.isNull())
+ abort();
+ QPixmap backgroundPushed(":/Themes/Oxygen2/resources/darkButtonPushed.png");
+ if(backgroundPushed.isNull())
+ abort();
+ QPixmap over(":/Themes/Oxygen2/resources/darkButtonOver.png");
+ if(over.isNull())
+ abort();
+ if(height()==background.height())
+ {
+ backgroundLeft=background.copy(0,0,10,36);
+ backgroundMiddle=background.copy(10,0,46,36);
+ backgroundRight=background.copy(56,0,10,36);
+ backgroundPushedLeft=backgroundPushed.copy(0,0,10,36);
+ backgroundPushedMiddle=backgroundPushed.copy(10,0,46,36);
+ backgroundPushedRight=backgroundPushed.copy(56,0,10,36);
+ overLeft=over.copy(0,0,10,36);
+ overMiddle=over.copy(10,0,46,36);
+ overRight=over.copy(56,0,10,36);
+ }
+ else
+ {
+ backgroundLeft=background.copy(0,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundMiddle=background.copy(10,0,46,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundRight=background.copy(56,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundPushedLeft=backgroundPushed.copy(0,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundPushedMiddle=backgroundPushed.copy(10,0,46,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundPushedRight=backgroundPushed.copy(56,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ overLeft=over.copy(0,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ overMiddle=over.copy(10,0,46,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ overRight=over.copy(56,0,10,36).scaledToHeight(height(),Qt::SmoothTransformation);
+ }
+ }
+ QPainter paint;
+ paint.begin(this);
+ if(enabled && !isEnabled())
+ {
+ setStyleSheet("border:none;color:#fab;");
+ enabled=false;
+ }
+ if(!enabled && isEnabled())
+ {
+ setStyleSheet("border:none;color:#afb;");
+ enabled=true;
+ }
+ if(isDown() && isEnabled())
+ {
+ paint.drawPixmap(0,0,backgroundPushedLeft.width(), backgroundPushedLeft.height(), backgroundPushedLeft);
+ paint.drawPixmap(backgroundPushedLeft.width(), 0,
+ width()-backgroundPushedLeft.width()-backgroundPushedRight.width(), backgroundPushedLeft.height(),backgroundPushedMiddle);
+ paint.drawPixmap(width()-backgroundPushedRight.width(),0, backgroundPushedRight.width(), backgroundPushedRight.height(),backgroundPushedRight);
+ }
+ else
+ {
+ paint.drawPixmap(0,0,backgroundLeft.width(), backgroundLeft.height(), backgroundLeft);
+ paint.drawPixmap(backgroundLeft.width(), 0,
+ width()-backgroundLeft.width()-backgroundRight.width(), backgroundLeft.height(),backgroundMiddle);
+ paint.drawPixmap(width()-backgroundRight.width(),0, backgroundRight.width(), backgroundRight.height(),backgroundRight);
+ }
+ if(over && isEnabled())
+ {
+ paint.drawPixmap(0,0,overLeft.width(), overLeft.height(), overLeft);
+ paint.drawPixmap(overLeft.width(), 0,
+ width()-overLeft.width()-overRight.width(), overLeft.height(),overMiddle);
+ paint.drawPixmap(width()-overRight.width(),0, overRight.width(), overRight.height(),overRight);
+ }
+ QPushButton::paintEvent(event);
+}
+
+void DarkButton::enterEvent(QEvent *e)
+{
+ over=true;
+ QWidget::enterEvent(e);
+ update();
+}
+void DarkButton::leaveEvent(QEvent *e)
+{
+ over=false;
+ QWidget::leaveEvent(e);
+ update();
+}
diff --git a/plugins/Themes/Oxygen2/DarkButton.h b/plugins/Themes/Oxygen2/DarkButton.h
new file mode 100755
index 0000000..38dbb60
--- /dev/null
+++ b/plugins/Themes/Oxygen2/DarkButton.h
@@ -0,0 +1,22 @@
+#ifndef DarkButton_H
+#define DarkButton_H
+
+#include <QPushButton>
+
+class DarkButton : public QPushButton
+{
+public:
+ DarkButton(QWidget *parent = nullptr);
+ void paintEvent(QPaintEvent *) override;
+protected:
+ void enterEvent(QEvent *e) override;
+ void leaveEvent(QEvent *e) override;
+private:
+ QPixmap backgroundLeft,backgroundMiddle,backgroundRight;
+ QPixmap backgroundPushedLeft,backgroundPushedMiddle,backgroundPushedRight;
+ QPixmap overLeft,overMiddle,overRight;
+ bool over;
+ bool enabled;
+};
+
+#endif // PROGRESSBARDARK_H
diff --git a/plugins/Themes/Oxygen2/DebugEngineMacro.h b/plugins/Themes/Oxygen2/DebugEngineMacro.h
new file mode 100755
index 0000000..4582010
--- /dev/null
+++ b/plugins/Themes/Oxygen2/DebugEngineMacro.h
@@ -0,0 +1,28 @@
+/** \file DebugEngineMacro.h
+\brief Define the macro for the debug
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef DEBUGENGINEMACRO_H
+#define DEBUGENGINEMACRO_H
+
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
+/// \brief Macro for the debug log
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+ #if defined (__FILE__) && defined (__LINE__)
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b,__FILE__,__LINE__)
+ #else
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b)
+ #endif
+#else // ULTRACOPIER_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins/Themes/Oxygen2/Environment.h b/plugins/Themes/Oxygen2/Environment.h
new file mode 100755
index 0000000..265a5a6
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Environment.h
@@ -0,0 +1,10 @@
+/** \file Environment.h
+\brief Define the environment variable and global function
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "Variable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "DebugEngineMacro.h"
+
diff --git a/plugins/Themes/Oxygen2/Languages/ar/translation.qm b/plugins/Themes/Oxygen2/Languages/ar/translation.qm
new file mode 100755
index 0000000..563a429
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ar/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/ar/translation.ts b/plugins/Themes/Oxygen2/Languages/ar/translation.ts
new file mode 100644
index 0000000..383e6a3
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ar/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ar_JO">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation>ملفات %1</translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation>%1 ملف ، بمتوسط حجم %2</translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation>إلى ملفات %1</translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>شراء النسخة النهائية لتمويل التنمية</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>الملف %1/%2 ، الحجم: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation>قائمة النسخ</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation>قائمة التحريك</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>لا تغلق إذا تم العثور على أخطاء</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation>لا تغلق</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation>إغلاق دائما</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation>اسم الملف ، 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation>تحديد لون</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation>%1 %2% من %3 إلى ملفات %4</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>عدم الإغلاق في حاله العثور على أخطاء</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation>لا تغلق أبدا</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation>إغلاق دائما</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation>تحديد لون</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation>من:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation>&amp;اكثر </translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;مهلة</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;تخطي</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;الغاء الامر</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation>إغلاق عند إتمام النقل</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation>100MB+</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation>الحد من سرعه النسخ إلى:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation>قائمه النقل</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation>تحريك المواد المحددة إلى الأعلى</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation>تحريك المواد المحددة لاعلى</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation>تحريك المواد المحددة لأسفل</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>تحريك العناصر المحددة إلى الأسفل</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation>أضافه ملف/مجلد</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation>حذف المواد المحددة</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation>بحث</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation>تصدير قائمه النقل</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation>استيراد قائمه النقل</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation>السابق</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation>التالي</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation>خطا</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation>تصدير الأخطاء إلى قائمه النقل</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation>المصدر</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation>الوجهه</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation>الواجهه</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation>اضافة ملف</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation>اضافة مجلد</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation>نقل الملفات</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation>نقل المجلد</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation>نسخ الملفات</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation>نسخ المجلد</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation>إظهار التقدم المزدوج</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation>إظهار السرعة كمعلومات رئيسيه</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>استخدام</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>تبدا مع &quot;أكثر زر&quot; دفعت</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation>تصغير بالقرب من درج النظام</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation>في نهاية النسخ</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation>الحد من سرعه النسخ إلى</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation>KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation>بدء التصغير</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation>الموضع في البداية</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation>واجهه مستخدم داكنه</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation>افتراضي</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation>حفظ كسابق</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation>في الوسط</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation>المعلومات</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation>عرض</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation>السرعة مع شريط التقدم</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation>تدرج اللون</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation>انقر لتحرير اللون</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation>إظهار التقدم في العنوان</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation>دائما في القمه</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/de/translation.qm b/plugins/Themes/Oxygen2/Languages/de/translation.qm
new file mode 100755
index 0000000..ef742de
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/de/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/de/translation.ts b/plugins/Themes/Oxygen2/Languages/de/translation.ts
new file mode 100644
index 0000000..db34222
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/de/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de" sourcelanguage="en">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation>%1 Dateien</translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation>%1 Datei, mit einer ungefähren Größe von %2</translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation> in%1 Dateien</translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Kaufe die Ultimate Version um die Entwicklung zu finanzieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Datei %1/%2, Größe:%3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation>Zu kopierende Dateien</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation>Zu verschiebende Dateien</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Nicht schließen, wenn Fehler aufgetreten sind</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation>Niemals schließen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation>Immer schließen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation>Dateiname, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation>Farbe auswählen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation>%1 %2 von %3 in %4 Dateien</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Nicht schließen, wenn Fehler aufgetreten sind</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation>Niemals schließen</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation>Immer schließen</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation>Wählen Sie eine Farbe</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation>Von:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation>&amp;Mehr</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pause</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation>Dateiliste</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation>Ausgewählte Einträge löschen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation>Dateiliste exportieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation>Dateiliste importieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation>Vorherige</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation>Nächste</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation>Darstellungsoptionen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation>Ausgewählte Einträge an den Listenanfang verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation>100MB+</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation>Am Ende des Transfers schließen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation>Begrenze Kopiergeschwindigkeit auf:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation>Ausgewählte Einträge einen Platz nach oben verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation>Ausgewählte Einträge einen Platz nach unten verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Ausgewählte Einträge an das Listenende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation>Datei/Ordner hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation>In Dateiliste suchen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation>Fehlerprotokoll</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Fehlgeschlagene Dateien exportieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation>Quelle</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation>Datei hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation>Ordner hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation>Datei(en) verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation>Ordner verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation>Datei(en) kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation>Verzeichnis kopieren</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation>Zweifachen Fortschrittsbalken anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation>Geschwindigkeitsbegrenzungsschieberegler anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Benutzung</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Standardmäßig &quot;Mehr&quot; Informationen anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation>Beim Schließen ins Systray minimieren</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation>Am Ende des Vorgangs</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation>Begrenze Übertragungsgeschwindigkeit auf</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation>Minimiert starten</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation>Zum Bearbeiten der Farbe klicken</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation>Dunkles Design</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation>Informationen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation>Anzeige</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation>Geschwindigkeit als Fortschrittsbalken anzeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation>Farbe des Fortschrittsbalken</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation>Fortschritt im Fenstertitel zeigen</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation>Fenster immer im Vordergrund halten</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/el/translation.qm b/plugins/Themes/Oxygen2/Languages/el/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/el/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/el/translation.ts b/plugins/Themes/Oxygen2/Languages/el/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/el/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/en/translation.qm b/plugins/Themes/Oxygen2/Languages/en/translation.qm
new file mode 100755
index 0000000..d925dd6
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/en/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/en/translation.ts b/plugins/Themes/Oxygen2/Languages/en/translation.ts
new file mode 100755
index 0000000..4b62856
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/en/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/es/translation.qm b/plugins/Themes/Oxygen2/Languages/es/translation.qm
new file mode 100755
index 0000000..e18e87a
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/es/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/es/translation.ts b/plugins/Themes/Oxygen2/Languages/es/translation.ts
new file mode 100755
index 0000000..43e63df
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/es/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es" sourcelanguage="en">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Comprar la versión Ultimate para financiar el desarrollo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>El archivo %1/%2, el tamaño: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation>Lista de copia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation>Lista de movimiento</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>No cierre si se encuentran errores</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation>Nunca cierre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation>Siempre cerrar</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation>Nombre de archivo, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation>Seleccione un color</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>No cierre si se encuentran errores</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation>Nunca cierre</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation>Siempre cerrar</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation>Seleccione un color</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation>De:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation>&amp;Más</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pausa</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation>Cerca de finalización de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation>Limitar la velocidad de copia en:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation>Lista de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation>Mueve los elementos seleccionados a la parte superior</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation>Mueva los elementos seleccionados</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation>Bajar los elementos seleccionados</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Mueve los elementos seleccionados a la parte inferior</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation>Agregar archivo/carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation>Eliminar los elementos seleccionados</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation>Buscar</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation>Exportar la lista de transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation>Importe la lista de transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation>Anterior</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation>Próximo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Exportar los errores en la lista de transferencias</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation>Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation>Interfaz</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation>Añadir archivo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation>Añadir carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation>Mover archivo(s)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation>Mueva la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation>Copia el archivo(s)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation>Copia la carpeta</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation>Mostrar progresión dual</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation>Mostrar la velocidad como principales informaciones</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Uso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Comience con el &quot;botón más&quot; empujada</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation>Minimizar en cerca de la bandeja del sistema</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation>Al final de la copia</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation>Limitar la velocidad de copia de</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation>Haga clic para editar el color</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation>Visualización</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation>Velocidad con barra de progreso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation>Progresión de color</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation>Mostrar progresión en el título</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation>Siempre visible</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/fr/translation.qm b/plugins/Themes/Oxygen2/Languages/fr/translation.qm
new file mode 100755
index 0000000..c6039f5
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/fr/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/fr/translation.ts b/plugins/Themes/Oxygen2/Languages/fr/translation.ts
new file mode 100755
index 0000000..2fedb8b
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/fr/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr" sourcelanguage="en">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="+108"/>
+ <source>%1 files</source>
+ <translation>%1 fichiers</translation>
+ </message>
+ <message>
+ <location line="+96"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation>%1 fichiers, avec une taille moyenne de %2</translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="+194"/>
+ <location line="+2"/>
+ <source> into %1 files</source>
+ <translation> dans %1 fichiers</translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="+292"/>
+ <location line="+21"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Achetez la version Ultimate pour financer le développement</translation>
+ </message>
+ <message>
+ <location line="+197"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Fichier %1/%2, taille: %3/%4</translation>
+ </message>
+ <message>
+ <location line="+307"/>
+ <source>Copy list</source>
+ <translation>Liste de copies</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Move list</source>
+ <translation>Liste de déplacements</translation>
+ </message>
+ <message>
+ <location line="+501"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation>Ne jamais fermer</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation>Toujours fermer</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>File Name, 0KB</source>
+ <translation>Nom de fichier, 0Ko</translation>
+ </message>
+ <message>
+ <location line="+195"/>
+ <location line="+12"/>
+ <location line="+12"/>
+ <source>Select a color</source>
+ <translation>Selectionner une coleur</translation>
+ </message>
+ <message>
+ <location line="+88"/>
+ <location line="+11"/>
+ <location line="+9"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation>%1 %2% de %3 dans %4 fichiers</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="+320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation>Ne jamais fermer</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation>Toujours fermer</translation>
+ </message>
+ <message>
+ <location line="+196"/>
+ <location line="+15"/>
+ <location line="+15"/>
+ <source>Select a color</source>
+ <translation>Selectionner une coleur</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="+420"/>
+ <source>From:</source>
+ <translation>Depuis:</translation>
+ </message>
+ <message>
+ <location line="-119"/>
+ <source>&amp;More</source>
+ <translation>Pl&amp;us</translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pause</translation>
+ </message>
+ <message>
+ <location line="+161"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location line="-104"/>
+ <source>Close on transfer completion</source>
+ <translation>Fermer à la fin des transferts</translation>
+ </message>
+ <message>
+ <location line="-157"/>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>100MB+</source>
+ <translation>100Mo+</translation>
+ </message>
+ <message>
+ <location line="+275"/>
+ <source>Limit copy speed to:</source>
+ <translation>Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <location line="+43"/>
+ <source>Transfer list</source>
+ <translation>Liste de transferts</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>Move the selected items to the top</source>
+ <translation>Déplacer l&apos;item selectionné au debut</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move up the selected items</source>
+ <translation>Déplacer l&apos;item selectionné vers le haut</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move down the selected items</source>
+ <translation>Déplacer l&apos;item selectionné vers le bas</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Déplacer l&apos;item selectionné à la fin</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Add file/folder</source>
+ <translation>Ajouter fichier/dossier</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>Delete the selected items</source>
+ <translation>Supprimer les items sélectionnés</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Search</source>
+ <translation>Rechercher</translation>
+ </message>
+ <message>
+ <location line="+29"/>
+ <source>Export the transfer list</source>
+ <translation>Exporter la liste de transfert</translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Import the transfer list</source>
+ <translation>Importer la liste de transfert</translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Previous</source>
+ <translation>Précédent</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Next</source>
+ <translation>Suivant</translation>
+ </message>
+ <message>
+ <location line="+35"/>
+ <location line="+69"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location line="-49"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Exporter les erreurs dans une liste de transfert</translation>
+ </message>
+ <message>
+ <location line="+39"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <source>Interface</source>
+ <translation>Interface</translation>
+ </message>
+ <message>
+ <location line="+46"/>
+ <source>Add file</source>
+ <translation>Ajouter un fichier</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Add folder</source>
+ <translation>Ajouter un répertoire</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move file(s)</source>
+ <translation>Déplacer le(s) fichier(s)</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move folder</source>
+ <translation>Déplacer un répertoire</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy file(s)</source>
+ <translation>Copier le(s) fichier(s)</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy folder</source>
+ <translation>Copier un répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="+293"/>
+ <source>Show dual progression</source>
+ <translation>Afficher une double progression</translation>
+ </message>
+ <message>
+ <location line="-48"/>
+ <source>Show speed as main information</source>
+ <translation>Afficher la vitesse comme information principale</translation>
+ </message>
+ <message>
+ <location line="-201"/>
+ <source>Use</source>
+ <translation>Utilisation</translation>
+ </message>
+ <message>
+ <location line="+66"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Déplier automatiquement les détails</translation>
+ </message>
+ <message>
+ <location line="-53"/>
+ <source>Minimize on close to systray</source>
+ <translation>Minimiser à la fermeture dans le systray</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>At the end of the copy</source>
+ <translation>À la fin de la copie</translation>
+ </message>
+ <message>
+ <location line="-10"/>
+ <location line="+17"/>
+ <source>Limit copy speed to</source>
+ <translation>Limiter la vitesse de copie à</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Start minimized</source>
+ <translation>Démarrer minimisé</translation>
+ </message>
+ <message>
+ <location line="+27"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+188"/>
+ <source>Click to edit the color</source>
+ <translation>Cliquer pour éditer la couleur</translation>
+ </message>
+ <message>
+ <location line="-235"/>
+ <source> KB/s</source>
+ <translation> Ko/s</translation>
+ </message>
+ <message>
+ <location line="+107"/>
+ <source>Dark UI</source>
+ <translation>UI obscure</translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <source>Informations</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>Display</source>
+ <translation>Affichage</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Speed with progress bar</source>
+ <translation>Vitesse avec barre de progression</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Progression color</source>
+ <translation>Couleur de progression</translation>
+ </message>
+ <message>
+ <location line="-10"/>
+ <source>Show progression in the title</source>
+ <translation>Afficher la progression dans le titre</translation>
+ </message>
+ <message>
+ <location line="-166"/>
+ <source>Always on top</source>
+ <translation>Toujours au 1er plan</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/hi/translation.qm b/plugins/Themes/Oxygen2/Languages/hi/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/hi/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/hi/translation.ts b/plugins/Themes/Oxygen2/Languages/hi/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/hi/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/hu/translation.qm b/plugins/Themes/Oxygen2/Languages/hu/translation.qm
new file mode 100755
index 0000000..6567c41
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/hu/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/hu/translation.ts b/plugins/Themes/Oxygen2/Languages/hu/translation.ts
new file mode 100755
index 0000000..1d6d670
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/hu/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="hu">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Vásárold meg az Ultimate verziót a fejlesztés támogatásához</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Fájl %1/%2, méret: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation>Lista másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation>Lista mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Ne zárja be, ha hiba történik</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation>Sose zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation>Mindig zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation>Fájlnév, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation>Válassz egy színt</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Ne zárja be, ha hiba történik</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation>Sose zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation>Mindig zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation>Válassz egy színt</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation>Forrás:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation>&amp;Több</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Szünet</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Kihagy</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Mégse</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation>Átviteli lista</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation>Előző</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation>Következő</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation>Kezelőfelület</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation>Kijelölések elemek mozgatása legfelülre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation>Átvitel végeztével zárja be</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation>Másolási sebesség korlátozása:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation>Kijelölt elemek mozgatása fel</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation>Kijelölt elemek mozgatása le</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Kijelölések elemek mozgatása legalulra</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation>Fájl/mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation>Kijelölt elemek törlése</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation>Keresés</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation>Átviteli lista exportálása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation>Átviteli lista importálása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation>Hiba</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Hibák exportálása az átviteli listába</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation>Forrás</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation>Cél</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation>Fájl hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation>Mappa hozzáadása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation>Fájl(ok) mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation>Mappa mozgatása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation>Fájl(ok) másolása</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation>Mappa másolása</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation>Páros folyamat mutatása</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation>Sebesség mutatása, mint fő információ</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Használ</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Indítás a &quot;több gomb&quot; lenyomásával</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation>Bezáráskor minimalizálás a tálcára</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation>A másolás befejezésekor</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation>Másolási sebesség korlátozása</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation>Kattints a szín szerkesztéséhez</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation>Információk</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation>Megjelenítés</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation>Sebesség folyamatsávval</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation>Folyamat színe</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation>Folyamat mutatása a címsorban</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation>Mindig legfelül</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/id/translation.qm b/plugins/Themes/Oxygen2/Languages/id/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/id/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/id/translation.ts b/plugins/Themes/Oxygen2/Languages/id/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/id/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/it/translation.qm b/plugins/Themes/Oxygen2/Languages/it/translation.qm
new file mode 100755
index 0000000..5afbca5
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/it/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/it/translation.ts b/plugins/Themes/Oxygen2/Languages/it/translation.ts
new file mode 100644
index 0000000..1c6eb21
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/it/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="it" sourcelanguage="en">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation>%1 file</translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation>%1 file, con una dimensione media di %2</translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation> in %1 file</translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation>Acquista la versione Ultimate per finanziare lo sviluppo del programma</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>File %1/%2, dimensione: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation>Lista della copia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation>Lista dello spostamento</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Non chiudere se vengono rilevati errori</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation>Non chiudere mai</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation>Chiudere sempre</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation>Nome del file, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation>Scegliere un colore</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation>%1 %2% di %3 in %4 file</translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Non chiudere se vengono rilevati errori</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation>Non chiudere mai</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation>Chiudere sempre</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation>Scegliere un colore</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation>Da:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation>Avanzate</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation>Salta</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation>Annulla</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation>Arresta il sistema a trasferimento comletato</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation>100MB+</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation>Limitare la velocità di copia a:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation>Lista dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation>Sposta in cima gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation>Sposta sopra gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation>Sposta sotto gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation>Sposta in coda gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation>Aggiungi file/cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation>Elimina gli elementi selezionati</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation>Cerca</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation>Esporta la lista dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation>Importa la lista dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation>Precedente</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation>Successivo</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation>Esporta gli errori nella lista dei trasferimenti</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation>Cartella di origine</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation>Cartella di destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation>Interfaccia</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation>Aggiungi file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation>Aggiungi cartella</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation>Sposta file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation>Sposta la cartella</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation>Copia file</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation>Copia la cartella</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation>Mostrare la doppia progressione</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation>Mostrare la velocità come principale informazione</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation>Utilità</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation>Iniziare col pulsante &quot;Altro&quot; attivo</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation>Alla chiusura riduci nella&apos;area di notifica</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation>Al termine della copia</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation>Limitare velocità di copia a:</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation>Avvia ridotto a icona</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation>Posizione di partenza</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation>Clicca per modificare il colore</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation> KB/s</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation>Interfaccia utente scura</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation>Predefinito</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation>Mantenere come precedente</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation>Centrale</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation>Informazioni</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation>Visualizza</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation>Velocità nella barra di progresso</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation>Colore della progressione</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation>Mostrare la percentuale di progresso sul titolo</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation>Sempre in primo piano</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/ja/translation.qm b/plugins/Themes/Oxygen2/Languages/ja/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ja/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/ja/translation.ts b/plugins/Themes/Oxygen2/Languages/ja/translation.ts
new file mode 100755
index 0000000..851343e
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ja/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/ko/translation.qm b/plugins/Themes/Oxygen2/Languages/ko/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ko/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/ko/translation.ts b/plugins/Themes/Oxygen2/Languages/ko/translation.ts
new file mode 100755
index 0000000..689ea9e
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ko/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ko_KR">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="+108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+96"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="+194"/>
+ <location line="+2"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="+292"/>
+ <location line="+21"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+197"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished">파일 %1/%2, 크기: %3/%4</translation>
+ </message>
+ <message>
+ <location line="+307"/>
+ <source>Copy list</source>
+ <translation type="unfinished">복사 목록</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+501"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">오류 발견시 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation type="unfinished">절대 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation type="unfinished">항상 종료</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished">파일명, 0KB</translation>
+ </message>
+ <message>
+ <location line="+195"/>
+ <location line="+12"/>
+ <location line="+12"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+88"/>
+ <location line="+11"/>
+ <location line="+9"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="+320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">오류 발견시 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Never close</source>
+ <translation type="unfinished">절대 종료 안함</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Always close</source>
+ <translation type="unfinished">항상 종료</translation>
+ </message>
+ <message>
+ <location line="+196"/>
+ <location line="+15"/>
+ <location line="+15"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="+420"/>
+ <source>From:</source>
+ <translation type="unfinished">원본:</translation>
+ </message>
+ <message>
+ <location line="-119"/>
+ <source>&amp;More</source>
+ <translation type="unfinished">&amp;자세히</translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished">&amp;일시 정지</translation>
+ </message>
+ <message>
+ <location line="+161"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished">&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished">&amp;취소</translation>
+ </message>
+ <message>
+ <location line="+77"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+156"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Previous</source>
+ <translation type="unfinished">이전</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Next</source>
+ <translation type="unfinished">다음</translation>
+ </message>
+ <message>
+ <location line="+113"/>
+ <source>Interface</source>
+ <translation type="unfinished">인터페이스</translation>
+ </message>
+ <message>
+ <location line="-389"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-361"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+20"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+137"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+138"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+92"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+26"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+55"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+152"/>
+ <location line="+69"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-49"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+39"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+60"/>
+ <source>Add file</source>
+ <translation type="unfinished">파일 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Add folder</source>
+ <translation type="unfinished">폴더 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished">파일 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move folder</source>
+ <translation type="unfinished">폴더 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished">파일 복사</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy folder</source>
+ <translation type="unfinished">폴더 복사</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="+293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-48"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished">메인 정보에 속도 표시</translation>
+ </message>
+ <message>
+ <location line="-201"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+66"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-53"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-10"/>
+ <location line="+17"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+27"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+188"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-235"/>
+ <source> KB/s</source>
+ <translation type="unfinished"> KB/초</translation>
+ </message>
+ <message>
+ <location line="+107"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+8"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+17"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-10"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location line="-166"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/nl/translation.qm b/plugins/Themes/Oxygen2/Languages/nl/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/nl/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/nl/translation.ts b/plugins/Themes/Oxygen2/Languages/nl/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/nl/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/no/translation.qm b/plugins/Themes/Oxygen2/Languages/no/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/no/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/no/translation.ts b/plugins/Themes/Oxygen2/Languages/no/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/no/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/pl/translation.qm b/plugins/Themes/Oxygen2/Languages/pl/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/pl/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/pl/translation.ts b/plugins/Themes/Oxygen2/Languages/pl/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/pl/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/pt/translation.qm b/plugins/Themes/Oxygen2/Languages/pt/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/pt/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/pt/translation.ts b/plugins/Themes/Oxygen2/Languages/pt/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/pt/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/ru/translation.qm b/plugins/Themes/Oxygen2/Languages/ru/translation.qm
new file mode 100755
index 0000000..59964bb
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ru/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/ru/translation.ts b/plugins/Themes/Oxygen2/Languages/ru/translation.ts
new file mode 100755
index 0000000..512bece
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/ru/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ru" sourcelanguage="en">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Файл %1/%2, размер: %3/%4</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished">Копировать список</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">Не закрывать, если найдены ошибки</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished">Никогда не закрывать</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished">Всегда закрывайте</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation>Имя файла, 0KB</translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished">Не закрывать, если найдены ошибки</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished">Никогда не закрывать</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished">Всегда закрывайте</translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation>С:</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation>больше</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation>пауза</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation>предыдущий</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation>следующий</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation>интерфейс</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation>Добавить файл</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation>Добавить папку</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation>Перемещение файла(ов)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation>Перемещение папки</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation>Копировать файл (ы)</translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation>Копировать папку</translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished">Показать скорости в качестве основной информации</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"> Кб/с</translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/th/translation.qm b/plugins/Themes/Oxygen2/Languages/th/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/th/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/th/translation.ts b/plugins/Themes/Oxygen2/Languages/th/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/th/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/tr/translation.qm b/plugins/Themes/Oxygen2/Languages/tr/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/tr/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/tr/translation.ts b/plugins/Themes/Oxygen2/Languages/tr/translation.ts
new file mode 100755
index 0000000..24ac139
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/tr/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Languages/zh/translation.qm b/plugins/Themes/Oxygen2/Languages/zh/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/zh/translation.qm
Binary files differ
diff --git a/plugins/Themes/Oxygen2/Languages/zh/translation.ts b/plugins/Themes/Oxygen2/Languages/zh/translation.ts
new file mode 100755
index 0000000..851343e
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Languages/zh/translation.ts
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="108"/>
+ <source>%1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../radialMap/map.cpp" line="204"/>
+ <source>%1 file, with an average size of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RadialMap::Widget</name>
+ <message>
+ <location filename="../../radialMap/widgetEvents.cpp" line="194"/>
+ <location filename="../../radialMap/widgetEvents.cpp" line="196"/>
+ <source> into %1 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Themes</name>
+ <message>
+ <location filename="../../interface.cpp" line="292"/>
+ <location filename="../../interface.cpp" line="313"/>
+ <source>Buy the Ultimate version to fund development</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="510"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="817"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="819"/>
+ <source>Move list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1324"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1519"/>
+ <location filename="../../interface.cpp" line="1531"/>
+ <location filename="../../interface.cpp" line="1543"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="1631"/>
+ <location filename="../../interface.cpp" line="1642"/>
+ <location filename="../../interface.cpp" line="1651"/>
+ <source>%1 %2% of %3 into %4 files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ThemesFactory</name>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="320"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="321"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="322"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ThemesFactory.cpp" line="518"/>
+ <location filename="../../ThemesFactory.cpp" line="533"/>
+ <location filename="../../ThemesFactory.cpp" line="548"/>
+ <source>Select a color</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="420"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="301"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="321"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="482"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="493"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="570"/>
+ <source>Transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="726"/>
+ <source>Delete the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="781"/>
+ <source>Export the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="807"/>
+ <source>Import the transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="862"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="869"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="982"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="593"/>
+ <source>Move the selected items to the top</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="232"/>
+ <source>0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="252"/>
+ <source>100MB+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="389"/>
+ <source>Close on transfer completion</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="527"/>
+ <source>Limit copy speed to:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="619"/>
+ <source>Move up the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="645"/>
+ <source>Move down the selected items</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="671"/>
+ <source>Move the selected items to the bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="697"/>
+ <source>Add file/folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="752"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="904"/>
+ <location filename="../../interface.ui" line="973"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="924"/>
+ <source>Export the errors into transfer list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="963"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="968"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1028"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1037"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1046"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1055"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1064"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui" line="1073"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>themesOptions</name>
+ <message>
+ <location filename="../../themesOptions.ui" line="293"/>
+ <source>Show dual progression</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="245"/>
+ <source>Show speed as main information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="44"/>
+ <source>Use</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="110"/>
+ <source>Start with the &quot;more button&quot; pushed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="57"/>
+ <source>Minimize on close to systray</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="80"/>
+ <source>At the end of the copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="70"/>
+ <location filename="../../themesOptions.ui" line="87"/>
+ <source>Limit copy speed to</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="97"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="117"/>
+ <source>Start minimized</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="144"/>
+ <source>Position at start</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="204"/>
+ <source>Dark UI</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="212"/>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="217"/>
+ <source>Save as previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="222"/>
+ <source>At Center</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="239"/>
+ <source>Informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="277"/>
+ <source>Display</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="283"/>
+ <source>Speed with progress bar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="313"/>
+ <source>Progression color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="332"/>
+ <source>Click to edit the color</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="303"/>
+ <source>Show progression in the title</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../themesOptions.ui" line="137"/>
+ <source>Always on top</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen2/Oxygen2Environment.h b/plugins/Themes/Oxygen2/Oxygen2Environment.h
new file mode 100755
index 0000000..71b9141
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Oxygen2Environment.h
@@ -0,0 +1,10 @@
+/** \file Environment.h
+\brief Define the environment variable and global function
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "Oxygen2Variable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "DebugEngineMacro.h"
+
diff --git a/plugins/Themes/Oxygen2/Oxygen2Variable.h b/plugins/Themes/Oxygen2/Oxygen2Variable.h
new file mode 100755
index 0000000..81a97d7
--- /dev/null
+++ b/plugins/Themes/Oxygen2/Oxygen2Variable.h
@@ -0,0 +1,18 @@
+/** \file Variable.h
+\brief Define the environment variable
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef VARIABLEINTERFACEO2_H
+#define VARIABLEINTERFACEO2_H
+
+
+//Un-comment this next line to put ultracopier plugin in debug mode
+#ifndef ULTRACOPIER_NODEBUG
+//#define ULTRACOPIER_PLUGIN_DEBUG
+#endif
+
+#endif // VARIABLEINTERFACEO2_H
+
+
+
diff --git a/plugins/Themes/Oxygen2/ProgressBarDark.cpp b/plugins/Themes/Oxygen2/ProgressBarDark.cpp
new file mode 100755
index 0000000..3a6b414
--- /dev/null
+++ b/plugins/Themes/Oxygen2/ProgressBarDark.cpp
@@ -0,0 +1,69 @@
+#include "ProgressBarDark.h"
+#include <QPainter>
+
+ProgressBarDark::ProgressBarDark(QWidget *parent) :
+ QProgressBar(parent)
+{
+ setMinimumHeight(22);
+ setMaximumHeight(55);
+}
+
+ProgressBarDark::~ProgressBarDark()
+{
+}
+
+void ProgressBarDark::paintEvent(QPaintEvent *)
+{
+ if(backgroundLeft.isNull() || backgroundLeft.height()!=height())
+ {
+ QPixmap background(":/Themes/Oxygen2/resources/progressBarout.png");
+ if(background.isNull())
+ abort();
+ QPixmap bar(":/Themes/Oxygen2/resources/progressBarin.png");
+ if(bar.isNull())
+ abort();
+ if(height()==background.height())
+ {
+ backgroundLeft=background.copy(0,0,24,55);
+ backgroundMiddle=background.copy(24,0,701,55);
+ backgroundRight=background.copy(725,0,24,55);
+ barLeft=bar.copy(0,0,24,55);
+ barMiddle=bar.copy(24,0,701,55);
+ barRight=bar.copy(725,0,24,55);
+ }
+ else
+ {
+ backgroundLeft=background.copy(0,0,24,55).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundMiddle=background.copy(24,0,701,55).scaledToHeight(height(),Qt::SmoothTransformation);
+ backgroundRight=background.copy(725,0,24,55).scaledToHeight(height(),Qt::SmoothTransformation);
+ barLeft=bar.copy(0,0,24,55).scaledToHeight(height(),Qt::SmoothTransformation);
+ barMiddle=bar.copy(24,0,701,55).scaledToHeight(height(),Qt::SmoothTransformation);
+ barRight=bar.copy(725,0,24,55).scaledToHeight(height(),Qt::SmoothTransformation);
+ }
+ }
+ QPainter paint;
+ paint.begin(this);
+
+ if(maximum()<=0)
+ {
+ paint.drawPixmap(0,0,backgroundLeft.width(), backgroundLeft.height(), backgroundLeft);
+ paint.drawPixmap(backgroundLeft.width(), 0,
+ width()-backgroundLeft.width()-backgroundRight.width(), backgroundLeft.height(),backgroundMiddle);
+ paint.drawPixmap(width()-backgroundRight.width(),0, backgroundRight.width(), backgroundRight.height(),backgroundRight);
+ return;
+ }
+
+ int size=width()-barLeft.width()-barRight.width();
+ int inpixel=value()*size/maximum();
+
+ paint.drawPixmap(0,0,backgroundLeft.width(), backgroundLeft.height(), backgroundLeft);
+ paint.drawPixmap(0,0,barLeft.width(), barLeft.height(), barLeft);
+
+ paint.drawPixmap(backgroundLeft.width(), 0,
+ width()-backgroundLeft.width()-backgroundRight.width(), backgroundLeft.height(),backgroundMiddle);
+ paint.drawPixmap(barLeft.width(), 0,
+ inpixel, barLeft.height(),barMiddle);
+
+ paint.drawPixmap(width()-backgroundRight.width(),0, backgroundRight.width(), backgroundRight.height(),backgroundRight);
+ paint.drawPixmap(barLeft.width()+inpixel, 0, barRight.width(), barRight.height(),barRight);
+}
diff --git a/plugins/Themes/Oxygen2/ProgressBarDark.h b/plugins/Themes/Oxygen2/ProgressBarDark.h
new file mode 100755
index 0000000..7c8e168
--- /dev/null
+++ b/plugins/Themes/Oxygen2/ProgressBarDark.h
@@ -0,0 +1,17 @@
+#ifndef PROGRESSBARDARK_H
+#define PROGRESSBARDARK_H
+
+#include <QProgressBar>
+
+class ProgressBarDark : public QProgressBar
+{
+public:
+ ProgressBarDark(QWidget *parent = nullptr);
+ ~ProgressBarDark();
+ void paintEvent(QPaintEvent *) override;
+private:
+ QPixmap backgroundLeft,backgroundMiddle,backgroundRight;
+ QPixmap barLeft,barMiddle,barRight;
+};
+
+#endif // PROGRESSBARDARK_H
diff --git a/plugins/Themes/Oxygen2/README.md b/plugins/Themes/Oxygen2/README.md
new file mode 100755
index 0000000..b529701
--- /dev/null
+++ b/plugins/Themes/Oxygen2/README.md
@@ -0,0 +1,4 @@
+# Themes: Oxygen
+
+This theme is based on the the Oxygen project for KDE Plasma desktops. It is the
+default theme for _Ultracopier_.
diff --git a/plugins/Themes/Oxygen2/StructEnumDefinition.h b/plugins/Themes/Oxygen2/StructEnumDefinition.h
new file mode 100755
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/Themes/Oxygen2/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/Themes/Oxygen2/ThemesFactory.cpp b/plugins/Themes/Oxygen2/ThemesFactory.cpp
new file mode 100755
index 0000000..111cbaa
--- /dev/null
+++ b/plugins/Themes/Oxygen2/ThemesFactory.cpp
@@ -0,0 +1,573 @@
+/** \file factory.cpp
+\brief Define the factory core
+\author alpha_one_x86 */
+
+#include <QColorDialog>
+#include <QDesktopWidget>
+#include <QScreen>
+
+#include "ThemesFactory.h"
+#include "../../../cpp11addition.h"
+
+ThemesFactory::ThemesFactory()
+{
+ optionsEngine=NULL;
+ tempWidget=new QWidget();
+ ui=new Ui::themesOptions();
+ ui->setupUi(tempWidget);
+ ui->toolBox->setCurrentIndex(0);
+ currentSpeed = 0;
+ updateSpeed();
+
+ qRegisterMetaType<QList<QPersistentModelIndex> >("QList<QPersistentModelIndex>");
+}
+
+ThemesFactory::~ThemesFactory()
+{
+}
+
+PluginInterface_Themes * ThemesFactory::getInstance()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, currentSpeed: "+std::to_string(currentSpeed));
+
+ Themes * newInterface=new Themes(
+ ui->alwaysOnTop->isChecked(),
+ ui->showProgressionInTheTitle->isChecked(),
+ progressColorWrite,progressColorRead,progressColorRemaining,
+ ui->showDualProgression->isChecked(),
+ ui->comboBox_copyEnd->currentIndex(),
+ ui->speedWithProgressBar->isChecked(),
+ currentSpeed,
+ ui->checkBoxShowSpeed->isChecked(),
+ facilityEngine,
+ ui->checkBoxStartWithMoreButtonPushed->isChecked(),
+ ui->minimizeToSystray->isChecked(),
+ ui->startMinimized->isChecked(),
+ ui->savePosition->currentIndex(),
+ ui->dark->isChecked()
+ );
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(!connect(newInterface,&Themes::debugInformation,this,&PluginInterface_ThemesFactory::debugInformation))
+ abort();
+ #endif
+ if(!connect(this,&ThemesFactory::reloadLanguage,newInterface,&Themes::newLanguageLoaded))
+ abort();
+ if(!connect(newInterface,&Themes::destroyed,this,&ThemesFactory::savePositionBeforeClose))
+ abort();
+ switch(ui->savePosition->currentIndex())
+ {
+ default:
+ case 0:
+ break;
+ case 1:
+ newInterface->move(
+ stringtouint32(optionsEngine->getOptionValue("savePositionX")),
+ stringtouint32(optionsEngine->getOptionValue("savePositionY"))
+ );
+ break;
+ case 2:
+ if(!qApp->screens().isEmpty())
+ newInterface->setGeometry(
+ QStyle::alignedRect(
+ Qt::LeftToRight,
+ Qt::AlignCenter,
+ newInterface->size(),
+ #if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
+ qApp->desktop()->availableGeometry()
+ #else
+ qApp->screens().front()->geometry()
+ #endif
+ )
+ );
+ break;
+ }
+ return newInterface;
+}
+
+void ThemesFactory::savePositionBeforeClose(QObject *obj)
+{
+ if(ui->savePosition->currentIndex()!=1)
+ return;
+ if(obj == nullptr)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"obj == nullptr");
+ return;
+ }
+ const QWidget * const widget=static_cast<QWidget *>(obj);
+ optionsEngine->setOptionValue("savePositionX",std::to_string(widget->x()));
+ optionsEngine->setOptionValue("savePositionY",std::to_string(widget->y()));
+}
+
+void ThemesFactory::setResources(OptionInterface * optionsEngine,const std::string &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ writePath
+ #endif
+ ,const std::string &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ pluginPath
+ #endif
+ ,FacilityInterface * facilityEngine,const bool &
+ )
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath: "+pluginPath);
+ this->facilityEngine=facilityEngine;
+ if(optionsEngine!=NULL)
+ {
+ this->optionsEngine=optionsEngine;
+ //load the options
+ std::vector<std::pair<std::string, std::string> > KeysList;
+ KeysList.push_back(std::pair<std::string, std::string>("checkBoxShowSpeed","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("moreButtonPushed","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("speedWithProgressBar","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("currentSpeed","0"));
+ KeysList.push_back(std::pair<std::string, std::string>("comboBox_copyEnd","0"));
+ KeysList.push_back(std::pair<std::string, std::string>("showDualProgression","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("showProgressionInTheTitle","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("progressColorWrite",QApplication::palette().color(QPalette::Highlight).name().toStdString()));
+ KeysList.push_back(std::pair<std::string, std::string>("progressColorRead",QApplication::palette().color(QPalette::AlternateBase).name().toStdString()));
+ KeysList.push_back(std::pair<std::string, std::string>("progressColorRemaining",QApplication::palette().color(QPalette::Base).name().toStdString()));
+ KeysList.push_back(std::pair<std::string, std::string>("alwaysOnTop","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("minimizeToSystray","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("startMinimized","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("savePosition","0"));
+ KeysList.push_back(std::pair<std::string, std::string>("savePositionX","0"));
+ KeysList.push_back(std::pair<std::string, std::string>("savePositionY","0"));
+ KeysList.push_back(std::pair<std::string, std::string>("dark","true"));
+ optionsEngine->addOptionGroup(KeysList);
+ connect(optionsEngine,&OptionInterface::resetOptions,this,&ThemesFactory::resetOptions);
+ updateSpeed();
+
+ ui->comboBox_copyEnd->setCurrentIndex(stringtouint32(optionsEngine->getOptionValue("comboBox_copyEnd")));
+ ui->speedWithProgressBar->setChecked(stringtobool(optionsEngine->getOptionValue("speedWithProgressBar")));
+ ui->checkBoxShowSpeed->setChecked(stringtobool(optionsEngine->getOptionValue("checkBoxShowSpeed")));
+ ui->checkBoxStartWithMoreButtonPushed->setChecked(stringtobool(optionsEngine->getOptionValue("moreButtonPushed")));
+ ui->showDualProgression->setChecked(stringtobool(optionsEngine->getOptionValue("showDualProgression")));
+ ui->showProgressionInTheTitle->setChecked(stringtobool(optionsEngine->getOptionValue("showProgressionInTheTitle")));
+ ui->alwaysOnTop->setChecked(stringtobool(optionsEngine->getOptionValue("alwaysOnTop")));
+ ui->minimizeToSystray->setChecked(stringtobool(optionsEngine->getOptionValue("minimizeToSystray")));
+ ui->startMinimized->setChecked(stringtobool(optionsEngine->getOptionValue("startMinimized")));
+ ui->savePosition->setCurrentIndex(stringtouint8(optionsEngine->getOptionValue("savePosition")));
+ ui->dark->setChecked(stringtobool(optionsEngine->getOptionValue("dark")));
+ }
+ #ifndef __GNUC__
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"__GNUC__ is not set");
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"__GNUC__ is set");
+ #endif
+}
+
+QWidget * ThemesFactory::options()
+{
+ if(optionsEngine!=NULL)
+ {
+ bool ok;
+ currentSpeed=stringtouint32(optionsEngine->getOptionValue("currentSpeed"),&ok);
+ if(!ok)
+ currentSpeed=0;
+
+ progressColorWrite=QVariant(QString::fromStdString(optionsEngine->getOptionValue("progressColorWrite"))).value<QColor>();
+ progressColorRead=QVariant(QString::fromStdString(optionsEngine->getOptionValue("progressColorRead"))).value<QColor>();
+ progressColorRemaining=QVariant(QString::fromStdString(optionsEngine->getOptionValue("progressColorRemaining"))).value<QColor>();
+
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ ui->progressColorWrite->setIcon(pixmap);
+ pixmap.fill(progressColorRead);
+ ui->progressColorRead->setIcon(pixmap);
+ pixmap.fill(progressColorRemaining);
+ ui->progressColorRemaining->setIcon(pixmap);
+ updateSpeed();
+ updateProgressionColorBar();
+
+ if(!connect(ui->alwaysOnTop,&QCheckBox::stateChanged,this,&ThemesFactory::alwaysOnTop))
+ abort();
+ if(!connect(ui->checkBoxShowSpeed,&QCheckBox::stateChanged,this,&ThemesFactory::checkBoxShowSpeed))
+ abort();
+ if(!connect(ui->minimizeToSystray,&QCheckBox::stateChanged,this,&ThemesFactory::minimizeToSystray))
+ abort();
+ if(!connect(ui->checkBox_limitSpeed,&QCheckBox::stateChanged,this,&ThemesFactory::uiUpdateSpeed))
+ abort();
+ if(!connect(ui->SliderSpeed,&QAbstractSlider::valueChanged,this,&ThemesFactory::on_SliderSpeed_valueChanged))
+ abort();
+ if(!connect(ui->limitSpeed,static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &ThemesFactory::uiUpdateSpeed))
+ abort();
+ if(!connect(ui->checkBoxShowSpeed,&QAbstractButton::toggled,this,&ThemesFactory::checkBoxShowSpeedHaveChanged))
+ abort();
+ if(!connect(ui->checkBoxStartWithMoreButtonPushed,&QAbstractButton::toggled,this,&ThemesFactory::checkBoxStartWithMoreButtonPushedHaveChanged))
+ abort();
+ if(!connect(ui->speedWithProgressBar,&QAbstractButton::toggled,this,&ThemesFactory::speedWithProgressBar))
+ abort();
+ if(!connect(ui->comboBox_copyEnd, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&ThemesFactory::comboBox_copyEnd))
+ abort();
+ if(!connect(ui->showDualProgression,&QCheckBox::stateChanged,this,&ThemesFactory::showDualProgression))
+ abort();
+ if(!connect(ui->showDualProgression,&QCheckBox::stateChanged,this,&ThemesFactory::updateProgressionColorBar))
+ abort();
+ if(!connect(ui->showProgressionInTheTitle,&QCheckBox::stateChanged,this,&ThemesFactory::setShowProgressionInTheTitle))
+ abort();
+ if(!connect(ui->progressColorWrite,&QAbstractButton::clicked,this,&ThemesFactory::progressColorWrite_clicked))
+ abort();
+ if(!connect(ui->progressColorRead, &QAbstractButton::clicked,this,&ThemesFactory::progressColorRead_clicked))
+ abort();
+ if(!connect(ui->progressColorRemaining,&QAbstractButton::clicked,this,&ThemesFactory::progressColorRemaining_clicked))
+ abort();
+ if(!connect(ui->startMinimized,&QCheckBox::stateChanged,this,&ThemesFactory::startMinimized))
+ abort();
+ if(!connect(ui->savePosition,static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,&ThemesFactory::savePositionHaveChanged))
+ abort();
+ if(!connect(ui->dark,&QCheckBox::stateChanged,this,&ThemesFactory::setDark))
+ abort();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"return the options");
+ return tempWidget;
+}
+
+QIcon ThemesFactory::getIcon(const std::string &fileName) const
+{
+ if(fileName=="SystemTrayIcon/exit.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("application-exit");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ else if(fileName=="SystemTrayIcon/add.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("list-add");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ else if(fileName=="SystemTrayIcon/informations.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("help-about");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ else if(fileName=="SystemTrayIcon/options.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("applications-system");
+ if(!tempIcon.isNull())
+ return tempIcon;
+ }
+ return QIcon(":/Themes/Oxygen2/resources/"+QString::fromStdString(fileName));
+}
+
+void ThemesFactory::resetOptions()
+{
+ ui->checkBoxShowSpeed->setChecked(true);
+ ui->checkBoxStartWithMoreButtonPushed->setChecked(false);
+ ui->savePosition->setCurrentIndex(0);
+}
+
+void ThemesFactory::checkBoxShowSpeedHaveChanged(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checkBoxShowSpeed",std::to_string(toggled));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("moreButtonPushed",std::to_string(toggled));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::savePositionHaveChanged(int value)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("savePosition",std::to_string(value));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::setDark(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("dark",std::to_string(toggled));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::comboBox_copyEnd(int value)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("comboBox_copyEnd",std::to_string(value));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::speedWithProgressBar(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("speedWithProgressBar",std::to_string(toggled));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::newLanguageLoaded()
+{
+ ui->retranslateUi(tempWidget);
+ ui->comboBox_copyEnd->setItemText(0,tr("Don't close if errors are found"));
+ ui->comboBox_copyEnd->setItemText(1,tr("Never close"));
+ ui->comboBox_copyEnd->setItemText(2,tr("Always close"));
+ emit reloadLanguage();
+}
+
+void ThemesFactory::checkBoxShowSpeed(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ Q_UNUSED(checked);
+ updateSpeed();
+}
+
+void ThemesFactory::minimizeToSystray(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("minimizeToSystray",std::to_string(checked));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::alwaysOnTop(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("alwaysOnTop",std::to_string(checked));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::showDualProgression(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("showDualProgression",std::to_string(checked));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::startMinimized(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("startMinimized",std::to_string(checked));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::on_SliderSpeed_valueChanged(int value)
+{
+ if(optionsEngine==NULL)
+ return;
+ if(!ui->checkBoxShowSpeed->isChecked())
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"value: "+std::to_string(value));
+ switch(value)
+ {
+ case 0:
+ currentSpeed=0;
+ break;
+ case 1:
+ currentSpeed=1024;
+ break;
+ case 2:
+ currentSpeed=1024*4;
+ break;
+ case 3:
+ currentSpeed=1024*16;
+ break;
+ case 4:
+ currentSpeed=1024*64;
+ break;
+ case 5:
+ currentSpeed=1024*128;
+ break;
+ }
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("currentSpeed",std::to_string(currentSpeed));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ updateSpeed();
+}
+
+void ThemesFactory::uiUpdateSpeed()
+{
+ if(optionsEngine==NULL)
+ return;
+ if(ui->checkBoxShowSpeed->isChecked())
+ return;
+ if(!ui->checkBox_limitSpeed->isChecked())
+ currentSpeed=0;
+ else
+ currentSpeed=ui->limitSpeed->value();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"emit newSpeedLimitation: "+std::to_string(currentSpeed));
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("currentSpeed",std::to_string(currentSpeed));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::updateSpeed()
+{
+ if(optionsEngine==NULL)
+ return;
+ ui->label_Slider_speed->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->SliderSpeed->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->label_SpeedMaxValue->setVisible(ui->checkBoxShowSpeed->isChecked());
+ ui->limitSpeed->setVisible(!ui->checkBoxShowSpeed->isChecked());
+ ui->checkBox_limitSpeed->setVisible(!ui->checkBoxShowSpeed->isChecked());
+
+ if(ui->checkBoxShowSpeed->isChecked())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"checked, currentSpeed: "+std::to_string(currentSpeed));
+ ui->limitSpeed->setEnabled(false);
+ if(currentSpeed==0)
+ {
+ ui->SliderSpeed->setValue(0);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->translateText("Unlimited")));
+ }
+ else if(currentSpeed<=1024)
+ {
+ if(currentSpeed!=1024)
+ {
+ currentSpeed=1024;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("currentSpeed",std::to_string(currentSpeed));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(1);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*1)));
+ }
+ else if(currentSpeed<=1024*4)
+ {
+ if(currentSpeed!=1024*4)
+ {
+ currentSpeed=1024*4;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("currentSpeed",std::to_string(currentSpeed));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(2);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*4)));
+ }
+ else if(currentSpeed<=1024*16)
+ {
+ if(currentSpeed!=1024*16)
+ {
+ currentSpeed=1024*16;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("currentSpeed",std::to_string(currentSpeed));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(3);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*16)));
+ }
+ else if(currentSpeed<=1024*64)
+ {
+ if(currentSpeed!=1024*64)
+ {
+ currentSpeed=1024*64;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("currentSpeed",std::to_string(currentSpeed));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(4);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*64)));
+ }
+ else
+ {
+ if(currentSpeed!=1024*128)
+ {
+ currentSpeed=1024*128;
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("currentSpeed",std::to_string(currentSpeed));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+ }
+ ui->SliderSpeed->setValue(5);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*128)));
+ }
+ }
+ else
+ {
+ ui->checkBox_limitSpeed->setChecked(currentSpeed>0);
+ if(currentSpeed>0)
+ ui->limitSpeed->setValue(currentSpeed);
+ ui->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
+ ui->limitSpeed->setEnabled(ui->checkBox_limitSpeed->isChecked());
+ }
+}
+
+void ThemesFactory::progressColorWrite_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorWrite,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorWrite=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ ui->progressColorWrite->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("progressColorWrite",progressColorWrite.name().toStdString());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::progressColorRead_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRead,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRead=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRead);
+ ui->progressColorRead->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("progressColorRead",progressColorRead.name().toStdString());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::progressColorRemaining_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRemaining,NULL,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRemaining=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRemaining);
+ ui->progressColorRemaining->setIcon(pixmap);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("progressColorRemaining",progressColorRemaining.name().toStdString());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void ThemesFactory::updateProgressionColorBar()
+{
+ ui->labelProgressionColor->setVisible(ui->showDualProgression->isChecked());
+ ui->frameProgressionColor->setVisible(ui->showDualProgression->isChecked());
+}
+
+void ThemesFactory::setShowProgressionInTheTitle()
+{
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("showProgressionInTheTitle",std::to_string(ui->showProgressionInTheTitle->isChecked()));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"internal error, crash prevented");
+}
diff --git a/plugins/Themes/Oxygen2/ThemesFactory.h b/plugins/Themes/Oxygen2/ThemesFactory.h
new file mode 100755
index 0000000..bd6095e
--- /dev/null
+++ b/plugins/Themes/Oxygen2/ThemesFactory.h
@@ -0,0 +1,89 @@
+/** \file factory.h
+\brief Define the factory, to create instance of the interface
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef FACTORYTHEMEOXYGEN_H
+#define FACTORYTHEMEOXYGEN_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+#include <QFile>
+#include <QIcon>
+#include <QColor>
+#include <QPixmap>
+
+#include "../../../interface/PluginInterface_Themes.h"
+#include "ui_themesOptions.h"
+#include "interface.h"
+#include "Oxygen2Environment.h"
+
+namespace Ui {
+ class themesOptions;
+}
+
+/// \brief Define the factory, to create instance of the interface
+class ThemesFactory : public PluginInterface_ThemesFactory
+{
+ Q_OBJECT
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.ThemesFactory/1.0.1.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_ThemesFactory)
+ #endif
+public:
+ ThemesFactory();
+ ~ThemesFactory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_Themes * getInstance() override;
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * optionsEngine,const std::string &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ writePath
+ #endif
+ ,const std::string &
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ pluginPath
+ #endif
+ ,FacilityInterface * facilityEngine,const bool &portableVersion) override;
+ /// \brief to get the default options widget
+ QWidget * options() override;
+ /// \brief to get a resource icon
+ QIcon getIcon(const std::string &fileName) const override;
+private slots:
+ void checkBoxShowSpeedHaveChanged(bool toggled);
+ void checkBoxStartWithMoreButtonPushedHaveChanged(bool toggled);
+ void comboBox_copyEnd(int value);
+ void speedWithProgressBar(bool toggled);
+ void checkBoxShowSpeed(bool checked);
+ void minimizeToSystray(bool checked);
+ void alwaysOnTop(bool checked);
+ void showDualProgression(bool checked);
+ void on_SliderSpeed_valueChanged(int value);
+ void uiUpdateSpeed();
+ void updateSpeed();
+ void progressColorWrite_clicked();
+ void progressColorRead_clicked();
+ void progressColorRemaining_clicked();
+ void updateProgressionColorBar();
+ void setShowProgressionInTheTitle();
+ void startMinimized(bool checked);
+ void savePositionBeforeClose(QObject *obj);
+ void savePositionHaveChanged(int value);
+ void setDark(bool toggled);
+public slots:
+ void resetOptions() override;
+ void newLanguageLoaded() override;
+private:
+ OptionInterface * optionsEngine;
+ Ui::themesOptions *ui;
+ QWidget *tempWidget;
+ FacilityInterface * facilityEngine;
+ int32_t currentSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ QColor progressColorWrite,progressColorRead,progressColorRemaining;
+signals:
+ void reloadLanguage() const;
+};
+
+#endif // FACTORY_H
diff --git a/plugins/Themes/Oxygen2/TransferModel.cpp b/plugins/Themes/Oxygen2/TransferModel.cpp
new file mode 100755
index 0000000..5a97aab
--- /dev/null
+++ b/plugins/Themes/Oxygen2/TransferModel.cpp
@@ -0,0 +1,755 @@
+#include "TransferModel.h"
+#include "../../../cpp11addition.h"
+#include <iostream>
+
+#define COLUMN_COUNT 3
+
+// Model
+
+QIcon *TransferModel::start=NULL;
+QIcon *TransferModel::stop=NULL;
+
+TransferModel::TransferModel()
+{
+ /// \warning to prevent Must construct a QGuiApplication before QPixmap IN STATIC WINDOWS VERSION ONLY
+ if(TransferModel::start==NULL)
+ TransferModel::start=new QIcon(QStringLiteral(":/resources/player_play.png"));
+ if(TransferModel::stop==NULL)
+ TransferModel::stop=new QIcon(QStringLiteral(":/resources/player_pause.png"));
+ currentIndexSearch=0;
+ haveSearchItem=false;
+ loop_size=0,index_for_loop=0;
+ sub_loop_size=0,sub_index_for_loop=0;
+ row=0,column=0;
+ facilityEngine=NULL;
+ currentIndexSearch=0;
+ haveSearchItem=false;
+ searchId=0;
+
+ tree=NULL;
+}
+
+int TransferModel::columnCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? COLUMN_COUNT : 0;
+}
+
+QVariant TransferModel::data( const QModelIndex& index, int role ) const
+{
+ int row,column;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || (unsigned int)row >= transfertItemList.size() || column < 0 || column >= COLUMN_COUNT)
+ return QVariant();
+
+ const TransfertItem& item = transfertItemList.at(row);
+ if(role==Qt::UserRole)
+ return (quint64)item.id;
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ return QString::fromStdString(item.source);
+ break;
+ case 1:
+ return QString::fromStdString(item.size);
+ break;
+ case 2:
+ return QString::fromStdString(item.destination);
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::DecorationRole)
+ {
+ switch(column)
+ {
+ case 0:
+ if(stopId.find(item.id)!=stopId.cend())
+ return *stop;
+ else if(startId.find(item.id)!=startId.cend())
+ return *start;
+ else
+ return QVariant();
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::BackgroundRole)
+ {
+ if(!search_text.empty() && (item.source.find(search_text)!=std::string::npos ||
+ item.destination.find(search_text)!=std::string::npos))
+ {
+ if(haveSearchItem && searchId==item.id)
+ return QColor(255,150,150,100);
+ else
+ return QColor(255,255,0,100);
+ }
+ else
+ return QVariant();
+ }
+ return QVariant();
+}
+
+int TransferModel::rowCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? transfertItemList.size() : 0;
+}
+
+uint64_t TransferModel::firstId() const
+{
+ if(transfertItemList.size()>0)
+ return transfertItemList.front().id;
+ else
+ return 0;
+}
+
+QVariant TransferModel::headerData( int section, Qt::Orientation orientation, int role ) const
+{
+ if(facilityEngine==NULL)
+ abort();
+ if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
+ switch ( section ) {
+ case 0:
+ return QString::fromStdString(facilityEngine->translateText("Source"));
+ case 1:
+ return QString::fromStdString(facilityEngine->translateText("Size"));
+ case 2:
+ return QString::fromStdString(facilityEngine->translateText("Destination"));
+ }
+ }
+
+ return QAbstractTableModel::headerData( section, orientation, role );
+}
+
+bool TransferModel::setData( const QModelIndex& index, const QVariant& value, int role )
+{
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || (unsigned int)row >= transfertItemList.size() || column < 0 || column >= COLUMN_COUNT)
+ return false;
+
+ TransfertItem& item = transfertItemList[row];
+ if(role==Qt::UserRole)
+ {
+ item.id=value.toULongLong();
+ return true;
+ }
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ item.source=value.toString().toStdString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 1:
+ item.size=value.toString().toStdString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 2:
+ item.destination=value.toString().toStdString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ default:
+ return false;
+ }
+ }
+ return false;
+}
+
+Folder * TransferModel::appendToTreeR(Folder * const tree, const std::string &subPath,Folder * const oldTree)
+{
+ const std::string::size_type n=subPath.find('/');
+
+ //isolate the name
+ std::string name;
+ if(n == std::string::npos)
+ name=subPath;
+ else
+ name=subPath.substr(0,n);
+ //search
+ auto search = tree->folders.find(name);
+ Folder * folder=nullptr;
+ if(search == tree->folders.end())
+ {
+ //append or remplace the existing
+ if(oldTree!=NULL && (n+1)==subPath.size())
+ {
+ oldTree->setName(subPath.substr(0,n).c_str());
+ folder=oldTree;
+ }
+ else
+ folder=new Folder(name);
+ if(!folder->isFolder())
+ {
+ if(oldTree!=NULL)
+ abort();
+ return nullptr;
+ }
+ tree->append(folder);
+ }
+ else
+ {
+ //create a new leaf
+ File * file=search->second;
+ if(!file->isFolder())
+ return nullptr;
+ folder=static_cast<Folder *>(file);
+ }
+ if(n == std::string::npos || n+1==subPath.size())
+ return folder;
+ else
+ return appendToTreeR(folder,subPath.substr(n+1),oldTree);
+}
+
+void TransferModel::appendToTree(const std::string &path,const uint64_t &size)
+{
+ if(size==0)
+ return;
+ const std::string::size_type n=path.rfind('/');
+ if(n == std::string::npos)
+ return;
+ if(treePath.empty())
+ {
+ treePath=path.substr(0,n+1);
+ tree->append(path.c_str()+n+1,size);
+ }
+ else
+ {
+ const std::string &newPath=path.substr(0,n+1);
+ unsigned int index=0;
+ while(index<newPath.size() && index<treePath.size())
+ {
+ if(treePath.at(index)!=newPath.at(index))
+ break;
+ index++;
+ }
+ //append to current path
+ if(index==treePath.size())
+ {
+ //get the next path, found or create
+ Folder * finalTree=tree;
+ if((n+1)>index)
+ {
+ const std::string &subPath=path.substr(index,(n+1)-index);
+ finalTree=appendToTreeR(tree,subPath);
+ }
+ finalTree->append(path.c_str()+n+1,size);
+ }
+ else //new root is to be created
+ {
+ //save the old values
+ const std::string oldTreePath=treePath;
+ Folder * const oldTree=tree;
+ tree=new Folder("");
+ treePath=path.substr(0,index);
+
+ //path switch to rebase the root
+ if(oldTreePath.size()>index)
+ appendToTreeR(tree,oldTreePath.substr(index),oldTree);
+
+ Folder * finalTree=tree;
+ //make the new sub path if have
+ if((n+1)>index)
+ finalTree=appendToTreeR(tree,path.substr(index));
+
+ //do the file
+ finalTree->append(path.c_str()+n+1,size);
+ }
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ //check the integrity of tree
+ /*now it's mostly stable checkIntegrityChildren(tree);
+ checkIntegritySize(tree);*/
+ #endif
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+//check the integrity of tree size
+uint64_t TransferModel::checkIntegritySize(const Folder * const tree)
+{
+ uint64_t size=0;
+ unsigned int index=0;
+ while(index<tree->onlyFiles.size())
+ {
+ File * file=tree->onlyFiles.at(index);
+ if(file->parent()!=tree)
+ {
+ std::cerr << "tree parrent corrupted" << std::endl;
+ abort();
+ }
+ size+=file->size();
+ index++;
+ }
+ for(const auto& n : tree->folders)
+ {
+ Folder * folder=n.second;
+ if(folder->parent()!=tree)
+ {
+ std::cerr << "tree parrent corrupted" << std::endl;
+ abort();
+ }
+ size+=checkIntegritySize(folder);
+ }
+ if(size!=tree->size())
+ {
+ std::cerr << "tree corrupted" << std::endl;
+ abort();
+ }
+ return tree->size();
+}
+
+//check the integrity of tree children
+uint64_t TransferModel::checkIntegrityChildren(const Folder * const tree)
+{
+ uint64_t childrens=0;
+ childrens+=tree->onlyFiles.size();
+ for(const auto& n : tree->folders)
+ {
+ Folder * folder=n.second;
+ if(folder->parent()!=tree)
+ {
+ std::cerr << "tree parrent corrupted" << std::endl;
+ abort();
+ }
+ childrens+=checkIntegrityChildren(folder);
+ }
+ if(childrens!=tree->children())
+ {
+ std::cerr << "tree corrupted" << std::endl;
+ abort();
+ }
+ return tree->children();
+}
+#endif
+
+/*
+ Return[0]: totalFile
+ Return[1]: totalSize
+ Return[2]: currentFile
+ */
+std::vector<uint64_t> TransferModel::synchronizeItems(const std::vector<Ultracopier::ReturnActionOnCopyList>& returnActions)
+{
+ const QModelIndexList oldIndexes = persistentIndexList();
+ QModelIndexList newIndexes=oldIndexes;
+ QMap<int, quint64> oldMapping; // model index row in model before update, item id
+ QMap<quint64, int> newMapping; // item id, model index row in model after update
+ for ( int i = 0; i < oldIndexes.count(); i++ ) {
+ const QModelIndex& index = oldIndexes.at(i);
+ oldMapping[index.row()] = index.data( Qt::UserRole ).value<quint64>();
+ }
+
+ loop_size=returnActions.size();
+ index_for_loop=0;
+ quint64 totalFile=0,totalSize=0,currentFile=0;
+ emit layoutAboutToBeChanged();
+ while(index_for_loop<loop_size)
+ {
+ const Ultracopier::ReturnActionOnCopyList& action=returnActions.at(index_for_loop);
+ switch(action.type)
+ {
+ case Ultracopier::AddingItem:
+ {
+ TransfertItem newItem;
+ newItem.id=action.addAction.id;
+ newItem.source=action.addAction.sourceFullPath;
+ newItem.size=facilityEngine->sizeToString(action.addAction.size);
+ newItem.destination=action.addAction.destinationFullPath;
+ transfertItemList.push_back(newItem);
+ totalFile++;
+ totalSize+=action.addAction.size;
+
+ appendToTree(action.addAction.sourceFullPath,action.addAction.size);
+ }
+ break;
+ case Ultracopier::MoveItem:
+ {
+ //bool current_entry=
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position).toStdString());
+ break;
+ }
+ if((unsigned int)action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position).toStdString());
+ break;
+ }
+ if(action.userAction.moveAt<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position).toStdString());
+ break;
+ }
+ if((unsigned int)action.userAction.moveAt>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, position is wrong: %2").arg(action.addAction.id).arg(action.userAction.position).toStdString());
+ break;
+ }
+ if(action.userAction.position==action.userAction.moveAt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("id: %1, move at same position: %2").arg(action.addAction.id).arg(action.userAction.position).toStdString());
+ break;
+ }
+ const TransfertItem transfertItem=transfertItemList.at(action.userAction.position);
+ transfertItemList.erase(transfertItemList.cbegin()+action.userAction.position);
+ transfertItemList.insert(transfertItemList.cbegin()+action.userAction.moveAt,transfertItem);
+ //newIndexes.move(action.userAction.position,action.userAction.moveAt);
+ }
+ break;
+ case Ultracopier::RemoveItem:
+ {
+ if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
+ currentIndexSearch--;
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position).toStdString());
+ break;
+ }
+ if((unsigned int)action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position).toStdString());
+ break;
+ }
+ transfertItemList.erase(transfertItemList.cbegin()+action.userAction.position);
+ currentFile++;
+ startId.erase(action.addAction.id);
+ stopId.erase(action.addAction.id);
+ internalRunningOperation.erase(action.addAction.id);
+ //newIndexes.remove(action.userAction.moveAt);
+ }
+ break;
+ case Ultracopier::PreOperation:
+ {
+ ItemOfCopyListWithMoreInformations tempItem;
+ tempItem.currentReadProgression=0;
+ tempItem.currentWriteProgression=0;
+ tempItem.generalData=action.addAction;
+ tempItem.actionType=action.type;
+ internalRunningOperation[action.addAction.id]=tempItem;
+ }
+ break;
+ case Ultracopier::Transfer:
+ {
+ if(startId.find(action.addAction.id)==startId.cend())
+ startId.insert(action.addAction.id);
+ stopId.erase(action.addAction.id);
+ if(internalRunningOperation.find(action.addAction.id)!=internalRunningOperation.cend())
+ internalRunningOperation[action.addAction.id].actionType=action.type;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id).toStdString());
+ }
+ break;
+ case Ultracopier::PostOperation:
+ {
+ if(stopId.find(action.addAction.id)==stopId.cend())
+ stopId.insert(action.addAction.id);
+ startId.erase(action.addAction.id);
+ }
+ break;
+ case Ultracopier::CustomOperation:
+ {
+ bool custom_with_progression=(action.addAction.size==1);
+ //without progression
+ if(custom_with_progression)
+ {
+ if(startId.find(action.addAction.id)!=startId.cend())
+ {
+ startId.erase(action.addAction.id);
+ if(stopId.find(action.addAction.id)==stopId.cend())
+ stopId.insert(action.addAction.id);
+ }
+ }
+ //with progression
+ else
+ {
+ stopId.erase(action.addAction.id);
+ if(startId.find(action.addAction.id)==startId.cend())
+ startId.insert(action.addAction.id);
+ }
+ if(internalRunningOperation.find(action.addAction.id)!=internalRunningOperation.cend())
+ {
+ ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
+ item.actionType=action.type;
+ item.custom_with_progression=custom_with_progression;
+ item.currentReadProgression=0;
+ item.currentWriteProgression=0;
+ }
+ }
+ break;
+ default:
+ //unknow code, ignore it
+ break;
+ }
+ index_for_loop++;
+ }
+
+ if(!oldIndexes.isEmpty())
+ {
+ const QSet<quint64> ids = oldMapping.values().toSet();
+
+ for ( unsigned int i = 0; i < transfertItemList.size(); i++ ) {
+ const TransferModel::TransfertItem& item = transfertItemList.at(i);
+
+ if ( ids.contains( item.id ) ) {
+ newMapping[ item.id ] = i;
+ }
+ }
+
+ for ( int i = 0; i < oldIndexes.count(); i++ ) {
+ const QModelIndex& index = oldIndexes.at(i);
+ const int newRow = newMapping.value( oldMapping.value(index.row()), -1 );
+ newIndexes[ i ] = newRow == -1 ? QModelIndex() : QAbstractTableModel::index( newRow, index.column(), index.parent() );
+ }
+ }
+
+ changePersistentIndexList( oldIndexes, newIndexes );
+ emit layoutChanged();
+ {
+ std::vector<uint64_t> newList;
+ newList.resize(3);
+ newList[0]=totalFile;
+ newList[1]=totalSize;
+ newList[2]=currentFile;
+ return newList;
+ }
+}
+
+void TransferModel::setFacilityEngine(FacilityInterface * facilityEngine)
+{
+ this->facilityEngine=facilityEngine;
+}
+
+int TransferModel::search(const std::string &text, bool searchNext)
+{
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.empty())
+ return -1;
+ if(searchNext)
+ {
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ }
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ const TransfertItem &transfertItem=transfertItemList.at(currentIndexSearch);
+ if(transfertItem.source.find(search_text)!=std::string::npos ||
+ transfertItem.destination.find(search_text)!=std::string::npos)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
+}
+
+int TransferModel::searchPrev(const std::string &text)
+{
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.empty())
+ return -1;
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ const TransfertItem &transfertItem=transfertItemList.at(currentIndexSearch);
+ if(transfertItem.source.find(search_text)!=std::string::npos ||
+ transfertItem.destination.find(search_text)!=std::string::npos)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
+}
+
+void TransferModel::setFileProgression(std::vector<Ultracopier::ProgressionItem> &progressionList)
+{
+ loop_size=progressionList.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ if(internalRunningOperation.find(progressionList.at(index_for_loop).id)!=internalRunningOperation.cend())
+ {
+ internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentReadProgression=progressionList.at(index_for_loop).currentRead;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentWriteProgression=progressionList.at(index_for_loop).currentWrite;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ progressionList.erase(progressionList.cbegin()+index_for_loop);
+ index_for_loop--;
+ loop_size--;
+ #endif
+ }
+ index_for_loop++;
+ }
+}
+
+TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem() const
+{
+ currentTransfertItem returnItem;
+ returnItem.progressBar_read=-1;
+ returnItem.progressBar_write=0;
+ returnItem.haveItem=startId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(internalRunningOperation.find(*startId.cbegin())==internalRunningOperation.cend())
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation.at(*startId.cbegin());
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ //should never pass here
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType).toStdString());
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should pass here if in wait of new name for renaming
+ case Ultracopier::PreOperation:
+ //ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType).toStdString());
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType).toStdString());
+ break;
+ }
+ }
+ else
+ {
+ returnItem.haveItem=stopId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(internalRunningOperation.find(*stopId.cbegin())==internalRunningOperation.cend())
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation.at(*stopId.cbegin());
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ returnItem.id=itemTransfer.generalData.id;
+ switch(itemTransfer.actionType)
+ {
+ case Ultracopier::CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_read=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ returnItem.progressBar_read=-1;
+ }
+ break;
+ case Ultracopier::Transfer:
+ if(itemTransfer.generalData.size>0)
+ {
+ returnItem.progressBar_read=((double)itemTransfer.currentReadProgression/itemTransfer.generalData.size)*65535;
+ returnItem.progressBar_write=((double)itemTransfer.currentWriteProgression/itemTransfer.generalData.size)*65535;
+ }
+ else
+ {
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ }
+ break;
+ case Ultracopier::PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType).toStdString());
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ break;
+ //should never pass here
+ case Ultracopier::PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType).toStdString());
+ returnItem.progressBar_read=0;
+ returnItem.progressBar_write=0;
+ break;
+ default:
+ returnItem.progressBar_read=65535;
+ returnItem.progressBar_write=65535;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType).toStdString());
+ break;
+ }
+ }
+ }
+ if(returnItem.haveItem && returnItem.progressBar_read!=-1 && returnItem.progressBar_write>returnItem.progressBar_read)
+ {
+ int tempVar=returnItem.progressBar_write;
+ returnItem.progressBar_write=returnItem.progressBar_read;
+ returnItem.progressBar_read=tempVar;
+ }
+ return returnItem;
+}
diff --git a/plugins/Themes/Oxygen2/TransferModel.h b/plugins/Themes/Oxygen2/TransferModel.h
new file mode 100755
index 0000000..94ccdae
--- /dev/null
+++ b/plugins/Themes/Oxygen2/TransferModel.h
@@ -0,0 +1,106 @@
+#ifndef TRANSFERMODEL_H
+#define TRANSFERMODEL_H
+
+#include <QAbstractTableModel>
+#include <QItemSelectionModel>
+#include <QModelIndex>
+#include <QVariant>
+#include <QList>
+#include <QSet>
+#include <QIcon>
+#include <QString>
+#include <unordered_map>
+#include <unordered_set>
+#include <set>
+#include <vector>
+
+#include "StructEnumDefinition.h"
+#include "Oxygen2Environment.h"
+
+#include "../../../interface/FacilityInterface.h"
+#include "fileTree.h"
+
+/// \brief model to store the transfer list
+class TransferModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ /// \brief the transfer item displayed
+ struct TransfertItem
+ {
+ uint64_t id;
+ std::string source;
+ std::string size;
+ std::string destination;
+ };
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ uint64_t currentReadProgression,currentWriteProgression;
+ Ultracopier::ItemOfCopyList generalData;
+ Ultracopier::ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ uint64_t id;
+ bool haveItem;
+ std::string from;
+ std::string to;
+ std::string current_file;
+ int progressBar_read,progressBar_write;
+ };
+
+ TransferModel();
+
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
+
+ std::vector<uint64_t> synchronizeItems(const std::vector<Ultracopier::ReturnActionOnCopyList>& returnActions);
+ void appendToTree(const std::string &path, const uint64_t &size);
+ Folder * appendToTreeR(Folder * const tree, const std::string &subPath,Folder * const oldTree=NULL);
+ void setFacilityEngine(FacilityInterface * facilityEngine);
+
+ int search(const std::string &text,bool searchNext);
+ int searchPrev(const std::string &text);
+
+ void setFileProgression(std::vector<Ultracopier::ProgressionItem> &progressionList);
+
+ currentTransfertItem getCurrentTransfertItem() const;
+
+ uint64_t firstId() const;
+ Folder * tree;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ //check the integrity of tree
+ uint64_t checkIntegrityChildren(const Folder * const tree);
+ uint64_t checkIntegritySize(const Folder * const tree);
+ #endif
+protected:
+ std::vector<TransfertItem> transfertItemList;///< To have a transfer list for the user
+ std::set<uint64_t> startId,stopId;///< To show what is started, what is stopped
+ std::unordered_map<uint64_t,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
+private:
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ int row,column;
+ FacilityInterface * facilityEngine;
+ std::string search_text;
+ /// \brief index from start the search, decresed by remove before it
+ int currentIndexSearch;
+ bool haveSearchItem;
+ uint64_t searchId;
+ static QIcon *start;
+ static QIcon *stop;
+ std::string treePath;
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,std::string fonction,std::string text,std::string file,int ligne) const;
+ #endif
+};
+
+#endif // TRANSFERMODEL_H
diff --git a/plugins/Themes/Oxygen2/VerticalLabel.cpp b/plugins/Themes/Oxygen2/VerticalLabel.cpp
new file mode 100755
index 0000000..bda9ab8
--- /dev/null
+++ b/plugins/Themes/Oxygen2/VerticalLabel.cpp
@@ -0,0 +1,44 @@
+#include "VerticalLabel.h"
+#include <QPainter>
+#include <QApplication>
+
+VerticalLabel::VerticalLabel(QWidget *parent)
+ : QLabel(parent)
+{
+ color=QApplication::palette().text().color();
+}
+
+VerticalLabel::VerticalLabel(const QString &text, QWidget *parent)
+ : QLabel(text, parent)
+{
+}
+
+VerticalLabel::~VerticalLabel()
+{
+}
+
+void VerticalLabel::paintEvent(QPaintEvent*)
+{
+ QPainter painter(this);
+ painter.setPen(color);
+ painter.setBrush(Qt::Dense1Pattern);
+ painter.rotate(90);
+ painter.drawText(0,0, text());
+}
+
+void VerticalLabel::setColor(QColor color)
+{
+ this->color=color;
+}
+
+QSize VerticalLabel::minimumSizeHint() const
+{
+ QSize s = QLabel::minimumSizeHint();
+ return QSize(s.height(), s.width());
+}
+
+QSize VerticalLabel::sizeHint() const
+{
+ QSize s = QLabel::sizeHint();
+ return QSize(s.height(), s.width());
+}
diff --git a/plugins/Themes/Oxygen2/VerticalLabel.h b/plugins/Themes/Oxygen2/VerticalLabel.h
new file mode 100755
index 0000000..4c01012
--- /dev/null
+++ b/plugins/Themes/Oxygen2/VerticalLabel.h
@@ -0,0 +1,21 @@
+#ifndef VERTICALLABELCUSTOM_H
+#define VERTICALLABELCUSTOM_H
+
+#include <QLabel>
+
+class VerticalLabel : public QLabel
+{
+public:
+ explicit VerticalLabel(QWidget *parent=0);
+ explicit VerticalLabel(const QString &text, QWidget *parent=0);
+ ~VerticalLabel() override;
+ void setColor(QColor color);
+protected:
+ void paintEvent(QPaintEvent*) override;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
+private:
+ QColor color;
+};
+
+#endif // VERTICALLABELCUSTOM_H
diff --git a/plugins/Themes/Oxygen2/chartarea.cpp b/plugins/Themes/Oxygen2/chartarea.cpp
new file mode 100755
index 0000000..9378458
--- /dev/null
+++ b/plugins/Themes/Oxygen2/chartarea.cpp
@@ -0,0 +1,117 @@
+#include "chartarea.h"
+
+#include <QWidget>
+#include <QPainter>
+#include <QVector>
+#include <QPointF>
+#include <iostream>
+
+ChartArea::Widget::Widget(FacilityInterface * facilityEngine,QWidget *parent)
+ : QWidget(parent)
+{
+ this->facilityEngine=facilityEngine;
+ setSizePolicy(QSizePolicy::Preferred,QSizePolicy::MinimumExpanding);
+ setMinimumHeight(20);
+ setMinimumWidth(100);
+}
+
+ChartArea::Widget::~Widget()
+{
+}
+
+void ChartArea::Widget::invalidate()
+{
+}
+
+void ChartArea::Widget::resizeEvent(QResizeEvent*)
+{
+}
+
+void ChartArea::Widget::addValue(uint64_t value)
+{
+ m_values.push_back(value);
+ while(m_values.size()>64)
+ m_values.erase(m_values.begin());
+ update();
+}
+
+void ChartArea::Widget::paintEvent(QPaintEvent*)
+{
+ QPainter painter;
+ painter.begin(this);
+ painter.setBrush(QColor(160,160,160,30));
+ painter.drawRect(0,0,width()-1,height()-1);
+ painter.setRenderHint(QPainter::Antialiasing,true);
+ painter.setRenderHint(QPainter::SmoothPixmapTransform,true);
+ painter.setRenderHint(QPainter::HighQualityAntialiasing,true);
+
+ while(m_values.size()<64)
+ m_values.insert(m_values.begin(),0);
+ std::vector<uint64_t> values=m_values;
+ QVector<QPointF> points;
+ {
+ uint64_t max=0;
+ unsigned int index=0;
+ while(index<values.size())
+ {
+ if(max<values.at(index))
+ max=values.at(index);
+ index++;
+ }
+ if(max<=0)
+ {
+ points << QPointF(0, height()-1);
+ points << QPointF(width()/2, height()-1);
+ points << QPointF(width()-1, height()-1);
+ }
+ else
+ {
+ index=0;
+ while(index<values.size())
+ {
+ int w=width()-1;
+ int nw=w*index/(m_values.size()-1);
+ points << QPointF(nw, height()-values.at(index)*height()/max);
+ index++;
+ }
+ }
+ }
+
+ painter.setPen(Qt::NoPen);
+ QLinearGradient gradient(0,height()*0.5,0,height());
+ gradient.setColorAt(0, QColor(160,240,160,150));
+ //gradient.setColorAt(0.2, QColor(100,220,100,200));
+ gradient.setColorAt(1, QColor(160,240,160,0));
+ painter.setBrush(gradient);
+ points.push_front(QPointF(0, height()-1));
+ points.push_back(QPointF(width()-1, height()-1));
+ painter.drawPolygon(QPolygonF(points));
+
+ if(width()*height()>250000)
+ painter.setPen(QPen(QColor(160,240,160), 3));
+ else
+ painter.setPen(QPen(QColor(160,240,160), 2));
+ painter.drawPolyline(QPolygonF(points));
+
+
+ // todo: bounding rect + center flag
+ if(height()>30)
+ {
+ QFont font = painter.font();
+ int heightTemp=height()/5;
+ if(heightTemp<14)
+ heightTemp=14;
+ font.setPixelSize(heightTemp);
+ painter.setFont(font);
+
+ painter.setPen(QPen(QColor(140,140,140), 3));
+ painter.drawText(0,0,width(),height(),Qt::AlignHCenter | Qt::AlignBottom,
+ QString::fromStdString(
+ facilityEngine->speedToString(
+ m_values.back()
+ )
+ )
+ );
+ }
+ painter.end();
+}
diff --git a/plugins/Themes/Oxygen2/chartarea.h b/plugins/Themes/Oxygen2/chartarea.h
new file mode 100755
index 0000000..dbfa36c
--- /dev/null
+++ b/plugins/Themes/Oxygen2/chartarea.h
@@ -0,0 +1,31 @@
+#ifndef ChartAreaWIDGET_H
+#define ChartAreaWIDGET_H
+
+#include <QResizeEvent>
+#include <QWidget>
+
+#include "../../../interface/FacilityInterface.h"
+
+namespace ChartArea
+{
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Widget(FacilityInterface * facilityEngine,QWidget* = nullptr);
+ ~Widget() override;
+ void addValue(uint64_t value);
+public Q_SLOTS:
+ void invalidate();
+protected:
+ void paintEvent(QPaintEvent*) override;
+ void resizeEvent(QResizeEvent*) override;
+private:
+ FacilityInterface * facilityEngine;
+ std::vector<uint64_t> m_values;
+};
+}
+
+#endif
diff --git a/plugins/Themes/Oxygen2/documentation.dox b/plugins/Themes/Oxygen2/documentation.dox
new file mode 100755
index 0000000..d94ce0b
--- /dev/null
+++ b/plugins/Themes/Oxygen2/documentation.dox
@@ -0,0 +1,31 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage Oxygen
+
+ \section mainpage_overview Overview
+
+ It's the default interface for Ultracopier.\n
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>.
+
+ \section mainpage_platforms Platforms
+
+ Ultracopier might be usable in all environments where you find Qt 5.\n
+ Ultracopier requires Qt 5.0 or newer. Tested on Qt 5.0.
+
+ \section mainpage_downloads Downloads
+
+ You can find the link on <a href="http://ultracopier.first-world.info/">Ultracopier</a> project page, via git, snapshot sources, ...
+
+ \section license GPL Version 3
+ The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.\n
+ resources/export-transfer-list.png and resources/import-transfer-list.png done by png manipulation of KDE's oxygen icon pack (16x16/actions/format-indent-more.png + 16x16/actions/format-list-unordered.png), document-save.png -> all SystemTrayIcon/systray_* (color alteration).\n
+ From 16x16/actions/: list-add.png -> add.png and SystemTrayIcon/add.png, process-stop.png -> remove.png, document-save.png -> main.png and, arrow-down.png -> moveDown.png, arrow-up.png -> moveUp.png, system-shutdown.png -> cancel.png and SystemTrayIcon/exit.png, arrow-down-double.png -> putOnBottom.png, arrow-up-double.png -> putOnTop.png, media-skip-forward.png -> player_end.png, media-playback-pause.png -> player_pause.png, media-playback-start.png -> player_play.png, document-preview.png -> search.png, help-about.png -> SystemTrayIcon/informations.png \n
+ And 16x16/categories/applications-development.png -> SystemTrayIcon/options.png
+
+*/
diff --git a/plugins/Themes/Oxygen2/fileTree.cpp b/plugins/Themes/Oxygen2/fileTree.cpp
new file mode 100755
index 0000000..501657c
--- /dev/null
+++ b/plugins/Themes/Oxygen2/fileTree.cpp
@@ -0,0 +1,149 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+* Copyright 2017 Harald Sitter <sitter@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#include "fileTree.h"
+
+FacilityInterface *File::facilityEngine=NULL;
+
+#include <QDir>
+#include <QUrl>
+
+QString File::displayName() const {
+ const QString decodedName = QString::fromStdString(m_name);
+ return url().isLocalFile() ? QDir::toNativeSeparators(decodedName) : decodedName;
+}
+
+QString File::displayPath(const Folder *root) const
+{
+ // Use QUrl to sanitize the path for display and then run it through
+ // QDir to make sure we use native path separators.
+ const QUrl url = this->url(root);
+ const QString cleanPath = url.toDisplayString(QUrl::PreferLocalFile | QUrl::NormalizePathSegments);
+ return url.isLocalFile() ? QDir::toNativeSeparators(cleanPath) : cleanPath;
+}
+
+QUrl File::url(const Folder *root) const
+{
+ QString path;
+
+ if (root == this)
+ root = nullptr; //prevent returning empty string when there is something we could return
+
+ for (const Folder *d = (Folder*)this; d != root && d; d = d->parent()) {
+ const QString &name=QString::fromStdString(d->name());
+ if(!name.isEmpty() && !path.isEmpty())
+ path.prepend(QDir::separator());
+ path.prepend(name);
+ }
+
+ return path;
+}
+
+void Folder::append(File *p)
+{
+ if(p->isFolder())
+ {
+ folders[p->name()]=static_cast<Folder *>(p);
+ Folder *d = this;
+ while(d != nullptr) {
+ d->m_children+=static_cast<Folder *>(p)->children();
+ d->m_size += p->size();
+ d=d->m_parent;
+ }
+ }
+ else
+ {
+ onlyFiles.push_back(p);
+ Folder *d = this;
+ while(d != nullptr) {
+ /*if(p->isFolder())
+ d->m_children+=static_cast<Folder *>(p)->children();
+ else*/
+ d->m_children++;
+ d->m_size += p->size();
+ d=d->m_parent;
+ }
+ }
+}
+
+///appends a Folder
+void Folder::append(Folder *d, const std::string &name)
+{
+ if (!name.empty())
+ m_name=name;
+
+ //do into append() m_children += d->children(); //doesn't include the dir itself
+ d->m_parent = this;
+ append((File*)d); //will add 1 to filecount for the dir itself
+}
+
+void Folder::append(Folder *d)
+{
+ //do into append() m_children += d->children(); //doesn't include the dir itself
+ d->m_parent = this;
+ append((File*)d); //will add 1 to filecount for the dir itself
+}
+
+///appends a File
+void Folder::append(const std::string &name, uint64_t size)
+{
+ append(new File(name, size, this));
+}
+
+/// removes a file
+void Folder::remove(const File *f) {
+ bool found=false;
+ uint64_t sizeToRemove=0;
+ uint64_t childToRemove=0;
+ for(const auto& n : folders)
+ {
+ Folder * folder=n.second;
+ if(f==folder)
+ {
+ sizeToRemove+=f->size();
+ childToRemove+=static_cast<const Folder *>(f)->children();
+ found=true;
+ break;
+ }
+ }
+ if(!found)
+ {
+ for (unsigned int i = 0; i < onlyFiles.size();)
+ {
+ if(onlyFiles.at(i)==f)
+ {
+ delete f;
+ sizeToRemove+=f->size();
+ childToRemove++;
+ break;
+ }
+ else
+ i++;
+ }
+ }
+ Folder *d = this;
+ while(d != nullptr) {
+ d->m_size -= sizeToRemove;
+ d->m_children-=childToRemove;
+ d=d->m_parent;
+ }
+}
diff --git a/plugins/Themes/Oxygen2/fileTree.h b/plugins/Themes/Oxygen2/fileTree.h
new file mode 100755
index 0000000..e0ea1c7
--- /dev/null
+++ b/plugins/Themes/Oxygen2/fileTree.h
@@ -0,0 +1,133 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+* Copyright 2017 Harald Sitter <sitter@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#ifndef FILETREE_H
+#define FILETREE_H
+
+#include <QByteArray> //qstrdup
+#include <QFile> //decodeName()
+#include <QLocale>
+#include <unordered_map>
+#include <string>
+
+#include <stdlib.h>
+#include "../../../interface/FacilityInterface.h"
+
+class Folder;
+
+class File
+{
+public:
+ friend class Folder;
+ static FacilityInterface *facilityEngine;
+
+public:
+ File(const std::string &name, uint64_t size) : m_parent(nullptr), m_name(name), m_size(size) {}
+ File(const std::string &name, uint64_t size, Folder * parent) : m_parent(parent), m_name(name), m_size(size) {}
+ virtual ~File() {
+ }
+
+ Folder *parent() const {
+ return m_parent;
+ }
+
+ /** Do not use for user visible strings. Use name instead. */
+ const std::string name() const {
+ return m_name;
+ }
+ void setName(const std::string &name) {
+ m_name=name;
+ }
+ /** Decoded name. Use when you need a QString. */
+ QString decodedName() const {
+ return QString::fromStdString(m_name);
+ }
+ /**
+ * Human readable name (including native separators where applicable).
+ * Only use for display.
+ */
+ QString displayName() const;
+
+ uint64_t size() const {
+ return m_size;
+ }
+
+ virtual bool isFolder() const {
+ return false;
+ }
+
+ /**
+ * Human readable path for display (including native separators where applicable.
+ * Only use for display.
+ */
+ QString displayPath(const Folder * = nullptr) const;
+ QString humanReadableSize() const {
+ return QString::fromStdString(facilityEngine->sizeToString(m_size));
+ }
+
+ /** Builds a complete QUrl by walking up to root. */
+ QUrl url(const Folder *root = nullptr) const;
+
+protected:
+ File(const char *name, uint64_t size, Folder *parent) : m_parent(parent), m_name(qstrdup(name)), m_size(size) {}
+
+ Folder *m_parent; //0 if this is treeRoot
+ std::string m_name;//speed boost with std::string in compare with char * due to string size defined without read all
+ uint64_t m_size; //in Bytes
+
+private:
+ File(const File&);
+ void operator=(const File&);
+};
+
+
+class Folder : public File
+{
+public:
+ Folder(const std::string &name) : File(name, 0), m_children(0) {} //DON'T pass the full path!
+
+ uint children() const {
+ return m_children;
+ }
+ bool isFolder() const override {
+ return true;
+ }
+
+ ///appends a Folder
+ void append(Folder *d, const std::string &name);
+ void append(Folder *d);
+ ///appends a File
+ void append(const std::string &name, uint64_t size);
+ /// removes a file
+ void remove(const File *f);
+ std::unordered_map<std::string,Folder *> folders;
+ std::vector<File *> onlyFiles;
+private:
+ void append(File *p);
+
+ uint m_children;
+private:
+ Folder(const Folder&); //undefined
+ void operator=(const Folder&); //undefined
+};
+
+#endif
diff --git a/plugins/Themes/Oxygen2/informations.xml b/plugins/Themes/Oxygen2/informations.xml
new file mode 100755
index 0000000..d4ada14
--- /dev/null
+++ b/plugins/Themes/Oxygen2/informations.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Oxygen2 style for Ultracopier]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Style oxygen2 pour Ultracopier]]></title>
+ <!-- What kind of plugin this is -->
+ <category>Themes</category>
+ <!-- Who wrote this plugin -->
+ <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author>
+ <!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). -->
+ <website xml:lang="en"><![CDATA[http://ultracopier.first-world.info/]]></website><!-- not required -->
+ <website xml:lang="fr"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
+ <architecture>windows-x86</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Oxygen2 style for Ultracopier]]></description>
+ <description xml:lang="fr"><![CDATA[Style oxygen2 pour Ultracopier]]></description>
+ <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
+ <version>2.2.4.4</version>
+ <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
+ <name>Oxygen2</name>
+ <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
+ <dependencies><![CDATA[
+ ]]></dependencies>
+</package>
diff --git a/plugins/Themes/Oxygen2/interface.cpp b/plugins/Themes/Oxygen2/interface.cpp
new file mode 100755
index 0000000..13ec028
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interface.cpp
@@ -0,0 +1,1995 @@
+/** \file interface.cpp
+\brief Define the interface core
+\author alpha_one_x86 */
+
+#include <QMessageBox>
+#include <QMimeData>
+#include <QScrollArea>
+#include <QColorDialog>
+#include <QRect>
+#include <QPainter>
+#include <QDebug>
+#include <cmath>
+#include <chrono>
+#include <ctime>
+#ifdef Q_OS_WIN32
+#include <windows.h>
+#endif
+
+#define ULTRACOPIERO2_MAXREMAININGTIMECOL 10
+#define ULTRACOPIERO2_MAXVALUESPEEDSTORED 5
+
+#include "interface.h"
+#include "ui_interface.h"
+#include "ThemesFactory.h"
+#include "ProgressBarDark.h"
+
+QIcon Themes::player_play;
+QIcon Themes::player_pause;
+QIcon Themes::tempExitIcon;
+QIcon Themes::editDelete;
+QIcon Themes::skinIcon;
+QIcon Themes::editFind;
+QIcon Themes::documentOpen;
+QIcon Themes::documentSave;
+QIcon Themes::listAdd;
+bool Themes::iconLoaded=false;
+
+Themes::Themes(const bool &alwaysOnTop,
+ const bool &showProgressionInTheTitle,
+ const QColor &progressColorWrite,
+ const QColor &progressColorRead,
+ const QColor &progressColorRemaining,
+ const bool &showDualProgression,
+ const quint8 &comboBox_copyEnd,
+ const bool &speedWithProgressBar,
+ const qint32 &currentSpeed,
+ const bool &checkBoxShowSpeed,
+ FacilityInterface * facilityEngine,
+ const bool &moreButtonPushed,
+ const bool &minimizeToSystray,
+ const bool &startMinimized,
+ const quint8 &position,
+ const bool &dark) :
+ duration(0),
+ durationStarted(false),
+ ui(new Ui::interfaceCopy()),
+ uiOptions(new Ui::themesOptions()),
+ currentFile(0),
+ totalFile(0),
+ currentSize(0),
+ totalSize(0),
+ getOldProgression(0),
+ sysTrayIcon(NULL),
+ menu(NULL),
+ action(Ultracopier::EngineActionInProgress::Idle),
+ currentSpeed(0),
+ storeIsInPause(false),
+ modeIsForced(false),
+ type(Ultracopier::CopyType::FileAndFolder),
+ mode(Ultracopier::CopyMode::Copy),
+ haveStarted(false),
+ haveError(false)
+ #ifdef Q_OS_WIN32
+ ,winTaskbarProgress(this)
+ #endif
+{
+ darkUi=dark;
+ this->facilityEngine=facilityEngine;
+ File::facilityEngine=facilityEngine;
+ ui->setupUi(this);
+ uiOptions->setupUi(ui->optionsTab);
+
+ m_havePause=false;
+ currentFile = 0;
+ totalFile = 0;
+ currentSize = 0;
+ totalSize = 0;
+ getOldProgression = 200;
+ haveError = false;
+ stat = status_never_started;
+ modeIsForced = false;
+ haveStarted = false;
+ storeIsInPause = false;
+ durationStarted = false;
+ if(startMinimized)
+ this->showMinimized();
+
+ this->progressColorWrite = progressColorWrite;
+ this->progressColorRead = progressColorRead;
+ this->progressColorRemaining= progressColorRemaining;
+ this->currentSpeed = currentSpeed;
+ uiOptions->showProgressionInTheTitle->setChecked(showProgressionInTheTitle);
+ uiOptions->speedWithProgressBar->setChecked(speedWithProgressBar);
+ uiOptions->showDualProgression->setChecked(showDualProgression);
+ uiOptions->startMinimized->setEnabled(false);
+ uiOptions->alwaysOnTop->setChecked(alwaysOnTop);
+ uiOptions->minimizeToSystray->setChecked(minimizeToSystray);
+ //uiOptions->setupUi(ui->tabWidget->widget(ui->tabWidget->count()-1));
+ uiOptions->labelStartWithMoreButtonPushed->setVisible(false);
+ uiOptions->checkBoxStartWithMoreButtonPushed->setVisible(false);
+ uiOptions->labelSavePosition->setVisible(false);
+ uiOptions->savePosition->setVisible(false);
+ uiOptions->savePosition->setCurrentIndex(position);
+ uiOptions->label_Slider_speed->setVisible(false);
+ uiOptions->SliderSpeed->setVisible(false);
+ uiOptions->label_SpeedMaxValue->setVisible(false);
+ uiOptions->comboBox_copyEnd->setCurrentIndex(comboBox_copyEnd);
+ ui->progressBar->setValue(0);
+ ui->progressBar_2->setValue(0);
+ ui->progressBar_3->setValue(0);
+ ui->progressBar_4->setValue(0);
+ ui->progressBar_5->setValue(0);
+ ui->progressBar_6->setValue(0);
+ speedWithProgressBar_toggled(speedWithProgressBar);
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ uiOptions->progressColorWrite->setIcon(pixmap);
+ pixmap.fill(progressColorRead);
+ uiOptions->progressColorRead->setIcon(pixmap);
+ pixmap.fill(progressColorRemaining);
+ uiOptions->progressColorRemaining->setIcon(pixmap);
+ ui->labelTimeRemaining->setText(QString());
+
+ transferModel.setFacilityEngine(facilityEngine);//need be before ui->TransferList->setModel(&transferModel); due to call of TransferModel::headerData()
+ ui->TransferList->setModel(&transferModel);
+ ui->tabWidget->setCurrentIndex(0);
+ uiOptions->toolBox->setCurrentIndex(0);
+ uiOptions->checkBoxShowSpeed->setChecked(checkBoxShowSpeed);
+ menu=new QMenu(this);
+ ui->add->setMenu(menu);
+
+ //connect the options
+ checkBoxShowSpeed_toggled(uiOptions->checkBoxShowSpeed->isChecked());
+ connect(uiOptions->checkBoxShowSpeed,&QCheckBox::stateChanged,this,&Themes::checkBoxShowSpeed_toggled);
+ connect(uiOptions->speedWithProgressBar,&QCheckBox::stateChanged,this,&Themes::speedWithProgressBar_toggled);
+ connect(uiOptions->showProgressionInTheTitle,&QCheckBox::stateChanged,this,&Themes::updateTitle);
+ connect(uiOptions->showDualProgression,&QCheckBox::stateChanged,this,&Themes::showDualProgression_toggled);
+ connect(uiOptions->progressColorWrite,&QAbstractButton::clicked,this,&Themes::progressColorWrite_clicked);
+ connect(uiOptions->progressColorRead, &QAbstractButton::clicked,this,&Themes::progressColorRead_clicked);
+ connect(uiOptions->progressColorRemaining,&QAbstractButton::clicked,this,&Themes::progressColorRemaining_clicked);
+ connect(uiOptions->alwaysOnTop,&QAbstractButton::clicked,this,&Themes::alwaysOnTop_clickedSlot);
+
+ connect(uiOptions->limitSpeed, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &Themes::uiUpdateSpeed);
+ connect(uiOptions->checkBox_limitSpeed,&QAbstractButton::toggled, this, &Themes::uiUpdateSpeed);
+
+ connect(ui->actionAddFile,&QAction::triggered,this,&Themes::forcedModeAddFile);
+ connect(ui->actionAddFileToCopy,&QAction::triggered,this,&Themes::forcedModeAddFileToCopy);
+ connect(ui->actionAddFileToMove,&QAction::triggered,this,&Themes::forcedModeAddFileToMove);
+ connect(ui->actionAddFolderToCopy,&QAction::triggered,this,&Themes::forcedModeAddFolderToCopy);
+ connect(ui->actionAddFolderToMove,&QAction::triggered,this,&Themes::forcedModeAddFolderToMove);
+ connect(ui->actionAddFolder,&QAction::triggered,this,&Themes::forcedModeAddFolder);
+ connect(ui->exportErrorToTransferList,&QToolButton::triggered,this,&Themes::exportErrorIntoTransferList);
+
+ ui->overall->hide();
+
+ //setup the search part
+ closeTheSearchBox();
+ TimerForSearch = new QTimer(this);
+ TimerForSearch->setInterval(500);
+ TimerForSearch->setSingleShot(true);
+ searchShortcut = new QShortcut(QKeySequence(QKeySequence::Find),this);
+ searchShortcut2 = new QShortcut(QKeySequence(QKeySequence::FindNext),this);
+ searchShortcut3 = new QShortcut(QKeySequence(Qt::Key_Escape),this);
+
+ //connect the search part
+ connect(TimerForSearch, &QTimer::timeout, this, &Themes::hilightTheSearchSlot);
+ connect(searchShortcut, &QShortcut::activated, this, &Themes::searchBoxShortcut);
+ connect(searchShortcut2, &QShortcut::activated, this, &Themes::on_pushButtonSearchNext_clicked);
+ connect(ui->pushButtonCloseSearch, &QPushButton::clicked, this, &Themes::closeTheSearchBox);
+ connect(searchShortcut3, &QShortcut::activated, this, &Themes::closeTheSearchBox);
+
+ //remaining time
+ {
+ int index=0;
+ while(index<ULTRACOPIERO2_MAXREMAININGTIMECOL)
+ {
+ RemainingTimeLogarithmicColumn newEntry;
+ remainingTimeLogarithmicValue.push_back(newEntry);
+ index++;
+ }
+ }
+
+ //reload directly untranslatable text
+ newLanguageLoaded();
+
+ //unpush the more button
+ ui->moreButton->setChecked(moreButtonPushed);
+ on_moreButton_toggled(moreButtonPushed);
+
+ /// \note important for drag and drop, \see dropEvent()
+ setAcceptDrops(true);
+
+ const QString themePath=":/Themes/Oxygen2/";
+
+ // try set the OS icon
+ if(!iconLoaded)
+ {
+ iconLoaded=true;
+ tempExitIcon=QIcon::fromTheme(QStringLiteral("application-exit"));
+ editDelete=QIcon::fromTheme(QStringLiteral("edit-delete"));
+ player_pause=QIcon::fromTheme(QStringLiteral("media-playback-pause"));
+ if(player_pause.isNull())
+ player_pause=QIcon(themePath+QStringLiteral("resources/player_pause.png"));
+ player_play=QIcon::fromTheme(QStringLiteral("media-playback-play"));
+ if(player_play.isNull())
+ player_play=QIcon(themePath+QStringLiteral("resources/player_play.png"));
+ skinIcon=QIcon::fromTheme(QStringLiteral("media-skip-forward"));
+ editFind=QIcon::fromTheme(QStringLiteral("edit-find"));
+ documentOpen=QIcon::fromTheme(QStringLiteral("document-open"));
+ documentSave=QIcon::fromTheme(QStringLiteral("document-save"));
+ listAdd=QIcon::fromTheme(QStringLiteral("list-add"));
+ }
+ if(!tempExitIcon.isNull())
+ {
+ ui->cancelButton->setIcon(tempExitIcon);
+ ui->pushButtonCloseSearch->setIcon(tempExitIcon);
+ ui->shutdown->setIcon(tempExitIcon);
+ }
+ if(!editDelete.isNull())
+ ui->del->setIcon(editDelete);
+ if(!player_pause.isNull())
+ ui->pauseButton->setIcon(player_pause);
+ if(!skinIcon.isNull())
+ ui->skipButton->setIcon(skinIcon);
+ if(!editFind.isNull())
+ ui->searchButton->setIcon(editFind);
+ if(!documentOpen.isNull())
+ ui->importTransferList->setIcon(documentOpen);
+ if(!documentSave.isNull())
+ {
+ ui->exportTransferList->setIcon(documentSave);
+ ui->exportErrorToTransferList->setIcon(documentSave);
+ }
+ if(!listAdd.isNull())
+ {
+ ui->add->setIcon(listAdd);
+ ui->actionAddFile->setIcon(listAdd);
+ ui->actionAddFileToCopy->setIcon(listAdd);
+ ui->actionAddFileToMove->setIcon(listAdd);
+ ui->actionAddFolder->setIcon(listAdd);
+ ui->actionAddFolderToCopy->setIcon(listAdd);
+ ui->actionAddFolderToMove->setIcon(listAdd);
+ }
+ #ifdef Q_OS_WIN32
+ pixmapTop=QPixmap(themePath+QStringLiteral("resources/SystemTrayIcon/systray_Uncaught_Windows.png"));
+ pixmapBottom=QPixmap(themePath+QStringLiteral("resources/SystemTrayIcon/systray_Caught_Windows.png"));
+ #else
+ pixmapTop=QPixmap(themePath+QStringLiteral("resources/SystemTrayIcon/systray_Uncaught_Unix.png"));
+ pixmapBottom=QPixmap(themePath+QStringLiteral("resources/SystemTrayIcon/systray_Caught_Unix.png"));
+ #endif
+
+ shutdown=facilityEngine->haveFunctionality("shutdown");
+ ui->shutdown->setVisible(shutdown);
+ radial=new RadialMap::Widget(dark,this);
+ ui->verticalLayouMiddle->addWidget(radial);
+
+ chartarea=new ChartArea::Widget(facilityEngine,this);
+ ui->verticalLayoutRight->insertWidget(0,chartarea);
+
+ selectionModel=ui->TransferList->selectionModel();
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&transferModel,&TransferModel::debugInformation,this,&Themes::debugInformation);
+ #endif
+
+ updateSpeed();
+ alwaysOnTop_clicked(false);
+ /*#ifdef Q_OS_WIN32
+ uiOptions->labelAlwaysOnTop->hide();
+ uiOptions->alwaysOnTop->hide();
+ #endif*/
+ QString ultimateUrl;
+ if(facilityEngine->isUltimate())
+ ui->ad_ultimate->hide();
+ else
+ {
+ ultimateUrl=QString::fromStdString(facilityEngine->ultimateUrl());
+ if(ultimateUrl.isEmpty())
+ ui->ad_ultimate->hide();
+ else
+ ui->ad_ultimate->setText(
+ QStringLiteral("<a href=\"%1\">%2</a>").arg(ultimateUrl).arg(tr("Buy the Ultimate version to fund development"))+", "
+ +QStringLiteral("Follow us: ")+QStringLiteral("<a href=\"%1\"><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAAe0lEQVR4AWOAAPesxQQRUBlCNZEIu+qIjSfPvvn45c/f//////17vLxrJrIsugan3i3HoUq/fPj46c27gwWts/FpsF1x5O2/f////z5+th0uiFNDyb3n/1HBx0+LAwsWUaIB00krj7wHqfx94HgbXJBUDaMaSE58JCdvAAioiiB5mraWAAAAAElFTkSuQmCC\"/></a>").arg("https://www.facebook.com/Ultracopier/")
+ );
+ }
+
+ sysTrayIcon = new QSystemTrayIcon(this);
+ connect(sysTrayIcon,&QSystemTrayIcon::activated,this,&Themes::catchAction);
+ #ifdef Q_OS_WIN32
+ winTaskbarProgress.show();
+ #endif
+
+ verticalLabel=new VerticalLabel();
+ verticalLabel->setText(QString::fromStdString(facilityEngine->speedToString(50*1000*1000)));
+ ui->verticalLayoutVL->insertWidget(0,verticalLabel);
+
+ if(darkUi)
+ {
+ if(ultimateUrl.isEmpty())
+ ui->ad_ultimate->hide();
+ else
+ ui->ad_ultimate->setText(
+ QStringLiteral("<a href=\"%1\"><span style=\"color:#cdf;\">%2</span></a>").arg(ultimateUrl).arg(tr("Buy the Ultimate version to fund development"))+", "
+ +QStringLiteral("<span style=\"color:#fff;\">Follow us:</span> ")+QStringLiteral("<a href=\"%1\"><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAAe0lEQVR4AWOAAPesxQQRUBlCNZEIu+qIjSfPvvn45c/f//////17vLxrJrIsugan3i3HoUq/fPj46c27gwWts/FpsF1x5O2/f////z5+th0uiFNDyb3n/1HBx0+LAwsWUaIB00krj7wHqfx94HgbXJBUDaMaSE58JCdvAAioiiB5mraWAAAAAElFTkSuQmCC\"/></a>").arg("https://www.facebook.com/Ultracopier/")
+ );
+ //ui->frame->setStyleSheet("#frame{background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgb(70, 70, 70), stop:1 rgb(40, 40, 40));}");
+ ui->labelTimeRemaining->setStyleSheet("color:#fff;");
+ ui->labelSPStart->setStyleSheet("color:#aaa;");
+ ui->labelSPStop->setStyleSheet("color:#aaa;");
+ ui->from_label->setStyleSheet("color:#aaa;");
+ ui->current_file->setStyleSheet("color:#fff;");
+ ui->from->setStyleSheet("color:#fff;");
+ verticalLabel->setColor(QColor(160,160,160));
+
+ //ui->ad_ultimate->setStyleSheet("color:#fff;background-color:rgb(50, 50, 50);");
+
+ QString labelTimeRemaining;
+ labelTimeRemaining+="<html><body style=\"white-space:nowrap;\"><small style=\"color:#aaa\">";
+ labelTimeRemaining+=QString::fromStdString(facilityEngine->translateText("Remaining:"));
+ labelTimeRemaining+="</small>";
+ labelTimeRemaining+=QStringLiteral(" <b>");
+ labelTimeRemaining+=QStringLiteral("&#8734;");
+ labelTimeRemaining+=QStringLiteral("</b></body></html>");
+ ui->labelTimeRemaining->setText(labelTimeRemaining);
+
+ ui->frameS->setStyleSheet("#frameS{border: 1px solid #b0c0f0;} QProgressBar{background-color: rgba(160,180,240,100);border: 0 solid grey; } QProgressBar::chunk {background-color: rgba(160,180,240,200);}");
+
+ int tempIndex=ui->verticalLayoutLeft->indexOf(ui->progressBar_all);
+ progressBar_all=new ProgressBarDark(ui->frameLeft);
+ progressBar_all->setMaximum(ui->progressBar_all->maximum());
+ progressBar_all->setValue(ui->progressBar_all->value());
+ ui->progressBar_all->hide();
+ ui->verticalLayoutLeft->insertWidget(tempIndex,progressBar_all);
+
+ tempIndex=ui->verticalLayoutRight->indexOf(ui->progressBar_file);
+ progressBar_file=new ProgressBarDark(ui->frameRight);
+ progressBar_file->setMaximum(ui->progressBar_file->maximum());
+ progressBar_file->setValue(ui->progressBar_file->value());
+ ui->progressBar_file->hide();
+ ui->verticalLayoutRight->insertWidget(tempIndex,progressBar_file);
+
+ tempIndex=ui->horizontalLayoutLeft->indexOf(ui->moreButton);
+ moreButton=new DarkButton(ui->frameLeft);
+ moreButton->setText(ui->moreButton->text());
+ moreButton->setCheckable(ui->moreButton->isCheckable());
+ moreButton->setMinimumWidth(60);
+ ui->moreButton->hide();
+ ui->horizontalLayoutLeft->insertWidget(tempIndex,moreButton);
+ {
+ QIcon i;
+ i.addFile(QString::fromUtf8(":/Themes/Oxygen/resources/darkmoveUp.png"), QSize(), QIcon::Normal, QIcon::Off);
+ i.addFile(QString::fromUtf8(":/Themes/Oxygen/resources/darkmoveDown.png"), QSize(), QIcon::Normal, QIcon::On);
+ moreButton->setIcon(i);
+ }
+ connect(moreButton,&QPushButton::toggled,ui->moreButton,&QPushButton::toggled);
+
+ tempIndex=ui->horizontalLayoutLeft->indexOf(ui->pauseButton);
+ pauseButton=new DarkButton(ui->frameLeft);
+ pauseButton->setText(ui->pauseButton->text());
+ pauseButton->setCheckable(ui->pauseButton->isCheckable());
+ pauseButton->setMinimumWidth(60);
+ ui->pauseButton->hide();
+ ui->horizontalLayoutLeft->insertWidget(tempIndex,pauseButton);
+ {
+ QIcon i;
+ i.addFile(QString::fromUtf8(":/Themes/Oxygen/resources/darkplayer_pause.png"), QSize(), QIcon::Normal, QIcon::Off);
+ i.addFile(QString::fromUtf8(":/Themes/Oxygen/resources/darkplayer_play.png"), QSize(), QIcon::Normal, QIcon::On);
+ pauseButton->setIcon(i);
+ }
+ connect(pauseButton,&QPushButton::toggled,ui->pauseButton,&QPushButton::toggled);
+ connect(pauseButton,&QPushButton::clicked,ui->pauseButton,&QPushButton::clicked);
+
+ tempIndex=ui->horizontalLayoutRight->indexOf(ui->skipButton);
+ skipButton=new DarkButton(ui->frameLeft);
+ skipButton->setText(ui->skipButton->text());
+ skipButton->setCheckable(ui->skipButton->isCheckable());
+ skipButton->setMinimumWidth(60);
+ ui->skipButton->hide();
+ ui->horizontalLayoutRight->insertWidget(tempIndex,skipButton);
+ {
+ QIcon i;
+ i.addFile(QString::fromUtf8(":/Themes/Oxygen/resources/darkplayer_end.png"));
+ skipButton->setIcon(i);
+ }
+ connect(skipButton,&QPushButton::toggled,ui->skipButton,&QPushButton::toggled);
+ connect(skipButton,&QPushButton::clicked,ui->skipButton,&QPushButton::clicked);
+
+ tempIndex=ui->horizontalLayoutRight->indexOf(ui->cancelButton);
+ cancelButton=new DarkButton(ui->frameLeft);
+ cancelButton->setText(ui->cancelButton->text());
+ cancelButton->setCheckable(ui->cancelButton->isCheckable());
+ cancelButton->setMinimumWidth(60);
+ ui->cancelButton->hide();
+ ui->horizontalLayoutRight->insertWidget(tempIndex,cancelButton);
+ {
+ QIcon i;
+ i.addFile(QString::fromUtf8(":/Themes/Oxygen/resources/cancelDarkE.png"));
+ cancelButton->setIcon(i);
+ }
+ connect(cancelButton,&QPushButton::toggled,ui->cancelButton,&QPushButton::toggled);
+ connect(cancelButton,&QPushButton::clicked,ui->cancelButton,&QPushButton::clicked);
+
+ #if defined(__EMSCRIPTEN__) && defined(ULTRACOPIER_LITTLE_RANDOM)
+ cancelButton->setEnabled(false);
+ #endif
+ }
+ else
+ {
+ progressBar_all=nullptr;
+ progressBar_file=nullptr;
+
+ moreButton=nullptr;
+ pauseButton=nullptr;
+ skipButton=nullptr;
+ cancelButton=nullptr;
+ #if defined(__EMSCRIPTEN__) && defined(ULTRACOPIER_LITTLE_RANDOM)
+ ui->cancelButton->setEnabled(false);
+ #endif
+ }
+ isInPause(false);
+ showDualProgression_toggled(showDualProgression);
+
+ show();
+}
+
+Themes::~Themes()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ //disconnect(ui->actionAddFile);
+ //disconnect(ui->actionAddFolder);
+ if(progressBar_all!=nullptr)
+ delete progressBar_all;
+ if(progressBar_file!=nullptr)
+ delete progressBar_file;
+ if(moreButton!=nullptr)
+ delete moreButton;
+ if(pauseButton!=nullptr)
+ delete pauseButton;
+ if(skipButton!=nullptr)
+ delete skipButton;
+ if(cancelButton!=nullptr)
+ delete cancelButton;
+ delete radial;
+ delete selectionModel;
+ delete menu;
+ delete sysTrayIcon;
+}
+
+QWidget * Themes::getOptionsEngineWidget()
+{
+ return &optionEngineWidget;
+}
+
+void Themes::getOptionsEngineEnabled(const bool &isEnabled)
+{
+ if(isEnabled)
+ {
+ QScrollArea *scrollArea=new QScrollArea(ui->tabWidget);
+ scrollArea->setWidgetResizable(true);
+ scrollArea->setWidget(&optionEngineWidget);
+ ui->tabWidget->addTab(scrollArea,QString::fromStdString(facilityEngine->translateText("Copy engine")));
+ }
+}
+
+void Themes::closeEvent(QCloseEvent *event)
+{
+ event->ignore();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ this->hide();
+ if(uiOptions->minimizeToSystray->isChecked())
+ {
+ updateSysTrayIcon();
+ sysTrayIcon->show();
+ }
+ else
+ emit cancel();
+}
+
+void Themes::updateSysTrayIcon()
+{
+ if(totalSize==0)
+ {
+ sysTrayIcon->setIcon(dynaIcon(0,"-"));
+ return;
+ }
+ quint64 currentNew=currentSize*100;
+ //update systray icon
+ quint16 getVarProgression=currentNew/totalSize;
+ if(getOldProgression!=getVarProgression)
+ {
+ getOldProgression=getVarProgression;
+ sysTrayIcon->setIcon(dynaIcon(getVarProgression));
+ }
+}
+
+void Themes::updateOverallInformation()
+{
+ if(uiOptions->showProgressionInTheTitle->isChecked())
+ updateTitle();
+ ui->overall->setText(tr("File %1/%2, size: %3/%4")
+ .arg(currentFile)
+ .arg(totalFile)
+ .arg(QString::fromStdString(facilityEngine->sizeToString(currentSize)))
+ .arg(QString::fromStdString(facilityEngine->sizeToString(totalSize)))
+ );
+}
+
+void Themes::actionInProgess(const Ultracopier::EngineActionInProgress &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"start: "+std::to_string(action));
+ this->action=action;
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ if(darkUi)
+ {
+ progressBar_all->setMaximum(65535);
+ progressBar_all->setMinimum(0);
+ }
+ else
+ {
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ }
+ #ifdef Q_OS_WIN32
+ winTaskbarProgress.setMaximum(65535);
+ winTaskbarProgress.setMinimum(0);
+ #endif
+ break;
+ case Ultracopier::Listing:
+ if(darkUi)
+ {
+ progressBar_all->setMaximum(0);
+ progressBar_all->setMinimum(0);
+ }
+ else
+ {
+ ui->progressBar_all->setMaximum(0);
+ ui->progressBar_all->setMinimum(0);
+ }
+ #ifdef Q_OS_WIN32
+ winTaskbarProgress.setMaximum(0);
+ winTaskbarProgress.setMinimum(0);
+ #endif
+ break;
+ case Ultracopier::Idle:
+ #ifdef Q_OS_WIN32
+ winTaskbarProgress.setMaximum(65535);
+ winTaskbarProgress.setMinimum(0);
+ #endif
+ if(darkUi)
+ {
+ progressBar_all->setMaximum(65535);
+ progressBar_all->setMinimum(0);
+ }
+ else
+ {
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ }
+ if(haveStarted && transferModel.rowCount()<=0)
+ {
+ if(shutdown && ui->shutdown->isChecked())
+ {
+ facilityEngine->callFunctionality("shutdown");
+ return;
+ }
+ switch(uiOptions->comboBox_copyEnd->currentIndex())
+ {
+ case 2:
+ emit cancel();
+ break;
+ case 0:
+ if(!haveError)
+ emit cancel();
+ else
+ ui->tabWidget->setCurrentWidget(ui->tab_error);
+ break;
+ default:
+ break;
+ }
+ stat = status_stopped;
+ if(durationStarted)
+ {
+ Ultracopier::TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(
+ (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()-
+ duration)
+ /1000);
+ ui->labelTimeRemaining->setText(QStringLiteral("<html><body style=\"white-space:nowrap;\">")+
+ QString::fromStdString(facilityEngine->translateText("Completed in %1")).arg(
+ QString::number(time.hour)+QStringLiteral(":")+
+ QString::number(time.minute).rightJustified(2,'0')+
+ QStringLiteral(":")+
+ QString::number(time.second).rightJustified(2,'0')
+ )+QStringLiteral("</body></html>"));
+ }
+ }
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Very wrong switch case!");
+ break;
+ }
+ switch(action)
+ {
+ case Ultracopier::Copying:
+ case Ultracopier::CopyingAndListing:
+ if(m_havePause)
+ ui->pauseButton->setEnabled(true);
+ if(!durationStarted)
+ {
+ duration=std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
+ durationStarted=true;
+ }
+ haveStarted=true;
+ ui->cancelButton->setText(QString::fromStdString(facilityEngine->translateText("Quit")));
+ updatePause();
+ break;
+ case Ultracopier::Listing:
+ if(m_havePause)
+ ui->pauseButton->setEnabled(false);
+ haveStarted=true;//to close if skip at root folder collision
+ break;
+ case Ultracopier::Idle:
+ if(m_havePause)
+ ui->pauseButton->setEnabled(false);
+ break;
+ default:
+ break;
+ }
+}
+
+void Themes::newFolderListing(const std::string &path)
+{
+ QString newPath=QString::fromStdString(path);
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(action==Ultracopier::Listing)
+ ui->from->setText(newPath);
+}
+
+void Themes::detectedSpeed(const uint64_t &speed)//in byte per seconds
+{
+ /*if(uiOptions->speedWithProgressBar->isChecked())
+ {
+ quint64 tempSpeed=speed;
+ if(tempSpeed>999999999)
+ tempSpeed=999999999;
+ if(tempSpeed>(quint64)ui->progressBarCurrentSpeed->maximum())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set max speed to: "+std::to_string(tempSpeed));
+ ui->progressBarCurrentSpeed->setMaximum(tempSpeed);
+ }
+ ui->progressBarCurrentSpeed->setValue(tempSpeed);
+ ui->progressBarCurrentSpeed->setFormat(QString::fromStdString(facilityEngine->speedToString(speed)));
+ }
+ else
+ ui->currentSpeed->setText(QString::fromStdString(facilityEngine->speedToString(speed)));*/
+ chartarea->addValue(speed);
+}
+
+void Themes::remainingTime(const int &remainingSeconds)
+{
+ QString labelTimeRemaining;
+ if(darkUi)
+ labelTimeRemaining+="<html><body style=\"white-space:nowrap;\"><small style=\"color:#aaa\">";
+ else
+ labelTimeRemaining+="<html><body style=\"white-space:nowrap;\">";
+ labelTimeRemaining+=QString::fromStdString(facilityEngine->translateText("Remaining:"));
+ if(darkUi)
+ labelTimeRemaining+="</small>";
+ labelTimeRemaining+=QStringLiteral(" <b>");
+ if(remainingSeconds==-1)
+ labelTimeRemaining+=QStringLiteral("&#8734;");
+ else
+ {
+ Ultracopier::TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(remainingSeconds);
+ labelTimeRemaining+=QString::number(time.hour)+QStringLiteral(":")+QString::number(time.minute).rightJustified(2,'0')+QStringLiteral(":")+QString::number(time.second).rightJustified(2,'0');
+ }
+ labelTimeRemaining+=QStringLiteral("</b></body></html>");
+ ui->labelTimeRemaining->setText(labelTimeRemaining);
+}
+
+void Themes::errorDetected()
+{
+ haveError=true;
+}
+
+/// \brief new error
+void Themes::errorToRetry(const std::string &source,const std::string &destination,const std::string &error)
+{
+ ui->errorList->addTopLevelItem(new QTreeWidgetItem(QStringList()
+ << QString::fromStdString(source)
+ << QString::fromStdString(destination)
+ << QString::fromStdString(error)
+ ));
+}
+
+/** \brief support speed limitation */
+void Themes::setSupportSpeedLimitation(const bool &supportSpeedLimitationBool)
+{
+ if(!supportSpeedLimitationBool)
+ {
+ ui->label_Slider_speed->setVisible(false);
+ ui->SliderSpeed->setVisible(false);
+ ui->label_SpeedMaxValue->setVisible(false);
+ uiOptions->labelShowSpeedAsMain->setVisible(false);
+ uiOptions->checkBoxShowSpeed->setVisible(false);
+ }
+ else
+ emit newSpeedLimitation(currentSpeed);
+}
+
+//get information about the copy
+void Themes::setGeneralProgression(const uint64_t &current,const uint64_t &total)
+{
+ currentSize=current;
+ totalSize=total;
+ if(total>0)
+ {
+ int newIndicator=((double)current/total)*65535;
+ if(darkUi)
+ progressBar_all->setValue(newIndicator);
+ else
+ ui->progressBar_all->setValue(newIndicator);
+ #ifdef Q_OS_WIN32
+ winTaskbarProgress.setValue(newIndicator);
+ #endif
+ }
+ else
+ {
+ if(darkUi)
+ progressBar_all->setValue(0);
+ else
+ ui->progressBar_all->setValue(0);
+ #ifdef Q_OS_WIN32
+ winTaskbarProgress.setValue(0);
+ #endif
+ }
+ if(current>0)
+ stat = status_started;
+ updateOverallInformation();
+ if(isHidden())
+ updateSysTrayIcon();
+}
+
+void Themes::setFileProgression(const std::vector<Ultracopier::ProgressionItem> &progressionList)
+{
+ std::vector<Ultracopier::ProgressionItem> progressionListBis=progressionList;
+ transferModel.setFileProgression(progressionListBis);
+ updateCurrentFileInformation();
+}
+
+//edit the transfer list
+/// \todo check and re-enable to selection
+void Themes::getActionOnList(const std::vector<Ultracopier::ReturnActionOnCopyList> &returnActions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, returnActions.size(): "+std::to_string(returnActions.size()));
+ if(transferModel.tree==NULL)
+ transferModel.tree=new Folder(std::string());
+ std::vector<uint64_t> returnValue=transferModel.synchronizeItems(returnActions);
+ totalFile+=returnValue.front();
+ totalSize+=returnValue.at(1);
+ currentFile+=returnValue.back();
+ if(transferModel.rowCount()==0)
+ {
+ ui->skipButton->setEnabled(false);
+ if(darkUi)
+ {
+ progressBar_all->setValue(65535);
+ progressBar_file->setValue(65535);
+ }
+ else
+ {
+ ui->progressBar_all->setValue(65535);
+ ui->progressBar_file->setValue(65535);
+ }
+ #ifdef Q_OS_WIN32
+ winTaskbarProgress.setValue(65535);
+ #endif
+ currentSize=totalSize;
+ if(isHidden())
+ updateSysTrayIcon();
+ }
+ else
+ ui->skipButton->setEnabled(true);
+ updateOverallInformation();
+ radial->invalidate();
+ radial->create(transferModel.tree);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferModel.rowCount(): "+std::to_string(transferModel.rowCount()));
+}
+
+void Themes::setCopyType(const Ultracopier::CopyType &type)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ this->type=type;
+ updateModeAndType();
+}
+
+void Themes::forceCopyMode(const Ultracopier::CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ modeIsForced=true;
+ this->mode=mode;
+ if(mode==Ultracopier::Copy)
+ ui->tabWidget->setTabText(0,tr("Copy list"));
+ else
+ ui->tabWidget->setTabText(0,tr("Move list"));
+ updateModeAndType();
+ updateTitle();
+}
+
+void Themes::setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation)
+{
+ ui->exportTransferList->setVisible(transferListOperation & Ultracopier::TransferListOperation_Export);
+ ui->importTransferList->setVisible(transferListOperation & Ultracopier::TransferListOperation_Import);
+}
+
+void Themes::haveExternalOrder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+// ui->moreButton->toggle();
+}
+
+void Themes::isInPause(const bool &isInPause)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"isInPause: "+std::to_string(isInPause));
+ //resume in auto the pause
+ storeIsInPause=isInPause;
+ updatePause();
+}
+
+/// \brief set have pause
+void Themes::havePause(const bool &havePause)
+{
+ if(darkUi)
+ pauseButton->setEnabled(havePause);
+ else
+ ui->pauseButton->setEnabled(havePause);
+ m_havePause=havePause;
+}
+
+void Themes::updatePause()
+{
+ QPushButton *tempPauseButton=ui->pauseButton;
+ if(darkUi)
+ tempPauseButton=pauseButton;
+ if(storeIsInPause)
+ {
+ if(!darkUi)
+ ui->pauseButton->setIcon(player_play);
+ if(stat == status_started)
+ tempPauseButton->setText(QString::fromStdString(facilityEngine->translateText("Resume")));
+ else
+ tempPauseButton->setText(QString::fromStdString(facilityEngine->translateText("Start")));
+ }
+ else
+ {
+ if(!darkUi)
+ tempPauseButton->setIcon(player_pause);
+ tempPauseButton->setText(QString::fromStdString(facilityEngine->translateText("Pause")));
+ }
+}
+
+void Themes::updateCurrentFileInformation()
+{
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ std::string from=transfertItem.from;
+ std::string::size_type pos=from.rfind('/');
+ if(pos == std::string::npos)
+ {
+ #ifdef Q_OS_WIN32
+ std::string::size_type pos=from.rfind('\\');
+ if(pos != std::string::npos)
+ if(pos < from.size()-1)
+ from=from.substr(0,pos);
+ #endif
+ }
+ else if(pos < from.size()-1)
+ {
+ #ifdef Q_OS_WIN32
+ std::string::size_type pos2=from.rfind('\\');
+ if(pos2 != std::string::npos)
+ {
+ std::string::size_type pos=from.rfind('\\');
+ if(pos != std::string::npos)
+ {
+ if(pos2 < from.size()-1)
+ {
+ if(pos<pos2)
+ from=from.substr(0,pos2);
+ else
+ from=from.substr(0,pos);
+ }
+ }
+ else
+ from=from.substr(0,pos);
+ }
+ else
+ #endif
+ from=from.substr(0,pos);
+ }
+ QString newPath=QString::fromStdString(from);
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ ui->from->setText(newPath);
+ newPath=QString::fromStdString(transfertItem.to);
+ if(newPath.size()>(64+3))
+ newPath=newPath.mid(0,32)+QStringLiteral("...")+newPath.mid(newPath.size()-32,32);
+ //ui->to->setText(newPath);
+ ui->current_file->setText(QString::fromStdString(transfertItem.current_file));
+ if(transfertItem.progressBar_read!=-1)
+ {
+ if(darkUi)
+ progressBar_file->setRange(0,65535);
+ else
+ ui->progressBar_file->setRange(0,65535);
+ if(uiOptions->showDualProgression->isChecked())
+ {
+ if(!darkUi)
+ {
+ if(transfertItem.progressBar_read!=transfertItem.progressBar_write)
+ {
+ float permilleread=round((float)transfertItem.progressBar_read/65535*1000)/1000;
+ float permillewrite=permilleread-0.001;
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border: 1px solid grey;text-align: center;background-color: qlineargradient(spread:pad, x1:%1, y1:0, x2:%2, y2:0, stop:0 %3, stop:1 %4);}QProgressBar::chunk{background-color:%5;}")
+ .arg(permilleread)
+ .arg(permillewrite)
+ .arg(progressColorRemaining.name())
+ .arg(progressColorRead.name())
+ .arg(progressColorWrite.name())
+ );
+ }
+ else
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ }
+ if(darkUi)
+ progressBar_file->setValue(transfertItem.progressBar_write);
+ else
+ ui->progressBar_file->setValue(transfertItem.progressBar_write);
+ }
+ else
+ {
+ if(darkUi)
+ progressBar_file->setValue((transfertItem.progressBar_read+transfertItem.progressBar_write)/2);
+ else
+ ui->progressBar_file->setValue((transfertItem.progressBar_read+transfertItem.progressBar_write)/2);
+ }
+ }
+ else
+ {
+ if(darkUi)
+ progressBar_file->setRange(0,0);
+ else
+ ui->progressBar_file->setRange(0,0);
+ }
+ }
+ else
+ {
+ ui->from->setText(QStringLiteral(""));
+ //ui->to->setText(QStringLiteral(""));
+ ui->current_file->setText(QStringLiteral("-"));
+ if(haveStarted && transferModel.rowCount()==0)
+ {
+ if(darkUi)
+ progressBar_file->setValue(65535);
+ else
+ ui->progressBar_file->setValue(65535);
+ }
+ else if(!haveStarted)
+ {
+ if(darkUi)
+ progressBar_file->setValue(0);
+ else
+ ui->progressBar_file->setValue(0);
+ }
+ }
+}
+
+
+void Themes::on_putOnTop_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ std::vector<uint64_t> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids.push_back(transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong());
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnTop(ids);
+}
+
+void Themes::on_pushUp_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ std::vector<uint64_t> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids.push_back(transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong());
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsUp(ids);
+}
+
+void Themes::on_pushDown_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ std::vector<uint64_t> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids.push_back(transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong());
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsDown(ids);
+}
+
+void Themes::on_putOnBottom_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ std::vector<uint64_t> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids.push_back(transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong());
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnBottom(ids);
+}
+
+void Themes::on_del_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ std::vector<uint64_t> ids;
+ int index=0;
+ const int &loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids.push_back(transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong());
+ index++;
+ }
+ if(ids.size()>0)
+ emit removeItems(ids);
+}
+
+void Themes::on_cancelButton_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ this->hide();
+ emit cancel();
+}
+
+
+void Themes::speedWithProgressBar_toggled(bool checked)
+{
+ (void)checked;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ /*ui->progressBarCurrentSpeed->setVisible(checked);
+ ui->currentSpeed->setVisible(!checked);*/
+}
+
+void Themes::showDualProgression_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ updateProgressionColorBar();
+}
+
+void Themes::checkBoxShowSpeed_toggled(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ Q_UNUSED(checked);
+ updateSpeed();
+}
+
+void Themes::on_SliderSpeed_valueChanged(int value)
+{
+ if(!uiOptions->checkBoxShowSpeed->isChecked())
+ return;
+ switch(value)
+ {
+ case 0:
+ currentSpeed=0;
+ break;
+ case 1:
+ currentSpeed=1024;
+ break;
+ case 2:
+ currentSpeed=1024*4;
+ break;
+ case 3:
+ currentSpeed=1024*16;
+ break;
+ case 4:
+ currentSpeed=1024*64;
+ break;
+ case 5:
+ currentSpeed=1024*128;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"value: "+std::to_string(value));
+ emit newSpeedLimitation(currentSpeed);
+ updateSpeed();
+}
+
+void Themes::uiUpdateSpeed()
+{
+ if(uiOptions->checkBoxShowSpeed->isChecked())
+ return;
+ if(!uiOptions->checkBox_limitSpeed->isChecked())
+ currentSpeed=0;
+ else
+ currentSpeed=uiOptions->limitSpeed->value();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"emit newSpeedLimitation"+std::to_string(currentSpeed));
+ emit newSpeedLimitation(currentSpeed);
+}
+
+void Themes::updateSpeed()
+{
+ ui->label_Slider_speed->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ ui->SliderSpeed->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ ui->label_SpeedMaxValue->setVisible(uiOptions->checkBoxShowSpeed->isChecked());
+ uiOptions->limitSpeed->setVisible(!uiOptions->checkBoxShowSpeed->isChecked());
+ uiOptions->checkBox_limitSpeed->setVisible(!uiOptions->checkBoxShowSpeed->isChecked());
+
+ if(uiOptions->checkBoxShowSpeed->isChecked())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"checked, currentSpeed: "+std::to_string(currentSpeed));
+ uiOptions->limitSpeed->setEnabled(false);
+ if(currentSpeed==0)
+ {
+ ui->SliderSpeed->setValue(0);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->translateText("Unlimited")));
+ }
+ else if(currentSpeed<=1024)
+ {
+ if(currentSpeed!=1024)
+ {
+ currentSpeed=1024;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(1);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*1)));
+ }
+ else if(currentSpeed<=1024*4)
+ {
+ if(currentSpeed!=1024*4)
+ {
+ currentSpeed=1024*4;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(2);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*4)));
+ }
+ else if(currentSpeed<=1024*16)
+ {
+ if(currentSpeed!=1024*16)
+ {
+ currentSpeed=1024*16;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(3);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*16)));
+ }
+ else if(currentSpeed<=1024*64)
+ {
+ if(currentSpeed!=1024*64)
+ {
+ currentSpeed=1024*64;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(4);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*64)));
+ }
+ else
+ {
+ if(currentSpeed!=1024*128)
+ {
+ currentSpeed=1024*128;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(5);
+ ui->label_SpeedMaxValue->setText(QString::fromStdString(facilityEngine->speedToString((double)(1024*1024)*128)));
+ }
+ }
+ else
+ {
+ uiOptions->checkBox_limitSpeed->setChecked(currentSpeed>0);
+ if(currentSpeed>0)
+ uiOptions->limitSpeed->setValue(currentSpeed);
+ uiOptions->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
+ uiOptions->limitSpeed->setEnabled(uiOptions->checkBox_limitSpeed->isChecked());
+ }
+}
+
+void Themes::on_pauseButton_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(storeIsInPause)
+ emit resume();
+ else
+ emit pause();
+}
+
+void Themes::on_skipButton_clicked()
+{
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"skip at running: "+std::to_string(transfertItem.id));
+ emit skip(transfertItem.id);
+ }
+ else
+ {
+ if(transferModel.rowCount()>1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"skip at idle: "+std::to_string(transferModel.firstId()));
+ emit skip(transferModel.firstId());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
+ }
+}
+
+void Themes::updateModeAndType()
+{
+ menu->clear();
+ if(modeIsForced)
+ {
+ menu->addAction(ui->actionAddFile);
+ if(type==Ultracopier::FileAndFolder)
+ menu->addAction(ui->actionAddFolder);
+ }
+ else
+ {
+ menu->addAction(ui->actionAddFileToCopy);
+ menu->addAction(ui->actionAddFileToMove);
+ if(type==Ultracopier::FileAndFolder)
+ {
+ menu->addAction(ui->actionAddFolderToCopy);
+ menu->addAction(ui->actionAddFolderToMove);
+ }
+ }
+}
+
+void Themes::forcedModeAddFile()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFile(mode);
+}
+
+void Themes::forcedModeAddFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFolder(mode);
+}
+
+void Themes::forcedModeAddFileToCopy()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFile(Ultracopier::Copy);
+}
+
+void Themes::forcedModeAddFolderToCopy()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFolder(Ultracopier::Copy);
+}
+
+void Themes::forcedModeAddFileToMove()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFile(Ultracopier::Move);
+}
+
+void Themes::forcedModeAddFolderToMove()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ emit userAddFolder(Ultracopier::Move);
+}
+
+void Themes::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(modeIsForced)
+ forceCopyMode(mode);
+ ui->retranslateUi(this);
+ uiOptions->retranslateUi(this);
+ uiOptions->comboBox_copyEnd->setItemText(0,tr("Don't close if errors are found"));
+ uiOptions->comboBox_copyEnd->setItemText(1,tr("Never close"));
+ uiOptions->comboBox_copyEnd->setItemText(2,tr("Always close"));
+ if(!haveStarted)
+ ui->current_file->setText(tr("File Name, 0KB"));
+ else
+ updateCurrentFileInformation();
+ updateOverallInformation();
+ updateSpeed();
+ if(ui->tabWidget->count()>=4)
+ ui->tabWidget->setTabText(ui->tabWidget->count()-1,
+ QString::fromStdString(facilityEngine->translateText("Copy engine")));
+ on_moreButton_toggled(ui->moreButton->isChecked());
+}
+
+void Themes::on_pushButtonCloseSearch_clicked()
+{
+ closeTheSearchBox();
+}
+
+//close the search box
+void Themes::closeTheSearchBox()
+{
+ currentIndexSearch = -1;
+ ui->lineEditSearch->clear();
+ ui->lineEditSearch->hide();
+ ui->pushButtonSearchPrev->hide();
+ ui->pushButtonSearchNext->hide();
+ ui->pushButtonCloseSearch->hide();
+ ui->searchButton->setChecked(false);
+ hilightTheSearch();
+}
+
+//search box shortcut
+void Themes::searchBoxShortcut()
+{
+/* if(ui->lineEditSearch->isHidden())
+ {*/
+ ui->lineEditSearch->show();
+ ui->pushButtonSearchPrev->show();
+ ui->pushButtonSearchNext->show();
+ ui->pushButtonCloseSearch->show();
+ ui->lineEditSearch->setFocus(Qt::ShortcutFocusReason);
+ ui->searchButton->setChecked(true);
+/* }
+ else
+ closeTheSearchBox();*/
+}
+
+//hilight the search
+void Themes::hilightTheSearch(bool searchNext)
+{
+ int result=transferModel.search(ui->lineEditSearch->text().toStdString(),searchNext);
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(255, 150, 150);"));
+ else
+ {
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(193,255,176);"));
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
+}
+
+void Themes::hilightTheSearchSlot()
+{
+ hilightTheSearch();
+}
+
+void Themes::on_pushButtonSearchPrev_clicked()
+{
+ int result=transferModel.searchPrev(ui->lineEditSearch->text().toStdString());
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(255, 150, 150);"));
+ else
+ {
+ ui->lineEditSearch->setStyleSheet(QStringLiteral("background-color: rgb(193,255,176);"));
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
+}
+
+void Themes::on_pushButtonSearchNext_clicked()
+{
+ hilightTheSearch(true);
+}
+
+void Themes::on_lineEditSearch_returnPressed()
+{
+ hilightTheSearch();
+}
+
+void Themes::on_lineEditSearch_textChanged(QString text)
+{
+ if(text=="")
+ {
+ TimerForSearch->stop();
+ hilightTheSearch();
+ }
+ else
+ TimerForSearch->start();
+}
+
+void Themes::on_moreButton_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ /*if(checked)
+ this->setMaximumHeight(16777215);
+ else
+ this->setMaximumHeight(130);*/
+ // usefull under windows
+ #if ! defined(__ANDROID__) && ! defined(ANDROID) && ! defined(__ANDROID_API__)
+ this->adjustSize();
+ #endif
+}
+
+/* drag event processing
+
+need setAcceptDrops(true); into the constructor
+need implementation to accept the drop:
+void dragEnterEvent(QDragEnterEvent* event);
+void dragMoveEvent(QDragMoveEvent* event);
+void dragLeaveEvent(QDragLeaveEvent* event);
+*/
+void Themes::dropEvent(QDropEvent *event)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"hasUrls");
+ std::vector<std::string> urls;
+ unsigned int index=0;
+ foreach (QUrl url, mimeData->urls())
+ {
+ const std::string &urlString=url.toString().toStdString();
+ if(index<99)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,urlString);
+ urls.push_back(urlString);
+ index++;
+ }
+ emit urlDropped(urls);
+ event->acceptProposedAction();
+ }
+}
+
+void Themes::dragEnterEvent(QDragEnterEvent* event)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ // if some actions should not be usable, like move, this code must be adopted
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"hasUrls");
+ event->acceptProposedAction();
+ }
+}
+
+void Themes::dragMoveEvent(QDragMoveEvent* event)
+{
+ // if some actions should not be usable, like move, this code must be adopted
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ event->acceptProposedAction();
+}
+
+void Themes::dragLeaveEvent(QDragLeaveEvent* event)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ event->accept();
+}
+
+void Themes::on_searchButton_toggled(bool checked)
+{
+ if(checked)
+ searchBoxShortcut();
+ else
+ closeTheSearchBox();
+}
+
+void Themes::on_exportTransferList_clicked()
+{
+ emit exportTransferList();
+}
+
+void Themes::on_importTransferList_clicked()
+{
+ emit importTransferList();
+}
+
+void Themes::progressColorWrite_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorWrite,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorWrite=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorWrite);
+ uiOptions->progressColorWrite->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::progressColorRead_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRead,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRead=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRead);
+ uiOptions->progressColorRead->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::progressColorRemaining_clicked()
+{
+ QColor color=QColorDialog::getColor(progressColorRemaining,this,tr("Select a color"));
+ if(!color.isValid())
+ return;
+ progressColorRemaining=color;
+ QPixmap pixmap(75,20);
+ pixmap.fill(progressColorRemaining);
+ uiOptions->progressColorRemaining->setIcon(pixmap);
+ updateProgressionColorBar();
+}
+
+void Themes::alwaysOnTop_clicked(bool reshow)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_WIN32
+ if(uiOptions->alwaysOnTop->isChecked())
+ SetWindowPos((HWND)this->winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+ else
+ SetWindowPos((HWND)this->winId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+ #endif
+ #ifdef Q_OS_LINUX
+ if(uiOptions->alwaysOnTop->isChecked())
+ flags=flags | Qt::X11BypassWindowManagerHint;
+ else
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ if(uiOptions->alwaysOnTop->isChecked())
+ flags=flags | Qt::WindowStaysOnTopHint;
+ else
+ flags=flags & ~Qt::WindowStaysOnTopHint;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"uiOptions->alwaysOnTop->isChecked(): "+std::to_string(uiOptions->alwaysOnTop->isChecked())+", flags: "+std::to_string(flags));
+ setWindowFlags(flags);
+ if(reshow)
+ show();
+}
+
+void Themes::alwaysOnTop_clickedSlot()
+{
+ alwaysOnTop_clicked(true);
+}
+
+void Themes::updateProgressionColorBar()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ uiOptions->labelProgressionColor->setVisible(uiOptions->showDualProgression->isChecked());
+ uiOptions->frameProgressionColor->setVisible(uiOptions->showDualProgression->isChecked());
+ if(!darkUi)
+ {
+ if(!uiOptions->showDualProgression->isChecked())
+ {
+ ui->progressBar_all->setStyleSheet(QStringLiteral(""));
+ ui->progressBar_file->setStyleSheet(QStringLiteral(""));
+ //ui->progressBarCurrentSpeed->setStyleSheet(QStringLiteral(""));
+ }
+ else
+ {
+ ui->progressBar_all->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ ui->progressBar_file->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );
+ /*ui->progressBarCurrentSpeed->setStyleSheet(QStringLiteral("QProgressBar{border:1px solid grey;text-align:center;background-color:%1;}QProgressBar::chunk{background-color:%2;}")
+ .arg(progressColorRemaining.name())
+ .arg(progressColorWrite.name())
+ );*/
+ }
+ }
+ if(stat==status_never_started)
+ updateCurrentFileInformation();
+}
+
+QString Themes::simplifiedBigNum(const uint64_t &num)
+{
+ if(num<1000)
+ return QString::number(num);
+ else if(num<1000000)
+ return QString::number(num/1000)+QStringLiteral("k");
+ else
+ return QString::number(num/1000000)+QStringLiteral("M");
+}
+
+void Themes::updateTitle()
+{
+ if(uiOptions->showProgressionInTheTitle->isChecked() && totalSize>0)
+ {
+ if(!modeIsForced)
+ this->setWindowTitle(tr("%1 %2% of %3 into %4 files")
+ .arg(QString::fromStdString(facilityEngine->translateText("Transfer")))
+ .arg((currentSize*100)/totalSize)
+ .arg(QString::fromStdString(facilityEngine->sizeToString(totalSize)))
+ .arg(simplifiedBigNum(totalFile))+
+ QStringLiteral(" - ")+
+ QString::fromStdString(facilityEngine->softwareName())
+ );
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle(tr("%1 %2% of %3 into %4 files")
+ .arg(QString::fromStdString(facilityEngine->translateText("Copy")))
+ .arg((currentSize*100)/totalSize)
+ .arg(QString::fromStdString(facilityEngine->sizeToString(totalSize)))
+ .arg(simplifiedBigNum(totalFile))+
+ QStringLiteral(" - ")+
+ QString::fromStdString(facilityEngine->softwareName())
+ );
+ else
+ this->setWindowTitle(tr("%1 %2% of %3 into %4 files")
+ .arg(QString::fromStdString(facilityEngine->translateText("Move")))
+ .arg((currentSize*100)/totalSize)
+ .arg(QString::fromStdString(facilityEngine->sizeToString(totalSize)))
+ .arg(simplifiedBigNum(totalFile))+
+ QStringLiteral(" - ")+
+ QString::fromStdString(facilityEngine->softwareName())
+ );
+ }
+ }
+ else
+ {
+ if(!modeIsForced)
+ this->setWindowTitle(
+ QString::fromStdString(facilityEngine->translateText("Transfer"))+
+ QStringLiteral(" - ")+
+ QString::fromStdString(facilityEngine->softwareName())
+ );
+ else
+ {
+ if(mode==Ultracopier::Copy)
+ this->setWindowTitle(
+ QString::fromStdString(facilityEngine->translateText("Copy"))+
+ QStringLiteral(" - ")+
+ QString::fromStdString(facilityEngine->softwareName())
+ );
+ else
+ this->setWindowTitle(
+ QString::fromStdString(facilityEngine->translateText("Move"))+
+ QStringLiteral(" - ")+
+ QString::fromStdString(facilityEngine->softwareName())
+ );
+ }
+ }
+}
+
+/** \brief Create progessive icon
+
+Do QIcon with top and bottom image mixed and percent writed on it.
+The icon it be search in the style path.
+Do by mongaulois, remake by alpha_one_x86.
+\param percent indique how many percent need be showed, sould be between 0 and 100
+\param text The showed text if needed (optionnal)
+\return QIcon of the final image
+\note Can be used as it: dynaIcon(75,"...")
+*/
+QIcon Themes::dynaIcon(int percent,std::string text) const
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(pixmapTop.isNull() || pixmapBottom.isNull())
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error loading the icons");
+ #endif
+ if(percent==-1)
+ percent=getOldProgression;
+ if(percent<0)
+ percent=0;
+ if(percent>100)
+ percent=100;
+ //pixmap avec un fond transparent
+ #ifdef Q_OS_WIN32
+ quint8 imageSize=16;
+ #else
+ quint8 imageSize=22;
+ #endif
+ QPixmap resultImage(imageSize,imageSize);
+ resultImage.fill(Qt::transparent);
+ {
+ QPainter painter(&resultImage);
+ #ifndef Q_OS_WIN32
+ QFont font(QStringLiteral("Courier New"),9);
+ font.setBold(true);
+ font.setKerning(true);
+ painter.setFont(font);
+ #endif
+ #ifdef Q_OS_WIN32
+ QFont font(QStringLiteral("Courier New"),8);
+ font.setBold(true);
+ font.setKerning(true);
+ painter.setFont(font);
+ #endif
+
+ //preprocessing the calcul
+ quint8 bottomPixel=(percent*imageSize)/100;
+ quint8 topPixel=imageSize-bottomPixel;
+
+ //top image
+ if(topPixel>0)
+ {
+ QRect target(0, 0, imageSize, topPixel);
+ QRect source(0, 0, imageSize, topPixel);
+ painter.drawPixmap(target, pixmapTop, source);
+ }
+
+ //bottom image
+ if(bottomPixel>0)
+ {
+ QRect target2(0, topPixel, imageSize, bottomPixel);
+ QRect source2(0, topPixel, imageSize, bottomPixel);
+ painter.drawPixmap(target2, pixmapBottom, source2);
+ }
+
+ qint8 textxOffset=0;
+ qint8 textyOffset=0;
+ if(text.empty())
+ {
+ if(percent!=100)
+ text=std::to_string(percent);
+ else
+ {
+ text=":)";
+ #ifdef Q_OS_WIN32
+ textyOffset-=2;
+ #else
+ textyOffset-=1;
+ #endif
+ }
+ }
+ if(text.size()==1)
+ {
+ textxOffset+=3;
+ #ifdef Q_OS_WIN32
+ textxOffset-=1;
+ #endif
+ }
+ else
+ {
+ #ifdef Q_OS_WIN32
+ textxOffset-=1;
+ #endif
+ }
+ #ifndef Q_OS_WIN32
+ textxOffset+=2;
+ textyOffset+=3;
+ #endif
+ painter.setPen(QPen(Qt::black));
+ painter.drawText(3+textxOffset,13+textyOffset,QString::fromStdString(text));
+ painter.setPen(QPen(Qt::white));
+ painter.drawText(2+textxOffset,12+textyOffset,QString::fromStdString(text));
+ }
+ return QIcon(resultImage);
+}
+
+/** \brief For catch an action on the systray icon
+\param reason Why it activated
+*/
+void Themes::catchAction(QSystemTrayIcon::ActivationReason reason)
+{
+ if(reason==QSystemTrayIcon::DoubleClick || reason==QSystemTrayIcon::Trigger)
+ {
+ sysTrayIcon->hide();
+ this->show();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Double Click detected");
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"reason: "+std::to_string(reason));
+}
+
+void Themes::on_exportErrorToTransferList_clicked()
+{
+ emit exportErrorIntoTransferList();
+}
+
+void Themes::resizeEvent(QResizeEvent*)
+{
+ if(!ui->moreButton->isChecked() && (moreButton==NULL || !moreButton->isChecked()))
+ {
+ if(width()<height())
+ {
+ ui->horizontalLayout_3->setDirection(QBoxLayout::TopToBottom);
+ ui->frameLeft->setMaximumHeight(height()/3);
+ ui->frameLeft->setMaximumWidth(1000000);
+ ui->frameMiddle->setMaximumHeight(height()/3);
+ ui->frameMiddle->setMaximumWidth(1000000);
+ ui->frameRight->setMaximumHeight(height()/3);
+ ui->frameRight->setMaximumWidth(1000000);
+ }
+ else
+ {
+ ui->horizontalLayout_3->setDirection(QBoxLayout::LeftToRight);
+ ui->frameLeft->setMaximumHeight(1000000);
+ ui->frameLeft->setMaximumWidth(width()/3);
+ ui->frameMiddle->setMaximumHeight(1000000);
+ ui->frameMiddle->setMaximumWidth(width()/3);
+ ui->frameRight->setMaximumHeight(1000000);
+ ui->frameRight->setMaximumWidth(width()/3);
+ }
+ }
+ else {
+ ui->frameLeft->setMaximumHeight(1000000);
+ ui->frameLeft->setMaximumWidth(1000000);
+ ui->frameMiddle->setMaximumHeight(1000000);
+ ui->frameMiddle->setMaximumWidth(1000000);
+ ui->frameRight->setMaximumHeight(1000000);
+ ui->frameRight->setMaximumWidth(1000000);
+ }
+ if(ui->frameS->width()>300)
+ {
+ int space=ui->frameS->width()/20;
+ ui->horizontalLayoutS->setContentsMargins(space,space/2,space,space/2);
+ ui->horizontalLayoutS->setSpacing(space);
+ }
+ else
+ {
+ ui->horizontalLayoutS->setMargin(6);
+ ui->horizontalLayoutS->setSpacing(6);
+ }
+}
+
+void Themes::doneTime(const std::vector<std::pair<uint64_t,uint32_t> > &timeList)
+{
+ if(remainingTimeLogarithmicValue.size()<ULTRACOPIERO2_MAXREMAININGTIMECOL)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, remainingTimeLogarithmicValue.size() "+std::to_string(remainingTimeLogarithmicValue.size())+" <ULTRACOPIERO2_MAXREMAININGTIMECOL");
+ else
+ {
+ unsigned int sub_index=0;
+ while(sub_index<timeList.size())
+ {
+ const std::pair<uint64_t,uint32_t> &timeUnit=timeList.at(sub_index);
+ const uint8_t &col=fileCatNumber(timeUnit.first);
+ RemainingTimeLogarithmicColumn &remainingTimeLogarithmicColumn=remainingTimeLogarithmicValue[col];
+ if(remainingTimeLogarithmicValue.size()<=col)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, remainingTimeLogarithmicValue.size() "+std::to_string(remainingTimeLogarithmicValue.size())+" < col %2"+std::to_string(col));
+ break;
+ }
+ else
+ {
+ if(timeUnit.second>0)
+ {
+ remainingTimeLogarithmicColumn.lastProgressionSpeed.push_back(static_cast<uint64_t>(timeUnit.first/timeUnit.second)*1000);
+ if(remainingTimeLogarithmicColumn.lastProgressionSpeed.size()>ULTRACOPIERO2_MAXVALUESPEEDSTORED)
+ remainingTimeLogarithmicColumn.lastProgressionSpeed.erase(remainingTimeLogarithmicColumn.lastProgressionSpeed.begin());
+
+ }
+ }
+ sub_index++;
+ }
+ unsigned int max=1;
+ sub_index=0;
+ while(sub_index<remainingTimeLogarithmicValue.size() && sub_index<6)
+ {
+ const RemainingTimeLogarithmicColumn &col=remainingTimeLogarithmicValue.at(sub_index);
+ unsigned int tot=0;
+ unsigned int index=0;
+ while(index<col.lastProgressionSpeed.size())
+ {
+ tot+=col.lastProgressionSpeed.at(index);
+ index++;
+ }
+ unsigned int res=0;
+ if(!col.lastProgressionSpeed.empty())
+ res=tot/col.lastProgressionSpeed.size();
+ if(max<res)
+ max=res;
+ sub_index++;
+ }
+ if(max>1)
+ verticalLabel->setText(QString::fromStdString(facilityEngine->speedToString(max)));
+ sub_index=0;
+ while(sub_index<remainingTimeLogarithmicValue.size() && sub_index<6)
+ {
+ const RemainingTimeLogarithmicColumn &col=remainingTimeLogarithmicValue.at(sub_index);
+ unsigned int tot=0;
+ unsigned int index=0;
+ while(index<col.lastProgressionSpeed.size())
+ {
+ tot+=col.lastProgressionSpeed.at(index);
+ index++;
+ }
+ unsigned int res=0;
+ if(!col.lastProgressionSpeed.empty())
+ res=tot/col.lastProgressionSpeed.size();
+ QProgressBar *p=nullptr;
+ switch (sub_index) {
+ case 0:
+ p=ui->progressBar;
+ break;
+ case 1:
+ p=ui->progressBar_2;
+ break;
+ case 2:
+ p=ui->progressBar_3;
+ break;
+ case 3:
+ p=ui->progressBar_4;
+ break;
+ case 4:
+ p=ui->progressBar_5;
+ break;
+ case 5:
+ p=ui->progressBar_6;
+ break;
+ default:
+ break;
+ }
+ p->setValue(res);
+ p->setMaximum(max);
+ p->setToolTip(QString::fromStdString(facilityEngine->speedToString(res)));
+ sub_index++;
+ }
+ }
+}
+
+/* return 0 to 5 */
+uint8_t Themes::fileCatNumber(uint64_t size)
+{
+ //all is in base 10 to understand more easily
+ //drop the big value
+ if(size>100*1000*1000)
+ size=100*1000*1000;
+ size=size/100;//to group all the too small file into the value 0
+ const double rlog=round(log10(size));
+ if(rlog>5)
+ return 5;
+ return rlog;
+}
+
+void Themes::paintEvent(QPaintEvent * event)
+{
+ if(darkUi)
+ {
+ if(background.width()!=width() || background.height()!=height())
+ {
+ int minimal=height();
+ if(width()<height())
+ minimal=width();
+
+ QPixmap temp(minimal,minimal);
+ QPainter paint;
+ paint.begin(&temp);
+
+ QRadialGradient radialGrad(QPointF(minimal/2,minimal/2), minimal/2);
+ radialGrad.setColorAt(0, QColor(70, 70, 70));
+ radialGrad.setColorAt(1, QColor(40, 40, 40));
+ QRect rect_radial(0,0,minimal,minimal);
+ paint.fillRect(rect_radial, radialGrad);
+ background=temp.scaled(width(),height(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
+ }
+ QPainter paint;
+ paint.begin(this);
+ paint.drawPixmap(0,0,background.width(), background.height(), background);
+ }
+ else
+ QWidget::paintEvent(event);
+}
diff --git a/plugins/Themes/Oxygen2/interface.h b/plugins/Themes/Oxygen2/interface.h
new file mode 100755
index 0000000..ab6f101
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interface.h
@@ -0,0 +1,259 @@
+/** \file interface.h
+\brief Define the interface
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef INTERFACE_H
+#define INTERFACE_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+#include <QShortcut>
+#include <QItemSelectionModel>
+#include <QTimer>
+#include <QTime>
+#include <QSystemTrayIcon>
+#include <QPixmap>
+#ifdef Q_OS_WIN32
+#include <QWinTaskbarProgress>
+#endif
+
+#include "../../../interface/PluginInterface_Themes.h"
+#include "radialMap/widget.h"
+#include "chartarea.h"
+#include "ProgressBarDark.h"
+#include "DarkButton.h"
+#include "VerticalLabel.h"
+
+#include "ui_interface.h"
+#include "ui_themesOptions.h"
+#include "Oxygen2Environment.h"
+#include "TransferModel.h"
+
+namespace Ui {
+ class interfaceCopy;
+ class themesOptions;
+}
+
+/// \brief Define the interface
+class Themes : public PluginInterface_Themes
+{
+ Q_OBJECT
+public:
+ Themes(const bool &alwaysOnTop,
+ const bool &showProgressionInTheTitle,
+ const QColor &progressColorWrite,
+ const QColor &progressColorRead,
+ const QColor &progressColorRemaining,
+ const bool &showDualProgression,
+ const quint8 &comboBox_copyEnd,
+ const bool &speedWithProgressBar,
+ const qint32 &currentSpeed,
+ const bool &checkBoxShowSpeed,
+ FacilityInterface * facilityEngine,
+ const bool &moreButtonPushed,
+ const bool &minimizeToSystray,
+ const bool &startMinimized,
+ const quint8 &position,
+ const bool &dark);
+ ~Themes();
+ //send information about the copy
+ /// \brief to set the action in progress
+ void actionInProgess(const Ultracopier::EngineActionInProgress &) override;
+ /// \brief the new folder is listing
+ void newFolderListing(const std::string &path) override;
+ /** \brief show the detected speed
+ * in byte per seconds */
+ void detectedSpeed(const uint64_t &speed) override;
+ /** \brief show the remaining time
+ * time in seconds */
+ void remainingTime(const int &remainingSeconds) override;
+ /// \brief set the current collision action
+ void newCollisionAction(const std::string &action);
+ /// \brief set the current error action
+ void newErrorAction(const std::string &action);
+ /// \brief set one error is detected
+ void errorDetected() override;
+ /// \brief new error
+ void errorToRetry(const std::string &source,const std::string &destination,const std::string &error) override;
+ /** \brief support speed limitation */
+ void setSupportSpeedLimitation(const bool &supportSpeedLimitationBool) override;
+ //get information about the copy
+ /// \brief show the general progression
+ void setGeneralProgression(const uint64_t &current,const uint64_t &total) override;
+ /// \brief show the file progression
+ void setFileProgression(const std::vector<Ultracopier::ProgressionItem> &progressionList) override;
+ /// \brief set the copyType -> file or folder
+ void setCopyType(const Ultracopier::CopyType &) override;
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ void forceCopyMode(const Ultracopier::CopyMode &) override;
+ /// \brief set if transfer list is exportable/importable
+ void setTransferListOperation(const Ultracopier::TransferListOperation &transferListOperation) override;
+ //edit the transfer list
+ /// \brief get action on the transfer list (add/move/remove)
+ void getActionOnList(const std::vector<Ultracopier::ReturnActionOnCopyList> &returnActions) override;
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ void haveExternalOrder() override;
+ /// to get by file speed, size and ms
+ void doneTime(const std::vector<std::pair<uint64_t,uint32_t> > &timeList) override;
+ /// \brief set if is in pause
+ void isInPause(const bool &) override;
+ /// \brief set if have pause
+ void havePause(const bool &) override;
+ /// \brief get the widget for the copy engine
+ QWidget * getOptionsEngineWidget() override;
+ /// \brief to set if the copy engine is found
+ void getOptionsEngineEnabled(const bool &isEnabled) override;
+ enum status{status_never_started,status_started,status_stopped};
+ status stat;
+
+ static QString simplifiedBigNum(const uint64_t &num);
+public slots:
+ /// \brief set the translate
+ void newLanguageLoaded();
+private slots:
+ void on_putOnTop_clicked();
+ void on_pushUp_clicked();
+ void on_pushDown_clicked();
+ void on_putOnBottom_clicked();
+ void on_del_clicked();
+ void on_cancelButton_clicked();
+ void speedWithProgressBar_toggled(bool checked);
+ void showDualProgression_toggled(bool checked);
+ void checkBoxShowSpeed_toggled(bool checked);
+ void on_SliderSpeed_valueChanged(int value);
+ void on_pauseButton_clicked();
+ void on_skipButton_clicked();
+ void forcedModeAddFile();
+ void forcedModeAddFolder();
+ void forcedModeAddFileToCopy();
+ void forcedModeAddFolderToCopy();
+ void forcedModeAddFileToMove();
+ void forcedModeAddFolderToMove();
+ void uiUpdateSpeed();
+ void on_pushButtonCloseSearch_clicked();
+ //close the search box
+ void closeTheSearchBox();
+ //search box shortcut
+ void searchBoxShortcut();
+ //hilight the search
+ void hilightTheSearch(bool searchNext=false);
+ void hilightTheSearchSlot();
+ //auto connect
+ void on_pushButtonSearchPrev_clicked();
+ void on_pushButtonSearchNext_clicked();
+ void on_lineEditSearch_returnPressed();
+ void on_lineEditSearch_textChanged(QString text);
+ void on_moreButton_toggled(bool checked);
+ void on_searchButton_toggled(bool checked);
+ void on_exportTransferList_clicked();
+ void on_importTransferList_clicked();
+ void progressColorWrite_clicked();
+ void progressColorRead_clicked();
+ void progressColorRemaining_clicked();
+ void alwaysOnTop_clicked(bool reshow);
+ void alwaysOnTop_clickedSlot();
+ void updateProgressionColorBar();
+ void updateTitle();
+ void catchAction(QSystemTrayIcon::ActivationReason reason);
+ void on_exportErrorToTransferList_clicked();
+private:
+ uint64_t duration;
+ bool durationStarted;
+ QPixmap pixmapTop,pixmapBottom;
+ QColor progressColorWrite,progressColorRead,progressColorRemaining;
+ Ui::interfaceCopy *ui;
+ Ui::themesOptions *uiOptions;
+ uint64_t currentFile;
+ uint64_t totalFile;
+ uint64_t currentSize;
+ uint64_t totalSize;
+ uint8_t getOldProgression;
+ QSystemTrayIcon *sysTrayIcon;
+ void updateOverallInformation();
+ void updateCurrentFileInformation();
+ QMenu *menu;
+ Ultracopier::EngineActionInProgress action;
+ void closeEvent(QCloseEvent *event) override;
+ int32_t currentSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ void updateSpeed();
+ bool storeIsInPause;
+ bool modeIsForced;
+ Ultracopier::CopyType type;
+ Ultracopier::CopyMode mode;
+ void updateModeAndType();
+ bool haveStarted;
+ bool haveError;
+ QWidget optionEngineWidget;
+ QShortcut *searchShortcut;
+ QShortcut *searchShortcut2;
+ QShortcut *searchShortcut3;
+ QTimer *TimerForSearch;
+ int currentIndexSearch; ///< Current index search in starting at the end
+ FacilityInterface * facilityEngine;
+ QItemSelectionModel *selectionModel;
+ QModelIndexList selectedItems;
+ /// \brief the custom transfer model
+ TransferModel transferModel;
+ RadialMap::Widget *radial;
+ ChartArea::Widget *chartarea;
+ bool darkUi;
+ bool m_havePause;
+ QPixmap background;
+
+ static QIcon player_play,player_pause,tempExitIcon,editDelete,skinIcon,editFind,documentOpen,documentSave,listAdd;
+ static bool iconLoaded;
+
+ struct RemainingTimeLogarithmicColumn
+ {
+ std::vector<int> lastProgressionSpeed;
+ };
+ /** for RemainingTimeAlgo_Logarithmic **/
+ std::vector<RemainingTimeLogarithmicColumn> remainingTimeLogarithmicValue;
+
+ /** \brief drag event processing
+
+ need setAcceptDrops(true); into the constructor
+ need implementation to accept the drop:
+ void dragEnterEvent(QDragEnterEvent* event);
+ void dragMoveEvent(QDragMoveEvent* event);
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ */
+ void dropEvent(QDropEvent *event) override;
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragEnterEvent(QDragEnterEvent* event) override;
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragMoveEvent(QDragMoveEvent* event) override;
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragLeaveEvent(QDragLeaveEvent* event) override;
+ //have functionality
+ bool shutdown;
+ ProgressBarDark * progressBar_all;
+ ProgressBarDark * progressBar_file;
+ DarkButton * moreButton;
+ DarkButton * pauseButton;
+ DarkButton * skipButton;
+ DarkButton * cancelButton;
+ VerticalLabel *verticalLabel;
+ void updatePause();
+ QIcon dynaIcon(int percent,std::string text="") const;
+ void updateSysTrayIcon();
+ void resizeEvent(QResizeEvent*) override;
+ uint8_t fileCatNumber(uint64_t size);
+ void paintEvent(QPaintEvent *event) override;
+
+ #ifdef Q_OS_WIN32
+ QWinTaskbarProgress winTaskbarProgress;
+ #endif
+signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const std::string &fonction,const std::string &text,const std::string &file,const int &ligne) const;
+};
+
+#endif // INTERFACE_H
diff --git a/plugins/Themes/Oxygen2/interface.pro b/plugins/Themes/Oxygen2/interface.pro
new file mode 100755
index 0000000..cbd495e
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interface.pro
@@ -0,0 +1,8 @@
+include($$PWD/../Oxygen2/interfaceInclude.pri)
+
+!CONFIG(static) {
+RESOURCES += \
+ $$PWD/../Oxygen2/interfaceResources.qrc \
+ $$PWD/../Oxygen2/interfaceResources_unix.qrc \
+ $$PWD/../Oxygen2/interfaceResources_windows.qrc
+}
diff --git a/plugins/Themes/Oxygen2/interface.ui b/plugins/Themes/Oxygen2/interface.ui
new file mode 100755
index 0000000..dc0b397
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interface.ui
@@ -0,0 +1,1098 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>interfaceCopy</class>
+ <widget class="QWidget" name="interfaceCopy">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>550</width>
+ <height>539</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>550</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Ultracopier</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/main.png</normaloff>:/Themes/Oxygen2/resources/main.png</iconset>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="leftMargin">
+ <number>1</number>
+ </property>
+ <property name="topMargin">
+ <number>1</number>
+ </property>
+ <property name="rightMargin">
+ <number>1</number>
+ </property>
+ <property name="bottomMargin">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QFrame" name="frame">
+ <property name="minimumSize">
+ <size>
+ <width>300</width>
+ <height>100</height>
+ </size>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QFrame" name="frameLeft">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayoutLeft">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayoutVL">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QFrame" name="frameS">
+ <layout class="QHBoxLayout" name="horizontalLayoutS">
+ <item>
+ <widget class="QProgressBar" name="progressBar">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="value">
+ <number>20</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="value">
+ <number>30</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_3">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="value">
+ <number>66</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="value">
+ <number>75</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_5">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="value">
+ <number>84</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_6">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="value">
+ <number>87</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_8">
+ <item>
+ <widget class="QLabel" name="labelSPStart">
+ <property name="text">
+ <string>0</string>
+ </property>
+ </widget>
+ </item>
+ <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>
+ <widget class="QLabel" name="labelSPStop">
+ <property name="text">
+ <string>100MB+</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="labelTimeRemaining">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string notr="true">Remaining: 5min</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_all">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayoutLeft">
+ <item>
+ <widget class="QPushButton" name="moreButton">
+ <property name="text">
+ <string>&amp;More</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/moveDown.png</normaloff>:/Themes/Oxygen2/resources/moveDown.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pauseButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Pause</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/player_pause.png</normaloff>:/Themes/Oxygen2/resources/player_pause.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QFrame" name="frameMiddle">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayouMiddle">
+ <item>
+ <widget class="QLabel" name="overall">
+ <property name="text">
+ <string notr="true">File 0/0, Total: 0KB</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QFrame" name="frameRight">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayoutRight">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_9">
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <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>
+ <widget class="QToolButton" name="shutdown">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Close on transfer completion</string>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgba(255, 0, 255, 0);</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/SystemTrayIcon/exit.png</normaloff>:/Themes/Oxygen2/resources/SystemTrayIcon/exit.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="Line" name="line_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item>
+ <widget class="QLabel" name="from_label">
+ <property name="text">
+ <string>From:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="from">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="current_file">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string notr="true">File Name, 0KB</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_file">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayoutRight">
+ <item>
+ <widget class="QPushButton" name="skipButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Skip</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/player_end.png</normaloff>:/Themes/Oxygen2/resources/player_end.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/cancel.png</normaloff>:/Themes/Oxygen2/resources/cancel.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="ad_ultimate">
+ <property name="text">
+ <string notr="true">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600; color:#ff0000;&quot;&gt;Ad or warning here&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::RichText</enum>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="limitSpeedAsMain">
+ <item>
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed to:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string notr="true">Unlimited</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tab_main">
+ <attribute name="title">
+ <string>Transfer list</string>
+ </attribute>
+ <layout class="QHBoxLayout">
+ <item>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QToolButton" name="putOnTop">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move the selected items to the top</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/putOnTop.png</normaloff>:/Themes/Oxygen2/resources/putOnTop.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="pushUp">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move up the selected items</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/moveUp.png</normaloff>:/Themes/Oxygen2/resources/moveUp.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="pushDown">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move down the selected items</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/moveDown.png</normaloff>:/Themes/Oxygen2/resources/moveDown.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="putOnBottom">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Move the selected items to the bottom</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/putOnBottom.png</normaloff>:/Themes/Oxygen2/resources/putOnBottom.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="add">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Add file/folder</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/add.png</normaloff>:/Themes/Oxygen2/resources/add.png</iconset>
+ </property>
+ <property name="popupMode">
+ <enum>QToolButton::InstantPopup</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="del">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Delete the selected items</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/remove.png</normaloff>:/Themes/Oxygen2/resources/remove.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="searchButton">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Search</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/search.png</normaloff>:/Themes/Oxygen2/resources/search.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="exportTransferList">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Export the transfer list</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/export-transfer-list.png</normaloff>:/Themes/Oxygen2/resources/export-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="importTransferList">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Import the transfer list</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/import-transfer-list.png</normaloff>:/Themes/Oxygen2/resources/import-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTreeView" name="TransferList">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::ExtendedSelection</enum>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayoutSearch">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLineEdit" name="lineEditSearch"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonSearchPrev">
+ <property name="text">
+ <string>Previous</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonSearchNext">
+ <property name="text">
+ <string>Next</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonCloseSearch">
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/remove.png</normaloff>:/Themes/Oxygen2/resources/remove.png</iconset>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_error">
+ <attribute name="title">
+ <string>Error</string>
+ </attribute>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QToolButton" name="exportErrorToTransferList">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Export the errors into transfer list</string>
+ </property>
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/export-transfer-list.png</normaloff>:/Themes/Oxygen2/resources/export-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QTreeWidget" name="errorList">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::NoSelection</enum>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ <column>
+ <property name="text">
+ <string>Source</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Destination</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Error</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_interface">
+ <attribute name="title">
+ <string>Interface</string>
+ </attribute>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QScrollArea" name="optionsTab">
+ <property name="widgetResizable">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget" name="scrollAreaWidgetContents">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>542</width>
+ <height>249</height>
+ </rect>
+ </property>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ <action name="actionAddFile">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/add.png</normaloff>:/Themes/Oxygen2/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add file</string>
+ </property>
+ </action>
+ <action name="actionAddFolder">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/add.png</normaloff>:/Themes/Oxygen2/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToMove">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/add.png</normaloff>:/Themes/Oxygen2/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToMove">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/add.png</normaloff>:/Themes/Oxygen2/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToCopy">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/add.png</normaloff>:/Themes/Oxygen2/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToCopy">
+ <property name="icon">
+ <iconset resource="interfaceResources.qrc">
+ <normaloff>:/Themes/Oxygen2/resources/add.png</normaloff>:/Themes/Oxygen2/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy folder</string>
+ </property>
+ </action>
+ </widget>
+ <resources>
+ <include location="interfaceResources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>moreButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>tabWidget</receiver>
+ <slot>setVisible(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>218</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>149</x>
+ <y>305</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins/Themes/Oxygen2/interfaceInclude.pri b/plugins/Themes/Oxygen2/interfaceInclude.pri
new file mode 100755
index 0000000..354ffb9
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interfaceInclude.pri
@@ -0,0 +1,73 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets xml
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = \
+ $$PWD/ThemesFactory.h \
+ $$PWD/StructEnumDefinition.h \
+ $$PWD/DebugEngineMacro.h \
+ $$PWD/Oxygen2Environment.h \
+ $$PWD/Oxygen2Variable.h \
+ $$PWD/../../../interface/PluginInterface_Themes.h \
+ $$PWD/../../../interface/FacilityInterface.h \
+ $$PWD/../../../interface/OptionInterface.h \
+ $$PWD/../../../cpp11addition.h \
+ $$PWD/TransferModel.h \
+ $$PWD/interface.h \
+ $$PWD/chartarea.h \
+ $$PWD/fileTree.h \
+ $$PWD/ProgressBarDark.h \
+ $$PWD/DarkButton.h \
+ $$PWD/VerticalLabel.h \
+ $$PWD/radialMap/map.h \
+ $$PWD/radialMap/widget.h \
+ $$PWD/radialMap/radialMap.h
+
+SOURCES += \
+ $$PWD/chartarea.cpp \
+ $$PWD/fileTree.cpp \
+ $$PWD/ProgressBarDark.cpp \
+ $$PWD/DarkButton.cpp \
+ $$PWD/VerticalLabel.cpp \
+ $$PWD/radialMap/labels.cpp \
+ $$PWD/radialMap/map.cpp \
+ $$PWD/radialMap/widgetEvents.cpp \
+ $$PWD/radialMap/widget.cpp \
+ $$PWD/ThemesFactory.cpp \
+ $$PWD/TransferModel.cpp \
+ $$PWD/interface.cpp \
+ $$PWD/../../../cpp11addition.cpp \
+ $$PWD/../../../cpp11additionstringtointcpp.cpp
+TARGET = $$qtLibraryTarget(interface)
+TRANSLATIONS += \
+ $$PWD/Languages/ar/translation.ts \
+ $$PWD/Languages/de/translation.ts \
+ $$PWD/Languages/el/translation.ts \
+ $$PWD/Languages/en/translation.ts \
+ $$PWD/Languages/es/translation.ts \
+ $$PWD/Languages/fr/translation.ts \
+ $$PWD/Languages/hi/translation.ts \
+ $$PWD/Languages/hu/translation.ts \
+ $$PWD/Languages/id/translation.ts \
+ $$PWD/Languages/it/translation.ts \
+ $$PWD/Languages/ja/translation.ts \
+ $$PWD/Languages/ko/translation.ts \
+ $$PWD/Languages/nl/translation.ts \
+ $$PWD/Languages/no/translation.ts \
+ $$PWD/Languages/pl/translation.ts \
+ $$PWD/Languages/pt/translation.ts \
+ $$PWD/Languages/ru/translation.ts \
+ $$PWD/Languages/th/translation.ts \
+ $$PWD/Languages/tr/translation.ts \
+ $$PWD/Languages/zh/translation.ts
+
+FORMS += \
+ $$PWD/interface.ui \
+ $$PWD/themesOptions.ui
+
+win32: {
+QT += winextras
+}
diff --git a/plugins/Themes/Oxygen2/interfaceResources.qrc b/plugins/Themes/Oxygen2/interfaceResources.qrc
new file mode 100755
index 0000000..0a6e539
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interfaceResources.qrc
@@ -0,0 +1,36 @@
+<RCC>
+ <qresource prefix="/Themes/Oxygen2">
+ <file>resources/add.png</file>
+ <file>resources/cancel.png</file>
+ <file>resources/main.png</file>
+ <file>resources/moveDown.png</file>
+ <file>resources/darkmoveDown.png</file>
+ <file>resources/moveUp.png</file>
+ <file>resources/darkmoveUp.png</file>
+ <file>resources/player_end.png</file>
+ <file>resources/player_pause.png</file>
+ <file>resources/player_play.png</file>
+ <file>resources/darkplayer_end.png</file>
+ <file>resources/darkplayer_pause.png</file>
+ <file>resources/darkplayer_play.png</file>
+ <file>resources/putOnBottom.png</file>
+ <file>resources/putOnTop.png</file>
+ <file>resources/remove.png</file>
+ <file>resources/search.png</file>
+ <file>resources/export-transfer-list.png</file>
+ <file>resources/import-transfer-list.png</file>
+ <file>resources/SystemTrayIcon/add.png</file>
+ <file>resources/SystemTrayIcon/exit.png</file>
+ <file>resources/SystemTrayIcon/informations.png</file>
+ <file>resources/SystemTrayIcon/options.png</file>
+ <file>resources/cancelDarkE.png</file>
+ <file>resources/cancelDarkD.png</file>
+ <file>resources/progressBarout.png</file>
+ <file>resources/progressBarin.png</file>
+ <file>resources/darkButton.png</file>
+ <file>resources/darkButtonPushed.png</file>
+ <file>resources/darkButtonOver.png</file>
+ <file>resources/click.opus</file>
+ <file>resources/over.opus</file>
+ </qresource>
+</RCC>
diff --git a/plugins/Themes/Oxygen2/interfaceResources_unix.qrc b/plugins/Themes/Oxygen2/interfaceResources_unix.qrc
new file mode 100755
index 0000000..1dcca48
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interfaceResources_unix.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/Themes/Oxygen2">
+ <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Unix.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins/Themes/Oxygen2/interfaceResources_windows.qrc b/plugins/Themes/Oxygen2/interfaceResources_windows.qrc
new file mode 100755
index 0000000..b9915d0
--- /dev/null
+++ b/plugins/Themes/Oxygen2/interfaceResources_windows.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/Themes/Oxygen2">
+ <file>resources/SystemTrayIcon/systray_Caught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Windows.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins/Themes/Oxygen2/options.ui b/plugins/Themes/Oxygen2/options.ui
new file mode 100755
index 0000000..4149e33
--- /dev/null
+++ b/plugins/Themes/Oxygen2/options.ui
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>options</class>
+ <widget class="QWidget" name="options">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>515</width>
+ <height>251</height>
+ </rect>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="checkBoxShowSpeed"/>
+ </item>
+ <item row="3" column="2">
+ <widget class="QFrame" name="frameProgressionColor">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="progressColorWrite">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRead">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRemaining">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QLabel" name="labelSpeedWithProgressBar">
+ <property name="text">
+ <string>Speed with progress bar</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QComboBox" name="comboBox_copyEnd">
+ <item>
+ <property name="text">
+ <string notr="true">Don't close if errors are found</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Never close</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Always close</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="labelShowSpeedAsMain">
+ <property name="text">
+ <string>Show speed as main information</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelProgressionColor">
+ <property name="text">
+ <string>Progression color</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0">
+ <widget class="QCheckBox" name="checkBox_limitSpeed">
+ <property name="text">
+ <string>Limit copy speed at:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="QSpinBox" name="limitSpeed">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> KB/s</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QCheckBox" name="showDualProgression"/>
+ </item>
+ <item row="4" column="1">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>122</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Show dual progression</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed at:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>At the end of the copy: </string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="speedWithProgressBar"/>
+ </item>
+ <item row="6" column="2">
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string notr="true">Unlimited</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>checkBox_limitSpeed</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>limitSpeed</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>109</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>199</x>
+ <y>144</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins/Themes/Oxygen2/plugin.json b/plugins/Themes/Oxygen2/plugin.json
new file mode 100755
index 0000000..9e26dfe
--- /dev/null
+++ b/plugins/Themes/Oxygen2/plugin.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/plugins/Themes/Oxygen2/radialMap/labels.cpp b/plugins/Themes/Oxygen2/radialMap/labels.cpp
new file mode 100755
index 0000000..c5ff770
--- /dev/null
+++ b/plugins/Themes/Oxygen2/radialMap/labels.cpp
@@ -0,0 +1,338 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#include <QFont>
+#include <QFontMetrics>
+#include <QPainter>
+#include <QVector>
+
+#include "../fileTree.h"
+#include "radialMap.h"
+#include "widget.h"
+#include <math.h>
+#include <qmath.h>
+
+namespace RadialMap
+{
+class Label
+{
+public:
+ Label(const RadialMap::Segment *s, int l) : segment(s), level(l), angle(segment->start() + (segment->length() / 2)) { }
+
+ bool tooClose(const int otherAngle) const {
+ return (angle > otherAngle - LABEL_ANGLE_MARGIN && angle < otherAngle + LABEL_ANGLE_MARGIN);
+ }
+
+ const RadialMap::Segment *segment;
+ const unsigned int level;
+ const int angle;
+
+ int targetX, targetY, middleX, startY, startX;
+ int textX, textY, tw, th;
+
+ QString qs;
+};
+
+void RadialMap::Widget::paintExplodedLabels(QPainter &paint) const
+{
+ //we are a friend of RadialMap::Map
+
+ QVector<Label*> list;
+ unsigned int startLevel = 0;
+
+
+ //1. Create list of labels sorted in the order they will be rendered
+
+ if (m_focus && m_focus->file() != m_tree) { //separate behavior for selected vs unselected segments
+ //don't bother with files
+ if (m_focus && m_focus->file() && !m_focus->file()->isFolder()) {
+ return;
+ }
+
+ //find the range of levels we will be potentially drawing labels for
+ //startLevel is the level above whatever m_focus is in
+ for (const Folder *p = (const Folder*)m_focus->file(); p != m_tree; ++startLevel) {
+ p = p->parent();
+ }
+
+ //range=2 means 2 levels to draw labels for
+
+ const uint start = m_focus->start();
+ const uint end = m_focus->end(); //boundary angles
+ const uint minAngle = int(m_focus->length() * LABEL_MIN_ANGLE_FACTOR);
+
+
+ //**** Levels should be on a scale starting with 0
+ //**** range is a useless parameter
+ //**** keep a topblock var which is the lowestLevel OR startLevel for indentation purposes
+ for (unsigned int i = startLevel; i <= m_map.m_visibleDepth; ++i) {
+ for (const Segment *segment : m_map.m_signature[i]) {
+ if (segment->start() >= start && segment->end() <= end) {
+ if (segment->length() > minAngle) {
+ list.append(new Label(segment, i));
+ }
+ }
+ }
+ }
+ } else {
+ for (Segment *segment : *m_map.m_signature) {
+ if (segment->length() > 288) {
+ list.append(new Label(segment, 0));
+
+ }
+ }
+ }
+
+ std::sort(list.begin(), list.end(), [](Label *item1, Label *item2) {
+ //you add 1440 to work round the fact that later you want the circle split vertically
+ //and as it is you start at 3 o' clock. It's to do with rightPrevY, stops annoying bug
+
+ int angle1 = (item1)->angle + 1440;
+ int angle2 = (item2)->angle + 1440;
+
+ // Also sort by level
+ if (angle1 == angle2) {
+ return (item1->level > item2->level);
+ }
+
+ if (angle1 > 5760) angle1 -= 5760;
+ if (angle2 > 5760) angle2 -= 5760;
+
+ return (angle1 < angle2);
+
+ });
+
+ //2. Check to see if any adjacent labels are too close together
+ // if so, remove it (the least significant labels, since we sort by level too).
+
+ int pos = 0;
+ while (pos < list.size() - 1) {
+ if (list[pos]->tooClose(list[pos+1]->angle)) {
+ delete list.takeAt(pos+1);
+ } else {
+ ++pos;
+ }
+ }
+
+ //used in next two steps
+ bool varySizes;
+ //**** should perhaps use doubles
+ int *sizes = new int [ m_map.m_visibleDepth + 1 ]; //**** make sizes an array of floats I think instead (or doubles)
+
+ // If the minimum is larger than the default it fucks up further down
+ if (paint.font().pointSize() < 0 ||
+ paint.font().pointSize() < minFontPitch) {
+ QFont font = paint.font();
+ font.setPointSize(minFontPitch);
+ paint.setFont(font);
+ }
+
+ QVector<Label*>::iterator it;
+
+ do {
+ //3. Calculate font sizes
+
+ {
+ //determine current range of levels to draw for
+ uint range = 0;
+
+ for (Label *label : list) {
+ range = qMax(range, label->level);
+
+ //**** better way would just be to assign if nothing is range
+ }
+
+ range -= startLevel; //range 0 means 1 level of labels
+
+ varySizes = range != 0;
+
+ if (varySizes) {
+ //create an array of font sizes for various levels
+ //will exceed normal font pitch automatically if necessary, but not minPitch
+ //**** this needs to be checked lots
+
+ //**** what if this is negative (min size gtr than default size)
+ uint step = (paint.font().pointSize() - minFontPitch) / range;
+ if (step == 0) {
+ step = 1;
+ }
+
+ for (uint x = range + startLevel, y = minFontPitch; x >= startLevel; y += step, --x) {
+ sizes[x] = y;
+ }
+ }
+ }
+
+ //4. determine label co-ordinates
+
+
+ const int preSpacer = int(m_map.m_ringBreadth * 0.5) + m_map.m_innerRadius;
+ const int fullStrutLength = (m_map.width() - m_map.MAP_2MARGIN) / 2 + LABEL_MAP_SPACER; //full length of a strut from map center
+
+ int prevLeftY = 0;
+ int prevRightY = height();
+
+ QFont font;
+
+ for (it = list.begin(); it != list.end(); ++it) {
+ Label *label = *it;
+ //** bear in mind that text is drawn with QPoint param as BOTTOM left corner of text box
+ QString string = label->segment->file()->displayName();
+ if (varySizes) {
+ font.setPointSize(sizes[label->level]);
+ }
+ QFontMetrics fontMetrics(font);
+ #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
+ const int minTextWidth = fontMetrics.width(QStringLiteral("M...")) + LABEL_TEXT_HMARGIN; // Fully elided string
+ #else
+ const int minTextWidth = fontMetrics.horizontalAdvance(QStringLiteral("M...")) + LABEL_TEXT_HMARGIN; // Fully elided string
+ #endif
+
+ const int fontHeight = fontMetrics.height() + LABEL_TEXT_VMARGIN; //used to ensure label texts don't overlap
+ const int lineSpacing = fontHeight / 4;
+
+ const bool rightSide = (label->angle < 1440 || label->angle > 4320);
+
+ double sinra, cosra;
+ const double ra = M_PI/2880 * label->angle; //convert to radians
+ sinra = qSin(ra);
+ cosra = qCos(ra);
+
+ const int spacer = preSpacer + m_map.m_ringBreadth * label->level;
+
+ const int centerX = m_map.width() / 2 + m_offset.x(); //centre relative to canvas
+ const int centerY = m_map.height() / 2 + m_offset.y();
+ int targetX = centerX + cosra * spacer;
+ int targetY = centerY - sinra * spacer;
+ int startX = targetX + cosra * (fullStrutLength - spacer + m_map.m_ringBreadth / 2);
+ int startY = targetY - sinra * (fullStrutLength - spacer);
+
+ if (rightSide) { //righthand side, going upwards
+ if (startY > prevRightY /*- fmh*/) { //then it is too low, needs to be drawn higher
+ startY = prevRightY /*- fmh*/;
+ }
+ } else {//lefthand side, going downwards
+ if (startY < prevLeftY/* + fmh*/) { //then we're too high, need to be drawn lower
+ startY = prevLeftY /*+ fmh*/;
+ }
+ }
+
+ int middleX = targetX - (startY - targetY) / tan(ra);
+ int textY = startY + lineSpacing;
+
+ int textX;
+ #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
+ const int textWidth = fontMetrics.width(string) + LABEL_TEXT_HMARGIN;
+ #else
+ const int textWidth = fontMetrics.horizontalAdvance(string) + LABEL_TEXT_HMARGIN;
+ #endif
+ if (rightSide) {
+ if (startX + minTextWidth > width() || textY < fontHeight || middleX < targetX) {
+ //skip this strut
+ //**** don't duplicate this code
+ list.erase(it); //will delete the label and set it to list.current() which _should_ be the next ptr
+ break;
+ }
+
+ prevRightY = textY - fontHeight - lineSpacing; //must be after above's "continue"
+
+ if (m_offset.x() + m_map.width() + textWidth < width()) {
+ startX = m_offset.x() + m_map.width();
+ } else {
+ startX = qMax(width() - textWidth, startX);
+ string = fontMetrics.elidedText(string, Qt::ElideMiddle, width() - startX);
+ }
+
+ textX = startX + LABEL_TEXT_HMARGIN;
+ } else { // left side
+ if (startX - minTextWidth < 0 || textY > height() || middleX > targetX) {
+ //skip this strut
+ list.erase(it); //will delete the label and set it to list.current() which _should_ be the next ptr
+ break;
+ }
+
+ prevLeftY = textY + fontHeight - lineSpacing;
+
+ if (m_offset.x() - textWidth > 0) {
+ startX = m_offset.x();
+ textX = startX - textWidth - LABEL_TEXT_HMARGIN;
+ } else {
+ textX = 0;
+ string = fontMetrics.elidedText(string, Qt::ElideMiddle, startX);
+ #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
+ startX = fontMetrics.width(string) + LABEL_TEXT_HMARGIN;
+ #else
+ startX = fontMetrics.horizontalAdvance(string) + LABEL_TEXT_HMARGIN;
+ #endif
+ }
+ }
+
+ label->targetX = targetX;
+ label->targetY = targetY;
+ label->middleX = middleX;
+ label->startY = startY;
+ label->startX = startX;
+ label->textX = textX;
+ label->textY = textY;
+ label->qs = string;
+ }
+
+ //if an element is deleted at this stage, we need to do this whole
+ //iteration again, thus the following loop
+ //**** in rare case that deleted label was last label in top level
+ // and last in labelList too, this will not work as expected (not critical)
+
+ } while (it != list.end());
+
+
+ //5. Render labels
+
+ QFont font;
+ for (Label *label : list) {
+ if (varySizes) {
+ //**** how much overhead in making new QFont each time?
+ // (implicate sharing remember)
+ font.setPointSize(sizes[label->level]);
+ paint.setFont(font);
+ }
+
+ paint.setPen(QPen(QColor(0,0,0),2));
+ paint.drawLine(label->targetX, label->targetY, label->middleX, label->startY);
+ paint.drawLine(label->middleX, label->startY, label->startX, label->startY);
+
+ paint.setPen(QPen(QColor(255,255,255),1));
+ paint.drawLine(label->targetX, label->targetY, label->middleX, label->startY);
+ paint.drawLine(label->middleX, label->startY, label->startX, label->startY);
+
+ paint.setPen(QPen(QColor(0,0,0),1));
+ paint.drawText(label->textX-1, label->textY-1, label->qs);
+ paint.drawText(label->textX+1, label->textY-1, label->qs);
+ paint.drawText(label->textX+1, label->textY+1, label->qs);
+ paint.drawText(label->textX-1, label->textY+1, label->qs);
+ paint.setPen(QPen(QColor(255,255,255),1));
+ paint.drawText(label->textX, label->textY, label->qs);
+ }
+
+ qDeleteAll(list);
+ delete [] sizes;
+}
+}
+
diff --git a/plugins/Themes/Oxygen2/radialMap/map.cpp b/plugins/Themes/Oxygen2/radialMap/map.cpp
new file mode 100755
index 0000000..a7306ac
--- /dev/null
+++ b/plugins/Themes/Oxygen2/radialMap/map.cpp
@@ -0,0 +1,421 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#include <QApplication> //make()
+#include <QImage> //make() & paint()
+#include <QFont> //ctor
+#include <QFontMetrics> //ctor
+#include <QPainter>
+#include <QBrush>
+
+#include "radialMap.h" // defines
+#include "../interface.h"
+#include "../fileTree.h"
+#include "widget.h"
+#include <cmath>
+#include <qmath.h>
+
+RadialMap::Map::Map()
+ : m_signature(nullptr)
+ , m_visibleDepth(DEFAULT_RING_DEPTH)
+ , m_ringBreadth(MIN_RING_BREADTH)
+ , m_innerRadius(0)
+ , defaultRingDepth(4)
+{
+
+ //FIXME this is all broken. No longer is a maximum depth!
+ const int fmh = QFontMetrics(QFont()).height();
+ const int fmhD4 = fmh / 4;
+ MAP_2MARGIN = 2 * (fmh - (fmhD4 - LABEL_MAP_SPACER)); //margin is dependent on fitting in labels at top and bottom
+
+ m_minSize=27300;
+}
+
+RadialMap::Map::~Map()
+{
+ delete [] m_signature;
+}
+
+void RadialMap::Map::invalidate()
+{
+ delete [] m_signature;
+ m_signature = nullptr;
+
+ m_visibleDepth = defaultRingDepth;
+}
+
+void RadialMap::Map::make(const Folder *tree, bool refresh)
+{
+ if(height()<1)
+ return;
+ //slow operation so set the wait cursor
+ QApplication::setOverrideCursor(Qt::WaitCursor);
+
+ //build a signature of visible components
+ {
+ //**** REMOVE NEED FOR the +1 with MAX_RING_DEPTH uses
+ //**** add some angle bounds checking (possibly in Segment ctor? can I delete in a ctor?)
+ //**** this is a mess
+
+ delete [] m_signature;
+ m_signature = new std::vector<Segment*>[m_visibleDepth + 1];
+
+ m_root = tree;
+
+ if (!refresh) {
+ quint64 varSize=tree->size();
+ quint64 varHeight=height();
+ quint64 varA=(varSize * 3);
+ quint64 varB=(PI * varHeight - MAP_2MARGIN);
+ m_minSize = varA / varB;
+ findVisibleDepth(tree);
+ }
+
+ setRingBreadth();
+
+ // Calculate ring size limits
+ m_limits.resize(m_visibleDepth + 1);
+ const double size = m_root->size();
+ const double pi2B = M_PI * 4 * m_ringBreadth;
+ for (uint depth = 0; depth <= m_visibleDepth; ++depth) {
+ m_limits[depth] = uint(size / double(pi2B * (depth + 1))); //min is angle that gives 3px outer diameter for that depth
+ }
+
+ build(tree);
+ }
+
+ //colour the segments
+ colorise();
+
+ m_centerText = tree->humanReadableSize()+"\n"+QObject::tr("%1 files").arg(Themes::simplifiedBigNum(tree->children()));
+
+ //paint the pixmap
+ paint();
+
+ QApplication::restoreOverrideCursor();
+}
+
+void RadialMap::Map::setRingBreadth()
+{
+ //FIXME called too many times on creation
+
+ m_ringBreadth = (height() - MAP_2MARGIN) / (2 * m_visibleDepth + 4);
+ m_ringBreadth = qBound(MIN_RING_BREADTH, m_ringBreadth, MAX_RING_BREADTH);
+}
+
+void RadialMap::Map::findVisibleDepth(const Folder *dir, uint currentDepth)
+{
+
+ //**** because I don't use the same minimumSize criteria as in the visual function
+ // this can lead to incorrect visual representation
+ //**** BUT, you can't set those limits until you know m_depth!
+
+ //**** also this function doesn't check to see if anything is actually visible
+ // it just assumes that when it reaches a new level everything in it is visible
+ // automatically. This isn't right especially as there might be no files in the
+ // dir provided to this function!
+
+ static uint stopDepth = 0;
+
+ if (dir == m_root) {
+ stopDepth = m_visibleDepth;
+ m_visibleDepth = 0;
+ }
+
+ if (m_visibleDepth < currentDepth) m_visibleDepth = currentDepth;
+ if (m_visibleDepth >= stopDepth) return;
+
+ for(const auto& n : dir->folders)
+ {
+ Folder * folder=n.second;
+ if (folder->size() > m_minSize) {
+ findVisibleDepth(folder, currentDepth + 1); //if no files greater than min size the depth is still recorded
+ }
+ }
+}
+
+//**** segments currently overlap at edges (i.e. end of first is start of next)
+bool RadialMap::Map::build(const Folder * const dir, const uint depth, uint a_start, const uint a_end)
+{
+ //first iteration: dir == m_root
+
+ if (dir->children() == 0) //we do fileCount rather than size to avoid chance of divide by zero later
+ return false;
+
+ uint64_t hiddenSize = 0;
+ uint hiddenFileCount = 0;
+
+ for(const auto& n : dir->folders)
+ {
+ Folder * folder=n.second;
+ if (folder->size() < m_limits[depth] * 6) { // limit is half a degree? we want at least 3 degrees
+ hiddenSize += folder->size();
+ hiddenFileCount += folder->children(); //need to add one to count the dir as well
+ ++hiddenFileCount;
+ continue;
+ }
+ unsigned int a_len = (unsigned int)(5760 * ((double)folder->size() / (double)m_root->size()));
+ Segment *s = new Segment(folder, a_start, a_len);
+ m_signature[depth].push_back(s);
+ if (depth != m_visibleDepth) {
+ //recurse
+ s->m_hasHiddenChildren = build(folder, depth + 1, a_start, a_start + a_len);
+ } else {
+ s->m_hasHiddenChildren = true;
+ }
+ a_start += a_len; //**** should we add 1?
+ }
+ for (File *file : dir->onlyFiles) {
+ if (file->size() < m_limits[depth] * 6) { // limit is half a degree? we want at least 3 degrees
+ hiddenSize += file->size();
+ ++hiddenFileCount;
+ continue;
+ }
+ unsigned int a_len = (unsigned int)(5760 * ((double)file->size() / (double)m_root->size()));
+ Segment *s = new Segment(file, a_start, a_len);
+ m_signature[depth].push_back(s);
+ a_start += a_len; //**** should we add 1?
+ }
+
+ if (hiddenFileCount == dir->children()) {
+ return true;
+ }
+
+ if (depth == 0 && hiddenSize >= m_limits[depth] && hiddenFileCount > 0) {
+ //append a segment for unrepresented space - a "fake" segment
+ const QString s = QObject::tr("%1 file, with an average size of %2")
+ .arg(hiddenFileCount)
+ .arg(QString::fromStdString(File::facilityEngine->sizeToString(hiddenSize/hiddenFileCount)));
+
+
+ (m_signature + depth)->push_back(new Segment(new File(s.toUtf8().constData(), hiddenSize), a_start, a_end - a_start, true));
+ }
+
+ return false;
+}
+
+bool RadialMap::Map::resize(const QRect &rect)
+{
+ //there's a MAP_2MARGIN border
+
+ const int mw=width();
+ const int mh=height();
+ const int cw=rect.width();
+ const int ch=rect.height();
+
+ if (cw < mw || ch < mh || (cw > mw && ch > mh))
+ {
+ uint size = ((cw < ch) ? cw : ch) - MAP_2MARGIN;
+
+ //this also causes uneven sizes to always resize when resizing but map is small in that dimension
+ //size -= size % 2; //even sizes mean less staggered non-antialiased resizing
+
+ {
+ const uint minSize = MIN_RING_BREADTH * 2 * (m_visibleDepth + 2);
+
+ if (size < minSize)
+ size = minSize;
+
+ //this QRect is used by paint()
+ m_rect.setRect(0,0,size,size);
+ }
+ m_pixmap = QPixmap(m_rect.size());
+
+ //resize the pixmap
+ size += MAP_2MARGIN;
+
+ if (m_signature != nullptr)
+ {
+ setRingBreadth();
+ paint();
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+void RadialMap::Map::colorise()
+{
+ if (!m_signature || m_signature->empty()) {
+ //std::cerr << "no signature yet" << std::endl;
+ return;
+ }
+
+ QColor cp, cb;
+ double darkness = 1;
+ double contrast = (double)94 / (double)100;
+ int h, s1, s2, v1, v2;
+
+ for (uint i = 0; i <= m_visibleDepth; ++i, darkness += 0.04) {
+ for (Segment *segment : m_signature[i]) {
+ h = int(segment->start() / 16);
+ s1 = 160;
+ v1 = (int)(255.0 / darkness); //doing this more often than once seems daft!
+
+ v2 = v1 - int(contrast * v1);
+ s2 = s1 + int(contrast * (255 - s1));
+
+ if (s1 < 80) s1 = 80; //can fall too low and makes contrast between the files hard to discern
+
+ if (segment->isFake()) { //multi-file
+ cb.setHsv(h, s2, (v2 < 90) ? 90 : v2); //too dark if < 100
+ cp.setHsv(h, 17, v1);
+ } else if (!segment->file()->isFolder()) { //file
+ cb.setHsv(h, 17, v1);
+ cp.setHsv(h, 17, v2);
+ } else { //folder
+ cb.setHsv(h, s1, v1); //v was 225
+ cp.setHsv(h, s2, v2); //v was 225 - delta
+ }
+
+ segment->setPalette(cp, cb);
+ }
+ }
+}
+
+void RadialMap::Map::paint(bool antialias)
+{
+ QPainter paint;
+ QRect rect = m_rect;
+
+ rect.adjust(5, 5, -5, -5);
+ m_pixmap.fill(Qt::transparent);
+
+ //m_rect.moveRight(1); // Uncommenting this breaks repainting when recreating map from cache
+
+
+ //**** best option you can think of is to make the circles slightly less perfect,
+ // ** i.e. slightly eliptic when resizing inbetween
+
+ if (m_pixmap.isNull())
+ return;
+
+ if (!paint.begin(&m_pixmap)) {
+ //qWarning() << "Filelight::RadialMap Failed to initialize painting, returning...";
+ return;
+ }
+
+ if (antialias) {
+ paint.translate(0.7, 0.7);
+ paint.setRenderHint(QPainter::Antialiasing);
+ }
+
+ int step = m_ringBreadth;
+ int excess = -1;
+
+ //do intelligent distribution of excess to prevent nasty resizing
+ if (m_ringBreadth != MAX_RING_BREADTH && m_ringBreadth != MIN_RING_BREADTH) {
+ excess = rect.width() % m_ringBreadth;
+ ++step;
+ }
+
+ for (int x = m_visibleDepth; x >= 0; --x)
+ {
+ int width = rect.width() / 2;
+ //clever geometric trick to find largest angle that will give biggest arrow head
+ uint a_max = int(acos((double)width / double((width + 5))) * (180*16 / M_PI));
+
+ for (Segment *segment : m_signature[x]) {
+ //draw the pie segments, most of this code is concerned with drawing the little
+ //arrows on the ends of segments when they have hidden files
+
+ paint.setPen(segment->pen());
+
+ if (segment->hasHiddenChildren())
+ {
+ //draw arrow head to indicate undisplayed files/directories
+ QPolygon pts(3);
+ QPoint pos, cpos = rect.center();
+ uint a[3] = { segment->start(), segment->length(), 0 };
+
+ a[2] = a[0] + (a[1] / 2); //assign to halfway between
+ if (a[1] > a_max)
+ {
+ a[1] = a_max;
+ a[0] = a[2] - a_max / 2;
+ }
+
+ a[1] += a[0];
+
+ for (int i = 0, radius = width; i < 3; ++i)
+ {
+ double ra = M_PI/(180*16) * a[i], sinra, cosra;
+
+ if (i == 2)
+ radius += 5;
+ sinra = qSin(ra);
+ cosra = qCos(ra);
+ pos.rx() = cpos.x() + static_cast<int>(cosra * radius);
+ pos.ry() = cpos.y() - static_cast<int>(sinra * radius);
+ pts.setPoint(i, pos);
+ }
+
+ paint.setBrush(segment->pen());
+ paint.drawPolygon(pts);
+ }
+
+ paint.setPen(QColor(120,120,120));
+ paint.setBrush(segment->brush());
+ paint.drawPie(rect, segment->start(), segment->length());
+
+ if (segment->hasHiddenChildren())
+ {
+ //**** code is bloated!
+ paint.save();
+ QPen pen = paint.pen();
+ int width = 2;
+ pen.setWidth(width);
+ paint.setPen(pen);
+ QRect rect2 = rect;
+ width /= 2;
+ rect2.adjust(width, width, -width, -width);
+ paint.drawArc(rect2, segment->start(), segment->length());
+ paint.restore();
+ }
+ }
+
+ if (excess >= 0) { //excess allows us to resize more smoothly (still crud tho)
+ if (excess < 2) //only decrease rect by more if even number of excesses left
+ --step;
+ excess -= 2;
+ }
+
+ rect.adjust(step, step, -step, -step);
+ }
+
+ // if(excess > 0) rect.addCoords(excess, excess, 0, 0); //ugly
+
+ paint.setPen(QColor(120,120,120));
+ paint.setBrush(QColor(255,255,255));
+ paint.drawEllipse(rect);
+ if(width()>200)
+ {
+ paint.setPen(QColor(0,0,0));
+ paint.drawText(rect, Qt::AlignCenter, m_centerText);
+ }
+
+ m_innerRadius = rect.width() / 2; //rect.width should be multiple of 2
+
+ paint.end();
+}
+
diff --git a/plugins/Themes/Oxygen2/radialMap/map.h b/plugins/Themes/Oxygen2/radialMap/map.h
new file mode 100755
index 0000000..a78e56d
--- /dev/null
+++ b/plugins/Themes/Oxygen2/radialMap/map.h
@@ -0,0 +1,85 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#ifndef RadialMapMAP_H
+#define RadialMapMAP_H
+
+#include "../fileTree.h"
+
+#include <QPixmap>
+#include <QRect>
+#include <QString>
+
+namespace RadialMap {
+class Segment;
+
+class Map
+{
+public:
+ explicit Map();
+ ~Map();
+
+ void make(const Folder *, bool = false);
+ bool resize(const QRect&);
+
+ bool isNull() const {
+ return (m_signature == nullptr);
+ }
+ void invalidate();
+
+ int height() const {
+ return m_rect.height();
+ }
+ int width() const {
+ return m_rect.width();
+ }
+ QPixmap pixmap() const {
+ return m_pixmap;
+ }
+
+
+ friend class Widget;
+
+private:
+ void paint(bool antialias = true);
+ void colorise();
+ void setRingBreadth();
+ void findVisibleDepth(const Folder *dir, uint currentDepth = 0);
+ bool build(const Folder* const dir, const uint depth =0, uint a_start =0, const uint a_end =5760);
+
+ std::vector<Segment*> *m_signature;
+
+ const Folder *m_root;
+ uint m_minSize;
+ std::vector<uint64_t> m_limits;
+ QRect m_rect;
+ uint m_visibleDepth; ///visible level depth of system
+ QPixmap m_pixmap;
+ int m_ringBreadth;
+ uint m_innerRadius; ///radius of inner circle
+ QString m_centerText;
+
+ uint MAP_2MARGIN;
+ int defaultRingDepth;
+};
+}
+
+#endif
diff --git a/plugins/Themes/Oxygen2/radialMap/radialMap.h b/plugins/Themes/Oxygen2/radialMap/radialMap.h
new file mode 100755
index 0000000..7935010
--- /dev/null
+++ b/plugins/Themes/Oxygen2/radialMap/radialMap.h
@@ -0,0 +1,109 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#ifndef RadialMapRADIALMAP_H
+#define RadialMapRADIALMAP_H
+
+#include <QColor>
+
+class File;
+
+namespace RadialMap
+{
+class Segment //all angles are in 16ths of degrees
+{
+public:
+ Segment(const File *f, uint s, uint l, bool isFake = false)
+ : m_angleStart(s)
+ , m_angleSegment(l)
+ , m_file(f)
+ , m_hasHiddenChildren(false)
+ , m_fake(isFake) {}
+ ~Segment();
+
+ uint start() const {
+ return m_angleStart;
+ }
+ uint length() const {
+ return m_angleSegment;
+ }
+ uint end() const {
+ return m_angleStart + m_angleSegment;
+ }
+ const File *file() const {
+ return m_file;
+ }
+ const QColor& pen() const {
+ return m_pen;
+ }
+ const QColor& brush() const {
+ return m_brush;
+ }
+
+ bool isFake() const {
+ return m_fake;
+ }
+ bool hasHiddenChildren() const {
+ return m_hasHiddenChildren;
+ }
+
+ bool intersects(uint a) const {
+ return ((a >= start()) && (a < end()));
+ }
+
+ friend class Map;
+ friend class Builder;
+
+private:
+ void setPalette(const QColor &p, const QColor &b) {
+ m_pen = p;
+ m_brush = b;
+ }
+
+ const uint m_angleStart, m_angleSegment;
+ const File* const m_file;
+ QColor m_pen, m_brush;
+ bool m_hasHiddenChildren;
+ const bool m_fake;
+};
+}
+
+
+#ifndef PI
+#define PI 3.141592653589793
+#endif
+#ifndef M_PI
+#define M_PI 3.14159265358979323846264338327
+#endif
+
+#define MIN_RING_BREADTH 7
+#define MAX_RING_BREADTH 60
+#define DEFAULT_RING_DEPTH 4 //first level = 0
+#define MIN_RING_DEPTH 0
+
+#define LABEL_MAP_SPACER 7
+#define LABEL_TEXT_HMARGIN 5
+#define LABEL_TEXT_VMARGIN 0
+#define LABEL_ANGLE_MARGIN 32
+#define LABEL_MIN_ANGLE_FACTOR 0.05
+#define LABEL_MAX_CHARS 30
+
+#endif
diff --git a/plugins/Themes/Oxygen2/radialMap/widget.cpp b/plugins/Themes/Oxygen2/radialMap/widget.cpp
new file mode 100755
index 0000000..9baf6db
--- /dev/null
+++ b/plugins/Themes/Oxygen2/radialMap/widget.cpp
@@ -0,0 +1,211 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#include "widget.h"
+
+#include "../fileTree.h"
+#include "radialMap.h" //constants
+#include "map.h"
+
+#include <QUrl>
+
+#include <QApplication> //sendEvent
+#include <QBitmap> //ctor - finding cursor size
+#include <QCursor> //slotPostMouseEvent()
+#include <QTimer> //member
+#include <QWidget>
+
+
+RadialMap::Widget::Widget(const bool dark, QWidget *parent)
+ : QWidget(parent)
+ , m_tree(nullptr)
+ , m_focus(nullptr)
+ , m_map()
+ , m_rootSegment(nullptr) //TODO we don't delete it, *shrug*
+ , m_toBeDeleted(nullptr)
+ , minFontPitch(QFont().pointSize() - 3)
+{
+ setMaximumSize(16777215, 16777215);
+ setMinimumSize(150, 100);
+
+ connect(this, &Widget::folderCreated, this, &Widget::sendFakeMouseEvent);
+ connect(&m_timer, &QTimer::timeout, this, &Widget::resizeTimeout);
+ m_updateCache.start(100);
+ connect(&m_updateCache, &QTimer::timeout, this, &Widget::updateCache);
+ m_tooltip.setFrameShape(QFrame::StyledPanel);
+ m_tooltip.setWindowFlags(Qt::ToolTip | Qt::WindowTransparentForInput);
+ this->dark=dark;
+ newData=false;
+}
+
+RadialMap::Widget::~Widget()
+{
+ if(m_rootSegment!=nullptr)
+ delete m_rootSegment;
+}
+
+
+QString RadialMap::Widget::path() const
+{
+ return m_tree->displayPath();
+}
+
+QUrl RadialMap::Widget::url(File const * const file) const
+{
+ return file ? file->url() : m_tree->url();
+}
+
+void RadialMap::Widget::invalidate()
+{
+ newData=true;
+ if (isValid())
+ {
+ //**** have to check that only way to invalidate is this function frankly
+ //**** otherwise you may get bugs..
+
+ //disable mouse tracking
+ setMouseTracking(false);
+
+ // Get this before reseting m_tree below
+ QUrl invalidatedUrl(url());
+
+ //ensure this class won't think we have a map still
+ m_tree = nullptr;
+ m_focus = nullptr;
+
+ delete m_rootSegment;
+ m_rootSegment = nullptr;
+
+ //FIXME move this disablement thing no?
+ // it is confusing in other areas, like the whole createFromCache() thing
+ m_map.invalidate();
+ update();
+
+ //tell rest of Filelight
+ emit invalidated(invalidatedUrl);
+ }
+}
+
+void
+RadialMap::Widget::create(const Folder *tree)
+{
+ newData=true;
+ //it is not the responsibility of create() to invalidate first
+ //skip invalidation at your own risk
+
+ //FIXME make it the responsibility of create to invalidate first
+
+ if (tree)
+ {
+ m_focus = nullptr;
+ //generate the filemap image
+ m_map.make(tree);
+
+ //this is the inner circle in the center
+ if(m_rootSegment!=nullptr)
+ delete m_rootSegment;
+ m_rootSegment = new Segment(tree, 0, 16*360);
+
+ setMouseTracking(true);
+ }
+
+ m_tree = tree;
+
+ //tell rest of Filelight
+ emit folderCreated(tree);
+}
+
+void
+RadialMap::Widget::createFromCache(const Folder *tree)
+{
+ //no scan was necessary, use cached tree, however we MUST still emit invalidate
+ invalidate();
+ create(tree);
+}
+
+void
+RadialMap::Widget::sendFakeMouseEvent() //slot
+{
+ QMouseEvent me(QEvent::MouseMove, mapFromGlobal(QCursor::pos()), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
+ QApplication::sendEvent(this, &me);
+ update();
+}
+
+void
+RadialMap::Widget::resizeTimeout() //slot
+{
+ // the segments are about to erased!
+ // this was a horrid bug, and proves the OO programming should be obeyed always!
+ m_focus = nullptr;
+ if (m_tree)
+ m_map.make(m_tree, true);
+ updateCache();
+}
+
+void
+RadialMap::Widget::updateCache()
+{
+ if(newData)
+ {
+ newData=false;
+ cache=QPixmap();
+ update();
+ }
+}
+
+void
+RadialMap::Widget::refresh(int filth)
+{
+ //TODO consider a more direct connection
+
+ if (!m_map.isNull())
+ {
+ switch (filth)
+ {
+ case 1:
+ m_focus=nullptr;
+ m_map.make(m_tree, true); //true means refresh only
+ break;
+
+ case 2:
+ m_map.paint(true); //antialiased painting
+ break;
+
+ case 3:
+ m_map.colorise(); //FALL THROUGH!
+ case 4:
+ m_map.paint();
+
+ default:
+ break;
+ }
+
+ update();
+ }
+}
+
+RadialMap::Segment::~Segment()
+{
+ if (isFake())
+ delete m_file; //created by us in Builder::build()
+}
+
+
diff --git a/plugins/Themes/Oxygen2/radialMap/widget.h b/plugins/Themes/Oxygen2/radialMap/widget.h
new file mode 100755
index 0000000..50dfea9
--- /dev/null
+++ b/plugins/Themes/Oxygen2/radialMap/widget.h
@@ -0,0 +1,118 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#ifndef RadialMapWIDGET_H
+#define RadialMapWIDGET_H
+
+#include <QUrl>
+
+#include <QLabel>
+#include <QDragEnterEvent>
+#include <QDropEvent>
+#include <QMouseEvent>
+#include <QPaintEvent>
+#include <QResizeEvent>
+#include <QWidget>
+#include <QTimer>
+
+#include "map.h"
+
+class Folder;
+class File;
+namespace KIO {
+class Job;
+}
+
+namespace RadialMap
+{
+class Segment;
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Widget(const bool dark,QWidget* = nullptr);
+ ~Widget() override;
+ QString path() const;
+ QUrl url(File const * const = nullptr) const;
+
+ bool isValid() const {
+ return m_tree != nullptr;
+ }
+
+ friend class Label; //FIXME badness
+
+public Q_SLOTS:
+ void create(const Folder*);
+ void invalidate();
+ void resizeTimeout();
+ void refresh(int);
+
+private Q_SLOTS:
+ void sendFakeMouseEvent();
+ void createFromCache(const Folder*);
+
+Q_SIGNALS:
+ void activated(const QUrl&);
+ void invalidated(const QUrl&);
+ void folderCreated(const Folder*);
+ void mouseHover(const QString&);
+ void giveMeTreeFor(const QUrl&);
+
+protected:
+ void changeEvent(QEvent*) override;
+ void mouseMoveEvent(QMouseEvent*) override;
+ void paintEvent(QPaintEvent*) override;
+ void resizeEvent(QResizeEvent*) override;
+ void enterEvent(QEvent*) override;
+ void leaveEvent(QEvent*) override;
+
+protected:
+ const Segment *segmentAt(QPoint&) const; //FIXME const reference for a library others can use
+ const Segment *rootSegment() const {
+ return m_rootSegment; ///never == 0
+ }
+ const Segment *focusSegment() const {
+ return m_focus; ///0 == nothing in focus
+ }
+
+private:
+ void paintExplodedLabels(QPainter&) const;
+ void updateCache();
+
+ const Folder *m_tree;
+ const Segment *m_focus;
+ QPoint m_offset;
+ QTimer m_timer;
+ QTimer m_updateCache;
+ Map m_map;
+ Segment *m_rootSegment;
+ const Segment *m_toBeDeleted;
+ QLabel m_tooltip;
+ bool dark;
+ int minFontPitch;
+ QPixmap cache;
+ bool newData;
+};
+}
+
+#endif
diff --git a/plugins/Themes/Oxygen2/radialMap/widgetEvents.cpp b/plugins/Themes/Oxygen2/radialMap/widgetEvents.cpp
new file mode 100755
index 0000000..d9c23a0
--- /dev/null
+++ b/plugins/Themes/Oxygen2/radialMap/widgetEvents.cpp
@@ -0,0 +1,254 @@
+/***********************************************************************
+* Copyright 2003-2004 Max Howell <max.howell@methylblue.com>
+* Copyright 2008-2009 Martin Sandsmark <martin.sandsmark@kde.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+#include "../fileTree.h"
+#include "radialMap.h" //class Segment
+#include "widget.h"
+
+#include <QMenu> //::mousePressEvent()
+
+#include <QPainter>
+#include <QTimer> //::resizeEvent()
+#include <QDropEvent>
+#include <QPaintEvent>
+#include <QResizeEvent>
+#include <QMouseEvent>
+
+#include <cmath> //::segmentAt()
+
+void RadialMap::Widget::resizeEvent(QResizeEvent*)
+{
+ QRect rectTemp(rect());
+ if (m_map.resize(rectTemp))
+ m_timer.setSingleShot(true);
+ m_timer.start(100); //will cause signature to rebuild for new size
+
+ //always do these as they need to be initialised on creation
+ const unsigned int w=width();
+ const unsigned int h=height();
+ m_offset.rx() = (w - m_map.width()) / 2;
+ m_offset.ry() = (h - m_map.height()) / 2;
+}
+
+void RadialMap::Widget::paintEvent(QPaintEvent*)
+{
+ if(cache.isNull() || cache.width()!=width() || cache.height()!=height())
+ {
+ QImage temp(width(),height(),QImage::Format_ARGB32);
+ temp.fill(Qt::transparent);
+ QPainter paint;
+ paint.begin(&temp);
+
+ if (!m_map.isNull())
+ {
+ QPixmap p(m_map.pixmap());
+
+ int margin=((p.width() < p.height()) ? p.width() : p.height())/50;
+ if(margin<1)
+ margin=1;
+ paint.setRenderHint(QPainter::Antialiasing);
+ QRect rect = p.rect();
+ rect.moveTo(m_offset);
+ rect.adjust(-margin, -margin, margin, margin);
+ paint.setPen(QColor(200,200,200));
+ paint.setBrush(QColor(255,255,255));
+ paint.drawEllipse(rect);
+ paint.setPen(QColor(0,0,0));
+
+ paint.drawPixmap(m_offset,p);
+ }
+ else
+ {
+ const unsigned int w=width();
+ const unsigned int h=height();
+ unsigned int min=w;
+ unsigned int x=0;
+ unsigned int y=0;
+ if(h<w)
+ {
+ min=h;
+ x=(width()-min)/2;
+ }
+ else
+ y=(height()-min)/2;
+
+ paint.setRenderHint(QPainter::Antialiasing);
+ QRect rect(x,y,min,min);
+ //rect.moveTo(m_offset);
+ paint.setPen(QColor(200,200,200));
+ paint.setBrush(QColor(255,255,255));
+ paint.drawEllipse(rect);
+ paint.setPen(QColor(0,0,0));
+
+ paint.drawText(rect, Qt::AlignHCenter | Qt::AlignVCenter, "...");
+ return;
+ }
+
+ //exploded labels
+ if (!m_map.isNull() && !m_timer.isActive())
+ {
+ if (true) {
+ paint.setRenderHint(QPainter::Antialiasing);
+ //make lines appear on pixel boundaries
+ paint.translate(0.5, 0.5);
+ }
+ paintExplodedLabels(paint);
+ }
+
+ cache=QPixmap::fromImage(temp);
+ }
+ QPainter paint;
+ paint.begin(this);
+ paint.drawPixmap(0,0,cache.width(), cache.height(), cache);
+}
+
+const RadialMap::Segment* RadialMap::Widget::segmentAt(QPoint &e) const
+{
+ //determine which segment QPoint e is above
+
+ e -= m_offset;
+
+ if (!m_map.m_signature)
+ return nullptr;
+
+ const int m_map_width=m_map.width();
+ const int m_map_height=m_map.height();
+ if (e.x() <= m_map_width && e.y() <= m_map_height)
+ {
+ //transform to cartesian coords
+ e.rx() -= m_map_width / 2; //should be an int
+ e.ry() = m_map_height / 2 - e.y();
+
+ double length = hypot(e.x(), e.y());
+
+ if (length >= m_map.m_innerRadius) //not hovering over inner circle
+ {
+ uint depth = ((int)length - m_map.m_innerRadius) / m_map.m_ringBreadth;
+
+ if (depth <= m_map.m_visibleDepth) //**** do earlier since you can //** check not outside of range
+ {
+ //vector calculation, reduces to simple trigonometry
+ //cos angle = (aibi + ajbj) / albl
+ //ai = x, bi=1, aj=y, bj=0
+ //cos angle = x / (length)
+
+ uint a = (uint)(acos((double)e.x() / length) * 916.736); //916.7324722 = #radians in circle * 16
+
+ //acos only understands 0-180 degrees
+ if (e.y() < 0) a = 5760 - a;
+
+ for (Segment *segment : m_map.m_signature[depth]) {
+ if (segment->intersects(a))
+ return segment;
+ }
+ }
+ }
+ else return m_rootSegment; //hovering over inner circle
+ }
+
+ return nullptr;
+}
+
+void RadialMap::Widget::mouseMoveEvent(QMouseEvent *e)
+{
+ //set m_focus to what we hover over, update UI if it's a new segment
+
+ Segment const * const oldFocus = m_focus;
+ QPoint p = e->pos();
+
+ m_focus = segmentAt(p); //NOTE p is passed by non-const reference
+
+ if (m_focus)
+ {
+ m_tooltip.move(e->globalX() + 20, e->globalY() + 20);
+ if (m_focus != oldFocus) //if not same as last time
+ {
+ setCursor(Qt::PointingHandCursor);
+
+ QString string;
+
+
+ const QString &path=m_focus->file()->displayPath();
+ if (m_focus->file()->isFolder())
+ {
+ const Folder* folder=static_cast<const Folder*>(m_focus->file());
+ if(path.isEmpty())
+ string += m_focus->file()->humanReadableSize()+tr(" into %1 files").arg(folder->children());
+ else
+ string += path+"\n"+m_focus->file()->humanReadableSize()+tr(" into %1 files").arg(folder->children());
+ }
+ else
+ string += path+" "+m_focus->file()->humanReadableSize();
+
+ // Calculate a semi-sane size for the tooltip
+ QFontMetrics fontMetrics(font());
+ int tooltipWidth = 0;
+ int tooltipHeight = 0;
+ for (const QString &part : string.split(QLatin1Char('\n'))) {
+ tooltipHeight += fontMetrics.height();
+ #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
+ tooltipWidth = qMax(tooltipWidth, fontMetrics.width(part));
+ #else
+ tooltipWidth = qMax(tooltipWidth, fontMetrics.horizontalAdvance(part));
+ #endif
+ }
+ // Limit it to the window size, probably should find something better
+ tooltipWidth = qMin(tooltipWidth, window()->width());
+ tooltipWidth += 10;
+ tooltipHeight += 10;
+ m_tooltip.resize(tooltipWidth, tooltipHeight);
+ m_tooltip.setText(string);
+ m_tooltip.show();
+
+ emit mouseHover(m_focus->file()->displayPath());
+ update();
+ }
+ }
+ else if (oldFocus && oldFocus->file() != m_tree)
+ {
+ m_tooltip.hide();
+ unsetCursor();
+ update();
+
+ emit mouseHover(QString());
+ }
+}
+
+void RadialMap::Widget::enterEvent(QEvent *)
+{
+ if (!m_focus) return;
+
+ setCursor(Qt::PointingHandCursor);
+ emit mouseHover(m_focus->file()->displayPath());
+ update();
+}
+
+void RadialMap::Widget::leaveEvent(QEvent *)
+{
+ m_tooltip.hide();
+}
+
+void RadialMap::Widget::changeEvent(QEvent *e)
+{
+ if (e->type() == QEvent::ApplicationPaletteChange ||
+ e->type() == QEvent::PaletteChange)
+ m_map.paint();
+}
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/add.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/add.png
new file mode 100755
index 0000000..7932127
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/add.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/exit.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/exit.png
new file mode 100755
index 0000000..ae3c4e8
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/exit.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/informations.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/informations.png
new file mode 100755
index 0000000..5b7b255
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/informations.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/options.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/options.png
new file mode 100755
index 0000000..23ec531
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/options.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Unix.png
new file mode 100755
index 0000000..6f5d1cf
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Windows.png
new file mode 100755
index 0000000..5464856
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Caught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
new file mode 100755
index 0000000..b2bb2e3
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
new file mode 100755
index 0000000..0abeb5f
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Unix.png
new file mode 100755
index 0000000..5e313b9
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Windows.png
new file mode 100755
index 0000000..828e7e6
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/SystemTrayIcon/systray_Uncaught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/add.png b/plugins/Themes/Oxygen2/resources/add.png
new file mode 100755
index 0000000..7932127
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/add.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/cancel.png b/plugins/Themes/Oxygen2/resources/cancel.png
new file mode 100755
index 0000000..ae3c4e8
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/cancel.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/cancelDarkD.png b/plugins/Themes/Oxygen2/resources/cancelDarkD.png
new file mode 100755
index 0000000..a2f4556
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/cancelDarkD.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/cancelDarkE.png b/plugins/Themes/Oxygen2/resources/cancelDarkE.png
new file mode 100755
index 0000000..1cda258
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/cancelDarkE.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/click.opus b/plugins/Themes/Oxygen2/resources/click.opus
new file mode 100755
index 0000000..ddd2a25
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/click.opus
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkButton.png b/plugins/Themes/Oxygen2/resources/darkButton.png
new file mode 100755
index 0000000..ab8d393
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkButton.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkButtonOver.png b/plugins/Themes/Oxygen2/resources/darkButtonOver.png
new file mode 100755
index 0000000..ea42018
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkButtonOver.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkButtonPushed.png b/plugins/Themes/Oxygen2/resources/darkButtonPushed.png
new file mode 100755
index 0000000..d8fba09
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkButtonPushed.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkmoveDown.png b/plugins/Themes/Oxygen2/resources/darkmoveDown.png
new file mode 100755
index 0000000..cfe6fe6
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkmoveDown.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkmoveUp.png b/plugins/Themes/Oxygen2/resources/darkmoveUp.png
new file mode 100755
index 0000000..1d5f41c
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkmoveUp.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkplayer_end.png b/plugins/Themes/Oxygen2/resources/darkplayer_end.png
new file mode 100755
index 0000000..b5e41ba
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkplayer_end.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkplayer_pause.png b/plugins/Themes/Oxygen2/resources/darkplayer_pause.png
new file mode 100755
index 0000000..8ce7922
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkplayer_pause.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/darkplayer_play.png b/plugins/Themes/Oxygen2/resources/darkplayer_play.png
new file mode 100755
index 0000000..b1d58a1
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/darkplayer_play.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/export-transfer-list.png b/plugins/Themes/Oxygen2/resources/export-transfer-list.png
new file mode 100755
index 0000000..3a0aac6
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/export-transfer-list.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/import-transfer-list.png b/plugins/Themes/Oxygen2/resources/import-transfer-list.png
new file mode 100755
index 0000000..ee47f0d
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/import-transfer-list.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/main.png b/plugins/Themes/Oxygen2/resources/main.png
new file mode 100755
index 0000000..5464856
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/main.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/moveDown.png b/plugins/Themes/Oxygen2/resources/moveDown.png
new file mode 100755
index 0000000..82a312c
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/moveDown.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/moveUp.png b/plugins/Themes/Oxygen2/resources/moveUp.png
new file mode 100755
index 0000000..7f7ba72
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/moveUp.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/over.opus b/plugins/Themes/Oxygen2/resources/over.opus
new file mode 100755
index 0000000..7344831
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/over.opus
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/player_end.png b/plugins/Themes/Oxygen2/resources/player_end.png
new file mode 100755
index 0000000..18982db
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/player_end.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/player_pause.png b/plugins/Themes/Oxygen2/resources/player_pause.png
new file mode 100755
index 0000000..68ee21f
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/player_pause.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/player_play.png b/plugins/Themes/Oxygen2/resources/player_play.png
new file mode 100755
index 0000000..a1c5b83
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/player_play.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/progressBarin.png b/plugins/Themes/Oxygen2/resources/progressBarin.png
new file mode 100755
index 0000000..6af26c7
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/progressBarin.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/progressBarout.png b/plugins/Themes/Oxygen2/resources/progressBarout.png
new file mode 100755
index 0000000..08f3748
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/progressBarout.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/putOnBottom.png b/plugins/Themes/Oxygen2/resources/putOnBottom.png
new file mode 100755
index 0000000..512286e
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/putOnBottom.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/putOnTop.png b/plugins/Themes/Oxygen2/resources/putOnTop.png
new file mode 100755
index 0000000..30fe96b
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/putOnTop.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/remove.png b/plugins/Themes/Oxygen2/resources/remove.png
new file mode 100755
index 0000000..b711740
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/remove.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/resources/search.png b/plugins/Themes/Oxygen2/resources/search.png
new file mode 100755
index 0000000..cef1836
--- /dev/null
+++ b/plugins/Themes/Oxygen2/resources/search.png
Binary files differ
diff --git a/plugins/Themes/Oxygen2/themesOptions.ui b/plugins/Themes/Oxygen2/themesOptions.ui
new file mode 100755
index 0000000..b2da124
--- /dev/null
+++ b/plugins/Themes/Oxygen2/themesOptions.ui
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>themesOptions</class>
+ <widget class="QWidget" name="themesOptions">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>519</width>
+ <height>389</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QToolBox" name="toolBox">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="page">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>492</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Use</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="4" column="1">
+ <widget class="QCheckBox" name="startMinimized">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Minimize on close to systray</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="2">
+ <widget class="QCheckBox" name="alwaysOnTop"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="checkBoxStartWithMoreButtonPushed"/>
+ </item>
+ <item row="7" column="0">
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QCheckBox" name="minimizeToSystray"/>
+ </item>
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>At the end of the copy</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="0">
+ <widget class="QCheckBox" name="checkBox_limitSpeed">
+ <property name="text">
+ <string>Limit copy speed to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1" colspan="2">
+ <widget class="QSpinBox" name="limitSpeed">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> KB/s</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelStartWithMoreButtonPushed">
+ <property name="text">
+ <string>Start with the &quot;more button&quot; pushed</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_startMinimized">
+ <property name="text">
+ <string>Start minimized</string>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="2">
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>133</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="labelAlwaysOnTop">
+ <property name="text">
+ <string>Always on top</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="labelSavePosition">
+ <property name="text">
+ <string>Position at start</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1" colspan="2">
+ <widget class="QComboBox" name="comboBox_copyEnd">
+ <item>
+ <property name="text">
+ <string notr="true">Don't close if errors are found</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Never close</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Always close</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="7" column="1" colspan="2">
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string notr="true">Unlimited</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="dark">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Dark UI</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1">
+ <widget class="QComboBox" name="savePosition">
+ <item>
+ <property name="text">
+ <string>Default</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Save as previous</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>At Center</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_2">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>509</width>
+ <height>283</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Informations</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelShowSpeedAsMain">
+ <property name="text">
+ <string>Show speed as main information</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="checkBoxShowSpeed"/>
+ </item>
+ <item row="1" column="2">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>529</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="page_3">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>509</width>
+ <height>283</height>
+ </rect>
+ </property>
+ <attribute name="label">
+ <string>Display</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelSpeedWithProgressBar">
+ <property name="text">
+ <string>Speed with progress bar</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="speedWithProgressBar"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelDualProgression">
+ <property name="text">
+ <string>Show dual progression</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="showDualProgression"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Show progression in the title</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="showProgressionInTheTitle"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelProgressionColor">
+ <property name="text">
+ <string>Progression color</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QFrame" name="frameProgressionColor">
+ <property name="minimumSize">
+ <size>
+ <width>225</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>225</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Click to edit the color</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="progressColorWrite">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRead">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="progressColorRemaining">
+ <property name="minimumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>75</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>455</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>checkBox_limitSpeed</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>limitSpeed</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>109</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>199</x>
+ <y>144</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>