91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from typing import Self, Any, Optional, Callable, Sequence
|
|
from AnP.Utils.Checks import Check
|
|
|
|
class BrowserTabsModel:
|
|
|
|
def __init__(self:Self, item:Any) -> None:
|
|
self.item:Any = item
|
|
self.last:Any = item
|
|
|
|
def set_last(self:Self, item:Any) -> None:
|
|
self.last = item
|
|
|
|
def reset(self:Self) -> None:
|
|
self.last = self.item
|
|
|
|
class BrowserBoxModel:
|
|
|
|
def __init__(self:Self, is_working:Optional[Callable[[], bool]] = None) -> None:
|
|
self.tabs:dict[str, BrowserTabsModel] = {}
|
|
self.tab_selected:str = ""
|
|
self.variables:dict[str, Any|None] = {}
|
|
self.is_working:Callable[[], bool]|None = is_working
|
|
self._base:Any|None = None
|
|
|
|
def set_base(self:Self, item:Any) -> None:
|
|
self._base = item
|
|
|
|
def get_base(self:Self) -> Any|None:
|
|
return self._base
|
|
|
|
def get_selected(self:Self) -> str:
|
|
return self.tab_selected
|
|
|
|
def get_last(self:Self) -> Any|None:
|
|
if self.tab_selected in self.tabs:
|
|
return self.tabs[self.tab_selected].last
|
|
return None
|
|
|
|
def set(self:Self, key:str, item:Any) -> None:
|
|
self.tabs[key] = BrowserTabsModel(item)
|
|
self.tab_selected = key
|
|
|
|
def get(self:Self, key:str) -> Any|None:
|
|
if key in self.tabs:
|
|
return self.tabs[key].item
|
|
return None
|
|
|
|
def change(self:Self, key:str) -> bool:
|
|
if key in self.tabs:
|
|
self.tab_selected = key
|
|
return True
|
|
return False
|
|
|
|
def set_last(self:Self, item:Any) -> bool:
|
|
if self.tab_selected in self.tabs:
|
|
self.tabs[self.tab_selected].set_last(item)
|
|
return True
|
|
return False
|
|
|
|
def reset(self:Self) -> bool:
|
|
if self.tab_selected in self.tabs:
|
|
self.tabs[self.tab_selected].reset()
|
|
return True
|
|
return False
|
|
|
|
def close(self:Self, keys:Optional[str|Sequence[str]] = None) -> bool:
|
|
|
|
ok:bool = True
|
|
|
|
for key in (
|
|
keys if Check.is_array(keys) else
|
|
[keys] if Check.is_key(keys) else
|
|
list(self.tabs.keys()) if keys is None else
|
|
[]):
|
|
if key in self.tabs:
|
|
del self.tabs[key]
|
|
if self.tab_selected == key:
|
|
self.tab_selected = next(iter(self.tabs), "")
|
|
else:
|
|
ok = False
|
|
|
|
return ok
|
|
|
|
def switch(self:Self, key:str) -> bool:
|
|
if key in self.tabs:
|
|
self.tab_selected = key
|
|
return True
|
|
return False |