pkg::Package: callback for installation start.

Allow eg. Aircraft Center to add listeners to packages to
be called if installation starts.
This commit is contained in:
Thomas Geymayer 2014-06-30 18:36:15 +02:00
parent a69130ff10
commit 9868fb03a2
2 changed files with 23 additions and 3 deletions

View File

@ -131,12 +131,25 @@ InstallRef Package::install()
// start a new install
ins = new Install(this, pathOnDisk());
m_catalog->root()->scheduleToUpdate(ins);
_install_cb(this, ins);
return ins;
}
InstallRef Package::existingInstall() const
InstallRef Package::existingInstall(const InstallCallback& cb) const
{
return m_catalog->installForPackage(const_cast<Package*>(this));
InstallRef install = m_catalog->installForPackage(const_cast<Package*>(this));
if( cb )
{
_install_cb.push_back(cb);
if( install )
cb(const_cast<Package*>(this), install);
}
return install;
}
std::string Package::id() const

View File

@ -24,6 +24,7 @@
#include <simgear/props/props.hxx>
#include <simgear/misc/strutils.hxx>
#include <simgear/structure/function_list.hxx>
#include <simgear/structure/SGReferenced.hxx>
#include <simgear/structure/SGSharedPtr.hxx>
@ -49,12 +50,16 @@ typedef std::vector<PackageRef> PackageList;
class Package : public SGReferenced
{
public:
typedef boost::function<void(Package*, Install*)> InstallCallback;
/**
* get or create an install for the package
*/
InstallRef install();
InstallRef existingInstall() const;
InstallRef
existingInstall(const InstallCallback& cb = InstallCallback()) const;
bool isInstalled() const;
@ -138,6 +143,8 @@ private:
std::string m_id;
string_set m_tags;
CatalogRef m_catalog;
mutable function_list<InstallCallback> _install_cb;
};