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

📄 gtk_gui.cpp

📁 彩信浏览器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "openurl"), "activate",  G_CALLBACK (gtk_C_callback_open_url), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "reload"), "activate",  G_CALLBACK (gtk_C_callback_reload), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "preferences"), "activate",  G_CALLBACK (gtk_C_callback_settings_select), (void *) this );		g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "loadsettings"), "activate",  G_CALLBACK (gtk_C_callback_load_settings), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "quit"), "activate",  G_CALLBACK (gtk_C_callback_quit), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "play"), "activate",  G_CALLBACK (gtk_C_callback_play), (void*)this);	g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "pause"), "activate",  G_CALLBACK (gtk_C_callback_pause), (void*)this );		g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "stop"), "activate",  G_CALLBACK (gtk_C_callback_stop), (void*)this);	g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "fullscreen"), "activate",  G_CALLBACK (gtk_C_callback_full_screen), (void*)this);	g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "window"), "activate",  G_CALLBACK (gtk_C_callback_normal_screen), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "logwindow"), "activate",  G_CALLBACK (gtk_C_callback_logger_window), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "about"), "activate",  G_CALLBACK (gtk_C_callback_about), (void*)this);	g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "help"), "activate",  G_CALLBACK (gtk_C_callback_help), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "website"), "activate",  G_CALLBACK (gtk_C_callback_homepage), (void*)this);			g_signal_connect_swapped (gtk_action_group_get_action (m_actions, "welcome"), "activate",  G_CALLBACK (gtk_C_callback_welcome), (void*)this);				/* Creation of the Menubar and Menu Items */	menubar = gtk_ui_manager_get_widget (ui, "/MenuBar");	gtk_box_pack_start (GTK_BOX (m_guicontainer), menubar, FALSE, FALSE, 0);	gtk_widget_show_all(GTK_WIDGET (m_toplevelcontainer));	/* Creation of the document area */	m_documentcontainer = gtk_drawing_area_new();	gtk_widget_hide(m_documentcontainer);	gtk_box_pack_start (GTK_BOX (m_guicontainer), m_documentcontainer, TRUE, TRUE, 0);	// creates the main loop	main_loop = g_main_loop_new(NULL, FALSE);	_update_menus();}gtk_gui::~gtk_gui() {	AM_DBG printf("%s0x%X\n", "gtk_gui::~gtk_gui(), m_mainloop=",m_mainloop);	// remove all dynamic data in the same order as they are declared	// m_programfilename - not dynamic	if  (m_smilfilename) {		free((void*)m_smilfilename);		m_smilfilename = NULL;	}	if  (m_settings) {		delete m_settings;		m_settings = NULL;	}	if (m_toplevelcontainer) {		/*		  Although it seems a good idea to destroy the top-level		  widget at this point, by some unrevealed magic		  it seems already been done by gtk, resulting in cryptic		  error messages like: 		  GLib-GObject-WARNING **: invalid uninstantiatable type `(null)' in cast to `GtkWidget'		  Gtk-CRITICAL **: gtk_widget_destroy: assertion `GTK_IS_WIDGET (widget)' failed		  Commenting out next line doesn't seem to contribute to		  any extra memory leaks, gtk_init() alone is responsible		  for almost all of them		gtk_widget_destroy(GTK_WIDGET (m_toplevelcontainer));		 */		m_toplevelcontainer = NULL;	}	if (menubar) {		gtk_widget_destroy(GTK_WIDGET (menubar));		menubar = NULL;	}/*KB these seem to be destroyed already by destroying m_toplevelcontainer	if (m_guicontainer) {		gtk_widget_destroy(GTK_WIDGET (m_guicontainer));		m_guicontainer = NULL;	}	if (m_documentcontainer) {		gtk_widget_destroy(GTK_WIDGET (m_documentcontainer));		m_documentcontainer = NULL;	}*/	if (m_actions) {		g_object_unref(G_OBJECT (m_actions));		m_actions = NULL;	}	if (m_file_chooser) {		gtk_widget_destroy(GTK_WIDGET (m_file_chooser));		m_file_chooser = NULL;	}	if (m_settings_chooser) {		gtk_widget_destroy(GTK_WIDGET (m_settings_chooser));		m_settings_chooser = NULL;	}	if (m_url_text_entry) {		gtk_widget_destroy(GTK_WIDGET (m_url_text_entry));		m_url_text_entry = NULL;	}	if (m_mainloop) {		delete m_mainloop;		m_mainloop = NULL;	}}GtkWindow*gtk_gui::get_toplevel_container(){	return this->m_toplevelcontainer;}GtkWidget*gtk_gui::get_gui_container(){	return this->m_guicontainer;}GtkWidget*gtk_gui::get_document_container(){	return this->m_documentcontainer;}void gtk_gui::do_about() {	GtkMessageDialog* dialog = 	(GtkMessageDialog*) gtk_message_dialog_new (NULL,         GTK_DIALOG_DESTROY_WITH_PARENT,         GTK_MESSAGE_INFO,         GTK_BUTTONS_OK,         gettext("About AmbulantPlayer"));	gtk_message_dialog_format_secondary_text(dialog,about_text,get_version()); 	gtk_dialog_run (GTK_DIALOG (dialog)); 	gtk_widget_destroy (GTK_WIDGET (dialog));}void gtk_gui::do_homepage() {	open_web_browser("http://www.ambulantplayer.org");}void gtk_gui::do_welcome() {	const char *welcome_doc = find_datafile(welcome_locations);		if (welcome_doc) {	  if( openSMILfile(welcome_doc, 0, true)) {			do_play();		}	} else {		GtkMessageDialog* dialog = 		(GtkMessageDialog*) gtk_message_dialog_new (NULL,         	GTK_DIALOG_DESTROY_WITH_PARENT,         	GTK_MESSAGE_ERROR,         	GTK_BUTTONS_OK,	 	gettext("Cannot find Welcome.smil document")); 		gtk_dialog_run (GTK_DIALOG (dialog)); 		gtk_widget_destroy (GTK_WIDGET (dialog));	}}void gtk_gui::do_help() {	const char *help_doc = find_datafile(helpfile_locations);		if (help_doc) {		open_web_browser(help_doc);	} else {		GtkMessageDialog* dialog = 		(GtkMessageDialog*) gtk_message_dialog_new (NULL,         	GTK_DIALOG_DESTROY_WITH_PARENT,         	GTK_MESSAGE_ERROR,         	GTK_BUTTONS_OK,	        gettext("Cannot find Ambulant Player Help")); 		gtk_dialog_run (GTK_DIALOG (dialog)); 		gtk_widget_destroy (GTK_WIDGET (dialog));	}}voidgtk_gui::do_logger_window() {	AM_DBG printf("do_logger_window()\n");	GtkWindow* logger_window =  gtk_logger::get_gtk_logger()->get_logger_window();	if (GTK_WIDGET_VISIBLE (GTK_WIDGET (logger_window)))		gtk_widget_hide(GTK_WIDGET (logger_window));	else		gtk_widget_show(GTK_WIDGET (logger_window));}voidgtk_gui::fileError(const gchar* smilfilename) { 	char buf[1024];	sprintf(buf, gettext(gettext("%s: Cannot open file: %s")),		(const char*) smilfilename, strerror(errno));	GtkMessageDialog* dialog = 	(GtkMessageDialog*) gtk_message_dialog_new (NULL,         GTK_DIALOG_DESTROY_WITH_PARENT,         GTK_MESSAGE_ERROR,         GTK_BUTTONS_OK,	 m_programfilename);	gtk_message_dialog_format_secondary_text(dialog, buf); 	gtk_dialog_run (GTK_DIALOG (dialog)); 	gtk_widget_destroy (GTK_WIDGET (dialog));}bool gtk_gui::openSMILfile(const char *smilfilename, int mode, bool dupFlag) {	if (smilfilename==NULL)		return false;		gtk_window_set_title(GTK_WINDOW (m_toplevelcontainer), smilfilename);	if (dupFlag) {	  if (m_smilfilename) free ((void*)m_smilfilename);		m_smilfilename = strdup(smilfilename);	}	if (m_mainloop)		delete m_mainloop;    	m_mainloop = new gtk_mainloop(this);	_update_menus();	return m_mainloop->is_open();}void gtk_gui::do_open(){  m_file_chooser = GTK_FILE_CHOOSER (gtk_file_chooser_dialog_new(gettext("Please, select a file"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL));	GtkFileFilter *filter_smil = gtk_file_filter_new();	gtk_file_filter_set_name(filter_smil, gettext("SMIL files"));	gtk_file_filter_add_pattern(filter_smil, "*.smil");	gtk_file_filter_add_pattern(filter_smil, "*.smi");	gtk_file_chooser_add_filter(m_file_chooser, filter_smil);	GtkFileFilter *filter_all = gtk_file_filter_new();	gtk_file_filter_set_name(filter_all, gettext("All files"));	gtk_file_filter_add_pattern(filter_all, "*.smil");	gtk_file_filter_add_pattern(filter_all, "*.smi");		gtk_file_filter_add_pattern(filter_all, "*.mms");		gtk_file_filter_add_pattern(filter_all, "*.grins");		gtk_file_chooser_add_filter(m_file_chooser, filter_all);	GtkFileFilter *filter_any = gtk_file_filter_new();	gtk_file_filter_set_name(filter_any, gettext("Any file"));	gtk_file_filter_add_pattern(filter_any, "*");	gtk_file_chooser_add_filter(m_file_chooser, filter_any);	gint result = gtk_dialog_run (GTK_DIALOG (m_file_chooser));  	switch (result){      	case GTK_RESPONSE_ACCEPT:		do_file_selected();         	break;      	default:         	break;    	}	gtk_widget_hide(GTK_WIDGET (m_file_chooser));	}void gtk_gui::do_file_selected() {	const gchar *smilfilename  = gtk_file_chooser_get_filename (m_file_chooser);	if (openSMILfile(smilfilename, 0, true)) {		g_free((void*)smilfilename);		do_play();	}}voidgtk_gui::setDocument(const char* smilfilename) {#ifdef	GTK_NO_FILEDIALOG	/* Assume embedded GTK */	if (openSMILfile(smilfilename, 0, true))		do_play();#endif/*GTK_NO_FILEDIALOG*/}voidgtk_gui::do_settings_selected() {	const gchar *settings_filename  = gtk_file_chooser_get_filename (m_settings_chooser);	if ( settings_filename != NULL) {		smil2::test_attrs::load_test_attrs(settings_filename);		if (openSMILfile(m_smilfilename, 0, false))			do_play();	}}void gtk_gui::do_load_settings() {	if (m_mainloop && m_mainloop->is_open())		do_stop();		m_settings_chooser = GTK_FILE_CHOOSER (gtk_file_chooser_dialog_new(gettext("Please, select a settings file"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL));	GtkFileFilter *filter_xml = gtk_file_filter_new();	gtk_file_filter_set_name(filter_xml, gettext("XML files"));	gtk_file_filter_add_pattern(filter_xml, "*.xml");	gtk_file_chooser_add_filter(m_settings_chooser, filter_xml);	gint result = gtk_dialog_run (GTK_DIALOG (m_settings_chooser));  	switch (result){      	case GTK_RESPONSE_ACCEPT:		do_settings_selected();         	break;      	default:         	break;    	}	gtk_widget_hide(GTK_WIDGET (m_settings_chooser));		/* Ensure that the dialog box is hidden when the user clicks a button.	We don't need anymore the callbacks, because they can be embedded in this part of the code *//*	g_signal_connect_swapped (GTK_FILE_SELECTION (m_settings_selector)->ok_button,                             "clicked",                             G_CALLBACK (gtk_widget_hide),                              m_settings_selector);   	g_signal_connect_swapped (GTK_FILE_SELECTION (m_settings_selector)->cancel_button,                             "clicked",                             G_CALLBACK (gtk_widget_hide),                             m_settings_selector);	g_signal_connect_swapped (GTK_OBJECT ((m_settings_selector)->ok_button),"clicked", G_CALLBACK (gtk_C_callback_settings_selected),(void*) this);*/}void gtk_gui::do_open_url() {	GtkDialog* url_dialog =  GTK_DIALOG (gtk_dialog_new_with_buttons	("AmbulantPlayer", NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL));		GtkLabel* label = GTK_LABEL (gtk_label_new(gettext("URL to open:")));		gtk_misc_set_alignment (GTK_MISC (label), 0, 0);	gtk_widget_show(GTK_WIDGET (label));		m_url_text_entry = GTK_ENTRY (gtk_entry_new());	gtk_entry_set_editable(m_url_text_entry, true);	gtk_entry_set_text(m_url_text_entry,"http://www");	gtk_widget_show(GTK_WIDGET (m_url_text_entry));		gtk_container_add(GTK_CONTAINER(GTK_DIALOG(url_dialog)->vbox), GTK_WIDGET (label));	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(url_dialog)->vbox), GTK_WIDGET (m_url_text_entry));	gint result = gtk_dialog_run (GTK_DIALOG (url_dialog));  	switch (result){      	case GTK_RESPONSE_ACCEPT:		do_url_selected();         	break;      	default:         	break;    	}	gtk_widget_destroy (GTK_WIDGET (url_dialog));/*		g_signal_connect_swapped (url_dialog,"response", G_CALLBACK (gtk_C_callback_url_selected), (void*) this);		g_signal_connect_swapped (url_dialog, "response",                             G_CALLBACK (gtk_widget_hide),                             GTK_WIDGET (url_dialog));	gtk_widget_show_all(GTK_WIDGET (url_dialog));*/}void gtk_gui::do_url_selected() {	/* Next string points to internally allocated storage in the widget	   and must not be freed, modified or stored.*/	const gchar *smilfilename  = gtk_entry_get_text(m_url_text_entry);	gtk_window_set_title(GTK_WINDOW (m_toplevelcontainer), smilfilename);	if (openSMILfile(smilfilename, 0, true)) {				do_play();	}}void gtk_gui::do_player_done() {	AM_DBG printf("%s-%s\n", m_programfilename, "do_player_done");    _update_menus();}void gtk_gui::need_redraw (const void* r, void* w, const void* pt) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -