diff --git a/src/ant/ant/antPropertiesPage.cc b/src/ant/ant/antPropertiesPage.cc index 1c7794db4..b381c9c11 100644 --- a/src/ant/ant/antPropertiesPage.cc +++ b/src/ant/ant/antPropertiesPage.cc @@ -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); diff --git a/src/ant/ant/antService.cc b/src/ant/ant/antService.cc index e9d6401c5..1c366a983 100644 --- a/src/ant/ant/antService.cc +++ b/src/ant/ant/antService.cc @@ -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); diff --git a/src/edt/edt/edtMainService.cc b/src/edt/edt/edtMainService.cc index 3ccc53648..be134d55e 100644 --- a/src/edt/edt/edtMainService.cc +++ b/src/edt/edt/edtMainService.cc @@ -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 > 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::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 (view ()->view_object_widget ()->active_service ()); + edt::Service *es = dynamic_cast (view ()->canvas ()->active_service ()); if (es) { es->tap (pt); } diff --git a/src/edt/edt/edtPartialService.cc b/src/edt/edt/edtPartialService.cc index 7f89ef2fa..80fd629c9 100644 --- a/src/edt/edt/edtPartialService.cc +++ b/src/edt/edt/edtPartialService.cc @@ -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::vector > 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 diff --git a/src/edt/edt/edtService.cc b/src/edt/edt/edtService.cc index 7e3320bee..7ff291a1b 100644 --- a/src/edt/edt/edtService.cc +++ b/src/edt/edt/edtService.cc @@ -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 diff --git a/src/img/img/imgLandmarksDialog.cc b/src/img/img/imgLandmarksDialog.cc index 4be4ba291..4b8d1f886 100644 --- a/src/img/img/imgLandmarksDialog.cc +++ b/src/img/img/imgLandmarksDialog.cc @@ -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*/) diff --git a/src/img/img/imgNavigator.cc b/src/img/img/imgNavigator.cc index d01f189a9..b9ce6bb92 100644 --- a/src/img/img/imgNavigator.cc +++ b/src/img/img/imgNavigator.cc @@ -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 diff --git a/src/img/img/imgService.cc b/src/img/img/imgService.cc index de9fd331f..6a120dce9 100644 --- a/src/img/img/imgService.cc +++ b/src/img/img/imgService.cc @@ -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), diff --git a/src/lay/lay/layClipDialog.cc b/src/lay/lay/layClipDialog.cc index 2c28187e0..aa0405d8c 100644 --- a/src/lay/lay/layClipDialog.cc +++ b/src/lay/lay/layClipDialog.cc @@ -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 config_decl (new ClipDialogPluginDeclaration (), 20000, "ClipDialogPlugin"); diff --git a/src/lay/lay/layFillDialog.cc b/src/lay/lay/layFillDialog.cc index 458c90afa..2104b9a9b 100644 --- a/src/lay/lay/layFillDialog.cc +++ b/src/lay/lay/layFillDialog.cc @@ -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; + } } }; diff --git a/src/lay/lay/layNavigator.cc b/src/lay/lay/layNavigator.cc index 6977e9702..7c4be5bc2 100644 --- a/src/lay/lay/layNavigator.cc +++ b/src/lay/lay/layNavigator.cc @@ -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); diff --git a/src/lay/lay/laySearchReplacePlugin.cc b/src/lay/lay/laySearchReplacePlugin.cc index 6c4be161b..4f797193d 100644 --- a/src/lay/lay/laySearchReplacePlugin.cc +++ b/src/lay/lay/laySearchReplacePlugin.cc @@ -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; + } } }; diff --git a/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc b/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc index b6ec122f3..745416c09 100644 --- a/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc +++ b/src/laybasic/laybasic/gsiDeclLayLayoutViewBase.cc @@ -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 { diff --git a/src/laybasic/laybasic/gsiDeclLayPlugin.cc b/src/laybasic/laybasic/gsiDeclLayPlugin.cc index bce28aa52..cee6e63cf 100644 --- a/src/laybasic/laybasic/gsiDeclLayPlugin.cc +++ b/src/laybasic/laybasic/gsiDeclLayPlugin.cc @@ -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); } } diff --git a/src/laybasic/laybasic/layEditorServiceBase.cc b/src/laybasic/laybasic/layEditorServiceBase.cc index ea6f5fcff..ac1021ee3 100644 --- a/src/laybasic/laybasic/layEditorServiceBase.cc +++ b/src/laybasic/laybasic/layEditorServiceBase.cc @@ -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 } diff --git a/src/laybasic/laybasic/layLayoutCanvas.cc b/src/laybasic/laybasic/layLayoutCanvas.cc index df8448c3f..c7a55d06f 100644 --- a/src/laybasic/laybasic/layLayoutCanvas.cc +++ b/src/laybasic/laybasic/layLayoutCanvas.cc @@ -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 diff --git a/src/laybasic/laybasic/layLayoutCanvas.h b/src/laybasic/laybasic/layLayoutCanvas.h index 2024692e1..2a9326b4a 100644 --- a/src/laybasic/laybasic/layLayoutCanvas.h +++ b/src/laybasic/laybasic/layLayoutCanvas.h @@ -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 (); }; diff --git a/src/laybasic/laybasic/layLayoutViewBase.h b/src/laybasic/laybasic/layLayoutViewBase.h index 0e1fa29a7..81379af57 100644 --- a/src/laybasic/laybasic/layLayoutViewBase.h +++ b/src/laybasic/laybasic/layLayoutViewBase.h @@ -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 (); diff --git a/src/laybasic/laybasic/layMarker.cc b/src/laybasic/laybasic/layMarker.cc index 93b298099..7046745bb 100644 --- a/src/laybasic/laybasic/layMarker.cc +++ b/src/laybasic/laybasic/layMarker.cc @@ -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 .. diff --git a/src/laybasic/laybasic/layMouseTracker.cc b/src/laybasic/laybasic/layMouseTracker.cc index 9afc48058..8c10f0793 100644 --- a/src/laybasic/laybasic/layMouseTracker.cc +++ b/src/laybasic/laybasic/layMouseTracker.cc @@ -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 (); diff --git a/src/laybasic/laybasic/layMove.cc b/src/laybasic/laybasic/layMove.cc index bc22b0332..f5e48a4a5 100644 --- a/src/laybasic/laybasic/layMove.cc +++ b/src/laybasic/laybasic/layMove.cc @@ -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; diff --git a/src/laybasic/laybasic/layRubberBox.cc b/src/laybasic/laybasic/layRubberBox.cc index 6f0cb8c07..6930c5774 100644 --- a/src/laybasic/laybasic/layRubberBox.cc +++ b/src/laybasic/laybasic/layRubberBox.cc @@ -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) { } diff --git a/src/laybasic/laybasic/layRubberBox.h b/src/laybasic/laybasic/layRubberBox.h index 020084f59..8893fe68a 100644 --- a/src/laybasic/laybasic/layRubberBox.h +++ b/src/laybasic/laybasic/layRubberBox.h @@ -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); diff --git a/src/laybasic/laybasic/laySelector.cc b/src/laybasic/laybasic/laySelector.cc index 1db1fd427..5ddb52021 100644 --- a/src/laybasic/laybasic/laySelector.cc +++ b/src/laybasic/laybasic/laySelector.cc @@ -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); } } diff --git a/src/laybasic/laybasic/layUtils.cc b/src/laybasic/laybasic/layUtils.cc new file mode 100644 index 000000000..ba6084aad --- /dev/null +++ b/src/laybasic/laybasic/layUtils.cc @@ -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 +#endif + +namespace lay { + +bool +has_gui () +{ +#if defined(HAVE_QT) +#if QT_VERSION < 0x50000 + return (QApplication::type () != Qt::Tty); +#else + return (dynamic_cast (QCoreApplication::instance ()) != 0); +#endif +#else + return false; +#endif +} + +} diff --git a/src/laybasic/laybasic/layUtils.h b/src/laybasic/laybasic/layUtils.h new file mode 100644 index 000000000..d5aacb692 --- /dev/null +++ b/src/laybasic/laybasic/layUtils.h @@ -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 + diff --git a/src/laybasic/laybasic/layViewObject.cc b/src/laybasic/laybasic/layViewObject.cc index 9577f9fcb..0e5f97719 100644 --- a/src/laybasic/laybasic/layViewObject.cc +++ b/src/laybasic/laybasic/layViewObject.cc @@ -25,7 +25,8 @@ # include # include # include -# include +# include +# include #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 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 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::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 ()); diff --git a/src/laybasic/laybasic/layViewObject.h b/src/laybasic/laybasic/layViewObject.h index e6997d139..242558d00 100644 --- a/src/laybasic/laybasic/layViewObject.h +++ b/src/laybasic/laybasic/layViewObject.h @@ -36,7 +36,6 @@ # include # include # include -# include #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 (mp_widget.get()); + return const_cast (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 mp_widget; + tl::weak_ptr 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 (mp_widget.get()); + return const_cast (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 mp_widget; + tl::weak_ptr 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 m_objects; tl::weak_collection m_background_objects; std::list m_services; diff --git a/src/laybasic/laybasic/layZoomBox.cc b/src/laybasic/laybasic/layZoomBox.cc index 26538d076..42f1106cb 100644 --- a/src/laybasic/laybasic/layZoomBox.cc +++ b/src/laybasic/laybasic/layZoomBox.cc @@ -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); } } diff --git a/src/laybasic/laybasic/laybasic.pro b/src/laybasic/laybasic/laybasic.pro index 33b10cf08..479a41d07 100644 --- a/src/laybasic/laybasic/laybasic.pro +++ b/src/laybasic/laybasic/laybasic.pro @@ -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 \ diff --git a/src/layui/layui/layBrowseInstancesForm.cc b/src/layui/layui/layBrowseInstancesForm.cc index b1946ebb9..c7267c78c 100644 --- a/src/layui/layui/layBrowseInstancesForm.cc +++ b/src/layui/layui/layBrowseInstancesForm.cc @@ -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; + } } }; diff --git a/src/layui/layui/layBrowseShapesForm.cc b/src/layui/layui/layBrowseShapesForm.cc index e75fd9bbb..0c88a0a2e 100644 --- a/src/layui/layui/layBrowseShapesForm.cc +++ b/src/layui/layui/layBrowseShapesForm.cc @@ -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 &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 &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 config_decl (new BrowseShapesPluginDeclaration (), 10000, "BrowseShapesPlugin"); diff --git a/src/layui/layui/layHierarchyControlPanel.cc b/src/layui/layui/layHierarchyControlPanel.cc index 304126ba0..ede77feec 100644 --- a/src/layui/layui/layHierarchyControlPanel.cc +++ b/src/layui/layui/layHierarchyControlPanel.cc @@ -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); diff --git a/src/layui/layui/layLibrariesView.cc b/src/layui/layui/layLibrariesView.cc index 203213bf9..d5381a86d 100644 --- a/src/layui/layui/layLibrariesView.cc +++ b/src/layui/layui/layLibrariesView.cc @@ -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); diff --git a/src/layui/layui/layNetlistBrowser.cc b/src/layui/layui/layNetlistBrowser.cc index 4069e9166..d51b17c58 100644 --- a/src/layui/layui/layNetlistBrowser.cc +++ b/src/layui/layui/layNetlistBrowser.cc @@ -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; + } } }; diff --git a/src/layui/layui/layNetlistBrowserDialog.cc b/src/layui/layui/layNetlistBrowserDialog.cc index 8c54ccb54..aa18053ed 100644 --- a/src/layui/layui/layNetlistBrowserDialog.cc +++ b/src/layui/layui/layNetlistBrowserDialog.cc @@ -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 } diff --git a/src/layui/layui/rdbMarkerBrowser.cc b/src/layui/layui/rdbMarkerBrowser.cc index 4b7e3ec2f..c7ff4e6d1 100644 --- a/src/layui/layui/rdbMarkerBrowser.cc +++ b/src/layui/layui/rdbMarkerBrowser.cc @@ -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; + } } }; diff --git a/src/layview/layview/layGridNet.cc b/src/layview/layview/layGridNet.cc index f17061177..e2b6fcfe2 100644 --- a/src/layview/layview/layGridNet.cc +++ b/src/layview/layview/layGridNet.cc @@ -118,7 +118,7 @@ static tl::RegisteredClass 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), diff --git a/src/layview/layview/layLayoutView_qt.cc b/src/layview/layview/layLayoutView_qt.cc index b9607b786..4a431e518 100644 --- a/src/layview/layview/layLayoutView_qt.cc +++ b/src/layview/layview/layLayoutView_qt.cc @@ -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 &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 diff --git a/src/plugins/tools/diff/lay_plugin/layDiffPlugin.cc b/src/plugins/tools/diff/lay_plugin/layDiffPlugin.cc index 8d22390ed..4740f8a5e 100644 --- a/src/plugins/tools/diff/lay_plugin/layDiffPlugin.cc +++ b/src/plugins/tools/diff/lay_plugin/layDiffPlugin.cc @@ -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 ... diff --git a/src/plugins/tools/net_tracer/lay_plugin/layNetTracerDialog.cc b/src/plugins/tools/net_tracer/lay_plugin/layNetTracerDialog.cc index cbbf1c069..d4ddd1ed0 100644 --- a/src/plugins/tools/net_tracer/lay_plugin/layNetTracerDialog.cc +++ b/src/plugins/tools/net_tracer/lay_plugin/layNetTracerDialog.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 diff --git a/src/plugins/tools/net_tracer/lay_plugin/layNetTracerPlugin.cc b/src/plugins/tools/net_tracer/lay_plugin/layNetTracerPlugin.cc index 619d12e53..7cc918cd9 100644 --- a/src/plugins/tools/net_tracer/lay_plugin/layNetTracerPlugin.cc +++ b/src/plugins/tools/net_tracer/lay_plugin/layNetTracerPlugin.cc @@ -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; + } } }; diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25Plugin.cc b/src/plugins/tools/view_25d/lay_plugin/layD25Plugin.cc index 4bb1601c8..8ee02c0cd 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25Plugin.cc +++ b/src/plugins/tools/view_25d/lay_plugin/layD25Plugin.cc @@ -26,6 +26,7 @@ #include "layDispatcher.h" #include "layPlugin.h" +#include "layUtils.h" #include @@ -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; + } } }; diff --git a/src/plugins/tools/xor/lay_plugin/layXORPlugin.cc b/src/plugins/tools/xor/lay_plugin/layXORPlugin.cc index 6c38c4d85..919078f59 100644 --- a/src/plugins/tools/xor/lay_plugin/layXORPlugin.cc +++ b/src/plugins/tools/xor/lay_plugin/layXORPlugin.cc @@ -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 ...