Add even more config values

This commit is contained in:
Joscha 2019-06-21 05:59:47 +00:00
parent c99eddee62
commit f3bbd42420
2 changed files with 92 additions and 13 deletions

View file

@ -1,4 +1,4 @@
from typing import Any, Dict, List, Optional, TypeVar
from typing import Any, Dict, List, Optional, Set, TypeVar
from ..config import (ConfigValueException, Kind, Option, TransparentConfig,
TreeLoader)
@ -10,6 +10,8 @@ class EuphConfig(TransparentConfig):
def __init__(self, parent: Optional[TransparentConfig] = None) -> None:
super().__init__(parent)
# basic styles
@property
def room_style(self) -> str:
return self["visual.room_style"]
@ -84,6 +86,46 @@ class EuphConfig(TransparentConfig):
def cursor_fill_style(self) -> str:
return self["visual.cursor.fill.style"]
# indent
@property
def indent_width(self) -> int:
return self["visual.indent.width"]
@property
def indent_char(self) -> str:
return self["visual.indent.char"]
@property
def indent_fill(self) -> str:
return self["visual.indent.fill"]
@property
def indent_style(self) -> str:
return self["visual.indent.style"]
@property
def indent_cursor_char(self) -> str:
return self["visual.indent.cursor.char"]
@property
def indent_cursor_corner(self) -> str:
return self["visual.indent.cursor.corner"]
@property
def indent_cursor_fill(self) -> str:
return self["visual.indent.cursor.fill"]
@property
def indent_cursor_style(self) -> str:
return self["visual.indent.cursor.style"]
# other
@property
def scrolloff(self) -> int:
return self["visual.scrolloff"]
@property
def palette(self) -> Any:
return self["palette"]
@ -95,6 +137,8 @@ class EuphLoader(TreeLoader):
"bold": {"fg": "bold"},
"gray": {"fg": "dark gray"},
"cursor": {"fg": "bold, light green"},
"room": {"fg": "bold, light blue"},
"nick": {"fg": "light cyan"},
"own_nick": {"fg": "yellow"},
@ -105,12 +149,15 @@ class EuphLoader(TreeLoader):
# Various conditions
SINGLE_CHAR = (lambda x: len(x) == 1, "must be single character")
AT_LEAST_0 = (lambda x: x >= 0, "must be at least 0")
AT_LEAST_1 = (lambda x: x >= 1, "must be at least 1")
def __init__(self) -> None:
super().__init__()
self._styles: Set[str] = set()
# basic styles
self.add_style("visual.room_style", "room")
self.add_style("visual.nick_style", "nick")
self.add_style("visual.own_nick_style", "own_nick")
@ -124,18 +171,31 @@ class EuphLoader(TreeLoader):
self.add_style("visual.meta.style", "none")
# surround
self.add("visual.surround.left", Kind.STR, "[", [self.SINGLE_CHAR])
self.add("visual.surround.right", Kind.STR, "]", [self.SINGLE_CHAR])
self.add_style("visual.surround.style", "none")
self.add("visual.surround.left", Kind.STR, "[", self.SINGLE_CHAR)
self.add("visual.surround.right", Kind.STR, "]", self.SINGLE_CHAR)
self.add_style("visual.surround.style", "bold")
# cursor
self.add("visual.cursor.surround.left", Kind.STR, "<", [self.SINGLE_CHAR])
self.add("visual.cursor.surround.right", Kind.STR, ">", [self.SINGLE_CHAR])
self.add_style("visual.cursor.surround.style", "none")
self.add_style("visual.cursor.own_nick_style", "own_nick")
self.add("visual.cursor.fill.char", Kind.STR, " ", [self.SINGLE_CHAR])
self.add("visual.cursor.surround.left", Kind.STR, "<", self.SINGLE_CHAR)
self.add("visual.cursor.surround.right", Kind.STR, ">", self.SINGLE_CHAR)
self.add_style("visual.cursor.surround.style", "cursor")
self.add_style("visual.cursor.own_nick_style", "cursor")
self.add("visual.cursor.fill.char", Kind.STR, " ", self.SINGLE_CHAR)
self.add_style("visual.cursor.fill.style", "none")
# indent
self.add("visual.indent.width", Kind.INT, 2, self.AT_LEAST_1)
self.add("visual.indent.char", Kind.STR, "", self.SINGLE_CHAR)
self.add("visual.indent.fill", Kind.STR, " ", self.SINGLE_CHAR)
self.add_style("visual.indent.style", "gray")
self.add("visual.indent.cursor.char", Kind.STR, "", self.SINGLE_CHAR)
self.add("visual.indent.cursor.corner", Kind.STR, "", self.SINGLE_CHAR)
self.add("visual.indent.cursor.fill", Kind.STR, "", self.SINGLE_CHAR)
self.add_style("visual.indent.cursor.style", "cursor")
# other
self.add("visual.scrolloff", Kind.INT, 3, self.AT_LEAST_0)
self.add("styles", Kind.DICT, self.DEFAULT_STYLES)
def add_style(self, name: str, default: str) -> None:

View file

@ -2,16 +2,17 @@ import asyncio
from typing import Any, Awaitable, Callable, List, Optional, Tuple, TypeVar
import urwid
import yaboli
from ..attributed_text_widget import ATWidget
from ..cursor_rendering import CursorTreeRenderer
from ..cursor_rendering import CursorRenderer, CursorTreeRenderer
from ..cursor_tree_widget import CursorTreeWidget
from ..element import Message, RenderedMessage
from ..element_supply import InMemorySupply
from .euph_config import EuphConfig
from ..element_supply import ElementSupply, InMemorySupply
from ..markup import AT, AttributedText, Attributes
from .edit_widgets import EditWidget
from .euph_config import EuphConfig
from .euph_renderer import EuphRenderer
__all__ = ["RoomWidget"]
@ -185,7 +186,8 @@ class RoomWidget(urwid.WidgetWrap):
self._supply = InMemorySupply[Message]()
self._renderer = self._create_euph_renderer()
self._tree = CursorTreeRenderer[Message](self._supply, self._renderer)
self._tree = self._create_cursor_tree_renderer(self._supply,
self._renderer)
# All of the widgets
@ -243,6 +245,23 @@ class RoomWidget(urwid.WidgetWrap):
own_nick_attrs={"style": self.c.own_nick_style},
)
def _create_cursor_tree_renderer(self,
supply: ElementSupply,
renderer: CursorRenderer,
) -> CursorTreeRenderer:
return CursorTreeRenderer(supply, renderer,
indent_width=self.c.indent_width,
indent=self.c.indent_char,
indent_fill=self.c.indent_fill,
indent_attrs={"style": self.c.indent_style},
cursor_indent=self.c.indent_cursor_char,
cursor_corner=self.c.indent_cursor_corner,
cursor_fill=self.c.indent_cursor_fill,
cursor_indent_attrs={"style": self.c.indent_cursor_style},
scrolloff=self.c.scrolloff,
)
def _create_connecting_widget(self) -> Any:
text = (
AT("Connecting to ") +