From 8114fc7bc25288c00dac6b76d3380e252b7c5c4c Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Thu, 24 Aug 2023 19:54:41 -0400 Subject: [PATCH] UI tweak to column select --- invokeai/backend/install/invokeai_configure.py | 9 +++++---- invokeai/frontend/install/widgets.py | 13 +++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/invokeai/backend/install/invokeai_configure.py b/invokeai/backend/install/invokeai_configure.py index 8c9afd70ca..0194445cf6 100755 --- a/invokeai/backend/install/invokeai_configure.py +++ b/invokeai/backend/install/invokeai_configure.py @@ -51,6 +51,7 @@ from invokeai.frontend.install.model_install import addModelsForm, process_and_e # TO DO - Move all the frontend code into invokeai.frontend.install from invokeai.frontend.install.widgets import ( SingleSelectColumns, + SingleSelectColumnsSimple, MultiSelectColumns, CenteredButtonPress, FileBox, @@ -384,7 +385,7 @@ Use cursor arrows to make a checkbox selection, and space to toggle. ) self.nextrely -= 2 self.precision = self.add_widget_intelligent( - SingleSelectColumns, + SingleSelectColumnsSimple, columns=len(PRECISION_CHOICES), name="Precision", values=PRECISION_CHOICES, @@ -405,7 +406,7 @@ Use cursor arrows to make a checkbox selection, and space to toggle. ) self.nextrely -= 2 self.device = self.add_widget_intelligent( - SingleSelectColumns, + SingleSelectColumnsSimple, columns=len(DEVICE_CHOICES), values=DEVICE_CHOICES, value=DEVICE_CHOICES.index(device), @@ -425,7 +426,7 @@ Use cursor arrows to make a checkbox selection, and space to toggle. ) self.nextrely -= 2 self.attention_type = self.add_widget_intelligent( - SingleSelectColumns, + SingleSelectColumnsSimple, columns=len(ATTENTION_CHOICES), values=ATTENTION_CHOICES, value=ATTENTION_CHOICES.index(attention_type), @@ -447,7 +448,7 @@ Use cursor arrows to make a checkbox selection, and space to toggle. ) self.nextrely -= 2 self.attention_slice_size = self.add_widget_intelligent( - SingleSelectColumns, + SingleSelectColumnsSimple, columns=len(ATTENTION_SLICE_CHOICES), values=ATTENTION_SLICE_CHOICES, value=ATTENTION_SLICE_CHOICES.index(attention_slice_size), diff --git a/invokeai/frontend/install/widgets.py b/invokeai/frontend/install/widgets.py index f7d1d044c8..7011b6ed03 100644 --- a/invokeai/frontend/install/widgets.py +++ b/invokeai/frontend/install/widgets.py @@ -177,6 +177,8 @@ class FloatTitleSlider(npyscreen.TitleText): class SelectColumnBase: + """Base class for selection widget arranged in columns.""" + def make_contained_widgets(self): self._my_widgets = [] column_width = self.width // self.columns @@ -253,6 +255,7 @@ class MultiSelectColumns(SelectColumnBase, npyscreen.MultiSelect): class SingleSelectWithChanged(npyscreen.SelectOne): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.on_changed = None def h_select(self, ch): super().h_select(ch) @@ -260,7 +263,7 @@ class SingleSelectWithChanged(npyscreen.SelectOne): self.on_changed(self.value) -class SingleSelectColumns(SelectColumnBase, SingleSelectWithChanged): +class SingleSelectColumnsSimple(SelectColumnBase, SingleSelectWithChanged): def __init__(self, screen, columns: int = 1, values: list = [], **keywords): self.columns = columns self.value_cnt = len(values) @@ -271,9 +274,6 @@ class SingleSelectColumns(SelectColumnBase, SingleSelectWithChanged): def when_value_edited(self): self.h_select(self.cursor_line) - def when_cursor_moved(self): - self.h_select(self.cursor_line) - def h_cursor_line_right(self, ch): self.h_exit_down("bye bye") @@ -281,6 +281,11 @@ class SingleSelectColumns(SelectColumnBase, SingleSelectWithChanged): self.h_exit_up("bye bye") +class SingleSelectColumns(SingleSelectColumnsSimple): + def when_cursor_moved(self): + self.h_select(self.cursor_line) + + class TextBoxInner(npyscreen.MultiLineEdit): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)