Exemple #1
0
def show_main_menu():
    global text, ip_text
    style: GuiStyle = imgui.get_style()
    style.window_border_size = 0
    style.colors[imgui.COLOR_BUTTON] = Vec4(0.26, 0.59, 0.5, 0.4)
    style.colors[imgui.COLOR_BUTTON_ACTIVE] = Vec4(0.06, 0.53, 0.4, 1.0)
    style.colors[imgui.COLOR_BUTTON_HOVERED] = Vec4(0.26, 0.59, 0.5, 1.0)
    imgui.set_next_window_bg_alpha(0)
    imgui.set_next_window_position(300, 220)
    imgui.set_next_window_size(180, 200)
    imgui.begin("tremor0", False, imgui.WINDOW_NO_COLLAPSE | imgui.WINDOW_NO_MOVE | imgui.WINDOW_NO_RESIZE | imgui.WINDOW_NO_TITLE_BAR |
                imgui.WINDOW_ALWAYS_USE_WINDOW_PADDING)
    _, username = imgui.input_text("Name", text, 16)
    _, ip = imgui.input_text("Host", ip_text, 32)
    ip_text = ip
    text = username
    imgui.end()
    imgui.set_next_window_bg_alpha(0)
    imgui.set_next_window_size(100, 100)
    imgui.set_next_window_position(200, 200)
    imgui.begin("tremor1", False, imgui.WINDOW_NO_COLLAPSE | imgui.WINDOW_NO_MOVE | imgui.WINDOW_NO_RESIZE | imgui.WINDOW_NO_TITLE_BAR |
                imgui.WINDOW_ALWAYS_USE_WINDOW_PADDING)
    imgui.text_colored("Tremor", 0.9, 0.6, 1.0)
    play_clicked = imgui.button("Play", 82, 25)
    exit_clicked = imgui.button("Exit", 82, 25)
    if exit_clicked:
        graphics_subsystem.request_close()
    if play_clicked:
        print(username)
        client_net.connect_to_server((ip, 27070), username)
    imgui.end()
Exemple #2
0
 def render_callback(self, time: float, frametime: float):
     if imgui.begin_main_menu_bar():
         if imgui.begin_menu("File", True):
             clicked_quit, selected_quit = imgui.menu_item(
                 "Quit", 'Cmd+Q', False, True
             )
             if clicked_quit:
                 exit(1)
             imgui.end_menu()
         changed, value = imgui.input_text("", self.input_text, 30)
         if changed:
             imgui.set_next_window_position(imgui.get_item_rect_min().x,
                                            imgui.get_item_rect_max().y)
             imgui.set_next_window_size(imgui.get_item_rect_size().x, 0)
             if imgui.begin("##popup", False,
                            imgui.WINDOW_NO_TITLE_BAR | imgui.WINDOW_NO_MOVE | imgui.WINDOW_NO_RESIZE):
                 for index, row in symbol_list.iterrows():
                     if value.upper() in row[0]:
                         opened, selected = imgui.selectable(row[0] + " - " + row[2])
                         if imgui.is_item_clicked():
                             input_text = row[0]
                             selected_symbol = row[0]
             imgui.end()
         if imgui.button("download"):
             yfc.download(self.selected_symbol, symbol_data_file())
         imgui.end_main_menu_bar()
     pass
Exemple #3
0
 def draw(self):
     imgui.begin(self.title)
     changed, self.text_val = imgui.input_text('Text', self.text_val, 256)
     imgui.text('You wrote:')
     imgui.same_line()
     imgui.text(self.text_val)
     imgui.end()
Exemple #4
0
 def menu_bar(self):
     if imgui.begin_main_menu_bar():
         if imgui.begin_menu("File", True):
             clicked_quit, selected_quit = imgui.menu_item(
                 "Quit", 'Cmd+Q', False, True)
             if clicked_quit:
                 self.cleanup()
                 exit(0)
             imgui.end_menu()
         changed, value = imgui.input_text("", self.input_text, 30)
         if changed:
             imgui.set_next_window_position(imgui.get_item_rect_min().x,
                                            imgui.get_item_rect_max().y)
             imgui.set_next_window_size(imgui.get_item_rect_size().x, 0)
             if imgui.begin(
                     "##popup", False, imgui.WINDOW_NO_TITLE_BAR
                     | imgui.WINDOW_NO_MOVE | imgui.WINDOW_NO_RESIZE):
                 for index, row in self.symbol_list.iterrows():
                     if value.upper() in row[0]:
                         _, _ = imgui.selectable(row[0] + " - " + row[2])
                         if imgui.is_item_clicked():
                             self.input_text = row[0]
                             self.load_symbol(str(row[0]).lower())
             imgui.end()
         imgui.end_main_menu_bar()
Exemple #5
0
def draw_console():
    global _console_text_temp
    if console.SHOW_CONSOLE:
        imgui.set_next_window_bg_alpha(0.35)
        imgui.set_next_window_position(0, 0)
        imgui.set_next_window_size(screen_utils.WIDTH, 110)
        imgui.begin(
            "ConsoleWindow", False, imgui.WINDOW_NO_MOVE
            | imgui.WINDOW_NO_RESIZE | imgui.WINDOW_NO_COLLAPSE
            | imgui.WINDOW_NO_TITLE_BAR | imgui.WINDOW_NO_SAVED_SETTINGS)
        imgui.begin_child("ConsoleOutput", 0, -25, False)
        for text, color in console.text_buffer:
            if color is None:
                color = (0.25, 0.75, 1)
            imgui.text_colored(text, color[0], color[1], color[2], 0.8)
        imgui.text("")
        imgui.set_scroll_y(imgui.get_scroll_max_y())
        imgui.end_child()
        buf_size = 256
        if len(_console_text_temp) > 0 and not _console_text_temp[0] == "/":
            buf_size = 64
        enter, text = imgui.input_text("Input", _console_text_temp, buf_size,
                                       imgui.INPUT_TEXT_ENTER_RETURNS_TRUE)
        if enter:
            if str.startswith(text, "/"):
                text = str.replace(text, "/", "", 1)
                console.handle_input(text)
            else:
                client_net.send_message(text)
            text = ""
        _console_text_temp = text
        imgui.end()
Exemple #6
0
 def _show(self, value, read_only):
     imgui.push_item_width(self.width)
     changed, v = imgui.input_text("", value.value, 255,
                                   imgui.INPUT_TEXT_ENTER_RETURNS_TRUE)
     if imgui.is_item_hovered() and not imgui.is_item_active():
         imgui.set_tooltip(value.value)
     if changed:
         value.value = v
Exemple #7
0
 def _show_custom_ui(self):
     imgui.push_item_width(widget.WIDGET_WIDTH)
     if self.duplicate:
         imgui.push_style_color(imgui.COLOR_TEXT, 1.0, 0.0, 0.0)
     changed, v = imgui.input_text("", self.get("name"), 255, imgui.INPUT_TEXT_ENTER_RETURNS_TRUE)
     if self.duplicate:
         imgui.pop_style_color()
         if imgui.is_item_hovered():
             imgui.set_tooltip("Name is a duplicate!")
     if changed:
         self.name = v
Exemple #8
0
    def function(self, fun):
        import tide.generators.nodes as nodes
        f: nodes.FunctionDef = fun

        imgui.begin_group()
        imgui.text('def')
        imgui.same_line()
        imgui.input_text('nolavel', f.name)
        imgui.same_line()
        imgui.text('(')
        imgui.same_line()
        imgui.text(')')
        imgui.same_line()
        imgui.text('->')
        imgui.same_line()
        imgui.text(str(f.returns))
        imgui.same_line()
        imgui.text(':')

        imgui.end_group()
Exemple #9
0
    def _edit_field_arcs(self, field_geometry: GeometryFieldSize):
        while len(self._field_arc_expanded) < len(field_geometry.field_arcs):
            self._field_arc_expanded.append(False)
        while len(self._field_arc_expanded) > len(field_geometry.field_arcs):
            del self._field_arc_expanded[-1]

        imgui.text("Field Arcs")
        imgui.separator()
        arcs_to_delete = []
        for i, arc in enumerate(field_geometry.field_arcs):
            expanded, visible = imgui.collapsing_header(
                arc.name,
                True,
                imgui.TREE_NODE_DEFAULT_OPEN
                if self._field_arc_expanded[i] else 0,
            )
            if not visible:
                arcs_to_delete.append(i)
            if expanded:
                self._field_arc_expanded[i] = True
                changed, value = imgui.input_text(f"Name##{i}", arc.name, 255)
                if changed:
                    arc.name = value
                changed, values = imgui.input_float2("Center", arc.center.x,
                                                     arc.center.y)
                if changed:
                    arc.center.x, arc.center.y = values
                changed, values = imgui.input_float(f"Radius##{i}", arc.radius)
                if changed:
                    if value > 0:
                        arc.radius = value
                    else:
                        self._log.error(
                            f"Arc radius must be > 0. Got {arc.radius}")
                changed, values = imgui.input_float2(
                    f"Start Angle, End Angle##{i}", arc.a1, arc.a2)
                if changed:
                    arc.a1, arc.a2 = sorted(values)
                changed, value = imgui.input_float(f"Thickness##{i}",
                                                   arc.thickness)
                if changed:
                    if value > 0:
                        arc.thickness = value
                    else:
                        self._log.error("Field arc must have thickness > 0. "
                                        f"Got {arc.thickness}")
        for arc in arcs_to_delete[::-1]:
            del field_geometry.field_arcs[arc]
            del self._field_arc_expanded[arc]
        if imgui.button("Add field arc"):
            new_arc = field_geometry.field_arcs.add()
            new_arc.radius = 1000
            new_arc.thickness = 10
            self._field_arc_expanded.append(False)
