/** Set the display's mainpoint magnetism setting, updating menu and button * in the process */ void ddisplay_set_snap_to_objects(DDisplay *ddisp, gboolean magnetic) { GtkToggleAction *mainpoint_magnetism; ddisp->mainpoint_magnetism = magnetic; mainpoint_magnetism = GTK_TOGGLE_ACTION (menus_get_action ("ViewSnaptoobjects")); if (is_integrated_ui ()) integrated_ui_toolbar_object_snap_synchronize_to_display (ddisp); /* Currently, this can cause double emit, but that's a small problem. */ gtk_toggle_action_set_active (mainpoint_magnetism, ddisp->mainpoint_magnetism); ddisplay_update_statusbar(ddisp); }
/** Set the display's snap-to-grid setting, updating menu and button * in the process */ void ddisplay_set_snap_to_grid(DDisplay *ddisp, gboolean snap) { GtkToggleAction *snap_to_grid; ddisp->grid.snap = snap; snap_to_grid = GTK_TOGGLE_ACTION (menus_get_action ("ViewSnaptogrid")); if (is_integrated_ui ()) integrated_ui_toolbar_grid_snap_synchronize_to_display (ddisp); /* Currently, this can cause double emit, but that's a small problem. */ gtk_toggle_action_set_active (snap_to_grid, ddisp->grid.snap); ddisplay_update_statusbar(ddisp); }
void integrated_ui_layer_view_show (gboolean show) { if (ui.layer_view) { GtkAction *action; if (show) gtk_widget_show (ui.layer_view); else gtk_widget_hide (ui.layer_view); action = menus_get_action (VIEW_LAYERS_ACTION); if (action) gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show); } }
/* show integrated UI main toolbar and set pulldown menu action. */ void integrated_ui_toolbar_show (gboolean show) { if (ui.toolbar) { GtkAction *action = NULL; if (show) gtk_widget_show (GTK_WIDGET (ui.toolbar)); else gtk_widget_hide (GTK_WIDGET (ui.toolbar)); action = menus_get_action (VIEW_MAIN_TOOLBAR_ACTION); if (action) gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show); } }
void display_update_menu_state(DDisplay *ddisp) { GtkToggleAction *rulers; GtkToggleAction *visible_grid; GtkToggleAction *snap_to_grid; GtkToggleAction *show_cx_pts; GtkToggleAction *antialiased; gboolean scrollbars_shown; rulers = GTK_TOGGLE_ACTION (menus_get_action ("ViewShowrulers")); visible_grid = GTK_TOGGLE_ACTION (menus_get_action ("ViewShowgrid")); snap_to_grid = GTK_TOGGLE_ACTION (menus_get_action ("ViewSnaptogrid")); show_cx_pts = GTK_TOGGLE_ACTION (menus_get_action ("ViewShowconnectionpoints")); antialiased = GTK_TOGGLE_ACTION (menus_get_action ("ViewAntialiased")); gtk_action_set_sensitive (menus_get_action ("ViewAntialiased"), g_type_from_name ("DiaCairoInteractiveRenderer") != 0 || g_type_from_name ("DiaLibartRenderer") != 0); ddisplay_do_update_menu_sensitivity (ddisp); gtk_toggle_action_set_active (rulers, display_get_rulers_showing(ddisp)); #if GTK_CHECK_VERSION(2,20,0) scrollbars_shown = gtk_widget_get_visible (ddisp->hsb); #else scrollbars_shown = GTK_WIDGET_VISIBLE (ddisp->hsb); #endif gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (menus_get_action ("ViewShowscrollbars")), scrollbars_shown); gtk_toggle_action_set_active (visible_grid, ddisp->grid.visible); gtk_toggle_action_set_active (snap_to_grid, ddisp->grid.snap); gtk_toggle_action_set_active (show_cx_pts, ddisp->show_cx_pts); gtk_toggle_action_set_active (antialiased, ddisp->aa_renderer); }
static void _create_mac_integration (void) { GtkosxApplication *theOsxApp = g_object_new(GTKOSX_TYPE_APPLICATION, NULL); GtkWidget *menubar = NULL; /* from control-x to command-x in one call? Does _not_ work as advertized */ gtkosx_application_set_use_quartz_accelerators (theOsxApp, TRUE); /* might be too early ... */ menus_get_integrated_ui_menubar (&menubar, NULL, NULL); if (menubar) { gtk_widget_hide (menubar); /* not working, it's shown elsewhere */ /* move some items to the dia menu */ { GSList *proxies, *proxy; GtkAction *action; action = menus_get_action ("HelpAbout"); proxies = gtk_action_get_proxies (action); for (proxy = proxies; proxy != NULL; proxy = g_slist_next (proxy)) { g_print ("XXX "); if (1 || GTK_IS_MENU_ITEM (proxy->data)) { gtkosx_application_insert_app_menu_item (theOsxApp, GTK_WIDGET (proxy->data), 0); break; } } } /* hijack the menubar */ gtkosx_application_set_menu_bar(theOsxApp, GTK_MENU_SHELL(menubar)); /* setup the dock icon */ gtkosx_application_set_dock_icon_pixbuf (theOsxApp, gdk_pixbuf_new_from_inline (-1, dia_app_icon, FALSE, NULL)); } /* without this all the above wont have any effect */ gtkosx_application_ready(theOsxApp); }
static void modify_button_hold(ModifyTool *tool, GdkEventButton *event, DDisplay *ddisp) { Point clickedpoint; switch (tool->state) { case STATE_MOVE_OBJECT: /* A button hold is as if user was moving object - if it is * a text object and can be edited, then the move is cancelled */ ddisplay_untransform_coords(ddisp, (int)event->x, (int)event->y, &clickedpoint.x, &clickedpoint.y); if (tool->object != NULL && diagram_is_selected(ddisp->diagram, tool->object)) { if (textedit_activate_object(ddisp, tool->object, &clickedpoint)) { /* Return tool to normal state - object is text and is in edit */ gdk_pointer_ungrab (event->time); tool->orig_pos = NULL; tool->state = STATE_NONE; /* Activate Text Edit */ gtk_action_activate (menus_get_action ("ToolsTextedit")); } } break; case STATE_MOVE_HANDLE: break; case STATE_BOX_SELECT: break; case STATE_NONE: break; default: message_error("Internal error: Strange state in modify_tool (button_hold)\n"); } }
static void create_object_button_release(CreateObjectTool *tool, GdkEventButton *event, DDisplay *ddisp) { GList *list = NULL; DiaObject *obj = tool->obj; gboolean reset; GList *parent_candidates; g_return_if_fail (obj != NULL); if (!obj) /* not sure if this isn't enough */ return; /* could be a legal invariant */ if (tool->moving) { gdk_pointer_ungrab (event->time); object_add_updates(tool->obj, ddisp->diagram); tool->obj->ops->move_handle(tool->obj, tool->handle, &tool->last_to, NULL, HANDLE_MOVE_CREATE_FINAL, 0); object_add_updates(tool->obj, ddisp->diagram); } parent_candidates = layer_find_objects_containing_rectangle(obj->parent_layer, &obj->bounding_box); /* whole object must be within another object to parent it */ for (; parent_candidates != NULL; parent_candidates = g_list_next(parent_candidates)) { DiaObject *parent_obj = (DiaObject *) parent_candidates->data; if (obj != parent_obj && object_within_parent(obj, parent_obj)) { Change *change = undo_parenting(ddisp->diagram, parent_obj, obj, TRUE); (change->apply)(change, ddisp->diagram); break; /* obj->parent = parent_obj; parent_obj->children = g_list_append(parent_obj->children, obj); */ } } g_list_free(parent_candidates); list = g_list_prepend(list, tool->obj); undo_insert_objects(ddisp->diagram, list, 1); if (tool->moving) { if (tool->handle->connect_type != HANDLE_NONCONNECTABLE) { object_connect_display(ddisp, tool->obj, tool->handle, TRUE); diagram_update_connections_selection(ddisp->diagram); diagram_flush(ddisp->diagram); } tool->moving = FALSE; tool->handle = NULL; tool->obj = NULL; } { /* remove position from status bar */ GtkStatusbar *statusbar = GTK_STATUSBAR (ddisp->modified_status); guint context_id = gtk_statusbar_get_context_id (statusbar, "ObjectPos"); gtk_statusbar_pop (statusbar, context_id); } highlight_reset_all(ddisp->diagram); reset = prefs.reset_tools_after_create != tool->invert_persistence; /* kind of backward: first starting editing to see if it is possible at all, than GUI reflection */ if (textedit_activate_object(ddisp, obj, NULL) && reset) { gtk_action_activate (menus_get_action ("ToolsTextedit")); reset = FALSE; /* don't switch off textedit below */ } diagram_update_extents(ddisp->diagram); diagram_modified(ddisp->diagram); undo_set_transactionpoint(ddisp->diagram->undo); if (reset) tool_reset(); ddisplay_set_all_cursor(default_cursor); ddisplay_do_update_menu_sensitivity(ddisp); }
/* This is the real implementation of the sensitivity update. TODO: move it to the DDisplay as it belongs to it IMHO */ void diagram_update_menu_sensitivity (Diagram *dia) { gint selected_count = g_list_length (dia->data->selected); DDisplay *ddisp = ddisplay_active(); gboolean focus_active = (get_active_focus(dia->data) != NULL); gboolean textedit_active = ddisp ? textedit_mode(ddisp) : FALSE; GtkAction *action; /* Edit menu */ if ((action = menus_get_action ("EditUndo")) != NULL) gtk_action_set_sensitive (action, dia ? undo_available(dia->undo, TRUE) : FALSE); if ((action = menus_get_action ("EditRedo")) != NULL) gtk_action_set_sensitive (action, dia ? undo_available(dia->undo, FALSE) : FALSE); if ((action = menus_get_action ("EditCopy")) != NULL) gtk_action_set_sensitive (action, textedit_active || selected_count > 0); if ((action = menus_get_action ("EditCut")) != NULL) gtk_action_set_sensitive (action, textedit_mode(ddisp) || selected_count > 0); if ((action = menus_get_action ("EditPaste")) != NULL) gtk_action_set_sensitive (action, textedit_active || cnp_exist_stored_objects()); if ((action = menus_get_action ("EditDelete")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("EditDuplicate")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("EditCopytext")) != NULL) gtk_action_set_sensitive (action, focus_active); if ((action = menus_get_action ("EditCuttext")) != NULL) gtk_action_set_sensitive (action, focus_active); if ((action = menus_get_action ("EditPastetext")) != NULL) gtk_action_set_sensitive (action, focus_active); /* Objects menu */ if ((action = menus_get_action ("ObjectsSendtoback")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsBringtofront")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsSendbackwards")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsBringforwards")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsLayerAbove")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsLayerBelow")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 0); if ((action = menus_get_action ("ObjectsGroup")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsUngroup")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_any_groups (dia)); if ((action = menus_get_action ("ObjectsParent")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_can_parent (dia)); if ((action = menus_get_action ("ObjectsUnparent")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_any_children (dia)); if ((action = menus_get_action ("ObjectsUnparentchildren")) != NULL) gtk_action_set_sensitive (action, !textedit_active && diagram_selected_any_parents (dia)); if ((action = menus_get_action ("ObjectsProperties")) != NULL) gtk_action_set_sensitive (action, selected_count > 0); /* Objects->Align menu */ if ((action = menus_get_action ("ObjectsAlignLeft")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignCenter")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignRight")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignSpreadouthorizontally")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignAdjacent")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignTop")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignMiddle")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignBottom")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignSpreadoutvertically")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignStacked")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); if ((action = menus_get_action ("ObjectsAlignConnected")) != NULL) gtk_action_set_sensitive (action, !textedit_active && selected_count > 1); /* Select menu */ if ((action = menus_get_action ("SelectAll")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectNone")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectInvert")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectTransitive")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectConnected")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectSametype")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectReplace")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectUnion")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectIntersection")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectRemove")) != NULL) gtk_action_set_sensitive (action, !textedit_active); if ((action = menus_get_action ("SelectInverse")) != NULL) gtk_action_set_sensitive (action, !textedit_active); /* Tools menu - toolbox actions */ gtk_action_group_set_sensitive (menus_get_tool_actions (), !textedit_active); /* View menu - should not need disabling yet */ }