File indexing completed on 2024-05-19 05:35:37

0001 # SPDX-License-Identifier: GPL-3.0-or-later
0002 # SPDX-FileCopyrightText: 2021 Anupam Basak <anupam.basak27@gmail.com>
0003 
0004 import typing
0005 from enum import IntEnum, auto
0006 
0007 import PySide2
0008 from PySide2.QtCore import QAbstractListModel, Qt, QEnum
0009 
0010 
0011 class LocaleModel(QAbstractListModel):
0012     """
0013     A List of locales
0014     Array of {
0015         'locale': [column0, column1],
0016         'selected': bool
0017     }
0018     """
0019     __locales__ = []
0020 
0021     @QEnum
0022     class Roles(IntEnum):
0023         NameRole = Qt.UserRole + 1
0024         SelectedRole = auto()
0025 
0026     def __init__(self, parent=None):
0027         super().__init__(parent)
0028 
0029     def roleNames(self) -> typing.Dict:
0030         roles = dict()
0031         roles[self.Roles.NameRole] = b'name'
0032         roles[self.Roles.SelectedRole] = b'selected'
0033 
0034         return roles
0035 
0036     def data(self, index: PySide2.QtCore.QModelIndex, role: Roles) -> typing.Any:
0037         if role == self.Roles.NameRole:
0038             return self.__locales__[index.row()]['locale'][0]
0039         elif role == self.Roles.SelectedRole:
0040             return self.__locales__[index.row()]['selected']
0041 
0042     def setData(self, index: PySide2.QtCore.QModelIndex, value, role: Roles = None):
0043         if role == self.Roles.SelectedRole:
0044             self.__locales__[index.row()]['selected'] = value
0045             self.dataChanged.emit(index, index)
0046 
0047             return True
0048         else:
0049             return False
0050 
0051     def rowCount(self, parent: PySide2.QtCore.QModelIndex) -> int:
0052         return len(self.__locales__)
0053 
0054     def addLocaleItem(self, locale, selected=False):
0055         self.layoutAboutToBeChanged.emit()
0056 
0057         self.__locales__.append({
0058             'locale': locale,
0059             'selected': selected
0060         })
0061 
0062         self.layoutChanged.emit()
0063 
0064     def getSelectedLocales(self):
0065         selectedLocales = []
0066         for row in self.__locales__:
0067             if row['selected']:
0068                 selectedLocales.append(row['locale'])
0069 
0070         return selectedLocales