diff --git a/src/edt/edt/edtMainService.cc b/src/edt/edt/edtMainService.cc index efd898f53..beeefcdab 100644 --- a/src/edt/edt/edtMainService.cc +++ b/src/edt/edt/edtMainService.cc @@ -2113,7 +2113,7 @@ MainService::cm_tap () int icon_size = menu->style ()->pixelMetric (QStyle::PM_ButtonIconSize); - db::Point mp_local = view ()->view_object_widget ()->mouse_position (); + db::DPoint mp_local = view ()->view_object_widget ()->mouse_position (); QPoint mp = view ()->view_object_widget ()->mapToGlobal (QPoint (mp_local.x (), mp_local.y ())); for (std::vector::const_iterator l = tapped_layers.begin (); l != tapped_layers.end (); ++l) { diff --git a/src/edt/edt/edtServiceImpl.cc b/src/edt/edt/edtServiceImpl.cc index b22360339..0e118257b 100644 --- a/src/edt/edt/edtServiceImpl.cc +++ b/src/edt/edt/edtServiceImpl.cc @@ -37,6 +37,7 @@ #include "layLayerProperties.h" #include "layLayoutView.h" #include "layTipDialog.h" +#include "layDragDropData.h" #include #include diff --git a/src/laybasic/laybasic/gsiDeclLayLayoutView.cc b/src/laybasic/laybasic/gsiDeclLayLayoutView.cc index 5e204847a..612b28827 100644 --- a/src/laybasic/laybasic/gsiDeclLayLayoutView.cc +++ b/src/laybasic/laybasic/gsiDeclLayLayoutView.cc @@ -357,6 +357,54 @@ get_config_names (lay::LayoutView *view) return names; } +static void +send_key_press_event (lay::LayoutView *view, unsigned int key, unsigned int buttons) +{ + view->view_object_widget ()->send_key_press_event (key, buttons); +} + +static void +send_mouse_move_event (lay::LayoutView *view, const db::DPoint &pt, unsigned int buttons) +{ + view->view_object_widget ()->send_mouse_move_event (pt, buttons); +} + +static void +send_leave_event (lay::LayoutView *view) +{ + view->view_object_widget ()->send_leave_event (); +} + +static void +send_enter_event (lay::LayoutView *view) +{ + view->view_object_widget ()->send_enter_event (); +} + +static void +send_mouse_press_event (lay::LayoutView *view, const db::DPoint &pt, unsigned int buttons) +{ + view->view_object_widget ()->send_mouse_press_event (pt, buttons); +} + +static void +send_mouse_double_clicked_event (lay::LayoutView *view, const db::DPoint &pt, unsigned int buttons) +{ + view->view_object_widget ()->send_mouse_double_clicked_event (pt, buttons); +} + +static void +send_mouse_release_event (lay::LayoutView *view, const db::DPoint &pt, unsigned int buttons) +{ + view->view_object_widget ()->send_mouse_release_event (pt, buttons); +} + +static void +send_wheel_event (lay::LayoutView *view, int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons) +{ + view->view_object_widget ()->send_wheel_event (delta, horizontal, pt, buttons); +} + namespace { /** @@ -2007,6 +2055,68 @@ Class decl_LayoutView (QT_EXTERNAL_BASE (QWidget) "lay", "Layou "invalid results." "\n" "This method was introduced in version 0.16." + ) + + gsi::method_ext ("send_key_press_event", &send_key_press_event, gsi::arg ("key"), gsi::arg ("buttons"), + "@brief Sends a key press event\n" + "\n" + "This method is intended to emulate the key press events sent by Qt normally in environments where Qt is not present. " + "The arguments follow the conventions used within \\Plugin#key_event for example.\n" + "\n" + "This method was introduced in version 0.28." + ) + + gsi::method_ext ("send_mouse_move_event", &send_mouse_move_event, gsi::arg ("pt"), gsi::arg ("buttons"), + "@brief Sends a mouse move event\n" + "\n" + "This method is intended to emulate the mouse move events sent by Qt normally in environments where Qt is not present. " + "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "\n" + "This method was introduced in version 0.28." + ) + + gsi::method_ext ("send_mouse_press_event", &send_mouse_press_event, gsi::arg ("pt"), gsi::arg ("buttons"), + "@brief Sends a mouse button press event\n" + "\n" + "This method is intended to emulate the mouse button press events sent by Qt normally in environments where Qt is not present. " + "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "\n" + "This method was introduced in version 0.28." + ) + + gsi::method_ext ("send_mouse_double_clicked_event", &send_mouse_double_clicked_event, gsi::arg ("pt"), gsi::arg ("buttons"), + "@brief Sends a mouse button double-click event\n" + "\n" + "This method is intended to emulate the mouse button double-click events sent by Qt normally in environments where Qt is not present. " + "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "\n" + "This method was introduced in version 0.28." + ) + + gsi::method_ext ("send_mouse_release_event", &send_mouse_release_event, gsi::arg ("pt"), gsi::arg ("buttons"), + "@brief Sends a mouse button release event\n" + "\n" + "This method is intended to emulate the mouse button release events sent by Qt normally in environments where Qt is not present. " + "The arguments follow the conventions used within \\Plugin#mouse_move_event for example.\n" + "\n" + "This method was introduced in version 0.28." + ) + + gsi::method_ext ("send_leave_event", &send_leave_event, + "@brief Sends a mouse window leave event\n" + "\n" + "This method is intended to emulate the mouse mouse window leave events sent by Qt normally in environments where Qt is not present. " + "\n" + "This method was introduced in version 0.28." + ) + + gsi::method_ext ("send_enter_event", &send_enter_event, + "@brief Sends a mouse window leave event\n" + "\n" + "This method is intended to emulate the mouse mouse window leave events sent by Qt normally in environments where Qt is not present. " + "\n" + "This method was introduced in version 0.28." + ) + + gsi::method_ext ("send_wheel_event", &send_wheel_event, gsi::arg ("delta"), gsi::arg ("horizontal"), gsi::arg ("pt"), gsi::arg ("buttons"), + "@brief Sends a mouse wheel event\n" + "\n" + "This method is intended to emulate the mouse wheel events sent by Qt normally in environments where Qt is not present. " + "The arguments follow the conventions used within \\Plugin#wheel_event for example.\n" + "\n" + "This method was introduced in version 0.28." ), "@brief The view object presenting one or more layout objects\n" "\n" diff --git a/src/laybasic/laybasic/layCellTreeModel.cc b/src/laybasic/laybasic/layCellTreeModel.cc index d8e4ca573..3f501eff9 100644 --- a/src/laybasic/laybasic/layCellTreeModel.cc +++ b/src/laybasic/laybasic/layCellTreeModel.cc @@ -23,6 +23,7 @@ #include "layCellTreeModel.h" #include "layLayoutView.h" +#include "layDragDropData.h" #include "tlGlobPattern.h" #include "dbPCellHeader.h" #include "dbPCellVariant.h" diff --git a/src/laybasic/laybasic/layLayoutViewFunctions.cc b/src/laybasic/laybasic/layLayoutViewFunctions.cc index 5ae02957d..36bd854f3 100644 --- a/src/laybasic/laybasic/layLayoutViewFunctions.cc +++ b/src/laybasic/laybasic/layLayoutViewFunctions.cc @@ -433,7 +433,7 @@ LayoutViewFunctions::cm_cell_user_properties () lay::UserPropertiesForm props_form (view ()); if (props_form.show (view (), cv_index, prop_id)) { - view ()->transaction (tl::to_string (QObject::tr ("Edit cell's user properties"))); + view ()->transaction (tl::to_string (tr ("Edit cell's user properties"))); cell.prop_id (prop_id); view ()->commit (); @@ -456,7 +456,7 @@ LayoutViewFunctions::cm_cell_replace () if (cv_index >= 0 && paths.size () > 0) { if (paths.size () > 1) { - throw tl::Exception (tl::to_string (QObject::tr ("Replace cell cannot be used when multiple cells are selected"))); + throw tl::Exception (tl::to_string (tr ("Replace cell cannot be used when multiple cells are selected"))); } db::Layout &layout = view ()->cellview (cv_index)->layout (); @@ -487,7 +487,7 @@ LayoutViewFunctions::cm_cell_replace () view ()->clear_selection (); - view ()->transaction (tl::to_string (QObject::tr ("Replace cells"))); + view ()->transaction (tl::to_string (tr ("Replace cells"))); // replace instances of the target cell with the new cell @@ -555,7 +555,7 @@ LayoutViewFunctions::cm_lay_convert_to_static () db::Layout &layout = view ()->cellview (cv_index)->layout (); - view ()->transaction (tl::to_string (QObject::tr ("Convert all cells to static"))); + view ()->transaction (tl::to_string (tr ("Convert all cells to static"))); std::vector cells; for (db::Layout::const_iterator c = layout.begin (); c != layout.end (); ++c) { @@ -611,7 +611,7 @@ LayoutViewFunctions::cm_cell_convert_to_static () view ()->clear_selection (); - view ()->transaction (tl::to_string (QObject::tr ("Convert cells to static"))); + view ()->transaction (tl::to_string (tr ("Convert cells to static"))); std::map cell_map; @@ -697,7 +697,7 @@ LayoutViewFunctions::cm_cell_delete () } } - view ()->transaction (tl::to_string (QObject::tr ("Delete cells"))); + view ()->transaction (tl::to_string (tr ("Delete cells"))); if (mode == 0 || mode == 2) { layout.delete_cells (cells_to_delete); @@ -730,7 +730,7 @@ void LayoutViewFunctions::cm_layer_cut () { if (view ()->control_panel ()) { - db::Transaction trans (manager (), tl::to_string (QObject::tr ("Cut Layers"))); + db::Transaction trans (manager (), tl::to_string (tr ("Cut Layers"))); view ()->control_panel ()->cut (); } } @@ -739,7 +739,7 @@ void LayoutViewFunctions::cm_layer_paste () { if (view ()->control_panel ()) { - db::Transaction trans (manager (), tl::to_string (QObject::tr ("Paste Layers"))); + db::Transaction trans (manager (), tl::to_string (tr ("Paste Layers"))); view ()->control_panel ()->paste (); } } @@ -758,7 +758,7 @@ void LayoutViewFunctions::cm_cell_paste () { if (view ()->hierarchy_panel ()) { - db::Transaction trans (manager (), tl::to_string (QObject::tr ("Paste Cells"))); + db::Transaction trans (manager (), tl::to_string (tr ("Paste Cells"))); view ()->hierarchy_panel ()->paste (); } } @@ -789,12 +789,12 @@ LayoutViewFunctions::cm_cell_flatten () std::vector paths; view ()->hierarchy_panel ()->selected_cells (cv_index, paths); if (paths.empty ()) { - throw tl::Exception (tl::to_string (QObject::tr ("No cells selected for flattening"))); + throw tl::Exception (tl::to_string (tr ("No cells selected for flattening"))); } for (std::vector::const_iterator p = paths.begin (); p != paths.end (); ++p) { if (p->size () > 0 && cv->layout ().cell (p->back ()).is_proxy ()) { - throw tl::Exception (tl::to_string (QObject::tr ("Cannot use this function on a PCell or library cell"))); + throw tl::Exception (tl::to_string (tr ("Cannot use this function on a PCell or library cell"))); } } @@ -809,7 +809,7 @@ LayoutViewFunctions::cm_cell_flatten () if (manager () && manager ()->is_enabled ()) { lay::TipDialog td (QApplication::activeWindow (), - tl::to_string (QObject::tr ("Undo buffering for the following operation can be memory and time consuming.\nChoose \"Yes\" to use undo buffering or \"No\" for no undo buffering. Warning: in the latter case, the undo history will be lost.\n\nChoose undo buffering?")), + tl::to_string (tr ("Undo buffering for the following operation can be memory and time consuming.\nChoose \"Yes\" to use undo buffering or \"No\" for no undo buffering. Warning: in the latter case, the undo history will be lost.\n\nChoose undo buffering?")), "flatten-undo-buffering", lay::TipDialog::yesnocancel_buttons); @@ -832,7 +832,7 @@ LayoutViewFunctions::cm_cell_flatten () if (! supports_undo) { manager ()->clear (); } else { - manager ()->transaction (tl::to_string (QObject::tr ("Flatten cell"))); + manager ()->transaction (tl::to_string (tr ("Flatten cell"))); } } @@ -890,7 +890,7 @@ LayoutViewFunctions::cm_cell_rename () std::string name (layout.cell_name (path.back ())); if (name_dialog.exec_dialog (layout, name)) { - view ()->transaction (tl::to_string (QObject::tr ("Rename cell"))); + view ()->transaction (tl::to_string (tr ("Rename cell"))); layout.rename_cell (path.back (), name.c_str ()); view ()->commit (); @@ -921,7 +921,7 @@ LayoutViewFunctions::cm_cell_hide () std::vector paths; view ()->hierarchy_panel ()->selected_cells (view ()->active_cellview_index (), paths); - view ()->transaction (tl::to_string (QObject::tr ("Hide cell"))); + view ()->transaction (tl::to_string (tr ("Hide cell"))); for (std::vector::const_iterator p = paths.begin (); p != paths.end (); ++p) { if (! p->empty ()) { @@ -942,7 +942,7 @@ LayoutViewFunctions::cm_cell_show () std::vector paths; view ()->hierarchy_panel ()->selected_cells (view ()->active_cellview_index (), paths); - view ()->transaction (tl::to_string (QObject::tr ("Show cell"))); + view ()->transaction (tl::to_string (tr ("Show cell"))); for (std::vector::const_iterator p = paths.begin (); p != paths.end (); ++p) { if (! p->empty ()) { @@ -959,7 +959,7 @@ void LayoutViewFunctions::cm_cell_show_all () { if (view ()->hierarchy_panel ()) { - view ()->transaction (tl::to_string (QObject::tr ("Show all cells"))); + view ()->transaction (tl::to_string (tr ("Show all cells"))); view ()->show_all_cells (); view ()->commit (); } @@ -1270,7 +1270,7 @@ LayoutViewFunctions::cm_reload () if (view ()->cellviews () > 1) { - lay::SelectCellViewForm form (0, view (), tl::to_string (QObject::tr ("Select Layouts To Reload"))); + lay::SelectCellViewForm form (0, view (), tl::to_string (tr ("Select Layouts To Reload"))); form.select_all (); if (form.exec () == QDialog::Accepted) { @@ -1308,10 +1308,10 @@ LayoutViewFunctions::cm_reload () if (dirty_layouts != 0) { QMessageBox mbox (view ()); - mbox.setText (tl::to_qstring (tl::to_string (QObject::tr ("The following layouts need saving:\n\n")) + dirty_files + "\n\nPress 'Reload Without Saving' to reload anyhow and discard changes.")); - mbox.setWindowTitle (QObject::tr ("Save Needed")); + mbox.setText (tl::to_qstring (tl::to_string (tr ("The following layouts need saving:\n\n")) + dirty_files + "\n\nPress 'Reload Without Saving' to reload anyhow and discard changes.")); + mbox.setWindowTitle (tr ("Save Needed")); mbox.setIcon (QMessageBox::Warning); - QAbstractButton *yes_button = mbox.addButton (QObject::tr ("Reload Without Saving"), QMessageBox::YesRole); + QAbstractButton *yes_button = mbox.addButton (tr ("Reload Without Saving"), QMessageBox::YesRole); mbox.addButton (QMessageBox::Cancel); mbox.exec (); @@ -1352,7 +1352,7 @@ LayoutViewFunctions::transform_layout (const db::DCplxTrans &tr_mic) db::Layout &layout = view ()->cellview (cv_index)->layout (); - db::ICplxTrans tr (db::DCplxTrans (1.0 / layout.dbu ()) * tr_mic * db::DCplxTrans (layout.dbu ())); + db::ICplxTrans trans (db::DCplxTrans (1.0 / layout.dbu ()) * tr_mic * db::DCplxTrans (layout.dbu ())); bool has_proxy = false; for (db::Layout::const_iterator c = layout.begin (); ! has_proxy && c != layout.end (); ++c) { @@ -1361,19 +1361,19 @@ LayoutViewFunctions::transform_layout (const db::DCplxTrans &tr_mic) if (has_proxy && QMessageBox::question (view (), - QObject::tr ("Transforming PCells Or Library Cells"), - QObject::tr ("The layout contains PCells or library cells or both.\n" - "Any changes to such cells may be lost when their layout is refreshed later.\n" - "Consider using 'Convert all cells to static' before transforming the layout.\n" - "\n" - "Would you like to continue?\n" - "Choose 'Yes' to continue anyway. Choose 'No' to cancel."), + tr ("Transforming PCells Or Library Cells"), + tr ("The layout contains PCells or library cells or both.\n" + "Any changes to such cells may be lost when their layout is refreshed later.\n" + "Consider using 'Convert all cells to static' before transforming the layout.\n" + "\n" + "Would you like to continue?\n" + "Choose 'Yes' to continue anyway. Choose 'No' to cancel."), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { return; } - view ()->transaction (tl::to_string (QObject::tr ("Transform layout"))); - layout.transform (tr); + view ()->transaction (tl::to_string (tr ("Transform layout"))); + layout.transform (trans); view ()->commit (); } @@ -1409,8 +1409,8 @@ LayoutViewFunctions::cm_lay_free_rot () { bool ok = false; QString s = QInputDialog::getText (QApplication::activeWindow (), - QObject::tr ("Free rotation"), - QObject::tr ("Rotation angle in degree (counterclockwise)"), + tr ("Free rotation"), + tr ("Rotation angle in degree (counterclockwise)"), QLineEdit::Normal, QString::fromUtf8 ("0.0"), &ok); @@ -1429,8 +1429,8 @@ LayoutViewFunctions::cm_lay_scale () { bool ok = false; QString s = QInputDialog::getText (QApplication::activeWindow (), - QObject::tr ("Scaling"), - QObject::tr ("Scaling factor"), + tr ("Scaling"), + tr ("Scaling factor"), QLineEdit::Normal, QString::fromUtf8 ("1.0"), &ok); @@ -1502,8 +1502,8 @@ LayoutViewFunctions::cm_sel_free_rot () { bool ok = false; QString s = QInputDialog::getText (QApplication::activeWindow (), - QObject::tr ("Free rotation"), - QObject::tr ("Rotation angle in degree (counterclockwise)"), + tr ("Free rotation"), + tr ("Rotation angle in degree (counterclockwise)"), QLineEdit::Normal, QString::fromUtf8 ("0.0"), &ok); @@ -1527,8 +1527,8 @@ LayoutViewFunctions::cm_sel_scale () { bool ok = false; QString s = QInputDialog::getText (QApplication::activeWindow (), - QObject::tr ("Scaling"), - QObject::tr ("Scaling factor"), + tr ("Scaling"), + tr ("Scaling factor"), QLineEdit::Normal, QString::fromUtf8 ("1.0"), &ok); @@ -1560,7 +1560,7 @@ LayoutViewFunctions::cm_sel_move_to () { db::DBox sel_bbox (view ()->lay::Editables::selection_bbox ()); if (sel_bbox.empty ()) { - throw tl::Exception (tl::to_string (QObject::tr ("Nothing selected to move"))); + throw tl::Exception (tl::to_string (tr ("Nothing selected to move"))); } double x = sel_bbox.left () + (sel_bbox.width () * (1 + m_move_to_origin_mode_x) * 0.5); @@ -1623,7 +1623,7 @@ LayoutViewFunctions::cm_copy_layer () if (manager () && manager ()->is_enabled ()) { lay::TipDialog td (QApplication::activeWindow (), - tl::to_string (QObject::tr ("Undo buffering for the following operation can be memory and time consuming.\nChoose \"Yes\" to use undo buffering or \"No\" for no undo buffering. Warning: in the latter case, the undo history will be lost.\n\nChoose undo buffering?")), + tl::to_string (tr ("Undo buffering for the following operation can be memory and time consuming.\nChoose \"Yes\" to use undo buffering or \"No\" for no undo buffering. Warning: in the latter case, the undo history will be lost.\n\nChoose undo buffering?")), "copy-layer-undo-buffering", lay::TipDialog::yesnocancel_buttons); @@ -1645,7 +1645,7 @@ LayoutViewFunctions::cm_copy_layer () if (! supports_undo) { manager ()->clear (); } else { - manager ()->transaction (tl::to_string (QObject::tr ("Duplicate layer"))); + manager ()->transaction (tl::to_string (tr ("Duplicate layer"))); } } @@ -1653,7 +1653,7 @@ LayoutViewFunctions::cm_copy_layer () bool same_layout = (&view ()->cellview (m_copy_cvr)->layout () == &view ()->cellview (m_copy_cva)->layout ()); if (same_layout && m_copy_layera == m_copy_layerr) { - throw tl::Exception (tl::to_string (QObject::tr ("Source and target layer must not be identical for duplicate operation"))); + throw tl::Exception (tl::to_string (tr ("Source and target layer must not be identical for duplicate operation"))); } if (m_duplicate_hier_mode == 0) { @@ -1780,11 +1780,11 @@ LayoutViewFunctions::cm_new_layer () for (unsigned int l = 0; l < cv->layout ().layers (); ++l) { if (cv->layout ().is_valid_layer (l) && cv->layout ().get_properties (l).log_equal (m_new_layer_props)) { - throw tl::Exception (tl::to_string (QObject::tr ("A layer with that signature already exists: ")) + m_new_layer_props.to_string ()); + throw tl::Exception (tl::to_string (tr ("A layer with that signature already exists: ")) + m_new_layer_props.to_string ()); } } - view ()->transaction (tl::to_string (QObject::tr ("New layer"))); + view ()->transaction (tl::to_string (tr ("New layer"))); unsigned int l = cv->layout ().insert_layer (m_new_layer_props); std::vector nl; @@ -1810,7 +1810,7 @@ LayoutViewFunctions::cm_align_cell_origin () return; } if (cell->is_proxy ()) { - throw tl::Exception (tl::to_string (QObject::tr ("Cannot use this function on a PCell or library cell"))); + throw tl::Exception (tl::to_string (tr ("Cannot use this function on a PCell or library cell"))); } lay::AlignCellOptionsDialog dialog (view ()); @@ -1818,7 +1818,7 @@ LayoutViewFunctions::cm_align_cell_origin () view ()->clear_selection (); - view ()->transaction (tl::to_string (QObject::tr ("Align cell origin"))); + view ()->transaction (tl::to_string (tr ("Align cell origin"))); db::Box bbox; @@ -1900,12 +1900,12 @@ LayoutViewFunctions::cm_edit_layer () { lay::LayerPropertiesConstIterator sel = view ()->current_layer (); if (sel.is_null ()) { - throw tl::Exception (tl::to_string (QObject::tr ("No layer selected for editing it's properties"))); + throw tl::Exception (tl::to_string (tr ("No layer selected for editing it's properties"))); } int index = sel->cellview_index (); if (sel->has_children () || index < 0 || int (view ()->cellviews ()) <= index || sel->layer_index () < 0) { - throw tl::Exception (tl::to_string (QObject::tr ("No valid layer selected for editing it's properties"))); + throw tl::Exception (tl::to_string (tr ("No valid layer selected for editing it's properties"))); } const lay::CellView &cv = view ()->cellview (index); @@ -1917,11 +1917,11 @@ LayoutViewFunctions::cm_edit_layer () for (unsigned int l = 0; l < cv->layout ().layers (); ++l) { if (cv->layout ().is_valid_layer (l) && int (l) != sel->layer_index () && cv->layout ().get_properties (l).log_equal (layer_props)) { - throw tl::Exception (tl::to_string (QObject::tr ("A layer with that signature already exists: ")) + layer_props.to_string ()); + throw tl::Exception (tl::to_string (tr ("A layer with that signature already exists: ")) + layer_props.to_string ()); } } - view ()->transaction (tl::to_string (QObject::tr ("Edit layer"))); + view ()->transaction (tl::to_string (tr ("Edit layer"))); cv->layout ().set_properties (sel->layer_index (), layer_props); @@ -1963,13 +1963,13 @@ LayoutViewFunctions::cm_delete_layer () } if (valid_sel.empty ()) { - throw tl::Exception (tl::to_string (QObject::tr ("No or no valid layer selected for deleting them"))); + throw tl::Exception (tl::to_string (tr ("No or no valid layer selected for deleting them"))); } view ()->cancel_edits (); view ()->clear_selection (); - view ()->transaction (tl::to_string (QObject::tr ("Delete layers"))); + view ()->transaction (tl::to_string (tr ("Delete layers"))); // Hint: delete_layer must come before the layers are actually deleted in because // for undo this must be the last thing to do (otherwise the layout is not propertly set up) @@ -2002,7 +2002,7 @@ LayoutViewFunctions::cm_clear_layer () { std::vector sel = view ()->selected_layers (); if (sel.empty ()) { - throw tl::Exception (tl::to_string (QObject::tr ("No layer selected for clearing"))); + throw tl::Exception (tl::to_string (tr ("No layer selected for clearing"))); } lay::ClearLayerModeDialog mode_dialog (view ()); @@ -2011,7 +2011,7 @@ LayoutViewFunctions::cm_clear_layer () view ()->cancel_edits (); view ()->clear_selection (); - view ()->transaction (tl::to_string (QObject::tr ("Clear layer"))); + view ()->transaction (tl::to_string (tr ("Clear layer"))); for (std::vector::const_iterator si = sel.begin (); si != sel.end (); ++si) { @@ -2058,153 +2058,153 @@ public: // secret menu entries at = "@secrets.end"; - menu_entries.push_back (lay::menu_item ("cm_paste_interactive", "paste_interactive:edit", at, tl::to_string (QObject::tr ("Paste Interactive")))); - menu_entries.push_back (lay::menu_item ("cm_duplicate_interactive", "duplicate_interactive:edit", at, tl::to_string (QObject::tr ("Duplicate Interactive")))); - menu_entries.push_back (lay::menu_item ("cm_sel_move_interactive", "sel_move_interactive:edit", at, tl::to_string (QObject::tr ("Move Interactive")))); - menu_entries.push_back (lay::menu_item ("cm_select_next_item", "select_next_item:edit", at, tl::to_string (QObject::tr ("Select Next Item(Space)")))); - menu_entries.push_back (lay::menu_item ("cm_select_next_item_add", "select_next_item_add:edit", at, tl::to_string (QObject::tr ("Select Next Item too(Shift+Space)")))); + menu_entries.push_back (lay::menu_item ("cm_paste_interactive", "paste_interactive:edit", at, tl::to_string (tr ("Paste Interactive")))); + menu_entries.push_back (lay::menu_item ("cm_duplicate_interactive", "duplicate_interactive:edit", at, tl::to_string (tr ("Duplicate Interactive")))); + menu_entries.push_back (lay::menu_item ("cm_sel_move_interactive", "sel_move_interactive:edit", at, tl::to_string (tr ("Move Interactive")))); + menu_entries.push_back (lay::menu_item ("cm_select_next_item", "select_next_item:edit", at, tl::to_string (tr ("Select Next Item(Space)")))); + menu_entries.push_back (lay::menu_item ("cm_select_next_item_add", "select_next_item_add:edit", at, tl::to_string (tr ("Select Next Item too(Shift+Space)")))); at = "edit_menu.edit_options_group"; - menu_entries.push_back (lay::menu_item ("cm_undo", "undo:edit", at, tl::to_string (QObject::tr ("Undo(Ctrl+Z)")))); - menu_entries.push_back (lay::menu_item ("cm_redo", "redo:edit", at, tl::to_string (QObject::tr ("Redo(Ctrl+Y)")))); + menu_entries.push_back (lay::menu_item ("cm_undo", "undo:edit", at, tl::to_string (tr ("Undo(Ctrl+Z)")))); + menu_entries.push_back (lay::menu_item ("cm_redo", "redo:edit", at, tl::to_string (tr ("Redo(Ctrl+Y)")))); menu_entries.push_back (lay::separator ("basic_group", at)); - menu_entries.push_back (lay::submenu ("layout_menu:edit:edit_mode", at, tl::to_string (QObject::tr ("Layout")))); + menu_entries.push_back (lay::submenu ("layout_menu:edit:edit_mode", at, tl::to_string (tr ("Layout")))); { std::string at = "edit_menu.layout_menu.end"; - menu_entries.push_back (lay::menu_item ("cm_lay_flip_x", "lay_flip_x:edit_mode", at, tl::to_string (QObject::tr ("Flip Horizontally")))); - menu_entries.push_back (lay::menu_item ("cm_lay_flip_y", "lay_flip_y:edit_mode", at, tl::to_string (QObject::tr ("Flip Vertically")))); - menu_entries.push_back (lay::menu_item ("cm_lay_rot_cw", "lay_rot_cw:edit_mode", at, tl::to_string (QObject::tr ("Rotate Clockwise")))); - menu_entries.push_back (lay::menu_item ("cm_lay_rot_ccw", "lay_rot_ccw:edit_mode", at, tl::to_string (QObject::tr ("Rotate Counterclockwise")))); - menu_entries.push_back (lay::menu_item ("cm_lay_free_rot", "lay_free_rot:edit_mode", at, tl::to_string (QObject::tr ("Rotation By Angle")))); - menu_entries.push_back (lay::menu_item ("cm_lay_scale", "lay_scale:edit_mode", at, tl::to_string (QObject::tr ("Scale")))); - menu_entries.push_back (lay::menu_item ("cm_lay_move", "lay_move:edit_mode", at, tl::to_string (QObject::tr ("Move By")))); + menu_entries.push_back (lay::menu_item ("cm_lay_flip_x", "lay_flip_x:edit_mode", at, tl::to_string (tr ("Flip Horizontally")))); + menu_entries.push_back (lay::menu_item ("cm_lay_flip_y", "lay_flip_y:edit_mode", at, tl::to_string (tr ("Flip Vertically")))); + menu_entries.push_back (lay::menu_item ("cm_lay_rot_cw", "lay_rot_cw:edit_mode", at, tl::to_string (tr ("Rotate Clockwise")))); + menu_entries.push_back (lay::menu_item ("cm_lay_rot_ccw", "lay_rot_ccw:edit_mode", at, tl::to_string (tr ("Rotate Counterclockwise")))); + menu_entries.push_back (lay::menu_item ("cm_lay_free_rot", "lay_free_rot:edit_mode", at, tl::to_string (tr ("Rotation By Angle")))); + menu_entries.push_back (lay::menu_item ("cm_lay_scale", "lay_scale:edit_mode", at, tl::to_string (tr ("Scale")))); + menu_entries.push_back (lay::menu_item ("cm_lay_move", "lay_move:edit_mode", at, tl::to_string (tr ("Move By")))); menu_entries.push_back (lay::separator ("cellop_group", at)); - menu_entries.push_back (lay::menu_item ("cm_lay_convert_to_static", "lay_convert_to_static:edit_mode", at, tl::to_string (QObject::tr ("Convert All Cells To Static")))); + menu_entries.push_back (lay::menu_item ("cm_lay_convert_to_static", "lay_convert_to_static:edit_mode", at, tl::to_string (tr ("Convert All Cells To Static")))); } - menu_entries.push_back (lay::submenu ("cell_menu:edit:edit_mode", at, tl::to_string (QObject::tr ("Cell")))); + menu_entries.push_back (lay::submenu ("cell_menu:edit:edit_mode", at, tl::to_string (tr ("Cell")))); { std::string at = "edit_menu.cell_menu.end"; - menu_entries.push_back (lay::menu_item ("cm_new_cell", "new_cell:edit:edit_mode", at, tl::to_string (QObject::tr ("New Cell")))); - menu_entries.push_back (lay::menu_item ("cm_cell_delete", "delete_cell:edit:edit_mode", at, tl::to_string (QObject::tr ("Delete Cell")))); - menu_entries.push_back (lay::menu_item ("cm_cell_rename", "rename_cell:edit:edit_mode", at, tl::to_string (QObject::tr ("Rename Cell")))); - menu_entries.push_back (lay::menu_item ("cm_cell_replace", "replace_cell:edit:edit_mode", at, tl::to_string (QObject::tr ("Replace Cell")))); - menu_entries.push_back (lay::menu_item ("cm_cell_flatten", "flatten_cell:edit:edit_mode", at, tl::to_string (QObject::tr ("Flatten Cell")))); + menu_entries.push_back (lay::menu_item ("cm_new_cell", "new_cell:edit:edit_mode", at, tl::to_string (tr ("New Cell")))); + menu_entries.push_back (lay::menu_item ("cm_cell_delete", "delete_cell:edit:edit_mode", at, tl::to_string (tr ("Delete Cell")))); + menu_entries.push_back (lay::menu_item ("cm_cell_rename", "rename_cell:edit:edit_mode", at, tl::to_string (tr ("Rename Cell")))); + menu_entries.push_back (lay::menu_item ("cm_cell_replace", "replace_cell:edit:edit_mode", at, tl::to_string (tr ("Replace Cell")))); + menu_entries.push_back (lay::menu_item ("cm_cell_flatten", "flatten_cell:edit:edit_mode", at, tl::to_string (tr ("Flatten Cell")))); menu_entries.push_back (lay::separator ("ops_group", at)); - menu_entries.push_back (lay::menu_item ("cm_adjust_origin", "adjust_cell_origin:edit:edit_mode", at, tl::to_string (QObject::tr ("Adjust Origin")))); - menu_entries.push_back (lay::menu_item ("cm_cell_convert_to_static", "convert_cell_to_static:edit_mode", at, tl::to_string (QObject::tr ("Convert Cell To Static")))); + menu_entries.push_back (lay::menu_item ("cm_adjust_origin", "adjust_cell_origin:edit:edit_mode", at, tl::to_string (tr ("Adjust Origin")))); + menu_entries.push_back (lay::menu_item ("cm_cell_convert_to_static", "convert_cell_to_static:edit_mode", at, tl::to_string (tr ("Convert Cell To Static")))); menu_entries.push_back (lay::separator ("props_group", at)); - menu_entries.push_back (lay::menu_item ("cm_cell_user_properties", "user_properties", at, tl::to_string (QObject::tr ("User Properties")))); + menu_entries.push_back (lay::menu_item ("cm_cell_user_properties", "user_properties", at, tl::to_string (tr ("User Properties")))); } - menu_entries.push_back (lay::submenu ("layer_menu:edit:edit_mode", at, tl::to_string (QObject::tr ("Layer")))); + menu_entries.push_back (lay::submenu ("layer_menu:edit:edit_mode", at, tl::to_string (tr ("Layer")))); { std::string at = "edit_menu.layer_menu.end"; - menu_entries.push_back (lay::menu_item ("cm_new_layer", "new_layer:edit:edit_mode", at, tl::to_string (QObject::tr ("New Layer")))); - menu_entries.push_back (lay::menu_item ("cm_clear_layer", "clear_layer:edit:edit_mode", at, tl::to_string (QObject::tr ("Clear Layer")))); - menu_entries.push_back (lay::menu_item ("cm_delete_layer", "delete_layer:edit:edit_mode", at, tl::to_string (QObject::tr ("Delete Layer")))); - menu_entries.push_back (lay::menu_item ("cm_copy_layer", "copy_layer:edit:edit_mode", at, tl::to_string (QObject::tr ("Copy Layer")))); - menu_entries.push_back (lay::menu_item ("cm_edit_layer", "edit_layer:edit:edit_mode", at, tl::to_string (QObject::tr ("Edit Layer Specification")))); + menu_entries.push_back (lay::menu_item ("cm_new_layer", "new_layer:edit:edit_mode", at, tl::to_string (tr ("New Layer")))); + menu_entries.push_back (lay::menu_item ("cm_clear_layer", "clear_layer:edit:edit_mode", at, tl::to_string (tr ("Clear Layer")))); + menu_entries.push_back (lay::menu_item ("cm_delete_layer", "delete_layer:edit:edit_mode", at, tl::to_string (tr ("Delete Layer")))); + menu_entries.push_back (lay::menu_item ("cm_copy_layer", "copy_layer:edit:edit_mode", at, tl::to_string (tr ("Copy Layer")))); + menu_entries.push_back (lay::menu_item ("cm_edit_layer", "edit_layer:edit:edit_mode", at, tl::to_string (tr ("Edit Layer Specification")))); } - menu_entries.push_back (lay::submenu ("selection_menu:edit", at, tl::to_string (QObject::tr ("Selection")))); + menu_entries.push_back (lay::submenu ("selection_menu:edit", at, tl::to_string (tr ("Selection")))); { std::string at = "edit_menu.selection_menu.end"; - menu_entries.push_back (lay::menu_item ("cm_sel_flip_x", "sel_flip_x", at, tl::to_string (QObject::tr ("Flip Horizontally")))); - menu_entries.push_back (lay::menu_item ("cm_sel_flip_y", "sel_flip_y", at, tl::to_string (QObject::tr ("Flip Vertically")))); - menu_entries.push_back (lay::menu_item ("cm_sel_rot_cw", "sel_rot_cw", at, tl::to_string (QObject::tr ("Rotate Clockwise")))); - menu_entries.push_back (lay::menu_item ("cm_sel_rot_ccw", "sel_rot_ccw", at, tl::to_string (QObject::tr ("Rotate Counterclockwise")))); - menu_entries.push_back (lay::menu_item ("cm_sel_free_rot", "sel_free_rot", at, tl::to_string (QObject::tr ("Rotation By Angle")))); - menu_entries.push_back (lay::menu_item ("cm_sel_scale", "sel_scale", at, tl::to_string (QObject::tr ("Scale")))); - menu_entries.push_back (lay::menu_item ("cm_sel_move", "sel_move", at, tl::to_string (QObject::tr ("Move By")))); - menu_entries.push_back (lay::menu_item ("cm_sel_move_to", "sel_move_to", at, tl::to_string (QObject::tr ("Move To")))); + menu_entries.push_back (lay::menu_item ("cm_sel_flip_x", "sel_flip_x", at, tl::to_string (tr ("Flip Horizontally")))); + menu_entries.push_back (lay::menu_item ("cm_sel_flip_y", "sel_flip_y", at, tl::to_string (tr ("Flip Vertically")))); + menu_entries.push_back (lay::menu_item ("cm_sel_rot_cw", "sel_rot_cw", at, tl::to_string (tr ("Rotate Clockwise")))); + menu_entries.push_back (lay::menu_item ("cm_sel_rot_ccw", "sel_rot_ccw", at, tl::to_string (tr ("Rotate Counterclockwise")))); + menu_entries.push_back (lay::menu_item ("cm_sel_free_rot", "sel_free_rot", at, tl::to_string (tr ("Rotation By Angle")))); + menu_entries.push_back (lay::menu_item ("cm_sel_scale", "sel_scale", at, tl::to_string (tr ("Scale")))); + menu_entries.push_back (lay::menu_item ("cm_sel_move", "sel_move", at, tl::to_string (tr ("Move By")))); + menu_entries.push_back (lay::menu_item ("cm_sel_move_to", "sel_move_to", at, tl::to_string (tr ("Move To")))); } menu_entries.push_back (lay::separator ("utils_group", at)); - menu_entries.push_back (lay::submenu ("utils_menu:edit:edit_mode", at, tl::to_string (QObject::tr ("Utilities")))); + menu_entries.push_back (lay::submenu ("utils_menu:edit:edit_mode", at, tl::to_string (tr ("Utilities")))); menu_entries.push_back (lay::separator ("misc_group", at)); - menu_entries.push_back (lay::menu_item ("cm_delete", "delete:edit", at, tl::to_string (QObject::tr ("Delete(Del)")))); - menu_entries.push_back (lay::menu_item ("cm_show_properties", "show_properties:edit", at, tl::to_string (QObject::tr ("Properties(Q)")))); + menu_entries.push_back (lay::menu_item ("cm_delete", "delete:edit", at, tl::to_string (tr ("Delete(Del)")))); + menu_entries.push_back (lay::menu_item ("cm_show_properties", "show_properties:edit", at, tl::to_string (tr ("Properties(Q)")))); menu_entries.push_back (lay::separator ("cpc_group", at)); - menu_entries.push_back (lay::menu_item ("cm_copy", "copy:edit", at, tl::to_string (QObject::tr ("Copy(Ctrl+C)")))); - menu_entries.push_back (lay::menu_item ("cm_cut", "cut:edit", at, tl::to_string (QObject::tr ("Cut(Ctrl+X)")))); - menu_entries.push_back (lay::menu_item ("cm_paste", "paste:edit", at, tl::to_string (QObject::tr ("Paste(Ctrl+V)")))); - menu_entries.push_back (lay::menu_item ("cm_duplicate", "duplicate:edit", at, tl::to_string (QObject::tr ("Duplicate(Ctrl+B)")))); + menu_entries.push_back (lay::menu_item ("cm_copy", "copy:edit", at, tl::to_string (tr ("Copy(Ctrl+C)")))); + menu_entries.push_back (lay::menu_item ("cm_cut", "cut:edit", at, tl::to_string (tr ("Cut(Ctrl+X)")))); + menu_entries.push_back (lay::menu_item ("cm_paste", "paste:edit", at, tl::to_string (tr ("Paste(Ctrl+V)")))); + menu_entries.push_back (lay::menu_item ("cm_duplicate", "duplicate:edit", at, tl::to_string (tr ("Duplicate(Ctrl+B)")))); menu_entries.push_back (lay::separator ("modes_group", at)); - menu_entries.push_back (lay::submenu ("mode_menu", at, tl::to_string (QObject::tr ("Mode")))); + menu_entries.push_back (lay::submenu ("mode_menu", at, tl::to_string (tr ("Mode")))); - menu_entries.push_back (lay::submenu ("select_menu", at, tl::to_string (QObject::tr ("Select")))); + menu_entries.push_back (lay::submenu ("select_menu", at, tl::to_string (tr ("Select")))); { std::string at = "edit_menu.select_menu.end"; - menu_entries.push_back (lay::menu_item ("cm_select_all", "select_all", at, tl::to_string (QObject::tr ("Select All")))); - menu_entries.push_back (lay::menu_item ("cm_unselect_all", "unselect_all", at, tl::to_string (QObject::tr ("Unselect All")))); + menu_entries.push_back (lay::menu_item ("cm_select_all", "select_all", at, tl::to_string (tr ("Select All")))); + menu_entries.push_back (lay::menu_item ("cm_unselect_all", "unselect_all", at, tl::to_string (tr ("Unselect All")))); menu_entries.push_back (lay::separator ("edit_select_basic_group", at)); - menu_entries.push_back (lay::menu_item ("lv:enable_all", "enable_all", at, tl::to_string (QObject::tr ("Enable All")))); - menu_entries.push_back (lay::menu_item ("lv:disable_all", "disable_all", at, tl::to_string (QObject::tr ("Disable All")))); + menu_entries.push_back (lay::menu_item ("lv:enable_all", "enable_all", at, tl::to_string (tr ("Enable All")))); + menu_entries.push_back (lay::menu_item ("lv:disable_all", "disable_all", at, tl::to_string (tr ("Disable All")))); menu_entries.push_back (lay::separator ("edit_select_individual_group", at)); }; menu_entries.push_back (lay::separator ("cancel_group", at)); - menu_entries.push_back (lay::menu_item ("cm_cancel", "cancel", at, tl::to_string (QObject::tr ("Cancel(Esc)")))); + menu_entries.push_back (lay::menu_item ("cm_cancel", "cancel", at, tl::to_string (tr ("Cancel(Esc)")))); at = "bookmark_menu.end"; - menu_entries.push_back (lay::submenu ("goto_bookmark_menu", at, tl::to_string (QObject::tr ("Goto Bookmark")))); - menu_entries.push_back (lay::menu_item ("cm_bookmark_view", "bookmark_view", at, tl::to_string (QObject::tr ("Bookmark This View")))); + menu_entries.push_back (lay::submenu ("goto_bookmark_menu", at, tl::to_string (tr ("Goto Bookmark")))); + menu_entries.push_back (lay::menu_item ("cm_bookmark_view", "bookmark_view", at, tl::to_string (tr ("Bookmark This View")))); menu_entries.push_back (lay::separator ("bookmark_mgm_group", at)); - menu_entries.push_back (lay::menu_item ("cm_manage_bookmarks", "manage_bookmarks", at, tl::to_string (QObject::tr ("Manage Bookmarks")))); - menu_entries.push_back (lay::menu_item ("cm_load_bookmarks", "load_bookmarks", at, tl::to_string (QObject::tr ("Load Bookmarks")))); - menu_entries.push_back (lay::menu_item ("cm_save_bookmarks", "save_bookmarks", at, tl::to_string (QObject::tr ("Save Bookmarks")))); - menu_entries.push_back (lay::submenu ("open_recent_menu_bookmarks", at, tl::to_string (QObject::tr ("Recent Bookmark Files")))); + menu_entries.push_back (lay::menu_item ("cm_manage_bookmarks", "manage_bookmarks", at, tl::to_string (tr ("Manage Bookmarks")))); + menu_entries.push_back (lay::menu_item ("cm_load_bookmarks", "load_bookmarks", at, tl::to_string (tr ("Load Bookmarks")))); + menu_entries.push_back (lay::menu_item ("cm_save_bookmarks", "save_bookmarks", at, tl::to_string (tr ("Save Bookmarks")))); + menu_entries.push_back (lay::submenu ("open_recent_menu_bookmarks", at, tl::to_string (tr ("Recent Bookmark Files")))); at = "zoom_menu.end"; - menu_entries.push_back (lay::submenu ("global_trans", at, tl::to_string (QObject::tr ("Global Transformation")))); + menu_entries.push_back (lay::submenu ("global_trans", at, tl::to_string (tr ("Global Transformation")))); { std::string at = "zoom_menu.global_trans.end"; - menu_entries.push_back (lay::config_menu_item ("r0", at, tl::to_string (QObject::tr ("\\(r0\\)<:/r0.png>")), cfg_global_trans, "?r0 *1 0,0")); - menu_entries.push_back (lay::config_menu_item ("r90", at, tl::to_string (QObject::tr ("\\(r90\\)<:/r90.png>")), cfg_global_trans, "?r90 *1 0,0")); - menu_entries.push_back (lay::config_menu_item ("r180", at, tl::to_string (QObject::tr ("\\(r180\\)<:/r180.png>")), cfg_global_trans, "?r180 *1 0,0")); - menu_entries.push_back (lay::config_menu_item ("r270", at, tl::to_string (QObject::tr ("\\(r270\\)<:/r270.png>")), cfg_global_trans, "?r270 *1 0,0")); - menu_entries.push_back (lay::config_menu_item ("m0", at, tl::to_string (QObject::tr ("\\(m0\\)<:/m0.png>")), cfg_global_trans, "?m0 *1 0,0")); - menu_entries.push_back (lay::config_menu_item ("m45", at, tl::to_string (QObject::tr ("\\(m45\\)<:/m45.png>")), cfg_global_trans, "?m45 *1 0,0")); - menu_entries.push_back (lay::config_menu_item ("m90", at, tl::to_string (QObject::tr ("\\(m90\\)<:/m90.png>")), cfg_global_trans, "?m90 *1 0,0")); - menu_entries.push_back (lay::config_menu_item ("m135", at, tl::to_string (QObject::tr ("\\(m135\\)<:/m135.png>")), cfg_global_trans, "?m135 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("r0", at, tl::to_string (tr ("\\(r0\\)<:/r0.png>")), cfg_global_trans, "?r0 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("r90", at, tl::to_string (tr ("\\(r90\\)<:/r90.png>")), cfg_global_trans, "?r90 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("r180", at, tl::to_string (tr ("\\(r180\\)<:/r180.png>")), cfg_global_trans, "?r180 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("r270", at, tl::to_string (tr ("\\(r270\\)<:/r270.png>")), cfg_global_trans, "?r270 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("m0", at, tl::to_string (tr ("\\(m0\\)<:/m0.png>")), cfg_global_trans, "?m0 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("m45", at, tl::to_string (tr ("\\(m45\\)<:/m45.png>")), cfg_global_trans, "?m45 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("m90", at, tl::to_string (tr ("\\(m90\\)<:/m90.png>")), cfg_global_trans, "?m90 *1 0,0")); + menu_entries.push_back (lay::config_menu_item ("m135", at, tl::to_string (tr ("\\(m135\\)<:/m135.png>")), cfg_global_trans, "?m135 *1 0,0")); } menu_entries.push_back (lay::separator ("hier_group", at)); - menu_entries.push_back (lay::menu_item ("cm_max_hier", "max_hier", at, tl::to_string (QObject::tr ("Full Hierarchy(*)")))); - menu_entries.push_back (lay::menu_item ("cm_max_hier_0", "max_hier_0", at, tl::to_string (QObject::tr ("Box Only(0)")))); - menu_entries.push_back (lay::menu_item ("cm_max_hier_1", "max_hier_1", at, tl::to_string (QObject::tr ("Top Level Only(1)")))); - menu_entries.push_back (lay::menu_item ("cm_inc_max_hier", "inc_max_hier", at, tl::to_string (QObject::tr ("Increment Hierarchy(+)")))); - menu_entries.push_back (lay::menu_item ("cm_dec_max_hier", "dec_max_hier", at, tl::to_string (QObject::tr ("Decrement Hierarchy(-)")))); + menu_entries.push_back (lay::menu_item ("cm_max_hier", "max_hier", at, tl::to_string (tr ("Full Hierarchy(*)")))); + menu_entries.push_back (lay::menu_item ("cm_max_hier_0", "max_hier_0", at, tl::to_string (tr ("Box Only(0)")))); + menu_entries.push_back (lay::menu_item ("cm_max_hier_1", "max_hier_1", at, tl::to_string (tr ("Top Level Only(1)")))); + menu_entries.push_back (lay::menu_item ("cm_inc_max_hier", "inc_max_hier", at, tl::to_string (tr ("Increment Hierarchy(+)")))); + menu_entries.push_back (lay::menu_item ("cm_dec_max_hier", "dec_max_hier", at, tl::to_string (tr ("Decrement Hierarchy(-)")))); menu_entries.push_back (lay::separator ("zoom_group", at)); - menu_entries.push_back (lay::menu_item ("cm_zoom_fit", "zoom_fit", at, tl::to_string (QObject::tr ("Zoom Fit(F2)")))); - menu_entries.push_back (lay::menu_item ("cm_zoom_fit_sel", "zoom_fit_sel", at, tl::to_string (QObject::tr ("Zoom Fit Selection(Shift+F2)")))); - menu_entries.push_back (lay::menu_item ("cm_zoom_in", "zoom_in", at, tl::to_string (QObject::tr ("Zoom In(Ctrl++)")))); - menu_entries.push_back (lay::menu_item ("cm_zoom_out", "zoom_out", at, tl::to_string (QObject::tr ("Zoom Out(Ctrl+-)")))); + menu_entries.push_back (lay::menu_item ("cm_zoom_fit", "zoom_fit", at, tl::to_string (tr ("Zoom Fit(F2)")))); + menu_entries.push_back (lay::menu_item ("cm_zoom_fit_sel", "zoom_fit_sel", at, tl::to_string (tr ("Zoom Fit Selection(Shift+F2)")))); + menu_entries.push_back (lay::menu_item ("cm_zoom_in", "zoom_in", at, tl::to_string (tr ("Zoom In(Ctrl++)")))); + menu_entries.push_back (lay::menu_item ("cm_zoom_out", "zoom_out", at, tl::to_string (tr ("Zoom Out(Ctrl+-)")))); /* disabled because that interferes with the use of the arrow keys for moving the selection MenuLayoutEntry::separator ("pan_group"); - menu_entries.push_back (lay::menu_item ("cm_pan_up", "pan_up", at, tl::to_string (QObject::tr ("Pan Up(Up)")))); - menu_entries.push_back (lay::menu_item ("cm_pan_down", "pan_down", at, tl::to_string (QObject::tr ("Pan Down(Down)")))); - menu_entries.push_back (lay::menu_item ("cm_pan_left", "pan_left", at, tl::to_string (QObject::tr ("Pan Left(Left)")))); - menu_entries.push_back (lay::menu_item ("cm_pan_right", "pan_right", at, tl::to_string (QObject::tr ("Pan Right(Right)")))); + menu_entries.push_back (lay::menu_item ("cm_pan_up", "pan_up", at, tl::to_string (tr ("Pan Up(Up)")))); + menu_entries.push_back (lay::menu_item ("cm_pan_down", "pan_down", at, tl::to_string (tr ("Pan Down(Down)")))); + menu_entries.push_back (lay::menu_item ("cm_pan_left", "pan_left", at, tl::to_string (tr ("Pan Left(Left)")))); + menu_entries.push_back (lay::menu_item ("cm_pan_right", "pan_right", at, tl::to_string (tr ("Pan Right(Right)")))); */ menu_entries.push_back (lay::separator ("redraw_group", at)); - menu_entries.push_back (lay::menu_item ("cm_redraw", "redraw", at, tl::to_string (QObject::tr ("Redraw")))); + menu_entries.push_back (lay::menu_item ("cm_redraw", "redraw", at, tl::to_string (tr ("Redraw")))); menu_entries.push_back (lay::separator ("state_group", at)); menu_entries.push_back (lay::menu_item_copy ("cm_prev_display_state", "prev_display_state", at, "@toolbar.prev_display_state")); menu_entries.push_back (lay::menu_item_copy ("cm_next_display_state", "next_display_state", at, "@toolbar.next_display_state")); menu_entries.push_back (lay::separator ("select_group", at)); - menu_entries.push_back (lay::menu_item ("cm_select_cell", "select_cell:edit", at, tl::to_string (QObject::tr ("Select Cell")))); - menu_entries.push_back (lay::menu_item ("cm_select_current_cell", "select_current_cell", at, tl::to_string (QObject::tr ("Show As New Top(Ctrl+S)")))); - menu_entries.push_back (lay::menu_item ("cm_goto_position", "goto_position", at, tl::to_string (QObject::tr ("Goto Position(Ctrl+G)")))); + menu_entries.push_back (lay::menu_item ("cm_select_cell", "select_cell:edit", at, tl::to_string (tr ("Select Cell")))); + menu_entries.push_back (lay::menu_item ("cm_select_current_cell", "select_current_cell", at, tl::to_string (tr ("Show As New Top(Ctrl+S)")))); + menu_entries.push_back (lay::menu_item ("cm_goto_position", "goto_position", at, tl::to_string (tr ("Goto Position(Ctrl+G)")))); // Add a hook for inserting new items after the modes menu_entries.push_back (lay::separator ("end_modes", "@toolbar.end")); diff --git a/src/laybasic/laybasic/layPlugin.cc b/src/laybasic/laybasic/layPlugin.cc index 0cea0604a..819d2c131 100644 --- a/src/laybasic/laybasic/layPlugin.cc +++ b/src/laybasic/laybasic/layPlugin.cc @@ -62,6 +62,7 @@ PluginDeclaration::~PluginDeclaration () } } +#if defined(HAVE_QT) void PluginDeclaration::toggle_editable_enabled () { @@ -69,6 +70,7 @@ PluginDeclaration::toggle_editable_enabled () set_editable_enabled (! editable_enabled ()); END_PROTECTED } +#endif std::vector PluginDeclaration::menu_symbols () @@ -95,6 +97,7 @@ PluginDeclaration::menu_symbols () } #if defined(HAVE_QT) + namespace { class GenericMenuAction @@ -144,12 +147,10 @@ private: }; } -#endif void PluginDeclaration::init_menu (lay::Dispatcher *dispatcher) { -#if defined(HAVE_QT) // @@@ lay::AbstractMenu &menu = *dispatcher->menu (); mp_editable_mode_action.reset ((Action *) 0); @@ -259,13 +260,11 @@ PluginDeclaration::init_menu (lay::Dispatcher *dispatcher) menu.insert_item (m->second.first, name + ":mode_group", mp_mouse_mode_action.get ()); } -#endif } void PluginDeclaration::remove_menu_items (Dispatcher *dispatcher) { -#if defined(HAVE_QT) // @@@ lay::AbstractMenu *menu = dispatcher->menu (); menu->delete_items (mp_editable_mode_action.get ()); menu->delete_items (mp_mouse_mode_action.get ()); @@ -280,15 +279,16 @@ PluginDeclaration::remove_menu_items (Dispatcher *dispatcher) menu->delete_items (*a); } m_menu_actions.clear (); -#endif } +#endif + void PluginDeclaration::set_editable_enabled (bool f) { if (f != m_editable_enabled) { m_editable_enabled = f; -#if defined(HAVE_QT) // @@@ +#if defined(HAVE_QT) if (mp_editable_mode_action.get ()) { mp_editable_mode_action->set_checked (f); } diff --git a/src/laybasic/laybasic/layPlugin.h b/src/laybasic/laybasic/layPlugin.h index fc83a478b..8d95da611 100644 --- a/src/laybasic/laybasic/layPlugin.h +++ b/src/laybasic/laybasic/layPlugin.h @@ -386,6 +386,14 @@ public: return m_id; } + /** + * @brief Gets the available menu symbols from all plugins + * + * This does not mean all symbols will be available. + */ + static std::vector menu_symbols (); + +#if defined(HAVE_QT) /** * @brief Creates the menu resources for this plugin * @@ -395,17 +403,11 @@ public: */ void init_menu (lay::Dispatcher *dispatcher); - /** - * @brief Gets the available menu symbols from all plugins - * - * This does not mean all symbols will be available. - */ - static std::vector menu_symbols (); - /** * @brief Removes the menu resources associated with this plugin */ void remove_menu_items (lay::Dispatcher *dispatcher); +#endif /** * @brief Enables this editable part of the plugin @@ -455,10 +457,8 @@ public: #if defined(HAVE_QT) private slots: -#else -private: -#endif void toggle_editable_enabled (); +#endif private: int m_id; diff --git a/src/laybasic/laybasic/layViewObject.cc b/src/laybasic/laybasic/layViewObject.cc index 8a881c321..be11f9220 100644 --- a/src/laybasic/laybasic/layViewObject.cc +++ b/src/laybasic/laybasic/layViewObject.cc @@ -31,6 +31,9 @@ #include "layViewObject.h" #include "layCanvasPlane.h" #include "layBitmap.h" +#if defined(HAVE_QT) +# include "layDragDropData.h" +#endif #include "tlException.h" #include "tlAlgorithm.h" #include "tlExceptions.h" @@ -44,87 +47,6 @@ namespace lay // event rather than a single click event: const int click_tolerance = 5; -// --------------------------------------------------------------- -// Implementation of DragDropDataBase - -const char *drag_drop_mime_type () -{ - return "application/klayout-ddd"; -} - -#if defined(HAVE_QT) // @@@ -QMimeData * -DragDropDataBase::to_mime_data () const -{ - QMimeData *mimeData = new QMimeData(); - mimeData->setData (QString::fromUtf8 (drag_drop_mime_type ()), serialized ()); - return mimeData; -} -#endif - -// --------------------------------------------------------------- -// Implementation of CellDragDropData - -#if defined(HAVE_QT) // @@@ -QByteArray -CellDragDropData::serialized () const -{ - QByteArray data; - QDataStream stream (&data, QIODevice::WriteOnly); - - stream << QString::fromUtf8 ("CellDragDropData"); - stream << (quintptr) mp_layout; - stream << (quintptr) mp_library; - stream << m_cell_index; - stream << m_is_pcell; - stream << int (m_pcell_params.size ()); - for (std::vector::const_iterator i = m_pcell_params.begin (); i != m_pcell_params.end (); ++i) { - stream << tl::to_qstring (i->to_parsable_string ()); - } - - return data; -} - -bool -CellDragDropData::deserialize (const QByteArray &ba) -{ - QDataStream stream (const_cast (&ba), QIODevice::ReadOnly); - - QString tag; - stream >> tag; - - if (tag == QString::fromUtf8 ("CellDragDropData")) { - - quintptr p = 0; - stream >> p; - mp_layout = reinterpret_cast (p); - stream >> p; - mp_library = reinterpret_cast (p); - stream >> m_cell_index; - stream >> m_is_pcell; - - m_pcell_params.clear (); - int n = 0; - stream >> n; - while (n-- > 0) { - QString s; - stream >> s; - std::string stl_s = tl::to_string (s); - tl::Extractor ex (stl_s.c_str ()); - m_pcell_params.push_back (tl::Variant ()); - ex.read (m_pcell_params.back ()); - } - - return true; - - } else { - - return false; - - } -} -#endif - // --------------------------------------------------------------- // A helper function to convert a Qt modifier/buttons to klayout buttons @@ -399,9 +321,9 @@ ViewObjectWidget::set_cursor (lay::Cursor::cursor_shape cursor) void ViewObjectWidget::set_default_cursor (lay::Cursor::cursor_shape cursor) { -#if defined(HAVE_QT) if (cursor != m_default_cursor) { m_default_cursor = cursor; +#if defined(HAVE_QT) if (m_cursor == lay::Cursor::none) { if (m_default_cursor == lay::Cursor::none) { unsetCursor (); @@ -409,18 +331,16 @@ ViewObjectWidget::set_default_cursor (lay::Cursor::cursor_shape cursor) setCursor (lay::Cursor::qcursor (m_default_cursor)); } } - } #endif + } } void ViewObjectWidget::ensure_entered () { -#if defined(HAVE_QT) // @@@ if (! m_mouse_inside) { - enterEvent (0); + send_enter_event (); } -#endif } void @@ -432,7 +352,7 @@ ViewObjectWidget::begin_mouse_event (lay::Cursor::cursor_shape cursor) void ViewObjectWidget::end_mouse_event () { -#if defined(HAVE_QT) // @@@ +#if defined(HAVE_QT) if (m_cursor == lay::Cursor::none) { if (m_default_cursor == lay::Cursor::none) { unsetCursor (); @@ -445,7 +365,347 @@ ViewObjectWidget::end_mouse_event () #endif } -#if defined(HAVE_QT) // @@@ +void +ViewObjectWidget::send_key_press_event (unsigned int key, unsigned int buttons) +{ + bool done = false; + if (mp_active_service) { + done = (mp_active_service->enabled () && mp_active_service->key_event (key, buttons)); + } + + if (! done) { + key_event (key, buttons); + } +} + +void +ViewObjectWidget::do_mouse_move () +{ + m_in_mouse_move = true; + + if (m_mouse_pressed_state && + (abs (m_mouse_pos.x () - m_mouse_pressed.x ()) > click_tolerance || abs (m_mouse_pos.y () - m_mouse_pressed.y ()) > click_tolerance)) { + + begin_mouse_event (lay::Cursor::none); + + m_mouse_pressed_state = false; + + bool done = false; + + db::DPoint p = pixel_to_um (m_mouse_pressed); + + for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { + std::list::iterator gg = g; + ++gg; + done = ((*g)->enabled () && (*g)->mouse_press_event (p, m_mouse_buttons, true)); + g = gg; + } + + if (! done && mp_active_service) { + done = (mp_active_service->enabled () && mp_active_service->mouse_press_event (p, m_mouse_buttons, true)); + } + + service_iterator svc = begin_services (); + while (svc != end_services () && !done) { + service_iterator next = svc; + ++next; + done = ((*svc)->enabled () && (*svc)->mouse_press_event (p, m_mouse_buttons, false)); + svc = next; + } + + if (! done) { + mouse_press_event (p, m_mouse_buttons); + } + + end_mouse_event (); + + } + + if (! m_mouse_pressed_state) { + + begin_mouse_event (lay::Cursor::none); + + bool done = false; + + db::DPoint p = pixel_to_um (m_mouse_pos); + + for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { + std::list::iterator gg = g; + ++gg; + done = ((*g)->enabled () && (*g)->mouse_move_event (p, m_mouse_buttons, true)); + g = gg; + } + + if (! done && mp_active_service) { + done = (mp_active_service->enabled () && mp_active_service->mouse_move_event (p, m_mouse_buttons, true)); + } + + service_iterator svc = begin_services (); + while (svc != end_services () && !done) { + service_iterator next = svc; + ++next; + done = ((*svc)->enabled () && (*svc)->mouse_move_event (p, m_mouse_buttons, false)); + svc = next; + } + + if (! done) { + mouse_move_event (p, m_mouse_buttons); + } + + end_mouse_event (); + + } + + m_in_mouse_move = false; +} + +void +ViewObjectWidget::send_mouse_move_event (const db::DPoint &pt, unsigned int buttons) +{ + ensure_entered (); + m_mouse_pos = pt; + m_mouse_buttons = buttons; + do_mouse_move (); +} + +void +ViewObjectWidget::send_leave_event () +{ + try { + + bool done = false; + + for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { + std::list::iterator gg = g; + ++gg; + done = ((*g)->enabled () && (*g)->leave_event (true)); + g = gg; + } + + if (! done && mp_active_service) { + done = (mp_active_service->enabled () && mp_active_service->leave_event (true)); + } + + service_iterator svc = begin_services (); + while (svc != end_services () && !done) { + service_iterator next = svc; + ++next; + done = ((*svc)->enabled () && (*svc)->leave_event (false)); + svc = next; + } + + if (! done) { + leave_event (); + } + + end_mouse_event (); + + m_mouse_inside = false; + + } catch (...) { + m_mouse_inside = false; + throw; + } +} + +void +ViewObjectWidget::send_enter_event () +{ + m_mouse_inside = true; + + begin_mouse_event (); + + bool done = false; + + for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { + std::list::iterator gg = g; + ++gg; + done = ((*g)->enabled () && (*g)->enter_event (true)); + g = gg; + } + + if (! done && mp_active_service) { + done = (mp_active_service->enabled () && mp_active_service->enter_event (true)); + } + + service_iterator svc = begin_services (); + while (svc != end_services () && !done) { + service_iterator next = svc; + ++next; + done = ((*svc)->enabled () && (*svc)->enter_event (false)); + svc = next; + } + + if (! done) { + enter_event (); + } + + end_mouse_event (); +} + +void +ViewObjectWidget::send_mouse_press_event (const db::DPoint &pt, unsigned int buttons) +{ + ensure_entered (); +#if defined(HAVE_QT) + setFocus (); +#endif + + m_mouse_pos = pt; + m_mouse_pressed = m_mouse_pos; + + m_mouse_buttons = buttons; + + m_mouse_pressed_state = true; +} + +void +ViewObjectWidget::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 (); +#endif + + bool done = false; + + m_mouse_pos = pt; + m_mouse_pressed = m_mouse_pos; + m_mouse_pressed_state = false; + + db::DPoint p = pixel_to_um (m_mouse_pos); + + for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { + std::list::iterator gg = g; + ++gg; + done = ((*g)->m_enabled && (*g)->mouse_double_click_event (p, buttons, true)); + g = gg; + } + + if (! done && mp_active_service) { + done = (mp_active_service->enabled () && mp_active_service->mouse_double_click_event (p, buttons, true)); + } + + service_iterator svc = begin_services (); + while (svc != end_services () && !done) { + service_iterator next = svc; + ++next; + done = ((*svc)->enabled () && (*svc)->mouse_double_click_event (p, buttons, false)); + svc = next; + } + + if (! done) { + mouse_double_click_event (p, buttons); + } + + end_mouse_event (); +} + +void +ViewObjectWidget::send_mouse_release_event (const db::DPoint &pt, unsigned int /*buttons*/) +{ + try { + + ensure_entered (); + begin_mouse_event (); + + bool done = false; + + m_mouse_pos = pt; + db::DPoint p = pixel_to_um (m_mouse_pos); + + for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { + std::list::iterator gg = g; + ++gg; + if (m_mouse_pressed_state) { + done = (*g)->enabled () && (*g)->mouse_click_event (p, m_mouse_buttons, true); + } else { + done = (*g)->enabled () && (*g)->mouse_release_event (p, m_mouse_buttons, true); + } + g = gg; + } + + if (! done && mp_active_service && mp_active_service->enabled ()) { + if (m_mouse_pressed_state) { + done = mp_active_service->mouse_click_event (p, m_mouse_buttons, true); + } else { + done = mp_active_service->mouse_release_event (p, m_mouse_buttons, true); + } + } + + service_iterator svc = begin_services (); + while (svc != end_services () && !done) { + service_iterator next = svc; + ++next; + if ((*svc)->enabled ()) { + if (m_mouse_pressed_state) { + done = (*svc)->mouse_click_event (p, m_mouse_buttons, false); + } else { + done = (*svc)->mouse_release_event (p, m_mouse_buttons, false); + } + } + svc = next; + } + + if (! done) { + if (m_mouse_pressed_state) { + mouse_click_event (p, m_mouse_buttons); + } else { + mouse_release_event (p, m_mouse_buttons); + } + } + + end_mouse_event (); + + m_mouse_pressed_state = false; + + } catch (...) { + m_mouse_pressed_state = false; + throw; + } +} + +void +ViewObjectWidget::send_wheel_event (int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons) +{ + ensure_entered (); + begin_mouse_event (); + + db::DPoint p = pixel_to_um (pt); + + bool done = false; + + for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { + std::list::iterator gg = g; + ++gg; + done = ((*g)->enabled () && (*g)->wheel_event (delta, horizontal, p, buttons, true)); + g = gg; + } + + if (! done && mp_active_service) { + done = (mp_active_service->enabled () && mp_active_service->wheel_event (delta, horizontal, p, buttons, true)); + } + + service_iterator svc = begin_services (); + while (svc != end_services () && !done) { + service_iterator next = svc; + ++next; + done = ((*svc)->enabled () && (*svc)->wheel_event (delta, horizontal, p, buttons, false)); + svc = next; + } + + if (! done) { + wheel_event (delta, horizontal, p, buttons); + } + + end_mouse_event (); +} + + +#if defined(HAVE_QT) + bool ViewObjectWidget::focusNextPrevChild (bool /*next*/) { @@ -456,18 +716,8 @@ void ViewObjectWidget::keyPressEvent (QKeyEvent *e) { BEGIN_PROTECTED - unsigned int buttons = qt_to_buttons (Qt::MouseButtons (), e->modifiers ()); - - bool done = false; - if (mp_active_service) { - done = (mp_active_service->enabled () && mp_active_service->key_event ((unsigned int) e->key(), buttons)); - } - - if (! done) { - key_event ((unsigned int) e->key (), buttons); - } - + send_key_press_event ((unsigned int) e->key (), buttons); END_PROTECTED } @@ -586,139 +836,33 @@ void ViewObjectWidget::mouseMoveEvent (QMouseEvent *e) { BEGIN_PROTECTED - ensure_entered (); - m_mouse_pos = db::Point (e->pos ().x (), e->pos ().y ()); - m_mouse_buttons = qt_to_buttons (e->buttons (), e->modifiers ()); - do_mouse_move (); -END_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 -void -ViewObjectWidget::do_mouse_move () -{ - m_in_mouse_move = true; + send_mouse_move_event (p, qt_to_buttons (e->buttons (), e->modifiers ())); - if (m_mouse_pressed_state && - (abs (m_mouse_pos.x () - m_mouse_pressed.x ()) > click_tolerance || abs (m_mouse_pos.y () - m_mouse_pressed.y ()) > click_tolerance)) { - - begin_mouse_event (lay::Cursor::none); - - m_mouse_pressed_state = false; - - bool done = false; - - db::DPoint p = pixel_to_um (m_mouse_pressed); - - for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { - std::list::iterator gg = g; - ++gg; - done = ((*g)->enabled () && (*g)->mouse_press_event (p, m_mouse_buttons, true)); - g = gg; - } - - if (! done && mp_active_service) { - done = (mp_active_service->enabled () && mp_active_service->mouse_press_event (p, m_mouse_buttons, true)); - } - - service_iterator svc = begin_services (); - while (svc != end_services () && !done) { - service_iterator next = svc; - ++next; - done = ((*svc)->enabled () && (*svc)->mouse_press_event (p, m_mouse_buttons, false)); - svc = next; - } - - if (! done) { - mouse_press_event (p, m_mouse_buttons); - } - - end_mouse_event (); - - } - - if (! m_mouse_pressed_state) { - - begin_mouse_event (lay::Cursor::none); - - bool done = false; - - db::DPoint p = pixel_to_um (m_mouse_pos); - - for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { - std::list::iterator gg = g; - ++gg; - done = ((*g)->enabled () && (*g)->mouse_move_event (p, m_mouse_buttons, true)); - g = gg; - } - - if (! done && mp_active_service) { - done = (mp_active_service->enabled () && mp_active_service->mouse_move_event (p, m_mouse_buttons, true)); - } - - service_iterator svc = begin_services (); - while (svc != end_services () && !done) { - service_iterator next = svc; - ++next; - done = ((*svc)->enabled () && (*svc)->mouse_move_event (p, m_mouse_buttons, false)); - svc = next; - } - - if (! done) { - mouse_move_event (p, m_mouse_buttons); - } - - end_mouse_event (); - - } - - m_in_mouse_move = false; +END_PROTECTED } -#if defined(HAVE_QT) // @@@ void ViewObjectWidget::mouseDoubleClickEvent (QMouseEvent *e) { BEGIN_PROTECTED - ensure_entered (); - begin_mouse_event (lay::Cursor::none); - setFocus (); + 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 - bool done = false; + send_mouse_double_clicked_event (p, qt_to_buttons (e->buttons (), e->modifiers ())); - m_mouse_pos = db::Point (e->pos ().x (), e->pos ().y ()); - m_mouse_pressed = m_mouse_pos; - m_mouse_pressed_state = false; - - unsigned int buttons = qt_to_buttons (e->buttons (), e->modifiers ()); - - db::DPoint p = pixel_to_um (m_mouse_pos); - - for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { - std::list::iterator gg = g; - ++gg; - done = ((*g)->m_enabled && (*g)->mouse_double_click_event (p, buttons, true)); - g = gg; - } - - if (! done && mp_active_service) { - done = (mp_active_service->enabled () && mp_active_service->mouse_double_click_event (p, buttons, true)); - } - - service_iterator svc = begin_services (); - while (svc != end_services () && !done) { - service_iterator next = svc; - ++next; - done = ((*svc)->enabled () && (*svc)->mouse_double_click_event (p, buttons, false)); - svc = next; - } - - if (! done) { - mouse_double_click_event (p, buttons); - } - - end_mouse_event (); END_PROTECTED } @@ -730,198 +874,75 @@ ViewObjectWidget::enterEvent (QEvent * /*event*/) #endif { BEGIN_PROTECTED - m_mouse_inside = true; - - begin_mouse_event (); - - bool done = false; - - for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { - std::list::iterator gg = g; - ++gg; - done = ((*g)->enabled () && (*g)->enter_event (true)); - g = gg; - } - - if (! done && mp_active_service) { - done = (mp_active_service->enabled () && mp_active_service->enter_event (true)); - } - - service_iterator svc = begin_services (); - while (svc != end_services () && !done) { - service_iterator next = svc; - ++next; - done = ((*svc)->enabled () && (*svc)->enter_event (false)); - svc = next; - } - - if (! done) { - enter_event (); - } - - end_mouse_event (); + send_enter_event (); END_PROTECTED } -void +void ViewObjectWidget::leaveEvent (QEvent * /*event*/) { -BEGIN_PROTECTED +BEGIN_PROTECTED begin_mouse_event (); - - bool done = false; - - for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { - std::list::iterator gg = g; - ++gg; - done = ((*g)->enabled () && (*g)->leave_event (true)); - g = gg; - } - - if (! done && mp_active_service) { - done = (mp_active_service->enabled () && mp_active_service->leave_event (true)); - } - - service_iterator svc = begin_services (); - while (svc != end_services () && !done) { - service_iterator next = svc; - ++next; - done = ((*svc)->enabled () && (*svc)->leave_event (false)); - svc = next; - } - - if (! done) { - leave_event (); - } - - end_mouse_event (); END_PROTECTED - - m_mouse_inside = false; } void ViewObjectWidget::wheelEvent (QWheelEvent *e) { -BEGIN_PROTECTED - ensure_entered (); - begin_mouse_event (); +BEGIN_PROTECTED + db::DPoint p; #if QT_VERSION < 0x60000 int delta = e->delta (); - db::DPoint p = pixel_to_um (db::Point (e->pos ().x (), e->pos ().y ())); + p = db::DPoint (e->pos ().x (), e->pos ().y ()); bool horizontal = (e->orientation () == Qt::Horizontal); #else int delta = e->angleDelta ().y (); - db::DPoint p = pixel_to_um (e->position ()); + p = db::DPoint (e->position ().x (), e->position ().y ()); bool horizontal = false; #endif e->ignore (); - bool done = false; + send_wheel_event (delta, horizontal, p, qt_to_buttons (e->buttons (), e->modifiers ())); - unsigned int buttons = qt_to_buttons (e->buttons (), e->modifiers ()); - - for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { - std::list::iterator gg = g; - ++gg; - done = ((*g)->enabled () && (*g)->wheel_event (delta, horizontal, p, buttons, true)); - g = gg; - } - - if (! done && mp_active_service) { - done = (mp_active_service->enabled () && mp_active_service->wheel_event (delta, horizontal, p, buttons, true)); - } - - service_iterator svc = begin_services (); - while (svc != end_services () && !done) { - service_iterator next = svc; - ++next; - done = ((*svc)->enabled () && (*svc)->wheel_event (delta, horizontal, p, buttons, false)); - svc = next; - } - - if (! done) { - wheel_event (delta, horizontal, p, buttons); - } - - end_mouse_event (); END_PROTECTED } void ViewObjectWidget::mousePressEvent (QMouseEvent *e) { - ensure_entered (); - setFocus (); +BEGIN_PROTECTED - m_mouse_pos = db::Point (e->pos ().x (), e->pos ().y ()); - m_mouse_pressed = m_mouse_pos; + 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 - m_mouse_buttons = qt_to_buttons (e->buttons (), e->modifiers ()); - - m_mouse_pressed_state = true; + send_mouse_press_event (p, qt_to_buttons (e->buttons (), e->modifiers ())); + +END_PROTECTED } void ViewObjectWidget::mouseReleaseEvent (QMouseEvent *e) { BEGIN_PROTECTED - ensure_entered (); - begin_mouse_event (); - bool done = false; + 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 - m_mouse_pos = db::Point (e->pos ().x (), e->pos ().y ()); - db::DPoint p = pixel_to_um (m_mouse_pos); + send_mouse_press_event (p, qt_to_buttons (e->buttons (), e->modifiers ())); - for (std::list::iterator g = m_grabbed.begin (); !done && g != m_grabbed.end (); ) { - std::list::iterator gg = g; - ++gg; - if (m_mouse_pressed_state) { - done = (*g)->enabled () && (*g)->mouse_click_event (p, m_mouse_buttons, true); - } else { - done = (*g)->enabled () && (*g)->mouse_release_event (p, m_mouse_buttons, true); - } - g = gg; - } - - if (! done && mp_active_service && mp_active_service->enabled ()) { - if (m_mouse_pressed_state) { - done = mp_active_service->mouse_click_event (p, m_mouse_buttons, true); - } else { - done = mp_active_service->mouse_release_event (p, m_mouse_buttons, true); - } - } - - service_iterator svc = begin_services (); - while (svc != end_services () && !done) { - service_iterator next = svc; - ++next; - if ((*svc)->enabled ()) { - if (m_mouse_pressed_state) { - done = (*svc)->mouse_click_event (p, m_mouse_buttons, false); - } else { - done = (*svc)->mouse_release_event (p, m_mouse_buttons, false); - } - } - svc = next; - } - - if (! done) { - if (m_mouse_pressed_state) { - mouse_click_event (p, m_mouse_buttons); - } else { - mouse_release_event (p, m_mouse_buttons); - } - } - - end_mouse_event (); END_PROTECTED - - m_mouse_pressed_state = false; } + #endif void diff --git a/src/laybasic/laybasic/layViewObject.h b/src/laybasic/laybasic/layViewObject.h index dfd24623d..1df6d04b0 100644 --- a/src/laybasic/laybasic/layViewObject.h +++ b/src/laybasic/laybasic/layViewObject.h @@ -73,138 +73,9 @@ class Bitmap; class PixelBuffer; class BitmapBuffer; -LAYBASIC_PUBLIC const char *drag_drop_mime_type (); - -/** - * @brief A helper class required to store the drag/drop data - * - * Drag/drop data is basically a collection of key/value pairs. - * A category string is provided to identify the kind of data. - */ - -class LAYBASIC_PUBLIC DragDropDataBase -{ -public: - /** - * @brief Default constructor - */ - DragDropDataBase () { } - - /** - * @brief Dtor - */ - virtual ~DragDropDataBase () { } - -#if defined(HAVE_QT) // @@@ - /** - * @brief Serializes itself to an QByteArray - */ - virtual QByteArray serialized () const = 0; - - /** - * @brief Try deserialization from an QByteArray - * - * Returns false, if deserialization failed. - */ - virtual bool deserialize (const QByteArray &ba) = 0; - - /** - * @brief Create a QMimeData object from the object - */ - QMimeData *to_mime_data () const; +#if defined(HAVE_QT) +class DragDropDataBase; #endif -}; - -/** - * @brief Drag/drop data for a cell - */ - -class LAYBASIC_PUBLIC CellDragDropData - : public DragDropDataBase -{ -public: - /** - * @brief Default ctor - */ - CellDragDropData () - : mp_layout (0), mp_library (0), m_cell_index (0), m_is_pcell (false) - { - // .. nothing yet .. - } - - /** - * @brief Specifies drag & drop of a cell - * - * @param layout the layout where the cell lives in - * @param cell_index The index of the cell - */ - CellDragDropData (const db::Layout *layout, const db::Library *library, db::cell_index_type cell_or_pcell_index, bool is_pcell, const std::vector &pcell_params = std::vector ()) - : mp_layout (layout), mp_library (library), m_cell_index (cell_or_pcell_index), m_is_pcell (is_pcell), m_pcell_params (pcell_params) - { - // .. nothing yet .. - } - - /** - * @brief Gets the layout object where the cell lives in - */ - const db::Layout *layout () const - { - return mp_layout; - } - - /** - * @brief Gets the layout object where the cell lives in - */ - const db::Library *library () const - { - return mp_library; - } - - /** - * @brief PCell parameters - */ - const std::vector &pcell_params () const - { - return m_pcell_params; - } - - /** - * @brief Gets the index of the cell - */ - db::cell_index_type cell_index () const - { - return m_cell_index; - } - - /** - * @brief Gets a value indicating whether the cell is a pcell - */ - bool is_pcell () const - { - return m_is_pcell; - } - -#if defined(HAVE_QT) // @@@ - /** - * @brief Serializes itself to an QByteArray - */ - virtual QByteArray serialized () const; - - /** - * @brief Try deserialization from an QByteArray - * - * Returns false, if deserialization failed. - */ - bool deserialize (const QByteArray &ba); -#endif - -private: - const db::Layout *mp_layout; - const db::Library *mp_library; - db::cell_index_type m_cell_index; - bool m_is_pcell; - std::vector m_pcell_params; -}; /** * @brief A view service @@ -243,6 +114,7 @@ public: */ virtual bool key_event (unsigned int /*key*/, unsigned int /*buttons*/) { return false; } +#if defined(HAVE_QT) /** * @brief The drag enter event * @@ -267,6 +139,7 @@ public: * @brief The drop event */ virtual bool drop_event (const db::DPoint & /*p*/, const DragDropDataBase * /*data*/) { return false; } +#endif /** * @brief Mouse press event handler @@ -914,6 +787,7 @@ public: */ virtual void key_event (unsigned int /*key*/, unsigned int /*buttons*/) { } +#if defined(HAVE_QT) /** * @brief The drag enter event * @@ -938,6 +812,7 @@ public: * @brief The drop event */ virtual bool drop_event (const db::DPoint & /*p*/, const DragDropDataBase * /*data*/) { return false; } +#endif /** * @brief Remaining mouse double click event handler @@ -1041,7 +916,7 @@ public: /** * @brief Gets the current mouse position */ - db::Point mouse_position () const + db::DPoint mouse_position () const { return m_mouse_pos; } @@ -1081,8 +956,48 @@ public: bool image_updated (); #endif + /** + * @brief External entry point for key press event generation + */ + void send_key_press_event (unsigned int key, unsigned int buttons); + + /** + * @brief External entry point for mouse move event generation + */ + void send_mouse_move_event (const db::DPoint &pt, unsigned int buttons); + + /** + * @brief External entry point for leave event generation + */ + void send_leave_event (); + + /** + * @brief External entry point for enter event generation + */ + void send_enter_event (); + + /** + * @brief External entry point for mouse button press event generation + */ + void send_mouse_press_event (const db::DPoint &pt, unsigned int buttons); + + /** + * @brief External entry point for mouse button double-click event generation + */ + void send_mouse_double_clicked_event (const db::DPoint &pt, unsigned int buttons); + + /** + * @brief External entry point for mouse button release event generation + */ + void send_mouse_release_event (const db::DPoint &pt, unsigned int buttons); + + /** + * @brief External entry point for mouse wheel event generation + */ + void send_wheel_event (int delta, bool horizontal, const db::DPoint &pt, unsigned int buttons); + protected: -#if defined(HAVE_QT) // @@@ +#if defined(HAVE_QT) /** * @brief Qt focus event handler */ @@ -1187,8 +1102,8 @@ private: bool m_needs_update_bg; lay::ViewService *mp_active_service; db::DCplxTrans m_trans; - db::Point m_mouse_pos; - db::Point m_mouse_pressed; + db::DPoint m_mouse_pos; + db::DPoint m_mouse_pressed; bool m_mouse_pressed_state; unsigned int m_mouse_buttons; bool m_in_mouse_move; diff --git a/src/laybasic/laybasic/laybasic.pro b/src/laybasic/laybasic/laybasic.pro index 81e2fceb3..6ec570a0f 100644 --- a/src/laybasic/laybasic/laybasic.pro +++ b/src/laybasic/laybasic/laybasic.pro @@ -104,6 +104,7 @@ DEFINES += MAKE_LAYBASIC_LIBRARY layConfigurationDialog.cc \ layCursor.cc \ layDialogs.cc \ + layDragDropData.cc \ layEditLineStyleWidget.cc \ layEditLineStylesForm.cc \ layEditStippleWidget.cc \ @@ -173,6 +174,7 @@ DEFINES += MAKE_LAYBASIC_LIBRARY layColor.h \ layCursor.h \ layDialogs.h \ + layDragDropData.h \ layEditLineStyleWidget.h \ layEditLineStylesForm.h \ layEditStippleWidget.h \ diff --git a/src/laybasic/unit_tests/layLayoutViewTests.cc b/src/laybasic/unit_tests/layLayoutViewTests.cc index 5d9018461..5ce061274 100644 --- a/src/laybasic/unit_tests/layLayoutViewTests.cc +++ b/src/laybasic/unit_tests/layLayoutViewTests.cc @@ -163,14 +163,14 @@ TEST(4) tl::msleep (250); lay::PixelBuffer img = lv.get_screenshot_pb (); - EXPECT_EQ (img.width (), 42); - EXPECT_EQ (img.height (), 117); + EXPECT_EQ ((int) img.width (), 42); + EXPECT_EQ ((int) img.height (), 117); lv.resize (142, 217); img = lv.get_screenshot_pb (); - EXPECT_EQ (img.width (), 142); - EXPECT_EQ (img.height (), 217); + EXPECT_EQ ((int) img.width (), 142); + EXPECT_EQ ((int) img.height (), 217); } #if defined(HAVE_PNG) diff --git a/src/laybasic/unit_tests/layNetlistBrowserTreeModelTests.cc b/src/laybasic/unit_tests/layNetlistBrowserTreeModelTests.cc index f87df3f2f..0cedf039f 100644 --- a/src/laybasic/unit_tests/layNetlistBrowserTreeModelTests.cc +++ b/src/laybasic/unit_tests/layNetlistBrowserTreeModelTests.cc @@ -20,8 +20,6 @@ */ -#if defined(HAVE_QT) // @@@ - #include "layNetlistBrowserTreeModel.h" #include "tlUnitTest.h" @@ -106,4 +104,3 @@ TEST (2) EXPECT_EQ (model->parent (model->index (1, 0, inv2PairIndex)).internalId () == inv2PairIndex.internalId (), true); } -#endif diff --git a/src/laybasic/unit_tests/unit_tests.pro b/src/laybasic/unit_tests/unit_tests.pro index 0248f532a..2fd4d74af 100644 --- a/src/laybasic/unit_tests/unit_tests.pro +++ b/src/laybasic/unit_tests/unit_tests.pro @@ -16,11 +16,17 @@ SOURCES = \ layPixelBufferTests.cc \ layLayoutViewTests.cc \ layRenderer.cc \ - layNetlistBrowserModelTests.cc \ - layNetlistBrowserTreeModelTests.cc \ layAbstractMenuTests.cc \ laySnapTests.cc +!equals(HAVE_QT, "0") { + + SOURCES += \ + layNetlistBrowserModelTests.cc \ + layNetlistBrowserTreeModelTests.cc \ + +} + INCLUDEPATH += $$TL_INC $$LAYBASIC_INC $$DB_INC $$GSI_INC $$OUT_PWD/../laybasic DEPENDPATH += $$TL_INC $$LAYBASIC_INC $$DB_INC $$GSI_INC $$OUT_PWD/../laybasic