From 9b376cd2a8382f3e67830bcfad572f7d9618f8fc Mon Sep 17 00:00:00 2001 From: LoRd_MuldeR Date: Sat, 2 Nov 2013 01:07:23 +0100 Subject: [PATCH] Remember previous dropbox position and restore it on next startup. --- etc/Translation/Blank.ts | 6 +-- etc/Translation/LameXP_PL.ts | 6 +-- etc/Translation/LameXP_SV.ts | 6 +-- src/Config.h | 2 +- src/Dialog_DropBox.cpp | 86 +++++++++++++++++++++++++----------- src/Dialog_DropBox.h | 6 ++- src/Model_Settings.cpp | 6 ++- src/Model_Settings.h | 2 + 8 files changed, 80 insertions(+), 40 deletions(-) diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts index 28ca9c76..7e7c3c0b 100644 --- a/etc/Translation/Blank.ts +++ b/etc/Translation/Blank.ts @@ -771,17 +771,17 @@ - + LameXP DropBox - + You can add files to LameXP via Drag&amp;Drop here! - + (Right-click to close the DropBox) diff --git a/etc/Translation/LameXP_PL.ts b/etc/Translation/LameXP_PL.ts index b0bbf1d5..86e45880 100644 --- a/etc/Translation/LameXP_PL.ts +++ b/etc/Translation/LameXP_PL.ts @@ -777,17 +777,17 @@ LameXP - DropBox - + LameXP DropBox LameXP DropBox - + You can add files to LameXP via Drag&amp;Drop here! Możesz dodawać pliki do lisy wrzucając je do DropBoxa! - + (Right-click to close the DropBox) (Kliknij prawym przyciskiem myszy by zamknąć okienko) diff --git a/etc/Translation/LameXP_SV.ts b/etc/Translation/LameXP_SV.ts index d4b8f706..d64a69a6 100644 --- a/etc/Translation/LameXP_SV.ts +++ b/etc/Translation/LameXP_SV.ts @@ -775,17 +775,17 @@ LameXP - DropBox - + LameXP DropBox LameXP DropBox - + You can add files to LameXP via Drag&amp;Drop here! Du kan lägga till filer i LameXP via Dra&amp;Släpp här! - + (Right-click to close the DropBox) (Högerklicka för att stänga DropBox) diff --git a/src/Config.h b/src/Config.h index a9c6d312..2de9d1ef 100644 --- a/src/Config.h +++ b/src/Config.h @@ -35,7 +35,7 @@ #define VER_LAMEXP_MINOR_LO 9 #define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_PATCH 7 -#define VER_LAMEXP_BUILD 1447 +#define VER_LAMEXP_BUILD 1448 #define VER_LAMEXP_CONFG 1348 /////////////////////////////////////////////////////////////////////////////// diff --git a/src/Dialog_DropBox.cpp b/src/Dialog_DropBox.cpp index d8494c02..a46be72a 100644 --- a/src/Dialog_DropBox.cpp +++ b/src/Dialog_DropBox.cpp @@ -90,6 +90,12 @@ QDialog(parent, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint), DropBox::~DropBox(void) { + if(!m_firstShow) + { + m_settings->dropBoxWidgetPositionX(this->x()); + m_settings->dropBoxWidgetPositionY(this->y()); + } + LAMEXP_DELETE(m_counterLabel); LAMEXP_DELETE(m_windowReferencePoint); LAMEXP_DELETE(m_mouseReferencePoint); @@ -134,11 +140,22 @@ void DropBox::showEvent(QShowEvent *event) if(m_firstShow) { m_firstShow = false; - QWidget *parentWidget = dynamic_cast(this->parent()); - QRect availGeometry = QApplication::desktop()->availableGeometry((parentWidget) ? parentWidget : this); - int max_x = availGeometry.width() - frameGeometry().width() + availGeometry.left(); - int max_y = availGeometry.height() - frameGeometry().height() + availGeometry.top(); - move(max_x, max_y); + int pos_x = m_settings->dropBoxWidgetPositionX(); + int pos_y = m_settings->dropBoxWidgetPositionY(); + if((pos_x < 0) && (pos_y < 0)) + { + QWidget *const parentWidget = dynamic_cast(this->parent()); + QWidget *const targetWidget = parentWidget ? parentWidget : this; + QRect availGeometry = QApplication::desktop()->availableGeometry(targetWidget); + pos_x = availGeometry.width() - frameGeometry().width() + availGeometry.left(); + pos_y = availGeometry.height() - frameGeometry().height() + availGeometry.top(); + } + else + { + pos_x = qBound(0, pos_x, m_screenGeometry.width() - frameGeometry().width()); + pos_y = qBound(0, pos_y, m_screenGeometry.height() - frameGeometry().height()); + } + move(pos_x, pos_y); } if(m_moving) @@ -147,6 +164,8 @@ void DropBox::showEvent(QShowEvent *event) m_moving = false; setWindowOpacity(LOW_OPACITY); } + + boundWidget(this); } void DropBox::keyPressEvent(QKeyEvent *event) @@ -161,7 +180,10 @@ void DropBox::keyReleaseEvent(QKeyEvent *event) void DropBox::closeEvent(QCloseEvent *event) { - if(!m_canClose) event->ignore(); + if(!m_canClose) + { + event->ignore(); + } } void DropBox::mousePressEvent(QMouseEvent *event) @@ -191,29 +213,12 @@ void DropBox::mouseReleaseEvent(QMouseEvent *event) { if(m_moving && event->button() != Qt::RightButton) { - static const int magnetic = 24; - QRect availGeometry = QApplication::desktop()->availableGeometry(this); - - const int max_x = availGeometry.width() - frameGeometry().width() + availGeometry.left(); - const int max_y = availGeometry.height() - frameGeometry().height() + availGeometry.top(); - - int new_x = qBound(availGeometry.left(), this->x(), max_x); - int new_y = qBound(availGeometry.top() , this->y(), max_y); - - if(new_x - availGeometry.left() < magnetic) new_x = availGeometry.left(); - if(new_y - availGeometry.top() < magnetic) new_y = availGeometry.top(); - - if(max_x - new_x < magnetic) new_x = max_x; - if(max_y - new_y < magnetic) new_y = max_y; - - if((this->x() != new_x) || (this->y() != new_y)) - { - move(new_x, new_y); - } - + boundWidget(this); QApplication::restoreOverrideCursor(); - m_moving = false; setWindowOpacity(LOW_OPACITY); + m_settings->dropBoxWidgetPositionX(this->x()); + m_settings->dropBoxWidgetPositionY(this->y()); + m_moving = false; } } @@ -257,3 +262,30 @@ bool DropBox::event(QEvent *event) return QDialog::event(event); } + +//////////////////////////////////////////////////////////// +// PRIVATE +//////////////////////////////////////////////////////////// + +void DropBox::boundWidget(QWidget *widget) +{ + static const int magnetic = 24; + QRect availGeometry = QApplication::desktop()->availableGeometry(widget); + + const int max_x = availGeometry.width() - widget->frameGeometry().width() + availGeometry.left(); + const int max_y = availGeometry.height() - widget->frameGeometry().height() + availGeometry.top(); + + int new_x = qBound(availGeometry.left(), widget->x(), max_x); + int new_y = qBound(availGeometry.top(), widget->y(), max_y); + + if(new_x - availGeometry.left() < magnetic) new_x = availGeometry.left(); + if(new_y - availGeometry.top() < magnetic) new_y = availGeometry.top(); + + if(max_x - new_x < magnetic) new_x = max_x; + if(max_y - new_y < magnetic) new_y = max_y; + + if((widget->x() != new_x) || (widget->y() != new_y)) + { + widget->move(new_x, new_y); + } +} diff --git a/src/Dialog_DropBox.h b/src/Dialog_DropBox.h index f245c33c..fcf6ac97 100644 --- a/src/Dialog_DropBox.h +++ b/src/Dialog_DropBox.h @@ -53,12 +53,14 @@ private: QPoint *m_mouseReferencePoint; QPoint *m_windowReferencePoint; QLabel *m_counterLabel; - QAbstractItemModel *m_model; - SettingsModel *m_settings; + QAbstractItemModel *const m_model; + SettingsModel *const m_settings; bool m_moving; bool m_firstShow; QRect m_screenGeometry; + static void boundWidget(QWidget *widget); + protected: void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); diff --git a/src/Model_Settings.cpp b/src/Model_Settings.cpp index a97f1fb1..4b801c91 100644 --- a/src/Model_Settings.cpp +++ b/src/Model_Settings.cpp @@ -225,7 +225,9 @@ LAMEXP_MAKE_ID(customParametersOpusEnc, "AdvancedOptions/CustomParameters/O LAMEXP_MAKE_ID(customParametersWave, "AdvancedOptions/CustomParameters/Wave"); LAMEXP_MAKE_ID(customTempPath, "AdvancedOptions/TempDirectory/CustomPath"); LAMEXP_MAKE_ID(customTempPathEnabled, "AdvancedOptions/TempDirectory/UseCustomPath"); -LAMEXP_MAKE_ID(dropBoxWidgetEnabled, "Flags/EnableDropBoxWidget"); +LAMEXP_MAKE_ID(dropBoxWidgetEnabled, "DropBoxWidget/Enabled"); +LAMEXP_MAKE_ID(dropBoxWidgetPositionX, "DropBoxWidget/Position/X"); +LAMEXP_MAKE_ID(dropBoxWidgetPositionY, "DropBoxWidget/Position/Y"); LAMEXP_MAKE_ID(favoriteOutputFolders, "OutputDirectory/Favorites"); LAMEXP_MAKE_ID(forceStereoDownmix, "AdvancedOptions/StereoDownmix/Force"); LAMEXP_MAKE_ID(hibernateComputer, "AdvancedOptions/HibernateComputerOnShutdown"); @@ -611,6 +613,8 @@ LAMEXP_MAKE_OPTION_S(customParametersWave, QString()) LAMEXP_MAKE_OPTION_S(customTempPath, QDesktopServices::storageLocation(QDesktopServices::TempLocation)) LAMEXP_MAKE_OPTION_B(customTempPathEnabled, false) LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled, true) +LAMEXP_MAKE_OPTION_I(dropBoxWidgetPositionX, -1) +LAMEXP_MAKE_OPTION_I(dropBoxWidgetPositionY, -1) LAMEXP_MAKE_OPTION_S(favoriteOutputFolders, QString()) LAMEXP_MAKE_OPTION_B(forceStereoDownmix, false) LAMEXP_MAKE_OPTION_B(hibernateComputer, false) diff --git a/src/Model_Settings.h b/src/Model_Settings.h index a107855b..0f223127 100644 --- a/src/Model_Settings.h +++ b/src/Model_Settings.h @@ -155,6 +155,8 @@ public: LAMEXP_MAKE_OPTION_S(customTempPath) LAMEXP_MAKE_OPTION_B(customTempPathEnabled) LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled) + LAMEXP_MAKE_OPTION_I(dropBoxWidgetPositionX) + LAMEXP_MAKE_OPTION_I(dropBoxWidgetPositionY) LAMEXP_MAKE_OPTION_S(favoriteOutputFolders) LAMEXP_MAKE_OPTION_B(forceStereoDownmix) LAMEXP_MAKE_OPTION_B(hibernateComputer)