FreeRDP
Loading...
Searching...
No Matches
SdlPref Class Reference

#include <sdl_prefs.hpp>

Public Member Functions

std::string get_pref_file (bool systemConfigOnly=false) const
 
std::string get_string (const std::string &key, const std::string &fallback="", bool systemConfigOnly=false) const
 
int64_t get_int (const std::string &key, int64_t fallback=0, bool systemConfigOnly=false) const
 
bool get_bool (const std::string &key, bool fallback=false, bool systemConfigOnly=false) const
 
std::vector< std::string > get_array (const std::string &key, const std::vector< std::string > &fallback={}, bool systemConfigOnly=false) const
 

Static Public Member Functions

static std::shared_ptr< SdlPrefinstance (const std::string &name=SdlPref::get_default_file(false))
 
static void print_config_file_help (int version)
 

Detailed Description

FreeRDP: A Remote Desktop Protocol Implementation SDL Prefs

Copyright 2022 Armin Novak armin.nosp@m..nov.nosp@m.ak@th.nosp@m.inca.nosp@m.st.co.nosp@m.m

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Definition at line 27 of file sdl_prefs.hpp.

Member Function Documentation

◆ get_array()

std::vector< std::string > SdlPref::get_array ( const std::string &  key,
const std::vector< std::string > &  fallback = {},
bool  systemConfigOnly = false 
) const

Definition at line 111 of file sdl_prefs.cpp.

114{
115 auto item = get_item(key, systemConfigOnly);
116 if (!item || !WINPR_JSON_IsArray(item))
117 return fallback;
118
119 std::vector<std::string> values;
120 for (size_t x = 0; x < WINPR_JSON_GetArraySize(item); x++)
121 {
122 auto cur = WINPR_JSON_GetArrayItem(item, x);
123 values.push_back(item_to_str(cur));
124 }
125
126 return values;
127}
WINPR_ATTR_NODISCARD WINPR_API size_t WINPR_JSON_GetArraySize(const WINPR_JSON *array)
Get the number of arrayitems from an array.
Definition c-json.c:114
WINPR_ATTR_NODISCARD WINPR_API WINPR_JSON * WINPR_JSON_GetArrayItem(const WINPR_JSON *array, size_t index)
Return a pointer to an item in the array.
Definition c-json.c:108
WINPR_ATTR_NODISCARD WINPR_API BOOL WINPR_JSON_IsArray(const WINPR_JSON *item)
Check if JSON item is of type Array.
Definition c-json.c:187

◆ get_bool()

bool SdlPref::get_bool ( const std::string &  key,
bool  fallback = false,
bool  systemConfigOnly = false 
) const

Definition at line 96 of file sdl_prefs.cpp.

97{
98 auto& config = systemConfigOnly ? _system_config : _config;
99 return get_bool(config, key, fallback);
100}

◆ get_int()

int64_t SdlPref::get_int ( const std::string &  key,
int64_t  fallback = 0,
bool  systemConfigOnly = false 
) const

Definition at line 102 of file sdl_prefs.cpp.

103{
104 auto item = get_item(key, systemConfigOnly);
105 if (!item || !WINPR_JSON_IsNumber(item))
106 return fallback;
107 auto val = WINPR_JSON_GetNumberValue(item);
108 return static_cast<int64_t>(val);
109}
WINPR_ATTR_NODISCARD WINPR_API BOOL WINPR_JSON_IsNumber(const WINPR_JSON *item)
Check if JSON item is of type Number.
Definition c-json.c:177
WINPR_ATTR_NODISCARD WINPR_API double WINPR_JSON_GetNumberValue(const WINPR_JSON *item)
Return the Number value of a JSON item.
Definition c-json.c:147

◆ get_pref_file()

std::string SdlPref::get_pref_file ( bool  systemConfigOnly = false) const

Definition at line 228 of file sdl_prefs.cpp.

229{
230 if (systemConfigOnly)
231 return _system_name;
232
233 return _name;
234}

◆ get_string()

std::string SdlPref::get_string ( const std::string &  key,
const std::string &  fallback = "",
bool  systemConfigOnly = false 
) const

Definition at line 89 of file sdl_prefs.cpp.

91{
92 auto item = get_item(key, systemConfigOnly);
93 return item_to_str(item, fallback);
94}

◆ instance()

