diff --git a/src/laybasic/laybasic/NetlistBrowserConfigPage.ui b/src/laybasic/laybasic/NetlistBrowserConfigPage.ui
index 857fe8996..c24ae94ae 100644
--- a/src/laybasic/laybasic/NetlistBrowserConfigPage.ui
+++ b/src/laybasic/laybasic/NetlistBrowserConfigPage.ui
@@ -13,29 +13,29 @@
Netlist Database Browser
-
-
- 6
-
-
- 9
-
+
-
- Netlist Browser
+ Net Browser
-
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
9
6
-
-
-
-
- -
+
-
Qt::Horizontal
@@ -51,14 +51,7 @@
- -
-
-
- Window
-
-
-
- -
+
-
-
@@ -67,83 +60,78 @@
-
- Fit context cell
+ Fit net with margin ..
-
- Fit marker with margin ..
+ Center net
-
- Center marker
-
-
- -
-
- Center marker with size ..
-
-
-
-
- -
-
-
-
-
- Any Cell
-
-
- -
-
- Netlist Top Circuit
-
-
- -
-
- Current Cell
-
-
- -
-
- Current or Any Cell
-
-
- -
-
- Net's Circuit
+ Center net with size ..
-
-
-
- false
-
-
-
- -
-
-
- Maximum number of shapes to show for net
+
+
+
+ 0
+ 0
+
-
-
+
- Context
+ Window
- -
+
-
µm
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Maximum number of shapes highlighted
+
+
+
diff --git a/src/laybasic/laybasic/NetlistBrowserConfigPage2.ui b/src/laybasic/laybasic/NetlistBrowserConfigPage2.ui
index c0ac46fd7..0932af9c5 100644
--- a/src/laybasic/laybasic/NetlistBrowserConfigPage2.ui
+++ b/src/laybasic/laybasic/NetlistBrowserConfigPage2.ui
@@ -1,146 +1,460 @@
-
+
+
NetlistBrowserConfigPage2
-
-
+
+
0
0
571
- 174
+ 331
-
+
Netlist Browser
-
-
- 9
-
-
- 6
-
+
-
-
-
+
+
Net Appearance
-
-
+
+
9
-
+
+ 9
+
+
+ 9
+
+
+ 9
+
+
6
-
-
-
-
- With halo
+
-
+
+
+ By default, the original layer's style is used for the highlighted net.
+This style can be overridden by specifying a color, stipple, line width etc.
+Leave those fields empty to use the original style.
+With "original color", the color intensity adjustment allows increasing or decreasing the
+brightness of the color used.
-
- true
+
+ false
- -
-
-
- -
-
-
- -
-
-
- pixel
-
-
-
- -
+
-
-
- Qt::Horizontal
+
+ Qt::Vertical
-
-
- 71
- 31
-
-
-
-
- -
-
-
-
- 0
- 0
- 0
- 0
-
-
-
- pixel
-
-
-
- -
-
-
- Line width
-
-
-
- -
-
-
- Qt::Horizontal
-
-
+
QSizePolicy::Fixed
-
+
- 41
- 31
+ 556
+ 16
- -
-
-
- Vertex size
+
-
+
+
+ QFrame::NoFrame
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 6
+
+
-
+
+
+ Net highlighting
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 16
+ 20
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 16
+ 20
+
+
+
+
+ -
+
+
+ or
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ % intensity increase
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 201
+ 20
+
+
+
+
+ -
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 6
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
-
+
+
+ ...
+
+
+
+ -
+
+
+ ...
+
+
+
+ -
+
+
+ ...
+
+
+
+ -
+
+
+ ...
+
+
+
+ -
+
+
+ ...
+
+
+
+ -
+
+
+ ...
+
+
+
+ -
+
+
+ ...
+
+
+
+ -
+
+
+ ...
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+ -
+
+
+ Auto-color with palette
+
+
+
+ -
+
+
+ Net coloring
+
+
+
+ -
+
+
+ -100
+
+
+ 100
+
+
+ 10
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ The color in which the rulers are drawn
+
+
+
+
+
+
+
- -
-
-
- The color in which the nets are drawn
+
-
+
+
+ QFrame::NoFrame
-
-
-
-
-
- -
-
-
- Net color
-
-
-
- -
-
-
- Stipple
-
-
-
- -
-
-
-
+
+ QFrame::Plain
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 6
+
+
-
+
+
+ Vertex size
+
+
+
+ -
+
+
+ Line width
+
+
+
+ -
+
+
+ pixel
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 71
+ 31
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Fixed
+
+
+
+ 590
+ 16
+
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ Stipple
+
+
+
+ -
+
+
+
+
+
+ true
+
+
+
+ -
+
+
+ Halo
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ pixel
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 16
+ 20
+
+
+
+
+
@@ -148,7 +462,7 @@
-
+
lay::DitherPatternSelectionButton
diff --git a/src/laybasic/laybasic/layNetlistBrowser.cc b/src/laybasic/laybasic/layNetlistBrowser.cc
index b9f388fc4..313c22be4 100644
--- a/src/laybasic/laybasic/layNetlistBrowser.cc
+++ b/src/laybasic/laybasic/layNetlistBrowser.cc
@@ -28,60 +28,28 @@
#include
+#include
+#include
+
namespace lay
{
// ------------------------------------------------------------
// Declaration of the configuration options
-std::string cfg_l2ndb_context_mode ("l2n-context-mode");
-std::string cfg_l2ndb_show_all ("l2n-show-all");
-std::string cfg_l2ndb_window_state ("l2n-window-state");
-std::string cfg_l2ndb_window_mode ("l2n-window-mode");
-std::string cfg_l2ndb_window_dim ("l2n-window-dim");
-std::string cfg_l2ndb_max_marker_count ("l2n-max-marker-count");
-std::string cfg_l2ndb_highlight_color ("l2n-highlight-color");
-std::string cfg_l2ndb_highlight_line_width ("l2n-highlight-line-width");
-std::string cfg_l2ndb_highlight_vertex_size ("l2n-highlight-vertex-size");
-std::string cfg_l2ndb_highlight_halo ("l2n-highlight-halo");
-std::string cfg_l2ndb_highlight_dither_pattern ("l2n-highlight-dither-pattern");
-
-// ------------------------------------------------------------
-
-static struct {
- lay::NetlistBrowserConfig::net_context_mode_type mode;
- const char *string;
-} context_modes [] = {
- { lay::NetlistBrowserConfig::AnyCell, "any-cell" },
- { lay::NetlistBrowserConfig::NetlistTop, "netlist-top" },
- { lay::NetlistBrowserConfig::Current, "current-cell" },
- { lay::NetlistBrowserConfig::CurrentOrAny, "current-or-any-cell" },
- { lay::NetlistBrowserConfig::Local, "local-cell" },
-};
-
-void
-NetlistBrowserContextModeConverter::from_string (const std::string &value, lay::NetlistBrowserConfig::net_context_mode_type &mode)
-{
- for (unsigned int i = 0; i < sizeof (context_modes) / sizeof (context_modes [0]); ++i) {
- if (value == context_modes [i].string) {
- mode = context_modes [i].mode;
- return;
- }
- }
- throw tl::Exception (tl::to_string (QObject::tr ("Invalid marker database browser context mode: ")) + value);
-}
-
-std::string
-NetlistBrowserContextModeConverter::to_string (lay::NetlistBrowserConfig::net_context_mode_type mode)
-{
- for (unsigned int i = 0; i < sizeof (context_modes) / sizeof (context_modes [0]); ++i) {
- if (mode == context_modes [i].mode) {
- return context_modes [i].string;
- }
- }
- return "";
-}
-
+extern const std::string cfg_l2ndb_marker_color ("l2ndb-marker-color");
+extern const std::string cfg_l2ndb_marker_cycle_colors ("l2ndb-marker-cycle-colors");
+extern const std::string cfg_l2ndb_marker_cycle_colors_enabled ("l2ndb-marker-cycle-colors-enabled");
+extern const std::string cfg_l2ndb_marker_dither_pattern ("l2ndb-marker-dither-pattern");
+extern const std::string cfg_l2ndb_marker_line_width ("l2ndb-marker-line-width");
+extern const std::string cfg_l2ndb_marker_vertex_size ("l2ndb-marker-vertex-size");
+extern const std::string cfg_l2ndb_marker_halo ("l2ndb-marker-halo");
+extern const std::string cfg_l2ndb_marker_intensity ("l2ndb-marker-intensity");
+extern const std::string cfg_l2ndb_window_mode ("l2ndb-window-mode");
+extern const std::string cfg_l2ndb_window_dim ("l2ndb-window-dim");
+extern const std::string cfg_l2ndb_max_shapes_highlighted ("l2ndb-max-shapes-highlighted");
+extern const std::string cfg_l2ndb_show_all ("l2ndb-show-all");
+extern const std::string cfg_l2ndb_window_state ("l2ndb-window-state");
// ------------------------------------------------------------
@@ -90,8 +58,7 @@ static struct {
const char *string;
} window_modes [] = {
{ lay::NetlistBrowserConfig::DontChange, "dont-change" },
- { lay::NetlistBrowserConfig::FitCell, "fit-cell" },
- { lay::NetlistBrowserConfig::FitNet, "fit-net" },
+ { lay::NetlistBrowserConfig::FitNet, "fit-net" },
{ lay::NetlistBrowserConfig::Center, "center" },
{ lay::NetlistBrowserConfig::CenterSize, "center-size" }
};
@@ -105,7 +72,7 @@ NetlistBrowserWindowModeConverter::from_string (const std::string &value, lay::N
return;
}
}
- throw tl::Exception (tl::to_string (QObject::tr ("Invalid marker database browser window mode: ")) + value);
+ throw tl::Exception (tl::to_string (QObject::tr ("Invalid net tracer window mode: ")) + value);
}
std::string
@@ -119,9 +86,7 @@ NetlistBrowserWindowModeConverter::to_string (lay::NetlistBrowserConfig::net_win
return "";
}
-
// ------------------------------------------------------------
-// Implementation of NetlistBrowserConfigPage
NetlistBrowserConfigPage::NetlistBrowserConfigPage (QWidget *parent)
: lay::ConfigPage (parent)
@@ -134,11 +99,6 @@ NetlistBrowserConfigPage::NetlistBrowserConfigPage (QWidget *parent)
void
NetlistBrowserConfigPage::setup (lay::PluginRoot *root)
{
- // context mode
- lay::NetlistBrowserConfig::net_context_mode_type cmode = lay::NetlistBrowserConfig::NetlistTop;
- root->config_get (cfg_l2ndb_context_mode, cmode, NetlistBrowserContextModeConverter ());
- cbx_context->setCurrentIndex (int (cmode));
-
// window mode
lay::NetlistBrowserConfig::net_window_type wmode = lay::NetlistBrowserConfig::FitNet;
root->config_get (cfg_l2ndb_window_mode, wmode, NetlistBrowserWindowModeConverter ());
@@ -149,9 +109,9 @@ NetlistBrowserConfigPage::setup (lay::PluginRoot *root)
root->config_get (cfg_l2ndb_window_dim, wdim);
le_window->setText (tl::to_qstring (tl::to_string (wdim)));
- // max. marker count
- unsigned int max_marker_count = 1000;
- root->config_get (cfg_l2ndb_max_marker_count, max_marker_count);
+ // max. shapes highlighted
+ unsigned int max_marker_count = 10000;
+ root->config_get (cfg_l2ndb_max_shapes_highlighted, max_marker_count);
le_max_markers->setText (tl::to_qstring (tl::to_string (max_marker_count)));
// enable controls
@@ -170,35 +130,95 @@ NetlistBrowserConfigPage::commit (lay::PluginRoot *root)
double dim = 1.0;
tl::from_string (tl::to_string (le_window->text ()), dim);
- unsigned int max_markers_count = 1000;
- tl::from_string (tl::to_string (le_max_markers->text ()), max_markers_count);
+ unsigned int max_shapes_highlighted = 10000;
+ tl::from_string (tl::to_string (le_max_markers->text ()), max_shapes_highlighted);
- root->config_set (cfg_l2ndb_context_mode, lay::NetlistBrowserConfig::net_context_mode_type (cbx_context->currentIndex ()), NetlistBrowserContextModeConverter ());
root->config_set (cfg_l2ndb_window_mode, lay::NetlistBrowserConfig::net_window_type (cbx_window->currentIndex ()), NetlistBrowserWindowModeConverter ());
root->config_set (cfg_l2ndb_window_dim, dim);
- root->config_set (cfg_l2ndb_max_marker_count, max_markers_count);
+ root->config_set (cfg_l2ndb_max_shapes_highlighted, max_shapes_highlighted);
}
// ------------------------------------------------------------
-// Implementation of NetlistBrowserConfigPage2
+
+static QToolButton * (Ui::NetlistBrowserConfigPage2::*cc_buttons []) = {
+ &Ui::NetlistBrowserConfigPage2::cc0,
+ &Ui::NetlistBrowserConfigPage2::cc1,
+ &Ui::NetlistBrowserConfigPage2::cc2,
+ &Ui::NetlistBrowserConfigPage2::cc3,
+ &Ui::NetlistBrowserConfigPage2::cc4,
+ &Ui::NetlistBrowserConfigPage2::cc5,
+ &Ui::NetlistBrowserConfigPage2::cc6,
+ &Ui::NetlistBrowserConfigPage2::cc7
+};
NetlistBrowserConfigPage2::NetlistBrowserConfigPage2 (QWidget *parent)
: lay::ConfigPage (parent)
{
Ui::NetlistBrowserConfigPage2::setupUi (this);
+
+ for (unsigned int i = 0; i < sizeof (cc_buttons) / sizeof (cc_buttons [0]); ++i) {
+ connect (this->*(cc_buttons [i]), SIGNAL (clicked ()), this, SLOT (color_button_clicked ()));
+ }
+}
+
+void
+NetlistBrowserConfigPage2::color_button_clicked ()
+{
+ for (unsigned int i = 0; i < sizeof (cc_buttons) / sizeof (cc_buttons [0]); ++i) {
+
+ if (sender () == this->*(cc_buttons [i])) {
+
+ QColor c;
+ if (m_palette.colors () > i) {
+ c = QColorDialog::getColor (m_palette.color_by_index (i));
+ } else {
+ c = QColorDialog::getColor ();
+ }
+ if (c.isValid ()) {
+ m_palette.set_color (i, c.rgb ());
+ update_colors ();
+ }
+
+ break;
+
+ }
+
+ }
}
void
NetlistBrowserConfigPage2::setup (lay::PluginRoot *root)
{
+ bool cycle_enabled = false;
+ root->config_get (cfg_l2ndb_marker_cycle_colors_enabled, cycle_enabled);
+ cycle_colors_cb->setChecked (cycle_enabled);
+
+ std::string cc;
+ root->config_get (cfg_l2ndb_marker_cycle_colors, cc);
+ try {
+ m_palette.from_string (cc, true);
+ } catch (...) {
+ }
+
+ while (m_palette.colors () < sizeof (cc_buttons) / sizeof (cc_buttons [0])) {
+ m_palette.set_color (int (m_palette.colors ()), 0);
+ }
+
+ update_colors ();
+
// marker color
QColor color;
- root->config_get (cfg_l2ndb_highlight_color, color, lay::ColorConverter ());
+ root->config_get (cfg_l2ndb_marker_color, color, lay::ColorConverter ());
color_pb->set_color (color);
+ // brightness offset
+ int brightness = 0;
+ root->config_get (cfg_l2ndb_marker_intensity, brightness);
+ brightness_sb->setValue (brightness);
+
// marker line width
int lw = 0;
- root->config_get (cfg_l2ndb_highlight_line_width, lw);
+ root->config_get (cfg_l2ndb_marker_line_width, lw);
if (lw < 0) {
lw_le->setText (QString ());
} else {
@@ -207,7 +227,7 @@ NetlistBrowserConfigPage2::setup (lay::PluginRoot *root)
// marker vertex size
int vs = 0;
- root->config_get (cfg_l2ndb_highlight_vertex_size, vs);
+ root->config_get (cfg_l2ndb_marker_vertex_size, vs);
if (vs < 0) {
vs_le->setText (QString ());
} else {
@@ -216,50 +236,81 @@ NetlistBrowserConfigPage2::setup (lay::PluginRoot *root)
// stipple pattern
int dp = 0;
- root->config_get (cfg_l2ndb_highlight_dither_pattern, dp);
+ root->config_get (cfg_l2ndb_marker_dither_pattern, dp);
stipple_pb->set_dither_pattern (dp);
// halo
int halo = 0;
- root->config_get (cfg_l2ndb_highlight_halo, halo);
+ root->config_get (cfg_l2ndb_marker_halo, halo);
halo_cb->setCheckState (halo < 0 ? Qt::PartiallyChecked : (halo ? Qt::Checked : Qt::Unchecked));
}
+void
+NetlistBrowserConfigPage2::update_colors ()
+{
+ for (unsigned int i = 0; i < sizeof (cc_buttons) / sizeof (cc_buttons [0]); ++i) {
+
+ QColor color;
+ if (i < m_palette.colors ()) {
+ color = QColor (m_palette.color_by_index (i));
+ }
+
+ QFontMetrics fm (font (), this);
+ QRect rt (fm.boundingRect (QString::fromUtf8 ("AA")));
+ QPixmap pxmp (rt.width () + 10, rt.height () + 10);
+
+ QPainter pxpainter (&pxmp);
+ pxpainter.setPen (QPen (palette ().color (QPalette::Active, QPalette::Text)));
+ pxpainter.setBrush (QBrush (color));
+ QRect r (0, 0, pxmp.width () - 1, pxmp.height () - 1);
+ pxpainter.drawRect (r);
+
+ (this->*(cc_buttons [i]))->setIconSize (pxmp.size ());
+ (this->*(cc_buttons [i]))->setIcon (QIcon (pxmp));
+
+ }
+}
+
void
NetlistBrowserConfigPage2::commit (lay::PluginRoot *root)
{
- QColor color (color_pb->get_color ());
- root->config_set (cfg_l2ndb_highlight_color, color, lay::ColorConverter ());
+ root->config_set (cfg_l2ndb_marker_cycle_colors_enabled, cycle_colors_cb->isChecked ());
+ root->config_set (cfg_l2ndb_marker_cycle_colors, m_palette.to_string ());
+
+ QColor color = color_pb->get_color ();
+ root->config_set (cfg_l2ndb_marker_color, color, lay::ColorConverter ());
if (lw_le->text ().isEmpty ()) {
- root->config_set (cfg_l2ndb_highlight_line_width, -1);
+ root->config_set (cfg_l2ndb_marker_line_width, -1);
} else {
try {
int s;
tl::from_string (tl::to_string (lw_le->text ()), s);
- root->config_set (cfg_l2ndb_highlight_line_width, s);
+ root->config_set (cfg_l2ndb_marker_line_width, s);
} catch (...) { }
}
if (vs_le->text ().isEmpty ()) {
- root->config_set (cfg_l2ndb_highlight_vertex_size, -1);
+ root->config_set (cfg_l2ndb_marker_vertex_size, -1);
} else {
try {
int s;
tl::from_string (tl::to_string (vs_le->text ()), s);
- root->config_set (cfg_l2ndb_highlight_vertex_size, s);
+ root->config_set (cfg_l2ndb_marker_vertex_size, s);
} catch (...) { }
}
- root->config_set (cfg_l2ndb_highlight_dither_pattern, stipple_pb->dither_pattern ());
+ root->config_set (cfg_l2ndb_marker_dither_pattern, stipple_pb->dither_pattern ());
if (halo_cb->checkState () == Qt::PartiallyChecked) {
- root->config_set (cfg_l2ndb_highlight_halo, -1);
+ root->config_set (cfg_l2ndb_marker_halo, -1);
} else if (halo_cb->checkState () == Qt::Unchecked) {
- root->config_set (cfg_l2ndb_highlight_halo, 0);
+ root->config_set (cfg_l2ndb_marker_halo, 0);
} else if (halo_cb->checkState () == Qt::Checked) {
- root->config_set (cfg_l2ndb_highlight_halo, 1);
+ root->config_set (cfg_l2ndb_marker_halo, 1);
}
+
+ root->config_set (cfg_l2ndb_marker_intensity, brightness_sb->value ());
}
// ------------------------------------------------------------
@@ -271,16 +322,19 @@ class NetlistBrowserPluginDeclaration
public:
virtual void get_options (std::vector < std::pair > &options) const
{
- options.push_back (std::pair (cfg_l2ndb_context_mode, "netlist-top"));
options.push_back (std::pair (cfg_l2ndb_window_mode, "fit-net"));
- options.push_back (std::pair (cfg_l2ndb_window_state, ""));
options.push_back (std::pair (cfg_l2ndb_window_dim, "1.0"));
- options.push_back (std::pair (cfg_l2ndb_max_marker_count, "1000"));
- options.push_back (std::pair (cfg_l2ndb_highlight_color, lay::ColorConverter ().to_string (QColor ())));
- options.push_back (std::pair (cfg_l2ndb_highlight_line_width, "-1"));
- options.push_back (std::pair (cfg_l2ndb_highlight_vertex_size, "-1"));
- options.push_back (std::pair (cfg_l2ndb_highlight_halo, "-1"));
- options.push_back (std::pair (cfg_l2ndb_highlight_dither_pattern, "-1"));
+ options.push_back (std::pair (cfg_l2ndb_max_shapes_highlighted, "10000"));
+ options.push_back (std::pair (cfg_l2ndb_marker_color, lay::ColorConverter ().to_string (QColor ())));
+ options.push_back (std::pair (cfg_l2ndb_marker_cycle_colors_enabled, "false"));
+ options.push_back (std::pair (cfg_l2ndb_marker_cycle_colors, "255,0,0 0,255,0 0,0,255 255,255,0 255,0,255 0,255,255 160,80,255 255,160,0"));
+ options.push_back (std::pair (cfg_l2ndb_marker_line_width, "-1"));
+ options.push_back (std::pair (cfg_l2ndb_marker_vertex_size, "-1"));
+ options.push_back (std::pair (cfg_l2ndb_marker_halo, "-1"));
+ options.push_back (std::pair (cfg_l2ndb_marker_dither_pattern, "-1"));
+ options.push_back (std::pair (cfg_l2ndb_marker_intensity, "50"));
+ options.push_back (std::pair (cfg_l2ndb_show_all, "true"));
+ options.push_back (std::pair (cfg_l2ndb_window_state, ""));
}
virtual std::vector > config_pages (QWidget *parent) const
diff --git a/src/laybasic/laybasic/layNetlistBrowser.h b/src/laybasic/laybasic/layNetlistBrowser.h
index 10b1372fe..0b1c5eb85 100644
--- a/src/laybasic/laybasic/layNetlistBrowser.h
+++ b/src/laybasic/laybasic/layNetlistBrowser.h
@@ -25,6 +25,7 @@
#define HDR_layNetlistBrowser
#include "layPlugin.h"
+#include "layColorPalette.h"
#include "ui_NetlistBrowserConfigPage.h"
#include "ui_NetlistBrowserConfigPage2.h"
@@ -37,8 +38,7 @@ namespace lay
struct NetlistBrowserConfig
{
- enum net_context_mode_type { AnyCell = 0, NetlistTop, Current, CurrentOrAny, Local };
- enum net_window_type { DontChange = 0, FitCell, FitNet, Center, CenterSize };
+ enum net_window_type { DontChange = 0, FitNet, Center, CenterSize };
};
class NetlistBrowserConfigPage
@@ -68,13 +68,14 @@ public:
virtual void setup (lay::PluginRoot *root);
virtual void commit (lay::PluginRoot *root);
-};
-class NetlistBrowserContextModeConverter
-{
-public:
- void from_string (const std::string &value, lay::NetlistBrowserConfig::net_context_mode_type &mode);
- std::string to_string (lay::NetlistBrowserConfig::net_context_mode_type mode);
+public slots:
+ void color_button_clicked ();
+
+private:
+ void update_colors ();
+
+ lay::ColorPalette m_palette;
};
class NetlistBrowserWindowModeConverter
diff --git a/src/laybasic/laybasic/layNetlistBrowserDialog.cc b/src/laybasic/laybasic/layNetlistBrowserDialog.cc
index 072b3c6b6..4fe2de9e5 100644
--- a/src/laybasic/laybasic/layNetlistBrowserDialog.cc
+++ b/src/laybasic/laybasic/layNetlistBrowserDialog.cc
@@ -40,29 +40,32 @@
namespace lay
{
-extern std::string cfg_l2ndb_context_mode;
-extern std::string cfg_l2ndb_show_all;
-extern std::string cfg_l2ndb_window_state;
-extern std::string cfg_l2ndb_window_mode;
-extern std::string cfg_l2ndb_window_dim;
-extern std::string cfg_l2ndb_max_marker_count;
-extern std::string cfg_l2ndb_highlight_color;
-extern std::string cfg_l2ndb_highlight_line_width;
-extern std::string cfg_l2ndb_highlight_vertex_size;
-extern std::string cfg_l2ndb_highlight_halo;
-extern std::string cfg_l2ndb_highlight_dither_pattern;
+extern const std::string cfg_l2ndb_marker_color;
+extern const std::string cfg_l2ndb_marker_cycle_colors;
+extern const std::string cfg_l2ndb_marker_cycle_colors_enabled;
+extern const std::string cfg_l2ndb_marker_dither_pattern;
+extern const std::string cfg_l2ndb_marker_line_width;
+extern const std::string cfg_l2ndb_marker_vertex_size;
+extern const std::string cfg_l2ndb_marker_halo;
+extern const std::string cfg_l2ndb_marker_intensity;
+extern const std::string cfg_l2ndb_window_mode;
+extern const std::string cfg_l2ndb_window_dim;
+extern const std::string cfg_l2ndb_max_shapes_highlighted;
+extern const std::string cfg_l2ndb_show_all;
+extern const std::string cfg_l2ndb_window_state;
NetlistBrowserDialog::NetlistBrowserDialog (lay::PluginRoot *root, lay::LayoutView *vw)
: lay::Browser (root, vw),
Ui::NetlistBrowserDialog (),
- m_context (lay::NetlistBrowserConfig::AnyCell),
m_window (lay::NetlistBrowserConfig::FitNet),
m_window_dim (0.0),
m_max_shape_count (0),
+ m_auto_color_enabled (false),
m_marker_line_width (-1),
m_marker_vertex_size (-1),
m_marker_halo (-1),
m_marker_dither_pattern (-1),
+ m_marker_intensity (0),
m_cv_index (-1),
m_l2n_index (-1)
{
@@ -288,13 +291,7 @@ NetlistBrowserDialog::configure (const std::string &name, const std::string &val
bool taken = true;
bool show_all = browser_frame->show_all ();
- if (name == cfg_l2ndb_context_mode) {
-
- NetlistBrowserConfig::net_context_mode_type context = m_context;
- NetlistBrowserContextModeConverter ().from_string (value, context);
- need_update = lay::test_and_set (m_context, context);
-
- } else if (name == cfg_l2ndb_show_all) {
+ if (name == cfg_l2ndb_show_all) {
tl::from_string (value, show_all);
@@ -313,63 +310,69 @@ NetlistBrowserDialog::configure (const std::string &name, const std::string &val
need_update = true;
}
- } else if (name == cfg_l2ndb_max_marker_count) {
+ } else if (name == cfg_l2ndb_max_shapes_highlighted) {
unsigned int mc = 0;
tl::from_string (value, mc);
need_update = lay::test_and_set (m_max_shape_count, mc);
- } else if (name == cfg_l2ndb_highlight_color) {
+ } else if (name == cfg_l2ndb_marker_color) {
QColor color;
if (! value.empty ()) {
lay::ColorConverter ().from_string (value, color);
}
- if (color != m_marker_color) {
- m_marker_color = color;
- need_update = true;
- }
+ need_update = lay::test_and_set (m_marker_color, color);
- } else if (name == cfg_l2ndb_highlight_line_width) {
+ } else if (name == cfg_l2ndb_marker_cycle_colors) {
+
+ lay::ColorPalette colors;
+ colors.from_string (value, true);
+
+ need_update = lay::test_and_set (m_auto_colors, colors);
+
+ } else if (name == cfg_l2ndb_marker_cycle_colors) {
+
+ bool f = false;
+ tl::from_string (value, f);
+
+ need_update = lay::test_and_set (m_auto_color_enabled, f);
+
+ } else if (name == cfg_l2ndb_marker_line_width) {
int lw = 0;
tl::from_string (value, lw);
- if (lw != m_marker_line_width) {
- m_marker_line_width = lw;
- need_update = true;
- }
+ need_update = lay::test_and_set (m_marker_line_width, lw);
- } else if (name == cfg_l2ndb_highlight_vertex_size) {
+ } else if (name == cfg_l2ndb_marker_vertex_size) {
int vs = 0;
tl::from_string (value, vs);
- if (vs != m_marker_vertex_size) {
- m_marker_vertex_size = vs;
- need_update = true;
- }
+ need_update = lay::test_and_set (m_marker_vertex_size, vs);
- } else if (name == cfg_l2ndb_highlight_halo) {
+ } else if (name == cfg_l2ndb_marker_halo) {
int halo = 0;
tl::from_string (value, halo);
- if (halo != m_marker_halo) {
- m_marker_halo = halo;
- need_update = true;
- }
+ need_update = lay::test_and_set (m_marker_halo, halo);
- } else if (name == cfg_l2ndb_highlight_dither_pattern) {
+ } else if (name == cfg_l2ndb_marker_dither_pattern) {
int dp = 0;
tl::from_string (value, dp);
- if (dp != m_marker_dither_pattern) {
- m_marker_dither_pattern = dp;
- need_update = true;
- }
+ need_update = lay::test_and_set (m_marker_dither_pattern, dp);
+
+ } else if (name == cfg_l2ndb_marker_intensity) {
+
+ int bo = 0;
+ tl::from_string (value, bo);
+
+ need_update = lay::test_and_set (m_marker_intensity, bo);
} else {
taken = false;
@@ -377,8 +380,8 @@ NetlistBrowserDialog::configure (const std::string &name, const std::string &val
if (active () && need_update) {
browser_frame->set_max_shape_count (m_max_shape_count);
- browser_frame->set_window (m_window, m_window_dim, m_context);
- browser_frame->set_highlight_style (m_marker_color, m_marker_line_width, m_marker_vertex_size, m_marker_halo, m_marker_dither_pattern);
+ browser_frame->set_window (m_window, m_window_dim);
+ browser_frame->set_highlight_style (m_marker_color, m_marker_line_width, m_marker_vertex_size, m_marker_halo, m_marker_dither_pattern, m_marker_intensity, m_auto_color_enabled ? &m_auto_colors : 0);
}
browser_frame->show_all (show_all);
@@ -522,8 +525,8 @@ NetlistBrowserDialog::update_content ()
browser_frame->enable_updates (false); // Avoid building the internal lists several times ...
browser_frame->set_l2ndb (l2ndb);
browser_frame->set_max_shape_count (m_max_shape_count);
- browser_frame->set_highlight_style (m_marker_color, m_marker_line_width, m_marker_vertex_size, m_marker_halo, m_marker_dither_pattern);
- browser_frame->set_window (m_window, m_window_dim, m_context);
+ browser_frame->set_highlight_style (m_marker_color, m_marker_line_width, m_marker_vertex_size, m_marker_halo, m_marker_dither_pattern, m_marker_intensity, m_auto_color_enabled ? &m_auto_colors : 0);
+ browser_frame->set_window (m_window, m_window_dim);
browser_frame->set_view (view (), m_cv_index);
browser_frame->enable_updates (true);
diff --git a/src/laybasic/laybasic/layNetlistBrowserDialog.h b/src/laybasic/laybasic/layNetlistBrowserDialog.h
index 1f5e12c19..b686caf40 100644
--- a/src/laybasic/laybasic/layNetlistBrowserDialog.h
+++ b/src/laybasic/laybasic/layNetlistBrowserDialog.h
@@ -27,6 +27,7 @@
#include "ui_NetlistBrowserDialog.h"
#include "layBrowser.h"
#include "layNetlistBrowser.h"
+#include "layColorPalette.h"
namespace lay
{
@@ -69,15 +70,17 @@ public slots:
void configure_clicked ();
private:
- lay::NetlistBrowserConfig::net_context_mode_type m_context;
lay::NetlistBrowserConfig::net_window_type m_window;
double m_window_dim;
unsigned int m_max_shape_count;
QColor m_marker_color;
+ lay::ColorPalette m_auto_colors;
+ bool m_auto_color_enabled;
int m_marker_line_width;
int m_marker_vertex_size;
int m_marker_halo;
int m_marker_dither_pattern;
+ int m_marker_intensity;
std::string m_layout_name;
int m_cv_index;
std::string m_l2ndb_name;
diff --git a/src/laybasic/laybasic/layNetlistBrowserPage.cc b/src/laybasic/laybasic/layNetlistBrowserPage.cc
index ae6206636..31138ec8a 100644
--- a/src/laybasic/laybasic/layNetlistBrowserPage.cc
+++ b/src/laybasic/laybasic/layNetlistBrowserPage.cc
@@ -1265,7 +1265,6 @@ NetlistBrowserModel::subcircuit_index (const db::SubCircuit *sub_circuit) const
NetlistBrowserPage::NetlistBrowserPage (QWidget * /*parent*/)
: m_show_all (true),
- m_context (lay::NetlistBrowserConfig::NetlistTop),
m_window (lay::NetlistBrowserConfig::FitNet),
m_window_dim (0.0),
m_max_shape_count (1000),
@@ -1273,6 +1272,8 @@ NetlistBrowserPage::NetlistBrowserPage (QWidget * /*parent*/)
m_marker_vertex_size (-1),
m_marker_halo (-1),
m_marker_dither_pattern (-1),
+ m_marker_intensity (0),
+ m_auto_colors_enabled (false),
mp_view (0),
m_cv_index (0),
mp_plugin_root (0),
@@ -1313,7 +1314,7 @@ NetlistBrowserPage::NetlistBrowserPage (QWidget * /*parent*/)
NetlistBrowserPage::~NetlistBrowserPage ()
{
- // @@@
+ // .. nothing yet ..
}
void
@@ -1323,13 +1324,18 @@ NetlistBrowserPage::set_plugin_root (lay::PluginRoot *pr)
}
void
-NetlistBrowserPage::set_highlight_style (QColor color, int line_width, int vertex_size, int halo, int dither_pattern)
+NetlistBrowserPage::set_highlight_style (QColor color, int line_width, int vertex_size, int halo, int dither_pattern, int marker_intensity, const lay::ColorPalette *auto_colors)
{
m_marker_color = color;
m_marker_line_width = line_width;
m_marker_vertex_size = vertex_size;
m_marker_halo = halo;
m_marker_dither_pattern = dither_pattern;
+ m_marker_intensity = marker_intensity;
+ m_auto_colors_enabled = (auto_colors != 0);
+ if (auto_colors) {
+ m_auto_colors = *auto_colors;
+ }
update_highlights ();
}
@@ -1342,12 +1348,11 @@ NetlistBrowserPage::set_view (lay::LayoutView *view, unsigned int cv_index)
}
void
-NetlistBrowserPage::set_window (lay::NetlistBrowserConfig::net_window_type window, double window_dim, lay::NetlistBrowserConfig::net_context_mode_type context)
+NetlistBrowserPage::set_window (lay::NetlistBrowserConfig::net_window_type window, double window_dim)
{
- if (window != m_window || window_dim != m_window_dim || context != m_context) {
+ if (window != m_window || window_dim != m_window_dim) {
m_window = window;
m_window_dim = window_dim;
- m_context = context;
}
}
diff --git a/src/laybasic/laybasic/layNetlistBrowserPage.h b/src/laybasic/laybasic/layNetlistBrowserPage.h
index df71f4d0f..8a81cbeae 100644
--- a/src/laybasic/laybasic/layNetlistBrowserPage.h
+++ b/src/laybasic/laybasic/layNetlistBrowserPage.h
@@ -26,6 +26,7 @@
#include "ui_NetlistBrowserPage.h"
#include "layNetlistBrowser.h"
+#include "layColorPalette.h"
#include "laybasicCommon.h"
#include "dbBox.h"
#include "dbLayoutToNetlist.h"
@@ -203,7 +204,7 @@ public:
/**
* @brief Set the window type and window dimensions
*/
- void set_window (lay::NetlistBrowserConfig::net_window_type window_type, double window_dim, lay::NetlistBrowserConfig::net_context_mode_type context);
+ void set_window (lay::NetlistBrowserConfig::net_window_type window_type, double window_dim);
/**
* @brief Update the net highlights
@@ -227,7 +228,7 @@ public:
* @param halo The halo flag or -1 for default
* @param dither_pattern The dither pattern index of -1 to take the default
*/
- void set_highlight_style (QColor color, int line_width, int vertex_size, int halo, int dither_pattern);
+ void set_highlight_style (QColor color, int line_width, int vertex_size, int halo, int dither_pattern, int marker_intensity, const lay::ColorPalette *auto_colors);
/**
* @brief Gets a value indicating whether all items in the netlist tree are shown (specifically for cross-reference DBs)
@@ -260,7 +261,6 @@ private slots:
private:
bool m_show_all;
QAction *m_show_all_action;
- NetlistBrowserConfig::net_context_mode_type m_context;
NetlistBrowserConfig::net_window_type m_window;
double m_window_dim;
size_t m_max_shape_count;
@@ -269,6 +269,9 @@ private:
int m_marker_vertex_size;
int m_marker_halo;
int m_marker_dither_pattern;
+ int m_marker_intensity;
+ lay::ColorPalette m_auto_colors;
+ bool m_auto_colors_enabled;
lay::LayoutView *mp_view;
unsigned int m_cv_index;
lay::PluginRoot *mp_plugin_root;