// // AbiGOComponent_Create // ------------------- // This is the function that we actually call to insert a new intially empty component. bool AbiGOComponent_Create (G_GNUC_UNUSED AV_View* v, G_GNUC_UNUSED EV_EditMethodCallData *d) { XAP_Frame *pFrame = XAP_App::getApp()->getLastFocussedFrame(); XAP_UnixFrameImpl *pFrameImpl = static_cast<XAP_UnixFrameImpl*>(pFrame->getFrameImpl()); std::string cancel, ok; const XAP_StringSet *pSS = XAP_App::getApp()->getStringSet(); pSS->getValueUTF8(XAP_STRING_ID_DLG_Cancel, cancel); pSS->getValueUTF8(XAP_STRING_ID_DLG_OK, ok); GtkDialog *dialog = GTK_DIALOG (gtk_dialog_new_with_buttons ("New Object", GTK_WINDOW(pFrameImpl->getTopLevelWindow()), (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), convertMnemonics(cancel).c_str(), GTK_RESPONSE_CANCEL, convertMnemonics(ok).c_str(), GTK_RESPONSE_OK, NULL)); GtkListStore *list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); GtkWidget *w = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list)); g_signal_connect_swapped(w, "button-press-event", G_CALLBACK(button_press_cb), dialog); GtkCellRenderer *renderer; GtkTreeViewColumn *column; renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Object type:", renderer, "text", 0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (w), column); GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW (w)); gtk_tree_selection_set_mode (sel, GTK_SELECTION_BROWSE); GtkTreeIter iter; GSList *l = mime_types; gchar const *mime_type; while (l) { mime_type = (gchar const *) l->data; if (strcmp(mime_type, "application/mathml+xml") && go_components_get_priority(mime_type) >= GO_MIME_PRIORITY_PARTIAL) { gtk_list_store_append (list, &iter); gtk_list_store_set (list, &iter, 0, go_mime_type_get_description (mime_type), 1, mime_type, -1); } l = l->next; } gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area(dialog)), w, false, false, 0); gtk_widget_show_all (GTK_WIDGET(dialog)); gint result = gtk_dialog_run (dialog); if (result == GTK_RESPONSE_OK && gtk_tree_selection_get_selected (sel, NULL, &iter)) { gtk_tree_model_get (GTK_TREE_MODEL (list), &iter, 1, &mime_type, -1); GOComponent *component = go_component_new_by_mime_type (mime_type); go_component_set_inline (component, true); go_component_set_use_font_from_app (component, true); g_signal_connect (G_OBJECT (component), "changed", G_CALLBACK (changed_cb), NULL); GtkWindow *win = go_component_edit(component); gtk_window_set_transient_for(win, GTK_WINDOW(pFrameImpl->getTopLevelWindow())); } gtk_widget_destroy (GTK_WIDGET (dialog)); return result == GTK_RESPONSE_OK; }
static void go_component_mime_dialog_init (GOComponentMimeDialog *dlg) { GtkListStore *list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); GtkWidget *w = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list)); GtkCellRenderer *renderer; GtkTreeViewColumn *column; GSList *mime_types = go_components_get_mime_types (); GSList *l = mime_types; GtkTreeIter iter; char const *mime_type; gtk_dialog_add_buttons (&dlg->base, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_set_modal (GTK_WINDOW (dlg), TRUE); gtk_window_set_destroy_with_parent (GTK_WINDOW (dlg), TRUE); dlg->sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (w)); g_signal_connect_swapped (w, "button-press-event", G_CALLBACK (button_press_cb), dlg); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Object type:", renderer, "text", 0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (w), column); gtk_tree_selection_set_mode (dlg->sel, GTK_SELECTION_BROWSE); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list), 0, GTK_SORT_ASCENDING); while (l) { mime_type = (char const *) l->data; if (go_components_get_priority (mime_type) >= GO_MIME_PRIORITY_PARTIAL) { gtk_list_store_append (list, &iter); gtk_list_store_set (list, &iter, 0, go_mime_type_get_description (mime_type), 1, mime_type, -1); } l = l->next; } dlg->list = GTK_TREE_MODEL (list); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (&dlg->base)), w); gtk_widget_show_all (gtk_dialog_get_content_area (&dlg->base)); }