pygui: added type hinting to everything under base core.gui
This commit is contained in:
parent
adfce52632
commit
0356f3b19c
17 changed files with 473 additions and 430 deletions
|
@ -1,46 +1,44 @@
|
|||
from enum import Enum
|
||||
from tkinter import messagebox
|
||||
from typing import Dict, Optional, Tuple
|
||||
|
||||
from PIL import Image, ImageTk
|
||||
from PIL import Image
|
||||
from PIL.ImageTk import PhotoImage
|
||||
|
||||
from core.api.grpc import core_pb2
|
||||
from core.api.grpc.core_pb2 import NodeType
|
||||
from core.gui.appconfig import LOCAL_ICONS_PATH
|
||||
|
||||
|
||||
class Images:
|
||||
images = {}
|
||||
images: Dict[str, str] = {}
|
||||
|
||||
@classmethod
|
||||
def create(cls, file_path: str, width: int, height: int = None):
|
||||
def create(cls, file_path: str, width: int, height: int = None) -> PhotoImage:
|
||||
if height is None:
|
||||
height = width
|
||||
image = Image.open(file_path)
|
||||
image = image.resize((width, height), Image.ANTIALIAS)
|
||||
return ImageTk.PhotoImage(image)
|
||||
return PhotoImage(image)
|
||||
|
||||
@classmethod
|
||||
def load_all(cls):
|
||||
def load_all(cls) -> None:
|
||||
for image in LOCAL_ICONS_PATH.glob("*"):
|
||||
cls.images[image.stem] = str(image)
|
||||
|
||||
@classmethod
|
||||
def get(
|
||||
cls, image_enum: Enum, width: int, height: int = None
|
||||
) -> ImageTk.PhotoImage:
|
||||
def get(cls, image_enum: Enum, width: int, height: int = None) -> PhotoImage:
|
||||
file_path = cls.images[image_enum.value]
|
||||
return cls.create(file_path, width, height)
|
||||
|
||||
@classmethod
|
||||
def get_with_image_file(
|
||||
cls, stem: str, width: int, height: int = None
|
||||
) -> ImageTk.PhotoImage:
|
||||
) -> PhotoImage:
|
||||
file_path = cls.images[stem]
|
||||
return cls.create(file_path, width, height)
|
||||
|
||||
@classmethod
|
||||
def get_custom(
|
||||
cls, name: str, width: int, height: int = None
|
||||
) -> ImageTk.PhotoImage:
|
||||
def get_custom(cls, name: str, width: int, height: int = None) -> PhotoImage:
|
||||
try:
|
||||
file_path = cls.images[name]
|
||||
return cls.create(file_path, width, height)
|
||||
|
@ -95,22 +93,22 @@ class ImageEnum(Enum):
|
|||
|
||||
|
||||
class TypeToImage:
|
||||
type_to_image = {
|
||||
(core_pb2.NodeType.DEFAULT, "router"): ImageEnum.ROUTER,
|
||||
(core_pb2.NodeType.DEFAULT, "PC"): ImageEnum.PC,
|
||||
(core_pb2.NodeType.DEFAULT, "host"): ImageEnum.HOST,
|
||||
(core_pb2.NodeType.DEFAULT, "mdr"): ImageEnum.MDR,
|
||||
(core_pb2.NodeType.DEFAULT, "prouter"): ImageEnum.PROUTER,
|
||||
(core_pb2.NodeType.HUB, ""): ImageEnum.HUB,
|
||||
(core_pb2.NodeType.SWITCH, ""): ImageEnum.SWITCH,
|
||||
(core_pb2.NodeType.WIRELESS_LAN, ""): ImageEnum.WLAN,
|
||||
(core_pb2.NodeType.EMANE, ""): ImageEnum.EMANE,
|
||||
(core_pb2.NodeType.RJ45, ""): ImageEnum.RJ45,
|
||||
(core_pb2.NodeType.TUNNEL, ""): ImageEnum.TUNNEL,
|
||||
(core_pb2.NodeType.DOCKER, ""): ImageEnum.DOCKER,
|
||||
(core_pb2.NodeType.LXC, ""): ImageEnum.LXC,
|
||||
type_to_image: Dict[Tuple[NodeType, str], ImageEnum] = {
|
||||
(NodeType.DEFAULT, "router"): ImageEnum.ROUTER,
|
||||
(NodeType.DEFAULT, "PC"): ImageEnum.PC,
|
||||
(NodeType.DEFAULT, "host"): ImageEnum.HOST,
|
||||
(NodeType.DEFAULT, "mdr"): ImageEnum.MDR,
|
||||
(NodeType.DEFAULT, "prouter"): ImageEnum.PROUTER,
|
||||
(NodeType.HUB, ""): ImageEnum.HUB,
|
||||
(NodeType.SWITCH, ""): ImageEnum.SWITCH,
|
||||
(NodeType.WIRELESS_LAN, ""): ImageEnum.WLAN,
|
||||
(NodeType.EMANE, ""): ImageEnum.EMANE,
|
||||
(NodeType.RJ45, ""): ImageEnum.RJ45,
|
||||
(NodeType.TUNNEL, ""): ImageEnum.TUNNEL,
|
||||
(NodeType.DOCKER, ""): ImageEnum.DOCKER,
|
||||
(NodeType.LXC, ""): ImageEnum.LXC,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get(cls, node_type, model):
|
||||
return cls.type_to_image.get((node_type, model), None)
|
||||
def get(cls, node_type, model) -> Optional[ImageEnum]:
|
||||
return cls.type_to_image.get((node_type, model))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue