Add Qt GUI, builds and runs on Linux

This commit is contained in:
Adam Honse 2019-02-20 20:19:08 -06:00
parent b782a63ed5
commit f1be1c9a8f
5 changed files with 852 additions and 33 deletions

View file

@ -11,18 +11,19 @@
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include "OpenAuraSDKDialog.h"
#include "I2CDetectDialog.h"
#ifdef WIN32
#include <tchar.h>
#include "OpenAuraSDKDialog.h"
#include "I2CDetectDialog.h"
#include "i2c_smbus_piix4.h"
#include "i2c_smbus_i801.h"
#include "wmi.h"
#else /* WIN32 */
#include "OpenAuraSDKQtDialog.h"
#include "i2c_smbus_linux.h"
#include <regex>
#include <fcntl.h>
@ -370,42 +371,30 @@ void DumpAuraRegisters(AuraController * controller)
/******************************************************************************************\
* *
* main/WinMain *
* main *
* *
* Main function. Has no defined purpose yet, but is where you can call the other *
* functions in this project to test them out *
* *
* Currently, this program will enumerate all detected SMBus adapters and then detect *
* all attached devices, similar to i2cdetect on Linux *
* Main function. Detects busses and Aura controllers, then opens the main window *
* *
\******************************************************************************************/
int main()
int main(int argc, char *argv[])
{
// Colors Array R B G
unsigned char colors[15] = { 255, 0, 0,
0, 255, 0,
0, 0, 255,
255, 0, 255,
255, 255, 255 };
DetectI2CBusses();
DetectAuraControllers();
#if WIN32
OpenAuraSDKDialog dlg(busses, controllers);
dlg.DoModal();
/*for (unsigned int i = 0; i < controllers.size(); i++)
{
controllers[i]->AuraRegisterWrite(AURA_REG_DIRECT, 1);
controllers[i]->AuraRegisterWrite(AURA_REG_APPLY, AURA_APPLY_VAL);
}
return 0;
for (unsigned int i = 0; i < controllers.size(); i++)
{
controllers[i]->AuraRegisterWriteBlock(AURA_REG_COLORS_DIRECT, colors, 15);
}
#else
QApplication a(argc, argv);
DumpAuraRegisters(controllers[4]);*/
return 1;
Ui::OpenAuraSDKQtDialog dlg(busses, controllers);
dlg.show();
return a.exec();
#endif
}

View file

@ -1,17 +1,22 @@
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = OpenAuraSDK
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
i2c_smbus.cpp \
AuraController.cpp \
OpenAuraSDK.cpp \
i2c_smbus_linux.cpp
i2c_smbus_linux.cpp \
OpenAuraSDKQtDialog.cpp
HEADERS += \
i2c_smbus.h \
i2c_smbus_linux.h \
AuraController.h
AuraController.h \
OpenAuraSDKQtDialog.h
FORMS +=
FORMS += \
openaurasdk.ui

View file

@ -0,0 +1,344 @@
#include "OpenAuraSDKQtDialog.h"
#include "OpenAuraSDK.h"
using namespace Ui;
OpenAuraSDKQtDialog::OpenAuraSDKQtDialog(std::vector<i2c_smbus_interface *>& bus, std::vector<AuraController *>& control, QWidget *parent) : QMainWindow(parent), busses(bus), controllers (control), ui(new OpenAuraSDKQtDialogUi)
{
ui->setupUi(this);
ui->ComboAuraDevices->addItem("All Devices");
for (int i = 0; i < controllers.size(); i++)
{
ui->ComboAuraDevices->addItem(controllers[i]->GetDeviceName());
}
ui->ComboAuraDevices->setCurrentIndex(0);
}
OpenAuraSDKQtDialog::~OpenAuraSDKQtDialog()
{
delete ui;
}
void OpenAuraSDKQtDialog::show()
{
QMainWindow::show();
}
void Ui::OpenAuraSDKQtDialog::on_ButtonSetAll_clicked()
{
unsigned int aura_device = ui->ComboAuraDevices->currentIndex();
if (aura_device == 0)
{
unsigned char direct = ui->RadioDirect->isChecked();
if (direct == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetAllColorsEffect(ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt());
controllers[i]->SetDirect(false);
}
}
else
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetAllColorsDirect(ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt());
controllers[i]->SetDirect(true);
}
}
}
else
{
unsigned char direct = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_DIRECT);
if (direct == 0)
{
controllers[aura_device - 1]->SetAllColorsEffect(ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt());
}
else
{
controllers[aura_device - 1]->SetAllColorsDirect(ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt());
}
}
}
void Ui::OpenAuraSDKQtDialog::on_ButtonSetColors_clicked()
{
unsigned int aura_device = ui->ComboAuraDevices->currentIndex();
if (aura_device == 0)
{
unsigned char direct = ui->RadioDirect->isChecked();
if (direct == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetLEDColorEffect( 0,
ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt() );
controllers[i]->SetLEDColorEffect( 1,
ui->EditLED1R->text().toInt(),
ui->EditLED1G->text().toInt(),
ui->EditLED1B->text().toInt() );
controllers[i]->SetLEDColorEffect( 2,
ui->EditLED2R->text().toInt(),
ui->EditLED2G->text().toInt(),
ui->EditLED2B->text().toInt() );
controllers[i]->SetLEDColorEffect( 3,
ui->EditLED3R->text().toInt(),
ui->EditLED3G->text().toInt(),
ui->EditLED3B->text().toInt() );
controllers[i]->SetLEDColorEffect( 4,
ui->EditLED4R->text().toInt(),
ui->EditLED4G->text().toInt(),
ui->EditLED4B->text().toInt() );
controllers[i]->SetDirect(false);
}
}
else
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetLEDColorDirect( 0,
ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt() );
controllers[i]->SetLEDColorDirect( 1,
ui->EditLED1R->text().toInt(),
ui->EditLED1G->text().toInt(),
ui->EditLED1B->text().toInt() );
controllers[i]->SetLEDColorDirect( 2,
ui->EditLED2R->text().toInt(),
ui->EditLED2G->text().toInt(),
ui->EditLED2B->text().toInt() );
controllers[i]->SetLEDColorDirect( 3,
ui->EditLED3R->text().toInt(),
ui->EditLED3G->text().toInt(),
ui->EditLED3B->text().toInt() );
controllers[i]->SetLEDColorDirect( 4,
ui->EditLED4R->text().toInt(),
ui->EditLED4G->text().toInt(),
ui->EditLED4B->text().toInt() );
controllers[i]->SetDirect(true);
}
}
}
else
{
unsigned char direct = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_DIRECT);
if (direct == 0)
{
controllers[aura_device - 1]->SetLEDColorEffect( 0,
ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorEffect( 1,
ui->EditLED1R->text().toInt(),
ui->EditLED1G->text().toInt(),
ui->EditLED1B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorEffect( 2,
ui->EditLED2R->text().toInt(),
ui->EditLED2G->text().toInt(),
ui->EditLED2B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorEffect( 3,
ui->EditLED3R->text().toInt(),
ui->EditLED3G->text().toInt(),
ui->EditLED3B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorEffect( 4,
ui->EditLED4R->text().toInt(),
ui->EditLED4G->text().toInt(),
ui->EditLED4B->text().toInt() );
}
else
{
controllers[aura_device - 1]->SetLEDColorDirect( 0,
ui->EditLED0R->text().toInt(),
ui->EditLED0G->text().toInt(),
ui->EditLED0B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorDirect( 1,
ui->EditLED1R->text().toInt(),
ui->EditLED1G->text().toInt(),
ui->EditLED1B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorDirect( 2,
ui->EditLED2R->text().toInt(),
ui->EditLED2G->text().toInt(),
ui->EditLED2B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorDirect( 3,
ui->EditLED3R->text().toInt(),
ui->EditLED3G->text().toInt(),
ui->EditLED3B->text().toInt() );
controllers[aura_device - 1]->SetLEDColorDirect( 4,
ui->EditLED4R->text().toInt(),
ui->EditLED4G->text().toInt(),
ui->EditLED4B->text().toInt() );
}
}
}
void Ui::OpenAuraSDKQtDialog::on_RadioDirect_clicked()
{
unsigned int aura_device = ui->ComboAuraDevices->currentIndex();
if ( aura_device == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetDirect(true);
}
}
else
{
controllers[aura_device - 1]->SetDirect(true);
}
}
void Ui::OpenAuraSDKQtDialog::on_RadioEffect_clicked()
{
unsigned int aura_device = ui->ComboAuraDevices->currentIndex();
if (aura_device == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetDirect(false);
}
}
else
{
controllers[aura_device - 1]->SetDirect(false);
}
}
void Ui::OpenAuraSDKQtDialog::on_ComboAuraDevices_currentIndexChanged(int aura_device)
{
if (aura_device != 0)
{
unsigned char direct = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_DIRECT);
ui->RadioDirect->setChecked(direct != 0);
ui->RadioEffect->setChecked(direct == 0);
unsigned char mode = controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_MODE);
ui->RadioOff->setChecked(mode == AURA_MODE_OFF);
ui->RadioStatic->setChecked(mode == AURA_MODE_STATIC);
ui->RadioBreathing->setChecked(mode == AURA_MODE_BREATHING);
ui->RadioFlashing->setChecked(mode == AURA_MODE_FLASHING);
ui->RadioSpectrumCycle->setChecked(mode == AURA_MODE_SPECTRUM_CYCLE);
ui->RadioRainbow->setChecked(mode == AURA_MODE_RAINBOW);
ui->RadioBreathingSpectrum->setChecked(mode == AURA_MODE_SPECTRUM_CYCLE_BREATHING);
ui->RadioChaseFade->setChecked(mode == AURA_MODE_CHASE_FADE);
if (direct == 0)
{
ui->EditLED0R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 0)));
ui->EditLED0B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 1)));
ui->EditLED0G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 2)));
ui->EditLED1R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 3)));
ui->EditLED1B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 4)));
ui->EditLED1G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 5)));
ui->EditLED2R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 6)));
ui->EditLED2B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 7)));
ui->EditLED2G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 8)));
ui->EditLED3R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 9)));
ui->EditLED3B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 10)));
ui->EditLED3G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 11)));
ui->EditLED4R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 12)));
ui->EditLED4B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 13)));
ui->EditLED4G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_EFFECT + 14)));
}
else
{
ui->EditLED0R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 0)));
ui->EditLED0B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 1)));
ui->EditLED0G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 2)));
ui->EditLED1R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 3)));
ui->EditLED1B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 4)));
ui->EditLED1G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 5)));
ui->EditLED2R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 6)));
ui->EditLED2B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 7)));
ui->EditLED2G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 8)));
ui->EditLED3R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 9)));
ui->EditLED3B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 10)));
ui->EditLED3G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 11)));
ui->EditLED4R->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 12)));
ui->EditLED4B->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 13)));
ui->EditLED4G->setText(QString::number(controllers[aura_device - 1]->AuraRegisterRead(AURA_REG_COLORS_DIRECT + 14)));
}
}
}
void OpenAuraSDKQtDialog::setMode(unsigned char mode_val)
{
unsigned int aura_device = ui->ComboAuraDevices->currentIndex();
if (aura_device == 0)
{
for (int i = 0; i < controllers.size(); i++)
{
controllers[i]->SetMode(mode_val);
}
}
else
{
controllers[aura_device - 1]->SetMode(mode_val);
}
}
void Ui::OpenAuraSDKQtDialog::on_RadioOff_clicked()
{
setMode(AURA_MODE_OFF);
}
void Ui::OpenAuraSDKQtDialog::on_RadioStatic_clicked()
{
setMode(AURA_MODE_STATIC);
}
void Ui::OpenAuraSDKQtDialog::on_RadioBreathing_clicked()
{
setMode(AURA_MODE_BREATHING);
}
void Ui::OpenAuraSDKQtDialog::on_RadioFlashing_clicked()
{
setMode(AURA_MODE_FLASHING);
}
void Ui::OpenAuraSDKQtDialog::on_RadioSpectrumCycle_clicked()
{
setMode(AURA_MODE_SPECTRUM_CYCLE);
}
void Ui::OpenAuraSDKQtDialog::on_RadioRainbow_clicked()
{
setMode(AURA_MODE_RAINBOW);
}
void Ui::OpenAuraSDKQtDialog::on_RadioBreathingSpectrum_clicked()
{
setMode(AURA_MODE_SPECTRUM_CYCLE_BREATHING);
}
void Ui::OpenAuraSDKQtDialog::on_RadioChaseFade_clicked()
{
setMode(AURA_MODE_CHASE_FADE);
}

View file

@ -0,0 +1,66 @@
#ifndef OPENAURASDKQTDIALOG_H
#define OPENAURASDKQTDIALOG_H
#include "ui_openaurasdk.h"
#include <vector>
#include "i2c_smbus.h"
#include "AuraController.h"
#include <QMainWindow>
#include <QTimer>
#include <QSystemTrayIcon>
#include <QMenu>
namespace Ui
{
class OpenAuraSDKQtDialog;
}
class Ui::OpenAuraSDKQtDialog : public QMainWindow
{
Q_OBJECT
public:
explicit OpenAuraSDKQtDialog(std::vector<i2c_smbus_interface *>& bus, std::vector<AuraController *>& control, QWidget *parent = 0);
~OpenAuraSDKQtDialog();
void show();
void setMode(unsigned char mode_val);
protected:
std::vector<i2c_smbus_interface *>& busses;
std::vector<AuraController *>& controllers;
private slots:
void on_ButtonSetAll_clicked();
void on_ButtonSetColors_clicked();
void on_RadioDirect_clicked();
void on_RadioEffect_clicked();
void on_ComboAuraDevices_currentIndexChanged(int index);
void on_RadioOff_clicked();
void on_RadioStatic_clicked();
void on_RadioBreathing_clicked();
void on_RadioFlashing_clicked();
void on_RadioSpectrumCycle_clicked();
void on_RadioRainbow_clicked();
void on_RadioBreathingSpectrum_clicked();
void on_RadioChaseFade_clicked();
private:
Ui::OpenAuraSDKQtDialogUi *ui;
};
#endif // OPENAURASDKQTDIALOG_H

415
OpenAuraSDK/openaurasdk.ui Normal file
View file

@ -0,0 +1,415 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>OpenAuraSDKQtDialogUi</class>
<widget class="QMainWindow" name="OpenAuraSDKQtDialogUi">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>OpenAuraSDK</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QPushButton" name="ButtonSetAll">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Set All</string>
</property>
</widget>
<widget class="QPushButton" name="ButtonSetColors">
<property name="geometry">
<rect>
<x>100</x>
<y>10</y>
<width>80</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Set Colors</string>
</property>
</widget>
<widget class="QLineEdit" name="EditLED0R">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED0G">
<property name="geometry">
<rect>
<x>70</x>
<y>60</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED0B">
<property name="geometry">
<rect>
<x>130</x>
<y>60</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED1R">
<property name="geometry">
<rect>
<x>10</x>
<y>90</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED1G">
<property name="geometry">
<rect>
<x>70</x>
<y>90</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED1B">
<property name="geometry">
<rect>
<x>130</x>
<y>90</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED2R">
<property name="geometry">
<rect>
<x>10</x>
<y>120</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED2G">
<property name="geometry">
<rect>
<x>70</x>
<y>120</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED2B">
<property name="geometry">
<rect>
<x>130</x>
<y>120</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED3R">
<property name="geometry">
<rect>
<x>10</x>
<y>150</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED3G">
<property name="geometry">
<rect>
<x>70</x>
<y>150</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED3B">
<property name="geometry">
<rect>
<x>130</x>
<y>150</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED4R">
<property name="geometry">
<rect>
<x>10</x>
<y>180</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED4G">
<property name="geometry">
<rect>
<x>70</x>
<y>180</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="EditLED4B">
<property name="geometry">
<rect>
<x>130</x>
<y>180</y>
<width>50</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="LabelRed">
<property name="geometry">
<rect>
<x>10</x>
<y>40</y>
<width>50</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Red</string>
</property>
</widget>
<widget class="QLabel" name="LabelGreen">
<property name="geometry">
<rect>
<x>70</x>
<y>40</y>
<width>50</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Green</string>
</property>
</widget>
<widget class="QLabel" name="LabelBlue">
<property name="geometry">
<rect>
<x>130</x>
<y>40</y>
<width>50</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Blue</string>
</property>
</widget>
<widget class="QComboBox" name="ComboAuraDevices">
<property name="geometry">
<rect>
<x>290</x>
<y>10</y>
<width>200</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="LabelAuraDevice">
<property name="geometry">
<rect>
<x>200</x>
<y>10</y>
<width>90</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Aura Device</string>
</property>
</widget>
<widget class="QGroupBox" name="GroupBoxDirect">
<property name="geometry">
<rect>
<x>290</x>
<y>40</y>
<width>200</width>
<height>60</height>
</rect>
</property>
<property name="title">
<string>Mode</string>
</property>
<widget class="QRadioButton" name="RadioDirect">
<property name="geometry">
<rect>
<x>10</x>
<y>30</y>
<width>70</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Direct</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioEffect">
<property name="geometry">
<rect>
<x>110</x>
<y>30</y>
<width>70</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Effect</string>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="GroupBoxEffect">
<property name="geometry">
<rect>
<x>290</x>
<y>100</y>
<width>200</width>
<height>180</height>
</rect>
</property>
<property name="title">
<string>Effect</string>
</property>
<widget class="QRadioButton" name="RadioOff">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>150</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Off</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioStatic">
<property name="geometry">
<rect>
<x>10</x>
<y>40</y>
<width>150</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Static</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioBreathing">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>150</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Breathing</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioFlashing">
<property name="geometry">
<rect>
<x>10</x>
<y>80</y>
<width>150</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Flashing</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioSpectrumCycle">
<property name="geometry">
<rect>
<x>10</x>
<y>100</y>
<width>150</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Spectrum Cycle</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioRainbow">
<property name="geometry">
<rect>
<x>10</x>
<y>120</y>
<width>150</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Rainbow Wave</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioBreathingSpectrum">
<property name="geometry">
<rect>
<x>10</x>
<y>140</y>
<width>180</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Breathing Spectrum</string>
</property>
</widget>
<widget class="QRadioButton" name="RadioChaseFade">
<property name="geometry">
<rect>
<x>10</x>
<y>160</y>
<width>180</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Chase Fade</string>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>