From ca3605ea664834acdf712e691be8f0358b1c6b6f Mon Sep 17 00:00:00 2001 From: "Bocklage, Jens" Date: Fri, 24 Jun 2016 16:19:10 +0200 Subject: v0.1.0 06/24/2016 - reworked status bar - reviewed D-Bus interfaces, now using signals instead of methods for day/night mode - created new home screen simulator app - license changed to Apache 2.0 - put D-Bus introspections in one central place - disabled "only one instance allowed" for development --- HomeScreenSimulator/src/main.cpp | 58 +++++++++++++ HomeScreenSimulator/src/mainwindow.cpp | 146 +++++++++++++++++++++++++++++++++ HomeScreenSimulator/src/mainwindow.h | 65 +++++++++++++++ 3 files changed, 269 insertions(+) create mode 100644 HomeScreenSimulator/src/main.cpp create mode 100644 HomeScreenSimulator/src/mainwindow.cpp create mode 100644 HomeScreenSimulator/src/mainwindow.h (limited to 'HomeScreenSimulator/src') diff --git a/HomeScreenSimulator/src/main.cpp b/HomeScreenSimulator/src/main.cpp new file mode 100644 index 0000000..9c5a108 --- /dev/null +++ b/HomeScreenSimulator/src/main.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2016 Mentor Graphics Development (Deutschland) GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mainwindow.h" +#include +#include +#include + +int main(int argc, char *argv[]) +{ + // allow only one instance of this application + /*QSharedMemory appInstance; + appInstance.setKey("AGLHomeScreenApp"); + if (!appInstance.create(1)) + { + qDebug("Only one instance of the Home Screen App allowed!"); + exit(-1); + }*/ + + QApplication a(argc, argv); + + // used for application settings (QSettings) + QCoreApplication::setOrganizationDomain("LinuxFoundation"); + QCoreApplication::setOrganizationName("AutomotiveGradeLinux"); + QCoreApplication::setApplicationName("HomeScreenSimulator"); + QCoreApplication::setApplicationVersion("0.1.0"); + + MainWindow w; + w.show(); + + // TODO: input handling not defined right now... + /*InputEventDistributor *mp_inputEventDistributor; + mp_inputEventDistributor = new InputEventDistributor();*/ + + + // start input and system settings simulator on developer PCs +#ifdef __arm__ + qDebug("Running on ARM architecture"); +#endif +#ifdef __i386__ + qDebug("Running on x86 architecture"); +#endif + + return a.exec(); +} diff --git a/HomeScreenSimulator/src/mainwindow.cpp b/HomeScreenSimulator/src/mainwindow.cpp new file mode 100644 index 0000000..ffc5170 --- /dev/null +++ b/HomeScreenSimulator/src/mainwindow.cpp @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2016 Mentor Graphics Development (Deutschland) GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + mp_ui(new Ui::MainWindow), + mp_dBusDayNightModeAdapter(0), + mp_dBusStatusBarProxy(0), + mp_dBusPopupProxy(0) +{ + mp_ui->setupUi(this); + + // dbus setup + QDBusConnection dbus = QDBusConnection::sessionBus(); + + // publish dbus day night mode interface + mp_dBusDayNightModeAdapter = new DaynightmodeAdaptor((QObject*)this); + + dbus.registerService("org.agl.homescreen.simulator"); + dbus.registerObject("/", this); + + mp_dBusStatusBarProxy = new org::agl::statusbar("org.agl.homescreen", + "/StatusBar", + QDBusConnection::sessionBus(), + 0); + mp_dBusPopupProxy = new org::agl::popup("org.agl.homescreen", + "/Popup", + QDBusConnection::sessionBus(), + 0); + QSettings settings; + this->move(settings.value("homescreensimulator/pos").toPoint()); + mp_ui->radioButton_DayMode->setChecked(settings.value("homescreensimulator/daymode", true).toBool()); // if nothing is stored, use "true" + mp_ui->radioButton_NightMode->setChecked(settings.value("homescreensimulator/nightmode", false).toBool()); // if nothing is stored, use "false" +} + +MainWindow::~MainWindow() +{ + QSettings settings; + settings.setValue("homescreensimulator/pos", this->pos()); + settings.setValue("homescreensimulator/daymode", mp_ui->radioButton_DayMode->isChecked()); + settings.setValue("homescreensimulator/nightmode", mp_ui->radioButton_NightMode->isChecked()); + + delete mp_dBusPopupProxy; + delete mp_dBusStatusBarProxy; + + if (0 == mp_dBusDayNightModeAdapter) + { + delete mp_dBusDayNightModeAdapter; + } + delete mp_ui; +} + +void MainWindow::on_radioButton_DayMode_toggled(bool checked) +{ + if (checked) + { + emit(dayNightMode(SystemDayNight::DAYNIGHTMODE_DAY)); + } +} + +void MainWindow::on_radioButton_NightMode_toggled(bool checked) +{ + if (checked) + { + emit(dayNightMode(SystemDayNight::DAYNIGHTMODE_NIGHT)); + } +} + +void MainWindow::on_pushButton_Update_clicked() +{ + QList availablePlaceholders = mp_dBusStatusBarProxy->getAvailablePlaceholders(); + mp_ui->tableWidget_Status->verticalHeader()->setVisible(false); + mp_ui->tableWidget_Status->clear(); + mp_ui->tableWidget_Status->setRowCount(availablePlaceholders.size()); + mp_ui->tableWidget_Status->setColumnCount(3); + + QList horizontalHeaderLabels; + horizontalHeaderLabels.append("Placeholder #"); + horizontalHeaderLabels.append("Text"); + horizontalHeaderLabels.append("iconURI"); + mp_ui->tableWidget_Status->setHorizontalHeaderLabels(horizontalHeaderLabels); + + // disable trigger for the update + mp_ui->tableWidget_Status->blockSignals(true); + + for (int i = 0; i < availablePlaceholders.size(); ++i) + { + mp_ui->tableWidget_Status->setItem(i, 0, new QTableWidgetItem(QString::number(availablePlaceholders[i]))); + mp_ui->tableWidget_Status->item(i, 0)->setFlags(Qt::ItemIsSelectable); + mp_ui->tableWidget_Status->setItem(i, 1, new QTableWidgetItem(mp_dBusStatusBarProxy->getStatusText(availablePlaceholders[i]))); + mp_ui->tableWidget_Status->setItem(i, 2, new QTableWidgetItem(mp_dBusStatusBarProxy->getStatusIcon(availablePlaceholders[i]))); + } + + // enable trigger again + mp_ui->tableWidget_Status->blockSignals(false); +} + +void MainWindow::on_pushButton_Exit_clicked() +{ + QApplication::exit(); +} + +void MainWindow::on_tableWidget_Status_cellChanged(int row, int column) +{ + // text + if (1 == column) + { + mp_dBusStatusBarProxy->setStatusText(mp_ui->tableWidget_Status->item(row, 0)->text().toInt(), mp_ui->tableWidget_Status->item(row, 1)->text()); + } + + // icon + if (2 == column) + { + mp_dBusStatusBarProxy->setStatusIcon(mp_ui->tableWidget_Status->item(row, 0)->text().toInt(), mp_ui->tableWidget_Status->item(row, 2)->text()); + } +} + +void MainWindow::on_pushButton_Send_clicked() +{ + mp_dBusPopupProxy->showPopup(0, mp_ui->plainTextEdit_Popup->toPlainText()); +} + +void MainWindow::on_pushButton_IconExample_clicked() +{ + on_pushButton_Update_clicked(); + + // THIS IS JUST AN EXAMPLE!!! It only works, because the alias for the pic is defined in the + // Home Screen app resources... + mp_ui->tableWidget_Status->setItem(0, 2, new QTableWidgetItem(":/icons/home_day.png")); +} diff --git a/HomeScreenSimulator/src/mainwindow.h b/HomeScreenSimulator/src/mainwindow.h new file mode 100644 index 0000000..2eb6e11 --- /dev/null +++ b/HomeScreenSimulator/src/mainwindow.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2016 Mentor Graphics Development (Deutschland) GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include "../interfaces/daynightmode.h" +#include "daynightmode_adapter.h" + +#include "statusbar_proxy.h" +#include "popup_proxy.h" + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +// day/night mode +Q_SIGNALS: + void dayNightMode(int mode); + +private slots: + void on_radioButton_DayMode_toggled(bool checked); + + void on_radioButton_NightMode_toggled(bool checked); + + void on_pushButton_Update_clicked(); + + void on_pushButton_Exit_clicked(); + + void on_tableWidget_Status_cellChanged(int row, int column); + + void on_pushButton_Send_clicked(); + + void on_pushButton_IconExample_clicked(); + +private: + Ui::MainWindow *mp_ui; + DaynightmodeAdaptor *mp_dBusDayNightModeAdapter; + org::agl::statusbar *mp_dBusStatusBarProxy; + org::agl::popup *mp_dBusPopupProxy; +}; + +#endif // MAINWINDOW_H -- cgit 1.2.3-korg