std::shared_ptr< SdlPref > SdlPref::instance ( const std::string &  name = SdlPref::get_default_file(false))
static

Definition at line 220 of file sdl_prefs.cpp.

221{
222 static std::shared_ptr<SdlPref> _instance;
223 if (!_instance || (_instance->get_pref_file() != name))
224 _instance.reset(new SdlPref(name));
225 return _instance;
226}

◆ print_config_file_help()

void SdlPref::print_config_file_help ( int  version)
static

Definition at line 129 of file sdl_prefs.cpp.

130{
131#if defined(WITH_WINPR_JSON)
132 const std::string url = "https://wiki.libsdl.org/SDL" + std::to_string(version);
133 std::cout << "GLOBAL CONFIGURATION FILE" << std::endl;
134 std::cout << std::endl;
135 std::cout << " The SDL client supports some system defined configuration options."
136 << std::endl;
137 std::cout << " Settings are stored in JSON format" << std::endl;
138 std::cout << " The location is a system configuration file. Location for current machine is "
139 << SdlPref::instance()->get_pref_file(true) << std::endl;
140 std::cout << std::endl;
141 std::cout << " The following configuration options are supported:" << std::endl;
142 std::cout << std::endl;
143 std::cout << " isUserConfigEnabled" << std::endl;
144 std::cout << " Allows to enable/disable user specific configuration files." << std::endl;
145 std::cout << " Default enabled" << std::endl;
146 std::cout << std::endl;
147 std::cout << " All options of the following user configuration file are also supported here."
148 << std::endl;
149 std::cout << std::endl;
150
151 std::cout << "CONFIGURATION FILE" << std::endl;
152 std::cout << std::endl;
153 std::cout << " The SDL client supports some user defined configuration options." << std::endl;
154 std::cout << " Settings are stored in JSON format" << std::endl;
155 std::cout << " The location is a per user file. Location for current user is "
156 << SdlPref::instance()->get_pref_file() << std::endl;
157 std::cout
158 << " The XDG_CONFIG_HOME environment variable can be used to override the base directory."
159 << std::endl;
160 std::cout << std::endl;
161 std::cout << " The following configuration options are supported:" << std::endl;
162 std::cout << std::endl;
163 std::cout << " SDL_KeyModMask" << std::endl;
164 std::cout << " Defines the key combination required for SDL client shortcuts."
165 << std::endl;
166 std::cout << " Default KMOD_RSHIFT" << std::endl;
167 std::cout << " An array of SDL_Keymod strings as defined at "
168 ""
169 << url << "/SDL_Keymod" << std::endl;
170 std::cout << std::endl;
171 std::cout << " SDL_Fullscreen" << std::endl;
172 std::cout << " Toggles client fullscreen state." << std::endl;
173 std::cout << " Default SDL_SCANCODE_RETURN." << std::endl;
174 std::cout << " A string as "
175 "defined at "
176 << url << "/SDLScancodeLookup" << std::endl;
177 std::cout << std::endl;
178 std::cout << " SDL_Minimize" << std::endl;
179 std::cout << " Minimizes client windows." << std::endl;
180 std::cout << " Default SDL_SCANCODE_M." << std::endl;
181 std::cout << " A string as "
182 "defined at "
183 << url << "/SDLScancodeLookup" << std::endl;
184 std::cout << std::endl;
185 std::cout << " SDL_Resizeable" << std::endl;
186 std::cout << " Toggles local window resizeable state." << std::endl;
187 std::cout << " Default SDL_SCANCODE_R." << std::endl;
188 std::cout << " A string as "
189 "defined at "
190 << url << "/SDLScancodeLookup" << std::endl;
191 std::cout << std::endl;
192 std::cout << " SDL_Grab" << std::endl;
193 std::cout << " Toggles keyboard and mouse grab state." << std::endl;
194 std::cout << " Default SDL_SCANCODE_G." << std::endl;
195 std::cout << " A string as "
196 "defined at "
197 << url << "/SDLScancodeLookup" << std::endl;
198 std::cout << std::endl;
199 std::cout << " SDL_Disconnect" << std::endl;
200 std::cout << " Disconnects from the RDP session." << std::endl;
201 std::cout << " Default SDL_SCANCODE_D." << std::endl;
202 std::cout << " A string as defined at " << url << "/SDLScancodeLookup" << std::endl;
203
204#endif
205}

The documentation for this class was generated from the following files: