From 825ea4d169950212e2ff25809e0555a9cea7dabf Mon Sep 17 00:00:00 2001 From: Daniel Rojas Date: Thu, 30 Jul 2020 19:29:00 +0200 Subject: [PATCH] Add option to add colors to connector pins --- src/wireviz/DataClasses.py | 5 +++++ src/wireviz/Harness.py | 10 +++++++--- src/wireviz/wv_colors.py | 9 +++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/wireviz/DataClasses.py b/src/wireviz/DataClasses.py index 6b3b1e36..817b2963 100644 --- a/src/wireviz/DataClasses.py +++ b/src/wireviz/DataClasses.py @@ -21,6 +21,7 @@ class Connector: notes: Optional[str] = None pinlabels: List[Any] = field(default_factory=list) pins: List[Any] = field(default_factory=list) + pincolors: List[Any] = field(default_factory=list) color: Optional[str] = None show_name: bool = None show_pincount: bool = None @@ -50,11 +51,15 @@ def __post_init__(self): if len(self.pinlabels) != len(self.pins): raise Exception('Given pins and pinlabels size mismatch') + # TODO: Check pincolor length + # create default lists for pins (sequential) and pinlabels (blank) if not specified if not self.pins: self.pins = list(range(1, self.pincount + 1)) if not self.pinlabels: self.pinlabels = [''] * self.pincount + if not self.pincolors: + self.pinlabels = [None] * self.pincount if len(self.pins) != len(set(self.pins)): raise Exception('Pins are not unique') diff --git a/src/wireviz/Harness.py b/src/wireviz/Harness.py index b0d51c69..8cce6333 100644 --- a/src/wireviz/Harness.py +++ b/src/wireviz/Harness.py @@ -4,7 +4,7 @@ from wireviz.DataClasses import Connector, Cable from graphviz import Graph from wireviz import wv_colors, wv_helper -from wireviz.wv_colors import get_color_hex +from wireviz.wv_colors import get_color_hex, html_color_icon from wireviz.wv_helper import awg_equiv, mm2_equiv, tuplelist2tsv, \ nested_html_table, flatten2d, index_if_list, html_line_breaks, \ graphviz_line_breaks, remove_line_breaks, open_file_read, open_file_write, \ @@ -105,11 +105,15 @@ def create_graph(self) -> Graph: if connector.style != 'simple': pinlist = [] - for pin, pinlabel in zip(connector.pins, connector.pinlabels): + for counter, pin, pinlabel in zip(range(0, len(connector.pins)), connector.pins, connector.pinlabels): if connector.hide_disconnected_pins and not connector.visible_pins.get(pin, False): continue pinlist.append([f'{pin}' if connector.ports_left else None, f'{pinlabel}' if pinlabel else '', + # f'{counter}', # for debugging only + f'{connector.pincolors[counter].replace("__","")}' if connector.pincolors else None, + # f'' if connector.pincolors else None, + f'{html_color_icon(connector.pincolors[counter])}' if connector.pincolors else None, f'{pin}' if connector.ports_right else None]) pinhtml = '' @@ -172,7 +176,7 @@ def create_graph(self) -> Graph: if cable.color: # add color bar next to color info, if present colorbar = f' bgcolor="{wv_colors.translate_color(cable.color, "HEX")}" width="4">' # leave out ' tag html = html.replace('>', colorbar) - + wirehtml = '
' # conductor table wirehtml = f'{wirehtml}' diff --git a/src/wireviz/wv_colors.py b/src/wireviz/wv_colors.py index 41575437..a9a2230c 100644 --- a/src/wireviz/wv_colors.py +++ b/src/wireviz/wv_colors.py @@ -139,3 +139,12 @@ def translate_color(input, color_mode): return output.upper() else: return output.lower() + + +def html_color_icon(inp): + if inp == None: # no color specified + return '' + elif inp == "WH": # color matches background color + return '□' # square outline in default text color + else: + return f'' # filled square in requested color