mp3splt-gtk
|
00001 /********************************************************** 00002 * 00003 * mp3splt-gtk -- utility based on mp3splt, 00004 * for mp3/ogg splitting without decoding 00005 * 00006 * Copyright: (C) 2005-2011 Alexandru Munteanu 00007 * Contact: io_fx@yahoo.fr 00008 * 00009 * http://mp3splt.sourceforge.net/ 00010 * 00011 *********************************************************/ 00012 00013 /********************************************************** 00014 * 00015 * This program is free software; you can redistribute it and/or 00016 * modify it under the terms of the GNU General Public License 00017 * as published by the Free Software Foundation; either version 2 00018 * of the License, or (at your option) any later version. 00019 * 00020 * This program is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU General Public License for more details. 00024 * 00025 * You should have received a copy of the GNU General Public License 00026 * along with this program; if not, write to the Free Software 00027 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 00028 * USA. 00029 * 00030 *********************************************************/ 00031 00032 /*!******************************************************** 00033 * \file 00034 * The messages history dialog 00035 *********************************************************/ 00036 00037 #include <gtk/gtk.h> 00038 #include <glib/gi18n.h> 00039 00040 #include <libmp3splt/mp3splt.h> 00041 00042 #include "main_win.h" 00043 00044 GtkWidget *mess_history_dialog = NULL; 00045 GtkTextBuffer *mess_hist_buffer = NULL; 00046 GtkTextTagTable *mess_hist_tag_table = NULL; 00047 GtkWidget *mess_hist_view = NULL; 00048 gint debug_is_active = FALSE; 00049 00050 void create_mess_history_dialog(); 00051 00052 extern splt_state *the_state; 00053 00055 const char *get_current_time() 00056 { 00057 time_t cur_time = { 0 }; 00058 static char time_str[128] = { '\0' }; 00059 cur_time = time(NULL); 00060 const struct tm *tm = localtime(&cur_time); 00061 strftime(time_str, sizeof(time_str), "(%H:%M:%S) ", tm); 00062 00063 return time_str; 00064 } 00065 00067 void put_message_in_history(const gchar *message, splt_message_type mess_type) 00068 { 00069 if (mess_type == SPLT_MESSAGE_INFO || 00070 (mess_type == SPLT_MESSAGE_DEBUG && debug_is_active)) 00071 { 00072 GtkTextTag *gray_tag = 00073 gtk_text_tag_table_lookup(mess_hist_tag_table, "gray_bold"); 00074 00075 GtkTextIter iter; 00076 const char *current_time = get_current_time(); 00077 gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(mess_hist_buffer), &iter); 00078 gtk_text_buffer_insert_with_tags(GTK_TEXT_BUFFER(mess_hist_buffer), 00079 &iter, current_time, -1, gray_tag, NULL); 00080 00081 gtk_text_buffer_insert(GTK_TEXT_BUFFER(mess_hist_buffer), &iter, 00082 message, -1); 00083 gtk_text_buffer_insert(GTK_TEXT_BUFFER(mess_hist_buffer), &iter, 00084 "\n", -1); 00085 00086 gtk_text_iter_set_line_offset(&iter, 0); 00087 GtkTextMark *mark = gtk_text_buffer_get_mark(mess_hist_buffer, "end"); 00088 gtk_text_buffer_move_mark(mess_hist_buffer, mark, &iter); 00089 gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(mess_hist_view), mark); 00090 } 00091 } 00092 00094 void mess_history_hide(GtkDialog *dialog, gint response_id, gpointer data) 00095 { 00096 gtk_widget_hide(mess_history_dialog); 00097 } 00098 00105 void mess_history_hide2(GtkWidget *widget, gpointer data) 00106 { 00107 mess_history_hide(NULL, 0, NULL); 00108 //TODO: ugly HACK! 00109 create_mess_history_dialog(); 00110 } 00111 00113 void add_mess_hist_tags() 00114 { 00115 GtkTextTag *tag = gtk_text_tag_new("gray_bold"); 00116 00117 GValue fg_val = { 0 }; 00118 g_value_init(&fg_val, G_TYPE_STRING); 00119 g_value_set_static_string(&fg_val, "gray"); 00120 g_object_set_property(G_OBJECT(tag), "foreground", &fg_val); 00121 00122 gtk_text_tag_table_add(mess_hist_tag_table, tag); 00123 } 00124 00126 void debug_check_event(GtkToggleButton *debug_toggle, gpointer user_data) 00127 { 00128 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(debug_toggle))) 00129 { 00130 debug_is_active = TRUE; 00131 } 00132 else 00133 { 00134 debug_is_active = FALSE; 00135 } 00136 } 00137 00139 void clear_messages_event(GtkWidget *widget, gpointer data) 00140 { 00141 GtkTextIter start_iter; 00142 GtkTextIter end_iter; 00143 gtk_text_buffer_get_start_iter(mess_hist_buffer, &start_iter); 00144 gtk_text_buffer_get_end_iter(mess_hist_buffer, &end_iter); 00145 gtk_text_buffer_delete(mess_hist_buffer, &start_iter, &end_iter); 00146 } 00147 00149 GtkWidget *create_text_component() 00150 { 00151 GtkWidget *vbox = gtk_vbox_new(FALSE, 0); 00152 00153 //text view 00154 mess_hist_tag_table = gtk_text_tag_table_new(); 00155 add_mess_hist_tags(); 00156 00157 mess_hist_buffer = gtk_text_buffer_new(mess_hist_tag_table); 00158 GtkTextIter iter; 00159 gtk_text_buffer_get_end_iter(mess_hist_buffer, &iter); 00160 gtk_text_buffer_create_mark(mess_hist_buffer, "end", &iter, TRUE); 00161 mess_hist_view = gtk_text_view_new_with_buffer(mess_hist_buffer); 00162 00163 gtk_text_view_set_editable(GTK_TEXT_VIEW(mess_hist_view), FALSE); 00164 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(mess_hist_view), FALSE); 00165 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(mess_hist_view), 5); 00166 00167 GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL); 00168 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_NONE); 00169 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), 00170 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 00171 00172 gtk_container_add(GTK_CONTAINER(scrolled_window), mess_hist_view); 00173 00174 //top 00175 GtkWidget *hbox = gtk_hbox_new(FALSE, 0); 00176 gtk_container_set_border_width(GTK_CONTAINER(hbox), 3); 00177 00178 //debug option 00179 GtkWidget *debug_check_button = 00180 gtk_check_button_new_with_mnemonic(_("Show _debug messages")); 00181 g_signal_connect(G_OBJECT(debug_check_button), "toggled", 00182 G_CALLBACK(debug_check_event), NULL); 00183 gtk_box_pack_start(GTK_BOX(hbox), debug_check_button, FALSE, FALSE, 0); 00184 00185 //clear button 00186 GtkWidget *clear_button = 00187 create_cool_button(GTK_STOCK_CLEAR, _("C_lear"), FALSE); 00188 g_signal_connect(G_OBJECT(clear_button), "clicked", 00189 G_CALLBACK(clear_messages_event), NULL); 00190 gtk_box_pack_end(GTK_BOX(hbox), clear_button, FALSE, FALSE, 0); 00191 00192 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 00193 gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 3); 00194 00195 return vbox; 00196 } 00197 00199 void create_mess_history_dialog() 00200 { 00201 mess_history_dialog = gtk_dialog_new_with_buttons(_("Messages history"), NULL, 00202 GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); 00203 00204 gtk_window_set_default_size(GTK_WINDOW(mess_history_dialog), 550, 300); 00205 00206 g_signal_connect_swapped(mess_history_dialog, "response", 00207 G_CALLBACK(mess_history_hide), NULL); 00208 g_signal_connect(G_OBJECT(mess_history_dialog), "delete_event", 00209 G_CALLBACK(mess_history_hide2), NULL); 00210 00211 gtk_window_set_position(GTK_WINDOW(mess_history_dialog), GTK_WIN_POS_CENTER); 00212 00213 GtkWidget *text_component = create_text_component(); 00214 GtkWidget *area = gtk_dialog_get_content_area(GTK_DIALOG(mess_history_dialog)); 00215 gtk_box_pack_start(GTK_BOX(area), text_component, TRUE, TRUE, 0); 00216 } 00217