⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 document.c

📁 一个简单的文本编辑器
💻 C
📖 第 1 页 / 共 2 页
字号:
		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 + -