📄 text_dialog.cpp
字号:
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1(the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is MPEG4IP. * * The Initial Developer of the Original Code is Cisco Systems Inc. * Portions created by Cisco Systems Inc. are * Copyright(C) Cisco Systems Inc. 2005. All Rights Reserved. * * Contributor(s): * Bill May wmay@cisco.com */#define __STDC_LIMIT_MACROS#include "mp4live.h"#include "mp4live_gui.h"#include "support.h"#include "text_source.h"#include "text_encoder.h"#include "profile_text.h"static void EnableFromTextMenu (GtkWidget *dialog, uint index){ bool enable = index != 0; GtkWidget *wid; wid = lookup_widget(dialog, "TextFileEntry"); gtk_widget_set_sensitive(wid, enable); wid = lookup_widget(dialog, "FileBrowseButton"); gtk_widget_set_sensitive(wid, enable);}static voidon_TextSourceDialog_response (GtkDialog *dialog, gint response_id, gpointer user_data){ if (GTK_RESPONSE_OK == response_id) { GtkWidget *temp; temp = lookup_widget(GTK_WIDGET(dialog), "TextSourceMenu"); uint index = gtk_option_menu_get_history(GTK_OPTION_MENU(temp)); const char *type = NULL; switch (index) { case 0: type = TEXT_SOURCE_DIALOG; break; case 1: type = TEXT_SOURCE_TIMED_FILE; break; case 2: type = TEXT_SOURCE_FILE_WITH_DIALOG; break; } if (type != NULL) { MyConfig->SetStringValue(CONFIG_TEXT_SOURCE_TYPE, type); if (index != 0) { temp = lookup_widget(GTK_WIDGET(dialog), "TextFileEntry"); MyConfig->SetStringValue(CONFIG_TEXT_SOURCE_FILE_NAME, gtk_entry_get_text(GTK_ENTRY(temp))); } MainWindowDisplaySources(); } } gtk_widget_destroy(GTK_WIDGET(dialog));}static voidon_TextSourceMenu_changed (GtkOptionMenu *optionmenu, gpointer user_data){ GtkWidget *dialog = GTK_WIDGET(user_data); EnableFromTextMenu(dialog, gtk_option_menu_get_history(optionmenu));}static voidon_FileBrowseButton_clicked (GtkButton *button, gpointer user_data){ GtkWidget *dialog = GTK_WIDGET(user_data); GtkWidget *entry = lookup_widget(dialog, "TextFileEntry"); FileBrowser(entry, dialog, NULL);}void create_TextSourceDialog (void){ GtkWidget *TextSourceDialog; GtkWidget *dialog_vbox10; GtkWidget *table7; GtkWidget *label193; GtkWidget *TextSourceMenu; GtkWidget *menu17; GtkWidget *text_entry_dialog1; GtkWidget *timed_from_file1; GtkWidget *file_with_queued_dialog1; GtkWidget *label194; GtkWidget *hbox103; GtkWidget *TextFileEntry; GtkWidget *FileBrowseButton; GtkWidget *alignment27; GtkWidget *hbox104; GtkWidget *image33; GtkWidget *label195; GtkWidget *dialog_action_area9; GtkWidget *cancelbutton7; GtkWidget *okbutton9; TextSourceDialog = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(TextSourceDialog), _("Text Source")); gtk_window_set_modal(GTK_WINDOW(TextSourceDialog), TRUE); dialog_vbox10 = GTK_DIALOG(TextSourceDialog)->vbox; gtk_widget_show(dialog_vbox10); table7 = gtk_table_new(2, 2, FALSE); gtk_widget_show(table7); gtk_box_pack_start(GTK_BOX(dialog_vbox10), table7, TRUE, TRUE, 2); gtk_table_set_row_spacings(GTK_TABLE(table7), 9); gtk_table_set_col_spacings(GTK_TABLE(table7), 17); label193 = gtk_label_new(_("Text Source:")); gtk_widget_show(label193); gtk_table_attach(GTK_TABLE(table7), label193, 0, 1, 0, 1, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_misc_set_alignment(GTK_MISC(label193), 0, 0.5); TextSourceMenu = gtk_option_menu_new(); gtk_widget_show(TextSourceMenu); gtk_table_attach(GTK_TABLE(table7), TextSourceMenu, 1, 2, 0, 1, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); menu17 = gtk_menu_new(); text_entry_dialog1 = gtk_menu_item_new_with_mnemonic(_("Dialog with Text Entry")); gtk_widget_show(text_entry_dialog1); gtk_container_add(GTK_CONTAINER(menu17), text_entry_dialog1); timed_from_file1 = gtk_menu_item_new_with_mnemonic(_("File with Timing Info")); gtk_widget_show(timed_from_file1); gtk_container_add(GTK_CONTAINER(menu17), timed_from_file1); file_with_queued_dialog1 = gtk_menu_item_new_with_mnemonic(_("Dialog Using File")); gtk_widget_show(file_with_queued_dialog1); gtk_container_add(GTK_CONTAINER(menu17), file_with_queued_dialog1); gtk_option_menu_set_menu(GTK_OPTION_MENU(TextSourceMenu), menu17); label194 = gtk_label_new(_("File:")); gtk_widget_show(label194); gtk_table_attach(GTK_TABLE(table7), label194, 0, 1, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_misc_set_alignment(GTK_MISC(label194), 0, 0.5); hbox103 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox103); gtk_table_attach(GTK_TABLE(table7), hbox103, 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL), 0, 0); TextFileEntry = gtk_entry_new(); gtk_widget_show(TextFileEntry); gtk_box_pack_start(GTK_BOX(hbox103), TextFileEntry, TRUE, TRUE, 0); FileBrowseButton = gtk_button_new(); gtk_widget_show(FileBrowseButton); gtk_box_pack_start(GTK_BOX(hbox103), FileBrowseButton, FALSE, FALSE, 0); alignment27 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment27); gtk_container_add(GTK_CONTAINER(FileBrowseButton), alignment27); hbox104 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox104); gtk_container_add(GTK_CONTAINER(alignment27), hbox104); image33 = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image33); gtk_box_pack_start(GTK_BOX(hbox104), image33, FALSE, FALSE, 0); label195 = gtk_label_new_with_mnemonic(_("Browse")); gtk_widget_show(label195); gtk_box_pack_start(GTK_BOX(hbox104), label195, FALSE, FALSE, 0); dialog_action_area9 = GTK_DIALOG(TextSourceDialog)->action_area; gtk_widget_show(dialog_action_area9); gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area9), GTK_BUTTONBOX_END); cancelbutton7 = gtk_button_new_from_stock("gtk-cancel"); gtk_widget_show(cancelbutton7); gtk_dialog_add_action_widget(GTK_DIALOG(TextSourceDialog), cancelbutton7, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS(cancelbutton7, GTK_CAN_DEFAULT); okbutton9 = gtk_button_new_from_stock("gtk-ok"); gtk_widget_show(okbutton9); gtk_dialog_add_action_widget(GTK_DIALOG(TextSourceDialog), okbutton9, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS(okbutton9, GTK_CAN_DEFAULT); g_signal_connect((gpointer) TextSourceDialog, "response", G_CALLBACK(on_TextSourceDialog_response), NULL); g_signal_connect((gpointer) TextSourceMenu, "changed", G_CALLBACK(on_TextSourceMenu_changed), TextSourceDialog); g_signal_connect((gpointer) FileBrowseButton, "clicked", G_CALLBACK(on_FileBrowseButton_clicked), TextSourceDialog); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF(TextSourceDialog, TextSourceDialog, "TextSourceDialog"); GLADE_HOOKUP_OBJECT_NO_REF(TextSourceDialog, dialog_vbox10, "dialog_vbox10"); GLADE_HOOKUP_OBJECT(TextSourceDialog, table7, "table7"); GLADE_HOOKUP_OBJECT(TextSourceDialog, label193, "label193"); GLADE_HOOKUP_OBJECT(TextSourceDialog, TextSourceMenu, "TextSourceMenu"); GLADE_HOOKUP_OBJECT(TextSourceDialog, menu17, "menu17"); GLADE_HOOKUP_OBJECT(TextSourceDialog, text_entry_dialog1, "text_entry_dialog1"); GLADE_HOOKUP_OBJECT(TextSourceDialog, timed_from_file1, "timed_from_file1"); GLADE_HOOKUP_OBJECT(TextSourceDialog, file_with_queued_dialog1, "file_with_queued_dialog1"); GLADE_HOOKUP_OBJECT(TextSourceDialog, label194, "label194"); GLADE_HOOKUP_OBJECT(TextSourceDialog, hbox103, "hbox103"); GLADE_HOOKUP_OBJECT(TextSourceDialog, TextFileEntry, "TextFileEntry"); GLADE_HOOKUP_OBJECT(TextSourceDialog, FileBrowseButton, "FileBrowseButton"); GLADE_HOOKUP_OBJECT(TextSourceDialog, alignment27, "alignment27"); GLADE_HOOKUP_OBJECT(TextSourceDialog, hbox104, "hbox104"); GLADE_HOOKUP_OBJECT(TextSourceDialog, image33, "image33"); GLADE_HOOKUP_OBJECT(TextSourceDialog, label195, "label195"); GLADE_HOOKUP_OBJECT_NO_REF(TextSourceDialog, dialog_action_area9, "dialog_action_area9"); GLADE_HOOKUP_OBJECT(TextSourceDialog, cancelbutton7, "cancelbutton7"); GLADE_HOOKUP_OBJECT(TextSourceDialog, okbutton9, "okbutton9"); const char *type = MyConfig->GetStringValue(CONFIG_TEXT_SOURCE_TYPE); uint index = 0; if (strcmp(type, TEXT_SOURCE_TIMED_FILE) == 0) { index = 1; } else if (strcmp(type, TEXT_SOURCE_DIALOG) == 0) { index = 0; } else if (strcmp(type, TEXT_SOURCE_FILE_WITH_DIALOG) == 0) { index = 2; } gtk_option_menu_set_history(GTK_OPTION_MENU(TextSourceMenu), index); const char *file = MyConfig->GetStringValue(CONFIG_TEXT_SOURCE_FILE_NAME); if (file != NULL) { gtk_entry_set_text(GTK_ENTRY(TextFileEntry), file); } EnableFromTextMenu(TextSourceDialog, index); gtk_widget_show(TextSourceDialog);}/************************************************************************* * Text profile dialog *************************************************************************/static const char **encoderNames = NULL;static GtkWidget *TextProfileDialog;voidon_TextProfileEncoder_changed (GtkOptionMenu *optionmenu, gpointer user_data){ uint32_t encoderIndex = gtk_option_menu_get_history(optionmenu); bool set; set = text_encoder_table[encoderIndex].get_gui_options != NULL; if (set) { set = (text_encoder_table[encoderIndex].get_gui_options)(NULL, NULL); } GtkWidget *temp = lookup_widget(TextProfileDialog, "TextEncoderSettingsButton"); gtk_widget_set_sensitive(temp, set);}voidon_TextEncoderSettingsButton_clicked (GtkButton *button, gpointer user_data){ CTextProfile *profile = (CTextProfile *)user_data; GtkWidget *temp; temp = lookup_widget(TextProfileDialog, "TextProfileEncoder"); encoder_gui_options_base_t **settings_array; uint settings_array_count; uint index = gtk_option_menu_get_history(GTK_OPTION_MENU(temp)); if ((text_encoder_table[index].get_gui_options)(&settings_array, &settings_array_count) == false) { return; } CreateEncoderSettingsDialog(profile, TextProfileDialog, text_encoder_table[index].dialog_selection_name, settings_array, settings_array_count);}static voidon_TextProfileDialog_response (GtkDialog *dialog, gint response_id, gpointer user_data){ GtkWidget *wid; CTextProfile *ret_profile = NULL; if (GTK_RESPONSE_OK == response_id) { CTextProfile *tp = (CTextProfile *)user_data; if (tp == NULL) { wid = lookup_widget(GTK_WIDGET(dialog), "TextProfileEntry"); const char *name = gtk_entry_get_text(GTK_ENTRY(wid)); if (name == NULL || *name == '\0') { ShowMessage("Error", "Must enter profile name"); return; } if (AVFlow->m_text_profile_list->FindProfile(name) != NULL) { ShowMessage("Error", "Profile already exists"); return; } if (AVFlow->m_text_profile_list->CreateConfig(name) == false) { ShowMessage("Error", "profile creation error"); return; } tp = AVFlow->m_text_profile_list->FindProfile(name); ret_profile = tp; } wid = lookup_widget(GTK_WIDGET(dialog), "TextProfileEncoder"); tp->SetStringValue(CFG_TEXT_ENCODING, text_encoder_table[gtk_option_menu_get_history(GTK_OPTION_MENU(wid))].text_encoding); wid = lookup_widget(GTK_WIDGET(dialog), "TextRepeatTimeSpinner"); tp->SetFloatValue(CFG_TEXT_REPEAT_TIME_SECS, gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(wid))); tp->Update(); } free(encoderNames); OnTextProfileFinished(ret_profile); gtk_widget_destroy(GTK_WIDGET(dialog));}void create_TextProfileDialog(CTextProfile *tp){ GtkWidget *dialog_vbox11; GtkWidget *table8; GtkWidget *TextProfileEncoder; GtkWidget *label211; GtkWidget *label212; GtkObject *TextRepeatTimeSpinner_adj; GtkWidget *TextRepeatTimeSpinner; GtkWidget *label213; GtkWidget *TextProfileName; GtkWidget *label224; GtkWidget *TextEncoderSettingsButton; GtkWidget *alignment38; GtkWidget *hbox117; GtkWidget *image43; GtkWidget *label225; GtkWidget *dialog_action_area10; GtkWidget *cancelbutton8; GtkWidget *okbutton10; TextProfileDialog = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(TextProfileDialog), _("Text Encoder")); gtk_window_set_modal(GTK_WINDOW(TextProfileDialog), TRUE); gtk_window_set_resizable(GTK_WINDOW(TextProfileDialog), FALSE); gtk_window_set_type_hint(GTK_WINDOW(TextProfileDialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox11 = GTK_DIALOG(TextProfileDialog)->vbox; gtk_widget_show(dialog_vbox11); table8 = gtk_table_new(4, 2, FALSE); gtk_widget_show(table8); gtk_box_pack_start(GTK_BOX(dialog_vbox11), table8, TRUE, TRUE, 0); gtk_table_set_row_spacings(GTK_TABLE(table8), 11); gtk_table_set_col_spacings(GTK_TABLE(table8), 7); TextProfileEncoder = gtk_option_menu_new(); gtk_widget_show(TextProfileEncoder); gtk_table_attach(GTK_TABLE(table8), TextProfileEncoder, 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -