X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/bcc25888b3299758ad36721530cca3b899b7166c..c043fa535514a76091be87a45ad472a505f9dd33:/lunaix-os/scripts/build-tools/integration/libmenu.py diff --git a/lunaix-os/scripts/build-tools/integration/libmenu.py b/lunaix-os/scripts/build-tools/integration/libmenu.py deleted file mode 100644 index 3b0492e..0000000 --- a/lunaix-os/scripts/build-tools/integration/libmenu.py +++ /dev/null @@ -1,261 +0,0 @@ -import curses -import integration.libtui as tui -from integration.libtui import ColorScope, TuiColor, Alignment, EventType - -def create_buttons(main_ctx, btn_defs, sizes = "*,*"): - size_defs = ",".join(['*'] * len(btn_defs)) - - layout = tui.FlexLinearLayout(main_ctx, "buttons", size_defs) - layout.orientation(tui.FlexLinearLayout.LANDSCAPE) - layout.set_size(*(sizes.split(',')[:2])) - layout.set_padding(1, 1, 1, 1) - layout.set_alignment(Alignment.CENTER | Alignment.BOT) - - for i, btn_def in enumerate(btn_defs): - but1 = tui.TuiButton(main_ctx, "b1") - but1.set_text(btn_def["text"]) - but1.set_click_callback(btn_def["onclick"]) - but1.set_alignment(Alignment.CENTER) - - layout.set_cell(i, but1) - - return layout - -def create_title(ctx, title): - _t = tui.TuiLabel(ctx, "label") - _t.set_text(title) - _t.set_local_pos(1, 0) - _t.set_alignment(Alignment.TOP | Alignment.CENTER) - _t.hightlight(True) - _t.pad_around(True) - return _t - -class ListView(tui.TuiObject): - def __init__(self, context, id): - super().__init__(context, id) - - self.__create_layout() - - self.__sel_changed = None - self.__sel = None - - def __create_layout(self): - hint_moveup = tui.TuiLabel(self._context, "movup") - hint_moveup.override_color(ColorScope.HINT) - hint_moveup.set_text("^^^ - MORE") - hint_moveup.set_visbility(False) - hint_moveup.set_alignment(Alignment.TOP) - - hint_movedown = tui.TuiLabel(self._context, "movdown") - hint_movedown.override_color(ColorScope.HINT) - hint_movedown.set_text("vvv - MORE") - hint_movedown.set_visbility(False) - hint_movedown.set_alignment(Alignment.BOT) - - list_ = tui.SimpleList(self._context, "list") - list_.set_size("*", "*") - list_.set_alignment(Alignment.CENTER | Alignment.TOP) - - list_.set_onselected_cb(self._on_selected) - list_.set_onselection_change_cb(self._on_sel_changed) - - scroll = tui.TuiScrollable(self._context, "scroll") - scroll.set_size("*", "*") - scroll.set_alignment(Alignment.CENTER) - scroll.set_content(list_) - - layout = tui.FlexLinearLayout( - self._context, f"main_layout", "2,*,2") - layout.set_size("*", "*") - layout.set_alignment(Alignment.CENTER) - layout.orientation(tui.FlexLinearLayout.PORTRAIT) - layout.set_parent(self) - - layout.set_cell(0, hint_moveup) - layout.set_cell(1, scroll) - layout.set_cell(2, hint_movedown) - - self.__hint_up = hint_moveup - self.__hint_down = hint_movedown - self.__list = list_ - self.__scroll = scroll - self.__layout = layout - - def add_item(self, item): - self.__list.add_item(item) - - def clear(self): - self.__list.clear() - - def on_draw(self): - super().on_draw() - - more_above = not self.__scroll.reached_top() - more_below = not self.__scroll.reached_last() - self.__hint_up.set_visbility(more_above) - self.__hint_down.set_visbility(more_below) - - self.__layout.on_draw() - - def on_layout(self): - super().on_layout() - self.__layout.on_layout() - - def _on_sel_changed(self, listv, prev, new): - h = self.__scroll._size.y() - self.__scroll.set_scrollY((new + 1) // h * h) - - if self.__sel_changed: - self.__sel_changed(listv, prev, new) - - def _on_selected(self, listv, index, item): - if self.__sel: - self.__sel(listv, index, item) - - def set_onselected_cb(self, cb): - self.__sel = cb - - def set_onselect_changed_cb(self, cb): - self.__sel_changed = cb - -class Dialogue(tui.TuiContext): - Pending = 0 - Yes = 1 - No = 2 - Abort = 3 - def __init__(self, session, title = "", content = "", input=False, - ok_btn = "OK", no_btn = "No", abort_btn = None): - super().__init__(session) - - self.__btns = [ - { "text": ok_btn, "onclick": lambda x: self._ok_onclick() } - ] - - if no_btn: - self.__btns.append({ - "text": no_btn, - "onclick": lambda x: self._no_onclick() - }) - if abort_btn: - self.__btns.append({ - "text": abort_btn, - "onclick": lambda x: self._abort_onclick() - }) - - self.__title_txt = title - self.__status = Dialogue.Pending - self.__content = content - self.__input_dialog = input - self._textbox = None - - self.set_size("70", "0.5*") - self.set_alignment(Alignment.CENTER) - - def set_content(self, content): - self.__content = content - - def set_input_dialogue(self, yes): - self.__input_dialog = yes - - def prepare(self): - self.__create_layout(self.__title_txt) - - def _handle_key_event(self, key): - if key == 27: - self.__close() - return - super()._handle_key_event(key) - - - def _ok_onclick(self): - self.__status = Dialogue.Yes - self.__close() - - def _no_onclick(self): - self.__status = Dialogue.No - self.__close() - - def _abort_onclick(self): - self.__status = Dialogue.Abort - self.__close() - - def __create_layout(self, title): - panel = tui.TuiPanel(self, "panel") - layout = tui.FlexLinearLayout(self, "layout", "*,3") - btn_grp = create_buttons(self, self.__btns) - t = create_title(self, title) - content = self.__create_content() - - self.__title = t - self.__layout = layout - self.__panel = panel - - panel._dyn_size.set(self._dyn_size) - panel._local_pos.set(self._local_pos) - panel.set_alignment(self._align) - panel.drop_shadow(1, 2) - panel.border(True) - - layout.orientation(tui.FlexLinearLayout.PORTRAIT) - layout.set_size("*", "*") - layout.set_padding(4, 1, 1, 1) - - t.set_alignment(Alignment.CENTER | Alignment.TOP) - - layout.set_cell(0, content) - layout.set_cell(1, btn_grp) - - panel.add(t) - panel.add(layout) - - self.set_root(panel) - - def __create_content(self): - text = None - if isinstance(self.__content, str): - text = tui.TuiTextBlock(self, "tb") - text.set_size("0.6*", "0.5*") - text.set_alignment(Alignment.CENTER) - text.set_text(self.__content) - elif self.__content is not None: - return self.__content - - if not self.__input_dialog: - self.set_size(h = "20") - return text - - tb = tui.TuiTextBox(self, "input") - tb.set_size("0.5*", "3") - tb.set_alignment(Alignment.CENTER) - - if text: - layout = tui.FlexLinearLayout(self, "layout", "*,5") - layout.orientation(tui.FlexLinearLayout.PORTRAIT) - layout.set_size("*", "*") - layout.set_cell(0, text) - layout.set_cell(1, tb) - else: - layout = tb - self.set_size(h = "10") - - self.set_curser_mode(1) - - self._textbox = tb - - return layout - - def __close(self): - self.session().pop_context() - - def status(self): - return self.__status - - def show(self, title=None): - if title: - self.__title.set_text(title) - self.session().push_context(self) - - -def show_dialog(session, title, text): - dia = Dialogue(session, title=title, content=text, no_btn=None) - dia.show() \ No newline at end of file