refs #935, resizing for message frame

also avoid showing overlay message too soon (ie when not full initialized)
This commit is contained in:
Klaus Basan
2017-04-13 01:16:54 +02:00
committed by Mathew Sutcliffe
parent f34e80ea62
commit be24d069fe
3 changed files with 35 additions and 17 deletions

View File

@@ -12,21 +12,25 @@
#include "blackgui/stylesheetutility.h" #include "blackgui/stylesheetutility.h"
#include "blackgui/guiutility.h" #include "blackgui/guiutility.h"
#include "blackmisc/network/textmessage.h" #include "blackmisc/network/textmessage.h"
#include "blackmisc/verify.h"
#include <QKeyEvent> #include <QKeyEvent>
#include <QPoint> #include <QPoint>
#include <QRect> #include <QRect>
#include <QStyle> #include <QStyle>
#include <Qt> #include <Qt>
#include <algorithm>
namespace BlackGui namespace BlackGui
{ {
COverlayMessagesFrame::COverlayMessagesFrame(QWidget *parent) : COverlayMessagesFrame::COverlayMessagesFrame(QWidget *parent) :
QFrame(parent) QFrame(parent)
{ } {
// void
}
COverlayMessagesFrame::~COverlayMessagesFrame() COverlayMessagesFrame::~COverlayMessagesFrame()
{} { }
void COverlayMessagesFrame::showStatusMessagesFrame() void COverlayMessagesFrame::showStatusMessagesFrame()
{ {
@@ -42,11 +46,6 @@ namespace BlackGui
} }
} }
void COverlayMessagesFrame::hideStatusMessagesFrame()
{
if (!m_overlayMessages) { return; }
}
void COverlayMessagesFrame::showOverlayMessagesWithConfirmation(const BlackMisc::CStatusMessageList &messages, const QString &confirmationMessage, std::function<void ()> okLambda, int defaultButton, int timeOutMs) void COverlayMessagesFrame::showOverlayMessagesWithConfirmation(const BlackMisc::CStatusMessageList &messages, const QString &confirmationMessage, std::function<void ()> okLambda, int defaultButton, int timeOutMs)
{ {
if (messages.isEmpty()) { return; } if (messages.isEmpty()) { return; }
@@ -106,10 +105,21 @@ namespace BlackGui
} }
} }
void COverlayMessagesFrame::resizeEvent(QResizeEvent *event)
{
QFrame::resizeEvent(event);
if (this->m_overlayMessages && this->m_overlayMessages->isVisible())
{
this->initInnerFrame();
}
}
QSize COverlayMessagesFrame::innerFrameSize() const QSize COverlayMessagesFrame::innerFrameSize() const
{ {
const int w = this->width(); // check against minimum if widget is initialized, but not yet resized
const int h = this->height(); const int w = std::max(this->width(), this->minimumWidth());
const int h = std::max(this->height(), this->minimumHeight());
int wInner = this->m_widthFactor * w; int wInner = this->m_widthFactor * w;
int hInner = this->m_heightFactor * h; int hInner = this->m_heightFactor * h;
if (wInner > this->maximumWidth()) wInner = this->maximumWidth(); if (wInner > this->maximumWidth()) wInner = this->maximumWidth();
@@ -122,6 +132,7 @@ namespace BlackGui
const QSize inner(innerFrameSize()); const QSize inner(innerFrameSize());
if (!this->m_overlayMessages) if (!this->m_overlayMessages)
{ {
// lazy init
this->m_overlayMessages = new COverlayMessages(inner.width(), inner.height(), this); this->m_overlayMessages = new COverlayMessages(inner.width(), inner.height(), this);
this->m_overlayMessages->addShadow(); this->m_overlayMessages->addShadow();
this->m_overlayMessages->showKillButton(m_showKillButton); this->m_overlayMessages->showKillButton(m_showKillButton);

View File

@@ -55,9 +55,6 @@ namespace BlackGui
//! Show kill button //! Show kill button
void showKillButton(bool killButton); void showKillButton(bool killButton);
//! Hide the inner frame
void hideStatusMessagesFrame();
//! Inner frame factors 0..1 //! Inner frame factors 0..1
//! \remarks can also be restricted by maximumHeight() / maximumWidth() //! \remarks can also be restricted by maximumHeight() / maximumWidth()
void setInnerFrameFactor(double xFactor, double yFactor); void setInnerFrameFactor(double xFactor, double yFactor);
@@ -91,6 +88,9 @@ namespace BlackGui
//! \copydoc QFrame::keyPressEvent //! \copydoc QFrame::keyPressEvent
virtual void keyPressEvent(QKeyEvent *event) override; virtual void keyPressEvent(QKeyEvent *event) override;
//! \copydoc QFrame::resizeEvent
virtual void resizeEvent(QResizeEvent *event) override;
COverlayMessages *m_overlayMessages = nullptr; //!< embedded QFrame with Status messages COverlayMessages *m_overlayMessages = nullptr; //!< embedded QFrame with Status messages
private: private:

View File

@@ -201,7 +201,6 @@ bool SwiftGuiStd::isMainPageSelected(SwiftGuiStd::MainPageIndex mainPage) const
return ui->sw_MainMiddle->currentIndex() == static_cast<int>(mainPage); return ui->sw_MainMiddle->currentIndex() == static_cast<int>(mainPage);
} }
void SwiftGuiStd::ps_loginRequested() void SwiftGuiStd::ps_loginRequested()
{ {
if (ui->sw_MainMiddle->currentIndex() == static_cast<int>(MainPageLogin)) if (ui->sw_MainMiddle->currentIndex() == static_cast<int>(MainPageLogin))
@@ -403,6 +402,7 @@ void SwiftGuiStd::ps_verifyDataAvailability()
void SwiftGuiStd::ps_sharedFilesHeadersLoaded() void SwiftGuiStd::ps_sharedFilesHeadersLoaded()
{ {
Q_ASSERT_X(sGui && sGui->hasWebDataServices(), Q_FUNC_INFO, "Missing web services"); Q_ASSERT_X(sGui && sGui->hasWebDataServices(), Q_FUNC_INFO, "Missing web services");
Q_ASSERT_X(CThreadUtils::isCurrentThreadApplicationThread(), Q_FUNC_INFO, "Wrong thread");
const CEntityFlags::Entity newEntities = sGui->getWebDataServices()->getEntitiesWithNewerHeaderTimestamp(CEntityFlags::AllDbEntities); const CEntityFlags::Entity newEntities = sGui->getWebDataServices()->getEntitiesWithNewerHeaderTimestamp(CEntityFlags::AllDbEntities);
if (newEntities == CEntityFlags::NoEntity) { return; } if (newEntities == CEntityFlags::NoEntity) { return; }
CStatusMessage sm = CStatusMessage(this).info("New data for shared files:"); CStatusMessage sm = CStatusMessage(this).info("New data for shared files:");
@@ -413,11 +413,18 @@ void SwiftGuiStd::ps_sharedFilesHeadersLoaded()
sm = CStatusMessage(this).info("Load data for '%1'?") << CEntityFlags::flagToString(newSingleEntity); sm = CStatusMessage(this).info("Load data for '%1'?") << CEntityFlags::flagToString(newSingleEntity);
sms.push_back(sm); sms.push_back(sm);
} }
auto lambda = [newEntities]()
// allow to init GUI completely
const int delay = 2500;
QTimer::singleShot(delay, this, [ = ]
{ {
sGui->getWebDataServices()->triggerLoadingDirectlyFromSharedFiles(newEntities, false); // delayed call
}; auto lambda = [newEntities]()
ui->fr_CentralFrameInside->showOverlayMessagesWithConfirmation(sms, "Load data?", lambda); {
sGui->getWebDataServices()->triggerLoadingDirectlyFromSharedFiles(newEntities, false);
};
ui->fr_CentralFrameInside->showOverlayMessagesWithConfirmation(sms, "Load data?", lambda);
});
} }
void SwiftGuiStd::playNotifcationSound(CNotificationSounds::Notification notification) const void SwiftGuiStd::playNotifcationSound(CNotificationSounds::Notification notification) const