📄 document.c
字号:
if (!gedit_view_active()) { gedit_debug (DEBUG_DOCUMENT, "returning since views are NULL"); return TRUE; } if (doc->changed) { GtkWidget *msgbox, *w; gchar *fname = NULL, *msg = NULL; gint ret; w = GTK_WIDGET (g_list_nth_data(doc->views, 0)); if(w != NULL) gnome_mdi_set_active_view (mdi, w); fname = gedit_document_get_tab_name (doc, FALSE); msg = g_strdup_printf (_("``%s'' has been modified. Do you wish to save it?"), fname); msgbox = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES, GNOME_STOCK_BUTTON_NO, GNOME_STOCK_BUTTON_CANCEL, NULL); gnome_dialog_set_default (GNOME_DIALOG (msgbox), 2); ret = gnome_dialog_run_and_close (GNOME_DIALOG (msgbox)); g_free (fname); g_free (msg); switch (ret) { case 0: return file_save_document (doc); case 1: return TRUE; default: gedit_close_all_flag_clear(); return FALSE; } } gedit_debug (DEBUG_DOCUMENT, "end"); return TRUE;}static GtkWidget *gedit_document_create_view (GnomeMDIChild *child){ GeditView *new_view; gedit_debug (DEBUG_DOCUMENT, ""); g_return_val_if_fail (child != NULL, NULL); g_return_val_if_fail (GNOME_IS_MDI_CHILD (child), NULL); new_view = GEDIT_VIEW (gedit_view_new (GEDIT_DOCUMENT (child))); gedit_view_set_font (new_view, settings->font); gedit_view_set_readonly (new_view, GEDIT_DOCUMENT (child)->readonly); return GTK_WIDGET (new_view);}static voidgedit_document_destroy (GtkObject *obj){ GeditDocument *doc = GEDIT_DOCUMENT (obj); gedit_debug (DEBUG_DOCUMENT, ""); g_list_free (doc->views); g_free (doc->filename); gedit_undo_free_list (&doc->undo); gedit_undo_free_list (&doc->redo); if (GTK_OBJECT_CLASS (parent_class)->destroy) (* GTK_OBJECT_CLASS (parent_class)->destroy)(GTK_OBJECT (doc));}static voidgedit_document_class_init (GeditDocumentClass *class){ GtkObjectClass *object_class; GnomeMDIChildClass *child_class; object_class = (GtkObjectClass*)class; child_class = GNOME_MDI_CHILD_CLASS (class); gedit_debug (DEBUG_DOCUMENT, ""); object_class->destroy = gedit_document_destroy; child_class->create_view = (GnomeMDIChildViewCreator)(gedit_document_create_view); child_class->get_config_string = (GnomeMDIChildConfigFunc)(gedit_document_get_config_string); parent_class = gtk_type_class (gnome_mdi_child_get_type ());}static voidgedit_document_init (GeditDocument *doc){ gedit_debug (DEBUG_DOCUMENT, ""); doc->filename = NULL; doc->changed = FALSE; doc->views = NULL; doc->undo = NULL; doc->redo = NULL; gnome_mdi_child_set_menu_template (GNOME_MDI_CHILD (doc), doc_menu);}GtkTypegedit_document_get_type (void){ static GtkType doc_type = 0; if (!doc_type) { static const GtkTypeInfo doc_info = { "Document", sizeof (GeditDocument), sizeof (GeditDocumentClass), (GtkClassInitFunc) gedit_document_class_init, (GtkObjectInitFunc) gedit_document_init, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL, }; doc_type = gtk_type_unique (gnome_mdi_child_get_type (), &doc_info); } return doc_type;}voidgedit_mdi_init (void){ gedit_debug (DEBUG_DOCUMENT, "start"); /* mdi = GNOME_MDI (gnome_mdi_new ("gedit", "gedit "VESION)); */ mdi = GNOME_MDI (gnome_mdi_new ("gedit", "gedit ")); mdi->tab_pos = settings->tab_pos; gnome_mdi_set_menubar_template (mdi, gedit_menu); gnome_mdi_set_toolbar_template (mdi, toolbar_data); gnome_mdi_set_child_menu_path (mdi, GNOME_MENU_FILE_STRING); gnome_mdi_set_child_list_path (mdi, D_("_Documents/")); /* connect signals */ gtk_signal_connect (GTK_OBJECT (mdi), "remove_child", GTK_SIGNAL_FUNC (remove_child_cb), NULL); gedit_mdi_destroy_signal = gtk_signal_connect (GTK_OBJECT (mdi), "destroy", GTK_SIGNAL_FUNC (file_quit_cb), NULL); gtk_signal_connect (GTK_OBJECT (mdi), "view_changed", GTK_SIGNAL_FUNC (gedit_view_changed_cb), NULL); gtk_signal_connect (GTK_OBJECT (mdi), "app_created", GTK_SIGNAL_FUNC (gedit_window_new), NULL); gnome_mdi_set_mode (mdi, settings->mdi_mode); gnome_mdi_open_toplevel (mdi); /* Loads the structure gedit_toolbar with the widgets */ gedit_window_set_toolbar_labels (mdi->active_window); gedit_window_set_view_menu_sensitivity (mdi->active_window); gedit_debug (DEBUG_DOCUMENT, "end");}gbooleangedit_document_load (GList *file_list){ gchar *file_name; gboolean can_be_created; gedit_debug (DEBUG_DOCUMENT, ""); gedit_file_stdin (NULL); /* create a file for each document in the parameter list */ for (;file_list; file_list = file_list->next) { const gchar* scheme; GnomeVFSURI *uri = gnome_vfs_uri_new (file_list->data); if(uri == NULL) { g_print("Wrong URI: %s\n", (gchar*)file_list->data); continue; } scheme = gnome_vfs_uri_get_scheme (uri); if ((scheme != NULL) && (strcmp (scheme, "file") == 0)) { gchar* tmp_str; gchar* tmp_str2; can_be_created = TRUE; tmp_str = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD); tmp_str2 = gnome_vfs_unescape_string_for_display (tmp_str); file_name = gedit_file_convert_to_full_pathname (tmp_str); g_free (tmp_str); g_free (tmp_str2); gnome_vfs_uri_unref (uri); uri = gnome_vfs_uri_new (file_name); } else { /* FIXME: hide password */ can_be_created = FALSE; file_name = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE); } if (gnome_vfs_uri_exists (uri)) { gedit_document_new_with_file ((gchar *) file_name); } else { if (can_be_created) { gedit_file_create_popup ((guchar *) file_name); } else { /* If you try to open a non existant remote file */ gchar *errstr = g_strdup_printf (_("An error was encountered while opening the file: \n\n%s\n\n" "Please make sure the file exists."), file_name); gnome_app_warning (gedit_window_active_app(), errstr); g_free (errstr); } } g_free (file_name); gnome_vfs_uri_unref(uri); } if (gedit_document_current() == NULL) gedit_document_new (); g_return_val_if_fail(gedit_window_active_app() != NULL, FALSE); g_return_val_if_fail(gedit_document_current() != NULL, FALSE); gedit_window_set_widgets_sensitivity_ro (gedit_window_active_app(), gedit_document_current()->readonly); return FALSE;}/** * gedit_set_title: * @docname: Document name in a string, the new title * * Set the title to "$docname - $gedit_ver" and if the document has * changed, lets show that it has. **/voidgedit_document_set_title (GeditDocument *doc){ gchar *title; gchar *docname; gedit_debug (DEBUG_DOCUMENT, ""); if (doc == NULL) return; if (doc->filename == NULL) { docname = g_strdup_printf (_("Untitled %i"), doc->untitled_number); } else {#if 0 docname = g_strdup (g_basename (doc->filename));#endif docname = gnome_vfs_unescape_string_for_display (doc->filename); }#if 0 if (doc->changed) { title = g_strdup_printf ("gedit: %s %s", docname, _("(modified)")); } else if (doc->readonly) { title = g_strdup_printf ("gedit: %s %s", docname, _("(readonly)")); } else { title = g_strdup_printf ("gedit: %s", docname); }#endif if (doc->changed) { title = g_strdup_printf ("gedit - [%s] %s", docname, _("(modified)")); } else if (doc->readonly) { title = g_strdup_printf ("gedit - [%s] %s", docname, _("(readonly)")); } else { title = g_strdup_printf ("gedit - [%s]", docname); } gtk_window_set_title (gedit_window_active(), title); g_free (docname); g_free (title); gedit_debug (DEBUG_DOCUMENT, "end");}/** * gedit_document_swap_hc_cb: * * if .c file is open, then open the related .h file and v.v. * * TODO: if a .h file is open, do we swap to a .c or a .cpp? we * should put a check in there. if both exist, then probably open * both files. **/voidgedit_document_swap_hc_cb (GtkWidget *widget, gpointer data){ size_t len; gchar *new_file_name; GeditDocument *doc, *nth_doc; gint n; gedit_debug (DEBUG_DOCUMENT, ""); doc = gedit_document_current(); if (!doc || !doc->filename) return; new_file_name = NULL; len = strlen (doc->filename); while (len) { if (doc->filename[len] == '.') break; len--; } if (len == 0) { gchar *errstr = g_strdup (_("This file does not end with a valid extension\n")); gnome_app_error (gedit_window_active_app(), errstr); g_free (errstr); return; } len++; if (doc->filename[len] == 'h') { new_file_name = g_strdup (doc->filename); new_file_name[len] = 'c'; } else if (doc->filename[len] == 'H') { new_file_name = g_strdup (doc->filename); new_file_name[len] = 'C'; } else if (doc->filename[len] == 'c') { new_file_name = g_strdup (doc->filename); new_file_name[len] = 'h'; if (len < strlen(doc->filename) && strcmp(doc->filename + len, "cpp") == 0) new_file_name[len+1] = '\0'; } else if (doc->filename[len] == 'C') { new_file_name = g_strdup (doc->filename); if (len < strlen(doc->filename) && strcmp(doc->filename + len, "CPP") == 0) { new_file_name[len] = 'H'; new_file_name[len+1] = '\0'; } else new_file_name[len] = 'H'; } if (!new_file_name) { gchar *errstr = g_strdup (_("This file does not end with a valid extension\n")); gnome_app_error (gedit_window_active_app(), errstr); g_free (errstr); return; } if (!g_file_exists (new_file_name)) { gchar *errstr = g_strdup_printf (_("The file %s was not found."), new_file_name); gnome_app_error (gedit_window_active_app(), errstr); g_free (errstr); return; } /* Scan the documents to see if the file we are looking for is allready open */ for (n = 0; n < g_list_length (mdi->children); n++) { nth_doc = (GeditDocument *)g_list_nth_data (mdi->children, n); if (strcmp(nth_doc->filename, new_file_name) == 0) { GeditView *view; view = g_list_nth_data (nth_doc->views, 0); g_return_if_fail (view != NULL); gnome_mdi_set_active_view (mdi, GTK_WIDGET (view)); return; } } gedit_document_new_with_file (new_file_name);}voidgedit_document_set_undo (GeditDocument *doc, gint undo_state, gint redo_state){ GeditView *nth_view; gint n; gedit_debug (DEBUG_DOCUMENT, ""); g_return_if_fail (GEDIT_IS_DOCUMENT(doc)); for ( n=0; n < g_list_length (doc->views); n++) { nth_view = GEDIT_VIEW (g_list_nth_data (doc->views, n)); gedit_view_set_undo (nth_view, undo_state, redo_state); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -