/* * ======================== * ===== =============== * ====== ================ * ====== ================ * ====== ==== ==== == * ====== === == = = * ====== === = == = * = === === = == ==== * = === === = == = = * == ===== ==== == * ======================== * * SPDX-License-Identifier: BSD-3-Clause * * Copyright (c) 2023-2024, Joe * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of the organization nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * hardflip: src/i_host.go * Tue Jan 23 18:11:24 2024 * Joe * * interfacing hosts */ package main func i_host_panel_dirs(ui HardUI, icons bool, dir_icon uint8, depth uint16, dir *DirsNode, curr *DirsNode, line int) { style := ui.style[DIR_STYLE] if dir == curr { // style = style.Background(tcell.ColorBlack) style = style.Reverse(true) } text := " " for i := 0; i < int(depth) - 2; i++ { text += " " } if icons == true { text += DIRS_ICONS[dir_icon] } text += dir.Name spaces := "" for i := 0; i < (ui.dim[W] / 3) - len(text) + 1; i++ { spaces += " " } text += spaces i_draw_text(ui.s, 1, line, ui.dim[W] / 3, line, style, text) } func i_host_panel_host(ui HardUI, icons bool, depth uint16, host *HostNode, curr *HostNode, yank *ItemsNode, line int) { style := ui.style[DEF_STYLE] if yank != nil && host == yank.Host { style = ui.style[YANK_STYLE] if ui.insert_method == INSERT_MOVE { style = ui.style[MOVE_STYLE] } } if host == curr { // style = style.Background(tcell.ColorBlack) style = style.Reverse(true) } text := " " for i := 0; i < int(depth + 1) - 2; i++ { text += " " } if icons == true { text += HOST_ICONS[int(host.Protocol)] } text += host.Name spaces := "" for i := 0; i < (ui.dim[W] / 3) - len(text) + 1; i++ { spaces += " " } text += spaces i_draw_text(ui.s, 1, line, ui.dim[W] / 3, line, style, text) } func i_draw_host_panel(ui HardUI, icons bool, litems *ItemsList, data *HardData) { i_draw_box(ui.s, 0, 0, ui.dim[W] / 3, ui.dim[H] - 2, ui.style[BOX_STYLE], ui.style[HEAD_STYLE], " Hosts ", false) line := 1 if litems == nil || litems.head == nil { return } if ui.mode == FUZZ_MODE && data.lfuzz != nil { i_draw_host_panel_fuzzy(ui, icons, data.lfuzz, data) // TODO: draw fuzz list return } for ptr := litems.draw; ptr != nil && line < ui.dim[H] - 2; ptr = ptr.next { if ptr.is_dir() == false && ptr.Host != nil { i_host_panel_host(ui, icons, ptr.Host.parent.Depth, ptr.Host, litems.curr.Host, data.yank, line) line++ } else if ptr.Dirs != nil { var dir_icon uint8 if data.folds[ptr.Dirs] != nil { dir_icon = 1 } i_host_panel_dirs(ui, icons, dir_icon, ptr.Dirs.Depth, ptr.Dirs, litems.curr.Dirs, line) line++ } } } func i_draw_host_panel_fuzzy(ui HardUI, icons bool, lfuzz *ItemsList, data *HardData) { line := 1 if lfuzz == nil || lfuzz.head == nil { return } for ptr := lfuzz.draw; ptr != nil && line < ui.dim[H] - 2; ptr = ptr.next { if ptr.is_dir() == false && ptr.Host != nil { i_host_panel_host(ui, icons, 0, ptr.Host, lfuzz.curr.Host, data.yank, line) line++ } else if ptr.Dirs != nil { var dir_icon uint8 if data.folds[ptr.Dirs] != nil { dir_icon = 1 } i_host_panel_dirs(ui, icons, dir_icon, 0, ptr.Dirs, lfuzz.curr.Dirs, line) line++ } } }