@@ -71,6 +71,9 @@ function setDarkMode(value) {
7171 writeStorage ( "darkmode" , value ) ;
7272 settings . darkMode = value ;
7373 redrawIfInitDone ( ) ;
74+ if ( initDone ) {
75+ populateBomTable ( ) ;
76+ }
7477}
7578
7679function setShowBOMColumn ( field , value ) {
@@ -254,6 +257,33 @@ function createRowHighlightHandler(rowid, refs, net) {
254257 }
255258}
256259
260+ function updateNetColors ( ) {
261+ writeStorage ( "netColors" , JSON . stringify ( settings . netColors ) ) ;
262+ redrawIfInitDone ( ) ;
263+ }
264+
265+ function netColorChangeHandler ( net ) {
266+ return ( event ) => {
267+ settings . netColors [ net ] = event . target . value ;
268+ updateNetColors ( ) ;
269+ }
270+ }
271+
272+ function netColorRightClick ( net ) {
273+ return ( event ) => {
274+ if ( event . button == 2 ) {
275+ event . preventDefault ( ) ;
276+ event . stopPropagation ( ) ;
277+
278+ var style = getComputedStyle ( topmostdiv ) ;
279+ var defaultNetColor = style . getPropertyValue ( '--track-color' ) . trim ( ) ;
280+ event . target . value = defaultNetColor ;
281+ delete settings . netColors [ net ] ;
282+ updateNetColors ( ) ;
283+ }
284+ }
285+ }
286+
257287function entryMatches ( entry ) {
258288 if ( settings . bommode == "netlist" ) {
259289 // entry is just a net name
@@ -487,12 +517,14 @@ function populateBomHeader(placeHolderColumn = null, placeHolderElements = null)
487517 }
488518 }
489519 if ( settings . bommode == "netlist" ) {
490- th = createColumnHeader ( "Net name" , "bom-netname" , ( a , b ) => {
520+ tr . appendChild ( createColumnHeader ( "Net name" , "bom-netname" , ( a , b ) => {
491521 if ( a > b ) return - 1 ;
492522 if ( a < b ) return 1 ;
493523 return 0 ;
494- } ) ;
495- tr . appendChild ( th ) ;
524+ } ) ) ;
525+ tr . appendChild ( createColumnHeader ( "Color" , "bom-color" , ( a , b ) => {
526+ return 0 ;
527+ } ) ) ;
496528 } else {
497529 // Filter hidden columns
498530 var columns = settings . columnOrder . filter ( e => ! settings . hiddenColumns . includes ( e ) ) ;
@@ -561,6 +593,8 @@ function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
561593 netsToHandler = { } ;
562594 currentHighlightedRowId = null ;
563595 var first = true ;
596+ var style = getComputedStyle ( topmostdiv ) ;
597+ var defaultNetColor = style . getPropertyValue ( '--track-color' ) . trim ( ) ;
564598 if ( settings . bommode == "netlist" ) {
565599 bomtable = pcbdata . nets . slice ( ) ;
566600 } else {
@@ -607,6 +641,17 @@ function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
607641 td = document . createElement ( "TD" ) ;
608642 td . innerHTML = highlightFilter ( netname ? netname : "<no net>" ) ;
609643 tr . appendChild ( td ) ;
644+ var color = settings . netColors [ netname ] || defaultNetColor ;
645+ td = document . createElement ( "TD" ) ;
646+ var colorBox = document . createElement ( "INPUT" ) ;
647+ colorBox . type = "color" ;
648+ colorBox . value = color ;
649+ colorBox . onchange = netColorChangeHandler ( netname ) ;
650+ colorBox . onmouseup = netColorRightClick ( netname ) ;
651+ colorBox . oncontextmenu = ( e ) => e . preventDefault ( ) ;
652+ td . appendChild ( colorBox ) ;
653+ td . classList . add ( "color-column" ) ;
654+ tr . appendChild ( td ) ;
610655 } else {
611656 if ( reflookup ) {
612657 references = findRefInEntry ( bomentry ) ;
0 commit comments