Exemple #10
0
def _imgui_pick_file_menu(base_path, wildcard="*"):
    MAX_FILE_DISPLAY_LENGTH = 60

    try:
        entries = []
        for name in os.listdir(base_path):
            entries.append(
                (not os.path.isdir(os.path.join(base_path, name)), name))

        imgui.text("New:")
        imgui.same_line()
        imgui.push_item_width(-1)
        changed, value = imgui.input_text("", "", 255,
                                          imgui.INPUT_TEXT_ENTER_RETURNS_TRUE)
        if changed:
            return os.path.join(base_path, value)
        imgui.separator()
        for w in WILDCARDS:
            if imgui.button(w):
                return os.path.join(base_path, w)
            imgui.same_line()
        imgui.dummy(0, 0)
        imgui.separator()

        if len(entries) == 0:
            imgui.dummy(200, 0)

        for not_is_dir, name in sorted(entries):
            display_name = name
            if len(display_name) > MAX_FILE_DISPLAY_LENGTH:
                display_name = display_name[:MAX_FILE_DISPLAY_LENGTH //
                                            2] + "..." + display_name[
                                                -MAX_FILE_DISPLAY_LENGTH // 2:]

            if not not_is_dir:
                if imgui.begin_menu(display_name):
                    selected_path = _imgui_pick_file_menu(
                        os.path.join(base_path, name), wildcard)
                    imgui.end_menu()
                    if selected_path is not None:
                        return os.path.join(base_path, selected_path)
            else:
                if not fnmatch.fnmatch(name, wildcard):
                    continue
                clicked, state = imgui.menu_item(display_name, None, False)
                if clicked:
                    return os.path.join(base_path, name)

        imgui.separator()
        imgui.text("Pick: %s" % wildcard)
    except:
        imgui.text("Unable to open dir")
Exemple #11
0
    def obf_input_text(name,
                       value,
                       buffer_length=255,
                       tag=None,
                       flags=imgui.INPUT_TEXT_PASSWORD):

        while True:
            changed, new_value = imgui.input_text(name, value, buffer_length,
                                                  flags)
            if changed:
                return (name if tag is None else tag), new_value
            else:
                yield
Exemple #12
0
def input_text(name, value, buffer_length=255, tag=None, flags=0):
    """ Text input.

    Flags are [defined by PyImGui](https://pyimgui.readthedocs.io/en/latest/guide/inputtext-flags.html#inputtext-flag-options).
    `buffer_length` doesn't affect widget size on screen, it limits the maximum character count only.
    """
    while True:
        changed, new_value = imgui.input_text(name, value, buffer_length,
                                              flags)
        if changed:
            return (name if tag is None else tag), new_value
        else:
            yield
Exemple #13
0
def main():
    imgui.create_context()
    window = impl_glfw_init()
    impl = GlfwRenderer(window)
    ip_address = "localhost:3333"
    #imgui.set_window_font_scale(1.0)
    comms = MouseSocket()
    click_guard = True

    while not glfw.window_should_close(window):
        glfw.poll_events()
        impl.process_inputs()
        imgui.new_frame()
        imgui.set_next_window_size(300, 120)
        imgui.set_next_window_position(10, 0)
        imgui.begin("", False, imgui.WINDOW_NO_RESIZE)
        changed, ip_address = imgui.input_text(label="IP:PORT",
                                               value=ip_address,
                                               buffer_length=30)
        clicked = imgui.button(label="CONNECT")
        if clicked:
            comms.connect(ip_address)

        max_x, max_y = glfw.get_window_size(window)
        x, y = glfw.get_cursor_pos(window)

        norm_x = x / max_x
        norm_y = y / max_y

        state = glfw.get_mouse_button(window, glfw.MOUSE_BUTTON_LEFT)
        if state == glfw.PRESS:
            click_guard = False
        elif state == glfw.RELEASE and not click_guard:
            click_guard = True
            comms.send_click(norm_x, norm_y)

        comms.send_mouse_coords(norm_x, norm_y)

        imgui.text("Mouse Coords: {:.2f}, {:.2f}".format(norm_x, norm_y))
        imgui.text("Connected: {}".format(comms.is_connected))
        imgui.end()

        gl.glClear(gl.GL_COLOR_BUFFER_BIT)
        imgui.render()
        impl.render(imgui.get_draw_data())
        glfw.swap_buffers(window)

    impl.shutdown()
    glfw.terminate()
Exemple #14
0
def draw_mode():
    changed, text_val = imgui.input_text("Name: ",
                                         cur_state.map_data.name,
                                         buffer_length=64)
    if changed:
        cur_state.map_data.name = text_val

    imgui.text("{} mode".format(cur_state.mode.value))

    for k in MODE_DRAW_FUNCS.keys():
        # if can_switch_to(k.value):
        if imgui.radio_button(k.value, cur_state.mode == k):
            cur_state.mode = k

    MODE_DRAW_FUNCS[cur_state.mode](cur_state)
Exemple #15
0
    def _edit_field_lines(self, field_geometry: GeometryFieldSize):
        while len(self._field_line_expanded) < len(field_geometry.field_lines):
            self._field_line_expanded.append(False)
        while len(self._field_line_expanded) > len(field_geometry.field_lines):
            del self._field_line_expanded[-1]

        imgui.text("Field Lines")
        imgui.separator()
        lines_to_delete = []
        for i, line in enumerate(field_geometry.field_lines):
            expanded, visible = imgui.collapsing_header(
                f"{line.name}##{i}",
                True,
                imgui.TREE_NODE_DEFAULT_OPEN
                if self._field_line_expanded[i] else 0,
            )
            if not visible:
                lines_to_delete.append(i)
            if expanded:
                self._field_line_expanded[i] = True
                changed, value = imgui.input_text(f"Name##{i}", line.name, 255)
                if changed:
                    line.name = value
                changed, values = imgui.input_float2(f"P1##{i}", line.p1.x,
                                                     line.p1.y)
                if changed:
                    line.p1.x, line.p1.y = values[0], values[1]
                changed, values = imgui.input_float2(f"P2##{i}", line.p2.x,
                                                     line.p2.y)
                if changed:
                    line.p2.x, line.p2.y = values[0], values[1]
                changed, value = imgui.input_float(f"Thickness##{i}",
                                                   line.thickness)
                if changed:
                    if value > 0:
                        line.thickness = value
                    else:
                        self._log.error("Field line must have thickness > 0. "
                                        f"Got {line.thickness}")
            else:
                self._field_line_expanded[i] = False
        for line in lines_to_delete[::-1]:
            del field_geometry.field_lines[line]
            del self._field_line_expanded[line]
        if imgui.button("Add field line"):
            new_line = field_geometry.field_lines.add()
            new_line.thickness = 10
            self._field_line_expanded.append(False)
Exemple #16
0
 def draw_saveas_window(self, width, height):
     imgui.set_next_window_size(width * 2 / 8, height / 8)
     imgui.begin("Save Snapshot As...", flags=imgui.WINDOW_NO_RESIZE)
     _, self.saveas_file = imgui.input_text("Filename", self.saveas_file,
                                            256)
     if imgui.button("Save"):
         self.simulator.download_all(self.snapshot.buffers)
         self.snapshot.time = self.simulator.time
         self.snapshot.save(f"snapshots/{self.saveas_file}")
         self.snapshots = [
             f for f in os.listdir("snapshots") if f.endswith(".npz")
         ]
         self.current_snapshot = self.snapshots.index(self.saveas_file)
         self.selected_snapshot = self.current_snapshot
         self.show_saveas = False
     imgui.end()
Exemple #17
0
    def _show(self, value, read_only):
        imgui.push_item_width(self.width)
        changed, v = imgui.input_text("", value.value, 255,
                                      imgui.INPUT_TEXT_ENTER_RETURNS_TRUE)
        if imgui.is_item_hovered() and not imgui.is_item_active():
            imgui.set_tooltip(value.value)
        if changed:
            value.value = v
            return
        imgui.push_item_width(self.width)
        if imgui.button("Select file"):
            imgui.open_popup("select_file")

        path = imgui_pick_file("select_file",
                               assets.ASSET_PATH + "/" + self.prefix)
        if path is not None:
            value.value = os.path.relpath(path, assets.ASSET_PATH)
Exemple #18
0
    def render_ui(self):
        imgui.new_frame()
        imgui.begin("")
        if imgui.button("capture"):
            pass

        if imgui.button("brush"):
            self.mode = Mode.BRUSH

        changed, self.input_text = imgui.input_text("input", self.input_text,
                                                    255)
        if changed:
            pass

        imgui.end()
        imgui.render()
        self.imgui_renderer.render(imgui.get_draw_data())
Exemple #19
0
    def _show_custom_ui(self):
        imgui.dummy(1, 5)
        imgui.text("lambda x:")
        imgui.push_item_width(208)
        changed, text = imgui.input_text("", self.get("lambda"), 255,
                                         imgui.INPUT_TEXT_ENTER_RETURNS_TRUE)
        if changed:
            self.get_input("lambda").value = text

        if self.compile_error is not None:
            imgui.text_colored("Compilation error. (?)", 1.0, 0.0, 0.0)
            if imgui.is_item_hovered():
                imgui.set_tooltip(self.compile_error)
        elif self.run_error is not None:
            imgui.text_colored("Runtime error. (?)", 1.0, 0.0, 0.0)
            if imgui.is_item_hovered():
                imgui.set_tooltip(self.run_error)
        else:
            imgui.text("Lambda compiled.")
Exemple #20
0
    def draw_btn_bar(self):
        # 按钮栏
        utils.set_cursor_offset(6, 0)
        if imgui.button("clear"):
            print("清理")
            self.log_mgr.clear()
        imgui.same_line()

        # log等级
        for idx, log_level in enumerate(self.log_level_lst):
            is_check = self.config.is_has_log_level(log_level)
            ret = imgui.checkbox(self.log_level[idx], is_check)
            imgui.same_line()
            if ret[1] == is_check:
                continue
            if ret[1]:
                self.config.add_log_level(log_level)
            else:
                self.config.remove_log_level(log_level)

        # 搜索框
        imgui.same_line()
        old_text = self.config.get_string(EConfigKey.CONTENT_SEARCH_TEXT)
        imgui.push_item_width(240)
        imgui.push_id(EConfigKey.CONTENT_SEARCH_TEXT)
        ret = imgui.input_text("", old_text, 128)
        imgui.pop_id()
        if ret[0]:
            self.on_search_text_change(ret[1])
        imgui.pop_item_width()
        imgui.same_line()
        utils.set_cursor_offset(-8, 0)
        if imgui.button("清空"):
            self.on_search_text_change("")

        # 是否固定到底部
        imgui.same_line()
        is_to_bottom = self.config.get_bool(
            EConfigKey.CONTENT_SCROLL_TO_BOTTOM, True)
        ret = imgui.checkbox("bottom", is_to_bottom)
        if ret[1] != is_to_bottom:
            self.config.set_bool(EConfigKey.CONTENT_SCROLL_TO_BOTTOM, ret[1])
Exemple #21
0
    def render(self, time: float, frametime: float):
        global selected_symbol
        global input_text
        self.candlestick_chart.render()
        imgui.new_frame()
        if imgui.begin_main_menu_bar():
            if imgui.begin_menu("File", True):
                clicked_quit, selected_quit = imgui.menu_item(
                    "Quit", 'Cmd+Q', False, True
                )
                if clicked_quit:
                    exit(1)
                imgui.end_menu()
            changed, value = imgui.input_text("", input_text, 30)
            if changed:
                imgui.set_next_window_position(imgui.get_item_rect_min().x,
                                               imgui.get_item_rect_max().y)
                imgui.set_next_window_size(imgui.get_item_rect_size().x, 0)
                if imgui.begin("##popup", False,
                               imgui.WINDOW_NO_TITLE_BAR | imgui.WINDOW_NO_MOVE | imgui.WINDOW_NO_RESIZE):
                    for index, row in symbol_list.iterrows():
                        if value.upper() in row[0]:
                            opened, selected = imgui.selectable(row[0] + " - " + row[2])
                            if imgui.is_item_clicked():
                                input_text = row[0]
                                selected_symbol = row[0]
                imgui.end()
            if imgui.button("download"):
                yfc.download(selected_symbol, symbol_data_file())
            imgui.end_main_menu_bar()

        if not imgui.get_io().want_capture_mouse:
            self.candlestick_chart.render_gui()
        # if len(df):
        #     graphics.draw_table(df, 0)

        imgui.show_test_window()

        imgui.render()
        self.imgui.render(imgui.get_draw_data())
Exemple #22
0
 def render(self, scene):
     imgui.new_frame()
     changed = False
     if scene is not None:
         imgui.style_colors_classic()
         imgui.begin("Scene")
         imgui.text("Filename Template:")
         _, self.snapshot_format = imgui.input_text("",
                                                    self.snapshot_format,
                                                    256)
         if imgui.button("Save Snapshot"):
             # Call render again, since we're in the middle of overlaying
             # some stuff and we want a clean scene snapshot
             scene.render()
             write_bitmap(
                 scene.image[:, :, :3],
                 self.snapshot_format.format(count=self.snapshot_count),
             )
             self.snapshot_count += 1
         if imgui.tree_node("Debug"):
             if imgui.button("Save Depth"):
                 scene.render()
                 write_image(
                     scene.depth,
                     self.snapshot_format.format(count=self.snapshot_count),
                 )
                 self.snapshot_count += 1
             imgui.tree_pop()
         _ = self.render_camera(scene)
         changed = changed or _
         # imgui.show_style_editor()
         for i, element in enumerate(scene):
             if imgui.tree_node(f"element {i + 1}: {element.name}"):
                 changed = changed or element.render_gui(
                     imgui, self.renderer, scene)
                 imgui.tree_pop()
         self.window._do_update = self.window._do_update or changed
         imgui.end()
     imgui.render()
     self.renderer.render(imgui.get_draw_data())
Exemple #23
0
def draw_mode():

    draw_funcs = {
        Mode.SECTOR: draw_sector_mode,
        Mode.LINE: draw_line_mode,
        Mode.VERTEX: draw_vert_mode
    }

    changed, text_val = imgui.input_text("Name: ",
                                         cur_state.map_data.name,
                                         buffer_length=64)
    if changed:
        cur_state.map_data.name = text_val

    imgui.text("{} mode".format(cur_state.mode.value))

    for k in draw_funcs.keys():
        #if can_switch_to(k.value):
        if imgui.radio_button(k.value, cur_state.mode == k):
            cur_state.mode = k

    draw_funcs[cur_state.mode]()
def MudClientWindow(MudData):
    # mud content
    MudData['World_text_changed'], MudData['World_text'] = imgui.input_text_multiline(
        '\n',
        MudData['World_text'],
        50000,
        1280,
        660,
        imgui.INPUT_TEXT_READ_ONLY
    )
    imgui.begin_group()
    imgui.text("Input:")
    imgui.same_line()
    MudData['Player_text_changed'], MudData['Player_text'] = imgui.input_text(
        '\n\n',
        MudData['Player_text'],
        1920,
        imgui.INPUT_TEXT_ENTER_RETURNS_TRUE
    )
    imgui.end_group()
    if imgui.button("keyboard"):
        imgui.open_popup("select-popup")
Exemple #25
0
 def draw_input_bar(self):
     utils.set_cursor_offset(6, 0)
     cur_cmd = self.config.get_current_cmd()
     cur_txt = self.cur_edit_txt if self.is_edit_cmd else cur_cmd
     # win_width = imgui.get_window_width()
     # win_height = imgui.get_window_height()
     imgui.push_item_width(520)
     imgui.push_id(EConfigKey.CONTENT_CMD_TXT)
     ret = imgui.input_text(
         "", cur_txt, 1024, imgui.INPUT_TEXT_ENTER_RETURNS_TRUE
         | imgui.INPUT_TEXT_CALLBACK_COMPLETION
         | imgui.INPUT_TEXT_CALLBACK_HISTORY, self.input_bar_callback)
     self.is_edit_cmd = ret[1] != cur_cmd
     if self.is_edit_cmd:
         self.cur_edit_txt = ret[1]
     if ret[0]:
         self._send_cmd(ret[1])
         # print "hello world", ret[1]
     imgui.pop_id()
     imgui.same_line()
     utils.set_cursor_offset(-8, 0)
     if imgui.button("发送命令"):
         self._send_cmd(ret[1])
Exemple #26
0
def render_plugins_ui(window):
    "Draw UI windows for all plugins active for the current drawing."
    if not window.drawing:
        return

    drawing = window.drawing

    deactivated = set()
    for name, args in window.drawing.active_plugins.items():
        plugin, sig = window.plugins[name]
        _, opened = imgui.begin(f"{ name } ##{ drawing.path or drawing.uuid }",
                                True)
        if not opened:
            deactivated.add(name)
        imgui.columns(2)
        for param_name, param_sig in islice(sig.items(), 4, None):
            if param_sig.annotation == inspect._empty:
                continue
            imgui.text(param_name)
            imgui.next_column()
            default_value = args.get(param_name)
            if default_value is not None:
                value = default_value
            else:
                value = param_sig.default
            label = f"##{param_name}_val"
            if param_sig.annotation == int:
                changed, args[param_name] = imgui.drag_int(label, value)
            elif param_sig.annotation == float:
                changed, args[param_name] = imgui.drag_float(label, value)
            elif param_sig.annotation == str:
                changed, args[param_name] = imgui.input_text(label, value, 20)
            elif param_sig.annotation == bool:
                changed, args[param_name] = imgui.checkbox(label, value)
            imgui.next_column()
        imgui.columns(1)

        texture_and_size = getattr(plugin, "texture", None)
        if texture_and_size:
            texture, size = texture_and_size
            w, h = size
            ww, wh = imgui.get_window_size()
            scale = max(1, (ww - 10) // w)
            imgui.image(texture.name,
                        w * scale,
                        h * scale,
                        border_color=(1, 1, 1, 1))

        if hasattr(plugin, "ui"):
            result = plugin.ui(oldpaint, imgui, window.drawing, window.brush,
                               **args)
            if result:
                args.update(result)

        last_run = getattr(plugin, "last_run", 0)
        period = getattr(plugin, "period", None)
        t = time()
        # TODO I've seen more readable if-statements in my days...
        if callable(plugin) and ((period and t > last_run + period) or
                                 (not period and imgui.button("Execute"))):
            plugin.last_run = t
            try:
                result = plugin(oldpaint, imgui, window.drawing, window.brush,
                                **args)
                if result:
                    args.update(result)
            except Exception:
                # We don't want crappy plugins to ruin everything
                # Still probably probably possible to crash opengl though...
                logger.error(f"Plugin {name}: {format_exc()}")

        imgui.button("Help")
        if imgui.begin_popup_context_item("Help", mouse_button=0):
            if plugin.__doc__:
                imgui.text(inspect.cleandoc(plugin.__doc__))
            else:
                imgui.text("No documentation available.")
            imgui.end_popup()

        imgui.end()
    for name in deactivated:
        window.drawing.active_plugins.pop(name, None)
Exemple #27
0
            for button in range(joystick.get_numbuttons()):
                value = joystick.get_button(button)
                imgui.selectable("Button %s: %s" % (button, value))

                if imgui.begin_drag_drop_source():
                    imgui.set_drag_drop_payload(
                        "input", ("Button " + str(button)).encode())
                    imgui.text("Button %s: %s" % (button, value))
                    imgui.end_drag_drop_source()

        imgui.end()

        if local_motors:
            imgui.begin("Motor server IP address and port")

            changed, ip_address = imgui.input_text("IP address", other[0], 512)

            if changed:
                other = (ip_address, other[1])

            changed, port = imgui.input_int("Port", other[1])

            if changed:
                other = (other[0], port)
        else:
            imgui.begin("Motor client IP address and port")

            changed, ip_address = imgui.input_text("IP address", other[0], 512)

            if changed:
                other = (ip_address, other[1])
Exemple #28
0
    def update(self):
        # return done, value
        do_return = False
        recipe = ''
        if self.extra_font:
            imgui.push_font(self.extra_font)
        width = 750
        height = 250
        imgui.set_next_window_size(width, height)
        imgui.set_next_window_position(self.center_x - width // 2,
                                       self.center_y - height // 2)
        imgui.push_style_var(imgui.STYLE_ALPHA, self.alpha)
        imgui.begin('Drop', False, flags=self.flags)
        self.left_label('ID:')
        xx, self.id = imgui.input_text('\n', self.id, 128)
        self.tooltip_help('Participant ID/Name')

        self.add_space(3)
        self.left_label('Español:')
        _, self.spanish = imgui.checkbox('', self.spanish)
        self.tooltip_help('Spanish text for subsequent instructions')
        self.add_space(3)

        self.left_label('Recipe:')
        # current filenames
        recipe_names = []
        recipe_short = []
        for file in glob.glob('recipes/**/*.toml', recursive=True):
            if (os.path.sep + 'defaults' + os.path.sep) not in file:
                recipe_names.append(file)
                recipe_short.append(os.path.relpath(file, 'recipes'))
        changed, self.current_recipe = imgui.combo(' ', self.current_recipe,
                                                   recipe_short)
        self.tooltip_help(
            'Available recipes (TOML files) in the recipe directory')
        imgui.same_line()
        imgui.button('Preview')
        if imgui.is_item_hovered() and recipe_names:
            with open(recipe_names[self.current_recipe], 'r') as f:
                prev = f.read()
            # width in characters, height in number of newlines
            if prev:
                wid = len(
                    max(open(recipe_names[self.current_recipe], 'r'), key=len))
                # TODO: need to be careful of newline char??
                hei = prev.count('\n') + 1
            else:
                wid = 10
                hei = 1
            fac = 0.6
            font_size = imgui.get_font_size() * fac
            wid = int(wid * font_size / 2)  # get something like pix
            hei = int(hei * font_size)
            # if height is >= half the window height, turn to scroll
            val = hei
            if hei >= self.center_y:
                val = self.center_y
            imgui.begin_tooltip()
            imgui.begin_child('region', wid, val)
            imgui.set_scroll_y(imgui.get_scroll_y() -
                               imgui.get_io().mouse_wheel * 30)
            imgui.set_window_font_scale(fac)
            imgui.text(prev)
            imgui.end_child()
            imgui.end_tooltip()
            imgui.set_item_default_focus()

            # imgui.set_tooltip(prev)
        self.add_space(3)

        if imgui.button('Ok'):
            do_return = True
        if imgui.get_io().keys_down[imgui.KEY_ENTER]:
            do_return = True

        imgui.pop_style_var(1)
        imgui.end()
        if self.extra_font:
            imgui.pop_font()

        # disallow depending on current state
        if not self.id:
            do_return = False
        try:
            recipe = recipe_names[self.current_recipe]
        except IndexError:
            do_return = False
        if not os.path.isdir(self.recipe_dir):
            do_return = False
        # no need to validate data dir, we'll create it
        data = {
            'id': self.id,
            'recipe': recipe,
            'spanish': 'es' if self.spanish else 'en'
        }
        return do_return, data
Exemple #29
0
def image_explorer_impl(im, title=""):
    # type: (ImageWithZoomInfo, str) -> None
    """
    :return: imgui.Vec2 (mouse_location_original_image) or None (if not on image)
    """

    if im.image.size == 0:
        imgui.text("empty image !")
        return imgui.Vec2(0, 0)

    zoomed_image = im.zoomed_image()

    if not im.hide_buttons:
        _display_zoom_or_pan_buttons(im)
        if title != "":
            imgui.same_line()
            imgui.text("     " + title)
    mouse_location = imgui_cv.image(zoomed_image,
                                    image_adjustments=im.image_adjustments)
    mouse_location_original_image = None
    viewport_center_original_image = im.viewport_center_original_image()

    if not im.hide_buttons and mouse_location is not None:
        mouse_drag_button = 0
        is_mouse_dragging = imgui.is_mouse_dragging(
            mouse_drag_button) and imgui.is_item_hovered()
        drag_delta = imgui.get_mouse_drag_delta(mouse_drag_button)

        mouse_location_original_image = im.zoom_info.mouse_location_original_image(
            mouse_location)

        # Handle dragging / zoom or pan
        if not is_mouse_dragging:
            im.zoom_info.last_delta = imgui.Vec2(0, 0)
        if is_mouse_dragging:
            drag_delta_delta = imgui.Vec2(
                drag_delta.x - im.zoom_info.last_delta.x,
                drag_delta.y - im.zoom_info.last_delta.y)

            if im.zoom_info.zoom_or_pan == ZoomOrPan.Zoom:
                k = 1.03
                if drag_delta.y < 0:
                    zoom_ratio = k
                else:
                    zoom_ratio = 1. / k
                im.zoom_info.affine_transform = np.dot(
                    im.zoom_info.affine_transform,
                    compute_zoom_matrix(mouse_location_original_image,
                                        zoom_ratio))

            if im.zoom_info.zoom_or_pan == ZoomOrPan.Pan:
                im.zoom_info.affine_transform = np.dot(
                    im.zoom_info.affine_transform,
                    compute_pan_matrix(drag_delta_delta,
                                       im.zoom_info.affine_transform[0, 0]))

            im.zoom_info.last_delta = drag_delta

    # Zoom & Pan buttons

    def perform_zoom(ratio):
        im.zoom_info.affine_transform = np.dot(
            im.zoom_info.affine_transform,
            compute_zoom_matrix(viewport_center_original_image, ratio))

    import functools
    perform_zoom_plus = functools.partial(perform_zoom, 1.25)
    perform_zoom_minus = functools.partial(perform_zoom, 1. / 1.25)

    def perform_scale_one():
        im.zoom_info.set_scale_one(SizePixel.from_image(im.image),
                                   im.current_viewport_size())

    def perform_full_view():
        im.zoom_info.set_full_view(SizePixel.from_image(im.image),
                                   im.current_viewport_size())

    def perform_force_viewport_size():
        im.set_force_viewport_size(True)

    def perform_reset_viewport_size():
        im.set_force_viewport_size(False)

    def perform_hide_buttons():
        im.hide_buttons = True

    def perform_show_buttons():
        im.hide_buttons = False

    def show_zoom_button(name, action, same_line=True):
        if imgui.small_button(imgui_ext.make_unique_label(name)):
            action()
        if same_line:
            imgui.same_line()

    if im.hide_buttons:
        show_zoom_button("+", perform_show_buttons, False)
        imgui.same_line()
        imgui.text(title)
    else:
        show_zoom_button("-", perform_hide_buttons)
    if not im.hide_buttons:
        show_zoom_button("zoom +", perform_zoom_plus)
        show_zoom_button("zoom -", perform_zoom_minus)
        if im.can_show_big_viewport():
            show_zoom_button("scale 1", perform_scale_one)
        if im.is_not_full_view():
            show_zoom_button("full view", perform_full_view)
        if not im.show_adjustments:
            if imgui.small_button(imgui_ext.make_unique_label("Adjust")):
                im.show_adjustments = True
        # adjustments
        if im.show_adjustments:
            imgui.new_line()
            imgui.text("Adjust:")
            imgui.same_line()
            imgui.push_item_width(80)
            # noinspection PyArgumentList
            changed, im.image_adjustments.factor = imgui.slider_float(
                imgui_ext.make_unique_label("k"),
                im.image_adjustments.factor,
                0.,
                32.,
                display_format="%.3f",
                power=5.)
            imgui.same_line()
            imgui.push_item_width(80)
            changed, im.image_adjustments.delta = imgui.slider_float(
                imgui_ext.make_unique_label("delta"),
                im.image_adjustments.delta,
                0.,
                255.,
                display_format="%.3f",
                power=5.)
            imgui.same_line()
            if not im.image_adjustments.is_none():
                if imgui.small_button(imgui_ext.make_unique_label("reset")):
                    im.image_adjustments = imgui_cv.ImageAdjustments()
            imgui.same_line()
            if imgui.small_button(imgui_ext.make_unique_label("hide adjust")):
                im.show_adjustments = False
        # Show image info
        image_type_msg = str(im.image.dtype) + str(im.image.shape)
        zoom = im.zoom_info.affine_transform[0, 0]
        import math
        if not _is_close(zoom, 1):
            zoom_msg = "Zoom:{0:.2f} ".format(zoom)
        else:
            zoom_msg = ""
        msg = zoom_msg + image_type_msg
        imgui.text(msg)

        if im.can_show_big_viewport():
            imgui.same_line()
            if im.get_force_viewport_size():
                show_zoom_button("reset viewport", perform_reset_viewport_size)
            else:
                show_zoom_button("fit viewport", perform_force_viewport_size)
            imgui.new_line()
        # Save button
        # imgui.same_line()
        imgui.push_item_width(60)
        changed, im.filename = imgui.input_text(
            imgui_ext.make_unique_label(""), im.filename, 1000)
        imgui.same_line()
        if imgui.small_button(imgui_ext.make_unique_label("save")):
            cv2.imwrite(im.filename, im.image)
        # Show pixel color info
        if mouse_location is not None:
            color = zoomed_image[int(round(mouse_location.y)),
                                 int(round(mouse_location.x))]

            mouse2 = np.array([[mouse_location.x], [mouse_location.y], [1.]])
            pt_original = np.dot(
                numpy.linalg.inv(im.zoom_info.affine_transform), mouse2)
            position_msg = "({0},{1})".format(int(round(pt_original[0, 0])),
                                              int(round(pt_original[1, 0])))
            imgui.text(position_msg + " " + color_msg(color))
        else:
            imgui.text("")

    return mouse_location_original_image
Exemple #30
0
def display_parameter(parameter, editable):
    global slider_indexes
    if parameter.type == "List":
        if len(parameter.list) == 0:
            imgui.text("Empty list")
        else:
            if parameter.id not in slider_indexes:
                slider_indexes[parameter.id] = 0
            changed, values = imgui.slider_int("index", slider_indexes[parameter.id], 0, len(parameter.list)-1)
            if changed:
                slider_indexes[parameter.id] = values
            display_parameter(parameter.list[slider_indexes[parameter.id]], editable)
    if parameter.type == "Image":
        if parameter.image:
            image_to_texture = get_gl_texture(parameter.image, parameter.timestamp)
            # imgui.image(image_texture, image_width, image_height)
            window_width = 256 # imgui.get_window_width()
            display_width = 0
            display_height = 0
            image_width = image_to_texture.gl_widh
            image_height = image_to_texture.gl_height
            if image_width >= image_height:
                display_width = window_width
                display_height = image_height / (image_width/float(display_width))
            else:
                display_height = window_width
                display_width = image_width / (image_height/float(display_height))
            imgui.image(image_to_texture.gl_texture, display_width, display_height)
            imgui.text("width: " + str(parameter.image.width))
            imgui.text("height: " + str(parameter.image.height))
        else:
            imgui.text("No image available - run workflow or connect an image source")
    elif parameter.type == "Rectangle":
        if editable:
            changed, value = imgui.input_float("Left", parameter.left)
            if changed:
                parameter.left = value
            changed, value = imgui.input_float("Top", parameter.top)
            if changed:
                parameter.top = value
            changed, value = imgui.input_float("Right", parameter.right)
            if changed:
                parameter.right = value
            changed, value = imgui.input_float("Bottom", parameter.bottom)
            if changed:
                parameter.left = value
        else:
            imgui.text("Left: " + str(parameter.left))
            imgui.text("Top: " + str(parameter.top))
            imgui.text("Right: " + str(parameter.right))
            imgui.text("Bottom: " + str(parameter.bottom))
    elif parameter.type == "Coordinates":
        if editable:
            changed, value = imgui.input_float("x", parameter.x)
            if changed:
                parameter.x = value
            changed, value = imgui.input_float("y", parameter.y)
            if changed:
                parameter.y = value
        else:
            imgui.text("x: " + str(parameter.x))
            imgui.text("y: " + str(parameter.y))
    elif parameter.type == "Integer": # to do change to "number"
        if editable:
            changed, value = imgui.input_int("Value", parameter.value)
            if changed:
                parameter.value = value
        else:
            imgui.text("Value: " + str(parameter.value))
    elif parameter.type == "Color":
        changed, color = imgui.color_edit4(parameter.id, parameter.r, parameter.g, parameter.b, parameter.a)
        if editable and changed:
            parameter.r = color[0]
            parameter.g = color[1]
            parameter.b = color[2]
            parameter.a = color[3]
    elif parameter.type == "URL":
        changed, textval = imgui.input_text(parameter.id, parameter.url, 1024)
        if editable and changed:
            parameter.url = textval
        if editable:
            if imgui.button("browse..."):
                root = tk.Tk()
                root.withdraw()
                file_path = filedialog.askopenfilename()
                if file_path:
                    parameter.url = file_path
    elif parameter.type == "Text":
        changed, textval = imgui.input_text(parameter.id, parameter.text, 1024)
        if editable and changed:
            parameter.text = textval