/* SPDX-FileCopyrightText: 2003-2007 Craig Drummond SPDX-License-Identifier: GPL-2.0-or-later */ #include "PreviewSelectAction.h" #include "UnicodeBlocks.h" #include "UnicodeScripts.h" using namespace Qt::StringLiterals; namespace KFI { CPreviewSelectAction::CPreviewSelectAction(QObject *parent, Mode mode) : KSelectAction(QIcon::fromTheme(u"character-set"_s), i18n("Preview Type"), parent) , m_numUnicodeBlocks(0) { setMode(mode); connect(this, &KSelectAction::indexTriggered, this, &CPreviewSelectAction::selected); } void CPreviewSelectAction::setStd() { setCurrentItem(0); selected(0); } void CPreviewSelectAction::setMode(Mode mode) { QStringList items; items.append(i18n("Standard Preview")); items.append(i18n("All Characters")); switch (mode) { default: case Basic: break; case BlocksAndScripts: for (m_numUnicodeBlocks = 0; !constUnicodeBlocks[m_numUnicodeBlocks].blockName.isEmpty(); ++m_numUnicodeBlocks) { items.append(i18n("Unicode Block: %1", constUnicodeBlocks[m_numUnicodeBlocks].blockName.toString())); } for (int i = 0; !constUnicodeScriptList[i].isEmpty(); ++i) { items.append(i18n("Unicode Script: %1", constUnicodeScriptList[i].toString())); } break; case ScriptsOnly: for (int i = 0; !constUnicodeScriptList[i].isEmpty(); ++i) { items.append(constUnicodeScriptList[i].toString()); } } setItems(items); setStd(); } void CPreviewSelectAction::selected(int index) { QList list; if (0 == index) { ; } else if (1 == index) { list.append(CFcEngine::TRange()); } else if (index < m_numUnicodeBlocks + 2) { list.append(CFcEngine::TRange(constUnicodeBlocks[index - 2].start, constUnicodeBlocks[index - 2].end)); } else { int script(index - (2 + m_numUnicodeBlocks)); for (int i = 0; constUnicodeScripts[i].scriptIndex >= 0; ++i) { if (constUnicodeScripts[i].scriptIndex == script) { list.append(CFcEngine::TRange(constUnicodeScripts[i].start, constUnicodeScripts[i].end)); } } } Q_EMIT range(list); } }