diff --git a/src/lay/lay/gsiDeclLayPlugin.cc b/src/lay/lay/gsiDeclLayPlugin.cc index 5b288c6fb..9b40b42c3 100644 --- a/src/lay/lay/gsiDeclLayPlugin.cc +++ b/src/lay/lay/gsiDeclLayPlugin.cc @@ -33,10 +33,164 @@ namespace gsi { +static bool has_tracking_position_impl (const lay::EditorServiceBase *p) +{ + return p->lay::EditorServiceBase::has_tracking_position (); +} + +static db::DPoint tracking_position_impl (const lay::EditorServiceBase *p) +{ + return p->lay::EditorServiceBase::tracking_position (); +} + +static void menu_activated_impl (lay::EditorServiceBase *p, const std::string &symbol) +{ + return p->lay::EditorServiceBase::menu_activated (symbol); +} + +static bool configure_impl (lay::EditorServiceBase *p, const std::string &name, const std::string &value) +{ + return p->lay::EditorServiceBase::configure (name, value); +} + +static void config_finalize_impl (lay::EditorServiceBase *p) +{ + p->lay::EditorServiceBase::config_finalize (); +} + +static void deactivated_impl (lay::EditorServiceBase *p) +{ + p->lay::EditorServiceBase::deactivated (); +} + +static void activated_impl (lay::EditorServiceBase *p) +{ + p->lay::EditorServiceBase::activated (); +} + +static bool key_event_impl (lay::EditorServiceBase *p, unsigned int key, unsigned int buttons) +{ + return p->lay::EditorServiceBase::key_event (key, buttons); +} + +static bool mouse_press_event_impl (lay::EditorServiceBase *p, const db::DPoint &pt, unsigned int buttons, bool prio) +{ + return p->lay::EditorServiceBase::mouse_press_event (pt, buttons, prio); +} + +static bool mouse_click_event_impl (lay::EditorServiceBase *p, const db::DPoint &pt, unsigned int buttons, bool prio) +{ + return p->lay::EditorServiceBase::mouse_click_event (pt, buttons, prio); +} + +static bool mouse_double_click_event_impl (lay::EditorServiceBase *p, const db::DPoint &pt, unsigned int buttons, bool prio) +{ + return p->lay::EditorServiceBase::mouse_double_click_event (pt, buttons, prio); +} + +static bool leave_event_impl (lay::EditorServiceBase *p, bool prio) +{ + return p->lay::EditorServiceBase::leave_event (prio); +} + +static bool enter_event_impl (lay::EditorServiceBase *p, bool prio) +{ + return p->lay::EditorServiceBase::enter_event (prio); +} + +static bool mouse_move_event_impl (lay::EditorServiceBase *p, const db::DPoint &pt, unsigned int buttons, bool prio) +{ + return p->lay::EditorServiceBase::mouse_move_event (pt, buttons, prio); +} + +static bool mouse_release_event_impl (lay::EditorServiceBase *p, const db::DPoint &pt, unsigned int buttons, bool prio) +{ + return p->lay::EditorServiceBase::mouse_release_event (pt, buttons, prio); +} + +static bool wheel_event_impl (lay::EditorServiceBase *p, int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons, bool prio) +{ + return p->lay::EditorServiceBase::wheel_event (delta, horizontal, pt, buttons, prio); +} + +static void update_impl (lay::EditorServiceBase *p) +{ + p->lay::EditorServiceBase::update (); +} + +static void drag_cancel_impl (lay::EditorServiceBase *p) +{ + p->lay::EditorServiceBase::drag_cancel (); +} + +Class decl_PluginBase ("lay", "PluginBase", + gsi::method_ext ("tracking_position", &tracking_position_impl, + "@brief Gets the tracking position (base class implementation)" + ) + + gsi::method_ext ("has_tracking_position", &has_tracking_position_impl, + "@brief Gets a value indicating whether the plugin provides a tracking position (base class implementation)" + ) + + gsi::method_ext ("menu_activated", &menu_activated_impl, gsi::arg ("symbol"), + "@brief Gets called when a custom menu item is selected (base class implementation)" + ) + + gsi::method_ext ("configure", &configure_impl, gsi::arg ("name"), gsi::arg ("value"), + "@brief Sends configuration requests to the plugin (base class implementation)" + ) + + gsi::method_ext ("config_finalize", &config_finalize_impl, + "@brief Sends the post-configuration request to the plugin (base class implementation)" + ) + + gsi::method_ext ("key_event", &key_event_impl, gsi::arg ("key"), gsi::arg ("buttons"), + "@brief Handles the key pressed event (base class implementation)" + ) + + gsi::method_ext ("mouse_button_pressed_event", &mouse_press_event_impl, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + "@brief Handles the mouse button pressed event (base class implementation)" + ) + + gsi::method_ext ("mouse_click_event", &mouse_click_event_impl, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + "@brief Handles the mouse button click event after the button has been released (base class implementation)" + ) + + gsi::method_ext ("mouse_double_click_event", &mouse_double_click_event_impl, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + "@brief Handles the mouse button double-click event (base class implementation)" + ) + + gsi::method_ext ("leave_event", &leave_event_impl, gsi::arg ("prio"), + "@brief Handles the leave event (base class implementation)" + ) + + gsi::method_ext ("enter_event", &enter_event_impl, gsi::arg ("prio"), + "@brief Handles the enter event (base class implementation)" + ) + + gsi::method_ext ("mouse_moved_event", &mouse_move_event_impl, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + "@brief Handles the mouse move event (base class implementation)" + ) + + gsi::method_ext ("mouse_button_released_event", &mouse_release_event_impl, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + "@brief Handles the mouse button release event (base class implementation)" + ) + + gsi::method_ext ("wheel_event", &wheel_event_impl, gsi::arg ("delta"), gsi::arg ("horizontal"), gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + "@brief Handles the mouse wheel event (base class implementation)" + ) + + gsi::method_ext ("activated", &activated_impl, + "@brief Gets called when the plugin is activated (base class implementation)" + ) + + gsi::method_ext ("deactivated", &deactivated_impl, + "@brief Gets called when the plugin is deactivated and another plugin is activated (base class implementation)" + ) + + gsi::method_ext ("drag_cancel", &drag_cancel_impl, + "@brief This method is called when some mouse dragging operation should be cancelled (base class implementation)" + ) + + gsi::method_ext ("update", &update_impl, + "@brief Gets called when the view has changed (base class implementation)" + ), + "@brief The plugin base class\n" + "\n" + "This class is provided as an interface to the base class implementation for various functions.\n" + "You can use these methods in order to pass down events to the original implementation.\n" + "\n" + "This class has been introduced in version 0.30.4.\n" +); + + // HACK: used to track if we're inside a create_plugin method and can be sure that "init" is called bool s_in_create_plugin = false; -PluginBase::PluginBase () +PluginImpl::PluginImpl () : lay::EditorServiceBase (), mp_view (0), mp_dispatcher (0), m_connect_ac (lay::AC_Any), m_move_ac (lay::AC_Any), @@ -49,7 +203,7 @@ PluginBase::PluginBase () } void -PluginBase::init (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher) +PluginImpl::init (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher) { mp_view = view; mp_dispatcher = dispatcher; @@ -57,7 +211,7 @@ PluginBase::init (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher) } void -PluginBase::grab_mouse () +PluginImpl::grab_mouse () { if (ui ()) { ui ()->grab_mouse (this, false); @@ -65,7 +219,7 @@ PluginBase::grab_mouse () } void -PluginBase::ungrab_mouse () +PluginImpl::ungrab_mouse () { if (ui ()) { ui ()->ungrab_mouse (this); @@ -73,7 +227,7 @@ PluginBase::ungrab_mouse () } void -PluginBase::set_cursor (int c) +PluginImpl::set_cursor (int c) { if (ui ()) { lay::ViewService::set_cursor ((enum lay::Cursor::cursor_shape) c); @@ -81,17 +235,17 @@ PluginBase::set_cursor (int c) } void -PluginBase::menu_activated (const std::string &symbol) +PluginImpl::menu_activated (const std::string &symbol) { if (f_menu_activated.can_issue ()) { - f_menu_activated.issue (&lay::Plugin::menu_activated, symbol); + f_menu_activated.issue (&lay::EditorServiceBase::menu_activated, symbol); } else { - lay::Plugin::menu_activated (symbol); + lay::EditorServiceBase::menu_activated (symbol); } } db::DPoint -PluginBase::snap (db::DPoint p) const +PluginImpl::snap (db::DPoint p) const { // snap according to the grid if (m_edit_grid == db::DVector ()) { @@ -106,7 +260,7 @@ PluginBase::snap (db::DPoint p) const } db::DVector -PluginBase::snap_vector (db::DVector v) const +PluginImpl::snap_vector (db::DVector v) const { // snap according to the grid if (m_edit_grid == db::DVector ()) { @@ -121,20 +275,20 @@ PluginBase::snap_vector (db::DVector v) const } db::DPoint -PluginBase::snap_from_to (const db::DPoint &p, const db::DPoint &plast, bool connect, lay::angle_constraint_type ac) const +PluginImpl::snap_from_to (const db::DPoint &p, const db::DPoint &plast, bool connect, lay::angle_constraint_type ac) const { db::DPoint ps = plast + lay::snap_angle (db::DVector (p - plast), connect ? connect_ac (ac) : move_ac (ac)); return snap (ps); } db::DVector -PluginBase::snap_delta (const db::DVector &v, bool connect, lay::angle_constraint_type ac) const +PluginImpl::snap_delta (const db::DVector &v, bool connect, lay::angle_constraint_type ac) const { return snap_vector (lay::snap_angle (v, connect ? connect_ac (ac) : move_ac (ac))); } db::DPoint -PluginBase::snap2 (const db::DPoint &p, bool visualize) +PluginImpl::snap2 (const db::DPoint &p, bool visualize) { double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (edt::snap_range_pixels ()); auto details = lay::obj_snap (m_snap_to_objects ? view () : 0, p, m_edit_grid == db::DVector () ? m_global_grid : m_edit_grid, snap_range); @@ -145,7 +299,7 @@ PluginBase::snap2 (const db::DPoint &p, bool visualize) } db::DPoint -PluginBase::snap2_from_to (const db::DPoint &p, const db::DPoint &plast, bool connect, lay::angle_constraint_type ac, bool visualize) +PluginImpl::snap2_from_to (const db::DPoint &p, const db::DPoint &plast, bool connect, lay::angle_constraint_type ac, bool visualize) { double snap_range = ui ()->mouse_event_trans ().inverted ().ctrans (edt::snap_range_pixels ()); auto details = 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 (ac) : move_ac (ac), snap_range); @@ -159,7 +313,7 @@ PluginBase::snap2_from_to (const db::DPoint &p, const db::DPoint &plast, bool co * @brief Captures some edt space configuration events for convencience */ void -PluginBase::configure_edt (const std::string &name, const std::string &value) +PluginImpl::configure_edt (const std::string &name, const std::string &value) { edt::EditGridConverter egc; edt::ACConverter acc; @@ -185,20 +339,20 @@ PluginBase::configure_edt (const std::string &name, const std::string &value) * @brief The implementation does not allow to bypass the base class configuration call */ bool -PluginBase::configure_impl (const std::string &name, const std::string &value) +PluginImpl::configure_impl (const std::string &name, const std::string &value) { - return f_configure.can_issue () ? f_configure.issue (&PluginBase::configure, name, value) : lay::Plugin::configure (name, value); + return f_configure.can_issue () ? f_configure.issue (&PluginImpl::configure, name, value) : lay::EditorServiceBase::configure (name, value); } // for testing void - PluginBase::configure_test (const std::string &name, const std::string &value) +PluginImpl::configure_test (const std::string &name, const std::string &value) { configure_edt (name, value); } bool -PluginBase::configure (const std::string &name, const std::string &value) +PluginImpl::configure (const std::string &name, const std::string &value) { configure_edt (name, value); return configure_impl (name, value); @@ -208,20 +362,20 @@ PluginBase::configure (const std::string &name, const std::string &value) * @brief The implementation does not allow to bypass the base class configuration call */ void -PluginBase::config_finalize_impl () +PluginImpl::config_finalize_impl () { - f_config_finalize.can_issue () ? f_config_finalize.issue (&PluginBase::config_finalize) : lay::Plugin::config_finalize (); + f_config_finalize.can_issue () ? f_config_finalize.issue (&PluginImpl::config_finalize) : lay::EditorServiceBase::config_finalize (); } void -PluginBase::config_finalize () +PluginImpl::config_finalize () { lay::EditorServiceBase::config_finalize (); config_finalize_impl (); } bool -PluginBase::key_event (unsigned int key, unsigned int buttons) +PluginImpl::key_event (unsigned int key, unsigned int buttons) { if (f_key_event.can_issue ()) { return f_key_event.issue (&lay::ViewService::key_event, key, buttons); @@ -231,58 +385,58 @@ PluginBase::key_event (unsigned int key, unsigned int buttons) } bool -PluginBase::mouse_press_event (const db::DPoint &p, unsigned int buttons, bool prio) +PluginImpl::mouse_press_event (const db::DPoint &p, unsigned int buttons, bool prio) { if (f_mouse_press_event.can_issue ()) { - return f_mouse_press_event.issue (&PluginBase::mouse_press_event_noref, p, buttons, prio); + return f_mouse_press_event.issue (&PluginImpl::mouse_press_event_noref, p, buttons, prio); } else { return lay::EditorServiceBase::mouse_press_event (p, buttons, prio); } } -// NOTE: this version doesn't take a point reference which allows up to store the point +// NOTE: this version doesn't take a point reference which allows us to store the point in script code without generating a reference bool -PluginBase::mouse_press_event_noref (db::DPoint p, unsigned int buttons, bool prio) +PluginImpl::mouse_press_event_noref (db::DPoint p, unsigned int buttons, bool prio) { return mouse_press_event (p, buttons, prio); } bool -PluginBase::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio) +PluginImpl::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio) { if (f_mouse_click_event.can_issue ()) { - return f_mouse_click_event.issue (&PluginBase::mouse_click_event_noref, p, buttons, prio); + return f_mouse_click_event.issue (&PluginImpl::mouse_click_event_noref, p, buttons, prio); } else { return lay::EditorServiceBase::mouse_click_event (p, buttons, prio); } } -// NOTE: this version doesn't take a point reference which allows up to store the point +// NOTE: this version doesn't take a point reference which allows us to store the point in script code without generating a reference bool -PluginBase::mouse_click_event_noref (db::DPoint p, unsigned int buttons, bool prio) +PluginImpl::mouse_click_event_noref (db::DPoint p, unsigned int buttons, bool prio) { return mouse_click_event (p, buttons, prio); } bool -PluginBase::mouse_double_click_event (const db::DPoint &p, unsigned int buttons, bool prio) +PluginImpl::mouse_double_click_event (const db::DPoint &p, unsigned int buttons, bool prio) { if (f_mouse_double_click_event.can_issue ()) { - return f_mouse_double_click_event.issue (&PluginBase::mouse_double_click_event_noref, p, buttons, prio); + return f_mouse_double_click_event.issue (&PluginImpl::mouse_double_click_event_noref, p, buttons, prio); } else { return lay::EditorServiceBase::mouse_double_click_event (p, buttons, prio); } } -// NOTE: this version doesn't take a point reference which allows up to store the point +// NOTE: this version doesn't take a point reference which allows us to store the point in script code without generating a reference bool -PluginBase::mouse_double_click_event_noref (db::DPoint p, unsigned int buttons, bool prio) +PluginImpl::mouse_double_click_event_noref (db::DPoint p, unsigned int buttons, bool prio) { return mouse_double_click_event (p, buttons, prio); } bool -PluginBase::leave_event (bool prio) +PluginImpl::leave_event (bool prio) { if (f_leave_event.can_issue ()) { return f_leave_event.issue (&lay::ViewService::leave_event, prio); @@ -292,7 +446,7 @@ PluginBase::leave_event (bool prio) } bool -PluginBase::enter_event (bool prio) +PluginImpl::enter_event (bool prio) { if (f_enter_event.can_issue ()) { return f_enter_event.issue (&lay::ViewService::enter_event, prio); @@ -302,58 +456,58 @@ PluginBase::enter_event (bool prio) } bool -PluginBase::mouse_move_event (const db::DPoint &p, unsigned int buttons, bool prio) +PluginImpl::mouse_move_event (const db::DPoint &p, unsigned int buttons, bool prio) { if (f_mouse_move_event.can_issue ()) { - return f_mouse_move_event.issue (&PluginBase::mouse_move_event_noref, p, buttons, prio); + return f_mouse_move_event.issue (&PluginImpl::mouse_move_event_noref, p, buttons, prio); } else { return lay::EditorServiceBase::mouse_move_event (p, buttons, prio); } } -// NOTE: this version doesn't take a point reference which allows up to store the point +// NOTE: this version doesn't take a point reference which allows us to store the point in script code without generating a reference bool -PluginBase::mouse_move_event_noref (db::DPoint p, unsigned int buttons, bool prio) +PluginImpl::mouse_move_event_noref (db::DPoint p, unsigned int buttons, bool prio) { return mouse_move_event (p, buttons, prio); } bool -PluginBase::mouse_release_event (const db::DPoint &p, unsigned int buttons, bool prio) +PluginImpl::mouse_release_event (const db::DPoint &p, unsigned int buttons, bool prio) { if (f_mouse_release_event.can_issue ()) { - return f_mouse_release_event.issue (&PluginBase::mouse_release_event_noref, p, buttons, prio); + return f_mouse_release_event.issue (&PluginImpl::mouse_release_event_noref, p, buttons, prio); } else { return lay::ViewService::mouse_release_event (p, buttons, prio); } } -// NOTE: this version doesn't take a point reference which allows up to store the point +// NOTE: this version doesn't take a point reference which allows us to store the point in script code without generating a reference bool -PluginBase::mouse_release_event_noref (db::DPoint p, unsigned int buttons, bool prio) +PluginImpl::mouse_release_event_noref (db::DPoint p, unsigned int buttons, bool prio) { return mouse_release_event (p, buttons, prio); } bool -PluginBase::wheel_event (int delta, bool horizontal, const db::DPoint &p, unsigned int buttons, bool prio) +PluginImpl::wheel_event (int delta, bool horizontal, const db::DPoint &p, unsigned int buttons, bool prio) { if (f_wheel_event.can_issue ()) { - return f_wheel_event.issue (&PluginBase::wheel_event_noref, delta, horizontal, p, buttons, prio); + return f_wheel_event.issue (&PluginImpl::wheel_event_noref, delta, horizontal, p, buttons, prio); } else { return lay::ViewService::wheel_event (delta, horizontal, p, buttons, prio); } } -// NOTE: this version doesn't take a point reference which allows up to store the point +// NOTE: this version doesn't take a point reference which allows us to store the point in script code without generating a reference bool -PluginBase::wheel_event_noref (int delta, bool horizontal, db::DPoint p, unsigned int buttons, bool prio) +PluginImpl::wheel_event_noref (int delta, bool horizontal, db::DPoint p, unsigned int buttons, bool prio) { return wheel_event (delta, horizontal, p, buttons, prio); } void -PluginBase::activated () +PluginImpl::activated () { if (f_activated.can_issue ()) { f_activated.issue (&lay::EditorServiceBase::activated); @@ -363,22 +517,22 @@ PluginBase::activated () } void -PluginBase::deactivated_impl () +PluginImpl::deactivated_impl () { if (f_deactivated.can_issue ()) { - f_deactivated.issue (&PluginBase::deactivated_impl); + f_deactivated.issue (&PluginImpl::deactivated_impl); } } void -PluginBase::deactivated () +PluginImpl::deactivated () { lay::EditorServiceBase::deactivated (); deactivated_impl (); } void -PluginBase::drag_cancel () +PluginImpl::drag_cancel () { if (f_drag_cancel.can_issue ()) { f_drag_cancel.issue (&lay::EditorServiceBase::drag_cancel); @@ -388,7 +542,7 @@ PluginBase::drag_cancel () } void -PluginBase::update () +PluginImpl::update () { if (f_update.can_issue ()) { f_update.issue (&lay::EditorServiceBase::update); @@ -398,13 +552,13 @@ PluginBase::update () } void -PluginBase::add_mouse_cursor_dpoint (const db::DPoint &p, bool emphasize) +PluginImpl::add_mouse_cursor_dpoint (const db::DPoint &p, bool emphasize) { lay::EditorServiceBase::add_mouse_cursor (p, emphasize); } void -PluginBase::add_mouse_cursor_point (const db::Point &p, int cv_index, const db::LayerProperties &lp, bool emphasize) +PluginImpl::add_mouse_cursor_point (const db::Point &p, int cv_index, const db::LayerProperties &lp, bool emphasize) { const lay::CellView &cv = view ()->cellview (cv_index); if (! cv.is_valid ()) { @@ -426,13 +580,13 @@ PluginBase::add_mouse_cursor_point (const db::Point &p, int cv_index, const db:: } void -PluginBase::add_edge_marker_dedge (const db::DEdge &p, bool emphasize) +PluginImpl::add_edge_marker_dedge (const db::DEdge &p, bool emphasize) { lay::EditorServiceBase::add_edge_marker (p, emphasize); } void -PluginBase::add_edge_marker_edge (const db::Edge &p, int cv_index, const db::LayerProperties &lp, bool emphasize) +PluginImpl::add_edge_marker_edge (const db::Edge &p, int cv_index, const db::LayerProperties &lp, bool emphasize) { const lay::CellView &cv = view ()->cellview (cv_index); if (! cv.is_valid ()) { @@ -455,53 +609,41 @@ PluginBase::add_edge_marker_edge (const db::Edge &p, int cv_index, const db::Lay // for testing bool -PluginBase::has_tracking_position_test () const +PluginImpl::has_tracking_position_test () const { return has_tracking_position (); } bool -PluginBase::has_tracking_position_base () const -{ - return lay::EditorServiceBase::has_tracking_position (); -} - -bool -PluginBase::has_tracking_position () const +PluginImpl::has_tracking_position () const { if (f_has_tracking_position.can_issue ()) { return f_has_tracking_position.issue (&lay::EditorServiceBase::has_tracking_position); } else { - return has_tracking_position_base (); + return lay::EditorServiceBase::has_tracking_position (); } } // for testing db::DPoint -PluginBase::tracking_position_test () const +PluginImpl::tracking_position_test () const { return tracking_position (); } db::DPoint -PluginBase::tracking_position_base () const -{ - return lay::EditorServiceBase::tracking_position (); -} - -db::DPoint -PluginBase::tracking_position () const +PluginImpl::tracking_position () const { if (f_tracking_position.can_issue ()) { return f_tracking_position.issue (&lay::EditorServiceBase::tracking_position); } else { - return tracking_position_base (); + return lay::EditorServiceBase::tracking_position (); } } #if defined(HAVE_QTBINDINGS) std::vector -PluginBase::editor_options_pages () +PluginImpl::editor_options_pages () { lay::EditorOptionsPages *eo_pages = view ()->editor_options_pages (); if (!eo_pages) { @@ -519,38 +661,38 @@ PluginBase::editor_options_pages () #endif lay::angle_constraint_type -PluginBase::connect_ac (lay::angle_constraint_type ac) const +PluginImpl::connect_ac (lay::angle_constraint_type ac) const { // m_alt_ac (which is set from mouse buttons) can override the specified connect angle constraint return ac != lay::AC_Global ? ac : m_connect_ac; } lay::angle_constraint_type -PluginBase::move_ac (lay::angle_constraint_type ac) const +PluginImpl::move_ac (lay::angle_constraint_type ac) const { // m_alt_ac (which is set from mouse buttons) can override the specified move angle constraint return ac != lay::AC_Global ? ac : m_move_ac; } -Class decl_Plugin ("lay", "Plugin", - callback ("menu_activated", &gsi::PluginBase::menu_activated, &gsi::PluginBase::f_menu_activated, gsi::arg ("symbol"), +Class decl_Plugin (decl_PluginBase, "lay", "Plugin", + callback ("menu_activated", &gsi::PluginImpl::menu_activated, &gsi::PluginImpl::f_menu_activated, gsi::arg ("symbol"), "@brief Gets called when a custom menu item is selected\n" "When a menu item is clicked which was registered with the plugin factory, the plugin's 'menu_activated' method is " "called for the current view. The symbol registered for the menu item is passed in the 'symbol' argument." ) + - method ("configure_test", &gsi::PluginBase::configure_test, gsi::arg ("name"), gsi::arg ("value"), "@hide") + - callback ("configure", &gsi::PluginBase::configure_impl, &gsi::PluginBase::f_configure, gsi::arg ("name"), gsi::arg ("value"), + method ("configure_test", &gsi::PluginImpl::configure_test, gsi::arg ("name"), gsi::arg ("value"), "@hide") + + callback ("configure", &gsi::PluginImpl::configure_impl, &gsi::PluginImpl::f_configure, gsi::arg ("name"), gsi::arg ("value"), "@brief Sends configuration requests to the plugin\n" "@param name The name of the configuration variable as registered in the plugin factory\n" "@param value The value of the configuration variable\n" "When a configuration variable is changed, the new value is reported to the plugin by calling the 'configure' method." ) + - callback ("config_finalize", &gsi::PluginBase::config_finalize_impl, &gsi::PluginBase::f_config_finalize, + callback ("config_finalize", &gsi::PluginImpl::config_finalize_impl, &gsi::PluginImpl::f_config_finalize, "@brief Sends the post-configuration request to the plugin\n" "After all configuration parameters have been sent, 'config_finalize' is called to given the plugin a chance to " "update its internal state according to the new configuration.\n" ) + - callback ("key_event", &gsi::PluginBase::key_event, &gsi::PluginBase::f_key_event, gsi::arg ("key"), gsi::arg ("buttons"), + callback ("key_event", &gsi::PluginImpl::key_event, &gsi::PluginImpl::f_key_event, gsi::arg ("key"), gsi::arg ("buttons"), "@brief Handles the key pressed event\n" "This method will called by the view on the active plugin when a button is pressed on the mouse.\n" "\n" @@ -560,7 +702,7 @@ Class decl_Plugin ("lay", "Plugin", "@param buttons A combination of the constants in the \\ButtonState class which codes both the mouse buttons and the key modifiers (.e. ShiftButton etc).\n" "@return True to terminate dispatcher\n" ) + - callback ("mouse_button_pressed_event", &gsi::PluginBase::mouse_press_event_noref, &gsi::PluginBase::f_mouse_press_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + callback ("mouse_button_pressed_event", &gsi::PluginImpl::mouse_press_event_noref, &gsi::PluginImpl::f_mouse_press_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), "@brief Handles the mouse button pressed event\n" "This method will called by the view when a button is pressed on the mouse.\n" "\n" @@ -582,72 +724,72 @@ Class decl_Plugin ("lay", "Plugin", "@param buttons A combination of the constants in the \\ButtonState class which codes both the mouse buttons and the key modifiers (.e. LeftButton, ShiftButton etc).\n" "@return True to terminate dispatcher\n" ) + - callback ("mouse_click_event", &gsi::PluginBase::mouse_click_event_noref, &gsi::PluginBase::f_mouse_click_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + callback ("mouse_click_event", &gsi::PluginImpl::mouse_click_event_noref, &gsi::PluginImpl::f_mouse_click_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), "@brief Handles the mouse button click event (after the button has been released)\n" "The behaviour of this callback is the same than for \\mouse_press_event, except that it is called when the mouse button has been released without moving it.\n" ) + - callback ("mouse_double_click_event", &gsi::PluginBase::mouse_double_click_event_noref, &gsi::PluginBase::f_mouse_double_click_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + callback ("mouse_double_click_event", &gsi::PluginImpl::mouse_double_click_event_noref, &gsi::PluginImpl::f_mouse_double_click_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), "@brief Handles the mouse button double-click event\n" "The behaviour of this callback is the same than for \\mouse_press_event, except that it is called when the mouse button has been double-clicked.\n" ) + - callback ("leave_event", &gsi::PluginBase::leave_event, &gsi::PluginBase::f_leave_event, gsi::arg ("prio"), + callback ("leave_event", &gsi::PluginImpl::leave_event, &gsi::PluginImpl::f_leave_event, gsi::arg ("prio"), "@brief Handles the leave event (mouse leaves canvas area of view)\n" "The behaviour of this callback is the same than for \\mouse_press_event, except that it is called when the mouse leaves the canvas area.\n" "This method does not have a position nor button flags.\n" ) + - callback ("enter_event", &gsi::PluginBase::enter_event, &gsi::PluginBase::f_enter_event, gsi::arg ("prio"), + callback ("enter_event", &gsi::PluginImpl::enter_event, &gsi::PluginImpl::f_enter_event, gsi::arg ("prio"), "@brief Handles the enter event (mouse enters canvas area of view)\n" "The behaviour of this callback is the same than for \\mouse_press_event, except that it is called when the mouse enters the canvas area.\n" "This method does not have a position nor button flags.\n" ) + - callback ("mouse_moved_event", &gsi::PluginBase::mouse_move_event_noref, &gsi::PluginBase::f_mouse_move_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + callback ("mouse_moved_event", &gsi::PluginImpl::mouse_move_event_noref, &gsi::PluginImpl::f_mouse_move_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), "@brief Handles the mouse move event\n" "The behaviour of this callback is the same than for \\mouse_press_event, except that it is called when the mouse is moved in the canvas area.\n" "\n" "The mouse move event is important for a number of background jobs, such as coordinate display in the status bar.\n" "Hence, you should not consume the event - i.e. you should return 'false' from this method.\n" ) + - callback ("mouse_button_released_event", &gsi::PluginBase::mouse_release_event_noref, &gsi::PluginBase::f_mouse_release_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + callback ("mouse_button_released_event", &gsi::PluginImpl::mouse_release_event_noref, &gsi::PluginImpl::f_mouse_release_event, gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), "@brief Handles the mouse button release event\n" "The behaviour of this callback is the same than for \\mouse_press_event, except that it is called when the mouse button is released.\n" ) + - callback ("wheel_event", &gsi::PluginBase::wheel_event_noref, &gsi::PluginBase::f_wheel_event, gsi::arg ("delta"), gsi::arg ("horizontal"), gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + callback ("wheel_event", &gsi::PluginImpl::wheel_event_noref, &gsi::PluginImpl::f_wheel_event, gsi::arg ("delta"), gsi::arg ("horizontal"), gsi::arg ("p"), gsi::arg ("buttons"), gsi::arg ("prio"), + "@brief Handles the mouse wheel event\n" "The behaviour of this callback is the same than for \\mouse_press_event, except that it is called when the mouse wheel is rotated.\n" "Additional parameters for this event are 'delta' (the rotation angle in units of 1/8th degree) and 'horizontal' which is true when the horizontal wheel was rotated and " "false if the vertical wheel was rotated.\n" ) + - callback ("activated", &gsi::PluginBase::activated, &gsi::PluginBase::f_activated, + callback ("activated", &gsi::PluginImpl::activated, &gsi::PluginImpl::f_activated, "@brief Gets called when the plugin is activated (selected in the tool bar)\n" ) + - callback ("deactivated", &gsi::PluginBase::deactivated, &gsi::PluginBase::f_deactivated, + callback ("deactivated", &gsi::PluginImpl::deactivated, &gsi::PluginImpl::f_deactivated, "@brief Gets called when the plugin is deactivated and another plugin is activated\n" ) + - callback ("drag_cancel", &gsi::PluginBase::drag_cancel, &gsi::PluginBase::f_drag_cancel, - "@brief Gets called on various occasions when a drag operation should be canceled\n" + callback ("drag_cancel", &gsi::PluginImpl::drag_cancel, &gsi::PluginImpl::f_drag_cancel, + "@brief Gets called on various occasions when some mouse drag operation should be canceled\n" "If the plugin implements some press-and-drag or a click-and-drag operation, this callback should " - "cancel this operation and return in some state waiting for a new mouse event." + "cancel this operation and return to some state waiting for a new mouse event." ) + - callback ("update", &gsi::PluginBase::update, &gsi::PluginBase::f_update, + callback ("update", &gsi::PluginImpl::update, &gsi::PluginImpl::f_update, "@brief Gets called when the view has changed\n" "This method is called in particular if the view has changed the visible rectangle, i.e. after zooming in or out or panning. " "This callback can be used to update any internal states that depend on the view's state." ) + - method ("grab_mouse", &gsi::PluginBase::grab_mouse, + method ("grab_mouse", &gsi::PluginImpl::grab_mouse, "@brief Redirects mouse events to this plugin, even if the plugin is not active.\n" ) + - method ("ungrab_mouse", &gsi::PluginBase::ungrab_mouse, + method ("ungrab_mouse", &gsi::PluginImpl::ungrab_mouse, "@brief Removes a mouse grab registered with \\grab_mouse.\n" ) + - method ("set_cursor", &gsi::PluginBase::set_cursor, gsi::arg ("cursor_type"), + method ("set_cursor", &gsi::PluginImpl::set_cursor, gsi::arg ("cursor_type"), "@brief Sets the cursor in the view area to the given type\n" "Setting the cursor has an effect only inside event handlers, i.e. \\mouse_button_pressed_event. The cursor is not set permanently. Is is reset " "in the mouse move handler unless a button is pressed or the cursor is explicitly set again in \\mouse_moved_event.\n" "\n" "The cursor type is one of the cursor constants in the \\Cursor class, i.e. 'CursorArrow' for the normal cursor." ) + - method ("has_tracking_position_test", &gsi::PluginBase::has_tracking_position_test, "@hide") + - method ("has_tracking_position", &gsi::PluginBase::has_tracking_position_base, "@hide") + - callback ("has_tracking_position", &gsi::PluginBase::has_tracking_position, &gsi::PluginBase::f_has_tracking_position, + method ("has_tracking_position_test", &gsi::PluginImpl::has_tracking_position_test, "@hide") + + callback ("has_tracking_position", &gsi::PluginImpl::has_tracking_position, &gsi::PluginImpl::f_has_tracking_position, "@brief Gets a value indicating whether the plugin provides a tracking position\n" "The tracking position is shown in the lower-left corner of the layout window to indicate the current position.\n" "If this method returns true for the active service, the application will fetch the position by calling \\tracking_position " @@ -659,9 +801,8 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.27.6." ) + - method ("tracking_position_test", &gsi::PluginBase::tracking_position_test, "@hide") + - method ("tracking_position", &gsi::PluginBase::tracking_position_base, "@hide") + - callback ("tracking_position", &gsi::PluginBase::tracking_position, &gsi::PluginBase::f_tracking_position, + method ("tracking_position_test", &gsi::PluginImpl::tracking_position_test, "@hide") + + callback ("tracking_position", &gsi::PluginImpl::tracking_position, &gsi::PluginImpl::f_tracking_position, "@brief Gets the tracking position\n" "See \\has_tracking_position for details.\n" "\n" @@ -672,14 +813,14 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.27.6." ) + - method ("clear_mouse_cursors", &gsi::PluginBase::clear_mouse_cursors, + method ("clear_mouse_cursors", &gsi::PluginImpl::clear_mouse_cursors, "@brief Clears all existing mouse cursors\n" "Use this function to remove exisiting mouse cursors (see \\add_mouse_cursor and \\add_edge_marker).\n" "This method is automatically called when the plugin becomes deactivated.\n" "\n" "This method has been added in version 0.30.4." ) + - method ("add_mouse_cursor", &gsi::PluginBase::add_mouse_cursor_dpoint, gsi::arg ("p"), gsi::arg ("emphasize", false), + method ("add_mouse_cursor", &gsi::PluginImpl::add_mouse_cursor_dpoint, gsi::arg ("p"), gsi::arg ("emphasize", false), "@brief Creates a cursor to indicate the mouse position\n" "This function will create a marker that indicates the (for example snapped) mouse position.\n" "In addition to this, it will establish the position for the tracking cursor, if mouse\n" @@ -697,7 +838,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("add_mouse_cursor", &gsi::PluginBase::add_mouse_cursor_point, gsi::arg ("p"), gsi::arg ("cv_index"), gsi::arg ("layer"), gsi::arg ("emphasize", false), + method ("add_mouse_cursor", &gsi::PluginImpl::add_mouse_cursor_point, gsi::arg ("p"), gsi::arg ("cv_index"), gsi::arg ("layer"), gsi::arg ("emphasize", false), "@brief Creates a cursor to indicate the mouse position\n" "This version of this method creates a mouse cursor based on the integer-unit point and\n" "a source cellview index plus a layer info.\n" @@ -706,7 +847,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("add_edge_marker", &gsi::PluginBase::add_edge_marker_dedge, gsi::arg ("e"), gsi::arg ("emphasize", false), + method ("add_edge_marker", &gsi::PluginImpl::add_edge_marker_dedge, gsi::arg ("e"), gsi::arg ("emphasize", false), "@brief Creates a cursor to indicate an edge\n" "This function will create a marker that indicates an edge - for example the edge that a point is snapping to. " "\n" @@ -716,7 +857,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("add_edge_marker", &gsi::PluginBase::add_edge_marker_edge, gsi::arg ("e"), gsi::arg ("cv_index"), gsi::arg ("layer"), gsi::arg ("emphasize", false), + method ("add_edge_marker", &gsi::PluginImpl::add_edge_marker_edge, gsi::arg ("e"), gsi::arg ("cv_index"), gsi::arg ("layer"), gsi::arg ("emphasize", false), "@brief Creates a cursor to indicate an edge\n" "This version of this method creates an edge marker based on the integer-unit edge and\n" "a source cellview index plus a layer info.\n" @@ -733,7 +874,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("snap", &gsi::PluginBase::snap, gsi::arg ("p"), + method ("snap", &gsi::PluginImpl::snap, gsi::arg ("p"), "@brief Snaps a point to the edit grid\n" "\n" "@param p The point to snap\n" @@ -744,7 +885,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("snap", &gsi::PluginBase::snap_vector, gsi::arg ("v"), + method ("snap", &gsi::PluginImpl::snap_vector, gsi::arg ("v"), "@brief Snaps a vector to the edit grid\n" "\n" "@param v The vector to snap\n" @@ -755,7 +896,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("snap", &gsi::PluginBase::snap_from_to, gsi::arg ("p"), gsi::arg ("plast"), gsi::arg ("connect", false), gsi::arg ("ac", lay::AC_Global, "AC_Global"), + method ("snap", &gsi::PluginImpl::snap_from_to, gsi::arg ("p"), gsi::arg ("plast"), gsi::arg ("connect", false), gsi::arg ("ac", lay::AC_Global, "AC_Global"), "@brief Snaps a point to the edit grid with an angle constraint\n" "\n" "@param p The point to snap\n" @@ -778,7 +919,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("snap", &gsi::PluginBase::snap_delta, gsi::arg ("v"), gsi::arg ("connect", false), gsi::arg ("ac", lay::AC_Global, "AC_Global"), + method ("snap", &gsi::PluginImpl::snap_delta, gsi::arg ("v"), gsi::arg ("connect", false), gsi::arg ("ac", lay::AC_Global, "AC_Global"), "@brief Snaps a move vector to the edit grid with and implies an angle constraint\n" "\n" "@param v The vector to snap\n" @@ -795,7 +936,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("snap2", &gsi::PluginBase::snap2, gsi::arg ("p"), gsi::arg ("visualize", false), + method ("snap2", &gsi::PluginImpl::snap2, gsi::arg ("p"), gsi::arg ("visualize", false), "@brief Snaps a point to the edit grid with advanced snapping (including object snapping)\n" "\n" "@param p The point to snap\n" @@ -810,7 +951,7 @@ Class decl_Plugin ("lay", "Plugin", "\n" "This method has been added in version 0.30.4." ) + - method ("snap2", &gsi::PluginBase::snap2_from_to, gsi::arg ("p"), gsi::arg ("plast"), gsi::arg ("connect", false), gsi::arg ("ac", lay::AC_Global, "AC_Global"), gsi::arg ("visualize", false), + method ("snap2", &gsi::PluginImpl::snap2_from_to, gsi::arg ("p"), gsi::arg ("plast"), gsi::arg ("connect", false), gsi::arg ("ac", lay::AC_Global, "AC_Global"), gsi::arg ("visualize", false), "@brief Snaps a point to the edit grid with an angle constraint with advanced snapping (including object snapping)\n" "\n" "@param p The point to snap\n" @@ -836,7 +977,7 @@ Class decl_Plugin ("lay", "Plugin", "This method has been added in version 0.30.4." ) + #if defined(HAVE_QTBINDINGS) - gsi::method ("editor_options_pages", &gsi::PluginBase::editor_options_pages, + gsi::method ("editor_options_pages", &gsi::PluginImpl::editor_options_pages, "@brief Gets the editor options pages which are associated with the view\n" "The editor options pages are created by the plugin factory class and are associated with this plugin.\n" "This method allows locating them and using them for plugin-specific purposes.\n" @@ -844,13 +985,13 @@ Class decl_Plugin ("lay", "Plugin", "This method has been added in version 0.30.4." ) + #endif - gsi::method ("view", &gsi::PluginBase::view, + gsi::method ("view", &gsi::PluginImpl::view, "@brief Gets the view object the plugin is associated with\n" "This method returns the view object that the plugin is associated with.\n" "\n" "This convenience method has been added in version 0.30.4." ) + - gsi::method ("dispatcher", &gsi::PluginBase::dispatcher, + gsi::method ("dispatcher", &gsi::PluginImpl::dispatcher, "@brief Gets the dispatcher object the plugin is associated with\n" "This method returns the dispatcher object that the plugin is associated with.\n" "The dispatcher object manages the configuration parameters. 'set_config', 'get_config' and 'commit_config' " @@ -893,7 +1034,7 @@ gsi::Enum decl_AngleConstraintType ("lay", "AngleCon "This enum has been introduced in version 0.30.4." ); -gsi::ClassExt inject_AngleConstraintType_in_parent (decl_AngleConstraintType.defs ()); +gsi::ClassExt inject_AngleConstraintType_in_parent (decl_AngleConstraintType.defs ()); class CursorNamespace { }; diff --git a/src/lay/lay/gsiDeclLayPlugin.h b/src/lay/lay/gsiDeclLayPlugin.h index 7bf5ce48d..fa639e518 100644 --- a/src/lay/lay/gsiDeclLayPlugin.h +++ b/src/lay/lay/gsiDeclLayPlugin.h @@ -32,11 +32,11 @@ namespace gsi { -class PluginBase +class PluginImpl : public lay::EditorServiceBase { public: - PluginBase (); + PluginImpl (); void init (lay::LayoutViewBase *view, lay::Dispatcher *dispatcher); void grab_mouse (); @@ -63,24 +63,18 @@ public: virtual void config_finalize (); virtual bool key_event (unsigned int key, unsigned int buttons); virtual bool mouse_press_event (const db::DPoint &p, unsigned int buttons, bool prio) ; - // NOTE: this version doesn't take a point reference which allows up to store the point bool mouse_press_event_noref (db::DPoint p, unsigned int buttons, bool prio); virtual bool mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio); - // NOTE: this version doesn't take a point reference which allows up to store the point bool mouse_click_event_noref (db::DPoint p, unsigned int buttons, bool prio); virtual bool mouse_double_click_event (const db::DPoint &p, unsigned int buttons, bool prio); - // NOTE: this version doesn't take a point reference which allows up to store the point bool mouse_double_click_event_noref (db::DPoint p, unsigned int buttons, bool prio); virtual bool leave_event (bool prio); virtual bool enter_event (bool prio); virtual bool mouse_move_event (const db::DPoint &p, unsigned int buttons, bool prio); - // NOTE: this version doesn't take a point reference which allows up to store the point bool mouse_move_event_noref (db::DPoint p, unsigned int buttons, bool prio); virtual bool mouse_release_event (const db::DPoint &p, unsigned int buttons, bool prio); - // NOTE: this version doesn't take a point reference which allows up to store the point bool mouse_release_event_noref (db::DPoint p, unsigned int buttons, bool prio); virtual bool wheel_event (int delta, bool horizontal, const db::DPoint &p, unsigned int buttons, bool prio); - // NOTE: this version doesn't take a point reference which allows up to store the point bool wheel_event_noref (int delta, bool horizontal, db::DPoint p, unsigned int buttons, bool prio); virtual void activated (); void deactivated_impl (); @@ -94,12 +88,10 @@ public: // for testing bool has_tracking_position_test () const; - bool has_tracking_position_base () const; virtual bool has_tracking_position () const; // for testing db::DPoint tracking_position_test () const; - db::DPoint tracking_position_base () const; virtual db::DPoint tracking_position () const; virtual lay::ViewService *view_service_interface () diff --git a/src/lay/lay/gsiDeclLayPluginFactory.cc b/src/lay/lay/gsiDeclLayPluginFactory.cc index 1bbadd3dd..c840b7755 100644 --- a/src/lay/lay/gsiDeclLayPluginFactory.cc +++ b/src/lay/lay/gsiDeclLayPluginFactory.cc @@ -242,14 +242,14 @@ public: } } - virtual gsi::PluginBase *create_plugin_gsi (db::Manager *manager, lay::Dispatcher *root, lay::LayoutViewBase *view) const + virtual gsi::PluginImpl *create_plugin_gsi (db::Manager *manager, lay::Dispatcher *root, lay::LayoutViewBase *view) const { s_in_create_plugin = true; - gsi::PluginBase *ret = 0; + gsi::PluginImpl *ret = 0; try { - ret = f_create_plugin.issue (&PluginFactoryBase::create_plugin_gsi, manager, root, view); + ret = f_create_plugin.issue (&PluginFactoryBase::create_plugin_gsi, manager, root, view); if (ret) { ret->init (view, root); } diff --git a/src/laybasic/laybasic/layEditorServiceBase.h b/src/laybasic/laybasic/layEditorServiceBase.h index f41afbf85..7a73c8bb8 100644 --- a/src/laybasic/laybasic/layEditorServiceBase.h +++ b/src/laybasic/laybasic/layEditorServiceBase.h @@ -141,16 +141,128 @@ public: */ void show_error (tl::Exception &ex); + /** + * @brief Menu command handler + */ + virtual void menu_activated (const std::string & /*symbol*/) + { + // .. this implementation does nothing .. + } + /** * @brief Sets a configuration option */ virtual bool configure (const std::string &name, const std::string &value); + /** + * @brief Configuration finalization + */ + virtual void config_finalize () + { + lay::Plugin::config_finalize (); + } + /** * @brief Called when the plugin is deactivated */ virtual void deactivated (); + /** + * @brief Called when the plugin is activated + */ + virtual void activated () + { + // .. this implementation does nothing .. + } + + /** + * @brief Key event handler + */ + virtual bool key_event (unsigned int /*key*/, unsigned int /*buttons*/) + { + return false; + } + + /** + * @brief Mouse press event handler + */ + virtual bool mouse_press_event (const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/) + { + return false; + } + + /** + * @brief Mouse single-click event handler + */ + virtual bool mouse_click_event (const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/) + { + return false; + } + + /** + * @brief Mouse double-click event handler + */ + virtual bool mouse_double_click_event (const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/) + { + return false; + } + + /** + * @brief Mouse leave event handler + */ + virtual bool leave_event (bool /*prio*/) + { + return false; + } + + /** + * @brief Mouse enter event handler + */ + virtual bool enter_event (bool /*prio*/) + { + return false; + } + + /** + * @brief Mouse move event handler + */ + virtual bool mouse_move_event (const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/) + { + return false; + } + + /** + * @brief Mouse release event handler + */ + virtual bool mouse_release_event (const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/) + { + return false; + } + + /** + * @brief Wheel event handler + */ + virtual bool wheel_event (int /*delta*/, bool /*horizontal*/, const db::DPoint & /*p*/, unsigned int /*buttons*/, bool /*prio*/) + { + return false; + } + + /** + * @brief Updates the internal data after a coordinate system change for example + */ + virtual void update () + { + // The default implementation does nothing + } + + /** + * @brief This method is called when some mouse dragging operation should be cancelled + */ + virtual void drag_cancel () + { + // The default implementation does nothing + } + private: // The marker representing the mouse cursor lay::LayoutViewBase *mp_view;