@@ -154,10 +154,11 @@ static void set_value (const db::PCellParameterDeclaration &p, QWidget *widget,
154154}
155155
156156PCellParametersPage::PCellParametersPage (QWidget *parent, lay::Dispatcher *dispatcher, bool dense)
157- : QFrame (parent), mp_dispatcher (dispatcher), m_dense (dense), m_show_parameter_names (false ), dm_parameter_changed (this , &PCellParametersPage::do_parameter_changed)
157+ : 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)
158158{
159159 if (mp_dispatcher) {
160160 mp_dispatcher->config_get (cfg_edit_pcell_show_parameter_names, m_show_parameter_names);
161+ mp_dispatcher->config_get (cfg_edit_pcell_lazy_eval_mode, m_lazy_evaluation);
161162 }
162163
163164 init ();
@@ -236,28 +237,99 @@ PCellParametersPage::init ()
236237
237238 error_frame_layout->setColumnStretch (2 , 1 );
238239
239- QFrame *show_parameter_names_frame = new QFrame (this );
240- show_parameter_names_frame ->setFrameShape (QFrame::NoFrame);
241- frame_layout->addWidget (show_parameter_names_frame , 3 , 0 , 1 , 1 );
240+ QFrame *options_frame = new QFrame (this );
241+ options_frame ->setFrameShape (QFrame::NoFrame);
242+ frame_layout->addWidget (options_frame , 3 , 0 , 1 , 1 );
242243
243- QHBoxLayout *show_parameter_names_frame_layout = new QHBoxLayout (show_parameter_names_frame );
244- show_parameter_names_frame ->setLayout (show_parameter_names_frame_layout );
244+ QHBoxLayout *options_frame_layout = new QHBoxLayout (options_frame );
245+ options_frame ->setLayout (options_frame_layout );
245246 if (m_dense) {
246- show_parameter_names_frame_layout ->setContentsMargins (4 , 4 , 4 , 4 );
247+ options_frame_layout ->setContentsMargins (4 , 4 , 4 , 4 );
247248 }
248249
249- mp_show_parameter_names_cb = new QCheckBox (show_parameter_names_frame);
250- mp_show_parameter_names_cb->setText (tr (" Show parameter names" ));
251- mp_show_parameter_names_cb->setChecked (m_show_parameter_names);
252- show_parameter_names_frame_layout->addWidget (mp_show_parameter_names_cb);
253-
254- connect (mp_show_parameter_names_cb, SIGNAL (clicked (bool )), this , SLOT (show_parameter_names (bool )));
250+ QToolButton *dot_menu_button = new QToolButton (options_frame);
251+ dot_menu_button->setText (tr (" Options " ));
252+ dot_menu_button->setAutoRaise (true );
253+ dot_menu_button->setPopupMode (QToolButton::InstantPopup);
254+ dot_menu_button->setToolButtonStyle (Qt::ToolButtonTextOnly);
255+ options_frame_layout->addWidget (dot_menu_button);
256+ options_frame_layout->addStretch ();
257+
258+ QMenu *dot_menu = new QMenu (dot_menu_button);
259+ dot_menu_button->setMenu (dot_menu);
260+ mp_show_parameter_names_action = new QAction (dot_menu);
261+ dot_menu->addAction (mp_show_parameter_names_action);
262+ mp_show_parameter_names_action->setText (tr (" Show parameter names" ));
263+ mp_show_parameter_names_action->setCheckable (true );
264+ mp_show_parameter_names_action->setChecked (m_show_parameter_names);
265+ connect (mp_show_parameter_names_action, SIGNAL (triggered (bool )), this , SLOT (show_parameter_names (bool )));
266+
267+ QMenu *lazy_eval_menu = new QMenu (dot_menu);
268+ lazy_eval_menu->setTitle (tr (" Lazy PCell evaluation" ));
269+ dot_menu->addMenu (lazy_eval_menu);
270+
271+ mp_auto_lazy_eval_action = new QAction (lazy_eval_menu);
272+ lazy_eval_menu->addAction (mp_auto_lazy_eval_action);
273+ mp_auto_lazy_eval_action->setText (tr (" As requested by PCell" ));
274+ mp_auto_lazy_eval_action->setCheckable (true );
275+ mp_auto_lazy_eval_action->setChecked (m_lazy_evaluation < 0 );
276+ connect (mp_auto_lazy_eval_action, SIGNAL (triggered ()), this , SLOT (lazy_eval_mode_slot ()));
277+
278+ mp_always_lazy_eval_action = new QAction (lazy_eval_menu);
279+ lazy_eval_menu->addAction (mp_always_lazy_eval_action);
280+ mp_always_lazy_eval_action->setText (tr (" Always" ));
281+ mp_always_lazy_eval_action->setCheckable (true );
282+ mp_always_lazy_eval_action->setChecked (m_lazy_evaluation > 0 );
283+ connect (mp_always_lazy_eval_action, SIGNAL (triggered ()), this , SLOT (lazy_eval_mode_slot ()));
284+
285+ mp_never_lazy_eval_action = new QAction (lazy_eval_menu);
286+ lazy_eval_menu->addAction (mp_never_lazy_eval_action);
287+ mp_never_lazy_eval_action->setText (tr (" Never" ));
288+ mp_never_lazy_eval_action->setCheckable (true );
289+ mp_never_lazy_eval_action->setChecked (m_lazy_evaluation == 0 );
290+ connect (mp_never_lazy_eval_action, SIGNAL (triggered ()), this , SLOT (lazy_eval_mode_slot ()));
255291}
256292
257293bool
258294PCellParametersPage::lazy_evaluation ()
259295{
260- return mp_pcell_decl.get () && mp_pcell_decl->wants_lazy_evaluation ();
296+ if (m_lazy_evaluation < 0 ) {
297+ return mp_pcell_decl.get () && mp_pcell_decl->wants_lazy_evaluation ();
298+ } else {
299+ return m_lazy_evaluation > 0 ;
300+ }
301+ }
302+
303+ void
304+ PCellParametersPage::lazy_eval_mode_slot ()
305+ {
306+ if (sender () == mp_always_lazy_eval_action) {
307+ lazy_eval_mode (1 );
308+ } else if (sender () == mp_never_lazy_eval_action) {
309+ lazy_eval_mode (0 );
310+ } else if (sender () == mp_auto_lazy_eval_action) {
311+ lazy_eval_mode (-1 );
312+ }
313+ }
314+
315+ void
316+ PCellParametersPage::lazy_eval_mode (int mode)
317+ {
318+ if (mode == m_lazy_evaluation) {
319+ return ;
320+ }
321+
322+ mp_never_lazy_eval_action->setChecked (mode == 0 );
323+ mp_always_lazy_eval_action->setChecked (mode > 0 );
324+ mp_auto_lazy_eval_action->setChecked (mode < 0 );
325+
326+ m_lazy_evaluation = mode;
327+
328+ if (mp_dispatcher) {
329+ mp_dispatcher->config_set (cfg_edit_pcell_lazy_eval_mode, m_lazy_evaluation);
330+ }
331+
332+ setup (mp_view, m_cv_index, mp_pcell_decl.get (), get_parameters ());
261333}
262334
263335void
@@ -268,7 +340,7 @@ PCellParametersPage::show_parameter_names (bool f)
268340 }
269341
270342 m_show_parameter_names = f;
271- mp_show_parameter_names_cb ->setChecked (f);
343+ mp_show_parameter_names_action ->setChecked (f);
272344
273345 if (mp_dispatcher) {
274346 mp_dispatcher->config_set (cfg_edit_pcell_show_parameter_names, m_show_parameter_names);
0 commit comments