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