Commit 608daefa authored by Bryant's avatar Bryant

Refactored QGC startup so that MainWindow::instance() is usable everywhere....

Refactored QGC startup so that MainWindow::instance() is usable everywhere. This was required to get the styling working properly for ChartPlot.
parent 8e05f821
...@@ -129,25 +129,24 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv) ...@@ -129,25 +129,24 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
// setFont(fontDatabase.font(fontFamilyName, "Roman", 12)); // setFont(fontDatabase.font(fontFamilyName, "Roman", 12));
// Start the comm link manager // Start the comm link manager
splashScreen->showMessage(tr("Starting Communication Links"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141)); splashScreen->showMessage(tr("Starting communication links"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
startLinkManager(); startLinkManager();
// Start the UAS Manager // Start the UAS Manager
splashScreen->showMessage(tr("Starting UAS Manager"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141)); splashScreen->showMessage(tr("Starting UAS manager"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
startUASManager(); startUASManager();
// Start the user interface // Start the user interface
splashScreen->showMessage(tr("Starting User Interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141)); splashScreen->showMessage(tr("Starting user interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
// Start UI
// The first call to instance() creates the MainWindow, so make sure it's passed the splashScreen.
mainWindow = MainWindow::instance(splashScreen);
// Connect links // Connect links
// to make sure that all components are initialized when the // to make sure that all components are initialized when the
// first messages arrive // first messages arrive
UDPLink* udpLink = new UDPLink(QHostAddress::Any, 14550); UDPLink* udpLink = new UDPLink(QHostAddress::Any, 14550);
MainWindow::instance()->addLink(udpLink); MainWindow::instance()->addLink(udpLink);
// Listen on Multicast-Address 239.255.77.77, Port 14550
//QHostAddress * multicast_udp = new QHostAddress("239.255.77.77");
//UDPLink* udpLink = new UDPLink(*multicast_udp, 14550);
#ifdef OPAL_RT #ifdef OPAL_RT
// Add OpalRT Link, but do not connect // Add OpalRT Link, but do not connect
...@@ -157,8 +156,6 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv) ...@@ -157,8 +156,6 @@ QGCCore::QGCCore(int &argc, char* argv[]) : QApplication(argc, argv)
MAVLinkSimulationLink* simulationLink = new MAVLinkSimulationLink(":/demo-log.txt"); MAVLinkSimulationLink* simulationLink = new MAVLinkSimulationLink(":/demo-log.txt");
simulationLink->disconnect(); simulationLink->disconnect();
mainWindow = MainWindow::instance(splashScreen);
// Remove splash screen // Remove splash screen
splashScreen->finish(mainWindow); splashScreen->finish(mainWindow);
...@@ -211,7 +208,7 @@ QGCCore::~QGCCore() ...@@ -211,7 +208,7 @@ QGCCore::~QGCCore()
// then links // then links
delete LinkManager::instance(); delete LinkManager::instance();
// Finally the main window // Finally the main window
delete MainWindow::instance(); delete MainWindow::instance();
} }
/** /**
......
...@@ -79,14 +79,15 @@ const QString MainWindow::defaultLightStyle = ":files/styles/style-light.css"; ...@@ -79,14 +79,15 @@ const QString MainWindow::defaultLightStyle = ":files/styles/style-light.css";
MainWindow* MainWindow::instance(QSplashScreen* screen) MainWindow* MainWindow::instance(QSplashScreen* screen)
{ {
static MainWindow* _instance = 0; static MainWindow* _instance = 0;
if(_instance == 0) if (_instance == 0)
{ {
_instance = new MainWindow(); _instance = new MainWindow();
if (screen) connect(_instance, SIGNAL(initStatusChanged(QString)), screen, SLOT(showMessage(QString))); if (screen)
{
/* Set the application as parent to ensure that this object connect(_instance, SIGNAL(initStatusChanged(QString,int,QColor)),
* will be destroyed when the main application exits */ screen, SLOT(showMessage(QString,int,QColor)));
//_instance->setParent(qApp); }
_instance->init();
} }
return _instance; return _instance;
} }
...@@ -108,15 +109,19 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -108,15 +109,19 @@ MainWindow::MainWindow(QWidget *parent):
darkStyleFileName(defaultDarkStyle), darkStyleFileName(defaultDarkStyle),
lightStyleFileName(defaultLightStyle), lightStyleFileName(defaultLightStyle),
autoReconnect(false), autoReconnect(false),
lowPowerMode(false) lowPowerMode(false),
dockWidgetTitleBarEnabled(true),
isAdvancedMode(false)
{ {
hide(); hide();
dockWidgetTitleBarEnabled = true; }
isAdvancedMode = false;
emit initStatusChanged("Loading UI Settings.."); void MainWindow::init()
{
emit initStatusChanged(tr("Loading settings"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
loadSettings(); loadSettings();
emit initStatusChanged("Loading Style."); emit initStatusChanged(tr("Loading style"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
qApp->setStyle("plastique"); qApp->setStyle("plastique");
if (currentStyle == QGC_MAINWINDOW_STYLE_LIGHT) if (currentStyle == QGC_MAINWINDOW_STYLE_LIGHT)
{ {
...@@ -151,8 +156,7 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -151,8 +156,7 @@ MainWindow::MainWindow(QWidget *parent):
} }
settings.sync(); settings.sync();
emit initStatusChanged(tr("Setting up user interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
emit initStatusChanged("Setting up user interface.");
// Setup user interface // Setup user interface
ui.setupUi(this); ui.setupUi(this);
...@@ -196,18 +200,18 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -196,18 +200,18 @@ MainWindow::MainWindow(QWidget *parent):
setStatusBar(customStatusBar); setStatusBar(customStatusBar);
statusBar()->setSizeGripEnabled(true); statusBar()->setSizeGripEnabled(true);
emit initStatusChanged("Building common widgets."); emit initStatusChanged(tr("Building common widgets"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
buildCommonWidgets(); buildCommonWidgets();
connectCommonWidgets(); connectCommonWidgets();
emit initStatusChanged("Building common actions."); emit initStatusChanged(tr("Building common actions"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
// Create actions // Create actions
connectCommonActions(); connectCommonActions();
// Populate link menu // Populate link menu
emit initStatusChanged("Populating link menu"); emit initStatusChanged(tr("Populating link menu"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
QList<LinkInterface*> links = LinkManager::instance()->getLinks(); QList<LinkInterface*> links = LinkManager::instance()->getLinks();
foreach(LinkInterface* link, links) foreach(LinkInterface* link, links)
{ {
...@@ -217,19 +221,19 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -217,19 +221,19 @@ MainWindow::MainWindow(QWidget *parent):
connect(LinkManager::instance(), SIGNAL(newLink(LinkInterface*)), this, SLOT(addLink(LinkInterface*))); connect(LinkManager::instance(), SIGNAL(newLink(LinkInterface*)), this, SLOT(addLink(LinkInterface*)));
// Connect user interface devices // Connect user interface devices
emit initStatusChanged("Initializing joystick interface."); emit initStatusChanged(tr("Initializing joystick interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
joystickWidget = 0; joystickWidget = 0;
joystick = new JoystickInput(); joystick = new JoystickInput();
#ifdef MOUSE_ENABLED_WIN #ifdef MOUSE_ENABLED_WIN
emit initStatusChanged("Initializing 3D mouse interface."); emit initStatusChanged(tr("Initializing 3D mouse interface", Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
mouseInput = new Mouse3DInput(this); mouseInput = new Mouse3DInput(this);
mouse = new Mouse6dofInput(mouseInput); mouse = new Mouse6dofInput(mouseInput);
#endif //MOUSE_ENABLED_WIN #endif //MOUSE_ENABLED_WIN
#if MOUSE_ENABLED_LINUX #if MOUSE_ENABLED_LINUX
emit initStatusChanged("Initializing 3D mouse interface."); emit initStatusChanged(tr("Initializing 3D mouse interface"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
mouse = new Mouse6dofInput(this); mouse = new Mouse6dofInput(this);
connect(this, SIGNAL(x11EventOccured(XEvent*)), mouse, SLOT(handleX11Event(XEvent*))); connect(this, SIGNAL(x11EventOccured(XEvent*)), mouse, SLOT(handleX11Event(XEvent*)));
...@@ -251,12 +255,12 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -251,12 +255,12 @@ MainWindow::MainWindow(QWidget *parent):
// Initialize window state // Initialize window state
windowStateVal = windowState(); windowStateVal = windowState();
emit initStatusChanged("Restoring last view state."); emit initStatusChanged(tr("Restoring last view state"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
// Restore the window setup // Restore the window setup
loadViewState(); loadViewState();
emit initStatusChanged("Restoring last window size."); emit initStatusChanged(tr("Restoring last window size"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
// Restore the window position and size // Restore the window position and size
if (settings.contains(getWindowGeometryKey())) if (settings.contains(getWindowGeometryKey()))
{ {
...@@ -285,7 +289,7 @@ MainWindow::MainWindow(QWidget *parent): ...@@ -285,7 +289,7 @@ MainWindow::MainWindow(QWidget *parent):
connect(&windowNameUpdateTimer, SIGNAL(timeout()), this, SLOT(configureWindowName())); connect(&windowNameUpdateTimer, SIGNAL(timeout()), this, SLOT(configureWindowName()));
windowNameUpdateTimer.start(15000); windowNameUpdateTimer.start(15000);
emit initStatusChanged("Done."); emit initStatusChanged(tr("Done"), Qt::AlignLeft | Qt::AlignBottom, QColor(62, 93, 141));
show(); show();
} }
......
...@@ -97,15 +97,38 @@ class MainWindow : public QMainWindow ...@@ -97,15 +97,38 @@ class MainWindow : public QMainWindow
Q_OBJECT Q_OBJECT
public: public:
/**
* A static function for obtaining the sole instance of the MainWindow. The screen
* argument is only important on the FIRST call to this function. The provided splash
* screen is updated with some status messages that are emitted during init(). This
* function cannot be used within the MainWindow constructor!
*/
static MainWindow* instance(QSplashScreen* screen = 0); static MainWindow* instance(QSplashScreen* screen = 0);
/**
* Initializes the MainWindow. Some variables are initialized and the widget is hidden.
* Initialization of the MainWindow class really occurs in init(), which loads the UI
* and does everything important. The constructor is split in two like this so that
* the instance() is available for all classes.
*/
MainWindow(QWidget *parent = NULL);
~MainWindow(); ~MainWindow();
/**
* This function actually performs the non-trivial initialization of the MainWindow
* class. This is separate from the constructor because instance() won't work within
* code executed in the MainWindow constructor.
*/
void init();
enum QGC_MAINWINDOW_STYLE enum QGC_MAINWINDOW_STYLE
{ {
QGC_MAINWINDOW_STYLE_DARK, QGC_MAINWINDOW_STYLE_DARK,
QGC_MAINWINDOW_STYLE_LIGHT QGC_MAINWINDOW_STYLE_LIGHT
}; };
// Declare default dark and light stylesheets. These should be file-resource
// paths.
static const QString defaultDarkStyle; static const QString defaultDarkStyle;
static const QString defaultLightStyle; static const QString defaultLightStyle;
...@@ -115,13 +138,13 @@ public: ...@@ -115,13 +138,13 @@ public:
return currentStyle; return currentStyle;
} }
/** @brief Get current light visual stylesheet */ /** @brief Get current light visual stylesheet */
QString getLightStyleSheet() QString getLightStyleSheet()
{ {
return lightStyleFileName; return lightStyleFileName;
} }
/** @brief Get current dark visual stylesheet */ /** @brief Get current dark visual stylesheet */
QString getDarkStyleSheet() QString getDarkStyleSheet()
{ {
return darkStyleFileName; return darkStyleFileName;
...@@ -257,7 +280,7 @@ public slots: ...@@ -257,7 +280,7 @@ public slots:
signals: signals:
void styleChanged(MainWindow::QGC_MAINWINDOW_STYLE newTheme); void styleChanged(MainWindow::QGC_MAINWINDOW_STYLE newTheme);
void initStatusChanged(const QString& message); void initStatusChanged(const QString& message, int alignment, const QColor &color);
#ifdef MOUSE_ENABLED_LINUX #ifdef MOUSE_ENABLED_LINUX
/** @brief Forward X11Event to catch 3DMouse inputs */ /** @brief Forward X11Event to catch 3DMouse inputs */
void x11EventOccured(XEvent *event); void x11EventOccured(XEvent *event);
...@@ -276,8 +299,6 @@ public: ...@@ -276,8 +299,6 @@ public:
protected: protected:
MainWindow(QWidget *parent = 0);
typedef enum _VIEW_SECTIONS typedef enum _VIEW_SECTIONS
{ {
VIEW_ENGINEER, VIEW_ENGINEER,
......
...@@ -53,10 +53,10 @@ ChartPlot::ChartPlot(QWidget *parent): ...@@ -53,10 +53,10 @@ ChartPlot::ChartPlot(QWidget *parent):
} }
// Now that all objects have been initialized, color everything. // Now that all objects have been initialized, color everything.
applyColorScheme(((MainWindow*)parent)->getStyle()); applyColorScheme(MainWindow::instance()->getStyle());
// And make sure we're listening for future style changes // And make sure we're listening for future style changes
connect(parent, SIGNAL(styleChanged(MainWindow::QGC_MAINWINDOW_STYLE)), connect(MainWindow::instance(), SIGNAL(styleChanged(MainWindow::QGC_MAINWINDOW_STYLE)),
this, SLOT(applyColorScheme(MainWindow::QGC_MAINWINDOW_STYLE))); this, SLOT(applyColorScheme(MainWindow::QGC_MAINWINDOW_STYLE)));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment