#pragma once #include #include #include #include #include #include #include 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 filenames); void uninstallMods(std::vector 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> 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(); };