mirror of https://github.com/KLayout/klayout.git
Enabled headless LayoutView. Works.
This commit is contained in:
parent
96f3ce65c1
commit
03761768cf
|
|
@ -205,7 +205,7 @@ PropertiesPage::snap_to_layout_clicked ()
|
|||
|
||||
bool snap_p1 = sender () == p1_to_layout;
|
||||
|
||||
double snap_range = service->widget ()->mouse_event_trans ().inverted ().ctrans (service->snap_range ());
|
||||
double snap_range = service->ui ()->mouse_event_trans ().inverted ().ctrans (service->snap_range ());
|
||||
double max_range = 1000 * snap_range;
|
||||
|
||||
while (snap_range < max_range) {
|
||||
|
|
@ -237,7 +237,7 @@ PropertiesPage::snap_to_layout_clicked ()
|
|||
|
||||
} else {
|
||||
|
||||
double snap_range = service->widget ()->mouse_event_trans ().inverted ().ctrans (service->snap_range ());
|
||||
double snap_range = service->ui ()->mouse_event_trans ().inverted ().ctrans (service->snap_range ());
|
||||
snap_range *= 0.5;
|
||||
|
||||
lay::TwoPointSnapToObjectResult ee = lay::obj_snap2 (service->view (), p1, p2, g, ac, snap_range, snap_range * 1000.0);
|
||||
|
|
|
|||
|
|
@ -727,7 +727,7 @@ is_selected (const ant::Object &ruler, const db::DBox &box, double /*enl*/)
|
|||
// -------------------------------------------------------------
|
||||
|
||||
View::View (ant::Service *rulers, const ant::Object *ruler, bool selected)
|
||||
: lay::ViewObject (rulers->widget ()),
|
||||
: lay::ViewObject (rulers->ui ()),
|
||||
mp_rulers (rulers), m_selected (selected), mp_ruler (ruler)
|
||||
{
|
||||
// .. nothing else ..
|
||||
|
|
@ -828,7 +828,7 @@ Service::configure (const std::string &name, const std::string &value)
|
|||
|
||||
// make the color available for the dynamic view objects too.
|
||||
if (lay::test_and_set (m_color, color)) {
|
||||
widget ()->touch ();
|
||||
ui ()->touch ();
|
||||
}
|
||||
|
||||
} else if (name == cfg_ruler_halo) {
|
||||
|
|
@ -838,7 +838,7 @@ Service::configure (const std::string &name, const std::string &value)
|
|||
|
||||
// make the color available for the dynamic view objects too.
|
||||
if (lay::test_and_set (m_halo, halo)) {
|
||||
widget ()->touch ();
|
||||
ui ()->touch ();
|
||||
}
|
||||
|
||||
} else if (name == cfg_ruler_grid_micron) {
|
||||
|
|
@ -967,20 +967,20 @@ Service::clear_rulers ()
|
|||
double
|
||||
Service::catch_distance ()
|
||||
{
|
||||
return double (view ()->search_range ()) / widget ()->mouse_event_trans ().mag ();
|
||||
return double (view ()->search_range ()) / ui ()->mouse_event_trans ().mag ();
|
||||
}
|
||||
|
||||
double
|
||||
Service::catch_distance_box ()
|
||||
{
|
||||
return double (view ()->search_range_box ()) / widget ()->mouse_event_trans ().mag ();
|
||||
return double (view ()->search_range_box ()) / ui ()->mouse_event_trans ().mag ();
|
||||
}
|
||||
|
||||
void
|
||||
Service::drag_cancel ()
|
||||
{
|
||||
if (m_drawing) {
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
m_drawing = false;
|
||||
}
|
||||
|
||||
|
|
@ -1110,7 +1110,7 @@ bool
|
|||
Service::begin_move (lay::Editable::MoveMode mode, const db::DPoint &p, lay::angle_constraint_type /*ac*/)
|
||||
{
|
||||
// cancel any pending move or drag operations, reset mp_active_ruler
|
||||
widget ()->drag_cancel (); // KLUDGE: every service does this to the same service manager
|
||||
ui ()->drag_cancel (); // KLUDGE: every service does this to the same service manager
|
||||
|
||||
clear_transient_selection ();
|
||||
|
||||
|
|
@ -1558,7 +1558,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
|||
g = db::DVector (m_grid, m_grid);
|
||||
}
|
||||
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
snap_range *= 0.5;
|
||||
|
||||
lay::TwoPointSnapToObjectResult ee = lay::obj_snap2 (mp_view, p, g, ac, snap_range, snap_range * 1000.0);
|
||||
|
|
@ -1592,7 +1592,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
|||
mp_active_ruler->thaw ();
|
||||
m_drawing = true;
|
||||
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1627,7 +1627,7 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio
|
|||
ant::Object
|
||||
Service::create_measure_ruler (const db::DPoint &pt, lay::angle_constraint_type ac)
|
||||
{
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
snap_range *= 0.5;
|
||||
|
||||
ant::Template tpl;
|
||||
|
|
@ -1687,7 +1687,7 @@ Service::snap1_details (const db::DPoint &p, bool obj_snap)
|
|||
g = db::DVector (m_grid, m_grid);
|
||||
}
|
||||
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
return lay::obj_snap (obj_snap ? mp_view : 0, p, g, snap_range);
|
||||
}
|
||||
|
||||
|
|
@ -1707,7 +1707,7 @@ Service::snap2_details (const db::DPoint &p1, const db::DPoint &p2, const ant::O
|
|||
g = db::DVector (m_grid, m_grid);
|
||||
}
|
||||
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (m_snap_range);
|
||||
lay::angle_constraint_type snap_mode = ac == lay::AC_Global ? (obj->angle_constraint () == lay::AC_Global ? m_snap_mode : obj->angle_constraint ()) : ac;
|
||||
|
||||
return lay::obj_snap (m_obj_snap && obj->snap () ? mp_view : 0, p1, p2, g, snap_mode, snap_range);
|
||||
|
|
|
|||
|
|
@ -2158,7 +2158,7 @@ MainService::cm_tap ()
|
|||
tl_assert (false); // see TODO
|
||||
#endif
|
||||
|
||||
if (! view ()->view_object_widget ()->mouse_in_window ()) {
|
||||
if (! view ()->canvas ()->widget () || view ()->canvas ()->mouse_in_window ()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2168,7 +2168,7 @@ MainService::cm_tap ()
|
|||
finder.set_catch_all (true);
|
||||
|
||||
// go through all visible layers of all cellviews
|
||||
db::DPoint pt = view ()->view_object_widget ()->mouse_position_um ();
|
||||
db::DPoint pt = view ()->canvas ()->mouse_position_um ();
|
||||
finder.find (view (), db::DBox (pt, pt));
|
||||
|
||||
std::set<std::pair<unsigned int, unsigned int> > layers_in_selection;
|
||||
|
|
@ -2201,8 +2201,8 @@ MainService::cm_tap ()
|
|||
|
||||
int icon_size = menu->style ()->pixelMetric (QStyle::PM_ButtonIconSize);
|
||||
|
||||
db::DPoint mp_local = view ()->view_object_widget ()->mouse_position ();
|
||||
QPoint mp = view ()->view_object_widget ()->mapToGlobal (QPoint (mp_local.x (), mp_local.y ()));
|
||||
db::DPoint mp_local = view ()->canvas ()->mouse_position ();
|
||||
QPoint mp = view ()->canvas ()->widget ()->mapToGlobal (QPoint (mp_local.x (), mp_local.y ()));
|
||||
|
||||
for (std::vector<lay::LayerPropertiesConstIterator>::const_iterator l = tapped_layers.begin (); l != tapped_layers.end (); ++l) {
|
||||
QAction *a = menu->addAction (lay::LayerTreeModel::icon_for_layer (*l, view (), icon_size, icon_size, 0, true), tl::to_qstring ((*l)->display_string (view (), true, true /*with source*/)));
|
||||
|
|
@ -2216,7 +2216,7 @@ MainService::cm_tap ()
|
|||
lay::LayerPropertiesConstIterator iter = tapped_layers [index];
|
||||
view ()->set_current_layer (iter);
|
||||
|
||||
edt::Service *es = dynamic_cast<edt::Service *> (view ()->view_object_widget ()->active_service ());
|
||||
edt::Service *es = dynamic_cast<edt::Service *> (view ()->canvas ()->active_service ());
|
||||
if (es) {
|
||||
es->tap (pt);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1308,7 +1308,7 @@ const int sr_pixels = 8; // TODO: make variable
|
|||
lay::PointSnapToObjectResult
|
||||
PartialService::snap2 (const db::DPoint &p) const
|
||||
{
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (sr_pixels);
|
||||
double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (sr_pixels);
|
||||
return lay::obj_snap (m_snap_to_objects ? view () : 0, p, m_edit_grid == db::DVector () ? m_global_grid : m_edit_grid, snap_range);
|
||||
}
|
||||
|
||||
|
|
@ -1526,7 +1526,7 @@ PartialService::edit_cancel ()
|
|||
mp_box = 0;
|
||||
}
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
selection_to_view ();
|
||||
}
|
||||
|
|
@ -1654,10 +1654,10 @@ PartialService::mouse_press_event (const db::DPoint &p, unsigned int buttons, bo
|
|||
|
||||
m_p1 = p;
|
||||
m_p2 = p;
|
||||
mp_box = new lay::RubberBox (widget (), m_color, p, p);
|
||||
mp_box = new lay::RubberBox (ui (), m_color, p, p);
|
||||
mp_box->set_stipple (6); // coarse hatched
|
||||
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
|
||||
} else {
|
||||
|
||||
|
|
@ -1673,7 +1673,7 @@ PartialService::mouse_press_event (const db::DPoint &p, unsigned int buttons, bo
|
|||
m_current = m_start = p;
|
||||
}
|
||||
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1712,7 +1712,7 @@ PartialService::mouse_click_event (const db::DPoint &p, unsigned int buttons, bo
|
|||
if (m_current != m_start) {
|
||||
|
||||
// stop dragging
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
manager ()->transaction (tl::to_string (tr ("Partial move")));
|
||||
|
||||
|
|
@ -1743,7 +1743,7 @@ PartialService::mouse_click_event (const db::DPoint &p, unsigned int buttons, bo
|
|||
|
||||
return true;
|
||||
|
||||
} else if (widget ()->mouse_event_viewport ().contains (p)) {
|
||||
} else if (ui ()->mouse_event_viewport ().contains (p)) {
|
||||
|
||||
// clear other selection when this mode gets active
|
||||
// (save the selection so our own selection does not get cleared)
|
||||
|
|
@ -1901,7 +1901,7 @@ PartialService::mouse_double_click_event (const db::DPoint &p, unsigned int butt
|
|||
m_alt_ac = ac_from_buttons (buttons);
|
||||
|
||||
// stop dragging
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
m_dragging = false;
|
||||
|
||||
partial_select (db::DBox (p, p), lay::Editable::Replace);
|
||||
|
|
@ -2006,12 +2006,12 @@ PartialService::mouse_release_event (const db::DPoint &p, unsigned int buttons,
|
|||
|
||||
m_alt_ac = ac_from_buttons (buttons);
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
delete mp_box;
|
||||
mp_box = 0;
|
||||
|
||||
if (widget ()->mouse_event_viewport ().contains (p)) {
|
||||
if (ui ()->mouse_event_viewport ().contains (p)) {
|
||||
|
||||
lay::Editable::SelectionMode mode = lay::Editable::Replace;
|
||||
bool shift = ((m_buttons & lay::ShiftButton) != 0);
|
||||
|
|
@ -2067,7 +2067,7 @@ void
|
|||
PartialService::del ()
|
||||
{
|
||||
// stop dragging
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
std::map <std::pair <db::cell_index_type, std::pair <unsigned int, unsigned int> >, std::vector <partial_objects::const_iterator> > shapes_to_delete_by_cell;
|
||||
|
||||
|
|
@ -2358,13 +2358,13 @@ PartialService::enter_edge (const EdgeWithIndex &e, size_t &nmarker, partial_obj
|
|||
double
|
||||
PartialService::catch_distance ()
|
||||
{
|
||||
return double (view ()->search_range ()) / widget ()->mouse_event_trans ().mag ();
|
||||
return double (view ()->search_range ()) / ui ()->mouse_event_trans ().mag ();
|
||||
}
|
||||
|
||||
double
|
||||
PartialService::catch_distance_box ()
|
||||
{
|
||||
return double (view ()->search_range_box ()) / widget ()->mouse_event_trans ().mag ();
|
||||
return double (view ()->search_range_box ()) / ui ()->mouse_event_trans ().mag ();
|
||||
}
|
||||
|
||||
db::DPoint
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ const int sr_pixels = 8; // TODO: make variable
|
|||
lay::PointSnapToObjectResult
|
||||
Service::snap2_details (const db::DPoint &p) const
|
||||
{
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (sr_pixels);
|
||||
double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (sr_pixels);
|
||||
return lay::obj_snap (m_snap_to_objects ? view () : 0, p, m_edit_grid == db::DVector () ? m_global_grid : m_edit_grid, snap_range);
|
||||
}
|
||||
|
||||
|
|
@ -192,7 +192,7 @@ Service::snap2 (const db::DPoint &p) const
|
|||
db::DPoint
|
||||
Service::snap2 (const db::DPoint &p, const db::DPoint &plast, bool connect) const
|
||||
{
|
||||
double snap_range = widget ()->mouse_event_trans ().inverted ().ctrans (sr_pixels);
|
||||
double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (sr_pixels);
|
||||
return lay::obj_snap (m_snap_to_objects ? view () : 0, plast, p, m_edit_grid == db::DVector () ? m_global_grid : m_edit_grid, connect ? connect_ac () : move_ac (), snap_range).snapped_point;
|
||||
}
|
||||
|
||||
|
|
@ -922,13 +922,13 @@ Service::has_transient_selection ()
|
|||
double
|
||||
Service::catch_distance ()
|
||||
{
|
||||
return double (view ()->search_range ()) / widget ()->mouse_event_trans ().mag ();
|
||||
return double (view ()->search_range ()) / ui ()->mouse_event_trans ().mag ();
|
||||
}
|
||||
|
||||
double
|
||||
Service::catch_distance_box ()
|
||||
{
|
||||
return double (view ()->search_range_box ()) / widget ()->mouse_event_trans ().mag ();
|
||||
return double (view ()->search_range_box ()) / ui ()->mouse_event_trans ().mag ();
|
||||
}
|
||||
|
||||
double
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public:
|
|||
* @brief Constructor attaching to a certain object
|
||||
*/
|
||||
LandmarkMarker (lay::ViewService *service, const db::DPoint &pos, bool selected)
|
||||
: lay::ViewObject (service->widget ()),
|
||||
: lay::ViewObject (service->ui ()),
|
||||
mp_service (service), m_pos (pos), m_selected (selected), m_position_set (true)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
|
|
@ -50,7 +50,7 @@ public:
|
|||
* @brief Constructor attaching to a certain object
|
||||
*/
|
||||
LandmarkMarker (lay::ViewService *service, bool selected)
|
||||
: lay::ViewObject (service->widget ()),
|
||||
: lay::ViewObject (service->ui ()),
|
||||
mp_service (service), m_pos (), m_selected (selected), m_position_set (false)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
|
|
@ -146,7 +146,7 @@ class LandmarkEditorService
|
|||
{
|
||||
public:
|
||||
LandmarkEditorService (lay::LayoutViewBase *view, img::Object *img)
|
||||
: lay::ViewService (view->view_object_widget ()),
|
||||
: lay::ViewService (view->canvas ()),
|
||||
mp_image (img), m_selected (-1), m_dragging (false),
|
||||
m_mode (LandmarksDialog::None)
|
||||
{
|
||||
|
|
@ -182,7 +182,7 @@ public:
|
|||
|
||||
update ();
|
||||
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
m_dragging = true;
|
||||
|
||||
} else if (m_mode == LandmarksDialog::Delete) {
|
||||
|
|
@ -227,7 +227,7 @@ public:
|
|||
|
||||
update ();
|
||||
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
m_dragging = false;
|
||||
|
||||
}
|
||||
|
|
@ -235,7 +235,7 @@ public:
|
|||
} else {
|
||||
|
||||
int search_range = 5; // TODO: make_variable?
|
||||
double l = double (search_range) / widget ()->mouse_event_trans ().mag ();
|
||||
double l = double (search_range) / ui ()->mouse_event_trans ().mag ();
|
||||
db::DBox search_box = db::DBox (p, p).enlarged (db::DVector (l, l));
|
||||
|
||||
int li = 0;
|
||||
|
|
@ -307,7 +307,7 @@ public:
|
|||
} else if (! m_dragging) {
|
||||
|
||||
int search_range = 5; // TODO: make_variable?
|
||||
double l = double (search_range) / widget ()->mouse_event_trans ().mag ();
|
||||
double l = double (search_range) / ui ()->mouse_event_trans ().mag ();
|
||||
db::DBox search_box = db::DBox (p, p).enlarged (db::DVector (l, l));
|
||||
|
||||
int li = 0;
|
||||
|
|
@ -343,7 +343,7 @@ public:
|
|||
m_dragging = false;
|
||||
}
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
}
|
||||
|
||||
void set_colors (lay::Color /*background*/, lay::Color /*color*/)
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ Navigator::~Navigator ()
|
|||
void
|
||||
Navigator::activate_service (lay::ViewService *service)
|
||||
{
|
||||
mp_view->view_object_widget ()->activate (service);
|
||||
mp_view->canvas ()->activate (service);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -410,7 +410,7 @@ View::render (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas)
|
|||
// img::Service implementation
|
||||
|
||||
Service::Service (db::Manager *manager, lay::LayoutViewBase *view)
|
||||
: lay::BackgroundViewObject (view->view_object_widget ()),
|
||||
: lay::BackgroundViewObject (view->canvas ()),
|
||||
lay::Editable (view),
|
||||
lay::Plugin (view),
|
||||
db::Object (manager),
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "tlException.h"
|
||||
#include "tlString.h"
|
||||
#include "tlExceptions.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
namespace lay
|
||||
{
|
||||
|
|
@ -55,10 +56,14 @@ public:
|
|||
menu_entries.push_back (lay::menu_item ("clip_tool::show", "clip_tool:edit_mode", "edit_menu.utils_menu.end", tl::to_string (QObject::tr ("Clip Tool"))));
|
||||
}
|
||||
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new ClipDialog (root, view);
|
||||
}
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
if (lay::has_gui ()) {
|
||||
return new ClipDialog (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl (new ClipDialogPluginDeclaration (), 20000, "ClipDialogPlugin");
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include "tlExceptions.h"
|
||||
#include "layMainWindow.h"
|
||||
#include "layCellSelectionForm.h"
|
||||
#include "layUtils.h"
|
||||
#include "edtService.h"
|
||||
|
||||
namespace lay
|
||||
|
|
@ -64,7 +65,11 @@ public:
|
|||
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new FillDialog (root, view);
|
||||
if (lay::has_gui ()) {
|
||||
return new FillDialog (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ public:
|
|||
};
|
||||
|
||||
NavigatorService (LayoutView *view)
|
||||
: ViewService (view->view_object_widget ()),
|
||||
: ViewService (view->canvas ()),
|
||||
mp_view (view), mp_source_view (0),
|
||||
mp_viewport_marker (0),
|
||||
m_drag_mode (DM_none),
|
||||
|
|
@ -101,7 +101,7 @@ public:
|
|||
delete mp_box;
|
||||
mp_box = 0;
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
if (mp_source_view) {
|
||||
mp_source_view->zoom_box (db::DBox (m_p1, m_p2));
|
||||
|
|
@ -112,7 +112,7 @@ public:
|
|||
} else if (m_dragging) {
|
||||
|
||||
m_dragging = false;
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
|
@ -123,7 +123,7 @@ public:
|
|||
bool mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio)
|
||||
{
|
||||
if (! prio && (buttons & lay::RightButton) != 0) {
|
||||
db::DBox vp = widget ()->mouse_event_viewport ();
|
||||
db::DBox vp = ui ()->mouse_event_viewport ();
|
||||
if (mp_source_view && vp.contains (p)) {
|
||||
db::DVector d = (vp.p2 () - vp.p1 ()) * 0.5;
|
||||
mp_source_view->zoom_box (db::DBox (p - d, p + d));
|
||||
|
|
@ -156,7 +156,7 @@ public:
|
|||
m_dragging = true;
|
||||
m_p0 = p;
|
||||
m_b0 = m_box;
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
|
@ -389,7 +389,7 @@ public:
|
|||
delete mp_box;
|
||||
mp_box = 0;
|
||||
}
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
}
|
||||
|
||||
void set_colors (lay::Color /*background*/, lay::Color color)
|
||||
|
|
@ -426,9 +426,9 @@ private:
|
|||
mp_box = 0;
|
||||
|
||||
m_p1 = pos;
|
||||
m_vp = widget ()->mouse_event_viewport ();
|
||||
m_vp = ui ()->mouse_event_viewport ();
|
||||
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
}
|
||||
|
||||
void begin (const db::DPoint &pos)
|
||||
|
|
@ -439,9 +439,9 @@ private:
|
|||
|
||||
m_p1 = pos;
|
||||
m_p2 = pos;
|
||||
mp_box = new lay::RubberBox (widget (), m_color, pos, pos);
|
||||
mp_box = new lay::RubberBox (ui (), m_color, pos, pos);
|
||||
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -664,7 +664,7 @@ Navigator::attach_view (LayoutView *view)
|
|||
mp_view->widget ()->show ();
|
||||
|
||||
mp_service = new NavigatorService (mp_view);
|
||||
mp_view->view_object_widget ()->activate (mp_service);
|
||||
mp_view->canvas ()->activate (mp_service);
|
||||
|
||||
mp_source_view->cellviews_changed_event.add (this, &Navigator::content_changed);
|
||||
mp_source_view->cellview_changed_event.add (this, &Navigator::content_changed_with_int);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "layMainWindow.h"
|
||||
#include "layApplication.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
namespace lay
|
||||
{
|
||||
|
|
@ -65,7 +66,11 @@ public:
|
|||
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new SearchReplaceDialog (root, view);
|
||||
if (lay::has_gui ()) {
|
||||
return new SearchReplaceDialog (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -360,49 +360,49 @@ get_config_names (lay::LayoutViewBase *view)
|
|||
static void
|
||||
send_key_press_event (lay::LayoutViewBase *view, unsigned int key, unsigned int buttons)
|
||||
{
|
||||
view->view_object_widget ()->send_key_press_event (key, buttons);
|
||||
view->canvas ()->send_key_press_event (key, buttons);
|
||||
}
|
||||
|
||||
static void
|
||||
send_mouse_move_event (lay::LayoutViewBase *view, const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
view->view_object_widget ()->send_mouse_move_event (pt, buttons);
|
||||
view->canvas ()->send_mouse_move_event (pt, buttons);
|
||||
}
|
||||
|
||||
static void
|
||||
send_leave_event (lay::LayoutViewBase *view)
|
||||
{
|
||||
view->view_object_widget ()->send_leave_event ();
|
||||
view->canvas ()->send_leave_event ();
|
||||
}
|
||||
|
||||
static void
|
||||
send_enter_event (lay::LayoutViewBase *view)
|
||||
{
|
||||
view->view_object_widget ()->send_enter_event ();
|
||||
view->canvas ()->send_enter_event ();
|
||||
}
|
||||
|
||||
static void
|
||||
send_mouse_press_event (lay::LayoutViewBase *view, const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
view->view_object_widget ()->send_mouse_press_event (pt, buttons);
|
||||
view->canvas ()->send_mouse_press_event (pt, buttons);
|
||||
}
|
||||
|
||||
static void
|
||||
send_mouse_double_clicked_event (lay::LayoutViewBase *view, const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
view->view_object_widget ()->send_mouse_double_clicked_event (pt, buttons);
|
||||
view->canvas ()->send_mouse_double_clicked_event (pt, buttons);
|
||||
}
|
||||
|
||||
static void
|
||||
send_mouse_release_event (lay::LayoutViewBase *view, const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
view->view_object_widget ()->send_mouse_release_event (pt, buttons);
|
||||
view->canvas ()->send_mouse_release_event (pt, buttons);
|
||||
}
|
||||
|
||||
static void
|
||||
send_wheel_event (lay::LayoutViewBase *view, int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
view->view_object_widget ()->send_wheel_event (delta, horizontal, pt, buttons);
|
||||
view->canvas ()->send_wheel_event (delta, horizontal, pt, buttons);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ class PluginBase
|
|||
{
|
||||
public:
|
||||
PluginBase ()
|
||||
: lay::Plugin (sp_dispatcher), lay::ViewService (sp_view ? sp_view->view_object_widget () : 0)
|
||||
: lay::Plugin (sp_dispatcher), lay::ViewService (sp_view ? sp_view->canvas () : 0)
|
||||
{
|
||||
if (! s_in_create_plugin) {
|
||||
throw tl::Exception (tl::to_string (tr ("A PluginBase object can only be created in the PluginFactory's create_plugin method")));
|
||||
|
|
@ -57,21 +57,21 @@ public:
|
|||
|
||||
void grab_mouse ()
|
||||
{
|
||||
if (widget ()) {
|
||||
widget ()->grab_mouse (this, false);
|
||||
if (ui ()) {
|
||||
ui ()->grab_mouse (this, false);
|
||||
}
|
||||
}
|
||||
|
||||
void ungrab_mouse ()
|
||||
{
|
||||
if (widget ()) {
|
||||
widget ()->ungrab_mouse (this);
|
||||
if (ui ()) {
|
||||
ui ()->ungrab_mouse (this);
|
||||
}
|
||||
}
|
||||
|
||||
void set_cursor (int c)
|
||||
{
|
||||
if (widget ()) {
|
||||
if (ui ()) {
|
||||
lay::ViewService::set_cursor ((enum lay::Cursor::cursor_shape) c);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ class TrackingCursorBase
|
|||
: public lay::ViewObject
|
||||
{
|
||||
public:
|
||||
TrackingCursorBase (lay::EditorServiceBase *service, lay::ViewObjectWidget *widget)
|
||||
TrackingCursorBase (lay::EditorServiceBase *service, lay::ViewObjectUI *widget)
|
||||
: lay::ViewObject (widget, false), mp_service (service)
|
||||
{ }
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ class MouseCursorViewObject
|
|||
: public TrackingCursorBase
|
||||
{
|
||||
public:
|
||||
MouseCursorViewObject (lay::EditorServiceBase *service, lay::ViewObjectWidget *widget, const db::DPoint &pt, bool solid)
|
||||
MouseCursorViewObject (lay::EditorServiceBase *service, lay::ViewObjectUI *widget, const db::DPoint &pt, bool solid)
|
||||
: TrackingCursorBase (service, widget), m_pt (pt), m_solid (solid)
|
||||
{ }
|
||||
|
||||
|
|
@ -139,7 +139,7 @@ class EdgeMarkerViewObject
|
|||
: public TrackingCursorBase
|
||||
{
|
||||
public:
|
||||
EdgeMarkerViewObject (lay::EditorServiceBase *service, lay::ViewObjectWidget *widget, const db::DEdge &edge, bool solid)
|
||||
EdgeMarkerViewObject (lay::EditorServiceBase *service, lay::ViewObjectUI *widget, const db::DEdge &edge, bool solid)
|
||||
: TrackingCursorBase (service, widget), m_edge (edge), m_solid (solid)
|
||||
{ }
|
||||
|
||||
|
|
@ -207,7 +207,7 @@ private:
|
|||
// --------------------------------------------------------------------------------------
|
||||
|
||||
EditorServiceBase::EditorServiceBase (LayoutViewBase *view)
|
||||
: lay::ViewService (view->view_object_widget ()),
|
||||
: lay::ViewService (view->canvas ()),
|
||||
lay::Editable (view),
|
||||
lay::Plugin (view),
|
||||
m_cursor_enabled (true),
|
||||
|
|
@ -226,13 +226,13 @@ EditorServiceBase::add_mouse_cursor (const db::DPoint &pt, bool emphasize)
|
|||
{
|
||||
m_has_tracking_position = true;
|
||||
m_tracking_position = pt;
|
||||
m_mouse_cursor_markers.push_back (new MouseCursorViewObject (this, widget (), pt, emphasize));
|
||||
m_mouse_cursor_markers.push_back (new MouseCursorViewObject (this, ui (), pt, emphasize));
|
||||
}
|
||||
|
||||
void
|
||||
EditorServiceBase::add_edge_marker (const db::DEdge &e, bool emphasize)
|
||||
{
|
||||
m_mouse_cursor_markers.push_back (new EdgeMarkerViewObject (this, widget (), e, emphasize));
|
||||
m_mouse_cursor_markers.push_back (new EdgeMarkerViewObject (this, ui (), e, emphasize));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -307,7 +307,7 @@ EditorServiceBase::show_error (tl::Exception &ex)
|
|||
{
|
||||
tl::error << ex.msg ();
|
||||
#if defined(HAVE_QT)
|
||||
QMessageBox::critical (widget (), tr ("Error"), tl::to_qstring (ex.msg ()));
|
||||
QMessageBox::critical (ui ()->widget (), tr ("Error"), tl::to_qstring (ex.msg ()));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ invert (unsigned char *data, unsigned int width, unsigned int height)
|
|||
}
|
||||
|
||||
LayoutCanvas::LayoutCanvas (lay::LayoutViewBase *view)
|
||||
: lay::ViewObjectWidget (),
|
||||
: lay::ViewObjectUI (),
|
||||
mp_view (view),
|
||||
mp_image (0), mp_image_bg (0),
|
||||
mp_image_fg (0),
|
||||
|
|
@ -291,11 +291,25 @@ LayoutCanvas::LayoutCanvas (lay::LayoutViewBase *view)
|
|||
m_do_end_of_drawing_dm (this, &LayoutCanvas::do_end_of_drawing),
|
||||
m_image_cache_size (1)
|
||||
{
|
||||
lay::Color bg (0xffffffff), fg (0xff000000), active (0xffc0c0c0);
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
if (widget ()) {
|
||||
|
||||
#if QT_VERSION > 0x050000
|
||||
m_dpr = devicePixelRatio ();
|
||||
m_dpr = widget ()->devicePixelRatio ();
|
||||
#endif
|
||||
setObjectName (QString::fromUtf8 ("canvas"));
|
||||
|
||||
widget ()->setObjectName (QString::fromUtf8 ("canvas"));
|
||||
widget ()->setBackgroundRole (QPalette::NoRole);
|
||||
|
||||
bg = lay::Color (widget ()->palette ().color (QPalette::Normal, QPalette::Window).rgb ());
|
||||
fg = lay::Color (widget ()->palette ().color (QPalette::Normal, QPalette::Text).rgb ());
|
||||
active = lay::Color (widget ()->palette ().color (QPalette::Normal, QPalette::Mid).rgb ());
|
||||
|
||||
widget ()->setAttribute (Qt::WA_NoSystemBackground);
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
// The gamma value used for subsampling: something between 1.8 and 2.2.
|
||||
|
|
@ -307,15 +321,7 @@ LayoutCanvas::LayoutCanvas (lay::LayoutViewBase *view)
|
|||
|
||||
mp_redraw_thread = new lay::RedrawThread (this, view);
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
setBackgroundRole (QPalette::NoRole);
|
||||
set_colors (lay::Color (palette ().color (QPalette::Normal, QPalette::Window).rgb ()),
|
||||
lay::Color (palette ().color (QPalette::Normal, QPalette::Text).rgb ()),
|
||||
lay::Color (palette ().color (QPalette::Normal, QPalette::Mid).rgb ()));
|
||||
setAttribute (Qt::WA_NoSystemBackground);
|
||||
#else
|
||||
set_colors (0xffffffff, 0xff000000, 0xffc0c0c0);
|
||||
#endif
|
||||
set_colors (bg, fg, active);
|
||||
}
|
||||
|
||||
LayoutCanvas::~LayoutCanvas ()
|
||||
|
|
@ -560,7 +566,7 @@ LayoutCanvas::free_resources ()
|
|||
|
||||
#if defined(HAVE_QT)
|
||||
void
|
||||
LayoutCanvas::paintEvent (QPaintEvent *)
|
||||
LayoutCanvas::paint_event ()
|
||||
{
|
||||
// this is the update image request
|
||||
tl::SelfTimer timer_info (tl::verbosity () >= 41, tl::to_string (QObject::tr ("PaintEvent")));
|
||||
|
|
@ -655,7 +661,7 @@ LayoutCanvas::paintEvent (QPaintEvent *)
|
|||
do_render (m_viewport_l, *this, false);
|
||||
|
||||
// produce the pixmap first and then overdraw with dynamic content.
|
||||
QPainter painter (this);
|
||||
QPainter painter (widget ());
|
||||
QImage img = mp_image_fg->to_image ();
|
||||
#if QT_VERSION > 0x050000
|
||||
img.setDevicePixelRatio (double (m_dpr));
|
||||
|
|
@ -978,27 +984,8 @@ LayoutCanvas::screenshot ()
|
|||
return img;
|
||||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
void
|
||||
LayoutCanvas::resizeEvent (QResizeEvent *)
|
||||
{
|
||||
do_resize (width (), height ());
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
LayoutCanvas::resize (unsigned int width, unsigned int height)
|
||||
{
|
||||
// pass down to the basic view object canvas
|
||||
lay::ViewObjectWidget::resize (width, height);
|
||||
|
||||
// don't wait until the layout system informs us - which may never take place when
|
||||
// the widget isn't shown.
|
||||
do_resize (width, height);
|
||||
}
|
||||
|
||||
void
|
||||
LayoutCanvas::do_resize (unsigned int width, unsigned int height)
|
||||
LayoutCanvas::resize_event (unsigned int width, unsigned int height)
|
||||
{
|
||||
unsigned int w = width * m_dpr, h = height * m_dpr;
|
||||
unsigned int wl = width * m_oversampling * m_dpr, hl = height * m_oversampling * m_dpr;
|
||||
|
|
@ -1099,22 +1086,11 @@ LayoutCanvas::do_update_image ()
|
|||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
bool
|
||||
LayoutCanvas::event (QEvent *e)
|
||||
void
|
||||
LayoutCanvas::gtf_probe ()
|
||||
{
|
||||
if (e->type () == QEvent::MaxUser) {
|
||||
|
||||
// GTF probe event
|
||||
// record the contents (the screenshot) as ASCII text
|
||||
if (gtf::Recorder::instance () && gtf::Recorder::instance ()->recording ()) {
|
||||
gtf::Recorder::instance ()->probe (this, gtf::image_to_variant (screenshot ().to_image_copy ()));
|
||||
}
|
||||
|
||||
e->accept ();
|
||||
return true;
|
||||
|
||||
} else {
|
||||
return QWidget::event (e);
|
||||
if (gtf::Recorder::instance () && gtf::Recorder::instance ()->recording ()) {
|
||||
gtf::Recorder::instance ()->probe (widget (), gtf::image_to_variant (screenshot ().to_image_copy ()));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -134,15 +134,11 @@ private:
|
|||
*/
|
||||
|
||||
class LAYBASIC_PUBLIC LayoutCanvas
|
||||
: public lay::ViewObjectWidget,
|
||||
: public lay::ViewObjectUI,
|
||||
public lay::BitmapViewObjectCanvas,
|
||||
public lay::BitmapRedrawThreadCanvas,
|
||||
public lay::Drawings
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
Q_OBJECT
|
||||
#endif
|
||||
|
||||
public:
|
||||
LayoutCanvas (lay::LayoutViewBase *view);
|
||||
~LayoutCanvas ();
|
||||
|
|
@ -339,11 +335,6 @@ public:
|
|||
return m_viewport;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Resizes the canvas object in the Qt-less case
|
||||
*/
|
||||
void resize (unsigned int width, unsigned int height);
|
||||
|
||||
/**
|
||||
* @brief Gets (and resets) a flag indicating that drawing has finished
|
||||
*/
|
||||
|
|
@ -399,13 +390,12 @@ private:
|
|||
|
||||
tl::Mutex m_mutex;
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
virtual void paintEvent (QPaintEvent *);
|
||||
virtual void resizeEvent (QResizeEvent *);
|
||||
virtual bool event (QEvent *e);
|
||||
#endif
|
||||
|
||||
virtual void key_event (unsigned int key, unsigned int buttons);
|
||||
virtual void resize_event (unsigned int width, unsigned int height);
|
||||
#if defined(HAVE_QT)
|
||||
virtual void gtf_probe ();
|
||||
virtual void paint_event ();
|
||||
#endif
|
||||
|
||||
// implementation of the lay::Drawings interface
|
||||
void update_drawings ();
|
||||
|
|
@ -416,7 +406,6 @@ private:
|
|||
void do_update_image ();
|
||||
void do_end_of_drawing ();
|
||||
void do_redraw_all (bool force_redraw = true);
|
||||
void do_resize (unsigned int width, unsigned int height);
|
||||
|
||||
void prepare_drawing ();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1637,13 +1637,13 @@ public:
|
|||
void absolute_coordinates (bool f);
|
||||
|
||||
/**
|
||||
* @brief Get the view object widget (the canvas where the layout is drawn and view objects are placed)
|
||||
* @brief Gets the canvas object (where the layout is drawn and view objects are placed)
|
||||
*
|
||||
* This method intentionally delivers the ViewObjectWidget, not the
|
||||
* LayoutCanvas to emphasize that the LayoutCanvas object shall not
|
||||
* be modified.
|
||||
*/
|
||||
lay::ViewObjectWidget *view_object_widget ()
|
||||
lay::LayoutCanvas *canvas ()
|
||||
{
|
||||
return mp_canvas;
|
||||
}
|
||||
|
|
@ -2825,11 +2825,6 @@ protected:
|
|||
|
||||
virtual LayoutView *get_ui ();
|
||||
|
||||
lay::LayoutCanvas *canvas ()
|
||||
{
|
||||
return mp_canvas;
|
||||
}
|
||||
|
||||
bool configure (const std::string &name, const std::string &value);
|
||||
void config_finalize ();
|
||||
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ void render_cell_inst (const db::Layout &layout, const db::CellInstArray &inst,
|
|||
// ------------------------------------------------------------------------
|
||||
|
||||
MarkerBase::MarkerBase (lay::LayoutViewBase *view)
|
||||
: lay::ViewObject (view->view_object_widget ()),
|
||||
: lay::ViewObject (view->canvas ()),
|
||||
m_line_width (-1), m_vertex_size (-1), m_halo (-1), m_text_enabled (true), m_vertex_shape (lay::ViewOp::Rect), m_line_style (-1), m_dither_pattern (-1), m_frame_pattern (0), mp_view (view)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
|
|
|
|||
|
|
@ -29,9 +29,9 @@ namespace lay
|
|||
{
|
||||
|
||||
MouseTracker::MouseTracker (lay::LayoutViewBase *view)
|
||||
: lay::ViewService (view->view_object_widget ()), mp_view (view)
|
||||
: lay::ViewService (view->canvas ()), mp_view (view)
|
||||
{
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
@ -42,7 +42,7 @@ MouseTracker::mouse_move_event (const db::DPoint &p, unsigned int /*buttons*/, b
|
|||
// NOTE: because the tracker grabs first and grabbers are registered first gets served last, the
|
||||
// tracker will receive the event after all other mouse grabbers have been served and had their
|
||||
// chance to set the tracking position.
|
||||
lay::ViewService *vs = mp_view->view_object_widget ()->active_service ();
|
||||
lay::ViewService *vs = mp_view->canvas ()->active_service ();
|
||||
db::DPoint tp = p;
|
||||
if (vs && vs->enabled () && vs->has_tracking_position ()) {
|
||||
tp = vs->tracking_position ();
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace lay
|
|||
// MoveService implementation
|
||||
|
||||
MoveService::MoveService (lay::LayoutViewBase *view)
|
||||
: lay::ViewService (view->view_object_widget ()),
|
||||
: lay::ViewService (view->canvas ()),
|
||||
m_dragging (false),
|
||||
m_dragging_transient (false),
|
||||
mp_editables (view),
|
||||
|
|
@ -102,7 +102,7 @@ MoveService::key_event (unsigned int key, unsigned int /*buttons*/)
|
|||
if (! m_dragging && fabs (dx + dy) > 0.0 && mp_editables->has_selection ()) {
|
||||
|
||||
// determine a shift distance which is 2, 5 or 10 times the grid and is more than 5 pixels
|
||||
double dmin = double (5 /*pixels min shift*/) / widget ()->mouse_event_trans ().mag ();
|
||||
double dmin = double (5 /*pixels min shift*/) / ui ()->mouse_event_trans ().mag ();
|
||||
double d = m_global_grid;
|
||||
while (d < dmin) {
|
||||
d *= 2.0;
|
||||
|
|
@ -302,7 +302,7 @@ MoveService::handle_click (const db::DPoint &p, unsigned int buttons, bool drag_
|
|||
|
||||
m_dragging = true;
|
||||
m_dragging_transient = drag_transient;
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
|
||||
m_shift = db::DPoint ();
|
||||
|
||||
|
|
@ -314,7 +314,7 @@ MoveService::handle_click (const db::DPoint &p, unsigned int buttons, bool drag_
|
|||
|
||||
m_dragging = false;
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
mp_editables->end_move (p, ac_from_buttons (buttons), mp_transaction.release ());
|
||||
|
||||
if (m_dragging_transient) {
|
||||
|
|
@ -334,7 +334,7 @@ MoveService::drag_cancel ()
|
|||
if (m_dragging) {
|
||||
|
||||
mp_editables->edit_cancel ();
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
m_dragging = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ namespace lay
|
|||
// -------------------------------------------------------------
|
||||
// RubberBox implementation
|
||||
|
||||
RubberBox::RubberBox (lay::ViewObjectWidget *widget, unsigned int color, const db::DPoint &p1, const db::DPoint &p2)
|
||||
RubberBox::RubberBox (lay::ViewObjectUI *widget, unsigned int color, const db::DPoint &p1, const db::DPoint &p2)
|
||||
: lay::ViewObject (widget, false /*not static*/),
|
||||
m_p1 (p1), m_p2 (p2), m_color (color), m_stipple (0)
|
||||
{ }
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class LAYBASIC_PUBLIC RubberBox
|
|||
: public lay::ViewObject
|
||||
{
|
||||
public:
|
||||
RubberBox (lay::ViewObjectWidget *canvas, unsigned int color, const db::DPoint &p1, const db::DPoint &p2);
|
||||
RubberBox (lay::ViewObjectUI *canvas, unsigned int color, const db::DPoint &p1, const db::DPoint &p2);
|
||||
|
||||
void set_color (unsigned int color);
|
||||
void set_stipple (unsigned int s);
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ SelectionService::SelectionService (lay::LayoutViewBase *view) :
|
|||
#if defined(HAVE_QT)
|
||||
QObject (),
|
||||
#endif
|
||||
lay::ViewService (view->view_object_widget ()),
|
||||
lay::ViewService (view->canvas ()),
|
||||
mp_view (view),
|
||||
mp_box (0),
|
||||
m_color (0),
|
||||
|
|
@ -114,7 +114,7 @@ SelectionService::reset_box ()
|
|||
{
|
||||
if (mp_box) {
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
delete mp_box;
|
||||
mp_box = 0;
|
||||
|
|
@ -223,7 +223,7 @@ SelectionService::mouse_click_event (const db::DPoint &p, unsigned int buttons,
|
|||
reset_box ();
|
||||
}
|
||||
|
||||
if (prio && mp_view && widget ()->mouse_event_viewport ().contains (p) && (buttons & lay::LeftButton) != 0) {
|
||||
if (prio && mp_view && ui ()->mouse_event_viewport ().contains (p) && (buttons & lay::LeftButton) != 0) {
|
||||
|
||||
lay::Editable::SelectionMode mode = lay::Editable::Replace;
|
||||
bool shift = ((buttons & lay::ShiftButton) != 0);
|
||||
|
|
@ -314,10 +314,10 @@ SelectionService::begin (const db::DPoint &pos)
|
|||
|
||||
m_p1 = pos;
|
||||
m_p2 = pos;
|
||||
mp_box = new lay::RubberBox (widget (), m_color, pos, pos);
|
||||
mp_box = new lay::RubberBox (ui (), m_color, pos, pos);
|
||||
mp_box->set_stipple (6); // coarse hatched
|
||||
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
/*
|
||||
|
||||
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 "layUtils.h"
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
# include <QApplication>
|
||||
#endif
|
||||
|
||||
namespace lay {
|
||||
|
||||
bool
|
||||
has_gui ()
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
#if QT_VERSION < 0x50000
|
||||
return (QApplication::type () != Qt::Tty);
|
||||
#else
|
||||
return (dynamic_cast<QGuiApplication *> (QCoreApplication::instance ()) != 0);
|
||||
#endif
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
|
||||
/*
|
||||
|
||||
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_layUtils
|
||||
#define HDR_layUtils
|
||||
|
||||
#include "laybasicCommon.h"
|
||||
|
||||
namespace lay {
|
||||
|
||||
/**
|
||||
* @brief Returns true, if GUI is enabled
|
||||
*/
|
||||
LAYBASIC_PUBLIC bool has_gui ();
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -25,7 +25,8 @@
|
|||
# include <QWheelEvent>
|
||||
# include <QKeyEvent>
|
||||
# include <QMimeData>
|
||||
# include <QCoreApplication>
|
||||
# include <QApplication>
|
||||
# include <QWidget>
|
||||
#endif
|
||||
|
||||
#include "layViewObject.h"
|
||||
|
|
@ -34,6 +35,7 @@
|
|||
#if defined(HAVE_QT)
|
||||
# include "layDragDropData.h"
|
||||
#endif
|
||||
#include "layUtils.h"
|
||||
#include "tlException.h"
|
||||
#include "tlAlgorithm.h"
|
||||
#include "tlExceptions.h"
|
||||
|
|
@ -72,7 +74,7 @@ qt_to_buttons (Qt::MouseButtons b, Qt::KeyboardModifiers m)
|
|||
// ---------------------------------------------------------------
|
||||
// BackgroundViewObject implementation
|
||||
|
||||
BackgroundViewObject::BackgroundViewObject (ViewObjectWidget *widget)
|
||||
BackgroundViewObject::BackgroundViewObject (ViewObjectUI *widget)
|
||||
: mp_widget (widget), m_visible (true), m_z_order (0)
|
||||
{
|
||||
if (widget) {
|
||||
|
|
@ -115,7 +117,7 @@ BackgroundViewObject::z_order (int z)
|
|||
// ---------------------------------------------------------------
|
||||
// ViewObject implementation
|
||||
|
||||
ViewObject::ViewObject (ViewObjectWidget *widget, bool _static)
|
||||
ViewObject::ViewObject (ViewObjectUI *widget, bool _static)
|
||||
: mp_widget (widget), m_static (_static), m_visible (true), m_dismissable (false)
|
||||
{
|
||||
if (widget) {
|
||||
|
|
@ -178,7 +180,7 @@ ViewObject::freeze ()
|
|||
// ---------------------------------------------------------------
|
||||
// ViewService implementation
|
||||
|
||||
ViewService::ViewService (ViewObjectWidget *widget)
|
||||
ViewService::ViewService (ViewObjectUI *widget)
|
||||
: mp_widget (widget), m_abs_grab (false), m_enabled (true)
|
||||
{
|
||||
if (widget) {
|
||||
|
|
@ -206,14 +208,287 @@ ViewService::set_cursor (lay::Cursor::cursor_shape cursor)
|
|||
mp_widget->set_cursor (cursor);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// ViewObjectQWidget implementation
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
|
||||
class ViewObjectQWidget : public QWidget
|
||||
{
|
||||
public:
|
||||
ViewObjectQWidget (ViewObjectUI *view)
|
||||
: QWidget (), mp_view (view)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
void resizeEvent (QResizeEvent *)
|
||||
{
|
||||
mp_view->resize_event (width (), height ());
|
||||
}
|
||||
|
||||
bool focusNextPrevChild (bool /*next*/)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void keyPressEvent (QKeyEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
unsigned int buttons = qt_to_buttons (Qt::MouseButtons (), e->modifiers ());
|
||||
mp_view->send_key_press_event ((unsigned int) e->key (), buttons);
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
DragDropDataBase *get_drag_drop_data (const QMimeData *data)
|
||||
{
|
||||
if (! data || ! data->hasFormat (QString::fromUtf8 (drag_drop_mime_type ()))) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
QByteArray ba = data->data (QString::fromUtf8 (drag_drop_mime_type ()));
|
||||
|
||||
// TODO: provide some global mechanism to register drag & drop classes
|
||||
std::unique_ptr<DragDropDataBase> cd (new CellDragDropData ());
|
||||
if (cd->deserialize (ba)) {
|
||||
return cd.release ();
|
||||
}
|
||||
|
||||
// TODO: more ...
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dragEnterEvent (QDragEnterEvent *event)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
const DragDropDataBase *dd = get_drag_drop_data (event->mimeData ());
|
||||
if (dd) {
|
||||
|
||||
db::DPoint p = mp_view->pixel_to_um (db::Point (event->pos ().x (), event->pos ().y ()));
|
||||
|
||||
bool done = mp_view->drag_enter_event (p, dd);
|
||||
ViewObjectUI::service_iterator svc = mp_view->begin_services ();
|
||||
while (svc != mp_view->end_services () && !done) {
|
||||
ViewObjectUI::service_iterator next = svc;
|
||||
++next;
|
||||
done = (*svc)->drag_enter_event (p, dd);
|
||||
svc = next;
|
||||
}
|
||||
|
||||
if (done) {
|
||||
event->acceptProposedAction ();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void dragLeaveEvent (QDragLeaveEvent * /*event*/)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
mp_view->drag_leave_event ();
|
||||
ViewObjectUI::service_iterator svc = mp_view->begin_services ();
|
||||
while (svc != mp_view->end_services ()) {
|
||||
ViewObjectUI::service_iterator next = svc;
|
||||
++next;
|
||||
(*svc)->drag_leave_event ();
|
||||
svc = next;
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void dragMoveEvent (QDragMoveEvent *event)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
const DragDropDataBase *dd = get_drag_drop_data (event->mimeData ());
|
||||
if (dd) {
|
||||
|
||||
db::DPoint p = mp_view->pixel_to_um (db::Point (event->pos ().x (), event->pos ().y ()));
|
||||
|
||||
bool done = mp_view->drag_move_event (p, dd);
|
||||
ViewObjectUI::service_iterator svc = mp_view->begin_services ();
|
||||
while (svc != mp_view->end_services () && !done) {
|
||||
ViewObjectUI::service_iterator next = svc;
|
||||
++next;
|
||||
done = (*svc)->drag_move_event (p, dd);
|
||||
svc = next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void dropEvent (QDropEvent *event)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
const DragDropDataBase *dd = get_drag_drop_data (event->mimeData ());
|
||||
if (dd) {
|
||||
|
||||
db::DPoint p = mp_view->pixel_to_um (db::Point (event->pos ().x (), event->pos ().y ()));
|
||||
|
||||
bool done = mp_view->drop_event (p, dd);
|
||||
ViewObjectUI::service_iterator svc = mp_view->begin_services ();
|
||||
while (svc != mp_view->end_services () && !done) {
|
||||
ViewObjectUI::service_iterator next = svc;
|
||||
++next;
|
||||
done = (*svc)->drop_event (p, dd);
|
||||
svc = next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void mouseMoveEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
mp_view->send_mouse_move_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void mouseDoubleClickEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
mp_view->send_mouse_double_clicked_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
#if QT_VERSION >= 0x60000
|
||||
enterEvent (QEnterEvent * /*event*/)
|
||||
#else
|
||||
enterEvent (QEvent * /*event*/)
|
||||
#endif
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
mp_view->send_enter_event ();
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void leaveEvent (QEvent * /*event*/)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
mp_view->send_leave_event ();
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void wheelEvent (QWheelEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
int delta = e->delta ();
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
bool horizontal = (e->orientation () == Qt::Horizontal);
|
||||
#else
|
||||
int delta = e->angleDelta ().y ();
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
bool horizontal = false;
|
||||
#endif
|
||||
|
||||
e->ignore ();
|
||||
|
||||
mp_view->send_wheel_event (delta, horizontal, p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void mousePressEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
mp_view->send_mouse_press_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void mouseReleaseEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
mp_view->send_mouse_release_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void paintEvent (QPaintEvent *)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
mp_view->paint_event ();
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
bool event (QEvent *e)
|
||||
{
|
||||
if (e->type () == QEvent::MaxUser) {
|
||||
|
||||
// GTF probe event
|
||||
// record the contents (the screenshot) as ASCII text
|
||||
mp_view->gtf_probe ();
|
||||
|
||||
e->accept ();
|
||||
return true;
|
||||
|
||||
} else {
|
||||
return QWidget::event (e);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
ViewObjectUI *mp_view;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// ViewObjectWidget implementation
|
||||
|
||||
ViewObjectWidget::ViewObjectWidget ()
|
||||
#if defined(HAVE_QT)
|
||||
: QWidget (),
|
||||
#endif
|
||||
m_view_objects_dismissed (false),
|
||||
ViewObjectUI::ViewObjectUI ()
|
||||
: m_view_objects_dismissed (false),
|
||||
m_needs_update_static (false),
|
||||
m_needs_update_bg (false),
|
||||
mp_active_service (0),
|
||||
|
|
@ -228,14 +503,19 @@ ViewObjectWidget::ViewObjectWidget ()
|
|||
m_image_updated (false)
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
setMouseTracking (true);
|
||||
setAcceptDrops (true);
|
||||
if (lay::has_gui ()) {
|
||||
mp_widget = new ViewObjectQWidget (this);
|
||||
mp_widget->setMouseTracking (true);
|
||||
mp_widget->setAcceptDrops (true);
|
||||
} else {
|
||||
mp_widget = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
m_objects.changed ().add (this, &ViewObjectWidget::objects_changed);
|
||||
m_objects.changed ().add (this, &ViewObjectUI::objects_changed);
|
||||
}
|
||||
|
||||
ViewObjectWidget::~ViewObjectWidget ()
|
||||
ViewObjectUI::~ViewObjectUI ()
|
||||
{
|
||||
// release any mouse grabs now
|
||||
while (m_grabbed.begin () != m_grabbed.end ()) {
|
||||
|
|
@ -248,13 +528,13 @@ ViewObjectWidget::~ViewObjectWidget ()
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::register_service (lay::ViewService *svc)
|
||||
ViewObjectUI::register_service (lay::ViewService *svc)
|
||||
{
|
||||
m_services.push_back (svc);
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::unregister_service (lay::ViewService *svc)
|
||||
ViewObjectUI::unregister_service (lay::ViewService *svc)
|
||||
{
|
||||
if (mp_active_service == svc) {
|
||||
mp_active_service = 0;
|
||||
|
|
@ -272,7 +552,7 @@ ViewObjectWidget::unregister_service (lay::ViewService *svc)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::activate (lay::ViewService *service)
|
||||
ViewObjectUI::activate (lay::ViewService *service)
|
||||
{
|
||||
if (mp_active_service != service) {
|
||||
if (mp_active_service) {
|
||||
|
|
@ -296,22 +576,22 @@ END_PROTECTED
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::set_cursor (lay::Cursor::cursor_shape cursor)
|
||||
ViewObjectUI::set_cursor (lay::Cursor::cursor_shape cursor)
|
||||
{
|
||||
m_cursor = cursor;
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::set_default_cursor (lay::Cursor::cursor_shape cursor)
|
||||
ViewObjectUI::set_default_cursor (lay::Cursor::cursor_shape cursor)
|
||||
{
|
||||
if (cursor != m_default_cursor) {
|
||||
m_default_cursor = cursor;
|
||||
#if defined(HAVE_QT)
|
||||
if (m_cursor == lay::Cursor::none) {
|
||||
if (m_cursor == lay::Cursor::none && mp_widget) {
|
||||
if (m_default_cursor == lay::Cursor::none) {
|
||||
unsetCursor ();
|
||||
mp_widget->unsetCursor ();
|
||||
} else {
|
||||
setCursor (lay::Cursor::qcursor (m_default_cursor));
|
||||
mp_widget->setCursor (lay::Cursor::qcursor (m_default_cursor));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
@ -319,7 +599,7 @@ ViewObjectWidget::set_default_cursor (lay::Cursor::cursor_shape cursor)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::ensure_entered ()
|
||||
ViewObjectUI::ensure_entered ()
|
||||
{
|
||||
if (! m_mouse_inside) {
|
||||
send_enter_event ();
|
||||
|
|
@ -327,29 +607,31 @@ ViewObjectWidget::ensure_entered ()
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::begin_mouse_event (lay::Cursor::cursor_shape cursor)
|
||||
ViewObjectUI::begin_mouse_event (lay::Cursor::cursor_shape cursor)
|
||||
{
|
||||
m_cursor = cursor;
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::end_mouse_event ()
|
||||
ViewObjectUI::end_mouse_event ()
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
if (m_cursor == lay::Cursor::none) {
|
||||
if (m_default_cursor == lay::Cursor::none) {
|
||||
unsetCursor ();
|
||||
} else {
|
||||
setCursor (lay::Cursor::qcursor (m_default_cursor));
|
||||
if (mp_widget) {
|
||||
if (m_cursor == lay::Cursor::none) {
|
||||
if (m_default_cursor == lay::Cursor::none) {
|
||||
mp_widget->unsetCursor ();
|
||||
} else {
|
||||
mp_widget->setCursor (lay::Cursor::qcursor (m_default_cursor));
|
||||
}
|
||||
} else if (m_cursor != lay::Cursor::keep) {
|
||||
mp_widget->setCursor (lay::Cursor::qcursor (m_cursor));
|
||||
}
|
||||
} else if (m_cursor != lay::Cursor::keep) {
|
||||
setCursor (lay::Cursor::qcursor (m_cursor));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_key_press_event (unsigned int key, unsigned int buttons)
|
||||
ViewObjectUI::send_key_press_event (unsigned int key, unsigned int buttons)
|
||||
{
|
||||
bool done = false;
|
||||
if (mp_active_service) {
|
||||
|
|
@ -362,7 +644,7 @@ ViewObjectWidget::send_key_press_event (unsigned int key, unsigned int buttons)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::do_mouse_move ()
|
||||
ViewObjectUI::do_mouse_move ()
|
||||
{
|
||||
m_in_mouse_move = true;
|
||||
|
||||
|
|
@ -443,7 +725,7 @@ ViewObjectWidget::do_mouse_move ()
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_mouse_move_event (const db::DPoint &pt, unsigned int buttons)
|
||||
ViewObjectUI::send_mouse_move_event (const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
ensure_entered ();
|
||||
m_mouse_pos = pt;
|
||||
|
|
@ -452,7 +734,7 @@ ViewObjectWidget::send_mouse_move_event (const db::DPoint &pt, unsigned int butt
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_leave_event ()
|
||||
ViewObjectUI::send_leave_event ()
|
||||
{
|
||||
try {
|
||||
|
||||
|
|
@ -492,7 +774,7 @@ ViewObjectWidget::send_leave_event ()
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_enter_event ()
|
||||
ViewObjectUI::send_enter_event ()
|
||||
{
|
||||
m_mouse_inside = true;
|
||||
|
||||
|
|
@ -527,11 +809,13 @@ ViewObjectWidget::send_enter_event ()
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_mouse_press_event (const db::DPoint &pt, unsigned int buttons)
|
||||
ViewObjectUI::send_mouse_press_event (const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
ensure_entered ();
|
||||
#if defined(HAVE_QT)
|
||||
setFocus ();
|
||||
if (mp_widget) {
|
||||
mp_widget->setFocus ();
|
||||
}
|
||||
#endif
|
||||
|
||||
m_mouse_pos = pt;
|
||||
|
|
@ -543,13 +827,15 @@ ViewObjectWidget::send_mouse_press_event (const db::DPoint &pt, unsigned int but
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_mouse_double_clicked_event (const db::DPoint &pt, unsigned int buttons)
|
||||
ViewObjectUI::send_mouse_double_clicked_event (const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
ensure_entered ();
|
||||
begin_mouse_event (lay::Cursor::none);
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
setFocus ();
|
||||
if (mp_widget) {
|
||||
mp_widget->setFocus ();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool done = false;
|
||||
|
|
@ -587,7 +873,7 @@ ViewObjectWidget::send_mouse_double_clicked_event (const db::DPoint &pt, unsigne
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_mouse_release_event (const db::DPoint &pt, unsigned int /*buttons*/)
|
||||
ViewObjectUI::send_mouse_release_event (const db::DPoint &pt, unsigned int /*buttons*/)
|
||||
{
|
||||
try {
|
||||
|
||||
|
|
@ -651,7 +937,7 @@ ViewObjectWidget::send_mouse_release_event (const db::DPoint &pt, unsigned int /
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::send_wheel_event (int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons)
|
||||
ViewObjectUI::send_wheel_event (int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons)
|
||||
{
|
||||
ensure_entered ();
|
||||
begin_mouse_event ();
|
||||
|
|
@ -687,291 +973,57 @@ ViewObjectWidget::send_wheel_event (int delta, bool horizontal, const db::DPoint
|
|||
}
|
||||
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
|
||||
bool
|
||||
ViewObjectWidget::focusNextPrevChild (bool /*next*/)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::keyPressEvent (QKeyEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
unsigned int buttons = qt_to_buttons (Qt::MouseButtons (), e->modifiers ());
|
||||
send_key_press_event ((unsigned int) e->key (), buttons);
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
DragDropDataBase *get_drag_drop_data (const QMimeData *data)
|
||||
{
|
||||
if (! data || ! data->hasFormat (QString::fromUtf8 (drag_drop_mime_type ()))) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
QByteArray ba = data->data (QString::fromUtf8 (drag_drop_mime_type ()));
|
||||
|
||||
// TODO: provide some global mechanism to register drag & drop classes
|
||||
std::unique_ptr<DragDropDataBase> cd (new CellDragDropData ());
|
||||
if (cd->deserialize (ba)) {
|
||||
return cd.release ();
|
||||
}
|
||||
|
||||
// TODO: more ...
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::dragEnterEvent (QDragEnterEvent *event)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
const DragDropDataBase *dd = get_drag_drop_data (event->mimeData ());
|
||||
if (dd) {
|
||||
|
||||
db::DPoint p = pixel_to_um (db::Point (event->pos ().x (), event->pos ().y ()));
|
||||
|
||||
bool done = drag_enter_event (p, dd);
|
||||
service_iterator svc = begin_services ();
|
||||
while (svc != end_services () && !done) {
|
||||
service_iterator next = svc;
|
||||
++next;
|
||||
done = (*svc)->drag_enter_event (p, dd);
|
||||
svc = next;
|
||||
}
|
||||
|
||||
if (done) {
|
||||
event->acceptProposedAction ();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::dragLeaveEvent (QDragLeaveEvent * /*event*/)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
drag_leave_event ();
|
||||
service_iterator svc = begin_services ();
|
||||
while (svc != end_services ()) {
|
||||
service_iterator next = svc;
|
||||
++next;
|
||||
(*svc)->drag_leave_event ();
|
||||
svc = next;
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::dragMoveEvent (QDragMoveEvent *event)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
const DragDropDataBase *dd = get_drag_drop_data (event->mimeData ());
|
||||
if (dd) {
|
||||
|
||||
db::DPoint p = pixel_to_um (db::Point (event->pos ().x (), event->pos ().y ()));
|
||||
|
||||
bool done = drag_move_event (p, dd);
|
||||
service_iterator svc = begin_services ();
|
||||
while (svc != end_services () && !done) {
|
||||
service_iterator next = svc;
|
||||
++next;
|
||||
done = (*svc)->drag_move_event (p, dd);
|
||||
svc = next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::dropEvent (QDropEvent *event)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
const DragDropDataBase *dd = get_drag_drop_data (event->mimeData ());
|
||||
if (dd) {
|
||||
|
||||
db::DPoint p = pixel_to_um (db::Point (event->pos ().x (), event->pos ().y ()));
|
||||
|
||||
bool done = drop_event (p, dd);
|
||||
service_iterator svc = begin_services ();
|
||||
while (svc != end_services () && !done) {
|
||||
service_iterator next = svc;
|
||||
++next;
|
||||
done = (*svc)->drop_event (p, dd);
|
||||
svc = next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::mouseMoveEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
send_mouse_move_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::mouseDoubleClickEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
send_mouse_double_clicked_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
#if QT_VERSION >= 0x60000
|
||||
ViewObjectWidget::enterEvent (QEnterEvent * /*event*/)
|
||||
#else
|
||||
ViewObjectWidget::enterEvent (QEvent * /*event*/)
|
||||
#endif
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
send_enter_event ();
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::leaveEvent (QEvent * /*event*/)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
send_leave_event ();
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::wheelEvent (QWheelEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
int delta = e->delta ();
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
bool horizontal = (e->orientation () == Qt::Horizontal);
|
||||
#else
|
||||
int delta = e->angleDelta ().y ();
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
bool horizontal = false;
|
||||
#endif
|
||||
|
||||
e->ignore ();
|
||||
|
||||
send_wheel_event (delta, horizontal, p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::mousePressEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
send_mouse_press_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::mouseReleaseEvent (QMouseEvent *e)
|
||||
{
|
||||
BEGIN_PROTECTED
|
||||
|
||||
db::DPoint p;
|
||||
#if QT_VERSION < 0x60000
|
||||
p = db::DPoint (e->pos ().x (), e->pos ().y ());
|
||||
#else
|
||||
p = db::DPoint (e->position ().x (), e->position ().y ());
|
||||
#endif
|
||||
|
||||
send_mouse_release_event (p, qt_to_buttons (e->buttons (), e->modifiers ()));
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void
|
||||
ViewObjectWidget::resize (unsigned int w, unsigned int h)
|
||||
ViewObjectUI::resize (unsigned int w, unsigned int h)
|
||||
{
|
||||
m_widget_width = w;
|
||||
m_widget_height = h;
|
||||
#if defined(HAVE_QT)
|
||||
QWidget::resize (w, h);
|
||||
|
||||
if (mp_widget) {
|
||||
mp_widget->resize (w, h);
|
||||
}
|
||||
|
||||
// don't wait until the layout system informs us - which may never take place when
|
||||
// the widget isn't shown.
|
||||
resize_event (w, h);
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
ViewObjectWidget::widget_height () const
|
||||
ViewObjectUI::widget_height () const
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
return height ();
|
||||
return mp_widget ? mp_widget->height () : m_widget_height;
|
||||
#else
|
||||
return m_widget_height;
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
ViewObjectWidget::widget_width () const
|
||||
ViewObjectUI::widget_width () const
|
||||
{
|
||||
#if defined(HAVE_QT)
|
||||
return width ();
|
||||
return mp_widget ? mp_widget->width () : m_widget_width;
|
||||
#else
|
||||
return m_widget_width;
|
||||
#endif
|
||||
}
|
||||
|
||||
db::DPoint
|
||||
ViewObjectWidget::pixel_to_um (const db::Point &pt) const
|
||||
ViewObjectUI::pixel_to_um (const db::Point &pt) const
|
||||
{
|
||||
return m_trans.inverted () * db::DPoint (pt.x (), widget_height () - 1 - pt.y ());
|
||||
}
|
||||
|
||||
db::DPoint
|
||||
ViewObjectWidget::pixel_to_um (const db::DPoint &pt) const
|
||||
ViewObjectUI::pixel_to_um (const db::DPoint &pt) const
|
||||
{
|
||||
return m_trans.inverted () * db::DPoint (pt.x (), widget_height () - 1 - pt.y ());
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::mouse_event_trans (const db::DCplxTrans &trans)
|
||||
ViewObjectUI::mouse_event_trans (const db::DCplxTrans &trans)
|
||||
{
|
||||
if (trans != m_trans) {
|
||||
m_trans = trans;
|
||||
|
|
@ -984,7 +1036,7 @@ ViewObjectWidget::mouse_event_trans (const db::DCplxTrans &trans)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::drag_cancel ()
|
||||
ViewObjectUI::drag_cancel ()
|
||||
{
|
||||
for (service_iterator svc = begin_services (); svc != end_services (); ++svc) {
|
||||
(*svc)->drag_cancel ();
|
||||
|
|
@ -1005,7 +1057,7 @@ namespace
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::do_render_bg (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas)
|
||||
ViewObjectUI::do_render_bg (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas)
|
||||
{
|
||||
m_needs_update_bg = false;
|
||||
|
||||
|
|
@ -1028,7 +1080,7 @@ ViewObjectWidget::do_render_bg (const lay::Viewport &vp, lay::ViewObjectCanvas &
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::do_render (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas, bool st)
|
||||
ViewObjectUI::do_render (const lay::Viewport &vp, lay::ViewObjectCanvas &canvas, bool st)
|
||||
{
|
||||
if (st) {
|
||||
m_needs_update_static = false;
|
||||
|
|
@ -1046,7 +1098,7 @@ ViewObjectWidget::do_render (const lay::Viewport &vp, lay::ViewObjectCanvas &can
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::grab_mouse (ViewService *obj, bool a)
|
||||
ViewObjectUI::grab_mouse (ViewService *obj, bool a)
|
||||
{
|
||||
obj->m_abs_grab = a; // not used currently
|
||||
|
||||
|
|
@ -1061,7 +1113,7 @@ ViewObjectWidget::grab_mouse (ViewService *obj, bool a)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::ungrab_mouse (ViewService *obj)
|
||||
ViewObjectUI::ungrab_mouse (ViewService *obj)
|
||||
{
|
||||
std::list<ViewService *>::iterator g;
|
||||
for (g = m_grabbed.begin (); g != m_grabbed.end () && *g != obj; ++g) {
|
||||
|
|
@ -1073,7 +1125,7 @@ ViewObjectWidget::ungrab_mouse (ViewService *obj)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::freeze (ViewObject *obj)
|
||||
ViewObjectUI::freeze (ViewObject *obj)
|
||||
{
|
||||
if (! obj->m_static) {
|
||||
obj->m_static = true;
|
||||
|
|
@ -1083,7 +1135,7 @@ ViewObjectWidget::freeze (ViewObject *obj)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::thaw (ViewObject *obj)
|
||||
ViewObjectUI::thaw (ViewObject *obj)
|
||||
{
|
||||
if (obj->m_static) {
|
||||
obj->m_static = false;
|
||||
|
|
@ -1107,10 +1159,36 @@ ViewObjectWidget::image_updated ()
|
|||
m_image_updated = false;
|
||||
return f;
|
||||
}
|
||||
#else
|
||||
void
|
||||
ViewObjectUI::update ()
|
||||
{
|
||||
if (mp_widget) {
|
||||
mp_widget->update ();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
ViewObjectWidget::touch ()
|
||||
ViewObjectUI::resize_event (unsigned int /*w*/, unsigned int /*h*/)
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectUI::paint_event ()
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectUI::gtf_probe ()
|
||||
{
|
||||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
void
|
||||
ViewObjectUI::touch ()
|
||||
{
|
||||
if (! m_needs_update_static) {
|
||||
m_needs_update_static = true;
|
||||
|
|
@ -1119,7 +1197,7 @@ ViewObjectWidget::touch ()
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::touch_bg ()
|
||||
ViewObjectUI::touch_bg ()
|
||||
{
|
||||
if (! m_needs_update_bg) {
|
||||
m_needs_update_bg = true;
|
||||
|
|
@ -1128,7 +1206,7 @@ ViewObjectWidget::touch_bg ()
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::set_dismiss_view_objects (bool dismiss)
|
||||
ViewObjectUI::set_dismiss_view_objects (bool dismiss)
|
||||
{
|
||||
if (dismiss != m_view_objects_dismissed) {
|
||||
m_view_objects_dismissed = dismiss;
|
||||
|
|
@ -1138,14 +1216,14 @@ ViewObjectWidget::set_dismiss_view_objects (bool dismiss)
|
|||
}
|
||||
|
||||
void
|
||||
ViewObjectWidget::objects_changed ()
|
||||
ViewObjectUI::objects_changed ()
|
||||
{
|
||||
touch ();
|
||||
update ();
|
||||
}
|
||||
|
||||
db::DBox
|
||||
ViewObjectWidget::mouse_event_viewport () const
|
||||
ViewObjectUI::mouse_event_viewport () const
|
||||
{
|
||||
db::DPoint p1 = m_trans.inverted () * db::DPoint (0, 0);
|
||||
db::DPoint p2 = m_trans.inverted () * db::DPoint (widget_width (), widget_height ());
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@
|
|||
# include <QPoint>
|
||||
# include <QByteArray>
|
||||
# include <QColor>
|
||||
# include <QWidget>
|
||||
#endif
|
||||
|
||||
#include "tlObjectCollection.h"
|
||||
|
|
@ -48,6 +47,7 @@
|
|||
#include "layBitmapRenderer.h"
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
class QWidget;
|
||||
class QMouseEvent;
|
||||
class QImage;
|
||||
class QDragEnterEvent;
|
||||
|
|
@ -66,7 +66,7 @@ namespace db
|
|||
namespace lay {
|
||||
|
||||
class Viewport;
|
||||
class ViewObjectWidget;
|
||||
class ViewObjectUI;
|
||||
class ViewObjectCanvas;
|
||||
class CanvasPlane;
|
||||
class Bitmap;
|
||||
|
|
@ -77,6 +77,8 @@ class BitmapBuffer;
|
|||
class DragDropDataBase;
|
||||
#endif
|
||||
|
||||
class ViewObjectQWidget;
|
||||
|
||||
/**
|
||||
* @brief A view service
|
||||
*
|
||||
|
|
@ -96,7 +98,7 @@ public:
|
|||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
ViewService (ViewObjectWidget *widget = 0);
|
||||
ViewService (ViewObjectUI *widget = 0);
|
||||
|
||||
/**
|
||||
* @brief Destructor
|
||||
|
|
@ -238,7 +240,7 @@ public:
|
|||
/**
|
||||
* @brief Accessor to the widget pointer
|
||||
*/
|
||||
ViewObjectWidget *widget () const
|
||||
ViewObjectUI *ui () const
|
||||
{
|
||||
return mp_widget;
|
||||
}
|
||||
|
|
@ -289,9 +291,9 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
friend class ViewObjectWidget;
|
||||
friend class ViewObjectUI;
|
||||
|
||||
ViewObjectWidget *mp_widget;
|
||||
ViewObjectUI *mp_widget;
|
||||
bool m_abs_grab;
|
||||
bool m_enabled;
|
||||
};
|
||||
|
|
@ -315,7 +317,7 @@ public:
|
|||
* @param widget The widget object that the object is shown on.
|
||||
* @param _static True, if the object is in frozen mode initially
|
||||
*/
|
||||
BackgroundViewObject (ViewObjectWidget *widget = 0);
|
||||
BackgroundViewObject (ViewObjectUI *widget = 0);
|
||||
|
||||
/**
|
||||
* @brief The destructor
|
||||
|
|
@ -333,9 +335,9 @@ public:
|
|||
/**
|
||||
* @brief Accessor to the widget object pointer
|
||||
*/
|
||||
ViewObjectWidget *widget () const
|
||||
ViewObjectUI *widget () const
|
||||
{
|
||||
return const_cast<ViewObjectWidget *> (mp_widget.get());
|
||||
return const_cast<ViewObjectUI *> (mp_widget.get());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -381,12 +383,12 @@ public:
|
|||
void z_order (int z);
|
||||
|
||||
private:
|
||||
friend class ViewObjectWidget;
|
||||
friend class ViewObjectUI;
|
||||
|
||||
BackgroundViewObject (const BackgroundViewObject &d);
|
||||
BackgroundViewObject &operator= (const BackgroundViewObject &d);
|
||||
|
||||
tl::weak_ptr<ViewObjectWidget> mp_widget;
|
||||
tl::weak_ptr<ViewObjectUI> mp_widget;
|
||||
bool m_visible;
|
||||
int m_z_order;
|
||||
};
|
||||
|
|
@ -415,7 +417,7 @@ public:
|
|||
* @param widget The widget object that the object is shown on.
|
||||
* @param _static True, if the object is in frozen mode initially
|
||||
*/
|
||||
ViewObject (ViewObjectWidget *widget = 0, bool _static = true);
|
||||
ViewObject (ViewObjectUI *widget = 0, bool _static = true);
|
||||
|
||||
/**
|
||||
* @brief The destructor
|
||||
|
|
@ -434,9 +436,9 @@ public:
|
|||
/**
|
||||
* @brief Accessor to the widget object pointer
|
||||
*/
|
||||
ViewObjectWidget *widget () const
|
||||
ViewObjectUI *widget () const
|
||||
{
|
||||
return const_cast<ViewObjectWidget *> (mp_widget.get());
|
||||
return const_cast<ViewObjectUI *> (mp_widget.get());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -496,12 +498,12 @@ public:
|
|||
void freeze ();
|
||||
|
||||
private:
|
||||
friend class ViewObjectWidget;
|
||||
friend class ViewObjectUI;
|
||||
|
||||
ViewObject (const ViewObject &d);
|
||||
ViewObject &operator= (const ViewObject &d);
|
||||
|
||||
tl::weak_ptr<ViewObjectWidget> mp_widget;
|
||||
tl::weak_ptr<ViewObjectUI> mp_widget;
|
||||
bool m_static;
|
||||
bool m_visible;
|
||||
bool m_dismissable;
|
||||
|
|
@ -568,10 +570,7 @@ enum KeyCodes {
|
|||
* painting.
|
||||
*/
|
||||
|
||||
class LAYBASIC_PUBLIC ViewObjectWidget :
|
||||
#if defined(HAVE_QT)
|
||||
public QWidget,
|
||||
#endif
|
||||
class LAYBASIC_PUBLIC ViewObjectUI :
|
||||
public tl::Object
|
||||
{
|
||||
public:
|
||||
|
|
@ -583,12 +582,12 @@ public:
|
|||
/**
|
||||
* @brief ctor
|
||||
*/
|
||||
ViewObjectWidget ();
|
||||
ViewObjectUI ();
|
||||
|
||||
/**
|
||||
* @brief dtor
|
||||
*/
|
||||
~ViewObjectWidget ();
|
||||
~ViewObjectUI ();
|
||||
|
||||
/**
|
||||
* @brief Cancel all drag operations
|
||||
|
|
@ -952,6 +951,16 @@ public:
|
|||
bool image_updated ();
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
/**
|
||||
* @brief Gets the QWidget representing this canvas visually in Qt
|
||||
*/
|
||||
QWidget *widget ()
|
||||
{
|
||||
return mp_widget;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief External entry point for key press event generation
|
||||
*/
|
||||
|
|
@ -992,79 +1001,14 @@ public:
|
|||
*/
|
||||
void send_wheel_event (int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons);
|
||||
|
||||
/**
|
||||
* @brief Resizes the widget
|
||||
*/
|
||||
void resize (unsigned int w, unsigned int h);
|
||||
|
||||
protected:
|
||||
#if defined(HAVE_QT)
|
||||
/**
|
||||
* @brief Qt focus event handler
|
||||
*/
|
||||
bool focusNextPrevChild (bool next);
|
||||
friend class ViewObjectQWidget;
|
||||
|
||||
/**
|
||||
* @brief Qt keyboard event handler
|
||||
*/
|
||||
void keyPressEvent (QKeyEvent *e);
|
||||
|
||||
/**
|
||||
* @brief Qt mouse move event handler
|
||||
*/
|
||||
void mouseMoveEvent (QMouseEvent *e);
|
||||
|
||||
/**
|
||||
* @brief Qt mouse leave event handler
|
||||
*/
|
||||
void leaveEvent (QEvent *e);
|
||||
|
||||
/**
|
||||
* @brief Qt mouse enter event handler
|
||||
*/
|
||||
#if QT_VERSION >= 0x60000
|
||||
void enterEvent (QEnterEvent *e);
|
||||
#else
|
||||
void enterEvent (QEvent *e);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Qt mouse button press event handler
|
||||
*/
|
||||
void mousePressEvent (QMouseEvent *e);
|
||||
|
||||
/**
|
||||
* @brief Qt mouse button double-click event handler
|
||||
*/
|
||||
void mouseDoubleClickEvent (QMouseEvent *e);
|
||||
|
||||
/**
|
||||
* @brief Qt mouse button release event handler
|
||||
*/
|
||||
void mouseReleaseEvent (QMouseEvent *e);
|
||||
|
||||
/**
|
||||
* @brief Qt drag enter event handler
|
||||
*/
|
||||
void dragEnterEvent (QDragEnterEvent *event);
|
||||
|
||||
/**
|
||||
* @brief Qt drag leave event handler
|
||||
*/
|
||||
void dragLeaveEvent (QDragLeaveEvent *event);
|
||||
|
||||
/**
|
||||
* @brief Qt drag enter event handler
|
||||
*/
|
||||
void dragMoveEvent (QDragMoveEvent *event);
|
||||
|
||||
/**
|
||||
* @brief Qt drop event handler
|
||||
*/
|
||||
void dropEvent (QDropEvent *event);
|
||||
|
||||
/**
|
||||
* @brief Qt mouse wheel event handler
|
||||
*/
|
||||
void wheelEvent (QWheelEvent *e);
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_QT)
|
||||
/**
|
||||
* @brief Emulates the update() method in the non-Qt case
|
||||
*
|
||||
|
|
@ -1072,7 +1016,6 @@ protected:
|
|||
* update needed flag.
|
||||
*/
|
||||
void update ();
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Set the transformation for mouse events
|
||||
|
|
@ -1080,15 +1023,28 @@ protected:
|
|||
void mouse_event_trans (const db::DCplxTrans &trans);
|
||||
|
||||
/**
|
||||
* @brief Resizes the widget
|
||||
* @brief Gets called when the view is resized
|
||||
*/
|
||||
void resize (unsigned int w, unsigned int h);
|
||||
virtual void resize_event (unsigned int w, unsigned int h);
|
||||
|
||||
/**
|
||||
* @brief Receives the paint event from Qt
|
||||
*/
|
||||
virtual void paint_event ();
|
||||
|
||||
/**
|
||||
* @brief GTF probe event
|
||||
*/
|
||||
virtual void gtf_probe ();
|
||||
|
||||
private:
|
||||
friend class lay::ViewObject;
|
||||
friend class lay::ViewService;
|
||||
friend class lay::BackgroundViewObject;
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
QWidget *mp_widget;
|
||||
#endif
|
||||
tl::weak_collection<lay::ViewObject> m_objects;
|
||||
tl::weak_collection<lay::BackgroundViewObject> m_background_objects;
|
||||
std::list<lay::ViewService *> m_services;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ namespace lay
|
|||
// ZoomService implementation
|
||||
|
||||
ZoomService::ZoomService (lay::LayoutViewBase *view)
|
||||
: lay::ViewService (view->view_object_widget ()),
|
||||
: lay::ViewService (view->canvas ()),
|
||||
mp_view (view),
|
||||
mp_box (0),
|
||||
m_color (0)
|
||||
|
|
@ -50,7 +50,7 @@ ZoomService::drag_cancel ()
|
|||
delete mp_box;
|
||||
mp_box = 0;
|
||||
}
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -118,7 +118,7 @@ bool
|
|||
ZoomService::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio)
|
||||
{
|
||||
if (! prio && (buttons & lay::RightButton) != 0) {
|
||||
db::DBox vp = widget ()->mouse_event_viewport ();
|
||||
db::DBox vp = ui ()->mouse_event_viewport ();
|
||||
if (mp_view && vp.contains (p)) {
|
||||
db::DVector d = (vp.p2 () - vp.p1 ()) * 0.5;
|
||||
mp_view->zoom_box (db::DBox (p - d, p + d));
|
||||
|
|
@ -132,21 +132,21 @@ ZoomService::mouse_release_event (const db::DPoint & /*p*/, unsigned int /*butto
|
|||
{
|
||||
if (prio) {
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
|
||||
if (mp_box) {
|
||||
|
||||
delete mp_box;
|
||||
mp_box = 0;
|
||||
|
||||
db::DBox vp = widget ()->mouse_event_viewport ();
|
||||
db::DBox vp = ui ()->mouse_event_viewport ();
|
||||
db::DVector d = (vp.p2 () - vp.p1 ()) * 0.5;
|
||||
|
||||
if (mp_view) {
|
||||
|
||||
// we need to use the original screen coordinate to find the move direction
|
||||
db::DPoint p1s = widget ()->mouse_event_trans ().trans (m_p1);
|
||||
db::DPoint p2s = widget ()->mouse_event_trans ().trans (m_p2);
|
||||
db::DPoint p1s = ui ()->mouse_event_trans ().trans (m_p1);
|
||||
db::DPoint p2s = ui ()->mouse_event_trans ().trans (m_p2);
|
||||
|
||||
if (p2s.x () > p1s.x () && p1s.y () < p2s.y ()) {
|
||||
|
||||
|
|
@ -185,7 +185,7 @@ ZoomService::wheel_event (int delta, bool /*horizontal*/, const db::DPoint &p, u
|
|||
// Only act without the mouse being grabbed.
|
||||
if (! prio) {
|
||||
|
||||
db::DBox vp = widget ()->mouse_event_viewport ();
|
||||
db::DBox vp = ui ()->mouse_event_viewport ();
|
||||
if (mp_view && vp.contains (p) && vp.width () > 0 && vp.height () > 0) {
|
||||
|
||||
enum { horizontal, vertical, zoom } direction = zoom;
|
||||
|
|
@ -260,12 +260,12 @@ ZoomService::begin_pan (const db::DPoint &pos)
|
|||
mp_box = 0;
|
||||
|
||||
m_p1 = pos;
|
||||
m_vp = widget ()->mouse_event_viewport ();
|
||||
m_vp = ui ()->mouse_event_viewport ();
|
||||
|
||||
// store one state which we are going to update
|
||||
mp_view->zoom_box (m_vp);
|
||||
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -277,9 +277,9 @@ ZoomService::begin (const db::DPoint &pos)
|
|||
|
||||
m_p1 = pos;
|
||||
m_p2 = pos;
|
||||
mp_box = new lay::RubberBox (widget (), m_color, pos, pos);
|
||||
mp_box = new lay::RubberBox (ui (), m_color, pos, pos);
|
||||
|
||||
widget ()->grab_mouse (this, true);
|
||||
ui ()->grab_mouse (this, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ SOURCES += \
|
|||
layViewOp.cc \
|
||||
layViewport.cc \
|
||||
layZoomBox.cc \
|
||||
layUtils.cc \
|
||||
|
||||
HEADERS += \
|
||||
laybasicConfig.h \
|
||||
|
|
@ -136,6 +137,7 @@ HEADERS += \
|
|||
layViewOp.h \
|
||||
layViewport.h \
|
||||
layZoomBox.h \
|
||||
layUtils.h \
|
||||
laybasicCommon.h \
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include "tlAlgorithm.h"
|
||||
#include "layMarker.h"
|
||||
#include "layQtTools.h"
|
||||
#include "layUtils.h"
|
||||
#include "tlExceptions.h"
|
||||
|
||||
namespace lay
|
||||
|
|
@ -82,7 +83,11 @@ public:
|
|||
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new BrowseInstancesForm (root, view);
|
||||
if (lay::has_gui ()) {
|
||||
return new BrowseInstancesForm (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "tlAlgorithm.h"
|
||||
#include "layQtTools.h"
|
||||
#include "layMarker.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
|
||||
namespace lay
|
||||
|
|
@ -74,17 +75,21 @@ public:
|
|||
return new BrowseShapesConfigPage (parent);
|
||||
}
|
||||
|
||||
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const
|
||||
{
|
||||
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
||||
menu_entries.push_back (lay::separator ("browser_group", "tools_menu.end"));
|
||||
menu_entries.push_back (lay::menu_item ("browse_shapes::show", "browse_shapes", "tools_menu.end", tl::to_string (QObject::tr ("Browse Shapes"))));
|
||||
}
|
||||
virtual void get_menu_entries (std::vector<lay::MenuEntry> &menu_entries) const
|
||||
{
|
||||
lay::PluginDeclaration::get_menu_entries (menu_entries);
|
||||
menu_entries.push_back (lay::separator ("browser_group", "tools_menu.end"));
|
||||
menu_entries.push_back (lay::menu_item ("browse_shapes::show", "browse_shapes", "tools_menu.end", tl::to_string (QObject::tr ("Browse Shapes"))));
|
||||
}
|
||||
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new BrowseShapesForm (root, view);
|
||||
}
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
if (lay::has_gui ()) {
|
||||
return new BrowseShapesForm (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static tl::RegisteredClass<lay::PluginDeclaration> config_decl (new BrowseShapesPluginDeclaration (), 10000, "BrowseShapesPlugin");
|
||||
|
|
|
|||
|
|
@ -890,7 +890,7 @@ HierarchyControlPanel::do_update_content (int cv_index)
|
|||
header->setVisible (split_mode);
|
||||
cl_ly->addWidget (header);
|
||||
|
||||
HCPCellTreeWidget *cell_list = new HCPCellTreeWidget (cl_frame, "tree", mp_view->view_object_widget ());
|
||||
HCPCellTreeWidget *cell_list = new HCPCellTreeWidget (cl_frame, "tree", mp_view->canvas ()->widget ());
|
||||
cl_ly->addWidget (cell_list);
|
||||
cell_list->setModel (new CellTreeModel (cell_list, mp_view, cv_index, m_flat ? CellTreeModel::Flat : 0, 0, m_sorting));
|
||||
cell_list->setUniformRowHeights (true);
|
||||
|
|
|
|||
|
|
@ -632,7 +632,7 @@ LibrariesView::do_update_content (int lib_index)
|
|||
header->setVisible (split_mode);
|
||||
cl_ly->addWidget (header);
|
||||
|
||||
LibraryTreeWidget *cell_list = new LibraryTreeWidget (cl_frame, "tree", mp_view->view_object_widget ());
|
||||
LibraryTreeWidget *cell_list = new LibraryTreeWidget (cl_frame, "tree", mp_view->canvas ()->widget ());
|
||||
cl_ly->addWidget (cell_list);
|
||||
cell_list->setModel (new CellTreeModel (cell_list, m_libraries [i].get (), CellTreeModel::Flat | CellTreeModel::TopCells | CellTreeModel::BasicCells | CellTreeModel::WithVariants | CellTreeModel::WithIcons, 0));
|
||||
cell_list->setUniformRowHeights (true);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#include "layNetlistBrowserDialog.h"
|
||||
#include "layConverters.h"
|
||||
#include "layDispatcher.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
#include "ui_NetlistBrowserConfigPage.h"
|
||||
#include "ui_NetlistBrowserConfigPage2.h"
|
||||
|
|
@ -384,7 +385,11 @@ public:
|
|||
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new lay::NetlistBrowserDialog (root, view);
|
||||
if (has_gui ()) {
|
||||
return new lay::NetlistBrowserDialog (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ extern const std::string cfg_l2ndb_window_state;
|
|||
|
||||
NetlistBrowserDialog::NetlistBrowserDialog (lay::Dispatcher *root, LayoutViewBase *vw)
|
||||
: lay::Browser (root, vw),
|
||||
lay::ViewService (vw->view_object_widget ()),
|
||||
lay::ViewService (vw->canvas ()),
|
||||
m_window (lay::NetlistBrowserConfig::FitNet),
|
||||
m_window_dim (0.0),
|
||||
m_max_shape_count (0),
|
||||
|
|
@ -225,7 +225,7 @@ void
|
|||
NetlistBrowserDialog::probe_net (const db::DPoint &p, bool trace_path)
|
||||
{
|
||||
// prepare for the net tracing
|
||||
double l = double (view ()->search_range ()) / widget ()->mouse_event_trans ().mag ();
|
||||
double l = double (view ()->search_range ()) / ui ()->mouse_event_trans ().mag ();
|
||||
|
||||
db::DBox start_search_box = db::DBox (p, p).enlarged (db::DVector (l, l));
|
||||
|
||||
|
|
@ -348,7 +348,7 @@ NetlistBrowserDialog::release_mouse ()
|
|||
{
|
||||
m_mouse_state = 0;
|
||||
view ()->message ();
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
}
|
||||
|
||||
lay::ViewService *
|
||||
|
|
@ -365,7 +365,7 @@ BEGIN_PROTECTED
|
|||
m_mouse_state = 1;
|
||||
|
||||
view ()->message (tl::to_string (QObject::tr ("Click on a point in the net")));
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
|
||||
END_PROTECTED
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include "dbLayout.h"
|
||||
#include "layConverters.h"
|
||||
#include "layDispatcher.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
#include "ui_MarkerBrowserConfigPage.h"
|
||||
#include "ui_MarkerBrowserConfigPage2.h"
|
||||
|
|
@ -309,7 +310,11 @@ public:
|
|||
|
||||
virtual lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new rdb::MarkerBrowserDialog (root, view);
|
||||
if (lay::has_gui ()) {
|
||||
return new rdb::MarkerBrowserDialog (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ static tl::RegisteredClass<lay::PluginDeclaration> config_decl (new GridNetPlugi
|
|||
// Implementation of the GridNet object
|
||||
|
||||
GridNet::GridNet (LayoutViewBase *view)
|
||||
: lay::BackgroundViewObject (view->view_object_widget ()),
|
||||
: lay::BackgroundViewObject (view->canvas ()),
|
||||
lay::Plugin (view),
|
||||
mp_view (view),
|
||||
m_visible (false), m_show_ruler (true), m_grid (1.0),
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@
|
|||
#include "layBookmarksView.h"
|
||||
#include "layEditorOptionsFrame.h"
|
||||
#include "layEditorOptionsPages.h"
|
||||
#include "layUtils.h"
|
||||
#include "dbClipboard.h"
|
||||
#include "dbLayout.h"
|
||||
#include "dbLayoutUtils.h"
|
||||
|
|
@ -263,12 +264,6 @@ LayoutView::init_menu ()
|
|||
void
|
||||
LayoutView::init_ui (QWidget *parent, const char *name)
|
||||
{
|
||||
#if QT_VERSION < 0x50000
|
||||
bool has_gui = (QApplication::type () != Qt::Tty);
|
||||
#else
|
||||
bool has_gui = (qGuiApp != 0);
|
||||
#endif
|
||||
|
||||
m_activated = true;
|
||||
m_always_show_source = false;
|
||||
m_always_show_ld = true;
|
||||
|
|
@ -290,18 +285,18 @@ LayoutView::init_ui (QWidget *parent, const char *name)
|
|||
mp_min_hier_spbx = 0;
|
||||
mp_max_hier_spbx = 0;
|
||||
|
||||
if (has_gui) {
|
||||
if (lay::has_gui ()) {
|
||||
|
||||
mp_widget = new LayoutViewFrame (parent, this);
|
||||
mp_widget->setObjectName (QString::fromUtf8 (name));
|
||||
view_object_widget ()->setParent (mp_widget);
|
||||
canvas ()->widget ()->setParent (mp_widget);
|
||||
|
||||
mp_connector = new LayoutViewSignalConnector (mp_widget, this);
|
||||
|
||||
QVBoxLayout *vbl = new QVBoxLayout (mp_widget);
|
||||
vbl->setContentsMargins (0, 0, 0, 0);
|
||||
vbl->setSpacing (0);
|
||||
vbl->addWidget (view_object_widget ());
|
||||
vbl->addWidget (canvas ()->widget ());
|
||||
|
||||
if ((options () & LV_NoHierarchyPanel) == 0 && (options () & LV_Naked) == 0) {
|
||||
|
||||
|
|
@ -997,33 +992,53 @@ LayoutView::cut ()
|
|||
int
|
||||
LayoutView::active_cellview_index () const
|
||||
{
|
||||
return mp_hierarchy_panel->active ();
|
||||
if (mp_hierarchy_panel) {
|
||||
return mp_hierarchy_panel->active ();
|
||||
} else {
|
||||
return LayoutViewBase::active_cellview_index ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LayoutView::set_active_cellview_index (int index)
|
||||
{
|
||||
if (index >= 0 && index < int (cellviews ())) {
|
||||
mp_hierarchy_panel->select_active (index);
|
||||
if (mp_hierarchy_panel) {
|
||||
mp_hierarchy_panel->select_active (index);
|
||||
} else {
|
||||
LayoutViewBase::set_active_cellview_index (index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LayoutView::selected_cells_paths (int cv_index, std::vector<cell_path_type> &paths) const
|
||||
{
|
||||
mp_hierarchy_panel->selected_cells (cv_index, paths);
|
||||
if (mp_hierarchy_panel) {
|
||||
mp_hierarchy_panel->selected_cells (cv_index, paths);
|
||||
} else {
|
||||
LayoutViewBase::selected_cells_paths (cv_index, paths);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LayoutView::current_cell_path (int cv_index, cell_path_type &path) const
|
||||
{
|
||||
mp_hierarchy_panel->current_cell (cv_index, path);
|
||||
if (mp_hierarchy_panel) {
|
||||
mp_hierarchy_panel->current_cell (cv_index, path);
|
||||
} else {
|
||||
LayoutViewBase::current_cell_path (cv_index, path);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LayoutView::set_current_cell_path (int cv_index, const cell_path_type &path)
|
||||
{
|
||||
mp_hierarchy_panel->set_current_cell (cv_index, path);
|
||||
if (mp_hierarchy_panel) {
|
||||
mp_hierarchy_panel->set_current_cell (cv_index, path);
|
||||
} else {
|
||||
LayoutViewBase::set_current_cell_path (cv_index, path);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "layPlugin.h"
|
||||
#include "layLayoutViewBase.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
namespace lay
|
||||
{
|
||||
|
|
@ -36,7 +37,11 @@ public:
|
|||
DiffPlugin (Plugin *parent, lay::LayoutViewBase *view)
|
||||
: lay::Plugin (parent), mp_view (view)
|
||||
{
|
||||
mp_dialog = new lay::DiffToolDialog (0);
|
||||
if (lay::has_gui ()) {
|
||||
mp_dialog = new lay::DiffToolDialog (0);
|
||||
} else {
|
||||
mp_dialog = 0;
|
||||
}
|
||||
}
|
||||
|
||||
~DiffPlugin ()
|
||||
|
|
@ -49,7 +54,7 @@ public:
|
|||
{
|
||||
if (symbol == "lay::diff_tool") {
|
||||
|
||||
if (mp_dialog->exec_dialog (mp_view)) {
|
||||
if (mp_dialog && mp_dialog->exec_dialog (mp_view)) {
|
||||
|
||||
// ... implementation is in layDiffToolDialog.cc ...
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ namespace lay
|
|||
|
||||
NetTracerDialog::NetTracerDialog (lay::Dispatcher *root, LayoutViewBase *view)
|
||||
: lay::Browser (root, view, "net_tracer_dialog"),
|
||||
lay::ViewService (view->view_object_widget ()),
|
||||
lay::ViewService (view->canvas ()),
|
||||
m_cv_index (0),
|
||||
m_net_index (1),
|
||||
m_window (lay::NTFitNet),
|
||||
|
|
@ -170,7 +170,7 @@ NetTracerDialog::mouse_click_event (const db::DPoint &p, unsigned int buttons, b
|
|||
// prepare for the net tracing
|
||||
clear_markers ();
|
||||
|
||||
double l = double (view ()->search_range ()) / widget ()->mouse_event_trans ().mag ();
|
||||
double l = double (view ()->search_range ()) / ui ()->mouse_event_trans ().mag ();
|
||||
|
||||
db::DBox start_search_box = db::DBox (p, p).enlarged (db::DVector (l, l));
|
||||
|
||||
|
|
@ -1125,7 +1125,7 @@ BEGIN_PROTECTED
|
|||
net_list->setCurrentItem (0);
|
||||
m_mouse_state = 2;
|
||||
view ()->message (tl::to_string (QObject::tr ("Click on the first point in the net")));
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
|
|
@ -1137,7 +1137,7 @@ BEGIN_PROTECTED
|
|||
net_list->setCurrentItem (0);
|
||||
m_mouse_state = 1;
|
||||
view ()->message (tl::to_string (QObject::tr ("Click on a point in the net")));
|
||||
widget ()->grab_mouse (this, false);
|
||||
ui ()->grab_mouse (this, false);
|
||||
END_PROTECTED
|
||||
}
|
||||
|
||||
|
|
@ -1160,7 +1160,7 @@ NetTracerDialog::release_mouse ()
|
|||
add2_pb->setChecked (false);
|
||||
m_mouse_state = 0;
|
||||
view ()->message ();
|
||||
widget ()->ungrab_mouse (this);
|
||||
ui ()->ungrab_mouse (this);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "layConverters.h"
|
||||
#include "layCellView.h"
|
||||
#include "layLayoutView.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
#include "gsiDecl.h"
|
||||
|
||||
|
|
@ -78,7 +79,11 @@ public:
|
|||
|
||||
virtual lay::Plugin *create_plugin (db::Manager * /*manager*/, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new NetTracerDialog (root, view);
|
||||
if (lay::has_gui ()) {
|
||||
return new NetTracerDialog (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#include "layDispatcher.h"
|
||||
|
||||
#include "layPlugin.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
#include <QSurfaceFormat>
|
||||
|
||||
|
|
@ -69,7 +70,11 @@ public:
|
|||
|
||||
lay::Plugin *create_plugin (db::Manager *, lay::Dispatcher *root, lay::LayoutViewBase *view) const
|
||||
{
|
||||
return new D25View (root, view);
|
||||
if (lay::has_gui ()) {
|
||||
return new D25View (root, view);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "layPlugin.h"
|
||||
#include "layLayoutView.h"
|
||||
#include "layUtils.h"
|
||||
|
||||
namespace lay
|
||||
{
|
||||
|
|
@ -38,7 +39,11 @@ public:
|
|||
XORPlugin (Plugin *parent, lay::LayoutViewBase *view)
|
||||
: lay::Plugin (parent), mp_view (view)
|
||||
{
|
||||
mp_dialog = new lay::XORToolDialog (0);
|
||||
if (lay::has_gui ()) {
|
||||
mp_dialog = new lay::XORToolDialog (0);
|
||||
} else {
|
||||
mp_dialog = 0;
|
||||
}
|
||||
}
|
||||
|
||||
~XORPlugin ()
|
||||
|
|
@ -51,7 +56,7 @@ public:
|
|||
{
|
||||
if (symbol == "lay::xor_tool") {
|
||||
|
||||
if (mp_dialog->exec_dialog (mp_view)) {
|
||||
if (mp_dialog && mp_dialog->exec_dialog (mp_view)) {
|
||||
|
||||
// ... implementation is in layXORToolDialog.cc ...
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue