summaryrefslogtreecommitdiffstats
path: root/gui/pages.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/pages.hpp')
-rw-r--r--gui/pages.hpp212
1 files changed, 212 insertions, 0 deletions
diff --git a/gui/pages.hpp b/gui/pages.hpp
new file mode 100644
index 000000000..282b2d5b1
--- /dev/null
+++ b/gui/pages.hpp
@@ -0,0 +1,212 @@
+/*
+ Copyright 2017 TeamWin
+ This file is part of TWRP/TeamWin Recovery Project.
+
+ TWRP is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ TWRP is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with TWRP. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// pages.hpp - Base classes for page manager of GUI
+
+#ifndef _PAGES_HEADER_HPP
+#define _PAGES_HEADER_HPP
+
+#include "../zipwrap.hpp"
+#include <vector>
+#include <map>
+#include <string>
+#include "rapidxml.hpp"
+#include "gui.hpp"
+using namespace rapidxml;
+
+enum TOUCH_STATE {
+ TOUCH_START = 0,
+ TOUCH_DRAG = 1,
+ TOUCH_RELEASE = 2,
+ TOUCH_HOLD = 3,
+ TOUCH_REPEAT = 4
+};
+
+struct COLOR {
+ unsigned char red;
+ unsigned char green;
+ unsigned char blue;
+ unsigned char alpha;
+ COLOR() : red(0), green(0), blue(0), alpha(0) {}
+ COLOR(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 255)
+ : red(r), green(g), blue(b), alpha(a) {}
+};
+
+struct language_struct {
+ std::string filename;
+ std::string displayvalue;
+};
+
+inline bool operator < (const language_struct& language1, const language_struct& language2)
+{
+ return language1.displayvalue < language2.displayvalue;
+}
+
+extern std::vector<language_struct> Language_List;
+
+// Utility Functions
+int ConvertStrToColor(std::string str, COLOR* color);
+int gui_forceRender(void);
+int gui_changePage(std::string newPage);
+int gui_changeOverlay(std::string newPage);
+
+class Resource;
+class ResourceManager;
+class RenderObject;
+class ActionObject;
+class InputObject;
+class MouseCursor;
+class GUIObject;
+class HardwareKeyboard;
+
+class Page
+{
+public:
+ Page(xml_node<>* page, std::vector<xml_node<>*> *templates);
+ virtual ~Page();
+
+ std::string GetName(void) { return mName; }
+
+public:
+ virtual int Render(void);
+ virtual int Update(void);
+ virtual int NotifyTouch(TOUCH_STATE state, int x, int y);
+ virtual int NotifyKey(int key, bool down);
+ virtual int NotifyCharInput(int ch);
+ virtual int SetKeyBoardFocus(int inFocus);
+ virtual int NotifyVarChange(std::string varName, std::string value);
+ virtual void SetPageFocus(int inFocus);
+
+protected:
+ std::string mName;
+ std::vector<GUIObject*> mObjects;
+ std::vector<RenderObject*> mRenders;
+ std::vector<ActionObject*> mActions;
+ std::vector<InputObject*> mInputs;
+
+ ActionObject* mTouchStart;
+ COLOR mBackground;
+
+protected:
+ bool ProcessNode(xml_node<>* page, std::vector<xml_node<>*> *templates, int depth);
+};
+
+struct LoadingContext;
+
+class PageSet
+{
+public:
+ PageSet();
+ virtual ~PageSet();
+
+public:
+ int Load(LoadingContext& ctx, const std::string& filename);
+ int LoadLanguage(char* languageFile, ZipWrap* package);
+ void MakeEmergencyConsoleIfNeeded();
+
+ Page* FindPage(std::string name);
+ int SetPage(std::string page);
+ int SetOverlay(Page* page);
+ const ResourceManager* GetResources();
+
+ // Helper routine for identifing if we're the current page
+ int IsCurrentPage(Page* page);
+ std::string GetCurrentPage() const;
+
+ // These are routing routines
+ int Render(void);
+ int Update(void);
+ int NotifyTouch(TOUCH_STATE state, int x, int y);
+ int NotifyKey(int key, bool down);
+ int NotifyCharInput(int ch);
+ int SetKeyBoardFocus(int inFocus);
+ int NotifyVarChange(std::string varName, std::string value);
+
+ void AddStringResource(std::string resource_source, std::string resource_name, std::string value);
+
+protected:
+ int LoadDetails(LoadingContext& ctx, xml_node<>* root);
+ int LoadPages(LoadingContext& ctx, xml_node<>* pages);
+ int LoadVariables(xml_node<>* vars);
+
+protected:
+ ResourceManager* mResources;
+ std::vector<Page*> mPages;
+ Page* mCurrentPage;
+ std::vector<Page*> mOverlays; // Special case for popup dialogs and the lock screen
+};
+
+class PageManager
+{
+public:
+ // Used by GUI
+ static char* LoadFileToBuffer(std::string filename, ZipWrap* package);
+ static void LoadLanguageList(ZipWrap* package);
+ static void LoadLanguage(std::string filename);
+ static int LoadPackage(std::string name, std::string package, std::string startpage);
+ static PageSet* SelectPackage(std::string name);
+ static int ReloadPackage(std::string name, std::string package);
+ static void ReleasePackage(std::string name);
+ static int RunReload();
+ static void RequestReload();
+ static void SetStartPage(const std::string& page_name);
+
+ // Used for actions and pages
+ static int ChangePage(std::string name);
+ static int ChangeOverlay(std::string name);
+ static const ResourceManager* GetResources();
+ static std::string GetCurrentPage();
+
+ // Helper to identify if a particular page is the active page
+ static int IsCurrentPage(Page* page);
+
+ // These are routing routines
+ static int Render(void);
+ static int Update(void);
+ static int NotifyTouch(TOUCH_STATE state, int x, int y);
+ static int NotifyKey(int key, bool down);
+ static int NotifyCharInput(int ch);
+ static int SetKeyBoardFocus(int inFocus);
+ static int NotifyVarChange(std::string varName, std::string value);
+
+ static MouseCursor *GetMouseCursor();
+ static void LoadCursorData(xml_node<>* node);
+
+ static HardwareKeyboard *GetHardwareKeyboard();
+
+ static xml_node<>* FindStyle(std::string name);
+ static void AddStringResource(std::string resource_source, std::string resource_name, std::string value);
+
+protected:
+ static PageSet* FindPackage(std::string name);
+ static void LoadLanguageListDir(std::string dir);
+ static void Translate_Partition(const char* path, const char* resource_name, const char* default_value);
+ static void Translate_Partition(const char* path, const char* resource_name, const char* default_value, const char* storage_resource_name, const char* storage_default_value);
+ static void Translate_Partition_Display_Names();
+
+protected:
+ static std::map<std::string, PageSet*> mPageSets;
+ static PageSet* mCurrentSet;
+ static MouseCursor *mMouseCursor;
+ static HardwareKeyboard *mHardwareKeyboard;
+ static bool mReloadTheme;
+ static std::string mStartPage;
+ static LoadingContext* currentLoadingContext;
+};
+
+#endif // _PAGES_HEADER_HPP