mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-31 19:20:26 +00:00
LoadingScreen: add support for important labels
Used in saveGame so the player can be sure whether or not the game was saved. Fixes #3074
This commit is contained in:
parent
67883feaae
commit
d5a2586f38
@ -36,6 +36,7 @@ namespace MWGui
|
|||||||
, mLastWallpaperChangeTime(0.0)
|
, mLastWallpaperChangeTime(0.0)
|
||||||
, mLastRenderTime(0.0)
|
, mLastRenderTime(0.0)
|
||||||
, mLoadingOnTime(0.0)
|
, mLoadingOnTime(0.0)
|
||||||
|
, mImportantLabel(false)
|
||||||
, mProgress(0)
|
, mProgress(0)
|
||||||
{
|
{
|
||||||
mMainWidget->setSize(MyGUI::RenderManager::getInstance().getViewSize());
|
mMainWidget->setSize(MyGUI::RenderManager::getInstance().getViewSize());
|
||||||
@ -82,8 +83,10 @@ namespace MWGui
|
|||||||
std::cerr << "No splash screens found!" << std::endl;
|
std::cerr << "No splash screens found!" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadingScreen::setLabel(const std::string &label)
|
void LoadingScreen::setLabel(const std::string &label, bool important)
|
||||||
{
|
{
|
||||||
|
mImportantLabel = important;
|
||||||
|
|
||||||
mLoadingText->setCaptionWithReplacing(label);
|
mLoadingText->setCaptionWithReplacing(label);
|
||||||
int padding = mLoadingBox->getWidth() - mLoadingText->getWidth();
|
int padding = mLoadingBox->getWidth() - mLoadingText->getWidth();
|
||||||
MyGUI::IntSize size(mLoadingText->getTextSize().width+padding, mLoadingBox->getHeight());
|
MyGUI::IntSize size(mLoadingText->getTextSize().width+padding, mLoadingBox->getHeight());
|
||||||
@ -176,6 +179,19 @@ namespace MWGui
|
|||||||
|
|
||||||
void LoadingScreen::loadingOff()
|
void LoadingScreen::loadingOff()
|
||||||
{
|
{
|
||||||
|
if (mLastRenderTime < mLoadingOnTime)
|
||||||
|
{
|
||||||
|
// the loading was so fast that we didn't show loading screen at all
|
||||||
|
// we may still want to show the label if the caller requested it
|
||||||
|
if (mImportantLabel)
|
||||||
|
{
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox(mLoadingText->getCaption());
|
||||||
|
mImportantLabel = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mImportantLabel = false; // label was already shown on loading screen
|
||||||
|
|
||||||
//std::cout << "loading took " << mTimer.time_m() - mLoadingOnTime << std::endl;
|
//std::cout << "loading took " << mTimer.time_m() - mLoadingOnTime << std::endl;
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ namespace MWGui
|
|||||||
virtual ~LoadingScreen();
|
virtual ~LoadingScreen();
|
||||||
|
|
||||||
/// Overridden from Loading::Listener, see the Loading::Listener documentation for usage details
|
/// Overridden from Loading::Listener, see the Loading::Listener documentation for usage details
|
||||||
virtual void setLabel (const std::string& label);
|
virtual void setLabel (const std::string& label, bool important);
|
||||||
virtual void loadingOn();
|
virtual void loadingOn();
|
||||||
virtual void loadingOff();
|
virtual void loadingOff();
|
||||||
virtual void setProgressRange (size_t range);
|
virtual void setProgressRange (size_t range);
|
||||||
@ -57,6 +57,8 @@ namespace MWGui
|
|||||||
osg::Timer mTimer;
|
osg::Timer mTimer;
|
||||||
double mLoadingOnTime;
|
double mLoadingOnTime;
|
||||||
|
|
||||||
|
bool mImportantLabel;
|
||||||
|
|
||||||
size_t mProgress;
|
size_t mProgress;
|
||||||
|
|
||||||
MyGUI::Widget* mLoadingBox;
|
MyGUI::Widget* mLoadingBox;
|
||||||
|
@ -242,7 +242,7 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot
|
|||||||
Loading::Listener& listener = *MWBase::Environment::get().getWindowManager()->getLoadingScreen();
|
Loading::Listener& listener = *MWBase::Environment::get().getWindowManager()->getLoadingScreen();
|
||||||
// Using only Cells for progress information, since they typically have the largest records by far
|
// Using only Cells for progress information, since they typically have the largest records by far
|
||||||
listener.setProgressRange(MWBase::Environment::get().getWorld()->countSavedGameCells());
|
listener.setProgressRange(MWBase::Environment::get().getWorld()->countSavedGameCells());
|
||||||
listener.setLabel("#{sNotifyMessage4}");
|
listener.setLabel("#{sNotifyMessage4}", true);
|
||||||
|
|
||||||
Loading::ScopedLoad load(&listener);
|
Loading::ScopedLoad load(&listener);
|
||||||
|
|
||||||
|
@ -9,7 +9,12 @@ namespace Loading
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// Set a text label to show on the loading screen.
|
/// Set a text label to show on the loading screen.
|
||||||
virtual void setLabel (const std::string& label) {}
|
/// @param label The label
|
||||||
|
/// @param important Is the label considered important to show?
|
||||||
|
/// @note "non-important" labels may not show on screen if the loading process went so fast
|
||||||
|
/// that the implementation decided not to show a loading screen at all. "important" labels
|
||||||
|
/// will show in a separate message-box if the loading screen was not shown.
|
||||||
|
virtual void setLabel (const std::string& label, bool important=false) {}
|
||||||
|
|
||||||
/// Start a loading sequence. Must call loadingOff() when done.
|
/// Start a loading sequence. Must call loadingOff() when done.
|
||||||
/// @note To get the loading screen to actually update, you must call setProgress / increaseProgress periodically.
|
/// @note To get the loading screen to actually update, you must call setProgress / increaseProgress periodically.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user