mirror of https://github.com/KLayout/klayout.git
Enabled edt, ant and img for Qt-less builds, added missing files
This commit is contained in:
parent
37a42b70db
commit
f65c3d5fd7
|
|
@ -6,16 +6,7 @@ include($$PWD/../../lib.pri)
|
|||
|
||||
DEFINES += MAKE_ANT_LIBRARY
|
||||
|
||||
HEADERS = \
|
||||
antConfig.h \
|
||||
antConfigPage.h \
|
||||
antObject.h \
|
||||
antPlugin.h \
|
||||
antPropertiesPage.h \
|
||||
antService.h \
|
||||
antTemplate.h \
|
||||
antForceLink.h \
|
||||
antCommon.h
|
||||
!equals(HAVE_QT, "0") {
|
||||
|
||||
FORMS = \
|
||||
RulerConfigPage.ui \
|
||||
|
|
@ -24,16 +15,33 @@ FORMS = \
|
|||
RulerConfigPage4.ui \
|
||||
RulerPropertiesPage.ui \
|
||||
|
||||
HEADERS = \
|
||||
antConfigPage.h \
|
||||
antPropertiesPage.h \
|
||||
|
||||
SOURCES = \
|
||||
antConfig.cc \
|
||||
antConfigPage.cc \
|
||||
antPropertiesPage.cc \
|
||||
|
||||
}
|
||||
|
||||
HEADERS += \
|
||||
antConfig.h \
|
||||
antObject.h \
|
||||
antPlugin.h \
|
||||
antService.h \
|
||||
antTemplate.h \
|
||||
antForceLink.h \
|
||||
antCommon.h
|
||||
|
||||
SOURCES += \
|
||||
antConfig.cc \
|
||||
antObject.cc \
|
||||
antPlugin.cc \
|
||||
antPropertiesPage.cc \
|
||||
antService.cc \
|
||||
antTemplate.cc \
|
||||
gsiDeclAnt.cc \
|
||||
antForceLink.cc
|
||||
antForceLink.cc
|
||||
|
||||
INCLUDEPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
||||
DEPENDPATH += $$TL_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ public:
|
|||
void execute (const tl::ExpressionParserContext &context, tl::Variant &out, const std::vector <tl::Variant> &vv) const
|
||||
{
|
||||
if (vv.size () != 0) {
|
||||
throw tl::EvalError (tl::to_string (QObject::tr ("Annotation function must not have arguments")), context);
|
||||
throw tl::EvalError (tl::to_string (tr ("Annotation function must not have arguments")), context);
|
||||
}
|
||||
|
||||
const Object &obj = mp_eval->obj ();
|
||||
|
|
|
|||
|
|
@ -22,15 +22,22 @@
|
|||
|
||||
|
||||
#include "layPlugin.h"
|
||||
#include "layAbstractMenu.h"
|
||||
#include "layConverters.h"
|
||||
#include "layConfigurationDialog.h"
|
||||
#include "layDispatcher.h"
|
||||
#include "antConfigPage.h"
|
||||
#include "layColor.h"
|
||||
#if defined(HAVE_QT)
|
||||
# include "layConfigurationDialog.h"
|
||||
# include "layAbstractMenu.h"
|
||||
#endif
|
||||
#include "antConfig.h"
|
||||
#if defined(HAVE_QT)
|
||||
# include "antConfigPage.h"
|
||||
#endif
|
||||
#include "antPlugin.h"
|
||||
|
||||
#include <QApplication>
|
||||
#if defined(HAVE_QT)
|
||||
# include <QApplication>
|
||||
#endif
|
||||
|
||||
namespace ant
|
||||
{
|
||||
|
|
@ -60,7 +67,7 @@ PluginDeclaration::get_options (std::vector < std::pair<std::string, std::string
|
|||
{
|
||||
options.push_back (std::pair<std::string, std::string> (cfg_max_number_of_rulers, "-1"));
|
||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_snap_range, "8"));
|
||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_color, lay::ColorConverter ().to_string (QColor ())));
|
||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_color, lay::ColorConverter ().to_string (lay::Color ())));
|
||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_halo, "true"));
|
||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_snap_mode, ACConverter ().to_string (lay::AC_Any)));
|
||||
options.push_back (std::pair<std::string, std::string> (cfg_ruler_obj_snap, tl::to_string (true)));
|
||||
|
|
@ -70,24 +77,26 @@ PluginDeclaration::get_options (std::vector < std::pair<std::string, std::string
|
|||
// grid-micron is not configured here since some other entity is supposed to do this.
|
||||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
std::vector<std::pair <std::string, lay::ConfigPage *> >
|
||||
PluginDeclaration::config_pages (QWidget *parent) const
|
||||
{
|
||||
std::vector<std::pair <std::string, lay::ConfigPage *> > pages;
|
||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Snapping")), new ant::ConfigPage (parent)));
|
||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Appearance")), new ant::ConfigPage2 (parent)));
|
||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Angle")), new ant::ConfigPage3 (parent)));
|
||||
pages.push_back (std::make_pair (tl::to_string (QObject::tr ("Rulers And Annotations|Templates")), new ant::ConfigPage4 (parent)));
|
||||
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Snapping")), new ant::ConfigPage (parent)));
|
||||
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Appearance")), new ant::ConfigPage2 (parent)));
|
||||
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Angle")), new ant::ConfigPage3 (parent)));
|
||||
pages.push_back (std::make_pair (tl::to_string (tr ("Rulers And Annotations|Templates")), new ant::ConfigPage4 (parent)));
|
||||
return pages;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
PluginDeclaration::get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const
|
||||
{
|
||||
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
||||
menu_entries.push_back (lay::separator ("rulers_group", "edit_menu.end"));
|
||||
menu_entries.push_back (lay::menu_item ("ant::clear_all_rulers", "clear_all_rulers:edit", "edit_menu.end", tl::to_string (QObject::tr ("Clear All Rulers And Annotations(Ctrl+K)"))));
|
||||
menu_entries.push_back (lay::menu_item ("ant::configure", "configure_rulers", "edit_menu.end", tl::to_string (QObject::tr ("Ruler And Annotation Setup"))));
|
||||
menu_entries.push_back (lay::menu_item ("ant::clear_all_rulers", "clear_all_rulers:edit", "edit_menu.end", tl::to_string (tr ("Clear All Rulers And Annotations(Ctrl+K)"))));
|
||||
menu_entries.push_back (lay::menu_item ("ant::configure", "configure_rulers", "edit_menu.end", tl::to_string (tr ("Ruler And Annotation Setup"))));
|
||||
}
|
||||
|
||||
lay::Plugin *
|
||||
|
|
@ -101,9 +110,11 @@ PluginDeclaration::menu_activated (const std::string &symbol) const
|
|||
{
|
||||
if (symbol == "ant::configure") {
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
lay::ConfigurationDialog config_dialog (QApplication::activeWindow (), lay::Dispatcher::instance (), "ant::Plugin");
|
||||
config_dialog.exec ();
|
||||
|
||||
#endif
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
|
@ -114,14 +125,14 @@ PluginDeclaration::menu_activated (const std::string &symbol) const
|
|||
bool
|
||||
PluginDeclaration::implements_editable (std::string &title) const
|
||||
{
|
||||
title = tl::to_string (QObject::tr ("Rulers And Annotations"));
|
||||
title = tl::to_string (tr ("Rulers And Annotations"));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
PluginDeclaration::implements_mouse_mode (std::string &title) const
|
||||
{
|
||||
title = "ruler:ruler_mode_group:ruler_templates_group\t" + tl::to_string (QObject::tr ("Ruler{Add rulers and annotations}")) + "<:ruler.png>";
|
||||
title = "ruler:ruler_mode_group:ruler_templates_group\t" + tl::to_string (tr ("Ruler{Add rulers and annotations}")) + "<:ruler.png>";
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -182,17 +193,17 @@ PluginDeclaration::initialized (lay::Dispatcher *root)
|
|||
|
||||
// Set up the templates we want to see (plus some non-categorized templates)
|
||||
|
||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Ruler")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_ruler"));
|
||||
m_templates.push_back (ant::Template (tl::to_string (tr ("Ruler")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_ruler"));
|
||||
|
||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Cross")), "", "", "$U,$V", ant::Object::STY_cross_both, ant::Object::OL_diag, true, lay::AC_Global, "_cross"));
|
||||
m_templates.push_back (ant::Template (tl::to_string (tr ("Cross")), "", "", "$U,$V", ant::Object::STY_cross_both, ant::Object::OL_diag, true, lay::AC_Global, "_cross"));
|
||||
m_templates.back ().set_mode (ant::Template::RulerSingleClick);
|
||||
|
||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Measure")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_measure"));
|
||||
m_templates.push_back (ant::Template (tl::to_string (tr ("Measure")), "$X", "$Y", "$D", ant::Object::STY_ruler, ant::Object::OL_diag, true, lay::AC_Global, "_measure"));
|
||||
m_templates.back ().set_mode (ant::Template::RulerAutoMetric);
|
||||
|
||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Ellipse")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_ellipse, true, lay::AC_Global, std::string ()));
|
||||
m_templates.push_back (ant::Template (tl::to_string (tr ("Ellipse")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_ellipse, true, lay::AC_Global, std::string ()));
|
||||
|
||||
m_templates.push_back (ant::Template (tl::to_string (QObject::tr ("Box")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_box, true, lay::AC_Global, std::string ()));
|
||||
m_templates.push_back (ant::Template (tl::to_string (tr ("Box")), "W=$(abs(X))", "H=$(abs(Y))", "", ant::Object::STY_line, ant::Object::OL_box, true, lay::AC_Global, std::string ()));
|
||||
|
||||
root->config_set (cfg_ruler_templates, ant::TemplatesConverter ().to_string (m_templates));
|
||||
root->config_end ();
|
||||
|
|
@ -203,12 +214,15 @@ PluginDeclaration::initialized (lay::Dispatcher *root)
|
|||
void
|
||||
PluginDeclaration::uninitialize (lay::Dispatcher *)
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
m_actions.clear ();
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
PluginDeclaration::update_current_template ()
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
||||
if (! mp || ! mp->has_ui ()) {
|
||||
return;
|
||||
|
|
@ -234,11 +248,13 @@ PluginDeclaration::update_current_template ()
|
|||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
PluginDeclaration::update_menu ()
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
lay::Dispatcher *mp = lay::Dispatcher::instance ();
|
||||
if (! mp || ! mp->has_ui ()) {
|
||||
return;
|
||||
|
|
@ -278,7 +294,7 @@ PluginDeclaration::update_menu ()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@
|
|||
namespace ant
|
||||
{
|
||||
|
||||
class Template;
|
||||
|
||||
class PluginDeclaration
|
||||
: public lay::PluginDeclaration
|
||||
{
|
||||
|
|
@ -44,7 +46,9 @@ public:
|
|||
virtual bool implements_editable (std::string &title) const;
|
||||
virtual bool implements_mouse_mode (std::string &title) const;
|
||||
virtual bool configure (const std::string &name, const std::string &value);
|
||||
#if defined(HAVE_QT)
|
||||
virtual std::vector<std::pair <std::string, lay::ConfigPage *> > config_pages (QWidget *parent) const;
|
||||
#endif
|
||||
virtual void config_finalize ();
|
||||
virtual void initialized (lay::Dispatcher *);
|
||||
virtual void uninitialize (lay::Dispatcher *);
|
||||
|
|
@ -60,7 +64,9 @@ private:
|
|||
|
||||
std::vector<ant::Template> m_templates;
|
||||
int m_current_template;
|
||||
#if defined(HAVE_QT)
|
||||
tl::weak_collection<lay::ConfigureAction> m_actions;
|
||||
#endif
|
||||
bool m_current_template_updated;
|
||||
bool m_templates_updated;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -32,9 +32,13 @@
|
|||
#include "laybasicConfig.h"
|
||||
#include "layConverters.h"
|
||||
#include "layLayoutCanvas.h"
|
||||
#include "layProperties.h"
|
||||
#if defined(HAVE_QT)
|
||||
# include "layProperties.h"
|
||||
#endif
|
||||
#include "antService.h"
|
||||
#include "antPropertiesPage.h"
|
||||
#if defined(HAVE_QT)
|
||||
# include "antPropertiesPage.h"
|
||||
#endif
|
||||
#include "antConfig.h"
|
||||
|
||||
namespace ant
|
||||
|
|
@ -1525,7 +1529,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
|||
|
||||
// begin the transaction
|
||||
tl_assert (! manager ()->transacting ());
|
||||
manager ()->transaction (tl::to_string (QObject::tr ("Create ruler")));
|
||||
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||
|
||||
m_current = ant::Object (pt, pt, 0, tpl);
|
||||
show_message ();
|
||||
|
|
@ -1562,7 +1566,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
|||
|
||||
// begin the transaction
|
||||
tl_assert (! manager ()->transacting ());
|
||||
manager ()->transaction (tl::to_string (QObject::tr ("Create ruler")));
|
||||
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||
|
||||
m_current = ant::Object (ee.first, ee.second, 0, tpl);
|
||||
show_message ();
|
||||
|
|
@ -1598,7 +1602,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
|||
|
||||
// begin the transaction
|
||||
tl_assert (! manager ()->transacting ());
|
||||
manager ()->transaction (tl::to_string (QObject::tr ("Create ruler")));
|
||||
manager ()->transaction (tl::to_string (tr ("Create ruler")));
|
||||
|
||||
show_message ();
|
||||
|
||||
|
|
@ -2160,19 +2164,21 @@ Service::display_status (bool transient)
|
|||
|
||||
std::string msg;
|
||||
if (! transient) {
|
||||
msg = tl::to_string (QObject::tr ("selected: "));
|
||||
msg = tl::to_string (tr ("selected: "));
|
||||
}
|
||||
msg += tl::sprintf (tl::to_string (QObject::tr ("annotation(d=%s x=%s y=%s)")), ruler->text (), ruler->text_x (), ruler->text_y ());
|
||||
msg += tl::sprintf (tl::to_string (tr ("annotation(d=%s x=%s y=%s)")), ruler->text (), ruler->text_x (), ruler->text_y ());
|
||||
view ()->message (msg);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
lay::PropertiesPage *
|
||||
Service::properties_page (db::Manager *manager, QWidget *parent)
|
||||
{
|
||||
return new PropertiesPage (this, manager, parent);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
Service::get_selection (std::vector <obj_iterator> &sel) const
|
||||
|
|
@ -2248,7 +2254,7 @@ Service::menu_activated (const std::string &symbol)
|
|||
if (symbol == "ant::clear_all_rulers_internal") {
|
||||
clear_rulers ();
|
||||
} else if (symbol == "ant::clear_all_rulers") {
|
||||
manager ()->transaction (tl::to_string (QObject::tr ("Clear all rulers")));
|
||||
manager ()->transaction (tl::to_string (tr ("Clear all rulers")));
|
||||
clear_rulers ();
|
||||
manager ()->commit ();
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -346,10 +346,12 @@ public:
|
|||
*/
|
||||
virtual void transform (const db::DCplxTrans &trans);
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
/**
|
||||
* @brief Create the properties page
|
||||
*/
|
||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Get the selection for the properties page
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ namespace ant
|
|||
{
|
||||
|
||||
Template::Template ()
|
||||
: m_title (tl::to_string (QObject::tr ("Ruler"))),
|
||||
: m_title (tl::to_string (tr ("Ruler"))),
|
||||
m_fmt_x ("$X"), m_fmt_y ("$Y"), m_fmt ("$D"),
|
||||
m_style (ant::Object::STY_ruler), m_outline (ant::Object::OL_diag),
|
||||
m_snap (true), m_angle_constraint (lay::AC_Global),
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ static void clear_annotations (lay::LayoutView *view)
|
|||
static void insert_annotation (lay::LayoutView *view, AnnotationRef *obj)
|
||||
{
|
||||
if (obj->is_valid ()) {
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
||||
throw tl::Exception (tl::to_string (tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
||||
}
|
||||
|
||||
ant::Service *ant_service = view->get_plugin <ant::Service> ();
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ DEFINES += MAKE_EDT_LIBRARY
|
|||
|
||||
}
|
||||
|
||||
HEADERS = \
|
||||
HEADERS += \
|
||||
edtConfig.h \
|
||||
edtMainService.h \
|
||||
edtPartialService.h \
|
||||
|
|
@ -60,7 +60,7 @@ HEADERS = \
|
|||
edtCommon.h \
|
||||
edtDistribute.h \
|
||||
|
||||
SOURCES = \
|
||||
SOURCES += \
|
||||
edtConfig.cc \
|
||||
edtMainService.cc \
|
||||
edtPartialService.cc \
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@ MainService::cm_flatten_insts ()
|
|||
|
||||
#if defined(HAVE_QT)
|
||||
if (! (flatten_inst_options_dialog ()->exec_dialog (m_flatten_insts_levels, m_flatten_prune) && m_flatten_insts_levels != 0)) {
|
||||
return
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1103,7 +1103,7 @@ static void show_image (lay::LayoutView *view, size_t id, bool visible)
|
|||
|
||||
const img::Object *img = img_service->object_by_id (id);
|
||||
if (img == 0) {
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("The image Id is not valid")));
|
||||
throw tl::Exception (tl::to_string (tr ("The image Id is not valid")));
|
||||
}
|
||||
|
||||
img::Object new_img (*img);
|
||||
|
|
@ -1121,7 +1121,7 @@ void replace_image_base (lay::LayoutView *view, size_t id, ImageRef &new_obj)
|
|||
|
||||
const img::Object *img = img_service->object_by_id (id);
|
||||
if (img == 0) {
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("The image Id is not valid")));
|
||||
throw tl::Exception (tl::to_string (tr ("The image Id is not valid")));
|
||||
}
|
||||
|
||||
img_service->change_image_by_id (id, new_obj);
|
||||
|
|
@ -1141,7 +1141,7 @@ void erase_image_base (lay::LayoutView *view, size_t id)
|
|||
|
||||
const img::Object *img = img_service->object_by_id (id);
|
||||
if (img == 0) {
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("The image Id is not valid")));
|
||||
throw tl::Exception (tl::to_string (tr ("The image Id is not valid")));
|
||||
}
|
||||
|
||||
img_service->erase_image_by_id (id);
|
||||
|
|
@ -1157,7 +1157,7 @@ static void erase_image (lay::LayoutView *view, size_t id)
|
|||
static void insert_image (lay::LayoutView *view, ImageRef &obj)
|
||||
{
|
||||
if (obj.is_valid ()) {
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
||||
throw tl::Exception (tl::to_string (tr ("The object is already inserted into a view - detach the object first or create a different object.")));
|
||||
}
|
||||
|
||||
img::Service *img_service = view->get_plugin <img::Service> ();
|
||||
|
|
|
|||
|
|
@ -6,34 +6,42 @@ include($$PWD/../../lib.pri)
|
|||
|
||||
DEFINES += MAKE_IMG_LIBRARY
|
||||
|
||||
HEADERS = \
|
||||
imgLandmarksDialog.h \
|
||||
imgNavigator.h \
|
||||
imgObject.h \
|
||||
imgPlugin.h \
|
||||
imgPropertiesPage.h \
|
||||
imgService.h \
|
||||
imgWidgets.h \
|
||||
imgForceLink.h \
|
||||
imgCommon.h \
|
||||
imgStream.h
|
||||
!equals(HAVE_QT, "0") {
|
||||
|
||||
FORMS = \
|
||||
AddNewImageDialog.ui \
|
||||
ImageLandmarksDialog.ui \
|
||||
ImagePropertiesPage.ui \
|
||||
|
||||
HEADERS = \
|
||||
imgLandmarksDialog.h \
|
||||
imgNavigator.h \
|
||||
imgPropertiesPage.h \
|
||||
imgWidgets.h \
|
||||
|
||||
SOURCES = \
|
||||
gsiDeclImg.cc \
|
||||
imgLandmarksDialog.cc \
|
||||
imgNavigator.cc \
|
||||
imgPropertiesPage.cc \
|
||||
imgWidgets.cc \
|
||||
|
||||
}
|
||||
|
||||
HEADERS += \
|
||||
imgObject.h \
|
||||
imgPlugin.h \
|
||||
imgService.h \
|
||||
imgForceLink.h \
|
||||
imgCommon.h \
|
||||
imgStream.h
|
||||
|
||||
SOURCES += \
|
||||
gsiDeclImg.cc \
|
||||
imgObject.cc \
|
||||
imgPlugin.cc \
|
||||
imgPropertiesPage.cc \
|
||||
imgService.cc \
|
||||
imgWidgets.cc \
|
||||
imgForceLink.cc \
|
||||
imgStream.cc
|
||||
imgStream.cc
|
||||
|
||||
INCLUDEPATH += $$TL_INC $$DB_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
||||
DEPENDPATH += $$TL_INC $$DB_INC $$GSI_INC $$LAYBASIC_INC $$DB_INC
|
||||
|
|
|
|||
|
|
@ -22,12 +22,12 @@
|
|||
|
||||
|
||||
#include "imgObject.h"
|
||||
#include "imgWidgets.h" // for interpolate_color()
|
||||
#include "imgStream.h"
|
||||
#include "tlLog.h"
|
||||
#include "tlTimer.h"
|
||||
#include "layPlugin.h"
|
||||
#include "layConverters.h"
|
||||
#include "layPixelBuffer.h"
|
||||
#include "dbPolygonTools.h"
|
||||
#include "tlFileUtils.h"
|
||||
#include "tlUri.h"
|
||||
|
|
@ -40,7 +40,9 @@
|
|||
#include <string>
|
||||
#include <memory.h>
|
||||
|
||||
#include <QImage>
|
||||
#if defined(HAVE_QT)
|
||||
# include <QImage>
|
||||
#endif
|
||||
|
||||
namespace img
|
||||
{
|
||||
|
|
@ -1557,6 +1559,8 @@ Object::read_file ()
|
|||
// continue with other formats ...
|
||||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
|
||||
QImage qimage (tl::to_qstring (m_filename));
|
||||
|
||||
if (! qimage.isNull ()) {
|
||||
|
|
@ -1617,6 +1621,85 @@ Object::read_file ()
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
#elif defined(HAVE_PNG)
|
||||
|
||||
lay::PixelBuffer img;
|
||||
|
||||
{
|
||||
tl::InputStream stream (m_filename);
|
||||
img = lay::PixelBuffer::read_png (stream);
|
||||
}
|
||||
|
||||
bool is_color = false;
|
||||
for (unsigned int i = 0; i < img.height () && ! is_color; ++i) {
|
||||
const lay::color_t *d = img.scan_line (i);
|
||||
const lay::color_t *dd = d + img.width ();
|
||||
while (! is_color && d != dd) {
|
||||
lay::color_t c = *d++;
|
||||
is_color = (((c >> 8) ^ c) & 0xffff) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (! m_min_value_set) {
|
||||
m_min_value = 0.0;
|
||||
}
|
||||
|
||||
if (! m_max_value_set) {
|
||||
m_max_value = 255.0;
|
||||
}
|
||||
|
||||
m_min_value_set = true;
|
||||
m_max_value_set = true;
|
||||
|
||||
unsigned int w = img.width (), h = img.height ();
|
||||
|
||||
mp_data = new DataHeader (w, h, is_color, true);
|
||||
mp_data->add_ref ();
|
||||
|
||||
if (is_color) {
|
||||
|
||||
unsigned char *red = mp_data->byte_data (0);
|
||||
unsigned char *green = mp_data->byte_data (1);
|
||||
unsigned char *blue = mp_data->byte_data (2);
|
||||
unsigned char *msk = img.transparent () ? mp_data->set_mask () : 0;
|
||||
|
||||
for (unsigned int y = 0; y < h; ++y) {
|
||||
const lay::color_t *d = img.scan_line (h - y - 1);
|
||||
const lay::color_t *dd = d + img.width ();
|
||||
while (d != dd) {
|
||||
lay::color_t rgb = *d++;
|
||||
*red++ = lay::red (rgb);
|
||||
*green++ = lay::green (rgb);
|
||||
*blue++ = lay::blue (rgb);
|
||||
if (msk) {
|
||||
*msk++ = lay::alpha (rgb) > 128;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
unsigned char *mono = mp_data->byte_data ();
|
||||
unsigned char *msk = img.transparent () ? mp_data->set_mask () : 0;
|
||||
|
||||
for (unsigned int y = 0; y < h; ++y) {
|
||||
const lay::color_t *d = img.scan_line (h - y - 1);
|
||||
const lay::color_t *dd = d + img.width ();
|
||||
while (d != dd) {
|
||||
lay::color_t rgb = *d++;
|
||||
*mono++ = lay::green (rgb);
|
||||
if (msk) {
|
||||
*msk++ = lay::alpha (rgb) > 128;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
throw tl::Exception (tl::to_string ("No PNG support compiled in - cannot load PNG files"));
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@
|
|||
|
||||
|
||||
#include "layPlugin.h"
|
||||
#include "layAbstractMenu.h"
|
||||
#include "imgService.h"
|
||||
#include "imgPlugin.h"
|
||||
|
||||
|
|
@ -36,12 +35,12 @@ PluginDeclaration::get_menu_entries (std::vector<lay::MenuEntry> &menu_entries)
|
|||
{
|
||||
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
||||
menu_entries.push_back (lay::separator ("image_group", "edit_menu.end"));
|
||||
menu_entries.push_back (lay::menu_item ("img::add_image", "add_image:edit", "edit_menu.end", tl::to_string (QObject::tr ("Add Image"))));
|
||||
menu_entries.push_back (lay::submenu ("img::image_menu", "image_menu:edit", "edit_menu.end", tl::to_string (QObject::tr ("Images"))));
|
||||
menu_entries.push_back (lay::menu_item ("img::bring_to_front", "bring_to_front:edit", "edit_menu.image_menu.end", tl::to_string (QObject::tr ("Image Stack: Selected Images to Front"))));
|
||||
menu_entries.push_back (lay::menu_item ("img::bring_to_back", "bring_to_back:edit", "edit_menu.image_menu.end", tl::to_string (QObject::tr ("Image Stack: Selected Images to Back"))));
|
||||
menu_entries.push_back (lay::menu_item ("img::clear_all_images", "clear_all_images:edit", "edit_menu.image_menu.end", tl::to_string (QObject::tr ("Clear All Images"))));
|
||||
menu_entries.push_back (lay::config_menu_item ("show_images", "view_menu.layout_group+", tl::to_string (QObject::tr ("Show Images")), cfg_images_visible, "?"));
|
||||
menu_entries.push_back (lay::menu_item ("img::add_image", "add_image:edit", "edit_menu.end", tl::to_string (tr ("Add Image"))));
|
||||
menu_entries.push_back (lay::submenu ("img::image_menu", "image_menu:edit", "edit_menu.end", tl::to_string (tr ("Images"))));
|
||||
menu_entries.push_back (lay::menu_item ("img::bring_to_front", "bring_to_front:edit", "edit_menu.image_menu.end", tl::to_string (tr ("Image Stack: Selected Images to Front"))));
|
||||
menu_entries.push_back (lay::menu_item ("img::bring_to_back", "bring_to_back:edit", "edit_menu.image_menu.end", tl::to_string (tr ("Image Stack: Selected Images to Back"))));
|
||||
menu_entries.push_back (lay::menu_item ("img::clear_all_images", "clear_all_images:edit", "edit_menu.image_menu.end", tl::to_string (tr ("Clear All Images"))));
|
||||
menu_entries.push_back (lay::config_menu_item ("show_images", "view_menu.layout_group+", tl::to_string (tr ("Show Images")), cfg_images_visible, "?"));
|
||||
}
|
||||
|
||||
lay::Plugin *
|
||||
|
|
@ -53,7 +52,7 @@ PluginDeclaration::create_plugin (db::Manager *manager, lay::Dispatcher *, lay::
|
|||
bool
|
||||
PluginDeclaration::implements_editable (std::string &title) const
|
||||
{
|
||||
title = tl::to_string (QObject::tr ("Images"));
|
||||
title = tl::to_string (tr ("Images"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,22 +32,28 @@
|
|||
#include "laySnap.h"
|
||||
#include "layLayoutView.h"
|
||||
#include "laybasicConfig.h"
|
||||
#include "layLayoutCanvas.h"
|
||||
#include "layProperties.h"
|
||||
#include "layTipDialog.h"
|
||||
#if defined(HAVE_QT)
|
||||
# include "layProperties.h"
|
||||
# include "layTipDialog.h"
|
||||
#endif
|
||||
#include "tlExceptions.h"
|
||||
#include "imgService.h"
|
||||
#include "imgPlugin.h"
|
||||
#include "ui_AddNewImageDialog.h"
|
||||
#if defined(HAVE_QT)
|
||||
# include "ui_AddNewImageDialog.h"
|
||||
#endif
|
||||
|
||||
#include <QApplication>
|
||||
#if defined(HAVE_QT)
|
||||
# include <QApplication>
|
||||
#endif
|
||||
|
||||
namespace img
|
||||
{
|
||||
|
||||
// -------------------------------------------------------------
|
||||
|
||||
class AddNewImageDialog
|
||||
#if defined(HAVE_QT)
|
||||
class AddNewImageDialog
|
||||
: public QDialog,
|
||||
public Ui::AddNewImageDialog
|
||||
{
|
||||
|
|
@ -68,7 +74,7 @@ public:
|
|||
properties_frame->apply ();
|
||||
|
||||
if (mp_image_object->is_empty ()) {
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("No data loaded for that image")));
|
||||
throw tl::Exception (tl::to_string (tr ("No data loaded for that image")));
|
||||
}
|
||||
|
||||
QDialog::accept ();
|
||||
|
|
@ -79,6 +85,7 @@ public:
|
|||
private:
|
||||
img::Object *mp_image_object;
|
||||
};
|
||||
#endif
|
||||
|
||||
// -------------------------------------------------------------
|
||||
|
||||
|
|
@ -1361,19 +1368,21 @@ Service::display_status (bool transient)
|
|||
|
||||
std::string msg;
|
||||
if (! transient) {
|
||||
msg = tl::to_string (QObject::tr ("selected: "));
|
||||
msg = tl::to_string (tr ("selected: "));
|
||||
}
|
||||
msg += tl::sprintf (tl::to_string (QObject::tr ("image(%dx%d)")), image->width (), image->height ());
|
||||
msg += tl::sprintf (tl::to_string (tr ("image(%dx%d)")), image->width (), image->height ());
|
||||
view ()->message (msg);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
lay::PropertiesPage *
|
||||
Service::properties_page (db::Manager *manager, QWidget *parent)
|
||||
{
|
||||
return new img::PropertiesPage (this, manager, parent);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
Service::get_selection (std::vector <obj_iterator> &sel) const
|
||||
|
|
@ -1463,15 +1472,16 @@ Service::menu_activated (const std::string &symbol)
|
|||
{
|
||||
if (symbol == "img::clear_all_images") {
|
||||
|
||||
manager ()->transaction (tl::to_string (QObject::tr ("Clear all images")));
|
||||
manager ()->transaction (tl::to_string (tr ("Clear all images")));
|
||||
clear_images ();
|
||||
manager ()->commit ();
|
||||
|
||||
} else if (symbol == "img::add_image") {
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
if (! images_visible ()) {
|
||||
lay::TipDialog td (QApplication::activeWindow (),
|
||||
tl::to_string (QObject::tr ("Images are not visible. If you add an image you will not see it.\n\n"
|
||||
tl::to_string (tr ("Images are not visible. If you add an image you will not see it.\n\n"
|
||||
"Choose 'View/Show Images' to make images visible.")),
|
||||
"add-image-while-not-visible",
|
||||
lay::TipDialog::okcancel_buttons);
|
||||
|
|
@ -1482,6 +1492,7 @@ Service::menu_activated (const std::string &symbol)
|
|||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
add_image ();
|
||||
|
||||
|
|
@ -1573,6 +1584,7 @@ Service::top_z_position () const
|
|||
void
|
||||
Service::add_image ()
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
img::Object *new_image = new img::Object ();
|
||||
|
||||
AddNewImageDialog dialog (QApplication::activeWindow (), new_image);
|
||||
|
|
@ -1580,7 +1592,7 @@ Service::add_image ()
|
|||
|
||||
clear_selection ();
|
||||
|
||||
manager ()->transaction (tl::to_string (QObject::tr ("Add image")));
|
||||
manager ()->transaction (tl::to_string (tr ("Add image")));
|
||||
new_image->set_z_position (top_z_position ());
|
||||
mp_view->annotation_shapes ().insert (db::DUserObject (new_image));
|
||||
manager ()->commit ();
|
||||
|
|
@ -1588,6 +1600,7 @@ Service::add_image ()
|
|||
} else {
|
||||
delete new_image;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -369,10 +369,12 @@ public:
|
|||
*/
|
||||
virtual void transform (const db::DCplxTrans &trans);
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
/**
|
||||
* @brief Create the properties page
|
||||
*/
|
||||
virtual lay::PropertiesPage *properties_page (db::Manager *manager, QWidget *parent);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Get the selection for the properties page
|
||||
|
|
|
|||
|
|
@ -37,6 +37,14 @@ namespace lay
|
|||
*/
|
||||
typedef uint32_t color_t;
|
||||
|
||||
/**
|
||||
* @brief Gets the color components from a color_t
|
||||
*/
|
||||
inline unsigned int alpha (color_t c) { return (c >> 24) & 0xff; }
|
||||
inline unsigned int red (color_t c) { return (c >> 16) & 0xff; }
|
||||
inline unsigned int green (color_t c) { return (c >> 8) & 0xff; }
|
||||
inline unsigned int blue (color_t c) { return c & 0xff; }
|
||||
|
||||
/**
|
||||
* @brief A wrapper for a color value
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,108 @@
|
|||
|
||||
/*
|
||||
|
||||
KLayout Layout Viewer
|
||||
Copyright (C) 2006-2022 Matthias Koefferlein
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
*/
|
||||
|
||||
#include "layDragDropData.h"
|
||||
|
||||
#include <QDataStream>
|
||||
#include <QIODevice>
|
||||
|
||||
namespace lay
|
||||
{
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Implementation of DragDropDataBase
|
||||
|
||||
const char *drag_drop_mime_type ()
|
||||
{
|
||||
return "application/klayout-ddd";
|
||||
}
|
||||
|
||||
QMimeData *
|
||||
DragDropDataBase::to_mime_data () const
|
||||
{
|
||||
QMimeData *mimeData = new QMimeData();
|
||||
mimeData->setData (QString::fromUtf8 (drag_drop_mime_type ()), serialized ());
|
||||
return mimeData;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Implementation of CellDragDropData
|
||||
|
||||
QByteArray
|
||||
CellDragDropData::serialized () const
|
||||
{
|
||||
QByteArray data;
|
||||
QDataStream stream (&data, QIODevice::WriteOnly);
|
||||
|
||||
stream << QString::fromUtf8 ("CellDragDropData");
|
||||
stream << (quintptr) mp_layout;
|
||||
stream << (quintptr) mp_library;
|
||||
stream << m_cell_index;
|
||||
stream << m_is_pcell;
|
||||
stream << int (m_pcell_params.size ());
|
||||
for (std::vector<tl::Variant>::const_iterator i = m_pcell_params.begin (); i != m_pcell_params.end (); ++i) {
|
||||
stream << tl::to_qstring (i->to_parsable_string ());
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
bool
|
||||
CellDragDropData::deserialize (const QByteArray &ba)
|
||||
{
|
||||
QDataStream stream (const_cast<QByteArray *> (&ba), QIODevice::ReadOnly);
|
||||
|
||||
QString tag;
|
||||
stream >> tag;
|
||||
|
||||
if (tag == QString::fromUtf8 ("CellDragDropData")) {
|
||||
|
||||
quintptr p = 0;
|
||||
stream >> p;
|
||||
mp_layout = reinterpret_cast <const db::Layout *> (p);
|
||||
stream >> p;
|
||||
mp_library = reinterpret_cast <const db::Library *> (p);
|
||||
stream >> m_cell_index;
|
||||
stream >> m_is_pcell;
|
||||
|
||||
m_pcell_params.clear ();
|
||||
int n = 0;
|
||||
stream >> n;
|
||||
while (n-- > 0) {
|
||||
QString s;
|
||||
stream >> s;
|
||||
std::string stl_s = tl::to_string (s);
|
||||
tl::Extractor ex (stl_s.c_str ());
|
||||
m_pcell_params.push_back (tl::Variant ());
|
||||
ex.read (m_pcell_params.back ());
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
/*
|
||||
|
||||
KLayout Layout Viewer
|
||||
Copyright (C) 2006-2022 Matthias Koefferlein
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#ifndef HDR_layDragDropData
|
||||
#define HDR_layDragDropData
|
||||
|
||||
#include "laybasicCommon.h"
|
||||
|
||||
#include "dbLayout.h"
|
||||
#include "dbLibrary.h"
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QMimeData>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace lay
|
||||
{
|
||||
|
||||
LAYBASIC_PUBLIC const char *drag_drop_mime_type ();
|
||||
|
||||
/**
|
||||
* @brief A helper class required to store the drag/drop data
|
||||
*
|
||||
* Drag/drop data is basically a collection of key/value pairs.
|
||||
* A category string is provided to identify the kind of data.
|
||||
*/
|
||||
|
||||
class LAYBASIC_PUBLIC DragDropDataBase
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Default constructor
|
||||
*/
|
||||
DragDropDataBase () { }
|
||||
|
||||
/**
|
||||
* @brief Dtor
|
||||
*/
|
||||
virtual ~DragDropDataBase () { }
|
||||
|
||||
/**
|
||||
* @brief Serializes itself to an QByteArray
|
||||
*/
|
||||
virtual QByteArray serialized () const = 0;
|
||||
|
||||
/**
|
||||
* @brief Try deserialization from an QByteArray
|
||||
*
|
||||
* Returns false, if deserialization failed.
|
||||
*/
|
||||
virtual bool deserialize (const QByteArray &ba) = 0;
|
||||
|
||||
/**
|
||||
* @brief Create a QMimeData object from the object
|
||||
*/
|
||||
QMimeData *to_mime_data () const;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Drag/drop data for a cell
|
||||
*/
|
||||
|
||||
class LAYBASIC_PUBLIC CellDragDropData
|
||||
: public DragDropDataBase
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Default ctor
|
||||
*/
|
||||
CellDragDropData ()
|
||||
: mp_layout (0), mp_library (0), m_cell_index (0), m_is_pcell (false)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Specifies drag & drop of a cell
|
||||
*
|
||||
* @param layout the layout where the cell lives in
|
||||
* @param cell_index The index of the cell
|
||||
*/
|
||||
CellDragDropData (const db::Layout *layout, const db::Library *library, db::cell_index_type cell_or_pcell_index, bool is_pcell, const std::vector<tl::Variant> &pcell_params = std::vector<tl::Variant> ())
|
||||
: mp_layout (layout), mp_library (library), m_cell_index (cell_or_pcell_index), m_is_pcell (is_pcell), m_pcell_params (pcell_params)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the layout object where the cell lives in
|
||||
*/
|
||||
const db::Layout *layout () const
|
||||
{
|
||||
return mp_layout;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the layout object where the cell lives in
|
||||
*/
|
||||
const db::Library *library () const
|
||||
{
|
||||
return mp_library;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PCell parameters
|
||||
*/
|
||||
const std::vector<tl::Variant> &pcell_params () const
|
||||
{
|
||||
return m_pcell_params;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the index of the cell
|
||||
*/
|
||||
db::cell_index_type cell_index () const
|
||||
{
|
||||
return m_cell_index;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets a value indicating whether the cell is a pcell
|
||||
*/
|
||||
bool is_pcell () const
|
||||
{
|
||||
return m_is_pcell;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Serializes itself to an QByteArray
|
||||
*/
|
||||
virtual QByteArray serialized () const;
|
||||
|
||||
/**
|
||||
* @brief Try deserialization from an QByteArray
|
||||
*
|
||||
* Returns false, if deserialization failed.
|
||||
*/
|
||||
bool deserialize (const QByteArray &ba);
|
||||
|
||||
private:
|
||||
const db::Layout *mp_layout;
|
||||
const db::Library *mp_library;
|
||||
db::cell_index_type m_cell_index;
|
||||
bool m_is_pcell;
|
||||
std::vector<tl::Variant> m_pcell_params;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Reference in New Issue