/*===================================================================== QGroundControl Open Source Ground Control Station (c) 2009 - 2013 QGROUNDCONTROL PROJECT This file is part of the QGROUNDCONTROL project QGROUNDCONTROL is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. QGROUNDCONTROL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QGROUNDCONTROL. If not, see . ======================================================================*/ #include #include #include #include "QGCStatusBar.h" #include "UASManager.h" #include "MainWindow.h" QGCStatusBar::QGCStatusBar(QWidget *parent) : QStatusBar(parent), toggleLoggingButton(NULL), player(NULL), changed(true), lastLogDirectory(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)) { setObjectName("QGC_STATUSBAR"); toggleLoggingButton = new QPushButton(tr("Log to file"), this); toggleLoggingButton->setCheckable(true); addPermanentWidget(toggleLoggingButton); loadSettings(); } void QGCStatusBar::paintEvent(QPaintEvent * event) { Q_UNUSED(event); QPainter p(this); QStyleOption opt; opt.initFrom(this); style()->drawPrimitive(QStyle::PE_PanelStatusBar, &opt, &p, this); } void QGCStatusBar::setLogPlayer(QGCMAVLinkLogPlayer* player) { this->player = player; addPermanentWidget(player); connect(toggleLoggingButton, SIGNAL(clicked(bool)), this, SLOT(logging(bool))); } void QGCStatusBar::logging(bool checked) { // Stop logging in any case MainWindow::instance()->getMAVLink()->enableLogging(false); if (!checked && player) { player->setLastLogFile(lastLogDirectory); } // If the user is enabling logging if (checked) { // Prompt the user for a filename/location to save to QString fileName = QFileDialog::getSaveFileName(this, tr("Specify MAVLink log file to save to"), lastLogDirectory, tr("MAVLink Logfile (*.mavlink *.log *.bin);;")); // Check that they didn't cancel out if (fileName.isNull()) { toggleLoggingButton->setChecked(false); return; } // Make sure the file's named properly if (!fileName.endsWith(".mavlink")) { fileName.append(".mavlink"); } // Check that we can save the logfile QFileInfo file(fileName); if ((file.exists() && !file.isWritable())) { QMessageBox msgBox; msgBox.setIcon(QMessageBox::Critical); msgBox.setText(tr("The selected logfile is not writable")); msgBox.setInformativeText(tr("Please make sure that the file %1 is writable or select a different file").arg(fileName)); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.exec(); } // Otherwise we're off and logging else { MainWindow::instance()->getMAVLink()->setLogfileName(fileName); MainWindow::instance()->getMAVLink()->enableLogging(true); lastLogDirectory = file.absoluteDir().absolutePath(); //save last log directory } } } void QGCStatusBar::loadSettings() { QSettings settings; settings.beginGroup("QGC_MAVLINKLOGPLAYER"); lastLogDirectory = settings.value("LAST_LOG_DIRECTORY", lastLogDirectory).toString(); settings.endGroup(); } void QGCStatusBar::storeSettings() { QSettings settings; settings.beginGroup("QGC_MAVLINKLOGPLAYER"); settings.setValue("LAST_LOG_DIRECTORY", lastLogDirectory); settings.endGroup(); settings.sync(); } QGCStatusBar::~QGCStatusBar() { storeSettings(); if (toggleLoggingButton) toggleLoggingButton->deleteLater(); }