diff --git a/Controllers/ArcticController/ArcticControllerDetect.cpp b/Controllers/ArcticController/ArcticControllerDetect.cpp index f4da117b1..00425bce9 100644 --- a/Controllers/ArcticController/ArcticControllerDetect.cpp +++ b/Controllers/ArcticController/ArcticControllerDetect.cpp @@ -13,30 +13,34 @@ #include "Detector.h" #include "ArcticController.h" #include "RGBController_Arctic.h" -#include "find_usb_serial_port.h" +#include "SettingsManager.h" #define CH341_VID 0x1A86 #define CH341_PID 0x7523 void DetectArcticControllers() { - std::vector ports = find_usb_serial_port(CH341_VID, CH341_PID); + json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("ArcticDevices"); - for(unsigned int device = 0; device < ports.size(); device++) + if(settings.contains("devices")) { - ArcticController *controller = new ArcticController(*ports[device]); - - if(controller->IsPresent()) - { - RGBController_Arctic *rgb_controller = new RGBController_Arctic(controller); - ResourceManager::get()->RegisterRGBController(rgb_controller); - } - else + for(unsigned int device_idx = 0; device_idx < settings["devices"].size(); device_idx++) { - delete controller; - } + if(settings["devices"][device_idx].contains("port")) + { + ArcticController *controller = new ArcticController(settings["devices"][device_idx]["port"]); - delete ports[device]; + if(controller->IsPresent()) + { + RGBController_Arctic *rgb_controller = new RGBController_Arctic(controller); + ResourceManager::get()->RegisterRGBController(rgb_controller); + } + else + { + delete controller; + } + } + } } } diff --git a/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.cpp b/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.cpp new file mode 100644 index 000000000..1aa19813d --- /dev/null +++ b/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.cpp @@ -0,0 +1,87 @@ +/*-------------------------------------------------------------*\ +| ArcticSettingsEntry.cpp | +| | +| User interface for OpenRGB Arctic controller settings entry | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-or-later | +\*-------------------------------------------------------------*/ + +#include "ArcticSettingsEntry.h" +#include "ui_ArcticSettingsEntry.h" + +#include "serial_port.h" +#include + +ArcticSettingsEntry::ArcticSettingsEntry(QWidget *parent) : + BaseManualDeviceEntry(parent), + ui(new Ui::ArcticSettingsEntry) +{ + ui->setupUi(this); + + std::vector serialPorts = serial_port::getSerialPorts(); + for(size_t i = 0; i < serialPorts.size(); ++i) + { + ui->PortComboBox->addItem(QString::fromStdString(serialPorts[i])); + } + if(serialPorts.empty()) + { + /*---------------------------------------------------*\ + | When no ports were found, add an unselectable entry | + | denoting this fact istead | + \*---------------------------------------------------*/ + QStandardItemModel* comboBoxModel = qobject_cast(ui->PortComboBox->model()); + if(comboBoxModel != nullptr) + { + ui->PortComboBox->addItem(tr("No serial ports found")); + QStandardItem *item = comboBoxModel->item(0); + item->setFlags(item->flags() & ~Qt::ItemIsEnabled); + } + } + ui->PortComboBox->clearEditText(); +} + +ArcticSettingsEntry::~ArcticSettingsEntry() +{ + delete ui; +} + +void ArcticSettingsEntry::changeEvent(QEvent *event) +{ + if(event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } +} + +void ArcticSettingsEntry::loadFromSettings(const json& data) +{ + if(data.contains("port")) + { + ui->PortComboBox->setCurrentText(QString::fromStdString(data["port"])); + } +} + +json ArcticSettingsEntry::saveSettings() +{ + json result; + + result["port"] = ui->PortComboBox->currentText().toStdString(); + + return result; +} + +bool ArcticSettingsEntry::isDataValid() +{ + // stub + return true; +} + +static BaseManualDeviceEntry* SpawnArcticEntry(const json& data) +{ + ArcticSettingsEntry* entry = new ArcticSettingsEntry; + entry->loadFromSettings(data); + return entry; +} + +REGISTER_MANUAL_DEVICE_TYPE("Arctic", "ArcticDevices", SpawnArcticEntry); diff --git a/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.h b/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.h new file mode 100644 index 000000000..7107c6519 --- /dev/null +++ b/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.h @@ -0,0 +1,35 @@ +/*-------------------------------------------------------------*\ +| ArcticSettingsEntry.h | +| | +| User interface for OpenRGB Arctic controller settings entry | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-or-later | +\*-------------------------------------------------------------*/ + +#pragma once + +#include "BaseManualDeviceEntry.h" + +namespace Ui +{ + class ArcticSettingsEntry; +} + +class ArcticSettingsEntry : public BaseManualDeviceEntry +{ + Q_OBJECT + +public: + explicit ArcticSettingsEntry(QWidget *parent = nullptr); + ~ArcticSettingsEntry(); + void loadFromSettings(const json& data); + json saveSettings() override; + bool isDataValid() override; + +private: + Ui::ArcticSettingsEntry *ui; + +private slots: + void changeEvent(QEvent *event) override; +}; diff --git a/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.ui b/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.ui new file mode 100644 index 000000000..8534fcfc0 --- /dev/null +++ b/qt/ManualDevicesSettingsPage/ArcticSettingsEntry/ArcticSettingsEntry.ui @@ -0,0 +1,53 @@ + + + ArcticSettingsEntry + + + + 0 + 0 + 531 + 206 + + + + + 0 + 0 + + + + Arctic Controller Settings Entry + + + + + + Arctic Controller Device + + + + + + Port: + + + + + + + true + + + QComboBox::NoInsert + + + + + + + + + + +