aboutsummaryrefslogtreecommitdiff
path: root/src/mods.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mods.h')
-rw-r--r--src/mods.h53
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();
+
+};