Beispiel #1
0
void MainWindow::setTemperatureSensorDisconnected(quint8 sensorId)
{
    TemperatureIndicator* currentTemperatureIndicator = findTemperatureIndicatorById(sensorId);
    if (currentTemperatureIndicator) {
        currentTemperatureIndicator->setSensorError(SensorError::Disconnected);   
    }
} // setTemperatureSensorDisconnected()
Beispiel #2
0
void MainWindow::setTemperatureIndicator(quint8 sensorId, qreal temperature)
{
    TemperatureIndicator* currentTemperatureIndicator = findTemperatureIndicatorById(sensorId);
    if (currentTemperatureIndicator) {
        currentTemperatureIndicator->setTemperatureCurrent(temperature);
        currentTemperatureIndicator->setSensorError(SensorError::OK);
    }
} // setTemperatureIndicator()
Beispiel #3
0
void MainWindow::setScene(QString sceneName)
{
    Scene* scene = _sceneDataModel->getSceneByName(sceneName);
    if (nullptr == scene) {
        qDebug() << "Scene not found in setScene(" << sceneName << ")";

        return;
    }

    for (int sensorIndex = 0;
         sensorIndex < scene->sensors.count();
         sensorIndex ++) {
        qreal temperatureTarget = scene->sensors.at(sensorIndex).temperatureTarget;
        quint8 sensorId = scene->sensors.at(sensorIndex).sensorId;
        TemperatureIndicator* indicator = findTemperatureIndicatorById(sensorId);
        indicator->setTemperatureTarget(temperatureTarget);
        sendTemperatureTarget(indicator);
    }
} // setScene()
Beispiel #4
0
MainWindow::MainWindow(const ConfigLoader& configLoader, QWidget* parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    _programSettings(configLoader.getProgramSettings())
{
    bool isOk;

    // Initialize the Scene Data file - this copies a spare copy if the file is missing
    // in the Standard Folders path
    try {
        _sceneDataFile = SceneDataFile::getInstance(_programSettings.datafile.path,
                                                    _programSettings.datafile.name,
                                                    this);
    }
    catch (SceneDataFileException& exception) {
        throw exception;
    }

    // Load logo image from a resource file
    ResourceFileManager resourceFileManager(_programSettings.resourcefile.path);
    QByteArray buffer = resourceFileManager.loadFrom(_programSettings.resourcefile.name,
                                                     _programSettings.logoImageFileName);
    if (buffer.isEmpty()) {
        qDebug() << "Unable to load: " + _programSettings.logoImageFileName
                    + " from resource: " + _programSettings.resourcefile.name
                    + " in path: " + _programSettings.resourcefile.path;
    }
    else {
        _pixmapLogo.loadFromData(buffer);
    }

    // Program settings: Load program setting from persistant storage
    _programSettingsPersistant = new QSettings(this);

    // UI: Setup UI
    ui->setupUi(this);

    setWindowTitle(QString("%1 " + tr("Initializing..."))
                   .arg(_programSettings.application.name));

    // UI: Setup indicators display area
    _scene = new CGraphicsScene(this);
    ui->graphicsView->setScene(_scene);

    QString imageFilePath = ASSETS_PATH + _programSettings.backgroundImageFileName;
    QImage imageBackgroundImage(ASSETS_PATH + _programSettings.backgroundImageFileName);
    if (imageBackgroundImage.isNull()) {
        qDebug() << "Background image failed to load: " + imageFilePath;
    }

    ui->graphicsView->setBackgroundBrush(QBrush(QColor(50, 50, 50)));

    QRect sceneRect(0, 0, imageBackgroundImage.width(), imageBackgroundImage.height());
    QGraphicsRectItem* sceneRectItemBackground = _scene->addRect(sceneRect);
    sceneRectItemBackground->setBrush(QBrush(imageBackgroundImage));

    // UI: Load indicators
    _listIndicatorProperties = configLoader.getIndicatorProperties();

    for (IndicatorProperties currentIndicatorProperties: _listIndicatorProperties) {
        TemperatureIndicator* temperatureIndicator =
                new TemperatureIndicator(currentIndicatorProperties,
                                         _programSettings,
                                         ui->listWidget_Sensors,
                                         _scene);
        temperatureIndicator->setPosition(currentIndicatorProperties.position);
        temperatureIndicator->update();

        QString key = QString::number(temperatureIndicator->getSensorId());
        if (_programSettingsPersistant->contains(key))  {
            qreal temperature = _programSettingsPersistant->value(key).toDouble();
            temperatureIndicator->setTemperatureTarget(temperature);
        }
        else {
            temperatureIndicator->setTemperatureTarget(currentIndicatorProperties.temperatureTarget);
            _programSettingsPersistant->setValue(key, temperatureIndicator->getTemperatureTarget());
        }

        _temperatureIndicators.push_back(temperatureIndicator);
    }

    for (auto indicator: _temperatureIndicators) {
        isOk = connect(indicator,
                       SIGNAL(doubleClicked(QGraphicsSceneMouseEvent*)),
                       this,
                       SLOT(onTemperatureIndicatorDoubleClicked(QGraphicsSceneMouseEvent*)));
        Q_ASSERT(isOk);
        Q_UNUSED(isOk);
    }

    _currentTemperatureIndicator = _temperatureIndicators[0];
    _currentTemperatureIndicator->setIndicatorSelected(true);

    updateDialByCurrentTemperatureIndicator();

    // UI: Connect QListWidget signal to TemperatureIndicators
    isOk = connect(ui->listWidget_Sensors,
                   SIGNAL(itemClicked(QListWidgetItem*)),
                   this,
                   SLOT(onListWidgetItemClicked(QListWidgetItem*)));
    Q_ASSERT(isOk);
    Q_UNUSED(isOk);

    isOk = connect(ui->listWidget_Sensors,
                   SIGNAL(itemDoubleClicked(QListWidgetItem*)),
                   this,
                   SLOT(onListWidgetItemDoubleClicked(QListWidgetItem*)));
    Q_ASSERT(isOk);
    Q_UNUSED(isOk);

    // NOTE: SceneDataModel object has to be created after all _temperatureIndicators
    // have been loaded from config.xml as SceneDataModel uses getSensors() to
    // retrieve a list of all sensors.
    // All available sensors on the remote controller need to be defined in config.xml
    _sceneDataModel = new SceneDataModel(_sceneDataFile->getSceneDataFilePath(),
                                         _sceneDataFile->getSceneDataFileName(),
                                         this);

    this->listWidget_Scenes_Update();

#ifdef USE_NETWORKING
    // TcpSocket: Setup
    connectSocket();
#endif
}
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{  
    // Load program settings from "assets/config.xml"
    ConfigLoader configLoader(CONFIG_FILE, this);
    _programSettings = configLoader.getProgramSettings();

    // Load program setting from persistant storage
    QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
    QCoreApplication::setOrganizationDomain(ORGANIZATION_DOMAIN);
    QCoreApplication::setApplicationName(APPLICATION_NAME);

    _programSettingsPersistant = new QSettings(this);

    // Setup the GUI
    ui->setupUi(this);  
    connect(ui->action_About, SIGNAL(triggered()), this, SLOT(onActionAboutTriggered()));

    // Setup the indicators display area
    _scene = new CGraphicsScene(this);
    ui->graphicsView->setScene(_scene);

    QString imageFilePath = ASSETS_PATH + _programSettings.backgroundImageFileName;
    QImage imageBackgroundImage(ASSETS_PATH + _programSettings.backgroundImageFileName);
    if (imageBackgroundImage.isNull()) {
        qDebug() << "Background image failed to load: " + imageFilePath;
    }

    ui->graphicsView->setBackgroundBrush(QBrush(QColor(50, 50, 50)));

    QRect sceneRect(0, 0, imageBackgroundImage.width(), imageBackgroundImage.height());
    QGraphicsRectItem* sceneRectItemBackground = _scene->addRect(sceneRect);
    sceneRectItemBackground->setBrush(QBrush(imageBackgroundImage));

    // Load the indicators
    _listIndicatorProperties = configLoader.getIndicatorProperties();

    for (IndicatorProperties currentIndicatorProperties: _listIndicatorProperties) {
        TemperatureIndicator* temperatureIndicator =
                new TemperatureIndicator(currentIndicatorProperties,
                                         _programSettings,
                                         ui->listWidget,
                                         _scene);
        temperatureIndicator->setPosition(currentIndicatorProperties.position);
        temperatureIndicator->setSensorState(SensorState::Disconnected);
        temperatureIndicator->update();

        QString key = QString::number(temperatureIndicator->getSensorId());
        if (_programSettingsPersistant->contains(key))  {
            qreal temperature = _programSettingsPersistant->value(key).toDouble();
            temperatureIndicator->setTemperatureTarget(temperature);
        }
        else {
            temperatureIndicator->setTemperatureTarget(currentIndicatorProperties.temperatureTarget);
            _programSettingsPersistant->setValue(key, temperatureIndicator->getTemperatureTarget());
        }

        _temperatureIndicators.push_back(temperatureIndicator);
    }

    bool isOk;
    for(auto indicator: _temperatureIndicators) {
        isOk = connect(indicator,
                       SIGNAL(doubleClicked(QGraphicsSceneMouseEvent*)),
                       this,
                       SLOT(onTemperatureIndicatorDoubleClicked(QGraphicsSceneMouseEvent*)));
        Q_ASSERT(isOk);
        Q_UNUSED(isOk);
    }

    _currentTemperatureIndicator = _temperatureIndicators[0];
    _currentTemperatureIndicator->setIndicatorSelected(true);

    // Connect QListWidget signal to TemperatureIndicators
    isOk = connect(ui->listWidget,
                   SIGNAL(itemClicked(QListWidgetItem*)),
                   this,
                   SLOT(onListWidgetItemClicked(QListWidgetItem*)));
    Q_ASSERT(isOk);
    Q_UNUSED(isOk);

    isOk = connect(ui->listWidget,
                   SIGNAL(itemDoubleClicked(QListWidgetItem*)),
                   this,
                   SLOT(onListWidgetItemDoubleClicked(QListWidgetItem*)));
    Q_ASSERT(isOk);
    Q_UNUSED(isOk);

    // Setup socket
    connectSocket();

    connect(_socket, SIGNAL(readyRead()), this, SLOT(onDataRecieved()) );
    connect(_socket, SIGNAL(connected()), this, SLOT(onConnected()) );
    connect(_socket, SIGNAL(disconnected()), this, SLOT(onDisconnected()) );
    connect(_socket, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(onErrorSocket(QAbstractSocket::SocketError)));
}