recording_dialog.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:7k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is MPEG4IP.
  13.  * 
  14.  * The Initial Developer of the Original Code is Cisco Systems Inc.
  15.  * Portions created by Cisco Systems Inc. are
  16.  * Copyright (C) Cisco Systems Inc. 2001-2002.  All Rights Reserved.
  17.  * 
  18.  * Contributor(s): 
  19.  * Dave Mackie dmackie@cisco.com
  20.  * Bill May  wmay@cisco.com
  21.  */
  22. #include "mp4live.h"
  23. #include "mp4live_gui.h"
  24. static GtkWidget *dialog;
  25. static GtkWidget *file_combo;
  26. static GtkWidget *file_entry;
  27. static GtkWidget *video_raw_button;
  28. static GtkWidget *video_encoded_button;
  29. static GtkWidget *audio_raw_button;
  30. static GtkWidget *audio_encoded_button;
  31. static GtkWidget *overwrite_button;
  32. static void on_destroy_dialog (GtkWidget *widget, gpointer *data)
  33. {
  34.   gtk_grab_remove(dialog);
  35.   gtk_widget_destroy(dialog);
  36.   dialog = NULL;
  37. static void on_browse_button (GtkWidget *widget, gpointer *data)
  38. {
  39. FileBrowser(file_entry);
  40. }
  41. static bool Validate()
  42. {
  43. const char *name;
  44. name = gtk_entry_get_text(GTK_ENTRY(file_entry));
  45. if (name == NULL || *name == '') {
  46. ShowMessage("Error", "Must specify file");
  47. return false;
  48. }
  49.   
  50. struct stat statbuf;
  51. if (stat(name, &statbuf) == 0 && !S_ISREG(statbuf.st_mode)) {
  52. ShowMessage("Error", "Specified name is not a file");
  53. return false;
  54. }
  55. return true;
  56. }
  57.   
  58. static void Save()
  59. {
  60. MyConfig->SetStringValue(CONFIG_RECORD_MP4_FILE_NAME,
  61. gtk_entry_get_text(GTK_ENTRY(file_entry)));
  62. MyConfig->UpdateFileHistory(
  63. gtk_entry_get_text(GTK_ENTRY(file_entry)));
  64. MyConfig->SetBoolValue(CONFIG_RECORD_RAW_VIDEO,
  65. gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(video_raw_button)));
  66. MyConfig->SetBoolValue(CONFIG_RECORD_ENCODED_VIDEO,
  67. gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(video_encoded_button)));
  68. MyConfig->SetBoolValue(CONFIG_RECORD_RAW_AUDIO,
  69. gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(audio_raw_button)));
  70. MyConfig->SetBoolValue(CONFIG_RECORD_ENCODED_AUDIO,
  71. gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(audio_encoded_button)));
  72. MyConfig->SetBoolValue(CONFIG_RECORD_MP4_OVERWRITE,
  73. gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(overwrite_button)));
  74. MyConfig->Update();
  75. DisplayRecordingSettings();
  76. }
  77. static void on_ok_button (GtkWidget *widget, gpointer *data)
  78. {
  79. if (!Validate()) {
  80. return;
  81. }
  82. Save();
  83.     on_destroy_dialog(NULL, NULL);
  84. }
  85. static void on_cancel_button (GtkWidget *widget, gpointer *data)
  86. {
  87. on_destroy_dialog(NULL, NULL);
  88. }
  89. void CreateRecordingDialog (void) 
  90. {
  91. GtkWidget *hbox, *label;
  92. dialog = gtk_dialog_new();
  93. gtk_signal_connect(GTK_OBJECT(dialog),
  94.  "destroy",
  95.  GTK_SIGNAL_FUNC(on_destroy_dialog),
  96.  &dialog);
  97. gtk_window_set_title(GTK_WINDOW(dialog), "Recording Settings");
  98. gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
  99. // first row
  100. hbox = gtk_hbox_new(FALSE, 1);
  101. gtk_widget_show(hbox);
  102. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);
  103. // file label 
  104. label = gtk_label_new(" File:");
  105. gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
  106. gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
  107. gtk_widget_show(label);
  108. // file entry
  109. file_combo = CreateFileCombo(
  110. MyConfig->GetStringValue(CONFIG_RECORD_MP4_FILE_NAME));
  111. file_entry = GTK_COMBO(file_combo)->entry;
  112. gtk_widget_show(file_combo);
  113. gtk_box_pack_start(GTK_BOX(hbox), file_combo, TRUE, TRUE, 5);
  114. // file browse button
  115. GtkWidget *browse_button = gtk_button_new_with_label(" Browse... ");
  116. gtk_signal_connect(GTK_OBJECT(browse_button),
  117.  "clicked",
  118.  GTK_SIGNAL_FUNC(on_browse_button),
  119.  NULL);
  120. gtk_box_pack_start(GTK_BOX(hbox), browse_button, FALSE, FALSE, 0);
  121. gtk_widget_show(browse_button);
  122. // second row
  123. hbox = gtk_hbox_new(FALSE, 1);
  124. gtk_widget_show(hbox);
  125. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);
  126. // overwrite button
  127. overwrite_button = 
  128. gtk_check_button_new_with_label("Overwrite existing file");
  129. gtk_box_pack_start(GTK_BOX(hbox), overwrite_button, FALSE, FALSE, 5);
  130. gtk_widget_show(overwrite_button);
  131. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(overwrite_button),
  132. MyConfig->GetBoolValue(CONFIG_RECORD_MP4_OVERWRITE));
  133.   
  134. // third row
  135. hbox = gtk_hbox_new(FALSE, 1);
  136. gtk_widget_show(hbox);
  137. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);
  138. // video label
  139. label = gtk_label_new(" Video:");
  140. gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
  141. gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
  142. gtk_widget_show(label);
  143. // video raw button
  144. video_raw_button = gtk_check_button_new_with_label("Raw");
  145. gtk_box_pack_start(GTK_BOX(hbox), video_raw_button, FALSE, FALSE, 5);
  146. gtk_widget_show(video_raw_button);
  147. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(video_raw_button),
  148. MyConfig->GetBoolValue(CONFIG_RECORD_RAW_VIDEO));
  149.   
  150. // video encoded button
  151. video_encoded_button = gtk_check_button_new_with_label("Encoded");
  152. gtk_box_pack_start(GTK_BOX(hbox), video_encoded_button, FALSE, FALSE, 5);
  153. gtk_widget_show(video_encoded_button);
  154. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(video_encoded_button),
  155. MyConfig->GetBoolValue(CONFIG_RECORD_ENCODED_VIDEO));
  156.   
  157. // fourth row
  158. hbox = gtk_hbox_new(FALSE, 1);
  159. gtk_widget_show(hbox);
  160. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 5);
  161. // audio label
  162. label = gtk_label_new(" Audio:");
  163. gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
  164. gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
  165. gtk_widget_show(label);
  166. // audio raw button
  167. audio_raw_button = gtk_check_button_new_with_label("Raw");
  168. gtk_box_pack_start(GTK_BOX(hbox), audio_raw_button, FALSE, FALSE, 5);
  169. gtk_widget_show(audio_raw_button);
  170. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(audio_raw_button),
  171. MyConfig->GetBoolValue(CONFIG_RECORD_RAW_AUDIO));
  172.   
  173. // audio encoded button
  174. audio_encoded_button = gtk_check_button_new_with_label("Encoded");
  175. gtk_box_pack_start(GTK_BOX(hbox), audio_encoded_button, FALSE, FALSE, 5);
  176. gtk_widget_show(audio_encoded_button);
  177. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(audio_encoded_button),
  178. MyConfig->GetBoolValue(CONFIG_RECORD_ENCODED_AUDIO));
  179.   
  180. // fifth row
  181. // standard buttons 
  182. AddButtonToDialog(dialog,
  183. " OK ", 
  184. GTK_SIGNAL_FUNC(on_ok_button));
  185. AddButtonToDialog(dialog,
  186. " Cancel ", 
  187. GTK_SIGNAL_FUNC(on_cancel_button));
  188. gtk_widget_show(dialog);
  189. gtk_grab_add(dialog);
  190. }
  191. /* end recording_dialog.cpp */