diff options
Diffstat (limited to 'tools/qml/loggerwidget.cpp')
| -rw-r--r-- | tools/qml/loggerwidget.cpp | 120 | 
1 files changed, 116 insertions, 4 deletions
| diff --git a/tools/qml/loggerwidget.cpp b/tools/qml/loggerwidget.cpp index 9eca4a6..3ae2b5e 100644 --- a/tools/qml/loggerwidget.cpp +++ b/tools/qml/loggerwidget.cpp @@ -42,29 +42,141 @@  #include "loggerwidget.h"  #include <qglobal.h>  #include <QDebug> +#include <QSettings> +#include <QActionGroup> +#include <QMenu>  QT_BEGIN_NAMESPACE  LoggerWidget::LoggerWidget(QWidget *parent) :      QPlainTextEdit(parent), -    m_keepClosed(false) +    m_visibilityOrigin(SettingsOrigin)  {      setAttribute(Qt::WA_QuitOnClose, false); -    setWindowTitle(tr("Logger")); +    setWindowTitle(tr("Warnings")); + +    readSettings(); +    setupPreferencesMenu();  }  void LoggerWidget::append(const QString &msg)  {      appendPlainText(msg); -    if (!m_keepClosed && !isVisible()) +    if (!isVisible() && (defaultVisibility() == AutoShowWarnings))          setVisible(true);  } +LoggerWidget::Visibility LoggerWidget::defaultVisibility() const +{ +    return m_visibility; +} + +void LoggerWidget::setDefaultVisibility(LoggerWidget::Visibility visibility) +{ +    if (m_visibility == visibility) +        return; + +    m_visibility = visibility; +    m_visibilityOrigin = CommandLineOrigin; + +    m_preferencesMenu->setEnabled(m_visibilityOrigin == SettingsOrigin); +} + +QMenu *LoggerWidget::preferencesMenu() +{ +    return m_preferencesMenu; +} + +QAction *LoggerWidget::showAction() +{ +    return m_showWidgetAction; +} + +void LoggerWidget::readSettings() +{ +    QSettings settings; +    QString warningsPreferences = settings.value("warnings", "hide").toString(); +    if (warningsPreferences == "show") { +        m_visibility = ShowWarnings; +    } else if (warningsPreferences == "hide") { +        m_visibility = HideWarnings; +    } else { +        m_visibility = AutoShowWarnings; +    } +} + +void LoggerWidget::saveSettings() +{ +    if (m_visibilityOrigin != SettingsOrigin) +        return; + +    QString value = "autoShow"; +    if (defaultVisibility() == ShowWarnings) { +        value = "show"; +    } else if (defaultVisibility() == HideWarnings) { +        value = "hide"; +    } + +    QSettings settings; +    settings.setValue("warnings", value); +} + +void LoggerWidget::warningsPreferenceChanged(QAction *action) +{ +    Visibility newSetting = static_cast<Visibility>(action->data().toInt()); +    m_visibility = newSetting; +    saveSettings(); +} + +void LoggerWidget::showEvent(QShowEvent *event) +{ +    QWidget::showEvent(event); +    emit opened(); +} +  void LoggerWidget::closeEvent(QCloseEvent *event)  { -    m_keepClosed = true;      QWidget::closeEvent(event); +    emit closed(); +} + +void LoggerWidget::setupPreferencesMenu() +{ +    m_preferencesMenu = new QMenu(tr("Warnings")); +    QActionGroup *warnings = new QActionGroup(m_preferencesMenu); +    warnings->setExclusive(true); + +    connect(warnings, SIGNAL(triggered(QAction*)), this, SLOT(warningsPreferenceChanged(QAction*))); + +    QAction *showWarningsPreference = new QAction(tr("Show by default"), m_preferencesMenu); +    showWarningsPreference->setCheckable(true); +    showWarningsPreference->setData(LoggerWidget::ShowWarnings); +    warnings->addAction(showWarningsPreference); +    m_preferencesMenu->addAction(showWarningsPreference); + +    QAction *hideWarningsPreference = new QAction(tr("Hide by default"), m_preferencesMenu); +    hideWarningsPreference->setCheckable(true); +    hideWarningsPreference->setData(LoggerWidget::HideWarnings); +    warnings->addAction(hideWarningsPreference); +    m_preferencesMenu->addAction(hideWarningsPreference); + +    QAction *autoWarningsPreference = new QAction(tr("Show for first warning"), m_preferencesMenu); +    autoWarningsPreference->setCheckable(true); +    autoWarningsPreference->setData(LoggerWidget::AutoShowWarnings); +    warnings->addAction(autoWarningsPreference); +    m_preferencesMenu->addAction(autoWarningsPreference); + +    switch (defaultVisibility()) { +    case LoggerWidget::ShowWarnings: +        showWarningsPreference->setChecked(true); +        break; +    case LoggerWidget::HideWarnings: +        hideWarningsPreference->setChecked(true); +        break; +    default: +        autoWarningsPreference->setChecked(true); +    }  }  QT_END_NAMESPACE | 
