- Full (iPad Pro) mode: every typing key from the keymap, number row, tab, caps lock, ctrl/super/alt; shifted symbol shown above and flickable - Dead keys compose with the locale's XKB compose table - Ctrl/Alt/Super stick like shift and turn keys into shortcuts; a tapped or held shift joins shortcuts and non-text keys, auto-shift and caps lock don't - Auto-capitalization and caps lock only capitalize letters; the user's shift picks the keymap's shifted level - Mode switch in settings keeps key size by resizing the window Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#include "Settings.h"
|
|
|
|
#include "layout/Layout.h"
|
|
|
|
#include <QSettings>
|
|
|
|
namespace {
|
|
constexpr auto AutoCapitalizeKey = "typing/autoCapitalize";
|
|
constexpr auto DoubleSpacePeriodKey = "typing/doubleSpacePeriod";
|
|
constexpr auto VisibleSectionsKey = "layout/visibleSections";
|
|
constexpr auto FullKeyboardKey = "layout/fullKeyboard";
|
|
}
|
|
|
|
Settings::Settings(QObject *parent)
|
|
: QObject(parent)
|
|
{
|
|
const QSettings store;
|
|
const TypingOptions defaults;
|
|
m_typing.autoCapitalize = store.value(AutoCapitalizeKey, defaults.autoCapitalize).toBool();
|
|
m_typing.doubleSpacePeriod = store.value(DoubleSpacePeriodKey, defaults.doubleSpacePeriod).toBool();
|
|
m_visibleSections = store.value(VisibleSectionsKey, QStringList{MainSectionId}).toStringList();
|
|
if (m_visibleSections.isEmpty())
|
|
m_visibleSections = {MainSectionId};
|
|
m_fullKeyboard = store.value(FullKeyboardKey, false).toBool();
|
|
}
|
|
|
|
void Settings::setFullKeyboard(bool full)
|
|
{
|
|
if (full == m_fullKeyboard)
|
|
return;
|
|
m_fullKeyboard = full;
|
|
QSettings().setValue(FullKeyboardKey, full);
|
|
Q_EMIT fullKeyboardChanged();
|
|
}
|
|
|
|
void Settings::setSectionVisible(const QString &id, bool visible)
|
|
{
|
|
QStringList sections = m_visibleSections;
|
|
if (visible && !sections.contains(id))
|
|
sections.append(id);
|
|
else if (!visible)
|
|
sections.removeAll(id);
|
|
if (sections == m_visibleSections || sections.isEmpty())
|
|
return;
|
|
m_visibleSections = sections;
|
|
QSettings().setValue(VisibleSectionsKey, m_visibleSections);
|
|
Q_EMIT visibleSectionsChanged();
|
|
}
|
|
|
|
void Settings::setAutoCapitalize(bool enabled)
|
|
{
|
|
TypingOptions options = m_typing;
|
|
options.autoCapitalize = enabled;
|
|
setTypingOptions(options);
|
|
}
|
|
|
|
void Settings::setDoubleSpacePeriod(bool enabled)
|
|
{
|
|
TypingOptions options = m_typing;
|
|
options.doubleSpacePeriod = enabled;
|
|
setTypingOptions(options);
|
|
}
|
|
|
|
void Settings::setTypingOptions(const TypingOptions &options)
|
|
{
|
|
if (options == m_typing)
|
|
return;
|
|
m_typing = options;
|
|
QSettings store;
|
|
store.setValue(AutoCapitalizeKey, m_typing.autoCapitalize);
|
|
store.setValue(DoubleSpacePeriodKey, m_typing.doubleSpacePeriod);
|
|
Q_EMIT typingOptionsChanged();
|
|
}
|