mirror-chatterino2/windowmanager.cpp

113 lines
2.9 KiB
C++
Raw Normal View History

2017-04-12 17:46:44 +02:00
#include "windowmanager.h"
2017-01-15 16:38:30 +01:00
#include <QDebug>
#include <QStandardPaths>
#include <boost/foreach.hpp>
#include <boost/property_tree/json_parser.hpp>
2017-01-18 21:30:23 +01:00
namespace chatterino {
2017-04-12 17:46:44 +02:00
static const std::string &getSettingsPath()
{
static std::string path =
2017-04-12 17:46:44 +02:00
(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/windows.json")
.toStdString();
return path;
}
2017-04-12 17:46:44 +02:00
QMutex WindowManager::windowMutex;
2017-01-15 16:38:30 +01:00
2017-04-12 17:46:44 +02:00
widgets::MainWindow *WindowManager::mainWindow(nullptr);
2017-01-15 16:38:30 +01:00
2017-04-12 17:46:44 +02:00
void WindowManager::layoutVisibleChatWidgets(Channel *channel)
2017-01-15 16:38:30 +01:00
{
2017-04-12 17:46:44 +02:00
if (WindowManager::mainWindow != nullptr) {
WindowManager::mainWindow->layoutVisibleChatWidgets(channel);
2017-01-26 04:26:40 +01:00
}
}
2017-04-12 17:46:44 +02:00
void WindowManager::repaintVisibleChatWidgets(Channel *channel)
{
2017-04-12 17:46:44 +02:00
if (WindowManager::mainWindow != nullptr) {
WindowManager::mainWindow->repaintVisibleChatWidgets(channel);
2017-01-26 04:26:40 +01:00
}
2017-01-15 16:38:30 +01:00
}
2017-01-26 21:04:01 +01:00
2017-04-12 17:46:44 +02:00
void WindowManager::repaintGifEmotes()
2017-02-07 00:03:15 +01:00
{
2017-04-12 17:46:44 +02:00
if (WindowManager::mainWindow != nullptr) {
WindowManager::mainWindow->repaintGifEmotes();
2017-02-07 00:03:15 +01:00
}
}
2017-04-12 17:46:44 +02:00
void WindowManager::updateAll()
2017-02-02 01:23:26 +01:00
{
2017-04-12 17:46:44 +02:00
if (WindowManager::mainWindow != nullptr) {
WindowManager::mainWindow->update();
2017-02-02 01:23:26 +01:00
}
}
2017-04-12 17:46:44 +02:00
void WindowManager::load()
2017-01-26 21:04:01 +01:00
{
const auto &settingsPath = getSettingsPath();
boost::property_tree::ptree tree;
try {
boost::property_tree::read_json(settingsPath, tree);
} catch (const boost::property_tree::json_parser_error &ex) {
2017-04-12 17:46:44 +02:00
qDebug() << "Error using property_tree::readJson: " << QString::fromStdString(ex.message());
2017-04-12 17:46:44 +02:00
WindowManager::getMainWindow().loadDefaults();
return;
}
// Read a list of windows
try {
BOOST_FOREACH (const boost::property_tree::ptree::value_type &v,
tree.get_child("windows.")) {
qDebug() << QString::fromStdString(v.first.data());
const auto &type = v.second.get<std::string>("type", "unknown");
if (type == "main") {
2017-04-12 17:46:44 +02:00
WindowManager::getMainWindow().load(v.second);
} else {
qDebug() << "Unhandled window type: " << type.c_str();
}
}
} catch (boost::property_tree::ptree_error &) {
// can't read windows
}
// if the main window was not loaded properly, load defaults
2017-04-12 17:46:44 +02:00
if (!WindowManager::getMainWindow().isLoaded()) {
WindowManager::getMainWindow().loadDefaults();
}
// If there are no windows, create a default main window
2017-01-26 21:04:01 +01:00
}
2017-04-12 17:46:44 +02:00
void WindowManager::save()
2017-01-26 21:04:01 +01:00
{
const auto &settingsPath = getSettingsPath();
boost::property_tree::ptree tree;
// Create windows array
boost::property_tree::ptree windows;
{
// save main window
2017-04-12 17:46:44 +02:00
auto child = WindowManager::getMainWindow().save();
windows.push_back(std::make_pair("", child));
}
// TODO: iterate through rest of windows and add them to the "windows" ptree
tree.add_child("windows", windows);
boost::property_tree::write_json(settingsPath, tree);
2017-01-26 21:04:01 +01:00
}
} // namespace chatterino