From dc3f20011937e3b8a7f01f91412ba8ebf48bd41d Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 27 Apr 2019 00:30:45 +0200 Subject: [PATCH] Aligned net browser config with net tracer. --- .../laybasic/NetlistBrowserConfigPage.ui | 130 ++--- .../laybasic/NetlistBrowserConfigPage2.ui | 534 ++++++++++++++---- src/laybasic/laybasic/layNetlistBrowser.cc | 232 +++++--- src/laybasic/laybasic/layNetlistBrowser.h | 17 +- .../laybasic/layNetlistBrowserDialog.cc | 101 ++-- .../laybasic/layNetlistBrowserDialog.h | 5 +- .../laybasic/layNetlistBrowserPage.cc | 17 +- src/laybasic/laybasic/layNetlistBrowserPage.h | 9 +- 8 files changed, 708 insertions(+), 337 deletions(-) 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;