--- infoscreen/MainView.cpp 2010/01/10 09:12:55 542 +++ infoscreen/MainView.cpp 2010/06/22 20:29:40 873 @@ -2,7 +2,8 @@ #include #include #include -#include +#include +#include #include #include @@ -17,22 +18,28 @@ #include "httpwrapper.h" + MainView::MainView(QWidget* parent) : QWidget(parent), timer(0) { + loadSettings(); - settings = new QSettings("Caddi", "infoscreen"); - url = settings->value("url").toString(); - bool xmlMode = settings->value("xml").toBool(); - screenid = settings->value("screenid").toString(); - - if (url == "" || screenid == "") { - QMessageBox::warning(this,"infoscreen","Could not find url or screenid in config file " + settings->fileName()); + if ( currentMode == ModeXml) { + xmlUrl = url + "?screen_id=" + screenid; + qDebug() << "Starting XML mode"; + qDebug() << "xmlUrl" << xmlUrl; + } - exit(1); //Normal qApp->exit() doesn't terminate the init sequence so use std C exit function + if (currentMode == ModeSimpleWeb){ + qDebug() << "Starting plain browser mode"; } + if (currentMode == ModeLocal ) { + qDebug() << "Starting local mode"; + qDebug() << "path" << path; + readLocalFiles(); + } this->resize(400,400); this->setWindowState( Qt::WindowFullScreen ); @@ -41,41 +48,73 @@ qApp->setOverrideCursor( QCursor( Qt::BlankCursor) ); render = new ClientSideRender(this); - render->setVisible( false ); web = new MyWebView(this); - web->setVisible( false); picture = new PictureView(this); - picture->setVisible( false ); video = new VideoView(this); - video->setVisible(false); - QVBoxLayout* layout = new QVBoxLayout(); - layout->addWidget(web,1); - layout->addWidget(render,1); - layout->addWidget(picture,1); - layout->addWidget(video,1); - layout->addStretch(); + svg = new QSvgWidget(this); + + layout = new QStackedLayout(); + layout->addWidget(web); + layout->addWidget(render); + layout->addWidget(picture); + layout->addWidget(video); + layout->addWidget(svg); layout->setContentsMargins(0,0,0,0); setLayout(layout); + if (currentMode == ModeSimpleWeb) { + web->setVisible(true); + web->start(url,screenid); + } + qDebug() << "Starting timer..."; + timer = new QTimer(this); + connect(timer, SIGNAL(timeout() ), this, SLOT(onTimer() )); + timer->start(100); +} - if (xmlMode == true) { - xmlUrl = url + "?screen_id=" + screenid; - qDebug() << "Starting XML mode"; - qDebug() << "xmlUrl" << xmlUrl; +void MainView::loadSettings() +{ + settings = new QSettings("Caddi", "infoscreen"); - timer = new QTimer(this); - connect(timer, SIGNAL(timeout() ), this, SLOT(onTimer() )); - timer->start(100); - } else { - qDebug() << "Starting plain browser mode"; - web->setVisible(true); - web->start(url,screenid); + qDebug() << "Loading settings" << settings->fileName(); + + QString mode = settings->value("mode").toString().toLower(); + if (mode == "simpleweb") { + currentMode = ModeSimpleWeb; + } else if (mode == "xml") { + currentMode = ModeXml; + } else if (mode == "local") { + currentMode = ModeLocal; + } else { + currentMode = ModeNone; + QMessageBox::warning(this, "infoscreen", "no operation mode set or mode given an invalid value"); + exit(1); + } + + + if (currentMode == ModeSimpleWeb || currentMode == ModeXml) { + url = settings->value("url").toString(); + screenid = settings->value("screenid").toString(); + if (url == "" || screenid == "") { + QMessageBox::warning(this,"infoscreen","Could not find url or screenid in config file " + settings->fileName()); + + exit(1); //Normal qApp->exit() doesn't terminate the init sequence so use std C exit function + } + } + + if (currentMode == ModeLocal) { + path = settings->value("path").toString(); + + if (path == "") { + QMessageBox::warning(this,"infoscreen","Could not find path in config file " + settings->fileName()); + exit(1); + } } } @@ -95,11 +134,64 @@ void MainView::onTimer() { + qDebug() << "onTimer()"; screenManager.timerTick(); - readXml(); + if (currentMode == ModeXml) { + readXml(); + } + + if (currentMode == ModeXml || currentMode == ModeLocal) { + switchScreens(); + } +} + + +void MainView::readLocalFiles() +{ + QDir dir(path); + if (! dir.exists()) { + QMessageBox::warning(this,"infoscreen","Local Source directory not found: " + path); + exit(1); + } + QFileInfoList files = dir.entryInfoList(QDir::Files, QDir::Name); //only files, sort by name + + for (int i=0; iloadFromUrl( currentItem.url ); - - } - if (currentItem.module == "info_web") { + break; + case ModuleWeb: ensureVisible(web); web->load(currentItem.url); - } - if (currentItem.module == "info_video") { + break; + case ModuleVideo: ensureVisible(video); video->loadUrl(currentItem.url); + break; + case ModuleSvg: + ensureVisible(svg); + svg->load(currentItem.url); + break; + default: + // ModuleUnknown - what should we do?? + break; } - errorInfoScreen("Unknown module: " + currentItem.module ); - } else { qDebug() << "no screen"; errorInfoScreen("Der er ingen information at vise"); @@ -190,16 +290,6 @@ void MainView::ensureVisible(QWidget* widget) { - if (! widget->isVisible()) { - hideAll(); - widget->setVisible(true); - } + layout->setCurrentWidget(widget); } -void MainView::hideAll() -{ - render->setVisible( false ); - web->setVisible( false); - picture->setVisible( false ); - video->setVisible(false); -}