Allow arbitrary resizing of the main window & restore sidebar's size

fixes #160
fixes #163
fixes #187
fixes #127
This commit is contained in:
Konstantinos Sideris 2018-06-29 14:28:48 +03:00
parent 4344b6964f
commit d56446ce97
5 changed files with 57 additions and 4 deletions

View File

@ -83,14 +83,23 @@ private slots:
void showWelcomePage()
{
removeOverlayProgressBar();
pageStack_->addWidget(welcome_page_);
pageStack_->setCurrentWidget(welcome_page_);
}
//! Show the login page in the main window.
void showLoginPage() { pageStack_->setCurrentWidget(login_page_); }
void showLoginPage()
{
pageStack_->addWidget(login_page_);
pageStack_->setCurrentWidget(login_page_);
}
//! Show the register page in the main window.
void showRegisterPage() { pageStack_->setCurrentWidget(register_page_); }
void showRegisterPage()
{
pageStack_->addWidget(register_page_);
pageStack_->setCurrentWidget(register_page_);
}
//! Show user settings page.
void showUserSettingsPage() { pageStack_->setCurrentWidget(userSettingsPage_); }

View File

@ -24,6 +24,9 @@ class Splitter : public QSplitter
Q_OBJECT
public:
explicit Splitter(QWidget *parent = nullptr);
~Splitter();
void restoreSizes(int fallback);
private:
void onSplitterMoved(int pos, int index);

View File

@ -118,7 +118,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
// Splitter
splitter->addWidget(sideBar_);
splitter->addWidget(content_);
splitter->setSizes({ui::sidebar::NormalSize, parent->width() - ui::sidebar::NormalSize});
splitter->restoreSizes(parent->width());
text_input_ = new TextInputWidget(this);
typingDisplay_ = new TypingDisplay(this);

View File

@ -234,9 +234,12 @@ MainWindow::showChatPage()
showOverlayProgressBar();
welcome_page_->hide();
pageStack_->setCurrentWidget(chat_page_);
pageStack_->removeWidget(welcome_page_);
pageStack_->removeWidget(login_page_);
pageStack_->removeWidget(register_page_);
login_page_->reset();
chat_page_->bootstrap(userid, homeserver, token);

View File

@ -16,6 +16,7 @@
*/
#include <QDebug>
#include <QSettings>
#include "Splitter.h"
#include "Theme.h"
@ -28,6 +29,43 @@ Splitter::Splitter(QWidget *parent)
setStyleSheet("QSplitter::handle { image: none; }");
}
void
Splitter::restoreSizes(int fallback)
{
QSettings settings;
int savedWidth = settings.value("sidebar/width").toInt();
auto left = widget(0);
if (savedWidth == ui::sidebar::SmallSize) {
if (left) {
left->setMinimumWidth(ui::sidebar::SmallSize);
left->setMaximumWidth(ui::sidebar::SmallSize);
return;
}
}
if (savedWidth >= ui::sidebar::NormalSize && savedWidth <= 2 * ui::sidebar::NormalSize) {
if (left) {
left->setMinimumWidth(ui::sidebar::NormalSize);
left->setMaximumWidth(2 * ui::sidebar::NormalSize);
setSizes({savedWidth, fallback - savedWidth});
return;
}
}
setSizes({ui::sidebar::NormalSize, fallback - ui::sidebar::NormalSize});
}
Splitter::~Splitter()
{
auto left = widget(0);
if (left) {
QSettings settings;
settings.setValue("sidebar/width", left->width());
}
}
void
Splitter::onSplitterMoved(int pos, int index)
{