diff --git a/src/simudator/gui/formatting.py b/src/simudator/gui/formatting.py index ed57c8f4db9c84547663a82516e3af8da8a5167d..85ce4115f948e8ea90684bd04be954253c34447a 100644 --- a/src/simudator/gui/formatting.py +++ b/src/simudator/gui/formatting.py @@ -82,17 +82,17 @@ def format_to_str(format_info: FormatInfo, value: Any) -> str: """ match format_info.selected_format: case Format.Int: - pass + return str(value) case Format.Str: - pass + return str(value) case Format.Bin: return f"{value:0{format_info.kwargs['bit_length']}b}" case Format.Hex: return f"{value:0{math.ceil(format_info.kwargs['bit_length']/4)}x}" case Format.Decimal: - pass + return str(value) case Format.DecimalSigned: - pass + return str(value - 2 ** format_info.kwargs['bit_length']) def parse_str(format_info: FormatInfo, value: str) -> Any: @@ -114,5 +114,13 @@ def parse_str(format_info: FormatInfo, value: str) -> Any: match format_info.selected_format: case Format.Int: return int(value) + case Format.Bin: + return int(value, base=2) case Format.Hex: return int(value, base=16) + case Format.Decimal: + return int(value) + case Format.DecimalSigned: + # Turn negative numbers into the correct unsigned value + # e.g. bit length 3: -1 (0b111 in 2's complement) => 7 + return int(value) % 2 ** format_info.kwargs['bit_length']