//////////////////////////////////////////////////////////////////////
// This file is part of Remere's Map Editor
//////////////////////////////////////////////////////////////////////
// Remere's Map Editor 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.
//
// Remere's Map Editor 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 this program. If not, see .
//////////////////////////////////////////////////////////////////////
#ifndef RME_SETTINGS_H_
#define RME_SETTINGS_H_
#include "main.h"
namespace Config {
enum Key {
NONE,
VERSION_ID,
USE_CUSTOM_DATA_DIRECTORY,
DATA_DIRECTORY,
EXTENSIONS_DIRECTORY,
MERGE_MOVE,
TEXTURE_MANAGEMENT,
TEXTURE_CLEAN_PULSE,
TEXTURE_CLEAN_THRESHOLD,
TEXTURE_LONGEVITY,
HARD_REFRESH_RATE,
USE_MEMCACHED_SPRITES,
USE_MEMCACHED_SPRITES_TO_SAVE,
SOFTWARE_CLEAN_THRESHOLD,
SOFTWARE_CLEAN_SIZE,
TRANSPARENT_FLOORS,
TRANSPARENT_ITEMS,
SHOW_INGAME_BOX,
SHOW_GRID,
SHOW_EXTRA,
SHOW_ALL_FLOORS,
SHOW_CREATURES,
SHOW_SPAWNS,
SHOW_HOUSES,
SHOW_SHADE,
SHOW_SPECIAL_TILES,
SHOW_ZONE_AREAS,
HIGHLIGHT_ITEMS,
SHOW_ITEMS,
SHOW_BLOCKING,
SHOW_TOOLTIPS,
SHOW_PREVIEW,
SHOW_WALL_HOOKS,
SHOW_AS_MINIMAP,
SHOW_ONLY_TILEFLAGS,
SHOW_ONLY_MODIFIED_TILES,
HIDE_ITEMS_WHEN_ZOOMED,
GROUP_ACTIONS,
SCROLL_SPEED,
ZOOM_SPEED,
UNDO_SIZE,
UNDO_MEM_SIZE,
MERGE_PASTE,
SELECTION_TYPE,
COMPENSATED_SELECT,
BORDER_IS_GROUND,
BORDERIZE_PASTE,
BORDERIZE_DRAG,
BORDERIZE_DRAG_THRESHOLD,
BORDERIZE_PASTE_THRESHOLD,
BORDERIZE_DELETE,
ICON_BACKGROUND,
ALWAYS_MAKE_BACKUP,
USE_AUTOMAGIC,
SAME_GROUND_TYPE_BORDER,
WALLS_REPEL_BORDERS,
LAYER_CARPETS,
CUSTOM_BORDER_ENABLED,
CUSTOM_BORDER_ID,
HOUSE_BRUSH_REMOVE_ITEMS,
AUTO_ASSIGN_DOORID,
ERASER_LEAVE_UNIQUE,
DOODAD_BRUSH_ERASE_LIKE,
WARN_FOR_DUPLICATE_ID,
USE_UPDATER,
USE_OTBM_4_FOR_ALL_MAPS,
USE_OTGZ,
SAVE_WITH_OTB_MAGIC_NUMBER,
REPLACE_SIZE,
USE_LARGE_CONTAINER_ICONS,
USE_LARGE_CHOOSE_ITEM_ICONS,
USE_LARGE_TERRAIN_TOOLBAR,
USE_LARGE_DOODAD_SIZEBAR,
USE_LARGE_ITEM_SIZEBAR,
USE_LARGE_HOUSE_SIZEBAR,
USE_LARGE_RAW_SIZEBAR,
USE_GUI_SELECTION_SHADOW,
PALETTE_COL_COUNT,
PALETTE_TERRAIN_STYLE,
PALETTE_DOODAD_STYLE,
PALETTE_ITEM_STYLE,
PALETTE_RAW_STYLE,
ASSETS_DATA_DIRS,
DEFAULT_CLIENT_VERSION,
CHECK_SIGNATURES,
CURSOR_RED,
CURSOR_GREEN,
CURSOR_BLUE,
CURSOR_ALPHA,
CURSOR_ALT_RED,
CURSOR_ALT_GREEN,
CURSOR_ALT_BLUE,
CURSOR_ALT_ALPHA,
SCREENSHOT_DIRECTORY,
SCREENSHOT_FORMAT,
MAX_SPAWN_RADIUS,
CURRENT_SPAWN_RADIUS,
AUTO_CREATE_SPAWN,
DEFAULT_SPAWNTIME,
SWITCH_MOUSEBUTTONS,
DOUBLECLICK_PROPERTIES,
LISTBOX_EATS_ALL_EVENTS,
RAW_LIKE_SIMONE,
WORKER_THREADS,
COPY_POSITION_FORMAT,
GOTO_WEBSITE_ON_BOOT,
INDIRECTORY_INSTALLATION,
AUTOCHECK_FOR_UPDATES,
ONLY_ONE_INSTANCE,
SHOW_TILESET_EDITOR,
PALETTE_LAYOUT,
MINIMAP_VISIBLE,
MINIMAP_LAYOUT,
MINIMAP_UPDATE_DELAY,
MINIMAP_VIEW_BOX,
MINIMAP_EXPORT_DIR,
TILESET_EXPORT_DIR,
WINDOW_HEIGHT,
WINDOW_WIDTH,
WINDOW_MAXIMIZED,
WELCOME_DIALOG,
NUMERICAL_HOTKEYS,
RECENT_FILES,
RECENT_EDITED_MAP_PATH,
RECENT_EDITED_MAP_POSITION,
FIND_ITEM_MODE,
JUMP_TO_ITEM_MODE,
SHOW_TOOLBAR_STANDARD,
SHOW_TOOLBAR_BRUSHES,
SHOW_TOOLBAR_POSITION,
SHOW_TOOLBAR_SIZES,
TOOLBAR_STANDARD_LAYOUT,
TOOLBAR_BRUSHES_LAYOUT,
TOOLBAR_POSITION_LAYOUT,
TOOLBAR_SIZES_LAYOUT,
// add new settings at the end to make sure nothing gets misread
DRAW_LOCKED_DOOR,
HIGHLIGHT_LOCKED_DOORS,
PALETTE_COLLECTION_STYLE,
USE_LARGE_COLLECTION_TOOLBAR,
SHOW_LIGHTS,
SHOW_LIGHT_STR,
SHOW_TECHNICAL_ITEMS,
SHOW_WAYPOINTS,
EXPERIMENTAL_FOG,
SHOW_TOWNS,
ALWAYS_SHOW_ZONES,
EXT_HOUSE_SHADER,
AUTO_SELECT_RAW_ON_RIGHTCLICK,
AUTO_SAVE_ENABLED,
AUTO_SAVE_INTERVAL,
// Network/Live settings
LIVE_HOST,
LIVE_PORT,
LIVE_PASSWORD,
LIVE_USERNAME,
DARK_MODE,
DARK_MODE_CUSTOM_COLOR,
DARK_MODE_RED,
DARK_MODE_GREEN,
DARK_MODE_BLUE,
// House creation settings
MAX_HOUSE_TILES,
HOUSE_FLOOR_SCAN,
AUTO_DETECT_HOUSE_EXIT,
// LOD (Level of Detail) settings
TOOLTIP_MAX_ZOOM,
GROUND_ONLY_ZOOM_THRESHOLD,
ITEM_DISPLAY_ZOOM_THRESHOLD,
SPECIAL_FEATURES_ZOOM_THRESHOLD,
ANIMATION_ZOOM_THRESHOLD,
EFFECTS_ZOOM_THRESHOLD,
LIGHT_ZOOM_THRESHOLD,
SHADE_ZOOM_THRESHOLD,
TOWN_ZONE_ZOOM_THRESHOLD,
GRID_ZOOM_THRESHOLD,
// Palette grid settings
GRID_CHUNK_SIZE,
GRID_VISIBLE_ROWS_MARGIN,
// Website link control setting
LAST_WEBSITES_OPEN_TIME,
LAST,
};
// Hotkey settings
const std::string HOTKEY_PREFIX = "hotkey.";
enum HotkeySettings : uint32_t {
HOTKEY_BASE = 1000, // Start at 1000 to avoid conflicts
// Add more specific hotkey settings as needed
};
}
class wxConfigBase;
class Settings {
public:
Settings();
~Settings();
bool getBoolean(uint32_t key) const;
int getInteger(uint32_t key) const;
float getFloat(uint32_t key) const;
std::string getString(uint32_t key) const;
void setInteger(uint32_t key, int newval);
void setFloat(uint32_t key, float newval);
void setString(uint32_t key, std::string newval);
wxConfigBase& getConfigObject();
void setDefaults() {
IO(DEFAULT);
}
void load();
void save(bool endoftheworld = false);
public:
enum DynamicType {
TYPE_NONE,
TYPE_STR,
TYPE_INT,
TYPE_FLOAT,
};
class DynamicValue {
public:
DynamicValue() :
type(TYPE_NONE) {
intval = 0;
};
DynamicValue(DynamicType t) :
type(t) {
if (t == TYPE_STR) {
strval = nullptr;
} else if (t == TYPE_INT) {
intval = 0;
} else if (t == TYPE_FLOAT) {
floatval = 0.0;
} else {
intval = 0;
}
};
~DynamicValue() {
if (type == TYPE_STR) {
delete strval;
}
}
DynamicValue(const DynamicValue& dv) :
type(dv.type) {
if (dv.type == TYPE_STR) {
strval = newd std::string(*dv.strval);
} else if (dv.type == TYPE_INT) {
intval = dv.intval;
} else if (dv.type == TYPE_FLOAT) {
floatval = dv.floatval;
} else {
intval = 0;
}
};
std::string str();
private:
DynamicType type;
union {
int intval;
std::string* strval;
float floatval;
};
friend class Settings;
};
private:
enum IOMode {
DEFAULT,
LOAD,
SAVE,
};
void IO(IOMode mode);
std::vector store;
#ifdef __WINDOWS__
bool use_file_cfg;
#endif
};
extern Settings g_settings;
#endif