Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
UI|Client: Refreshing packages
PackagesWidget and PackagesDialog don’t need their own method for refreshing, because they can just observe the file system and start an async refresh.
  • Loading branch information
skyjake committed Nov 3, 2018
1 parent 39d7a30 commit a1866d0
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 35 deletions.
4 changes: 2 additions & 2 deletions doomsday/apps/client/include/ui/dialogs/packagesdialog.h
Expand Up @@ -35,8 +35,8 @@ class PackagesDialog : public de::DialogWidget
void setSelectedPackages(de::StringList packages);
de::StringList selectedPackages() const;

public slots:
void refreshPackages();
//public slots:
// void refreshPackages();

protected:
void preparePanelForOpening() override;
Expand Down
4 changes: 2 additions & 2 deletions doomsday/apps/client/include/ui/widgets/packageswidget.h
Expand Up @@ -121,8 +121,8 @@ class PackagesWidget : public de::GuiWidget, public de::IPersistent
void operator >> (de::PersistentState &toState) const;
void operator << (de::PersistentState const &fromState);

public slots:
void refreshPackages();
//public slots:
// void refreshPackages();

signals:
void itemCountChanged(unsigned int shownItems, unsigned int totalItems);
Expand Down
14 changes: 7 additions & 7 deletions doomsday/apps/client/src/ui/dialogs/packagesdialog.cpp
Expand Up @@ -34,6 +34,7 @@
#include <de/charsymbols.h>
#include <de/CallbackAction>
#include <de/ChildWidgetOrganizer>
#include <de/FileSystem>
#include <de/DocumentPopupWidget>
#include <de/MenuWidget>
#include <de/NativeFile>
Expand Down Expand Up @@ -387,7 +388,7 @@ PackagesDialog::PackagesDialog(String const &titleText)
<< new DialogButtonItem(Default | Accept, tr("OK"))
<< new DialogButtonItem(Reject, tr("Cancel"))
<< new DialogButtonItem(Action, style().images().image("refresh"),
new SignalAction(this, SLOT(refreshPackages())))
new CallbackAction([]() { FS::get().refreshAsync(); }))
<< new DialogButtonItem(Action | Id1, style().images().image("gear"),
"Data Files",
new CallbackAction([this]() {
Expand All @@ -410,8 +411,7 @@ PackagesDialog::PackagesDialog(String const &titleText)
setMaximumContentHeight(rule().width());

// Setup has been completed, so contents can be updated.
//d->browser->setPopulationEnabled(true);
refreshPackages();
d->browser->setPopulationEnabled(true);
}

void PackagesDialog::setGame(String const &gameId)
Expand All @@ -433,10 +433,10 @@ StringList PackagesDialog::selectedPackages() const
return d->selectedPackages;
}

void PackagesDialog::refreshPackages()
{
d->browser->refreshPackages();
}
//void PackagesDialog::refreshPackages()
//{
// d->browser->refreshPackages();
//}

void PackagesDialog::preparePanelForOpening()
{
Expand Down
4 changes: 2 additions & 2 deletions doomsday/apps/client/src/ui/home/packagescolumnwidget.cpp
Expand Up @@ -112,10 +112,10 @@ DENG_GUI_PIMPL(PackagesColumnWidget)
<< new ui::SubwidgetItem(ui::Item::ShownAsButton | ui::Item::ClosesParentPopup,
tr("Settings"), ui::Right, makePopup<DataFileSettingsDialog>)
<< new ui::ActionItem(tr("Install Mods..." _E(l)_E(s)_E(D) " BETA"),
new CallbackAction([this] () { openRepositoryBrowser(); }))
new CallbackAction([this]() { openRepositoryBrowser(); }))
<< new ui::Item(ui::Item::Separator)
<< new ui::ActionItem(tr("Refresh List"),
new CallbackAction([this] () { packages->refreshPackages(); }));
new CallbackAction([]() { FS::get().refreshAsync(); }));
return menu;
}, ui::Down);
}
Expand Down
6 changes: 2 additions & 4 deletions doomsday/apps/client/src/ui/widgets/packagessidebarwidget.cpp
Expand Up @@ -22,6 +22,7 @@
#include "ui/widgets/homeitemwidget.h"

#include <de/CallbackAction>
#include <de/FileSystem>
#include <de/ui/ActionItem>

using namespace de;
Expand Down Expand Up @@ -68,10 +69,7 @@ PackagesSidebarWidget::PackagesSidebarWidget()
.setInput(Rule::Top, closeButton().rule().top())
.setInput(Rule::Height, closeButton().rule().height());
refreshButton->setStyleImage("refresh", "default");
refreshButton->setActionFn([this] ()
{
d->browser->refreshPackages();
});
refreshButton->setActionFn([]() { FS::get().refreshAsync(); });

d->browser->setFilterEditorMinimumY(closeButton().rule().bottom());

Expand Down
49 changes: 31 additions & 18 deletions doomsday/apps/client/src/ui/widgets/packageswidget.cpp
Expand Up @@ -70,7 +70,9 @@ static PackageLoadStatus isPackageLoaded;
PackagesWidget::IPackageStatus::~IPackageStatus() {}

DENG_GUI_PIMPL(PackagesWidget)
, DENG2_OBSERVES(res::Bundles, Identify), public ChildWidgetOrganizer::IWidgetFactory
//, DENG2_OBSERVES(res::Bundles, Identify)
, DENG2_OBSERVES(FileSystem, Busy)
, public ChildWidgetOrganizer::IWidgetFactory
{
/**
* Information about an available package.
Expand Down Expand Up @@ -626,7 +628,7 @@ DENG_GUI_PIMPL(PackagesWidget)
self().margins().height());
}

~Impl()
~Impl() override
{
//releaseRef(maxPanelHeight);
releaseRef(searchMinY);
Expand Down Expand Up @@ -732,7 +734,7 @@ DENG_GUI_PIMPL(PackagesWidget)

void updateItems()
{
filteredPackages.forAll([this](ui::Item &item) {
filteredPackages.forAll([](ui::Item &item) {
item.as<PackageItem>().notifyChange();
return LoopContinue;
});
Expand Down Expand Up @@ -793,16 +795,23 @@ DENG_GUI_PIMPL(PackagesWidget)
}
}

void dataBundlesIdentified() override
void fileSystemBusyStatusChanged(FS::BusyStatus bs) override
{
// After bundles have been refreshed, make sure the list items are up to date.
if (!mainCallForIdentify)
if (bs == FS::Busy)
{
mainCallForIdentify.enqueue([this]() {
root().window().glActivate();
populateEnabled = true;
self().populate();
});
showProgressIndicator(true);
}
else if (DoomsdayApp::bundles().isEverythingIdentified())
{
// After bundles have been refreshed, make sure the list items are up to date.
if (!mainCallForIdentify)
{
mainCallForIdentify.enqueue([this]() {
root().window().glActivate();
populateEnabled = true;
self().populate();
});
}
}
}

Expand Down Expand Up @@ -844,6 +853,8 @@ DENG_GUI_PIMPL(PackagesWidget)
{
auto &w = widget.as<PackageListItemWidget>();
w.setItem(item.as<PackageItem>());
DENG2_ASSERT_IN_MAIN_THREAD();
DENG2_ASSERT(FS::get().busyLevel() == 0);
w.updateContents();
}
};
Expand All @@ -852,15 +863,17 @@ PackagesWidget::PackagesWidget(PopulateBehavior initBehavior, String const &name
: GuiWidget(name)
, d(new Impl(this))
{
auto &bundles = DoomsdayApp::bundles();
bundles.audienceForIdentify() += d;
// auto &bundles = DoomsdayApp::bundles();
//bundles.audienceForIdentify() += d;

d->populateEnabled = (initBehavior == PopulationEnabled);

if (bundles.isEverythingIdentified())
{
FS::get().audienceForBusy() += d;

//if (bundles.isEverythingIdentified())
//{
populate();
}
//}
}

PackagesWidget::PackagesWidget(StringList manualPackageIds, String const &name)
Expand Down Expand Up @@ -1100,8 +1113,8 @@ void PackagesWidget::operator<<(PersistentState const &fromState)
d->updateFilterTerms(true);
}

void PackagesWidget::refreshPackages()
/*void PackagesWidget::refreshPackages()
{
d->showProgressIndicator(true);
FS::get().refreshAsync();
}
}*/

0 comments on commit a1866d0

Please sign in to comment.