| 35 | |
| 36 | |
| 37 | class LanguagesListModel(GObject.GObject, Gio.ListModel): |
| 38 | __gtype_name__ = "LanguagesListModel" |
| 39 | |
| 40 | def __init__(self, names_func: Callable[[str], str | None] = get_lang_name): |
| 41 | super().__init__() |
| 42 | |
| 43 | self.names_func = names_func |
| 44 | self.langs: list[LangObject] = [] |
| 45 | |
| 46 | def __iter__(self): |
| 47 | return iter(self.langs) |
| 48 | |
| 49 | def do_get_item(self, position: int) -> LangObject: |
| 50 | return self.langs[position] |
| 51 | |
| 52 | def do_get_item_type(self): |
| 53 | return LangObject |
| 54 | |
| 55 | def do_get_n_items(self) -> int: |
| 56 | return len(self.langs) |
| 57 | |
| 58 | def set_langs(self, langs: list[str], auto=False): |
| 59 | removed = len(self.langs) |
| 60 | self.langs.clear() |
| 61 | |
| 62 | if auto: |
| 63 | self.langs.append(LangObject("auto", _("Auto"))) |
| 64 | |
| 65 | for code in langs: |
| 66 | self.langs.append(LangObject(code, self.names_func(code) or code)) |
| 67 | |
| 68 | self.items_changed(0, removed, len(self.langs)) |
| 69 | |
| 70 | def set_selected(self, code: str): |
| 71 | for item in self.langs: |
| 72 | item.props.selected = item.code == code |