From 328872afb5e68d4579d73bca55f03b57596564bb Mon Sep 17 00:00:00 2001
From: daniel-Jones <daniel@danieljon.es>
Date: Thu, 23 Feb 2017 20:42:57 +1030
Subject: Converted presets file location to a safe OS agnostic location
 (~/.local/share/RGBcontroller on Linux)

---
 qt/RGBController/RGBController.pro.user            |   2 +-
 qt/RGBController/controllerwindow.cpp              |  21 +-
 qt/RGBController/controllerwindow.h                |   4 +
 qt/build-RGBController-Desktop-Debug/.qmake.stash  |  12 +
 qt/build-RGBController-Desktop-Debug/Makefile      | 898 +++++++++++++++++----
 qt/build-RGBController-Desktop-Debug/RGBController | Bin 0 -> 1384272 bytes
 .../moc_controllerwindow.cpp                       | 247 ++++++
 qt/build-RGBController-Desktop-Debug/moc_predefs.h | 291 +++++++
 qt/build-RGBController-Desktop-Debug/presets.txt   |   1 +
 .../ui_controllerwindow.h                          | 470 ++++++-----
 10 files changed, 1581 insertions(+), 365 deletions(-)
 create mode 100644 qt/build-RGBController-Desktop-Debug/.qmake.stash
 create mode 100755 qt/build-RGBController-Desktop-Debug/RGBController
 create mode 100644 qt/build-RGBController-Desktop-Debug/moc_controllerwindow.cpp
 create mode 100644 qt/build-RGBController-Desktop-Debug/moc_predefs.h
 create mode 100644 qt/build-RGBController-Desktop-Debug/presets.txt

diff --git a/qt/RGBController/RGBController.pro.user b/qt/RGBController/RGBController.pro.user
index be156cc..f76531e 100755
--- a/qt/RGBController/RGBController.pro.user
+++ b/qt/RGBController/RGBController.pro.user
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.2.1, 2017-02-14T14:11:28. -->
+<!-- Written by QtCreator 4.2.1, 2017-02-23T11:02:51. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
diff --git a/qt/RGBController/controllerwindow.cpp b/qt/RGBController/controllerwindow.cpp
index b543ed6..1ff84dd 100755
--- a/qt/RGBController/controllerwindow.cpp
+++ b/qt/RGBController/controllerwindow.cpp
@@ -4,6 +4,7 @@ controllerWindow::controllerWindow(QWidget *parent) :
 	QMainWindow(parent),
 	ui(new Ui::controllerWindow)
 {
+    /* TODO convert to QStandardPaths::standardLocations(QStandardPaths::AppDataLocation) */
 	/* this is our setup function, we set things up here */
 	ui->setupUi(this);
 	info_log("RGB Controller started");
@@ -50,6 +51,8 @@ controllerWindow::controllerWindow(QWidget *parent) :
     ui->gto->setValue(0);
     ui->bfrom->setValue(0);
     ui->bto->setValue(0);
+    presetsfile = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/presets.txt";
+    tempfile = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/tmp.file";
 	/* set some crucial ints */
 	preset_index = 0, r = 0, g = 0, b = 0;
 	/* populate our serial port dropdown box */
@@ -108,7 +111,7 @@ void controllerWindow::load_presets()
 	 * -> add [0] to dropdown (name), add [1] to an array that stores all the values
 	 */
 
-	QFile inputFile("presets.txt");
+    QFile inputFile(presetsfile);
 	if (inputFile.open(QIODevice::ReadOnly))
 	{
 		QTextStream in(&inputFile);
@@ -125,7 +128,7 @@ void controllerWindow::load_presets()
 		info_log("Presets loaded");
 	} else
 	{
-		show_msgbox("Unable to find the presets file.\nThis file needs to be named 'presets.txt' and be located in the same directory as the binary.");
+        show_msgbox("Unable to load the presets file.\n");
 		info_log("Presets file not found.");
 	}
 }
