mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
Tabs are now loaded and saved (no chats yet)
This commit is contained in:
parent
6fb4305162
commit
1c076b803e
11 changed files with 236 additions and 18 deletions
4
main.cpp
4
main.cpp
|
@ -26,6 +26,8 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
ColorScheme::getInstance().setColors(0, -0.8);
|
ColorScheme::getInstance().setColors(0, -0.8);
|
||||||
|
|
||||||
|
Windows::load();
|
||||||
|
|
||||||
MainWindow &w = Windows::getMainWindow();
|
MainWindow &w = Windows::getMainWindow();
|
||||||
w.show();
|
w.show();
|
||||||
|
|
||||||
|
@ -35,5 +37,7 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
Settings::getInstance().save();
|
Settings::getInstance().save();
|
||||||
|
|
||||||
|
Windows::save();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
#include "widgets/chatwidget.h"
|
#include "widgets/chatwidget.h"
|
||||||
#include "widgets/notebook.h"
|
#include "widgets/notebook.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
#include <QPalette>
|
#include <QPalette>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace widgets {
|
namespace widgets {
|
||||||
|
@ -68,5 +70,34 @@ MainWindow::repaintVisibleChatWidgets(Channel *channel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MainWindow::load(const boost::property_tree::ptree &tree)
|
||||||
|
{
|
||||||
|
this->notebook.load(tree);
|
||||||
|
|
||||||
|
this->loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::property_tree::ptree
|
||||||
|
MainWindow::save()
|
||||||
|
{
|
||||||
|
boost::property_tree::ptree child;
|
||||||
|
|
||||||
|
child.put("type", "main");
|
||||||
|
|
||||||
|
this->notebook.save(child);
|
||||||
|
|
||||||
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MainWindow::loadDefaults()
|
||||||
|
{
|
||||||
|
this->notebook.loadDefaults();
|
||||||
|
|
||||||
|
this->loaded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "widgets/notebook.h"
|
#include "widgets/notebook.h"
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <boost/property_tree/ptree.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace widgets {
|
namespace widgets {
|
||||||
|
@ -19,8 +20,22 @@ public:
|
||||||
|
|
||||||
void layoutVisibleChatWidgets(Channel *channel = NULL);
|
void layoutVisibleChatWidgets(Channel *channel = NULL);
|
||||||
void repaintVisibleChatWidgets(Channel *channel = NULL);
|
void repaintVisibleChatWidgets(Channel *channel = NULL);
|
||||||
};
|
|
||||||
}
|
void load(const boost::property_tree::ptree &tree);
|
||||||
|
boost::property_tree::ptree save();
|
||||||
|
void loadDefaults();
|
||||||
|
|
||||||
|
bool
|
||||||
|
isLoaded() const
|
||||||
|
{
|
||||||
|
return this->loaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool loaded = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|
|
@ -5,10 +5,14 @@
|
||||||
#include "widgets/notebooktab.h"
|
#include "widgets/notebooktab.h"
|
||||||
#include "widgets/settingsdialog.h"
|
#include "widgets/settingsdialog.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QFile>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QLayout>
|
#include <QLayout>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QStandardPaths>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace widgets {
|
namespace widgets {
|
||||||
|
@ -35,8 +39,6 @@ Notebook::Notebook(QWidget *parent)
|
||||||
this->userButton.icon = NotebookButton::IconUser;
|
this->userButton.icon = NotebookButton::IconUser;
|
||||||
|
|
||||||
this->addButton.resize(24, 24);
|
this->addButton.resize(24, 24);
|
||||||
|
|
||||||
this->addPage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NotebookPage *
|
NotebookPage *
|
||||||
|
@ -191,5 +193,50 @@ Notebook::addPageButtonClicked()
|
||||||
{
|
{
|
||||||
addPage(true);
|
addPage(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Notebook::load(const boost::property_tree::ptree &tree)
|
||||||
|
{
|
||||||
|
// Read a list of tabs
|
||||||
|
try {
|
||||||
|
BOOST_FOREACH (const boost::property_tree::ptree::value_type &v,
|
||||||
|
tree.get_child("tabs.")) {
|
||||||
|
bool select = v.second.get<bool>("selected", false);
|
||||||
|
|
||||||
|
auto page = this->addPage(select);
|
||||||
|
auto tab = page->tab;
|
||||||
|
tab->load(v.second);
|
||||||
|
page->load(v.second);
|
||||||
|
}
|
||||||
|
} catch (boost::property_tree::ptree_error &) {
|
||||||
|
// can't read tabs
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->pages.size() == 0) {
|
||||||
|
// No pages saved, show default stuff
|
||||||
|
this->loadDefaults();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Notebook::save(boost::property_tree::ptree &tree)
|
||||||
|
{
|
||||||
|
boost::property_tree::ptree tabs;
|
||||||
|
|
||||||
|
// Iterate through all tabs and add them to our tabs property thing
|
||||||
|
for (const auto &page : this->pages) {
|
||||||
|
boost::property_tree::ptree pTab = page->tab->save();
|
||||||
|
tabs.push_back(std::make_pair("", pTab));
|
||||||
|
}
|
||||||
|
|
||||||
|
tree.add_child("tabs", tabs);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Notebook::loadDefaults()
|
||||||
|
{
|
||||||
|
this->addPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <boost/property_tree/ptree.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace widgets {
|
namespace widgets {
|
||||||
|
@ -54,8 +55,14 @@ private:
|
||||||
NotebookButton userButton;
|
NotebookButton userButton;
|
||||||
|
|
||||||
NotebookPage *selectedPage;
|
NotebookPage *selectedPage;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void load(const boost::property_tree::ptree &tree);
|
||||||
|
void save(boost::property_tree::ptree &tree);
|
||||||
|
void loadDefaults();
|
||||||
};
|
};
|
||||||
}
|
|
||||||
}
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
||||||
#endif // NOTEBOOK_H
|
#endif // NOTEBOOK_H
|
||||||
|
|
|
@ -3,11 +3,13 @@
|
||||||
#include "widgets/chatwidget.h"
|
#include "widgets/chatwidget.h"
|
||||||
#include "widgets/notebooktab.h"
|
#include "widgets/notebooktab.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace widgets {
|
namespace widgets {
|
||||||
|
@ -73,9 +75,8 @@ NotebookPage::removeFromLayout(ChatWidget *widget)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
NotebookPage::addToLayout(
|
NotebookPage::addToLayout(ChatWidget *widget, std::pair<int, int> position =
|
||||||
ChatWidget *widget,
|
std::pair<int, int>(-1, -1))
|
||||||
std::pair<int, int> position = std::pair<int, int>(-1, -1))
|
|
||||||
{
|
{
|
||||||
this->chatWidgets.push_back(widget);
|
this->chatWidgets.push_back(widget);
|
||||||
|
|
||||||
|
@ -239,5 +240,14 @@ NotebookPage::paintEvent(QPaintEvent *)
|
||||||
ColorScheme::getInstance().TabSelectedBackground);
|
ColorScheme::getInstance().TabSelectedBackground);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NotebookPage::load(const boost::property_tree::ptree &v)
|
||||||
|
{
|
||||||
|
const std::string &tabName = v.get<std::string>("name", "UNNAMED");
|
||||||
|
|
||||||
|
qDebug() << "tab name :" << tabName.c_str();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <boost/property_tree/ptree.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace widgets {
|
namespace widgets {
|
||||||
|
@ -70,8 +71,12 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setPreviewRect(QPoint mousePos);
|
void setPreviewRect(QPoint mousePos);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void load(const boost::property_tree::ptree &v);
|
||||||
};
|
};
|
||||||
}
|
|
||||||
}
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
||||||
#endif // NOTEBOOKPAGE_H
|
#endif // NOTEBOOKPAGE_H
|
||||||
|
|
|
@ -203,5 +203,26 @@ NotebookTab::mouseMoveEvent(QMouseEvent *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NotebookTab::load(const boost::property_tree::ptree &tree)
|
||||||
|
{
|
||||||
|
// Load tab text
|
||||||
|
try {
|
||||||
|
this->setText(QString::fromStdString(tree.get<std::string>("text")));
|
||||||
|
} catch (boost::property_tree::ptree_error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::property_tree::ptree
|
||||||
|
NotebookTab::save()
|
||||||
|
{
|
||||||
|
boost::property_tree::ptree tree;
|
||||||
|
|
||||||
|
tree.put("text", this->getText().toStdString());
|
||||||
|
|
||||||
|
return tree;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <QPropertyAnimation>
|
#include <QPropertyAnimation>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <boost/property_tree/ptree.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
namespace widgets {
|
namespace widgets {
|
||||||
|
@ -117,8 +118,13 @@ private slots:
|
||||||
calcSize();
|
calcSize();
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
void load(const boost::property_tree::ptree &tree);
|
||||||
|
boost::property_tree::ptree save();
|
||||||
};
|
};
|
||||||
}
|
|
||||||
}
|
} // namespace widgets
|
||||||
|
} // namespace chatterino
|
||||||
|
|
||||||
#endif // NOTEBOOKTAB_H
|
#endif // NOTEBOOKTAB_H
|
||||||
|
|
75
windows.cpp
75
windows.cpp
|
@ -1,7 +1,23 @@
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/property_tree/json_parser.hpp>
|
||||||
|
|
||||||
namespace chatterino {
|
namespace chatterino {
|
||||||
|
|
||||||
|
static const std::string &
|
||||||
|
getSettingsPath()
|
||||||
|
{
|
||||||
|
static std::string path =
|
||||||
|
(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) +
|
||||||
|
"/windows.json")
|
||||||
|
.toStdString();
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
QMutex Windows::windowMutex;
|
QMutex Windows::windowMutex;
|
||||||
|
|
||||||
widgets::MainWindow *Windows::mainWindow(nullptr);
|
widgets::MainWindow *Windows::mainWindow(nullptr);
|
||||||
|
@ -23,12 +39,67 @@ Windows::repaintVisibleChatWidgets(Channel *channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Windows::save()
|
Windows::load()
|
||||||
{
|
{
|
||||||
|
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) {
|
||||||
|
qDebug() << "Error using property_tree::readJson: "
|
||||||
|
<< QString::fromStdString(ex.message());
|
||||||
|
|
||||||
|
Windows::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") {
|
||||||
|
Windows::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
|
||||||
|
if (!Windows::getMainWindow().isLoaded()) {
|
||||||
|
Windows::getMainWindow().loadDefaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there are no windows, create a default main window
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Windows::load()
|
Windows::save()
|
||||||
{
|
{
|
||||||
|
const auto &settingsPath = getSettingsPath();
|
||||||
|
boost::property_tree::ptree tree;
|
||||||
|
|
||||||
|
// Create windows array
|
||||||
|
boost::property_tree::ptree windows;
|
||||||
|
|
||||||
|
{
|
||||||
|
// save main window
|
||||||
|
auto child = Windows::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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace chatterino
|
||||||
|
|
|
@ -37,6 +37,7 @@ private:
|
||||||
|
|
||||||
static widgets::MainWindow *mainWindow;
|
static widgets::MainWindow *mainWindow;
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
} // namespace chatterino
|
||||||
|
|
||||||
#endif // WINDOWS_H
|
#endif // WINDOWS_H
|
||||||
|
|
Loading…
Reference in a new issue