108 lines
4.0 KiB
C++
108 lines
4.0 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
#include <iosfwd>
|
|
|
|
class CrossPointSettings {
|
|
private:
|
|
// Private constructor for singleton
|
|
CrossPointSettings() = default;
|
|
|
|
// Static instance
|
|
static CrossPointSettings instance;
|
|
|
|
public:
|
|
// Delete copy constructor and assignment
|
|
CrossPointSettings(const CrossPointSettings&) = delete;
|
|
CrossPointSettings& operator=(const CrossPointSettings&) = delete;
|
|
|
|
// Should match with SettingsActivity text
|
|
enum SLEEP_SCREEN_MODE { DARK = 0, LIGHT = 1, CUSTOM = 2, COVER = 3 };
|
|
|
|
// Status bar display type enum
|
|
enum STATUS_BAR_MODE { NONE = 0, NO_PROGRESS = 1, FULL = 2 };
|
|
|
|
enum ORIENTATION {
|
|
PORTRAIT = 0, // 480x800 logical coordinates (current default)
|
|
LANDSCAPE_CW = 1, // 800x480 logical coordinates, rotated 180° (swap top/bottom)
|
|
INVERTED = 2, // 480x800 logical coordinates, inverted
|
|
LANDSCAPE_CCW = 3 // 800x480 logical coordinates, native panel orientation
|
|
};
|
|
|
|
// Front button layout options
|
|
// Default: Back, Confirm, Left, Right
|
|
// Swapped: Left, Right, Back, Confirm
|
|
enum FRONT_BUTTON_LAYOUT { BACK_CONFIRM_LEFT_RIGHT = 0, LEFT_RIGHT_BACK_CONFIRM = 1, LEFT_BACK_CONFIRM_RIGHT = 2 };
|
|
|
|
// Side button layout options
|
|
// Default: Previous, Next
|
|
// Swapped: Next, Previous
|
|
enum SIDE_BUTTON_LAYOUT { PREV_NEXT = 0, NEXT_PREV = 1 };
|
|
|
|
// Font family options
|
|
enum FONT_FAMILY { BOOKERLY = 0, NOTOSANS = 1, OPENDYSLEXIC = 2 };
|
|
// Font size options
|
|
enum FONT_SIZE { SMALL = 0, MEDIUM = 1, LARGE = 2, EXTRA_LARGE = 3 };
|
|
enum LINE_COMPRESSION { TIGHT = 0, NORMAL = 1, WIDE = 2 };
|
|
enum PARAGRAPH_ALIGNMENT { JUSTIFIED = 0, LEFT_ALIGN = 1, CENTER_ALIGN = 2, RIGHT_ALIGN = 3 };
|
|
|
|
// Auto-sleep timeout options (enum index to minutes: 0=2min, 1=5min, 2=10min, 3=15min, 4=20min, 5=30min, 6=60min, 7=Never)
|
|
|
|
// E-ink refresh frequency (pages between full refreshes)
|
|
enum REFRESH_FREQUENCY { REFRESH_1 = 0, REFRESH_5 = 1, REFRESH_10 = 2, REFRESH_15 = 3, REFRESH_30 = 4 };
|
|
|
|
// Sleep screen settings
|
|
uint8_t sleepScreen = DARK;
|
|
// Status bar settings
|
|
uint8_t statusBar = FULL;
|
|
// Text rendering settings
|
|
uint8_t extraParagraphSpacing = 1;
|
|
// Duration of the power button press
|
|
uint8_t shortPwrBtn = 0;
|
|
// EPUB reading orientation settings
|
|
// 0 = portrait (default), 1 = landscape clockwise, 2 = inverted, 3 = landscape counter-clockwise
|
|
uint8_t orientation = PORTRAIT;
|
|
// Button layouts
|
|
uint8_t frontButtonLayout = BACK_CONFIRM_LEFT_RIGHT;
|
|
uint8_t sideButtonLayout = PREV_NEXT;
|
|
// Reader font settings
|
|
uint8_t fontFamily = BOOKERLY;
|
|
uint8_t fontSize = MEDIUM;
|
|
uint8_t lineSpacing = NORMAL;
|
|
uint8_t paragraphAlignment = JUSTIFIED;
|
|
// Auto-sleep timeout (enum index: 0=2min, 1=5min, 2=10min, 3=15min, 4=20min, 5=30min, 6=60min, 7=Never)
|
|
uint8_t autoSleepMinutes = 1; // Default to 5 minutes
|
|
// E-ink refresh frequency (default 15 pages)
|
|
uint8_t refreshFrequency = REFRESH_15;
|
|
|
|
~CrossPointSettings() = default;
|
|
|
|
// Get singleton instance
|
|
static CrossPointSettings& getInstance() { return instance; }
|
|
|
|
uint16_t getPowerButtonDuration() const { return shortPwrBtn ? 10 : 400; }
|
|
int getReaderFontId() const;
|
|
|
|
bool saveToFile() const;
|
|
bool loadFromFile();
|
|
|
|
float getReaderLineCompression() const;
|
|
unsigned long getAutoSleepTimeoutMs() const {
|
|
// Map enum index to milliseconds: 0=2min, 1=5min, 2=10min, 3=15min, 4=20min, 5=30min, 6=60min, 7=Never(0)
|
|
constexpr unsigned long timeouts[] = {
|
|
2UL * 60UL * 1000UL, // 0: 2 minutes
|
|
5UL * 60UL * 1000UL, // 1: 5 minutes (default)
|
|
10UL * 60UL * 1000UL, // 2: 10 minutes
|
|
15UL * 60UL * 1000UL, // 3: 15 minutes
|
|
20UL * 60UL * 1000UL, // 4: 20 minutes
|
|
30UL * 60UL * 1000UL, // 5: 30 minutes
|
|
60UL * 60UL * 1000UL, // 6: 60 minutes
|
|
0UL // 7: Never (disabled)
|
|
};
|
|
return (autoSleepMinutes < 8) ? timeouts[autoSleepMinutes] : timeouts[2];
|
|
}
|
|
int getRefreshFrequency() const;
|
|
};
|
|
|
|
// Helper macro to access settings
|
|
#define SETTINGS CrossPointSettings::getInstance()
|