@@ -133,7 +136,9 @@ void controllerWindow::load_presets()
 void controllerWindow::save_preset(QString name)
 {
 	/* this function will save our preset to file */
-	QFile file("presets.txt");
+    if (!QDir("Folder").exists())
+        QDir().mkdir(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
+    QFile file(presetsfile);
 	if(!file.open(QIODevice::Append)) {
 		show_msgbox("Fatal error opening presets for appending text.");
 
@@ -155,7 +160,7 @@ void controllerWindow::delete_preset(QString name)
 {
 	/*
 	 * here we will delete a preset from the presets file
-	 * process:
+     * process:
 	 * retrieve preset name
 	 * go through preset file line by line and write it to a seperate tmp file
 	 * if the [0] of split('=') equals the preset name, don't write it to the tmp file
@@ -167,8 +172,8 @@ void controllerWindow::delete_preset(QString name)
 	{
 		case QMessageBox::Ok:
 			{
-				info_log("deleting preset: " + name);
-				QFile file("tmp.file");
+                info_log("deleting preset: " + name);
+                QFile file(tempfile);
 				if(!file.open(QIODevice::Append)) {
 					show_msgbox("Fatal error opening temp file for writing");
 
@@ -185,8 +190,8 @@ void controllerWindow::delete_preset(QString name)
 					}
 					file.close();
 					/* remove the current presets file then rename the temp file to presets.txt */
-					QFile::remove("presets.txt");
-					QFile::rename("tmp.file", "presets.txt");
+                    QFile::remove(presetsfile);
+                    QFile::rename(tempfile, presetsfile);
 					/* reload presets into memory and clear the drop down box */
 					ui->presets_dropdown->clear();
 					presets.clear();
diff --git a/qt/RGBController/controllerwindow.h b/qt/RGBController/controllerwindow.h
index 8b4456b..0997e82 100755
--- a/qt/RGBController/controllerwindow.h
+++ b/qt/RGBController/controllerwindow.h
@@ -9,6 +9,8 @@
 #include <QSerialPortInfo>
 #include <QTextStream>
 #include <QMessageBox>
+#include <QStandardPaths>
+#include <QDir>
 #include "serial_communication.h"
 #include "ui_controllerwindow.h"
 
@@ -42,6 +44,8 @@ class controllerWindow : public QMainWindow
 		QString port;
 		/* this int will contain the current preset index selected */
 		int preset_index;
+        QString presetsfile;
+        QString tempfile;
 
 		private slots:
 			/* these slots are used to trigger button clicks and drop down items selections etc */
diff --git a/qt/build-RGBController-Desktop-Debug/.qmake.stash b/qt/build-RGBController-Desktop-Debug/.qmake.stash
new file mode 100644
index 0000000..39abb16
--- /dev/null
+++ b/qt/build-RGBController-Desktop-Debug/.qmake.stash
@@ -0,0 +1,12 @@
+QMAKE_DEFAULT_INCDIRS = \
+    /usr/include/c++/6.3.1 \
+    /usr/include/c++/6.3.1/x86_64-pc-linux-gnu \
+    /usr/include/c++/6.3.1/backward \
+    /usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include \
+    /usr/local/include \
+    /usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed \
+    /usr/include
+QMAKE_DEFAULT_LIBDIRS = \
+    /usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1 \
+    /usr/lib \
+    /lib
diff --git a/qt/build-RGBController-Desktop-Debug/Makefile b/qt/build-RGBController-Desktop-Debug/Makefile
index 30bb4c2..93c69a1 100644
--- a/qt/build-RGBController-Desktop-Debug/Makefile
+++ b/qt/build-RGBController-Desktop-Debug/Makefile
@@ -1,41 +1,46 @@
 #############################################################################
 # Makefile for building: RGBController
-# Generated by qmake (2.01a) (Qt 4.8.7) on: Tue Feb 14 11:06:35 2017
+# Generated by qmake (3.1) (Qt 5.8.0)
 # Project:  ../RGBController/RGBController.pro
 # Template: app
-# Command: /usr/lib/qt4/bin/qmake -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile ../RGBController/RGBController.pro
+# Command: /usr/bin/qmake-qt5 -o Makefile ../RGBController/RGBController.pro -spec linux-g++ CONFIG+=debug
 #############################################################################
 
+MAKEFILE      = Makefile
+
 ####### Compiler, tools and options
 
 CC            = gcc
 CXX           = g++
-DEFINES       = -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
-CFLAGS        = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
-CXXFLAGS      = -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
-INCPATH       = -I/usr/share/qt4/mkspecs/linux-g++ -I../RGBController -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I../RGBController -I.
-LINK          = g++
-LFLAGS        = -Wl,-O1,--sort-common,--as-needed,-z,relro
-LIBS          = $(SUBLIBS)  -L/usr/lib -lQtGui -lQtNetwork -lQtCore -lpthread 
-AR            = ar cqs
-RANLIB        = 
-QMAKE         = /usr/lib/qt4/bin/qmake
-TAR           = tar -cf
-COMPRESS      = gzip -9f
+DEFINES       = -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_SERIALPORT_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
+CFLAGS        = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
+CXXFLAGS      = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
+INCPATH       = -I../RGBController -I. -isystem /usr/include/qt -isystem /usr/include/qt/QtWidgets -isystem /usr/include/qt/QtGui -isystem /usr/include/qt/QtSerialPort -isystem /usr/include/qt/QtNetwork -isystem /usr/include/qt/QtCore -I. -isystem /usr/include/libdrm -I. -I/usr/lib/qt/mkspecs/linux-g++
+QMAKE         = /usr/bin/qmake-qt5
+DEL_FILE      = rm -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
 COPY          = cp -f
-SED           = sed
-COPY_FILE     = $(COPY)
-COPY_DIR      = $(COPY) -r
-STRIP         = strip
+COPY_FILE     = cp -f
+COPY_DIR      = cp -f -R
 INSTALL_FILE  = install -m 644 -p
-INSTALL_DIR   = $(COPY_DIR)
 INSTALL_PROGRAM = install -m 755 -p
+INSTALL_DIR   = cp -f -R
 DEL_FILE      = rm -f
 SYMLINK       = ln -f -s
 DEL_DIR       = rmdir
 MOVE          = mv -f
-CHK_DIR_EXISTS= test -d
-MKDIR         = mkdir -p
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+DISTNAME      = RGBController1.0.0
+DISTDIR = /home/daniel_j/documents/school/2016\ research\ project/RGBController/qt/build-RGBController-Desktop-Debug/.tmp/RGBController1.0.0
+LINK          = g++
+LFLAGS        = 
+LIBS          = $(SUBLIBS) -lQt5Widgets -lQt5Gui -lQt5SerialPort -lQt5Network -lQt5Core -lGL -lpthread 
+AR            = ar cqs
+RANLIB        = 
+SED           = sed
+STRIP         = strip
 
 ####### Output directory
 
@@ -50,164 +55,767 @@ OBJECTS       = main.o \
 		controllerwindow.o \
 		serial_communication.o \
 		moc_controllerwindow.o
-DIST          = /usr/share/qt4/mkspecs/common/unix.conf \
-		/usr/share/qt4/mkspecs/common/linux.conf \
-		/usr/share/qt4/mkspecs/common/gcc-base.conf \
-		/usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
-		/usr/share/qt4/mkspecs/common/g++-base.conf \
-		/usr/share/qt4/mkspecs/common/g++-unix.conf \
-		/usr/share/qt4/mkspecs/qconfig.pri \
-		/usr/share/qt4/mkspecs/features/qt_functions.prf \
-		/usr/share/qt4/mkspecs/features/qt_config.prf \
-		/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
-		/usr/share/qt4/mkspecs/features/default_pre.prf \
-		/usr/share/qt4/mkspecs/features/debug.prf \
-		/usr/share/qt4/mkspecs/features/default_post.prf \
-		/usr/share/qt4/mkspecs/features/shared.prf \
-		/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
-		/usr/share/qt4/mkspecs/features/warn_on.prf \
-		/usr/share/qt4/mkspecs/features/qt.prf \
-		/usr/share/qt4/mkspecs/features/unix/thread.prf \
-		/usr/share/qt4/mkspecs/features/moc.prf \
-		/usr/share/qt4/mkspecs/features/resources.prf \
-		/usr/share/qt4/mkspecs/features/uic.prf \
-		/usr/share/qt4/mkspecs/features/yacc.prf \
-		/usr/share/qt4/mkspecs/features/lex.prf \
-		/usr/share/qt4/mkspecs/features/include_source_dir.prf \
-		../RGBController/RGBController.pro
+DIST          = /usr/lib/qt/mkspecs/features/spec_pre.prf \
+		/usr/lib/qt/mkspecs/common/unix.conf \
+		/usr/lib/qt/mkspecs/common/linux.conf \
+		/usr/lib/qt/mkspecs/common/sanitize.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/qt/mkspecs/common/g++-base.conf \
+		/usr/lib/qt/mkspecs/common/g++-unix.conf \
+		/usr/lib/qt/mkspecs/qconfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_charts.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_enginio.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_enginio_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gamepad.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gamepad_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scxml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scxml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialbus.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialbus_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webview.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webview_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
+		/usr/lib/qt/mkspecs/modules/qt_QGpgme.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
+		/usr/lib/qt/mkspecs/features/qt_functions.prf \
+		/usr/lib/qt/mkspecs/features/qt_config.prf \
+		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/qt/mkspecs/features/spec_post.prf \
+		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/qt/mkspecs/features/toolchain.prf \
+		/usr/lib/qt/mkspecs/features/default_pre.prf \
+		/usr/lib/qt/mkspecs/features/resolve_config.prf \
+		/usr/lib/qt/mkspecs/features/default_post.prf \
+		/usr/lib/qt/mkspecs/features/warn_on.prf \
+		/usr/lib/qt/mkspecs/features/qt.prf \
+		/usr/lib/qt/mkspecs/features/resources.prf \
+		/usr/lib/qt/mkspecs/features/moc.prf \
+		/usr/lib/qt/mkspecs/features/unix/opengl.prf \
+		/usr/lib/qt/mkspecs/features/uic.prf \
+		/usr/lib/qt/mkspecs/features/unix/thread.prf \
+		/usr/lib/qt/mkspecs/features/qmake_use.prf \
+		/usr/lib/qt/mkspecs/features/file_copies.prf \
+		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
+		/usr/lib/qt/mkspecs/features/exceptions.prf \
+		/usr/lib/qt/mkspecs/features/yacc.prf \
+		/usr/lib/qt/mkspecs/features/lex.prf \
+		../RGBController/RGBController.pro ../RGBController/controllerwindow.h \
+		../RGBController/serial_communication.h ../RGBController/main.cpp \
+		../RGBController/controllerwindow.cpp \
+		../RGBController/serial_communication.cpp
 QMAKE_TARGET  = RGBController
 DESTDIR       = 
 TARGET        = RGBController
 
-first: all
-####### Implicit rules
 
-.SUFFIXES: .o .c .cpp .cc .cxx .C
+first: all
+####### Build rules
 
-.cpp.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+$(TARGET): ui_controllerwindow.h $(OBJECTS)  
+	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
 
-.cc.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+Makefile: ../RGBController/RGBController.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mkspecs/features/spec_pre.prf \
+		/usr/lib/qt/mkspecs/common/unix.conf \
+		/usr/lib/qt/mkspecs/common/linux.conf \
+		/usr/lib/qt/mkspecs/common/sanitize.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/qt/mkspecs/common/g++-base.conf \
+		/usr/lib/qt/mkspecs/common/g++-unix.conf \
+		/usr/lib/qt/mkspecs/qconfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_charts.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_enginio.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_enginio_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gamepad.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gamepad_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scxml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scxml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialbus.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialbus_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webview.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webview_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
+		/usr/lib/qt/mkspecs/modules/qt_QGpgme.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
+		/usr/lib/qt/mkspecs/features/qt_functions.prf \
+		/usr/lib/qt/mkspecs/features/qt_config.prf \
+		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/qt/mkspecs/features/spec_post.prf \
+		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/qt/mkspecs/features/toolchain.prf \
+		/usr/lib/qt/mkspecs/features/default_pre.prf \
+		/usr/lib/qt/mkspecs/features/resolve_config.prf \
+		/usr/lib/qt/mkspecs/features/default_post.prf \
+		/usr/lib/qt/mkspecs/features/warn_on.prf \
+		/usr/lib/qt/mkspecs/features/qt.prf \
+		/usr/lib/qt/mkspecs/features/resources.prf \
+		/usr/lib/qt/mkspecs/features/moc.prf \
+		/usr/lib/qt/mkspecs/features/unix/opengl.prf \
+		/usr/lib/qt/mkspecs/features/uic.prf \
+		/usr/lib/qt/mkspecs/features/unix/thread.prf \
+		/usr/lib/qt/mkspecs/features/qmake_use.prf \
+		/usr/lib/qt/mkspecs/features/file_copies.prf \
+		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
+		/usr/lib/qt/mkspecs/features/exceptions.prf \
+		/usr/lib/qt/mkspecs/features/yacc.prf \
+		/usr/lib/qt/mkspecs/features/lex.prf \
+		../RGBController/RGBController.pro \
+		/usr/lib/libQt5Widgets.prl \
+		/usr/lib/libQt5Gui.prl \
+		/usr/lib/libQt5SerialPort.prl \
+		/usr/lib/libQt5Network.prl \
+		/usr/lib/libQt5Core.prl
+	$(QMAKE) -o Makefile ../RGBController/RGBController.pro -spec linux-g++ CONFIG+=debug
+/usr/lib/qt/mkspecs/features/spec_pre.prf:
+/usr/lib/qt/mkspecs/common/unix.conf:
+/usr/lib/qt/mkspecs/common/linux.conf:
+/usr/lib/qt/mkspecs/common/sanitize.conf:
+/usr/lib/qt/mkspecs/common/gcc-base.conf:
+/usr/lib/qt/mkspecs/common/gcc-base-unix.conf:
+/usr/lib/qt/mkspecs/common/g++-base.conf:
+/usr/lib/qt/mkspecs/common/g++-unix.conf:
+/usr/lib/qt/mkspecs/qconfig.pri:
+/usr/lib/qt/mkspecs/modules/qt_Attica.pri:
+/usr/lib/qt/mkspecs/modules/qt_KArchive.pri:
+/usr/lib/qt/mkspecs/modules/qt_KAuth.pri:
+/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri:
+/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri:
+/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri:
+/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCrash.pri:
+/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri:
+/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri:
+/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KI18n.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIOGui.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri:
+/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri:
+/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNewStuffCore.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri:
+/usr/lib/qt/mkspecs/modules/qt_KParts.pri:
+/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri:
+/usr/lib/qt/mkspecs/modules/qt_KPty.pri:
+/usr/lib/qt/mkspecs/modules/qt_KService.pri:
+/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri:
+/usr/lib/qt/mkspecs/modules/qt_KWallet.pri:
+/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri:
+/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dcore.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dcore_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dextras.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dextras_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dinput.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dinput_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dlogic_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquick.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquick_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3drender.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_3drender_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_accessibility_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_bluetooth_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_charts.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_charts_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_core.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_datavisualization_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_egl_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_enginio.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_enginio_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_fb_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_gamepad.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_gamepad_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_glx_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_help.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_input_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_location.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_network.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_networkauth.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_networkauth_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_nfc.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_nfc_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qmldebug_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_script.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_scxml.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_scxml_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_serialbus.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_serialbus_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_serialport.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_serialport_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_service_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_texttospeech_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_theme_support_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_uiplugin.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_waylandclient_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_waylandcompositor_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webengine.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webengine_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webenginecore_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webenginecoreheaders_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webview.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webview_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri:
+/usr/lib/qt/mkspecs/modules/qt_QGpgme.pri:
+/usr/lib/qt/mkspecs/modules/qt_Solid.pri:
+/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri:
+/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri:
+/usr/lib/qt/mkspecs/features/qt_functions.prf:
+/usr/lib/qt/mkspecs/features/qt_config.prf:
+/usr/lib/qt/mkspecs/linux-g++/qmake.conf:
+/usr/lib/qt/mkspecs/features/spec_post.prf:
+/usr/lib/qt/mkspecs/features/exclusive_builds.prf:
+/usr/lib/qt/mkspecs/features/toolchain.prf:
+/usr/lib/qt/mkspecs/features/default_pre.prf:
+/usr/lib/qt/mkspecs/features/resolve_config.prf:
+/usr/lib/qt/mkspecs/features/default_post.prf:
+/usr/lib/qt/mkspecs/features/warn_on.prf:
+/usr/lib/qt/mkspecs/features/qt.prf:
+/usr/lib/qt/mkspecs/features/resources.prf:
+/usr/lib/qt/mkspecs/features/moc.prf:
+/usr/lib/qt/mkspecs/features/unix/opengl.prf:
+/usr/lib/qt/mkspecs/features/uic.prf:
+/usr/lib/qt/mkspecs/features/unix/thread.prf:
+/usr/lib/qt/mkspecs/features/qmake_use.prf:
+/usr/lib/qt/mkspecs/features/file_copies.prf:
+/usr/lib/qt/mkspecs/features/testcase_targets.prf:
+/usr/lib/qt/mkspecs/features/exceptions.prf:
+/usr/lib/qt/mkspecs/features/yacc.prf:
+/usr/lib/qt/mkspecs/features/lex.prf:
+../RGBController/RGBController.pro:
+/usr/lib/libQt5Widgets.prl:
+/usr/lib/libQt5Gui.prl:
+/usr/lib/libQt5SerialPort.prl:
+/usr/lib/libQt5Network.prl:
+/usr/lib/libQt5Core.prl:
+qmake: FORCE
+	@$(QMAKE) -o Makefile ../RGBController/RGBController.pro -spec linux-g++ CONFIG+=debug
+
+qmake_all: FORCE
 
-.cxx.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
 
-.C.o:
-	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+all: Makefile $(TARGET)
 
-.c.o:
-	$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+dist: distdir FORCE
+	(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
 
-####### Build rules
+distdir: FORCE
+	@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
+	$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
+	$(COPY_FILE) --parents /usr/lib/qt/mkspecs/features/data/dummy.cpp $(DISTDIR)/
+	$(COPY_FILE) --parents ../RGBController/controllerwindow.h ../RGBController/serial_communication.h $(DISTDIR)/
+	$(COPY_FILE) --parents ../RGBController/main.cpp ../RGBController/controllerwindow.cpp ../RGBController/serial_communication.cpp $(DISTDIR)/
+	$(COPY_FILE) --parents ../RGBController/controllerwindow.ui $(DISTDIR)/
 
-all: Makefile $(TARGET)
 
-$(TARGET): ui_controllerwindow.h $(OBJECTS)  
-	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
-	{ test -n "$(DESTDIR)" && DESTDIR="$(DESTDIR)" || DESTDIR=.; } && test $$(gdb --version | sed -e 's,[^0-9][^0-9]*\([0-9]\)\.\([0-9]\).*,\1\2,;q') -gt 72 && gdb --nx --batch --quiet -ex 'set confirm off' -ex "save gdb-index $$DESTDIR" -ex quit '$(TARGET)' && test -f $(TARGET).gdb-index && objcopy --add-section '.gdb_index=$(TARGET).gdb-index' --set-section-flags '.gdb_index=readonly' '$(TARGET)' '$(TARGET)' && rm -f $(TARGET).gdb-index || true
-
-Makefile: ../RGBController/RGBController.pro  /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \
-		/usr/share/qt4/mkspecs/common/linux.conf \
-		/usr/share/qt4/mkspecs/common/gcc-base.conf \
-		/usr/share/qt4/mkspecs/common/gcc-base-unix.conf \
-		/usr/share/qt4/mkspecs/common/g++-base.conf \
-		/usr/share/qt4/mkspecs/common/g++-unix.conf \
-		/usr/share/qt4/mkspecs/qconfig.pri \
-		/usr/share/qt4/mkspecs/features/qt_functions.prf \
-		/usr/share/qt4/mkspecs/features/qt_config.prf \
-		/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
-		/usr/share/qt4/mkspecs/features/default_pre.prf \
-		/usr/share/qt4/mkspecs/features/debug.prf \
-		/usr/share/qt4/mkspecs/features/default_post.prf \
-		/usr/share/qt4/mkspecs/features/shared.prf \
-		/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \
-		/usr/share/qt4/mkspecs/features/warn_on.prf \
-		/usr/share/qt4/mkspecs/features/qt.prf \
-		/usr/share/qt4/mkspecs/features/unix/thread.prf \
-		/usr/share/qt4/mkspecs/features/moc.prf \
-		/usr/share/qt4/mkspecs/features/resources.prf \
-		/usr/share/qt4/mkspecs/features/uic.prf \
-		/usr/share/qt4/mkspecs/features/yacc.prf \
-		/usr/share/qt4/mkspecs/features/lex.prf \
-		/usr/share/qt4/mkspecs/features/include_source_dir.prf \
-		/usr/lib/libQtGui.prl \
-		/usr/lib/libQtNetwork.prl \
-		/usr/lib/libQtCore.prl
-	$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile ../RGBController/RGBController.pro
-/usr/share/qt4/mkspecs/common/unix.conf:
-/usr/share/qt4/mkspecs/common/linux.conf:
-/usr/share/qt4/mkspecs/common/gcc-base.conf:
-/usr/share/qt4/mkspecs/common/gcc-base-unix.conf:
-/usr/share/qt4/mkspecs/common/g++-base.conf:
-/usr/share/qt4/mkspecs/common/g++-unix.conf:
-/usr/share/qt4/mkspecs/qconfig.pri:
-/usr/share/qt4/mkspecs/features/qt_functions.prf:
-/usr/share/qt4/mkspecs/features/qt_config.prf:
-/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
-/usr/share/qt4/mkspecs/features/default_pre.prf:
-/usr/share/qt4/mkspecs/features/debug.prf:
-/usr/share/qt4/mkspecs/features/default_post.prf:
-/usr/share/qt4/mkspecs/features/shared.prf:
-/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf:
-/usr/share/qt4/mkspecs/features/warn_on.prf:
-/usr/share/qt4/mkspecs/features/qt.prf:
-/usr/share/qt4/mkspecs/features/unix/thread.prf:
-/usr/share/qt4/mkspecs/features/moc.prf:
-/usr/share/qt4/mkspecs/features/resources.prf:
-/usr/share/qt4/mkspecs/features/uic.prf:
-/usr/share/qt4/mkspecs/features/yacc.prf:
-/usr/share/qt4/mkspecs/features/lex.prf:
-/usr/share/qt4/mkspecs/features/include_source_dir.prf:
-/usr/lib/libQtGui.prl:
-/usr/lib/libQtNetwork.prl:
-/usr/lib/libQtCore.prl:
-qmake:  FORCE
-	@$(QMAKE) -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile ../RGBController/RGBController.pro
-
-dist: 
-	@$(CHK_DIR_EXISTS) .tmp/RGBController1.0.0 || $(MKDIR) .tmp/RGBController1.0.0 
-	$(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/RGBController1.0.0/ && $(COPY_FILE) --parents ../RGBController/controllerwindow.h ../RGBController/serial_communication.h .tmp/RGBController1.0.0/ && $(COPY_FILE) --parents ../RGBController/main.cpp ../RGBController/controllerwindow.cpp ../RGBController/serial_communication.cpp .tmp/RGBController1.0.0/ && $(COPY_FILE) --parents ../RGBController/controllerwindow.ui .tmp/RGBController1.0.0/ && (cd `dirname .tmp/RGBController1.0.0` && $(TAR) RGBController1.0.0.tar RGBController1.0.0 && $(COMPRESS) RGBController1.0.0.tar) && $(MOVE) `dirname .tmp/RGBController1.0.0`/RGBController1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/RGBController1.0.0
-
-
-clean:compiler_clean 
+clean: compiler_clean 
 	-$(DEL_FILE) $(OBJECTS)
 	-$(DEL_FILE) *~ core *.core
 
 
-####### Sub-libraries
-
-distclean: clean
+distclean: clean 
 	-$(DEL_FILE) $(TARGET) 
+	-$(DEL_FILE) .qmake.stash
 	-$(DEL_FILE) Makefile
 
 
-check: first
+####### Sub-libraries
 
 mocclean: compiler_moc_header_clean compiler_moc_source_clean
 
 mocables: compiler_moc_header_make_all compiler_moc_source_make_all
 
+check: first
+
+benchmark: first
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_moc_predefs_make_all: moc_predefs.h
+compiler_moc_predefs_clean:
+	-$(DEL_FILE) moc_predefs.h
+moc_predefs.h: /usr/lib/qt/mkspecs/features/data/dummy.cpp
+	g++ -pipe -g -Wall -W -dM -E -o moc_predefs.h /usr/lib/qt/mkspecs/features/data/dummy.cpp
+
 compiler_moc_header_make_all: moc_controllerwindow.cpp
 compiler_moc_header_clean:
 	-$(DEL_FILE) moc_controllerwindow.cpp
 moc_controllerwindow.cpp: ../RGBController/serial_communication.h \
 		../RGBController/ui_controllerwindow.h \
-		../RGBController/controllerwindow.h
-	/usr/lib/qt4/bin/moc $(DEFINES) $(INCPATH) ../RGBController/controllerwindow.h -o moc_controllerwindow.cpp
+		../RGBController/controllerwindow.h \
+		moc_predefs.h \
+		/usr/bin/moc
+	/usr/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I'/home/daniel_j/documents/school/2016 research project/RGBController/qt/RGBController' -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtSerialPort -I/usr/include/qt/QtNetwork -I/usr/include/qt/QtCore -I. -I/usr/include/c++/6.3.1 -I/usr/include/c++/6.3.1/x86_64-pc-linux-gnu -I/usr/include/c++/6.3.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed -I/usr/include ../RGBController/controllerwindow.h -o moc_controllerwindow.cpp
 
-compiler_rcc_make_all:
-compiler_rcc_clean:
-compiler_image_collection_make_all: qmake_image_collection.cpp
-compiler_image_collection_clean:
-	-$(DEL_FILE) qmake_image_collection.cpp
 compiler_moc_source_make_all:
 compiler_moc_source_clean:
 compiler_uic_make_all: ui_controllerwindow.h
 compiler_uic_clean:
 	-$(DEL_FILE) ui_controllerwindow.h
-ui_controllerwindow.h: ../RGBController/controllerwindow.ui
-	/usr/lib/qt4/bin/uic ../RGBController/controllerwindow.ui -o ui_controllerwindow.h
+ui_controllerwindow.h: ../RGBController/controllerwindow.ui \
+		/usr/bin/uic
+	/usr/bin/uic ../RGBController/controllerwindow.ui -o ui_controllerwindow.h
 
 compiler_yacc_decl_make_all:
 compiler_yacc_decl_clean:
@@ -215,7 +823,7 @@ compiler_yacc_impl_make_all:
 compiler_yacc_impl_clean:
 compiler_lex_make_all:
 compiler_lex_clean:
-compiler_clean: compiler_moc_header_clean compiler_uic_clean 
+compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean 
 
 ####### Compile
 
@@ -239,9 +847,9 @@ moc_controllerwindow.o: moc_controllerwindow.cpp
 
 ####### Install
 
-install:   FORCE
+install:  FORCE
 
-uninstall:   FORCE
+uninstall:  FORCE
 
 FORCE:
 
diff --git a/qt/build-RGBController-Desktop-Debug/RGBController b/qt/build-RGBController-Desktop-Debug/RGBController
new file mode 100755
index 0000000..645bc31
Binary files /dev/null and b/qt/build-RGBController-Desktop-Debug/RGBController differ
diff --git a/qt/build-RGBController-Desktop-Debug/moc_controllerwindow.cpp b/qt/build-RGBController-Desktop-Debug/moc_controllerwindow.cpp
new file mode 100644
index 0000000..9e86e81
--- /dev/null
+++ b/qt/build-RGBController-Desktop-Debug/moc_controllerwindow.cpp
@@ -0,0 +1,247 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'controllerwindow.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.8.0)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../RGBController/controllerwindow.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'controllerwindow.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.8.0. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_controllerWindow_t {
+    QByteArrayData data[33];
+    char stringdata0[777];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_controllerWindow_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_controllerWindow_t qt_meta_stringdata_controllerWindow = {
+    {
+QT_MOC_LITERAL(0, 0, 16), // "controllerWindow"
+QT_MOC_LITERAL(1, 17, 25), // "on_connect_button_clicked"
+QT_MOC_LITERAL(2, 43, 0), // ""
+QT_MOC_LITERAL(3, 44, 28), // "on_disconnect_button_clicked"
+QT_MOC_LITERAL(4, 73, 30), // "on_refresh_port_button_clicked"
+QT_MOC_LITERAL(5, 104, 31), // "on_reload_preset_button_clicked"
+QT_MOC_LITERAL(6, 136, 24), // "on_r_slider_valueChanged"
+QT_MOC_LITERAL(7, 161, 5), // "value"
+QT_MOC_LITERAL(8, 167, 24), // "on_g_slider_valueChanged"
+QT_MOC_LITERAL(9, 192, 24), // "on_b_slider_valueChanged"
+QT_MOC_LITERAL(10, 217, 21), // "on_red_button_clicked"
+QT_MOC_LITERAL(11, 239, 23), // "on_green_button_clicked"
+QT_MOC_LITERAL(12, 263, 22), // "on_blue_button_clicked"
+QT_MOC_LITERAL(13, 286, 21), // "on_off_button_clicked"
+QT_MOC_LITERAL(14, 308, 28), // "on_set_preset_button_clicked"
+QT_MOC_LITERAL(15, 337, 39), // "on_presets_dropdown_currentIn..."
+QT_MOC_LITERAL(16, 377, 5), // "index"
+QT_MOC_LITERAL(17, 383, 29), // "on_preset_save_button_clicked"
+QT_MOC_LITERAL(18, 413, 31), // "on_preset_delete_button_clicked"
+QT_MOC_LITERAL(19, 445, 26), // "on_red_fade_button_clicked"
+QT_MOC_LITERAL(20, 472, 28), // "on_green_fade_button_clicked"
+QT_MOC_LITERAL(21, 501, 27), // "on_blue_fade_button_clicked"
+QT_MOC_LITERAL(22, 529, 23), // "on_speed_button_clicked"
+QT_MOC_LITERAL(23, 553, 30), // "on_r_speed_slider_valueChanged"
+QT_MOC_LITERAL(24, 584, 30), // "on_g_speed_slider_valueChanged"
+QT_MOC_LITERAL(25, 615, 30), // "on_b_speed_slider_valueChanged"
+QT_MOC_LITERAL(26, 646, 21), // "on_rfrom_valueChanged"
+QT_MOC_LITERAL(27, 668, 4), // "arg1"
+QT_MOC_LITERAL(28, 673, 19), // "on_rto_valueChanged"
+QT_MOC_LITERAL(29, 693, 21), // "on_gfrom_valueChanged"
+QT_MOC_LITERAL(30, 715, 19), // "on_gto_valueChanged"
+QT_MOC_LITERAL(31, 735, 21), // "on_bfrom_valueChanged"
+QT_MOC_LITERAL(32, 757, 19) // "on_bto_valueChanged"
+
+    },
+    "controllerWindow\0on_connect_button_clicked\0"
+    "\0on_disconnect_button_clicked\0"
+    "on_refresh_port_button_clicked\0"
+    "on_reload_preset_button_clicked\0"
+    "on_r_slider_valueChanged\0value\0"
+    "on_g_slider_valueChanged\0"
+    "on_b_slider_valueChanged\0on_red_button_clicked\0"
+    "on_green_button_clicked\0on_blue_button_clicked\0"
+    "on_off_button_clicked\0"
+    "on_set_preset_button_clicked\0"
+    "on_presets_dropdown_currentIndexChanged\0"
+    "index\0on_preset_save_button_clicked\0"
+    "on_preset_delete_button_clicked\0"
+    "on_red_fade_button_clicked\0"
+    "on_green_fade_button_clicked\0"
+    "on_blue_fade_button_clicked\0"
+    "on_speed_button_clicked\0"
+    "on_r_speed_slider_valueChanged\0"
+    "on_g_speed_slider_valueChanged\0"
+    "on_b_speed_slider_valueChanged\0"
+    "on_rfrom_valueChanged\0arg1\0"
+    "on_rto_valueChanged\0on_gfrom_valueChanged\0"
+    "on_gto_valueChanged\0on_bfrom_valueChanged\0"
+    "on_bto_valueChanged"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_controllerWindow[] = {
+
+ // content:
+       7,       // revision
+       0,       // classname
+       0,    0, // classinfo
+      28,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+       1,    0,  154,    2, 0x08 /* Private */,
+       3,    0,  155,    2, 0x08 /* Private */,
+       4,    0,  156,    2, 0x08 /* Private */,
+       5,    0,  157,    2, 0x08 /* Private */,
+       6,    1,  158,    2, 0x08 /* Private */,
+       8,    1,  161,    2, 0x08 /* Private */,
+       9,    1,  164,    2, 0x08 /* Private */,
+      10,    0,  167,    2, 0x08 /* Private */,
+      11,    0,  168,    2, 0x08 /* Private */,
+      12,    0,  169,    2, 0x08 /* Private */,
+      13,    0,  170,    2, 0x08 /* Private */,
+      14,    0,  171,    2, 0x08 /* Private */,
+      15,    1,  172,    2, 0x08 /* Private */,
+      17,    0,  175,    2, 0x08 /* Private */,
+      18,    0,  176,    2, 0x08 /* Private */,
+      19,    0,  177,    2, 0x08 /* Private */,
+      20,    0,  178,    2, 0x08 /* Private */,
+      21,    0,  179,    2, 0x08 /* Private */,
+      22,    0,  180,    2, 0x08 /* Private */,
+      23,    1,  181,    2, 0x08 /* Private */,
+      24,    1,  184,    2, 0x08 /* Private */,
+      25,    1,  187,    2, 0x08 /* Private */,
+      26,    1,  190,    2, 0x08 /* Private */,
+      28,    1,  193,    2, 0x08 /* Private */,
+      29,    1,  196,    2, 0x08 /* Private */,
+      30,    1,  199,    2, 0x08 /* Private */,
+      31,    1,  202,    2, 0x08 /* Private */,
+      32,    1,  205,    2, 0x08 /* Private */,
+
+ // slots: parameters
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::Int,    7,
+    QMetaType::Void, QMetaType::Int,    7,
+    QMetaType::Void, QMetaType::Int,    7,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::Int,   16,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void,
+    QMetaType::Void, QMetaType::Int,    7,
+    QMetaType::Void, QMetaType::Int,    7,
+    QMetaType::Void, QMetaType::Int,    7,
+    QMetaType::Void, QMetaType::Int,   27,
+    QMetaType::Void, QMetaType::Int,   27,
+    QMetaType::Void, QMetaType::Int,   27,
+    QMetaType::Void, QMetaType::Int,   27,
+    QMetaType::Void, QMetaType::Int,   27,
+    QMetaType::Void, QMetaType::Int,   27,
+
+       0        // eod
+};
+
+void controllerWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        controllerWindow *_t = static_cast<controllerWindow *>(_o);
+        Q_UNUSED(_t)
+        switch (_id) {
+        case 0: _t->on_connect_button_clicked(); break;
+        case 1: _t->on_disconnect_button_clicked(); break;
+        case 2: _t->on_refresh_port_button_clicked(); break;
+        case 3: _t->on_reload_preset_button_clicked(); break;
+        case 4: _t->on_r_slider_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 5: _t->on_g_slider_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 6: _t->on_b_slider_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 7: _t->on_red_button_clicked(); break;
+        case 8: _t->on_green_button_clicked(); break;
+        case 9: _t->on_blue_button_clicked(); break;
+        case 10: _t->on_off_button_clicked(); break;
+        case 11: _t->on_set_preset_button_clicked(); break;
+        case 12: _t->on_presets_dropdown_currentIndexChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 13: _t->on_preset_save_button_clicked(); break;
+        case 14: _t->on_preset_delete_button_clicked(); break;
+        case 15: _t->on_red_fade_button_clicked(); break;
+        case 16: _t->on_green_fade_button_clicked(); break;
+        case 17: _t->on_blue_fade_button_clicked(); break;
+        case 18: _t->on_speed_button_clicked(); break;
+        case 19: _t->on_r_speed_slider_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 20: _t->on_g_speed_slider_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 21: _t->on_b_speed_slider_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 22: _t->on_rfrom_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 23: _t->on_rto_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 24: _t->on_gfrom_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 25: _t->on_gto_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 26: _t->on_bfrom_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        case 27: _t->on_bto_valueChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
+        default: ;
+        }
+    }
+}
+
+const QMetaObject controllerWindow::staticMetaObject = {
+    { &QMainWindow::staticMetaObject, qt_meta_stringdata_controllerWindow.data,
+      qt_meta_data_controllerWindow,  qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
+};
+
+
+const QMetaObject *controllerWindow::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *controllerWindow::qt_metacast(const char *_clname)
+{
+    if (!_clname) return Q_NULLPTR;
+    if (!strcmp(_clname, qt_meta_stringdata_controllerWindow.stringdata0))
+        return static_cast<void*>(const_cast< controllerWindow*>(this));
+    return QMainWindow::qt_metacast(_clname);
+}
+
+int controllerWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QMainWindow::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        if (_id < 28)
+            qt_static_metacall(this, _c, _id, _a);
+        _id -= 28;
+    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+        if (_id < 28)
+            *reinterpret_cast<int*>(_a[0]) = -1;
+        _id -= 28;
+    }
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE
diff --git a/qt/build-RGBController-Desktop-Debug/moc_predefs.h b/qt/build-RGBController-Desktop-Debug/moc_predefs.h
new file mode 100644
index 0000000..982a21d
--- /dev/null
+++ b/qt/build-RGBController-Desktop-Debug/moc_predefs.h
@@ -0,0 +1,291 @@
+#define __DBL_MIN_EXP__ (-1021)
+#define __cpp_attributes 200809
+#define __UINT_LEAST16_MAX__ 0xffff
+#define __ATOMIC_ACQUIRE 2
+#define __FLT_MIN__ 1.17549435082228750797e-38F
+#define __GCC_IEC_559_COMPLEX 2
+#define __cpp_aggregate_nsdmi 201304
+#define __UINT_LEAST8_TYPE__ unsigned char
+#define __SIZEOF_FLOAT80__ 16
+#define __INTMAX_C(c) c ## L
+#define __CHAR_BIT__ 8
+#define __UINT8_MAX__ 0xff
+#define __WINT_MAX__ 0xffffffffU
+#define __cpp_static_assert 200410
+#define __ORDER_LITTLE_ENDIAN__ 1234
+#define __SIZE_MAX__ 0xffffffffffffffffUL
+#define __WCHAR_MAX__ 0x7fffffff
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
+#define __DBL_DENORM_MIN__ double(4.94065645841246544177e-324L)
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
+#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
+#define __GCC_IEC_559 2
+#define __FLT_EVAL_METHOD__ 0
+#define __unix__ 1
+#define __cpp_binary_literals 201304
+#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
+#define __x86_64 1
+#define __cpp_variadic_templates 200704
+#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
+#define __SIG_ATOMIC_TYPE__ int
+#define __DBL_MIN_10_EXP__ (-307)
+#define __FINITE_MATH_ONLY__ 0
+#define __cpp_variable_templates 201304
+#define __GNUC_PATCHLEVEL__ 1
+#define __UINT_FAST8_MAX__ 0xff
+#define __has_include(STR) __has_include__(STR)
+#define __DEC64_MAX_EXP__ 385
+#define __INT8_C(c) c
+#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
+#define __SHRT_MAX__ 0x7fff
+#define __LDBL_MAX__ 1.18973149535723176502e+4932L
+#define __UINT_LEAST8_MAX__ 0xff
+#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
+#define __UINTMAX_TYPE__ long unsigned int
+#define __linux 1
+#define __DEC32_EPSILON__ 1E-6DF
+#define __unix 1
+#define __UINT32_MAX__ 0xffffffffU
+#define __GXX_EXPERIMENTAL_CXX0X__ 1
+#define __LDBL_MAX_EXP__ 16384
+#define __WINT_MIN__ 0U
+#define __linux__ 1
+#define __SCHAR_MAX__ 0x7f
+#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
+#define __INT64_C(c) c ## L
+#define __DBL_DIG__ 15
+#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+#define __SIZEOF_INT__ 4
+#define __SIZEOF_POINTER__ 8
+#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+#define __USER_LABEL_PREFIX__ 
+#define __STDC_HOSTED__ 1
+#define __LDBL_HAS_INFINITY__ 1
+#define __FLT_EPSILON__ 1.19209289550781250000e-7F
+#define __GXX_WEAK__ 1
+#define __LDBL_MIN__ 3.36210314311209350626e-4932L
+#define __DEC32_MAX__ 9.999999E96DF
+#define __INT32_MAX__ 0x7fffffff
+#define __SIZEOF_LONG__ 8
+#define __STDC_IEC_559__ 1
+#define __STDC_ISO_10646__ 201505L
+#define __UINT16_C(c) c
+#define __DECIMAL_DIG__ 21
+#define __gnu_linux__ 1
+#define __has_include_next(STR) __has_include_next__(STR)
+#define __LDBL_HAS_QUIET_NAN__ 1
+#define __GNUC__ 6
+#define __GXX_RTTI 1
+#define __MMX__ 1
+#define __cpp_delegating_constructors 200604
+#define __FLT_HAS_DENORM__ 1
+#define __SIZEOF_LONG_DOUBLE__ 16
+#define __BIGGEST_ALIGNMENT__ 16
+#define __STDC_UTF_16__ 1
+#define __DBL_MAX__ double(1.79769313486231570815e+308L)
+#define __cpp_raw_strings 200710
+#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
+#define __DBL_HAS_INFINITY__ 1
+#define __INT64_MAX__ 0x7fffffffffffffffL
+#define __DEC32_MIN_EXP__ (-94)
+#define __INT_FAST16_TYPE__ long int
+#define __LDBL_HAS_DENORM__ 1
+#define __cplusplus 201402L
+#define __cpp_ref_qualifiers 200710
+#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
+#define __INT_LEAST32_MAX__ 0x7fffffff
+#define __DEC32_MIN__ 1E-95DF
+#define __DEPRECATED 1
+#define __cpp_rvalue_references 200610
+#define __DBL_MAX_EXP__ 1024
+#define __DEC128_EPSILON__ 1E-33DL
+#define __SSE2_MATH__ 1
+#define __ATOMIC_HLE_RELEASE 131072
+#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
+#define __amd64 1
+#define __STDC_NO_THREADS__ 1
+#define __ATOMIC_HLE_ACQUIRE 65536
+#define __GNUG__ 6
+#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
+#define __SIZEOF_SIZE_T__ 8
+#define __cpp_rvalue_reference 200610
+#define __cpp_nsdmi 200809
+#define __SIZEOF_WINT_T__ 4
+#define __cpp_initializer_lists 200806
+#define __cpp_hex_float 201603
+#define __GCC_HAVE_DWARF2_CFI_ASM 1
+#define __GXX_ABI_VERSION 1010
+#define __FLT_MIN_EXP__ (-125)
+#define __cpp_lambdas 200907
+#define __INT_FAST64_TYPE__ long int
+#define __DBL_MIN__ double(2.22507385850720138309e-308L)
+#define __LP64__ 1
+#define __DECIMAL_BID_FORMAT__ 1
+#define __DEC128_MIN__ 1E-6143DL
+#define __REGISTER_PREFIX__ 
+#define __UINT16_MAX__ 0xffff
+#define __DBL_HAS_DENORM__ 1
+#define __UINT8_TYPE__ unsigned char
+#define __NO_INLINE__ 1
+#define __FLT_MANT_DIG__ 24
+#define __VERSION__ "6.3.1 20170109"
+#define __UINT64_C(c) c ## UL
+#define __cpp_unicode_characters 200704
+#define _STDC_PREDEF_H 1
+#define __cpp_decltype_auto 201304
+#define __GCC_ATOMIC_INT_LOCK_FREE 2
+#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __STDC_IEC_559_COMPLEX__ 1
+#define __INT32_C(c) c
+#define __DEC64_EPSILON__ 1E-15DD
+#define __ORDER_PDP_ENDIAN__ 3412
+#define __DEC128_MIN_EXP__ (-6142)
+#define __INT_FAST32_TYPE__ long int
+#define __UINT_LEAST16_TYPE__ short unsigned int
+#define unix 1
+#define __INT16_MAX__ 0x7fff
+#define __cpp_rtti 199711
+#define __SIZE_TYPE__ long unsigned int
+#define __UINT64_MAX__ 0xffffffffffffffffUL
+#define __INT8_TYPE__ signed char
+#define __cpp_digit_separators 201309
+#define __ELF__ 1
+#define __GCC_ASM_FLAG_OUTPUTS__ 1
+#define __FLT_RADIX__ 2
+#define __INT_LEAST16_TYPE__ short int
+#define __LDBL_EPSILON__ 1.08420217248550443401e-19L
+#define __UINTMAX_C(c) c ## UL
+#define __GLIBCXX_BITSIZE_INT_N_0 128
+#define __k8 1
+#define __SIG_ATOMIC_MAX__ 0x7fffffff
+#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
+#define __cpp_sized_deallocation 201309
+#define __SIZEOF_PTRDIFF_T__ 8
+#define __x86_64__ 1
+#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
+#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
+#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
+#define __UINT_LEAST64_TYPE__ long unsigned int
+#define __FLT_HAS_QUIET_NAN__ 1
+#define __FLT_MAX_10_EXP__ 38
+#define __LONG_MAX__ 0x7fffffffffffffffL
+#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
+#define __FLT_HAS_INFINITY__ 1
+#define __cpp_unicode_literals 200710
+#define __UINT_FAST16_TYPE__ long unsigned int
+#define __DEC64_MAX__ 9.999999999999999E384DD
+#define __CHAR16_TYPE__ short unsigned int
+#define __PRAGMA_REDEFINE_EXTNAME 1
+#define __SEG_FS 1
+#define __INT_LEAST16_MAX__ 0x7fff
+#define __DEC64_MANT_DIG__ 16
+#define __UINT_LEAST32_MAX__ 0xffffffffU
+#define __SEG_GS 1
+#define __GCC_ATOMIC_LONG_LOCK_FREE 2
+#define __INT_LEAST64_TYPE__ long int
+#define __INT16_TYPE__ short int
+#define __INT_LEAST8_TYPE__ signed char
+#define __DEC32_MAX_EXP__ 97
+#define __INT_FAST8_MAX__ 0x7f
+#define __INTPTR_MAX__ 0x7fffffffffffffffL
+#define linux 1
+#define __cpp_range_based_for 200907
+#define __SSE2__ 1
+#define __EXCEPTIONS 1
+#define __LDBL_MANT_DIG__ 64
+#define __DBL_HAS_QUIET_NAN__ 1
+#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
+#define __code_model_small__ 1
+#define __cpp_return_type_deduction 201304
+#define __k8__ 1
+#define __INTPTR_TYPE__ long int
+#define __UINT16_TYPE__ short unsigned int
+#define __WCHAR_TYPE__ int
+#define __SIZEOF_FLOAT__ 4
+#define __UINTPTR_MAX__ 0xffffffffffffffffUL
+#define __DEC64_MIN_EXP__ (-382)
+#define __cpp_decltype 200707
+#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
+#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
+#define __FLT_DIG__ 6
+#define __UINT_FAST64_TYPE__ long unsigned int
+#define __INT_MAX__ 0x7fffffff
+#define __amd64__ 1
+#define __INT64_TYPE__ long int
+#define __FLT_MAX_EXP__ 128
+#define __ORDER_BIG_ENDIAN__ 4321
+#define __DBL_MANT_DIG__ 53
+#define __cpp_inheriting_constructors 200802
+#define __SIZEOF_FLOAT128__ 16
+#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
+#define __DEC64_MIN__ 1E-383DD
+#define __WINT_TYPE__ unsigned int
+#define __UINT_LEAST32_TYPE__ unsigned int
+#define __SIZEOF_SHORT__ 2
+#define __SSE__ 1
+#define __LDBL_MIN_EXP__ (-16381)
+#define __INT_LEAST8_MAX__ 0x7f
+#define __SIZEOF_INT128__ 16
+#define __LDBL_MAX_10_EXP__ 4932
+#define __ATOMIC_RELAXED 0
+#define __DBL_EPSILON__ double(2.22044604925031308085e-16L)
+#define _LP64 1
+#define __UINT8_C(c) c
+#define __INT_LEAST32_TYPE__ int
+#define __SIZEOF_WCHAR_T__ 4
+#define __UINT64_TYPE__ long unsigned int
+#define __INT_FAST8_TYPE__ signed char
+#define __GNUC_STDC_INLINE__ 1
+#define __DBL_DECIMAL_DIG__ 17
+#define __STDC_UTF_32__ 1
+#define __FXSR__ 1
+#define __DEC_EVAL_METHOD__ 2
+#define __cpp_runtime_arrays 198712
+#define __UINT32_C(c) c ## U
+#define __INTMAX_MAX__ 0x7fffffffffffffffL
+#define __cpp_alias_templates 200704
+#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __FLT_DENORM_MIN__ 1.40129846432481707092e-45F
+#define __INT8_MAX__ 0x7f
+#define __UINT_FAST32_TYPE__ long unsigned int
+#define __CHAR32_TYPE__ unsigned int
+#define __FLT_MAX__ 3.40282346638528859812e+38F
+#define __cpp_constexpr 201304
+#define __INT32_TYPE__ int
+#define __SIZEOF_DOUBLE__ 8
+#define __cpp_exceptions 199711
+#define __INTMAX_TYPE__ long int
+#define __DEC128_MAX_EXP__ 6145
+#define __ATOMIC_CONSUME 1
+#define __GNUC_MINOR__ 3
+#define __GLIBCXX_TYPE_INT_N_0 __int128
+#define __UINTMAX_MAX__ 0xffffffffffffffffUL
+#define __DEC32_MANT_DIG__ 7
+#define __DBL_MAX_10_EXP__ 308
+#define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L
+#define __INT16_C(c) c
+#define __cpp_generic_lambdas 201304
+#define __STDC__ 1
+#define __PTRDIFF_TYPE__ long int
+#define __ATOMIC_SEQ_CST 5
+#define __UINT32_TYPE__ unsigned int
+#define __UINTPTR_TYPE__ long unsigned int
+#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
+#define __DEC128_MANT_DIG__ 34
+#define __LDBL_MIN_10_EXP__ (-4931)
+#define __SSE_MATH__ 1
+#define __SIZEOF_LONG_LONG__ 8
+#define __cpp_user_defined_literals 200809
+#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
+#define __LDBL_DIG__ 18
+#define __FLT_DECIMAL_DIG__ 9
+#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL
+#define __FLT_MIN_10_EXP__ (-37)
+#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
+#define __UINT_FAST8_TYPE__ unsigned char
+#define _GNU_SOURCE 1
+#define __cpp_init_captures 201304
+#define __ATOMIC_ACQ_REL 4
+#define __ATOMIC_RELEASE 3
diff --git a/qt/build-RGBController-Desktop-Debug/presets.txt b/qt/build-RGBController-Desktop-Debug/presets.txt
new file mode 100644
index 0000000..894c96c
--- /dev/null
+++ b/qt/build-RGBController-Desktop-Debug/presets.txt
@@ -0,0 +1 @@
+blue=0,0,255
diff --git a/qt/build-RGBController-Desktop-Debug/ui_controllerwindow.h b/qt/build-RGBController-Desktop-Debug/ui_controllerwindow.h
index 2b317f2..5c2c857 100644
--- a/qt/build-RGBController-Desktop-Debug/ui_controllerwindow.h
+++ b/qt/build-RGBController-Desktop-Debug/ui_controllerwindow.h
@@ -1,7 +1,7 @@
 /********************************************************************************
 ** Form generated from reading UI file 'controllerwindow.ui'
 **
-** Created by: Qt User Interface Compiler version 4.8.7
+** Created by: Qt User Interface Compiler version 5.8.0
 **
 ** WARNING! All changes made in this file will be lost when recompiling UI file!
 ********************************************************************************/
@@ -10,20 +10,20 @@
 #define UI_CONTROLLERWINDOW_H
 
 #include <QtCore/QVariant>
-#include <QtGui/QAction>
-#include <QtGui/QApplication>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QComboBox>
-#include <QtGui/QGridLayout>
-#include <QtGui/QHeaderView>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QMainWindow>
-#include <QtGui/QPushButton>
-#include <QtGui/QSlider>
-#include <QtGui/QSpinBox>
-#include <QtGui/QTextEdit>
-#include <QtGui/QWidget>
+#include <QtWidgets/QAction>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QButtonGroup>
+#include <QtWidgets/QComboBox>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QLineEdit>
+#include <QtWidgets/QMainWindow>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QSlider>
+#include <QtWidgets/QSpinBox>
+#include <QtWidgets/QTextEdit>
+#include <QtWidgets/QWidget>
 
 QT_BEGIN_NAMESPACE
 
@@ -32,117 +32,173 @@ class Ui_controllerWindow
 public:
     QWidget *centralWidget;
     QGridLayout *gridLayout_2;
+    QPushButton *reload_preset_button;
+    QPushButton *off_button;
+    QPushButton *preset_delete_button;
+    QLabel *presets_label;
+    QPushButton *disconnect_button;
     QLabel *arduino_status_label;
-    QLabel *arduino_port_label;
     QComboBox *arduino_port_dropdown;
+    QSlider *b_slider;
+    QSlider *b_speed_slider;
+    QTextEdit *info_log_textarea;
+    QLineEdit *preset_name_textbox;
+    QComboBox *presets_dropdown;
+    QLabel *info_log_label;
+    QPushButton *green_button;
     QPushButton *refresh_port_button;
-    QSlider *r_slider;
-    QPushButton *connect_button;
-    QPushButton *disconnect_button;
+    QSlider *g_speed_slider;
     QLabel *rgb_label;
-    QComboBox *presets_dropdown;
-    QPushButton *red_button;
+    QLabel *status_label;
+    QPushButton *preset_save_button;
     QSlider *g_slider;
-    QPushButton *green_button;
-    QSlider *b_slider;
+    QSlider *r_speed_slider;
+    QLabel *g_speed_label;
+    QPushButton *red_button;
     QPushButton *blue_button;
-    QPushButton *off_button;
+    QPushButton *connect_button;
+    QLabel *r_speed_label;
+    QSlider *r_slider;
     QPushButton *set_preset_button;
-    QPushButton *reload_preset_button;
-    QLineEdit *preset_name_textbox;
-    QPushButton *preset_save_button;
-    QLabel *presets_label;
-    QLabel *status_label;
-    QPushButton *preset_delete_button;
     QGridLayout *gridLayout;
-    QPushButton *pushButton_3;
-    QSpinBox *spinBox;
-    QSpinBox *spinBox_4;
-    QSpinBox *spinBox_3;
-    QLabel *label;
-    QSpinBox *spinBox_2;
-    QLabel *label_2;
-    QSpinBox *spinBox_6;
-    QSpinBox *spinBox_5;
-    QPushButton *pushButton_2;
-    QPushButton *pushButton;
-    QLabel *label_3;
-    QLabel *label_4;
-    QLabel *info_log_label;
-    QTextEdit *info_log_textarea;
-    QSlider *speed_slider;
+    QPushButton *blue_fade_button;
+    QSpinBox *bfrom;
+    QSpinBox *rto;
+    QSpinBox *gfrom;
+    QLabel *r_to_label;
+    QSpinBox *rfrom;
+    QLabel *g_to_label;
+    QSpinBox *bto;
+    QSpinBox *gto;
+    QPushButton *green_fade_button;
+    QPushButton *red_fade_button;
+    QLabel *_to_label;
+    QLabel *fade_label;
+    QLabel *arduino_port_label;
+    QLabel *b_speed_label;
     QPushButton *speed_button;
+    QSlider *speed_slider;
 
     void setupUi(QMainWindow *controllerWindow)
     {
         if (controllerWindow->objectName().isEmpty())
-            controllerWindow->setObjectName(QString::fromUtf8("controllerWindow"));
+            controllerWindow->setObjectName(QStringLiteral("controllerWindow"));
         controllerWindow->setWindowModality(Qt::WindowModal);
-        controllerWindow->resize(227, 499);
+        controllerWindow->resize(232, 629);
         centralWidget = new QWidget(controllerWindow);
-        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+        centralWidget->setObjectName(QStringLiteral("centralWidget"));
         gridLayout_2 = new QGridLayout(centralWidget);
         gridLayout_2->setSpacing(6);
         gridLayout_2->setContentsMargins(11, 11, 11, 11);
-        gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
-        arduino_status_label = new QLabel(centralWidget);
-        arduino_status_label->setObjectName(QString::fromUtf8("arduino_status_label"));
+        gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
+        reload_preset_button = new QPushButton(centralWidget);
+        reload_preset_button->setObjectName(QStringLiteral("reload_preset_button"));
 
-        gridLayout_2->addWidget(arduino_status_label, 0, 1, 1, 1);
+        gridLayout_2->addWidget(reload_preset_button, 11, 0, 1, 1);
 
-        arduino_port_label = new QLabel(centralWidget);
-        arduino_port_label->setObjectName(QString::fromUtf8("arduino_port_label"));
-        arduino_port_label->setMinimumSize(QSize(120, 0));
+        off_button = new QPushButton(centralWidget);
+        off_button->setObjectName(QStringLiteral("off_button"));
 
-        gridLayout_2->addWidget(arduino_port_label, 1, 0, 1, 1);
+        gridLayout_2->addWidget(off_button, 8, 1, 1, 1);
+
+        preset_delete_button = new QPushButton(centralWidget);
+        preset_delete_button->setObjectName(QStringLiteral("preset_delete_button"));
+
+        gridLayout_2->addWidget(preset_delete_button, 13, 1, 1, 1);
+
+        presets_label = new QLabel(centralWidget);
+        presets_label->setObjectName(QStringLiteral("presets_label"));
+
+        gridLayout_2->addWidget(presets_label, 9, 0, 1, 1);
+
+        disconnect_button = new QPushButton(centralWidget);
+        disconnect_button->setObjectName(QStringLiteral("disconnect_button"));
+
+        gridLayout_2->addWidget(disconnect_button, 3, 1, 1, 1);
+
+        arduino_status_label = new QLabel(centralWidget);
+        arduino_status_label->setObjectName(QStringLiteral("arduino_status_label"));
+
+        gridLayout_2->addWidget(arduino_status_label, 0, 1, 1, 1);
 
         arduino_port_dropdown = new QComboBox(centralWidget);
-        arduino_port_dropdown->setObjectName(QString::fromUtf8("arduino_port_dropdown"));
+        arduino_port_dropdown->setObjectName(QStringLiteral("arduino_port_dropdown"));
 
         gridLayout_2->addWidget(arduino_port_dropdown, 1, 1, 1, 1);
 
-        refresh_port_button = new QPushButton(centralWidget);
-        refresh_port_button->setObjectName(QString::fromUtf8("refresh_port_button"));
+        b_slider = new QSlider(centralWidget);
+        b_slider->setObjectName(QStringLiteral("b_slider"));
+        b_slider->setMinimumSize(QSize(120, 0));
+        b_slider->setMaximumSize(QSize(120, 16777215));
+        b_slider->setMaximum(255);
+        b_slider->setOrientation(Qt::Horizontal);
 
-        gridLayout_2->addWidget(refresh_port_button, 2, 1, 1, 1);
+        gridLayout_2->addWidget(b_slider, 7, 0, 1, 1);
 
-        r_slider = new QSlider(centralWidget);
-        r_slider->setObjectName(QString::fromUtf8("r_slider"));
-        r_slider->setMinimumSize(QSize(120, 0));
-        r_slider->setMaximumSize(QSize(120, 16777215));
-        r_slider->setMaximum(255);
-        r_slider->setOrientation(Qt::Horizontal);
+        b_speed_slider = new QSlider(centralWidget);
+        b_speed_slider->setObjectName(QStringLiteral("b_speed_slider"));
+        b_speed_slider->setMinimum(1);
+        b_speed_slider->setMaximum(500);
+        b_speed_slider->setOrientation(Qt::Horizontal);
 
-        gridLayout_2->addWidget(r_slider, 5, 0, 1, 1);
+        gridLayout_2->addWidget(b_speed_slider, 17, 0, 1, 1);
 
-        connect_button = new QPushButton(centralWidget);
-        connect_button->setObjectName(QString::fromUtf8("connect_button"));
+        info_log_textarea = new QTextEdit(centralWidget);
+        info_log_textarea->setObjectName(QStringLiteral("info_log_textarea"));
 
-        gridLayout_2->addWidget(connect_button, 3, 0, 1, 1);
+        gridLayout_2->addWidget(info_log_textarea, 20, 0, 1, 2);
 
-        disconnect_button = new QPushButton(centralWidget);
-        disconnect_button->setObjectName(QString::fromUtf8("disconnect_button"));
+        preset_name_textbox = new QLineEdit(centralWidget);
+        preset_name_textbox->setObjectName(QStringLiteral("preset_name_textbox"));
 
-        gridLayout_2->addWidget(disconnect_button, 3, 1, 1, 1);
+        gridLayout_2->addWidget(preset_name_textbox, 12, 0, 1, 1);
+
+        presets_dropdown = new QComboBox(centralWidget);
+        presets_dropdown->setObjectName(QStringLiteral("presets_dropdown"));
+        presets_dropdown->setMinimumSize(QSize(120, 0));
+
+        gridLayout_2->addWidget(presets_dropdown, 10, 0, 1, 1);
+
+        info_log_label = new QLabel(centralWidget);
+        info_log_label->setObjectName(QStringLiteral("info_log_label"));
+
+        gridLayout_2->addWidget(info_log_label, 19, 0, 1, 1);
+
+        green_button = new QPushButton(centralWidget);
+        green_button->setObjectName(QStringLiteral("green_button"));
+
+        gridLayout_2->addWidget(green_button, 6, 1, 1, 1);
+
+        refresh_port_button = new QPushButton(centralWidget);
+        refresh_port_button->setObjectName(QStringLiteral("refresh_port_button"));
+
+        gridLayout_2->addWidget(refresh_port_button, 2, 1, 1, 1);
+
+        g_speed_slider = new QSlider(centralWidget);
+        g_speed_slider->setObjectName(QStringLiteral("g_speed_slider"));
+        g_speed_slider->setMinimum(1);
+        g_speed_slider->setMaximum(500);
+        g_speed_slider->setOrientation(Qt::Horizontal);
+
+        gridLayout_2->addWidget(g_speed_slider, 16, 0, 1, 1);
 
         rgb_label = new QLabel(centralWidget);
-        rgb_label->setObjectName(QString::fromUtf8("rgb_label"));
+        rgb_label->setObjectName(QStringLiteral("rgb_label"));
 
         gridLayout_2->addWidget(rgb_label, 4, 0, 1, 1);
 
-        presets_dropdown = new QComboBox(centralWidget);
-        presets_dropdown->setObjectName(QString::fromUtf8("presets_dropdown"));
-        presets_dropdown->setMinimumSize(QSize(120, 0));
+        status_label = new QLabel(centralWidget);
+        status_label->setObjectName(QStringLiteral("status_label"));
 
-        gridLayout_2->addWidget(presets_dropdown, 10, 0, 1, 1);
+        gridLayout_2->addWidget(status_label, 0, 0, 1, 1);
 
-        red_button = new QPushButton(centralWidget);
-        red_button->setObjectName(QString::fromUtf8("red_button"));
+        preset_save_button = new QPushButton(centralWidget);
+        preset_save_button->setObjectName(QStringLiteral("preset_save_button"));
 
-        gridLayout_2->addWidget(red_button, 5, 1, 1, 1);
+        gridLayout_2->addWidget(preset_save_button, 12, 1, 1, 1);
 
         g_slider = new QSlider(centralWidget);
-        g_slider->setObjectName(QString::fromUtf8("g_slider"));
+        g_slider->setObjectName(QStringLiteral("g_slider"));
         g_slider->setMinimumSize(QSize(120, 0));
         g_slider->setMaximumSize(QSize(120, 16777215));
         g_slider->setMaximum(255);
@@ -150,164 +206,153 @@ public:
 
         gridLayout_2->addWidget(g_slider, 6, 0, 1, 1);
 
-        green_button = new QPushButton(centralWidget);
-        green_button->setObjectName(QString::fromUtf8("green_button"));
+        r_speed_slider = new QSlider(centralWidget);
+        r_speed_slider->setObjectName(QStringLiteral("r_speed_slider"));
+        r_speed_slider->setMinimum(1);
+        r_speed_slider->setMaximum(500);
+        r_speed_slider->setOrientation(Qt::Horizontal);
 
-        gridLayout_2->addWidget(green_button, 6, 1, 1, 1);
+        gridLayout_2->addWidget(r_speed_slider, 15, 0, 1, 1);
 
-        b_slider = new QSlider(centralWidget);
-        b_slider->setObjectName(QString::fromUtf8("b_slider"));
-        b_slider->setMinimumSize(QSize(120, 0));
-        b_slider->setMaximumSize(QSize(120, 16777215));
-        b_slider->setMaximum(255);
-        b_slider->setOrientation(Qt::Horizontal);
-
-        gridLayout_2->addWidget(b_slider, 7, 0, 1, 1);
-
-        blue_button = new QPushButton(centralWidget);
-        blue_button->setObjectName(QString::fromUtf8("blue_button"));
+        g_speed_label = new QLabel(centralWidget);
+        g_speed_label->setObjectName(QStringLiteral("g_speed_label"));
 
-        gridLayout_2->addWidget(blue_button, 7, 1, 1, 1);
-
-        off_button = new QPushButton(centralWidget);
-        off_button->setObjectName(QString::fromUtf8("off_button"));
-
-        gridLayout_2->addWidget(off_button, 8, 1, 1, 1);
+        gridLayout_2->addWidget(g_speed_label, 16, 1, 1, 1);
 
-        set_preset_button = new QPushButton(centralWidget);
-        set_preset_button->setObjectName(QString::fromUtf8("set_preset_button"));
-
-        gridLayout_2->addWidget(set_preset_button, 10, 1, 1, 1);
-
-        reload_preset_button = new QPushButton(centralWidget);
-        reload_preset_button->setObjectName(QString::fromUtf8("reload_preset_button"));
+        red_button = new QPushButton(centralWidget);
+        red_button->setObjectName(QStringLiteral("red_button"));
 
-        gridLayout_2->addWidget(reload_preset_button, 11, 0, 1, 1);
+        gridLayout_2->addWidget(red_button, 5, 1, 1, 1);
 
-        preset_name_textbox = new QLineEdit(centralWidget);
-        preset_name_textbox->setObjectName(QString::fromUtf8("preset_name_textbox"));
+        blue_button = new QPushButton(centralWidget);
+        blue_button->setObjectName(QStringLiteral("blue_button"));
 
-        gridLayout_2->addWidget(preset_name_textbox, 12, 0, 1, 1);
+        gridLayout_2->addWidget(blue_button, 7, 1, 1, 1);
 
-        preset_save_button = new QPushButton(centralWidget);
-        preset_save_button->setObjectName(QString::fromUtf8("preset_save_button"));
+        connect_button = new QPushButton(centralWidget);
+        connect_button->setObjectName(QStringLiteral("connect_button"));
 
-        gridLayout_2->addWidget(preset_save_button, 12, 1, 1, 1);
+        gridLayout_2->addWidget(connect_button, 3, 0, 1, 1);
 
-        presets_label = new QLabel(centralWidget);
-        presets_label->setObjectName(QString::fromUtf8("presets_label"));
+        r_speed_label = new QLabel(centralWidget);
+        r_speed_label->setObjectName(QStringLiteral("r_speed_label"));
 
-        gridLayout_2->addWidget(presets_label, 9, 0, 1, 1);
+        gridLayout_2->addWidget(r_speed_label, 15, 1, 1, 1);
 
-        status_label = new QLabel(centralWidget);
-        status_label->setObjectName(QString::fromUtf8("status_label"));
+        r_slider = new QSlider(centralWidget);
+        r_slider->setObjectName(QStringLiteral("r_slider"));
+        r_slider->setMinimumSize(QSize(120, 0));
+        r_slider->setMaximumSize(QSize(120, 16777215));
+        r_slider->setMaximum(255);
+        r_slider->setOrientation(Qt::Horizontal);
 
-        gridLayout_2->addWidget(status_label, 0, 0, 1, 1);
+        gridLayout_2->addWidget(r_slider, 5, 0, 1, 1);
 
-        preset_delete_button = new QPushButton(centralWidget);
-        preset_delete_button->setObjectName(QString::fromUtf8("preset_delete_button"));
+        set_preset_button = new QPushButton(centralWidget);
+        set_preset_button->setObjectName(QStringLiteral("set_preset_button"));
 
-        gridLayout_2->addWidget(preset_delete_button, 13, 1, 1, 1);
+        gridLayout_2->addWidget(set_preset_button, 10, 1, 1, 1);
 
         gridLayout = new QGridLayout();
         gridLayout->setSpacing(6);
-        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
-        pushButton_3 = new QPushButton(centralWidget);
-        pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
+        gridLayout->setObjectName(QStringLiteral("gridLayout"));
+        blue_fade_button = new QPushButton(centralWidget);
+        blue_fade_button->setObjectName(QStringLiteral("blue_fade_button"));
 
-        gridLayout->addWidget(pushButton_3, 4, 3, 1, 1);
+        gridLayout->addWidget(blue_fade_button, 4, 3, 1, 1);
 
-        spinBox = new QSpinBox(centralWidget);
-        spinBox->setObjectName(QString::fromUtf8("spinBox"));
-        spinBox->setMaximum(255);
+        bfrom = new QSpinBox(centralWidget);
+        bfrom->setObjectName(QStringLiteral("bfrom"));
+        bfrom->setMaximum(255);
 
-        gridLayout->addWidget(spinBox, 4, 0, 1, 1);
+        gridLayout->addWidget(bfrom, 4, 0, 1, 1);
 
-        spinBox_4 = new QSpinBox(centralWidget);
-        spinBox_4->setObjectName(QString::fromUtf8("spinBox_4"));
-        spinBox_4->setMaximum(255);
+        rto = new QSpinBox(centralWidget);
+        rto->setObjectName(QStringLiteral("rto"));
+        rto->setMaximum(255);
 
-        gridLayout->addWidget(spinBox_4, 1, 2, 1, 1);
+        gridLayout->addWidget(rto, 1, 2, 1, 1);
 
-        spinBox_3 = new QSpinBox(centralWidget);
-        spinBox_3->setObjectName(QString::fromUtf8("spinBox_3"));
-        spinBox_3->setMaximum(255);
+        gfrom = new QSpinBox(centralWidget);
+        gfrom->setObjectName(QStringLiteral("gfrom"));
+        gfrom->setMaximum(255);
 
-        gridLayout->addWidget(spinBox_3, 3, 0, 1, 1);
+        gridLayout->addWidget(gfrom, 3, 0, 1, 1);
 
-        label = new QLabel(centralWidget);
-        label->setObjectName(QString::fromUtf8("label"));
+        r_to_label = new QLabel(centralWidget);
+        r_to_label->setObjectName(QStringLiteral("r_to_label"));
 
-        gridLayout->addWidget(label, 1, 1, 1, 1);
+        gridLayout->addWidget(r_to_label, 1, 1, 1, 1);
 
-        spinBox_2 = new QSpinBox(centralWidget);
-        spinBox_2->setObjectName(QString::fromUtf8("spinBox_2"));
-        spinBox_2->setMaximum(255);
+        rfrom = new QSpinBox(centralWidget);
+        rfrom->setObjectName(QStringLiteral("rfrom"));
+        rfrom->setMaximum(255);
 
-        gridLayout->addWidget(spinBox_2, 1, 0, 1, 1);
+        gridLayout->addWidget(rfrom, 1, 0, 1, 1);
 
-        label_2 = new QLabel(centralWidget);
-        label_2->setObjectName(QString::fromUtf8("label_2"));
+        g_to_label = new QLabel(centralWidget);
+        g_to_label->setObjectName(QStringLiteral("g_to_label"));
 
-        gridLayout->addWidget(label_2, 3, 1, 1, 1);
+        gridLayout->addWidget(g_to_label, 3, 1, 1, 1);
 
-        spinBox_6 = new QSpinBox(centralWidget);
-        spinBox_6->setObjectName(QString::fromUtf8("spinBox_6"));
-        spinBox_6->setMaximum(255);
+        bto = new QSpinBox(centralWidget);
+        bto->setObjectName(QStringLiteral("bto"));
+        bto->setMaximum(255);
 
-        gridLayout->addWidget(spinBox_6, 4, 2, 1, 1);
+        gridLayout->addWidget(bto, 4, 2, 1, 1);
 
-        spinBox_5 = new QSpinBox(centralWidget);
-        spinBox_5->setObjectName(QString::fromUtf8("spinBox_5"));
-        spinBox_5->setMaximum(255);
+        gto = new QSpinBox(centralWidget);
+        gto->setObjectName(QStringLiteral("gto"));
+        gto->setMaximum(255);
 
-        gridLayout->addWidget(spinBox_5, 3, 2, 1, 1);
+        gridLayout->addWidget(gto, 3, 2, 1, 1);
 
-        pushButton_2 = new QPushButton(centralWidget);
-        pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
+        green_fade_button = new QPushButton(centralWidget);
+        green_fade_button->setObjectName(QStringLiteral("green_fade_button"));
 
-        gridLayout->addWidget(pushButton_2, 3, 3, 1, 1);
+        gridLayout->addWidget(green_fade_button, 3, 3, 1, 1);
 
-        pushButton = new QPushButton(centralWidget);
-        pushButton->setObjectName(QString::fromUtf8("pushButton"));
+        red_fade_button = new QPushButton(centralWidget);
+        red_fade_button->setObjectName(QStringLiteral("red_fade_button"));
 
-        gridLayout->addWidget(pushButton, 1, 3, 1, 1);
+        gridLayout->addWidget(red_fade_button, 1, 3, 1, 1);
 
-        label_3 = new QLabel(centralWidget);
-        label_3->setObjectName(QString::fromUtf8("label_3"));
+        _to_label = new QLabel(centralWidget);
+        _to_label->setObjectName(QStringLiteral("_to_label"));
 
-        gridLayout->addWidget(label_3, 4, 1, 1, 1);
+        gridLayout->addWidget(_to_label, 4, 1, 1, 1);
 
-        label_4 = new QLabel(centralWidget);
-        label_4->setObjectName(QString::fromUtf8("label_4"));
+        fade_label = new QLabel(centralWidget);
+        fade_label->setObjectName(QStringLiteral("fade_label"));
 
-        gridLayout->addWidget(label_4, 0, 0, 1, 1);
+        gridLayout->addWidget(fade_label, 0, 0, 1, 1);
 
 
         gridLayout_2->addLayout(gridLayout, 14, 0, 1, 2);
 
-        info_log_label = new QLabel(centralWidget);
-        info_log_label->setObjectName(QString::fromUtf8("info_log_label"));
+        arduino_port_label = new QLabel(centralWidget);
+        arduino_port_label->setObjectName(QStringLiteral("arduino_port_label"));
+        arduino_port_label->setMinimumSize(QSize(120, 0));
 
-        gridLayout_2->addWidget(info_log_label, 16, 0, 1, 1);
+        gridLayout_2->addWidget(arduino_port_label, 1, 0, 1, 1);
 
-        info_log_textarea = new QTextEdit(centralWidget);
-        info_log_textarea->setObjectName(QString::fromUtf8("info_log_textarea"));
+        b_speed_label = new QLabel(centralWidget);
+        b_speed_label->setObjectName(QStringLiteral("b_speed_label"));
+
+        gridLayout_2->addWidget(b_speed_label, 17, 1, 1, 1);
 
-        gridLayout_2->addWidget(info_log_textarea, 17, 0, 1, 2);
+        speed_button = new QPushButton(centralWidget);
+        speed_button->setObjectName(QStringLiteral("speed_button"));
+
+        gridLayout_2->addWidget(speed_button, 18, 1, 1, 1);
 
         speed_slider = new QSlider(centralWidget);
-        speed_slider->setObjectName(QString::fromUtf8("speed_slider"));
+        speed_slider->setObjectName(QStringLiteral("speed_slider"));
         speed_slider->setMinimum(10);
         speed_slider->setMaximum(500);
         speed_slider->setOrientation(Qt::Horizontal);
 
-        gridLayout_2->addWidget(speed_slider, 15, 0, 1, 1);
-
-        speed_button = new QPushButton(centralWidget);
-        speed_button->setObjectName(QString::fromUtf8("speed_button"));
-
-        gridLayout_2->addWidget(speed_button, 15, 1, 1, 1);
+        gridLayout_2->addWidget(speed_slider, 18, 0, 1, 1);
 
         controllerWindow->setCentralWidget(centralWidget);
 
@@ -318,32 +363,35 @@ public:
 
     void retranslateUi(QMainWindow *controllerWindow)
     {
-        controllerWindow->setWindowTitle(QApplication::translate("controllerWindow", "RGB Controller", 0, QApplication::UnicodeUTF8));
-        arduino_status_label->setText(QApplication::translate("controllerWindow", "<font color = red>Disconnected</font>", 0, QApplication::UnicodeUTF8));
-        arduino_port_label->setText(QApplication::translate("controllerWindow", "Arduino port", 0, QApplication::UnicodeUTF8));
-        refresh_port_button->setText(QApplication::translate("controllerWindow", "Refresh", 0, QApplication::UnicodeUTF8));
-        connect_button->setText(QApplication::translate("controllerWindow", "Connect", 0, QApplication::UnicodeUTF8));
-        disconnect_button->setText(QApplication::translate("controllerWindow", "Disconnect", 0, QApplication::UnicodeUTF8));
-        rgb_label->setText(QApplication::translate("controllerWindow", "RGB colors", 0, QApplication::UnicodeUTF8));
-        red_button->setText(QApplication::translate("controllerWindow", "Red", 0, QApplication::UnicodeUTF8));
-        green_button->setText(QApplication::translate("controllerWindow", "Green", 0, QApplication::UnicodeUTF8));
-        blue_button->setText(QApplication::translate("controllerWindow", "Blue", 0, QApplication::UnicodeUTF8));
-        off_button->setText(QApplication::translate("controllerWindow", "Off", 0, QApplication::UnicodeUTF8));
-        set_preset_button->setText(QApplication::translate("controllerWindow", "Set", 0, QApplication::UnicodeUTF8));
-        reload_preset_button->setText(QApplication::translate("controllerWindow", "Reload", 0, QApplication::UnicodeUTF8));
-        preset_save_button->setText(QApplication::translate("controllerWindow", "Save", 0, QApplication::UnicodeUTF8));
-        presets_label->setText(QApplication::translate("controllerWindow", "Presets", 0, QApplication::UnicodeUTF8));
-        status_label->setText(QApplication::translate("controllerWindow", "Status", 0, QApplication::UnicodeUTF8));
-        preset_delete_button->setText(QApplication::translate("controllerWindow", "Delete", 0, QApplication::UnicodeUTF8));
-        pushButton_3->setText(QApplication::translate("controllerWindow", "Set", 0, QApplication::UnicodeUTF8));
-        label->setText(QApplication::translate("controllerWindow", "to", 0, QApplication::UnicodeUTF8));
-        label_2->setText(QApplication::translate("controllerWindow", "to", 0, QApplication::UnicodeUTF8));
-        pushButton_2->setText(QApplication::translate("controllerWindow", "Set", 0, QApplication::UnicodeUTF8));
-        pushButton->setText(QApplication::translate("controllerWindow", "Set", 0, QApplication::UnicodeUTF8));
-        label_3->setText(QApplication::translate("controllerWindow", "to", 0, QApplication::UnicodeUTF8));
-        label_4->setText(QApplication::translate("controllerWindow", "Fade", 0, QApplication::UnicodeUTF8));
-        info_log_label->setText(QApplication::translate("controllerWindow", "Information log", 0, QApplication::UnicodeUTF8));
-        speed_button->setText(QApplication::translate("controllerWindow", "Speed", 0, QApplication::UnicodeUTF8));
+        controllerWindow->setWindowTitle(QApplication::translate("controllerWindow", "RGB Controller", Q_NULLPTR));
+        reload_preset_button->setText(QApplication::translate("controllerWindow", "Reload", Q_NULLPTR));
+        off_button->setText(QApplication::translate("controllerWindow", "Off", Q_NULLPTR));
+        preset_delete_button->setText(QApplication::translate("controllerWindow", "Delete", Q_NULLPTR));
+        presets_label->setText(QApplication::translate("controllerWindow", "Presets", Q_NULLPTR));
+        disconnect_button->setText(QApplication::translate("controllerWindow", "Disconnect", Q_NULLPTR));
+        arduino_status_label->setText(QApplication::translate("controllerWindow", "<font color = red>Disconnected</font>", Q_NULLPTR));
+        info_log_label->setText(QApplication::translate("controllerWindow", "Information log", Q_NULLPTR));
+        green_button->setText(QApplication::translate("controllerWindow", "Green", Q_NULLPTR));
+        refresh_port_button->setText(QApplication::translate("controllerWindow", "Refresh", Q_NULLPTR));
+        rgb_label->setText(QApplication::translate("controllerWindow", "RGB colors", Q_NULLPTR));
+        status_label->setText(QApplication::translate("controllerWindow", "Status", Q_NULLPTR));
+        preset_save_button->setText(QApplication::translate("controllerWindow", "Save", Q_NULLPTR));
+        g_speed_label->setText(QApplication::translate("controllerWindow", "Green speed", Q_NULLPTR));
+        red_button->setText(QApplication::translate("controllerWindow", "Red", Q_NULLPTR));
+        blue_button->setText(QApplication::translate("controllerWindow", "Blue", Q_NULLPTR));
+        connect_button->setText(QApplication::translate("controllerWindow", "Connect", Q_NULLPTR));
+        r_speed_label->setText(QApplication::translate("controllerWindow", "Red speed", Q_NULLPTR));
+        set_preset_button->setText(QApplication::translate("controllerWindow", "Set", Q_NULLPTR));
+        blue_fade_button->setText(QApplication::translate("controllerWindow", "Blue toggle", Q_NULLPTR));
+        r_to_label->setText(QApplication::translate("controllerWindow", "to", Q_NULLPTR));
+        g_to_label->setText(QApplication::translate("controllerWindow", "to", Q_NULLPTR));
+        green_fade_button->setText(QApplication::translate("controllerWindow", "Green toggle", Q_NULLPTR));
+        red_fade_button->setText(QApplication::translate("controllerWindow", "Red toggle", Q_NULLPTR));
+        _to_label->setText(QApplication::translate("controllerWindow", "to", Q_NULLPTR));
+        fade_label->setText(QApplication::translate("controllerWindow", "Fade", Q_NULLPTR));
+        arduino_port_label->setText(QApplication::translate("controllerWindow", "Arduino port", Q_NULLPTR));
+        b_speed_label->setText(QApplication::translate("controllerWindow", "Blue speed", Q_NULLPTR));
+        speed_button->setText(QApplication::translate("controllerWindow", "Speed", Q_NULLPTR));
     } // retranslateUi
 
 };
-- 
cgit v1.2.3