1 /** 2 * Copyright (c) 2006-2019 LOVE Development Team 3 * 4 * This software is provided 'as-is', without any express or implied 5 * warranty. In no event will the authors be held liable for any damages 6 * arising from the use of this software. 7 * 8 * Permission is granted to anyone to use this software for any purpose, 9 * including commercial applications, and to alter it and redistribute it 10 * freely, subject to the following restrictions: 11 * 12 * 1. The origin of this software must not be misrepresented; you must not 13 * claim that you wrote the original software. If you use this software 14 * in a product, an acknowledgment in the product documentation would be 15 * appreciated but is not required. 16 * 2. Altered source versions must be plainly marked as such, and must not be 17 * misrepresented as being the original software. 18 * 3. This notice may not be removed or altered from any source distribution. 19 **/ 20 21 #ifndef LOVE_SYSTEM_H 22 #define LOVE_SYSTEM_H 23 24 // LOVE 25 #include "common/config.h" 26 #include "common/Module.h" 27 #include "common/StringMap.h" 28 29 // stdlib 30 #include <string> 31 32 namespace love 33 { 34 namespace system 35 { 36 37 class System : public Module 38 { 39 public: 40 41 enum PowerState 42 { 43 POWER_UNKNOWN, 44 POWER_BATTERY, 45 POWER_NO_BATTERY, 46 POWER_CHARGING, 47 POWER_CHARGED, 48 POWER_MAX_ENUM 49 }; 50 51 System(); ~System()52 virtual ~System() {} 53 54 // Implements Module. getModuleType()55 virtual ModuleType getModuleType() const { return M_SYSTEM; } 56 57 /** 58 * Gets the current operating system. 59 **/ 60 std::string getOS() const; 61 62 /** 63 * Gets the number of reported CPU cores on the current system. 64 * Does not account for technologies such as Hyperthreading: a 4-core 65 * Hyperthreading-enabled Intel CPU will report 8, instead of 4. 66 **/ 67 virtual int getProcessorCount() const = 0; 68 69 /** 70 * Replaces the contents of the system's text clipboard with a string. 71 * @param text The clipboard text to set. 72 **/ 73 virtual void setClipboardText(const std::string &text) const = 0; 74 75 /** 76 * Gets the contents of the system's text clipboard. 77 **/ 78 virtual std::string getClipboardText() const = 0; 79 80 /** 81 * Gets information about the system's power supply. 82 * 83 * @param[out] seconds Time in seconds of battery life left. 84 * -1 if a value can't be determined. 85 * @param[out] percent The percentage of battery life left (0-100.) 86 * -1 if a value can't be determined. 87 * 88 * @return The current state of the battery. 89 **/ 90 virtual PowerState getPowerInfo(int &seconds, int &percent) const = 0; 91 92 /** 93 * Opens the specified URL with the user's default program to handle that 94 * particular URL type. 95 * 96 * @param url The URL to open. 97 * 98 * @return Whether the URL was opened successfully. 99 **/ 100 virtual bool openURL(const std::string &url) const; 101 102 /** 103 * Vibrates for the specified amount of seconds. 104 * 105 * @param number of seconds to vibrate. 106 */ 107 virtual void vibrate(double seconds) const; 108 109 /** 110 * Gets if the user is playing music on background. 111 * Throws an exception on unsupported platforms. 112 * 113 * @return Whether a music is playing on background. 114 **/ 115 bool hasBackgroundMusic() const; 116 117 static bool getConstant(const char *in, PowerState &out); 118 static bool getConstant(PowerState in, const char *&out); 119 120 private: 121 122 static StringMap<PowerState, POWER_MAX_ENUM>::Entry powerEntries[]; 123 static StringMap<PowerState, POWER_MAX_ENUM> powerStates; 124 125 }; // System 126 127 } // system 128 } // love 129 130 #endif // LOVE_SYSTEM_H 131