summaryrefslogtreecommitdiffstats
path: root/gui/pages/BasePageProvider.h
diff options
context:
space:
mode:
authorJan Dalheimer <jan@dalheimer.de>2014-07-16 00:13:40 +0200
committerPetr Mrázek <peterix@gmail.com>2014-07-20 15:01:02 +0200
commite178284172396ee51acb77c2daa8135b4855c12b (patch)
treed37c3d95355073997b023c6bdf34072d3bb468b0 /gui/pages/BasePageProvider.h
parentc91adfb3d18b124b36cf19bcb89973a66c9ef1c9 (diff)
downloadMultiMC-e178284172396ee51acb77c2daa8135b4855c12b.tar
MultiMC-e178284172396ee51acb77c2daa8135b4855c12b.tar.gz
MultiMC-e178284172396ee51acb77c2daa8135b4855c12b.tar.lz
MultiMC-e178284172396ee51acb77c2daa8135b4855c12b.tar.xz
MultiMC-e178284172396ee51acb77c2daa8135b4855c12b.zip
Merge global settings and accounts into a pagedialog
Also split external tools into it's own page
Diffstat (limited to 'gui/pages/BasePageProvider.h')
-rw-r--r--gui/pages/BasePageProvider.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/gui/pages/BasePageProvider.h b/gui/pages/BasePageProvider.h
index cff9c8e7..5e5a11fb 100644
--- a/gui/pages/BasePageProvider.h
+++ b/gui/pages/BasePageProvider.h
@@ -17,6 +17,7 @@
#include "BasePage.h"
#include <memory>
+#include <functional>
class BasePageProvider
{
@@ -25,4 +26,44 @@ public:
virtual QString dialogTitle() = 0;
};
+class GenericPageProvider : public BasePageProvider
+{
+ typedef std::function<BasePage *()> PageCreator;
+public:
+ explicit GenericPageProvider(const QString &dialogTitle)
+ : m_dialogTitle(dialogTitle)
+ {
+ }
+
+ QList<BasePage *> getPages() override
+ {
+ QList<BasePage *> pages;
+ for (PageCreator creator : m_creators)
+ {
+ pages.append(creator());
+ }
+ return pages;
+ }
+ QString dialogTitle() override { return m_dialogTitle; }
+
+ void setDialogTitle(const QString &title)
+ {
+ m_dialogTitle = title;
+ }
+ void addPageCreator(PageCreator page)
+ {
+ m_creators.append(page);
+ }
+
+ template<typename PageClass>
+ void addPage()
+ {
+ addPageCreator([](){return new PageClass();});
+ }
+
+private:
+ QList<PageCreator> m_creators;
+ QString m_dialogTitle;
+};
+
typedef std::shared_ptr<BasePageProvider> BasePageProviderPtr;