mirror of https://github.com/KLayout/klayout.git
Layer toolbox is a view component now - that means it changes with the view.
This commit is contained in:
parent
81eab3f1db
commit
a9ef337c3b
|
|
@ -23,12 +23,13 @@
|
|||
#include "layControlWidgetStack.h"
|
||||
|
||||
#include <QLabel>
|
||||
#include <QEvent>
|
||||
|
||||
namespace lay
|
||||
{
|
||||
|
||||
ControlWidgetStack::ControlWidgetStack(QWidget *parent, const char *name)
|
||||
: QFrame (parent), mp_current_widget (0)
|
||||
ControlWidgetStack::ControlWidgetStack(QWidget *parent, const char *name, bool size_follows_content)
|
||||
: QFrame (parent), mp_current_widget (0), m_size_follows_content (size_follows_content)
|
||||
{
|
||||
setObjectName (QString::fromUtf8 (name));
|
||||
|
||||
|
|
@ -66,10 +67,35 @@ void ControlWidgetStack::add_widget(QWidget *w)
|
|||
setMinimumWidth (mw);
|
||||
resize (minimumWidth (), height ());
|
||||
}
|
||||
|
||||
if (m_size_follows_content) {
|
||||
updateGeometry ();
|
||||
}
|
||||
}
|
||||
|
||||
bool ControlWidgetStack::event(QEvent *e)
|
||||
{
|
||||
if (e->type () == QEvent::LayoutRequest) {
|
||||
if (m_size_follows_content) {
|
||||
int h = sizeHint ().height ();
|
||||
setMinimumHeight (h);
|
||||
setMaximumHeight (h);
|
||||
updateGeometry ();
|
||||
}
|
||||
}
|
||||
return QWidget::event (e);
|
||||
}
|
||||
|
||||
QSize ControlWidgetStack::sizeHint() const
|
||||
{
|
||||
if (m_size_follows_content) {
|
||||
for (size_t i = 0; i < m_widgets.size (); ++i) {
|
||||
if (m_widgets [i] && m_widgets [i]->isVisible ()) {
|
||||
return m_widgets [i]->sizeHint ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int w = 0;
|
||||
for (size_t i = 0; i < m_widgets.size (); ++i) {
|
||||
w = std::max (m_widgets [i]->sizeHint ().width (), w);
|
||||
|
|
@ -88,6 +114,10 @@ void ControlWidgetStack::remove_widget(size_t index)
|
|||
if (m_widgets.size () == 0) {
|
||||
mp_bglabel->show ();
|
||||
}
|
||||
|
||||
if (m_size_follows_content) {
|
||||
updateGeometry ();
|
||||
}
|
||||
}
|
||||
|
||||
void ControlWidgetStack::raise_widget(size_t index)
|
||||
|
|
@ -111,6 +141,10 @@ void ControlWidgetStack::raise_widget(size_t index)
|
|||
} else {
|
||||
mp_bglabel->hide ();
|
||||
}
|
||||
|
||||
if (m_size_follows_content) {
|
||||
updateGeometry ();
|
||||
}
|
||||
}
|
||||
|
||||
QWidget *ControlWidgetStack::widget(size_t index)
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class ControlWidgetStack
|
|||
: public QFrame
|
||||
{
|
||||
public:
|
||||
ControlWidgetStack (QWidget *parent = 0, const char *name = 0);
|
||||
ControlWidgetStack (QWidget *parent = 0, const char *name = 0, bool size_follows_content = false);
|
||||
|
||||
void focusInEvent (QFocusEvent *);
|
||||
|
||||
|
|
@ -67,9 +67,12 @@ protected:
|
|||
|
||||
void resize_children ();
|
||||
|
||||
bool event (QEvent *e);
|
||||
|
||||
std::vector <QWidget *> m_widgets;
|
||||
QWidget *mp_current_widget;
|
||||
QLabel *mp_bglabel;
|
||||
bool m_size_follows_content;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -274,9 +274,9 @@ MainWindow::MainWindow (QApplication *app, const char *name, bool undo_enabled)
|
|||
|
||||
mp_layer_toolbox_dock_widget = new QDockWidget (QObject::tr ("Layer Toolbox"), this);
|
||||
mp_layer_toolbox_dock_widget->setObjectName (QString::fromUtf8 ("lt_dock_widget"));
|
||||
mp_layer_toolbox = new LayerToolbox (mp_layer_toolbox_dock_widget, "layer_toolbox");
|
||||
mp_layer_toolbox_dock_widget->setWidget (mp_layer_toolbox);
|
||||
mp_layer_toolbox_dock_widget->setFocusProxy (mp_layer_toolbox);
|
||||
mp_layer_toolbox_stack = new ControlWidgetStack (mp_layer_toolbox_dock_widget, "layer_toolbox_stack", true);
|
||||
mp_layer_toolbox_dock_widget->setWidget (mp_layer_toolbox_stack);
|
||||
mp_layer_toolbox_dock_widget->setFocusProxy (mp_layer_toolbox_stack);
|
||||
connect (mp_layer_toolbox_dock_widget, SIGNAL (visibilityChanged (bool)), this, SLOT (dock_widget_visibility_changed (bool)));
|
||||
m_layer_toolbox_visible = true;
|
||||
|
||||
|
|
@ -667,7 +667,6 @@ void
|
|||
MainWindow::close_all ()
|
||||
{
|
||||
cancel ();
|
||||
mp_layer_toolbox->set_view (0);
|
||||
|
||||
// try a smooth shutdown of the current view
|
||||
lay::LayoutView::set_current (0);
|
||||
|
|
@ -697,6 +696,7 @@ MainWindow::close_all ()
|
|||
|
||||
lay::LayoutViewWidget *view = mp_views.back ();
|
||||
mp_views.pop_back ();
|
||||
mp_layer_toolbox_stack->remove_widget (mp_views.size ());
|
||||
mp_lp_stack->remove_widget (mp_views.size ());
|
||||
mp_hp_stack->remove_widget (mp_views.size ());
|
||||
mp_libs_stack->remove_widget (mp_views.size ());
|
||||
|
|
@ -980,63 +980,6 @@ MainWindow::configure (const std::string &name, const std::string &value)
|
|||
|
||||
return true;
|
||||
|
||||
} else if (name == cfg_stipple_palette) {
|
||||
|
||||
lay::StipplePalette palette = lay::StipplePalette::default_palette ();
|
||||
|
||||
try {
|
||||
// empty string means: default palette
|
||||
if (! value.empty ()) {
|
||||
palette.from_string (value);
|
||||
}
|
||||
} catch (...) {
|
||||
// ignore errors: just reset the palette
|
||||
palette = lay::StipplePalette::default_palette ();
|
||||
}
|
||||
|
||||
mp_layer_toolbox->set_palette (palette);
|
||||
|
||||
// others need this property too ..
|
||||
return false;
|
||||
|
||||
} else if (name == cfg_line_style_palette) {
|
||||
|
||||
lay::LineStylePalette palette = lay::LineStylePalette::default_palette ();
|
||||
|
||||
try {
|
||||
// empty string means: default palette
|
||||
if (! value.empty ()) {
|
||||
palette.from_string (value);
|
||||
}
|
||||
} catch (...) {
|
||||
// ignore errors: just reset the palette
|
||||
palette = lay::LineStylePalette::default_palette ();
|
||||
}
|
||||
|
||||
mp_layer_toolbox->set_palette (palette);
|
||||
|
||||
// others need this property too ..
|
||||
return false;
|
||||
|
||||
} else if (name == cfg_color_palette) {
|
||||
|
||||
lay::ColorPalette palette = lay::ColorPalette::default_palette ();
|
||||
|
||||
try {
|
||||
// empty string means: default palette
|
||||
if (! value.empty ()) {
|
||||
palette.from_string (value);
|
||||
}
|
||||
} catch (...) {
|
||||
// ignore errors: just reset the palette
|
||||
palette = lay::ColorPalette::default_palette ();
|
||||
}
|
||||
|
||||
mp_layer_toolbox->set_palette (palette);
|
||||
|
||||
// others need this property too ..
|
||||
return false;
|
||||
|
||||
} else if (name == cfg_mru) {
|
||||
|
||||
tl::Extractor ex (value.c_str ());
|
||||
|
|
@ -2391,8 +2334,6 @@ MainWindow::select_view (int index)
|
|||
|
||||
view (index)->set_current ();
|
||||
|
||||
mp_layer_toolbox->set_view (current_view ());
|
||||
|
||||
if (current_view ()) {
|
||||
|
||||
if (box_set) {
|
||||
|
|
@ -2401,6 +2342,7 @@ MainWindow::select_view (int index)
|
|||
|
||||
mp_view_stack->raise_widget (index);
|
||||
mp_hp_stack->raise_widget (index);
|
||||
mp_layer_toolbox_stack->raise_widget (index);
|
||||
mp_lp_stack->raise_widget (index);
|
||||
mp_libs_stack->raise_widget (index);
|
||||
mp_eo_stack->raise_widget (index);
|
||||
|
|
@ -2601,10 +2543,9 @@ MainWindow::clone_current_view ()
|
|||
|
||||
mp_views.back ()->view ()->set_current ();
|
||||
|
||||
mp_layer_toolbox->set_view (current_view ());
|
||||
|
||||
mp_view_stack->add_widget (view_widget);
|
||||
mp_lp_stack->add_widget (view_widget->layer_control_frame ());
|
||||
mp_layer_toolbox_stack->add_widget (view_widget->layer_toolbox_frame ());
|
||||
mp_hp_stack->add_widget (view_widget->hierarchy_control_frame ());
|
||||
mp_libs_stack->add_widget (view_widget->libraries_frame ());
|
||||
mp_eo_stack->add_widget (view_widget->editor_options_frame ());
|
||||
|
|
@ -2856,6 +2797,7 @@ MainWindow::close_view (int index)
|
|||
mp_tab_bar->removeTab (index);
|
||||
mp_view_stack->remove_widget (index);
|
||||
mp_lp_stack->remove_widget (index);
|
||||
mp_layer_toolbox_stack->remove_widget (index);
|
||||
mp_hp_stack->remove_widget (index);
|
||||
mp_libs_stack->remove_widget (index);
|
||||
mp_eo_stack->remove_widget (index);
|
||||
|
|
@ -2880,7 +2822,6 @@ MainWindow::close_view (int index)
|
|||
|
||||
// last view closed
|
||||
|
||||
mp_layer_toolbox->set_view (0);
|
||||
current_view_changed ();
|
||||
|
||||
clear_current_pos ();
|
||||
|
|
@ -3419,10 +3360,9 @@ MainWindow::create_view ()
|
|||
// add a new tab and make the new view the current one
|
||||
mp_views.back ()->view ()->set_current ();
|
||||
|
||||
mp_layer_toolbox->set_view (current_view ());
|
||||
|
||||
mp_view_stack->add_widget (mp_views.back ());
|
||||
mp_lp_stack->add_widget (mp_views.back ()->layer_control_frame ());
|
||||
mp_layer_toolbox_stack->add_widget (mp_views.back ()->layer_toolbox_frame ());
|
||||
mp_hp_stack->add_widget (mp_views.back ()->hierarchy_control_frame ());
|
||||
mp_libs_stack->add_widget (mp_views.back ()->libraries_frame ());
|
||||
mp_eo_stack->add_widget (mp_views.back ()->editor_options_frame ());
|
||||
|
|
@ -3483,10 +3423,9 @@ MainWindow::create_or_load_layout (const std::string *filename, const db::LoadLa
|
|||
|
||||
mp_views.back ()->view ()->set_current ();
|
||||
|
||||
mp_layer_toolbox->set_view (current_view ());
|
||||
|
||||
mp_view_stack->add_widget (mp_views.back ());
|
||||
mp_lp_stack->add_widget (mp_views.back ()->layer_control_frame ());
|
||||
mp_layer_toolbox_stack->add_widget (mp_views.back ()->layer_toolbox_frame ());
|
||||
mp_hp_stack->add_widget (mp_views.back ()->hierarchy_control_frame ());
|
||||
mp_libs_stack->add_widget (mp_views.back ()->libraries_frame ());
|
||||
mp_eo_stack->add_widget (mp_views.back ()->editor_options_frame ());
|
||||
|
|
|
|||
|
|
@ -687,10 +687,9 @@ private:
|
|||
QDockWidget *mp_navigator_dock_widget;
|
||||
lay::Navigator *mp_navigator;
|
||||
QDockWidget *mp_hp_dock_widget, *mp_lp_dock_widget, *mp_libs_dock_widget, *mp_eo_dock_widget, *mp_bm_dock_widget;
|
||||
ControlWidgetStack *mp_hp_stack, *mp_lp_stack, *mp_libs_stack, *mp_eo_stack, *mp_bm_stack;
|
||||
ControlWidgetStack *mp_hp_stack, *mp_lp_stack, *mp_layer_toolbox_stack, *mp_libs_stack, *mp_eo_stack, *mp_bm_stack;
|
||||
bool m_hp_visible, m_lp_visible, m_libs_visible, m_eo_visible, m_bm_visible, m_navigator_visible, m_layer_toolbox_visible, m_always_exit_without_saving;
|
||||
QDockWidget *mp_layer_toolbox_dock_widget;
|
||||
lay::LayerToolbox *mp_layer_toolbox;
|
||||
ViewWidgetStack *mp_view_stack;
|
||||
lay::FileDialog *mp_bookmarks_fdia;
|
||||
lay::FileDialog *mp_session_fdia;
|
||||
|
|
|
|||
|
|
@ -1047,6 +1047,8 @@ LayerToolbox::panel_button_clicked (int index)
|
|||
int h = sizeHint ().height ();
|
||||
setMinimumHeight (h);
|
||||
setMaximumHeight (h);
|
||||
|
||||
updateGeometry ();
|
||||
}
|
||||
|
||||
template <class Op>
|
||||
|
|
|
|||
|
|
@ -65,6 +65,11 @@ static QWidget *layer_control_frame (lay::LayoutViewWidget *lv)
|
|||
return lv->layer_control_frame ();
|
||||
}
|
||||
|
||||
static QWidget *layer_toolbox_frame (lay::LayoutViewWidget *lv)
|
||||
{
|
||||
return lv->layer_toolbox_frame ();
|
||||
}
|
||||
|
||||
static QWidget *hierarchy_control_frame (lay::LayoutViewWidget *lv)
|
||||
{
|
||||
return lv->hierarchy_control_frame ();
|
||||
|
|
@ -102,6 +107,16 @@ Class<lay::LayoutViewWidget> decl_LayoutViewWidget (QT_EXTERNAL_BASE (QFrame) "l
|
|||
"\n"
|
||||
"This method has been introduced in version 0.27\n"
|
||||
) +
|
||||
gsi::method_ext ("layer_toolbox_frame", &layer_toolbox_frame,
|
||||
"@brief Gets the layer toolbox side widget\n"
|
||||
"A 'side widget' is a widget attached to the view. It does not have a parent, so you can "
|
||||
"embed it into a different context. Please note that with embedding through 'setParent' it will be "
|
||||
"destroyed when your parent widget gets destroyed. It will be lost then to the view.\n"
|
||||
"\n"
|
||||
"The side widget can be configured through the views configuration interface.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.28\n"
|
||||
) +
|
||||
gsi::method_ext ("hierarchy_control_frame", &hierarchy_control_frame,
|
||||
"@brief Gets the cell view (hierarchy view) side widget\n"
|
||||
"For details about side widgets see \\layer_control_frame.\n"
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@
|
|||
#include "laySelector.h"
|
||||
#include "layLayoutCanvas.h"
|
||||
#include "layLayerControlPanel.h"
|
||||
#include "layLayerToolbox.h"
|
||||
#include "layHierarchyControlPanel.h"
|
||||
#include "layLibrariesView.h"
|
||||
#include "layBrowser.h"
|
||||
|
|
@ -166,6 +167,11 @@ QWidget *LayoutViewWidget::layer_control_frame ()
|
|||
return !mp_view ? 0 : mp_view->layer_control_frame ();
|
||||
}
|
||||
|
||||
QWidget *LayoutViewWidget::layer_toolbox_frame ()
|
||||
{
|
||||
return !mp_view ? 0 : mp_view->layer_toolbox_frame ();
|
||||
}
|
||||
|
||||
QWidget *LayoutViewWidget::hierarchy_control_frame ()
|
||||
{
|
||||
return !mp_view ? 0 : mp_view->hierarchy_control_frame ();
|
||||
|
|
@ -345,6 +351,8 @@ LayoutView::init_ui ()
|
|||
mp_libraries_view = 0;
|
||||
mp_bookmarks_view = 0;
|
||||
mp_control_frame = 0;
|
||||
mp_toolbox = 0;
|
||||
mp_toolbox_frame = 0;
|
||||
mp_hierarchy_frame = 0;
|
||||
mp_libraries_frame = 0;
|
||||
mp_bookmarks_frame = 0;
|
||||
|
|
@ -463,6 +471,18 @@ LayoutView::init_ui ()
|
|||
QObject::connect (mp_control_panel, SIGNAL (order_changed ()), mp_connector, SLOT (layer_order_changed ()));
|
||||
QObject::connect (mp_control_panel, SIGNAL (current_layer_changed (const lay::LayerPropertiesConstIterator &)), mp_connector, SLOT (current_layer_changed_slot (const lay::LayerPropertiesConstIterator &)));
|
||||
|
||||
mp_toolbox_frame = new QFrame (0);
|
||||
mp_toolbox_frame->setObjectName (QString::fromUtf8 ("lt_frame"));
|
||||
QVBoxLayout *lt_frame_ly = new QVBoxLayout (mp_toolbox_frame);
|
||||
lt_frame_ly->setContentsMargins (0, 0, 0, 0);
|
||||
lt_frame_ly->setSpacing (0);
|
||||
|
||||
mp_toolbox = new lay::LayerToolbox (mp_toolbox_frame, "lt");
|
||||
mp_toolbox->set_view (this);
|
||||
lt_frame_ly->addWidget (mp_toolbox, 0 /*stretch*/);
|
||||
|
||||
QObject::connect (mp_toolbox_frame, SIGNAL (destroyed ()), mp_connector, SLOT (side_panel_destroyed ()));
|
||||
|
||||
}
|
||||
|
||||
mp_timer = new QTimer (mp_widget);
|
||||
|
|
@ -506,6 +526,12 @@ void LayoutView::close()
|
|||
mp_control_panel = 0;
|
||||
mp_control_frame = 0;
|
||||
|
||||
if (mp_toolbox_frame) {
|
||||
delete mp_toolbox_frame;
|
||||
}
|
||||
mp_toolbox = 0;
|
||||
mp_toolbox_frame = 0;
|
||||
|
||||
if (mp_hierarchy_frame) {
|
||||
delete mp_hierarchy_frame;
|
||||
}
|
||||
|
|
@ -584,6 +610,9 @@ void LayoutView::side_panel_destroyed (QObject *sender)
|
|||
} else if (sender == mp_bookmarks_frame) {
|
||||
mp_bookmarks_frame = 0;
|
||||
mp_bookmarks_view = 0;
|
||||
} else if (sender == mp_toolbox_frame) {
|
||||
mp_toolbox_frame = 0;
|
||||
mp_toolbox = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -797,6 +826,69 @@ LayoutView::configure (const std::string &name, const std::string &value)
|
|||
|
||||
return true;
|
||||
|
||||
} else if (name == cfg_stipple_palette) {
|
||||
|
||||
lay::StipplePalette palette = lay::StipplePalette::default_palette ();
|
||||
|
||||
try {
|
||||
// empty string means: default palette
|
||||
if (! value.empty ()) {
|
||||
palette.from_string (value);
|
||||
}
|
||||
} catch (...) {
|
||||
// ignore errors: just reset the palette
|
||||
palette = lay::StipplePalette::default_palette ();
|
||||
}
|
||||
|
||||
if (mp_toolbox) {
|
||||
mp_toolbox->set_palette (palette);
|
||||
}
|
||||
|
||||
// others need this property too ..
|
||||
return false;
|
||||
|
||||
} else if (name == cfg_line_style_palette) {
|
||||
|
||||
lay::LineStylePalette palette = lay::LineStylePalette::default_palette ();
|
||||
|
||||
try {
|
||||
// empty string means: default palette
|
||||
if (! value.empty ()) {
|
||||
palette.from_string (value);
|
||||
}
|
||||
} catch (...) {
|
||||
// ignore errors: just reset the palette
|
||||
palette = lay::LineStylePalette::default_palette ();
|
||||
}
|
||||
|
||||
if (mp_toolbox) {
|
||||
mp_toolbox->set_palette (palette);
|
||||
}
|
||||
|
||||
// others need this property too ..
|
||||
return false;
|
||||
|
||||
} else if (name == cfg_color_palette) {
|
||||
|
||||
lay::ColorPalette palette = lay::ColorPalette::default_palette ();
|
||||
|
||||
try {
|
||||
// empty string means: default palette
|
||||
if (! value.empty ()) {
|
||||
palette.from_string (value);
|
||||
}
|
||||
} catch (...) {
|
||||
// ignore errors: just reset the palette
|
||||
palette = lay::ColorPalette::default_palette ();
|
||||
}
|
||||
|
||||
if (mp_toolbox) {
|
||||
mp_toolbox->set_palette (palette);
|
||||
}
|
||||
|
||||
// others need this property too ..
|
||||
return false;
|
||||
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ namespace lay {
|
|||
class LayoutViewWidget;
|
||||
class AbstractMenu;
|
||||
class LayerControlPanel;
|
||||
class LayerToolbox;
|
||||
class HierarchyControlPanel;
|
||||
class LibrariesView;
|
||||
class BookmarksView;
|
||||
|
|
@ -379,6 +380,14 @@ public:
|
|||
return mp_hierarchy_panel;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the layer toolbox
|
||||
*/
|
||||
virtual lay::LayerToolbox *layer_toolbox ()
|
||||
{
|
||||
return mp_toolbox;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Resizes the view to the given width and height in pixels
|
||||
*/
|
||||
|
|
@ -597,7 +606,8 @@ private:
|
|||
lay::HierarchyControlPanel *mp_hierarchy_panel;
|
||||
lay::LibrariesView *mp_libraries_view;
|
||||
lay::BookmarksView *mp_bookmarks_view;
|
||||
QWidget *mp_control_frame, *mp_hierarchy_frame, *mp_libraries_frame, *mp_bookmarks_frame;
|
||||
lay::LayerToolbox *mp_toolbox;
|
||||
QWidget *mp_control_frame, *mp_toolbox_frame, *mp_hierarchy_frame, *mp_libraries_frame, *mp_bookmarks_frame;
|
||||
lay::EditorOptionsFrame *mp_editor_options_frame;
|
||||
QSpinBox *mp_min_hier_spbx;
|
||||
QSpinBox *mp_max_hier_spbx;
|
||||
|
|
@ -623,6 +633,7 @@ private:
|
|||
void do_setup_editor_options_pages ();
|
||||
|
||||
QWidget *layer_control_frame () { return mp_control_frame; }
|
||||
QWidget *layer_toolbox_frame () { return mp_toolbox_frame; }
|
||||
QWidget *hierarchy_control_frame () { return mp_hierarchy_frame; }
|
||||
QWidget *libraries_frame () { return mp_libraries_frame; }
|
||||
QWidget *bookmarks_frame () { return mp_bookmarks_frame; }
|
||||
|
|
@ -727,6 +738,11 @@ public:
|
|||
*/
|
||||
QWidget *layer_control_frame ();
|
||||
|
||||
/**
|
||||
* @brief Gets the container with the layer toolbox
|
||||
*/
|
||||
QWidget *layer_toolbox_frame ();
|
||||
|
||||
/**
|
||||
* @brief Gets the container with the hierarchy control panel
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue