#include "WindowData.h" #include #include #include #include "jsonutils.h" WindowData::WindowData(QObject *parent) : QObject(parent) { } QJsonObject WindowData::saveState() const { QJsonObject json; json["rect"] = rectToJsonArray(m_windowRect); if (!m_screenName.isEmpty()) { json["screen"] = m_screenName; } if (!m_title.isEmpty()) { json["title"] = m_title; } // support frameless option here? json["state"] = static_cast(m_state); return json; } bool WindowData::restoreState(QJsonObject state) { m_windowRect = jsonArrayToRect(state.value("rect").toArray()); emit windowRectChanged(m_windowRect); if (state.contains("screen")) { m_screenName = state.value("screen").toString(); } else { m_screenName.clear(); } if (state.contains("title")) { m_title = state.value("title").toString(); } if (state.contains("state")) { m_state = static_cast(state.value("state").toInt()); } return true; } QRect WindowData::windowRect() const { return m_windowRect; } QScreen *WindowData::screen() const { if (m_screenName.isEmpty()) return nullptr; QStringList screenNames; Q_FOREACH(auto s, qApp->screens()) { if (s->name() == m_screenName) { return s; } screenNames.append(s->name()); } qWarning() << "couldn't find a screen with name:" << m_screenName; qWarning() << "Available screens:" << screenNames.join(", "); return nullptr; } void WindowData::setWindowState(Qt::WindowState ws) { m_state = ws; } void WindowData::setWindowRect(QRect windowRect) { if (m_windowRect == windowRect) return; m_windowRect = windowRect; emit windowRectChanged(m_windowRect); }