diff options
Diffstat (limited to 'src/mods.h')
-rw-r--r-- | src/mods.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/mods.h b/src/mods.h new file mode 100644 index 0000000..7373961 --- /dev/null +++ b/src/mods.h @@ -0,0 +1,53 @@ +#pragma once +#include <glib.h> +#include <thread> +#include <mutex> +#include <vector> +#include <string> +#include <gtkmm.h> +#include <libbible.h> + +using namespace std; + +class Header; + +/* + * Credit goes to the Xiphos project for this part of the code: + * https://github.com/crosswire/xiphos/ + */ + +class Mods : public Gtk::Frame, public libbible::Status +{ +public: + Mods(Header *header, Gtk::Window *window); + virtual ~Mods(); + + void installMods(std::vector<std::string> filenames); + void uninstallMods(std::vector<std::string> modnames); + void updateInstallable(); + void displayMain(); + void displayDownload(); + + // This is for Status. Huzzah for multiple inheritance! + virtual void update(unsigned long totalBytes, unsigned long completedBytes, std::string message); + +protected: + Header *header; + Gtk::Window *window; + std::map<std::string, std::vector<std::string>> modsAvailable; + + Gtk::MessageDialog progressDialog; + Gtk::ProgressBar progressBar; + Glib::Dispatcher dispatcher; + mutable std::mutex progressMutex; + double fracDone; + std::string message; + std::thread *worker; + bool complete; + void getStatus(double *fractionDone, std::string *mess, bool *isComplete) const; + void onNotify(); + + void showProgress(std::string message); + void endProgress(); + +}; |