anki/qt/aqt/flags.py
2021-05-31 12:03:30 +02:00

90 lines
2.8 KiB
Python

# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from __future__ import annotations
from dataclasses import dataclass
from typing import Dict, List, cast
from anki import Collection
from anki.collection import SearchNode
from aqt import colors
from aqt.theme import ColoredIcon
from aqt.utils import tr
@dataclass
class Flag:
"""A container class for flag related data.
index -- The integer by which the flag is represented internally (1-7).
label -- The text by which the flag is described in the GUI.
icon -- The icon by which the flag is represented in the GUI.
search_node -- The node to build a search string for finding cards with the flag.
action -- The name of the action to assign the flag in the browser form.
"""
index: int
label: str
icon: ColoredIcon
search_node: SearchNode
action: str
def load_flags(col: Collection) -> List[Flag]:
"""Return a list of all flags, reloading labels from the config."""
labels = cast(Dict[str, str], col.get_config("flagLabels", {}))
icon = ColoredIcon(path=":/icons/flag.svg", color=colors.DISABLED)
return [
Flag(
1,
labels["1"] if "1" in labels else tr.actions_red_flag(),
icon.with_color(colors.FLAG1_FG),
SearchNode(flag=SearchNode.FLAG_RED),
"actionRed_Flag",
),
Flag(
2,
labels["2"] if "2" in labels else tr.actions_orange_flag(),
icon.with_color(colors.FLAG2_FG),
SearchNode(flag=SearchNode.FLAG_ORANGE),
"actionOrange_Flag",
),
Flag(
3,
labels["3"] if "3" in labels else tr.actions_green_flag(),
icon.with_color(colors.FLAG3_FG),
SearchNode(flag=SearchNode.FLAG_GREEN),
"actionGreen_Flag",
),
Flag(
4,
labels["4"] if "4" in labels else tr.actions_blue_flag(),
icon.with_color(colors.FLAG4_FG),
SearchNode(flag=SearchNode.FLAG_BLUE),
"actionBlue_Flag",
),
Flag(
5,
labels["5"] if "5" in labels else tr.actions_violet_flag(),
icon.with_color(colors.FLAG5_FG),
SearchNode(flag=SearchNode.FLAG_VIOLET),
"actionViolet_Flag",
),
Flag(
6,
labels["6"] if "6" in labels else tr.actions_turquoise_flag(),
icon.with_color(colors.FLAG6_FG),
SearchNode(flag=SearchNode.FLAG_TURQUOISE),
"actionTurquoise_Flag",
),
Flag(
7,
labels["7"] if "7" in labels else tr.actions_purple_flag(),
icon.with_color(colors.FLAG7_FG),
SearchNode(flag=SearchNode.FLAG_PURPLE),
"actionPurple_Flag",
),
]