mirror of https://github.com/KLayout/klayout.git
More safety against deleting view in view widget
This commit is contained in:
parent
0bbf4ad81c
commit
81eab3f1db
|
|
@ -2661,6 +2661,14 @@ public:
|
||||||
*/
|
*/
|
||||||
void unregister_plugin (lay::Plugin *pi);
|
void unregister_plugin (lay::Plugin *pi);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the options the view was created with
|
||||||
|
*/
|
||||||
|
unsigned int options () const
|
||||||
|
{
|
||||||
|
return m_options;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// event handlers used to connect to the layout object's events
|
// event handlers used to connect to the layout object's events
|
||||||
void signal_hier_changed ();
|
void signal_hier_changed ();
|
||||||
|
|
@ -2828,11 +2836,6 @@ private:
|
||||||
void merge_dither_pattern (lay::LayerPropertiesList &props);
|
void merge_dither_pattern (lay::LayerPropertiesList &props);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
unsigned int options () const
|
|
||||||
{
|
|
||||||
return m_options;
|
|
||||||
}
|
|
||||||
|
|
||||||
lay::Plugin *active_plugin () const
|
lay::Plugin *active_plugin () const
|
||||||
{
|
{
|
||||||
return mp_active_plugin;
|
return mp_active_plugin;
|
||||||
|
|
|
||||||
|
|
@ -785,6 +785,14 @@ public:
|
||||||
return mp_plugin_declaration;
|
return mp_plugin_declaration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the plugin parent
|
||||||
|
*/
|
||||||
|
Plugin *plugin_parent ()
|
||||||
|
{
|
||||||
|
return mp_parent;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Associate a service with the plugin declaration for that service (setter)
|
* @brief Associate a service with the plugin declaration for that service (setter)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -109,19 +109,35 @@ LayoutViewWidget::LayoutViewWidget (lay::LayoutView *source, db::Manager *mgr, b
|
||||||
|
|
||||||
LayoutViewWidget::~LayoutViewWidget ()
|
LayoutViewWidget::~LayoutViewWidget ()
|
||||||
{
|
{
|
||||||
delete mp_view;
|
lay::LayoutView *view = mp_view;
|
||||||
mp_view = 0;
|
mp_view = 0;
|
||||||
|
delete view;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LayoutViewWidget::view_deleted (lay::LayoutView *view)
|
||||||
|
{
|
||||||
|
if (view != mp_view) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// creates a new view so the view is never invalid
|
||||||
|
mp_view = new LayoutView (view->manager (), view->is_editable (), view->plugin_parent (), this, view->options ());
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize
|
QSize
|
||||||
LayoutViewWidget::sizeHint () const
|
LayoutViewWidget::sizeHint () const
|
||||||
{
|
{
|
||||||
return mp_view->size_hint ();
|
return mp_view ? mp_view->size_hint () : QFrame::sizeHint ();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
LayoutViewWidget::eventFilter(QObject *obj, QEvent *event)
|
LayoutViewWidget::eventFilter(QObject *obj, QEvent *event)
|
||||||
{
|
{
|
||||||
|
if (! mp_view) {
|
||||||
|
return QFrame::eventFilter (obj, event);
|
||||||
|
}
|
||||||
|
|
||||||
bool taken = false;
|
bool taken = false;
|
||||||
bool res = mp_view->event_filter (obj, event, taken);
|
bool res = mp_view->event_filter (obj, event, taken);
|
||||||
if (taken) {
|
if (taken) {
|
||||||
|
|
@ -133,37 +149,41 @@ LayoutViewWidget::eventFilter(QObject *obj, QEvent *event)
|
||||||
|
|
||||||
void LayoutViewWidget::showEvent (QShowEvent *)
|
void LayoutViewWidget::showEvent (QShowEvent *)
|
||||||
{
|
{
|
||||||
mp_view->show_event ();
|
if (mp_view) {
|
||||||
|
mp_view->show_event ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LayoutViewWidget::hideEvent (QHideEvent *)
|
void LayoutViewWidget::hideEvent (QHideEvent *)
|
||||||
{
|
{
|
||||||
mp_view->hide_event ();
|
if (mp_view) {
|
||||||
|
mp_view->hide_event ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *LayoutViewWidget::layer_control_frame ()
|
QWidget *LayoutViewWidget::layer_control_frame ()
|
||||||
{
|
{
|
||||||
return view ()->layer_control_frame ();
|
return !mp_view ? 0 : mp_view->layer_control_frame ();
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *LayoutViewWidget::hierarchy_control_frame ()
|
QWidget *LayoutViewWidget::hierarchy_control_frame ()
|
||||||
{
|
{
|
||||||
return view ()->hierarchy_control_frame ();
|
return !mp_view ? 0 : mp_view->hierarchy_control_frame ();
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *LayoutViewWidget::libraries_frame ()
|
QWidget *LayoutViewWidget::libraries_frame ()
|
||||||
{
|
{
|
||||||
return view ()->libraries_frame ();
|
return !mp_view ? 0 : mp_view->libraries_frame ();
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *LayoutViewWidget::bookmarks_frame ()
|
QWidget *LayoutViewWidget::bookmarks_frame ()
|
||||||
{
|
{
|
||||||
return view ()->bookmarks_frame ();
|
return !mp_view ? 0 : mp_view->bookmarks_frame ();
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *LayoutViewWidget::editor_options_frame ()
|
QWidget *LayoutViewWidget::editor_options_frame ()
|
||||||
{
|
{
|
||||||
return view ()->editor_options_frame ();
|
return !mp_view ? 0 : mp_view->editor_options_frame ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
|
|
@ -458,6 +478,9 @@ LayoutView::init_ui ()
|
||||||
LayoutView::~LayoutView ()
|
LayoutView::~LayoutView ()
|
||||||
{
|
{
|
||||||
close ();
|
close ();
|
||||||
|
if (mp_widget) {
|
||||||
|
mp_widget->view_deleted (this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *LayoutView::widget ()
|
QWidget *LayoutView::widget ()
|
||||||
|
|
|
||||||
|
|
@ -799,6 +799,10 @@ signals:
|
||||||
void layer_order_changed ();
|
void layer_order_changed ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend class LayoutView;
|
||||||
|
|
||||||
|
void view_deleted (lay::LayoutView *view);
|
||||||
|
|
||||||
LayoutView *mp_view;
|
LayoutView *mp_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue