Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/edt/edt/edtConfig.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ std::string cfg_edit_hier_copy_mode ("edit-hier-copy-mode");
std::string cfg_edit_show_shapes_of_instances ("edit-show-shapes-of-instances");
std::string cfg_edit_max_shapes_of_instances ("edit-max-shapes-of-instances");
std::string cfg_edit_pcell_show_parameter_names ("edit-pcell-show-parameter-names");
std::string cfg_edit_pcell_lazy_eval_mode ("edit-pcell-lazy-eval-mode");
std::string cfg_edit_global_grid ("grid-micron");
std::string cfg_edit_combine_mode ("combine-mode");

Expand Down
1 change: 1 addition & 0 deletions src/edt/edt/edtConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ extern EDT_PUBLIC std::string cfg_edit_inst_column_y;
extern EDT_PUBLIC std::string cfg_edit_inst_place_origin;
extern EDT_PUBLIC std::string cfg_edit_top_level_selection;
extern EDT_PUBLIC std::string cfg_edit_pcell_show_parameter_names;
extern EDT_PUBLIC std::string cfg_edit_pcell_lazy_eval_mode;
extern EDT_PUBLIC std::string cfg_edit_hier_copy_mode;
extern EDT_PUBLIC std::string cfg_edit_combine_mode;

Expand Down
102 changes: 87 additions & 15 deletions src/edt/edt/edtPCellParametersPage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,11 @@ static void set_value (const db::PCellParameterDeclaration &p, QWidget *widget,
}

PCellParametersPage::PCellParametersPage (QWidget *parent, lay::Dispatcher *dispatcher, bool dense)
: QFrame (parent), mp_dispatcher (dispatcher), m_dense (dense), m_show_parameter_names (false), dm_parameter_changed (this, &PCellParametersPage::do_parameter_changed)
: QFrame (parent), mp_dispatcher (dispatcher), m_dense (dense), m_show_parameter_names (false), m_lazy_evaluation (-1), dm_parameter_changed (this, &PCellParametersPage::do_parameter_changed)
{
if (mp_dispatcher) {
mp_dispatcher->config_get (cfg_edit_pcell_show_parameter_names, m_show_parameter_names);
mp_dispatcher->config_get (cfg_edit_pcell_lazy_eval_mode, m_lazy_evaluation);
}

init ();
Expand Down Expand Up @@ -236,28 +237,99 @@ PCellParametersPage::init ()

error_frame_layout->setColumnStretch (2, 1);

QFrame *show_parameter_names_frame = new QFrame (this);
show_parameter_names_frame->setFrameShape (QFrame::NoFrame);
frame_layout->addWidget (show_parameter_names_frame, 3, 0, 1, 1);
QFrame *options_frame = new QFrame (this);
options_frame->setFrameShape (QFrame::NoFrame);
frame_layout->addWidget (options_frame, 3, 0, 1, 1);

QHBoxLayout *show_parameter_names_frame_layout = new QHBoxLayout (show_parameter_names_frame);
show_parameter_names_frame->setLayout (show_parameter_names_frame_layout);
QHBoxLayout *options_frame_layout = new QHBoxLayout (options_frame);
options_frame->setLayout (options_frame_layout);
if (m_dense) {
show_parameter_names_frame_layout->setContentsMargins (4, 4, 4, 4);
options_frame_layout->setContentsMargins (4, 4, 4, 4);
}

mp_show_parameter_names_cb = new QCheckBox (show_parameter_names_frame);
mp_show_parameter_names_cb->setText (tr ("Show parameter names"));
mp_show_parameter_names_cb->setChecked (m_show_parameter_names);
show_parameter_names_frame_layout->addWidget (mp_show_parameter_names_cb);

connect (mp_show_parameter_names_cb, SIGNAL (clicked (bool)), this, SLOT (show_parameter_names (bool)));
QToolButton *dot_menu_button = new QToolButton (options_frame);
dot_menu_button->setText (tr ("Options "));
dot_menu_button->setAutoRaise (true);
dot_menu_button->setPopupMode (QToolButton::InstantPopup);
dot_menu_button->setToolButtonStyle (Qt::ToolButtonTextOnly);
options_frame_layout->addWidget (dot_menu_button);
options_frame_layout->addStretch ();

QMenu *dot_menu = new QMenu (dot_menu_button);
dot_menu_button->setMenu (dot_menu);
mp_show_parameter_names_action = new QAction (dot_menu);
dot_menu->addAction (mp_show_parameter_names_action);
mp_show_parameter_names_action->setText (tr ("Show parameter names"));
mp_show_parameter_names_action->setCheckable (true);
mp_show_parameter_names_action->setChecked (m_show_parameter_names);
connect (mp_show_parameter_names_action, SIGNAL (triggered (bool)), this, SLOT (show_parameter_names (bool)));

QMenu *lazy_eval_menu = new QMenu (dot_menu);
lazy_eval_menu->setTitle (tr ("Lazy PCell evaluation"));
dot_menu->addMenu (lazy_eval_menu);

mp_auto_lazy_eval_action = new QAction (lazy_eval_menu);
lazy_eval_menu->addAction (mp_auto_lazy_eval_action);
mp_auto_lazy_eval_action->setText (tr ("As requested by PCell"));
mp_auto_lazy_eval_action->setCheckable (true);
mp_auto_lazy_eval_action->setChecked (m_lazy_evaluation < 0);
connect (mp_auto_lazy_eval_action, SIGNAL (triggered ()), this, SLOT (lazy_eval_mode_slot ()));

mp_always_lazy_eval_action = new QAction (lazy_eval_menu);
lazy_eval_menu->addAction (mp_always_lazy_eval_action);
mp_always_lazy_eval_action->setText (tr ("Always"));
mp_always_lazy_eval_action->setCheckable (true);
mp_always_lazy_eval_action->setChecked (m_lazy_evaluation > 0);
connect (mp_always_lazy_eval_action, SIGNAL (triggered ()), this, SLOT (lazy_eval_mode_slot ()));

mp_never_lazy_eval_action = new QAction (lazy_eval_menu);
lazy_eval_menu->addAction (mp_never_lazy_eval_action);
mp_never_lazy_eval_action->setText (tr ("Never"));
mp_never_lazy_eval_action->setCheckable (true);
mp_never_lazy_eval_action->setChecked (m_lazy_evaluation == 0);
connect (mp_never_lazy_eval_action, SIGNAL (triggered ()), this, SLOT (lazy_eval_mode_slot ()));
}

bool
PCellParametersPage::lazy_evaluation ()
{
return mp_pcell_decl.get () && mp_pcell_decl->wants_lazy_evaluation ();
if (m_lazy_evaluation < 0) {
return mp_pcell_decl.get () && mp_pcell_decl->wants_lazy_evaluation ();
} else {
return m_lazy_evaluation > 0;
}
}

void
PCellParametersPage::lazy_eval_mode_slot ()
{
if (sender () == mp_always_lazy_eval_action) {
lazy_eval_mode (1);
} else if (sender () == mp_never_lazy_eval_action) {
lazy_eval_mode (0);
} else if (sender () == mp_auto_lazy_eval_action) {
lazy_eval_mode (-1);
}
}

void
PCellParametersPage::lazy_eval_mode (int mode)
{
if (mode == m_lazy_evaluation) {
return;
}

mp_never_lazy_eval_action->setChecked (mode == 0);
mp_always_lazy_eval_action->setChecked (mode > 0);
mp_auto_lazy_eval_action->setChecked (mode < 0);

m_lazy_evaluation = mode;

if (mp_dispatcher) {
mp_dispatcher->config_set (cfg_edit_pcell_lazy_eval_mode, m_lazy_evaluation);
}

setup (mp_view, m_cv_index, mp_pcell_decl.get (), get_parameters ());
}

void
Expand All @@ -268,7 +340,7 @@ PCellParametersPage::show_parameter_names (bool f)
}

m_show_parameter_names = f;
mp_show_parameter_names_cb->setChecked (f);
mp_show_parameter_names_action->setChecked (f);

if (mp_dispatcher) {
mp_dispatcher->config_set (cfg_edit_pcell_show_parameter_names, m_show_parameter_names);
Expand Down
8 changes: 7 additions & 1 deletion src/edt/edt/edtPCellParametersPage.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,12 @@ Q_OBJECT

public slots:
void show_parameter_names (bool f);
void lazy_eval_mode (int);

private slots:
void parameter_changed ();
void update_button_pressed ();
void lazy_eval_mode_slot ();

private:
lay::Dispatcher *mp_dispatcher;
Expand All @@ -160,14 +162,18 @@ private slots:
QLabel *mp_changed_icon;
QToolButton *mp_update_button;
QFrame *mp_error_frame, *mp_update_frame;
QCheckBox *mp_show_parameter_names_cb;
QAction *mp_show_parameter_names_action;
QAction *mp_auto_lazy_eval_action;
QAction *mp_always_lazy_eval_action;
QAction *mp_never_lazy_eval_action;
tl::weak_ptr<db::PCellDeclaration> mp_pcell_decl;
std::vector<QWidget *> m_widgets;
std::vector<QLabel *> m_icon_widgets;
std::vector<std::vector<QWidget *> > m_all_widgets;
lay::LayoutViewBase *mp_view;
int m_cv_index;
bool m_dense, m_show_parameter_names;
int m_lazy_evaluation;
tl::DeferredMethod<PCellParametersPage> dm_parameter_changed;
db::ParameterStates m_current_states, m_initial_states;
db::ParameterStates m_states;
Expand Down
1 change: 1 addition & 0 deletions src/edt/edt/edtPlugin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ void get_inst_options (std::vector < std::pair<std::string, std::string> > &opti
options.push_back (std::pair<std::string, std::string> (cfg_edit_inst_column_y, "0.0"));
options.push_back (std::pair<std::string, std::string> (cfg_edit_inst_place_origin, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_edit_pcell_show_parameter_names, "false"));
options.push_back (std::pair<std::string, std::string> (cfg_edit_pcell_lazy_eval_mode, "-1"));
options.push_back (std::pair<std::string, std::string> (cfg_edit_max_shapes_of_instances, "1000"));
options.push_back (std::pair<std::string, std::string> (cfg_edit_show_shapes_of_instances, "true"));
}
Expand Down
Loading