X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fpackage%2FInstall.hxx;h=e65789c4b33e0375a794b8fda399330e92505cbe;hb=0b60643053343a8573097287cae89c2e99393105;hp=dd676b88e2c204422d7efa7fd8bf52879b73ad10;hpb=e3ddcbe2dd84e8f9f9d2c921e38d29c597adf3ed;p=simgear.git diff --git a/simgear/package/Install.hxx b/simgear/package/Install.hxx index dd676b88..e65789c4 100644 --- a/simgear/package/Install.hxx +++ b/simgear/package/Install.hxx @@ -23,9 +23,12 @@ #include #include +#include #include #include +#include + namespace simgear { @@ -47,6 +50,12 @@ typedef SGSharedPtr InstallRef; class Install : public SGReferenced { public: + virtual ~Install(); + + typedef boost::function Callback; + typedef boost::function + ProgressCallback; + /** * create from a directory on disk, or fail. */ @@ -66,12 +75,65 @@ public: void startUpdate(); void uninstall(); + + /** + * Set the handler to be called when the installation successfully + * completes. + * + * @note If the installation is already complete, the handler is called + * immediately. + */ + Install* done(const Callback& cb); + + template + Install* done(C* instance, void (C::*mem_func)(Install*)) + { + return done(boost::bind(mem_func, instance, _1)); + } + + /** + * Set the handler to be called when the installation fails or is aborted. + * + * @note If the installation has already failed, the handler is called + * immediately. + */ + Install* fail(const Callback& cb); + + template + Install* fail(C* instance, void (C::*mem_func)(Install*)) + { + return fail(boost::bind(mem_func, instance, _1)); + } + + /** + * Set the handler to be called when the installation either successfully + * completes or fails. + * + * @note If the installation is already complete or has already failed, the + * handler is called immediately. + */ + Install* always(const Callback& cb); + + template + Install* always(C* instance, void (C::*mem_func)(Install*)) + { + return always(boost::bind(mem_func, instance, _1)); + } -// boost signals time? - // failure - // progress - // completed - + /** + * Set the handler to be called during downloading the installation file + * indicating the progress of the download. + * + */ + Install* progress(const ProgressCallback& cb); + + template + Install* progress(C* instance, + void (C::*mem_func)(Install*, unsigned int, unsigned int)) + { + return progress(boost::bind(mem_func, instance, _1, _2, _3)); + } + private: friend class Package; @@ -91,6 +153,13 @@ private: SGPath m_path; ///< installation point on disk PackageArchiveDownloader* m_download; + + Delegate::FailureCode _status; + + function_list _cb_done, + _cb_fail, + _cb_always; + function_list _cb_progress; };