File indexing completed on 2024-06-02 05:43:57

0001 /*
0002     SPDX-FileCopyrightText: 2003-2007 Craig Drummond <craig@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "PreviewSelectAction.h"
0007 #include "UnicodeBlocks.h"
0008 #include "UnicodeScripts.h"
0009 
0010 namespace KFI
0011 {
0012 CPreviewSelectAction::CPreviewSelectAction(QObject *parent, Mode mode)
0013     : KSelectAction(QIcon::fromTheme("character-set"), i18n("Preview Type"), parent)
0014     , m_numUnicodeBlocks(0)
0015 {
0016     setMode(mode);
0017 
0018     connect(this, &KSelectAction::indexTriggered, this, &CPreviewSelectAction::selected);
0019 }
0020 
0021 void CPreviewSelectAction::setStd()
0022 {
0023     setCurrentItem(0);
0024     selected(0);
0025 }
0026 
0027 void CPreviewSelectAction::setMode(Mode mode)
0028 {
0029     QStringList items;
0030 
0031     items.append(i18n("Standard Preview"));
0032     items.append(i18n("All Characters"));
0033 
0034     switch (mode) {
0035     default:
0036     case Basic:
0037         break;
0038     case BlocksAndScripts:
0039         for (m_numUnicodeBlocks = 0; !constUnicodeBlocks[m_numUnicodeBlocks].blockName.isEmpty(); ++m_numUnicodeBlocks) {
0040             items.append(i18n("Unicode Block: %1", constUnicodeBlocks[m_numUnicodeBlocks].blockName.toString()));
0041         }
0042 
0043         for (int i = 0; !constUnicodeScriptList[i].isEmpty(); ++i) {
0044             items.append(i18n("Unicode Script: %1", constUnicodeScriptList[i].toString()));
0045         }
0046         break;
0047     case ScriptsOnly:
0048         for (int i = 0; !constUnicodeScriptList[i].isEmpty(); ++i) {
0049             items.append(constUnicodeScriptList[i].toString());
0050         }
0051     }
0052 
0053     setItems(items);
0054     setStd();
0055 }
0056 
0057 void CPreviewSelectAction::selected(int index)
0058 {
0059     QList<CFcEngine::TRange> list;
0060 
0061     if (0 == index) {
0062         ;
0063     } else if (1 == index) {
0064         list.append(CFcEngine::TRange());
0065     } else if (index < m_numUnicodeBlocks + 2) {
0066         list.append(CFcEngine::TRange(constUnicodeBlocks[index - 2].start, constUnicodeBlocks[index - 2].end));
0067     } else {
0068         int script(index - (2 + m_numUnicodeBlocks));
0069 
0070         for (int i = 0; constUnicodeScripts[i].scriptIndex >= 0; ++i) {
0071             if (constUnicodeScripts[i].scriptIndex == script) {
0072                 list.append(CFcEngine::TRange(constUnicodeScripts[i].start, constUnicodeScripts[i].end));
0073             }
0074         }
0075     }
0076 
0077     Q_EMIT range(list);
0078 }
0079 
0080 }