tabbedwindow.cpp Example File
geoservicedemo/tabbedwindow.cpp
#include "tabbedwindow.h"
#include "servicestab.h"
#include <QApplication>
#include <QTabWidget>
#include <QAction>
#include <QMenuBar>
#include <QVBoxLayout>
#include <QTimer>
#include <QMessageBox>
#include <QNetworkProxyFactory>
#include <qnetworkconfigmanager.h>
TabbedWindow::TabbedWindow(QWidget *parent)
: QMainWindow(parent), m_serviceProvider(NULL)
{
setWindowTitle(tr("Geo Service Demo"));
m_servicesTab = new ServicesTab();
QObject::connect(m_servicesTab, SIGNAL(serviceProviderChanged(QString)), this,
SLOT(setProvider(QString)), Qt::QueuedConnection);
m_geocodingTab = new GeocodingTab();
m_reverseTab = new ReverseGeocodingTab();
m_routingTab = new RouteTab();
m_directionsTab = new DirectionsTab();
m_tabWidget = new QTabWidget(this);
m_tabWidget->addTab(m_servicesTab, tr("Service Providers"));
m_tabWidget->addTab(m_routingTab, tr("Route"));
m_tabWidget->addTab(m_geocodingTab, tr("Geocoding"));
m_tabWidget->addTab(m_reverseTab, tr("Reverse Geocoding"));
m_tabWidget->addTab(m_directionsTab, tr("Directions"));
setCentralWidget(m_tabWidget);
#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
QAction* exitAction = new QAction(tr("Exit"), this);
menuBar()->addAction(exitAction);
connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));
#endif
QNetworkConfigurationManager manager;
const bool canStartIAP = (manager.capabilities()
& QNetworkConfigurationManager::CanStartAndStopInterfaces);
QNetworkConfiguration cfg = manager.defaultConfiguration();
if (!cfg.isValid() || (!canStartIAP && cfg.state() != QNetworkConfiguration::Active)) {
QMessageBox::information(this, tr("Geo Service Demo"), tr(
"Available Access Points not found."));
return;
}
m_session = new QNetworkSession(cfg, this);
connect(m_session, SIGNAL(opened()), this, SLOT(networkSessionOpened()));
connect(m_session,
SIGNAL(error(QNetworkSession::SessionError)),
this,
SLOT(error(QNetworkSession::SessionError)));
m_session->open();
resize(640, 480);
}
TabbedWindow::~TabbedWindow()
{
delete m_serviceProvider;
}
void TabbedWindow::networkSessionOpened()
{
QNetworkProxyFactory::setUseSystemConfiguration(true);
QTimer::singleShot(0, m_servicesTab, SLOT(initialize()));
}
void TabbedWindow::error(QNetworkSession::SessionError error)
{
if (error == QNetworkSession::UnknownSessionError) {
if (m_session->state() == QNetworkSession::Connecting) {
QMessageBox msgBox(qobject_cast<QWidget *>(parent()));
msgBox.setText("This application requires network access to function.");
msgBox.setInformativeText("Press Cancel to quit the application.");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Retry | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Retry);
int ret = msgBox.exec();
if (ret == QMessageBox::Retry) {
QTimer::singleShot(0, m_session, SLOT(open()));
} else if (ret == QMessageBox::Cancel) {
close();
}
}
} else if (error == QNetworkSession::SessionAbortedError) {
QMessageBox msgBox(qobject_cast<QWidget *>(parent()));
msgBox.setText("Out of range of network.");
msgBox.setInformativeText("Move back into range and press Retry, or press Cancel to quit the application.");
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Retry | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Retry);
int ret = msgBox.exec();
if (ret == QMessageBox::Retry) {
QTimer::singleShot(0, m_session, SLOT(open()));
} else if (ret == QMessageBox::Cancel) {
close();
}
}
}
void TabbedWindow::setProvider(QString providerId)
{
if (m_serviceProvider)
delete m_serviceProvider ;
m_serviceProvider = new QGeoServiceProvider(providerId);
if (m_serviceProvider->error() != QGeoServiceProvider::NoError) {
QMessageBox::information(this, tr("Geo Service Demo"), tr(
"Unable to find the %1 geoservices plugin.").arg(providerId));
QTimer::singleShot(0, qApp, SLOT(quit()));
return;
}
m_geocodingTab->initialize(m_serviceProvider->searchManager());
m_reverseTab->initialize(m_serviceProvider->searchManager());
m_routingTab->initialize(m_serviceProvider->routingManager());
m_directionsTab->initialize(m_serviceProvider->routingManager(), m_serviceProvider->searchManager());
}
[+] Documentation Feedback