Skip to content

Commit

Permalink
Configurable net colors
Browse files Browse the repository at this point in the history
Fixes #373
  • Loading branch information
qu1ck committed May 2, 2023
1 parent af2fad7 commit ee81206
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 12 deletions.
30 changes: 30 additions & 0 deletions InteractiveHtmlBom/web/ibom.css
Expand Up @@ -803,3 +803,33 @@ a {
.dark .help-link {
border: 1px solid #00b9fd;
}

.bom-color {
width: 20%;
}

.color-column input {
width: 1.6rem;
height: 1rem;
border: 1px solid black;
cursor: pointer;
padding: 0;
}

/* removes default styling from input color element */
::-webkit-color-swatch {
border: none;
}

::-webkit-color-swatch-wrapper {
padding: 0;
}

::-moz-color-swatch,
::-moz-focus-inner {
border: none;
}

::-moz-focus-inner {
padding: 0;
}
51 changes: 48 additions & 3 deletions InteractiveHtmlBom/web/ibom.js
Expand Up @@ -71,6 +71,9 @@ function setDarkMode(value) {
writeStorage("darkmode", value);
settings.darkMode = value;
redrawIfInitDone();
if (initDone) {
populateBomTable();
}
}

function setShowBOMColumn(field, value) {
Expand Down Expand Up @@ -254,6 +257,33 @@ function createRowHighlightHandler(rowid, refs, net) {
}
}

function updateNetColors() {
writeStorage("netColors", JSON.stringify(settings.netColors));
redrawIfInitDone();
}

function netColorChangeHandler(net) {
return (event) => {
settings.netColors[net] = event.target.value;
updateNetColors();
}
}

function netColorRightClick(net) {
return (event) => {
if(event.button == 2) {
event.preventDefault();
event.stopPropagation();

var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
event.target.value = defaultNetColor;
delete settings.netColors[net];
updateNetColors();
}
}
}

function entryMatches(entry) {
if (settings.bommode == "netlist") {
// entry is just a net name
Expand Down Expand Up @@ -487,12 +517,14 @@ function populateBomHeader(placeHolderColumn = null, placeHolderElements = null)
}
}
if (settings.bommode == "netlist") {
th = createColumnHeader("Net name", "bom-netname", (a, b) => {
tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
});
tr.appendChild(th);
}));
tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
return 0;
}));
} else {
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
Expand Down Expand Up @@ -561,6 +593,8 @@ function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
netsToHandler = {};
currentHighlightedRowId = null;
var first = true;
var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
if (settings.bommode == "netlist") {
bomtable = pcbdata.nets.slice();
} else {
Expand Down Expand Up @@ -607,6 +641,17 @@ function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
td = document.createElement("TD");
td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
tr.appendChild(td);
var color = settings.netColors[netname] || defaultNetColor;
td = document.createElement("TD");
var colorBox = document.createElement("INPUT");
colorBox.type = "color";
colorBox.value = color;
colorBox.onchange = netColorChangeHandler(netname);
colorBox.onmouseup = netColorRightClick(netname);
colorBox.oncontextmenu = (e) => e.preventDefault();
td.appendChild(colorBox);
td.classList.add("color-column");
tr.appendChild(td);
} else {
if (reflookup) {
references = findRefInEntry(bomentry);
Expand Down
12 changes: 6 additions & 6 deletions InteractiveHtmlBom/web/render.js
Expand Up @@ -412,12 +412,12 @@ function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonCo
}
}

function drawTracks(canvas, layer, color, highlight) {
function drawTracks(canvas, layer, defaultColor, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.lineCap = "round";
for (var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
ctx.lineWidth = track.width;
ctx.beginPath();
if ('radius' in track) {
Expand All @@ -434,16 +434,16 @@ function drawTracks(canvas, layer, color, highlight) {
}
}

function drawZones(canvas, layer, color, highlight) {
function drawZones(canvas, layer, defaultColor, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineJoin = "round";
for (var zone of pcbdata.zones[layer]) {
if (highlight && highlightedNet != zone.net) continue;
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
ctx.fillStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
if (!zone.path2d) {
zone.path2d = getPolygonsPath(zone);
}
if (highlight && highlightedNet != zone.net) continue;
ctx.fill(zone.path2d, zone.fillrule || "nonzero");
if (zone.width > 0) {
ctx.lineWidth = zone.width;
Expand Down
12 changes: 9 additions & 3 deletions InteractiveHtmlBom/web/util.js
Expand Up @@ -469,8 +469,8 @@ function dataURLtoBlob(dataurl) {
}

var settings = {
canvaslayout: "default",
bomlayout: "default",
canvaslayout: "FB",
bomlayout: "left-right",
bommode: "grouped",
checkboxes: [],
checkboxStoredRefs: {},
Expand All @@ -488,7 +488,8 @@ var settings = {
renderTracks: true,
renderZones: true,
columnOrder: [],
hiddenColumns: []
hiddenColumns: [],
netColors: {},
}

function initDefaults() {
Expand All @@ -503,6 +504,9 @@ function initDefaults() {
if (settings.bommode === null) {
settings.bommode = "grouped";
}
if (settings.bommode == "netlist" && !pcbdata.nets) {
settings.bommode = "grouped";
}
if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
settings.bommode = "grouped";
}
Expand Down Expand Up @@ -575,6 +579,8 @@ function initDefaults() {
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);

settings.netColors = JSON.parse(readStorage("netColors")) || {};
}

// Helper classes for user js callbacks.
Expand Down

0 comments on commit ee81206

Please sign in to comment.