feat: option for set window startup size
This commit is contained in:
parent
5674230c4c
commit
432266a6f0
|
@ -45,8 +45,9 @@ int main(int argc, char *argv[])
|
|||
|
||||
if (!urlList.isEmpty()) {
|
||||
w.showUrls(urlList);
|
||||
w.adjustWindowSizeBySceneRect();
|
||||
}
|
||||
|
||||
w.initWindowSize();
|
||||
|
||||
return a.exec();
|
||||
}
|
||||
|
|
|
@ -164,8 +164,22 @@ void MainWindow::showUrls(const QList<QUrl> &urls)
|
|||
m_gv->fitInView(m_gv->sceneRect(), Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
void MainWindow::initWindowSize()
|
||||
{
|
||||
switch (Settings::instance()->initWindowSizeBehavior()) {
|
||||
case ActionAutoSize:
|
||||
adjustWindowSizeBySceneRect();
|
||||
break;
|
||||
case ActionMaximize:
|
||||
showMaximized();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::adjustWindowSizeBySceneRect()
|
||||
{
|
||||
if (m_pm->count() < 1) return;
|
||||
|
||||
QSize sceneSize = m_graphicsView->sceneRect().toRect().size();
|
||||
QSize sceneSizeWithMargins = sceneSize + QSize(130, 125);
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ public:
|
|||
~MainWindow() override;
|
||||
|
||||
void showUrls(const QList<QUrl> &urls);
|
||||
void initWindowSize();
|
||||
void adjustWindowSizeBySceneRect();
|
||||
QUrl currentImageFileUrl() const;
|
||||
|
||||
|
|
|
@ -118,6 +118,11 @@ int PlaylistManager::indexOf(const QString &filePath)
|
|||
return m_playlist.indexOf(url);
|
||||
}
|
||||
|
||||
int PlaylistManager::count() const
|
||||
{
|
||||
return m_playlist.count();
|
||||
}
|
||||
|
||||
std::tuple<int, QString> PlaylistManager::previousFile() const
|
||||
{
|
||||
int count = m_playlist.count();
|
||||
|
|
|
@ -28,6 +28,8 @@ public:
|
|||
int appendFile(const QString & filePath);
|
||||
int indexOf(const QString & filePath);
|
||||
|
||||
int count() const;
|
||||
|
||||
std::tuple<int, QString> previousFile() const;
|
||||
std::tuple<int, QString> nextFile() const;
|
||||
std::tuple<int, QString> currentFile() const;
|
||||
|
|
|
@ -21,20 +21,27 @@ bool Settings::stayOnTop()
|
|||
return m_qsettings->value("stay_on_top", true).toBool();
|
||||
}
|
||||
|
||||
DoubleClickBehavior Settings::doubleClickBehavior()
|
||||
DoubleClickBehavior Settings::doubleClickBehavior() const
|
||||
{
|
||||
QString result = m_qsettings->value("double_click_behavior", "close").toString().toLower();
|
||||
|
||||
return stringToDoubleClickBehavior(result);
|
||||
}
|
||||
|
||||
MouseWheelBehavior Settings::mouseWheelBehavior()
|
||||
MouseWheelBehavior Settings::mouseWheelBehavior() const
|
||||
{
|
||||
QString result = m_qsettings->value("mouse_wheel_behavior", "close").toString().toLower();
|
||||
|
||||
return stringToMouseWheelBehavior(result);
|
||||
}
|
||||
|
||||
WindowSizeBehavior Settings::initWindowSizeBehavior() const
|
||||
{
|
||||
QString result = m_qsettings->value("init_window_size_behavior", "auto").toString().toLower();
|
||||
|
||||
return stringToWindowSizeBehavior(result);
|
||||
}
|
||||
|
||||
void Settings::setStayOnTop(bool on)
|
||||
{
|
||||
m_qsettings->setValue("stay_on_top", on);
|
||||
|
@ -53,6 +60,12 @@ void Settings::setMouseWheelBehavior(MouseWheelBehavior mwb)
|
|||
m_qsettings->sync();
|
||||
}
|
||||
|
||||
void Settings::setInitWindowSizeBehavior(WindowSizeBehavior wsb)
|
||||
{
|
||||
m_qsettings->setValue("init_window_size_behavior", windowSizeBehaviorToString(wsb));
|
||||
m_qsettings->sync();
|
||||
}
|
||||
|
||||
QString Settings::doubleClickBehaviorToString(DoubleClickBehavior dcb)
|
||||
{
|
||||
static QMap<DoubleClickBehavior, QString> _map {
|
||||
|
@ -74,6 +87,16 @@ QString Settings::mouseWheelBehaviorToString(MouseWheelBehavior mwb)
|
|||
return _map.value(mwb, "zoom");
|
||||
}
|
||||
|
||||
QString Settings::windowSizeBehaviorToString(WindowSizeBehavior wsb)
|
||||
{
|
||||
static QMap<WindowSizeBehavior, QString> _map {
|
||||
{ActionAutoSize, "auto"},
|
||||
{ActionMaximize, "maximized"}
|
||||
};
|
||||
|
||||
return _map.value(wsb, "zoom");
|
||||
}
|
||||
|
||||
DoubleClickBehavior Settings::stringToDoubleClickBehavior(QString str)
|
||||
{
|
||||
static QMap<QString, DoubleClickBehavior> _map {
|
||||
|
@ -95,6 +118,16 @@ MouseWheelBehavior Settings::stringToMouseWheelBehavior(QString str)
|
|||
return _map.value(str, ActionZoomImage);
|
||||
}
|
||||
|
||||
WindowSizeBehavior Settings::stringToWindowSizeBehavior(QString str)
|
||||
{
|
||||
static QMap<QString, WindowSizeBehavior> _map {
|
||||
{"auto", ActionAutoSize},
|
||||
{"maximized", ActionMaximize}
|
||||
};
|
||||
|
||||
return _map.value(str, ActionAutoSize);
|
||||
}
|
||||
|
||||
Settings::Settings()
|
||||
: QObject(qApp)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,14 @@ enum MouseWheelBehavior {
|
|||
MWActionEnd = ActionPrevNextImage
|
||||
};
|
||||
|
||||
enum WindowSizeBehavior {
|
||||
ActionAutoSize,
|
||||
ActionMaximize,
|
||||
|
||||
IWSActionStart = ActionAutoSize,
|
||||
IWSActionEnd = ActionMaximize
|
||||
};
|
||||
|
||||
class Settings : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -27,17 +35,21 @@ public:
|
|||
static Settings *instance();
|
||||
|
||||
bool stayOnTop();
|
||||
DoubleClickBehavior doubleClickBehavior();
|
||||
MouseWheelBehavior mouseWheelBehavior();
|
||||
DoubleClickBehavior doubleClickBehavior() const;
|
||||
MouseWheelBehavior mouseWheelBehavior() const;
|
||||
WindowSizeBehavior initWindowSizeBehavior() const;
|
||||
|
||||
void setStayOnTop(bool on);
|
||||
void setDoubleClickBehavior(DoubleClickBehavior dcb);
|
||||
void setMouseWheelBehavior(MouseWheelBehavior mwb);
|
||||
void setInitWindowSizeBehavior(WindowSizeBehavior wsb);
|
||||
|
||||
static QString doubleClickBehaviorToString(DoubleClickBehavior dcb);
|
||||
static QString mouseWheelBehaviorToString(MouseWheelBehavior mwb);
|
||||
static QString windowSizeBehaviorToString(WindowSizeBehavior wsb);
|
||||
static DoubleClickBehavior stringToDoubleClickBehavior(QString str);
|
||||
static MouseWheelBehavior stringToMouseWheelBehavior(QString str);
|
||||
static WindowSizeBehavior stringToWindowSizeBehavior(QString str);
|
||||
|
||||
private:
|
||||
Settings();
|
||||
|
|
|
@ -12,6 +12,7 @@ SettingsDialog::SettingsDialog(QWidget *parent)
|
|||
, m_stayOnTop(new QCheckBox)
|
||||
, m_doubleClickBehavior(new QComboBox)
|
||||
, m_mouseWheelBehavior(new QComboBox)
|
||||
, m_initWindowSizeBehavior(new QComboBox)
|
||||
{
|
||||
this->setWindowTitle(tr("Settings"));
|
||||
|
||||
|
@ -28,6 +29,11 @@ SettingsDialog::SettingsDialog(QWidget *parent)
|
|||
{ ActionPrevNextImage, tr("View next or previous item") }
|
||||
};
|
||||
|
||||
static QMap<WindowSizeBehavior, QString> _iws_map {
|
||||
{ ActionAutoSize, "Auto size" },
|
||||
{ ActionMaximize, "Maximize" }
|
||||
};
|
||||
|
||||
QStringList dcbDropDown;
|
||||
for (int dcb = DCActionStart; dcb <= DCActionEnd; dcb++) {
|
||||
dcbDropDown.append(_dc_map.value(static_cast<DoubleClickBehavior>(dcb)));
|
||||
|
@ -38,9 +44,15 @@ SettingsDialog::SettingsDialog(QWidget *parent)
|
|||
mwbDropDown.append(_mw_map.value(static_cast<MouseWheelBehavior>(mwb)));
|
||||
}
|
||||
|
||||
QStringList iwsbDropDown;
|
||||
for (int iwsb = IWSActionStart; iwsb <= IWSActionEnd; iwsb++) {
|
||||
iwsbDropDown.append(_iws_map.value(static_cast<WindowSizeBehavior>(iwsb)));
|
||||
}
|
||||
|
||||
settingsForm->addRow(tr("Stay on top when start-up"), m_stayOnTop);
|
||||
settingsForm->addRow(tr("Double-click behavior"), m_doubleClickBehavior);
|
||||
settingsForm->addRow(tr("Mouse wheel behavior"), m_mouseWheelBehavior);
|
||||
settingsForm->addRow("Init window size behavior", m_initWindowSizeBehavior);
|
||||
|
||||
m_stayOnTop->setChecked(Settings::instance()->stayOnTop());
|
||||
m_doubleClickBehavior->setModel(new QStringListModel(dcbDropDown));
|
||||
|
@ -49,6 +61,9 @@ SettingsDialog::SettingsDialog(QWidget *parent)
|
|||
m_mouseWheelBehavior->setModel(new QStringListModel(mwbDropDown));
|
||||
MouseWheelBehavior mwb = Settings::instance()->mouseWheelBehavior();
|
||||
m_mouseWheelBehavior->setCurrentIndex(static_cast<int>(mwb));
|
||||
m_initWindowSizeBehavior->setModel(new QStringListModel(iwsbDropDown));
|
||||
WindowSizeBehavior iwsb = Settings::instance()->initWindowSizeBehavior();
|
||||
m_initWindowSizeBehavior->setCurrentIndex(static_cast<int>(iwsb));
|
||||
|
||||
connect(m_stayOnTop, &QCheckBox::stateChanged, this, [ = ](int state){
|
||||
Settings::instance()->setStayOnTop(state == Qt::Checked);
|
||||
|
@ -62,7 +77,11 @@ SettingsDialog::SettingsDialog(QWidget *parent)
|
|||
Settings::instance()->setMouseWheelBehavior(static_cast<MouseWheelBehavior>(index));
|
||||
});
|
||||
|
||||
this->setMinimumSize(300, 61); // not sure why it complain "Unable to set geometry"
|
||||
connect(m_initWindowSizeBehavior, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [ = ](int index){
|
||||
Settings::instance()->setInitWindowSizeBehavior(static_cast<WindowSizeBehavior>(index));
|
||||
});
|
||||
|
||||
this->setMinimumSize(300, 90); // not sure why it complain "Unable to set geometry"
|
||||
setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ private:
|
|||
QCheckBox * m_stayOnTop = nullptr;
|
||||
QComboBox * m_doubleClickBehavior = nullptr;
|
||||
QComboBox * m_mouseWheelBehavior = nullptr;
|
||||
QComboBox * m_initWindowSizeBehavior = nullptr;
|
||||
};
|
||||
|
||||
#endif // SETTINGSDIALOG_H
|
||||
|
|
Loading…
Reference in New Issue
Block a user