/* * Copyright (C) 2004-2005 Vadim Berezniker * http://www.kryptolus.com * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This Program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Make; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * http://www.gnu.org/copyleft/gpl.html * */ #include "stdafx.h" #include "common.h" #include "sabbu.h" #include "resource.h" extern struct sabbu app; struct key_shortcut { char *shortcut; char *description; }; struct key_shortcut shortcuts_left[9] = { {"A", _("ShortcutHelp|Scrolls Wave Left")}, {"S", _("ShortcutHelp|Plays Selection")}, {"D", _("ShortcutHelp|Plays Last 0.5 seconds")}, {"F", _("ShortcutHelp|Scrolls Wave Right")}, {"G", _("ShortcutHelp|Grab Times")}, {"Q", _("ShortcutHelp|Stop Playing Sound")}, {"W", _("ShortcutHelp|Play from Start Marker")}, {"E", _("ShortcutHelp|Advance Markers")}, {NULL, NULL} }; struct key_shortcut shortcuts_right[16] = { {"Home", _("ShortcutHelp|Move End Marker 0.01 seconds left")}, {"Ctrl + Home", _("ShortcutHelp|Move End Marker 0.1 seconds left")}, {"Up Arrow", _("ShortcutHelp|Plays Last 0.5 seconds")}, {"Page Up", _("ShortcutHelp|Move End Marker 0.01 seconds right")}, {"Ctrl + Page Up", _("ShortcutHelp|Move End Marker 0.1 seconds right")}, {"Left Arrow", _("ShortcutHelp|Move Start Marker 0.01 seconds left")}, {"Ctrl + Left Arrow", _("ShortcutHelp|Move Start Marker 0.1 seconds left")}, {"Keypad 5", _("ShortcutHelp|Plays Selection")}, {"Right Arrow", _("ShortcutHelp|Move Start Marker 0.01 seconds right")}, {"Ctrl + Right Arrow", _("ShortcutHelp|Move Start Marker 0.1 seconds right")}, {"End", _("ShortcutHelp|Scrolls Wave Left")}, {"Page Down", _("ShortcutHelp|Scrolls Wave Right")}, {"Keypad +", _("ShortcutHelp|Grab Times")}, {"Keypad /", _("ShortcutHelp|Focus Waveform on Selection")}, {"Keypad *", _("ShortcutHelp|Play Previous 0.25 seconds")}, {NULL, NULL} }; enum { HELP_KEY_COLUMN, HELP_DESCRIPTION_COLUMN, HELP_N_COLUMNS }; void gui_main_help_shortcuts() { GtkTreeIter iter1; GtkTreeIter iter2; GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Keyboard Shortcuts"), app.ui.window, (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); GtkTreeStore *tree_store = gtk_tree_store_new(HELP_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); GtkTreeView *tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(tree_store))); GtkCellRendererText *renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new()); GtkTreeViewColumn *column1 = gtk_tree_view_column_new_with_attributes(__("ShortcutHelp|Key"), GTK_CELL_RENDERER(renderer), "text", HELP_KEY_COLUMN, NULL); GtkTreeViewColumn *column2 = gtk_tree_view_column_new_with_attributes(__("ShortcutHelp|Description"), GTK_CELL_RENDERER(renderer), "text", HELP_DESCRIPTION_COLUMN, NULL); GtkLabel *label_header = GTK_LABEL(gtk_label_new(_("The shortcuts are organized to be best used in either of the following setups:\nBoth hands on keyboard in which both sets of keys are utilizied.\nOne hand on keyboard and one on mouse in which case only one of the sets is utilized."))); GtkLabel *label_other = GTK_LABEL(gtk_label_new(_("Global shortcuts are listed in the menus next to their functions"))); struct key_shortcut *cur = shortcuts_left; gtk_tree_view_append_column(tree_view, column1); gtk_tree_view_append_column(tree_view, column2); gtk_tree_store_append(tree_store, &iter1, NULL); gtk_tree_store_set(tree_store, &iter1, HELP_KEY_COLUMN, __("ShortcutHelp|Set 1"), -1); while(cur->shortcut != NULL) { gtk_tree_store_append(tree_store, &iter2, &iter1); gtk_tree_store_set(tree_store, &iter2, HELP_KEY_COLUMN, cur->shortcut, -1); gtk_tree_store_set(tree_store, &iter2, HELP_DESCRIPTION_COLUMN, __(cur->description), -1); cur++; } gtk_tree_store_append(tree_store, &iter1, NULL); gtk_tree_store_set(tree_store, &iter1, HELP_KEY_COLUMN, __("ShortcutHelp|Set 2"), -1); cur = shortcuts_right; while(cur->shortcut != NULL) { gtk_tree_store_append(tree_store, &iter2, &iter1); gtk_tree_store_set(tree_store, &iter2, HELP_KEY_COLUMN, cur->shortcut, -1); gtk_tree_store_set(tree_store, &iter2, HELP_DESCRIPTION_COLUMN, __(cur->description), -1); cur++; } gtk_tree_view_expand_all(tree_view); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(label_header), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(tree_view), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(label_other), FALSE, TRUE, 0); gtk_widget_show_all(dialog); gui_main_disable(); gtk_dialog_run(GTK_DIALOG(dialog)); gui_main_enable(); gui_main_focus(); gtk_widget_destroy(dialog); } void gui_main_help_about_contact_cb(GtkWidget *widget, gpointer data) { #ifdef _WINDOWS ShellExecute(NULL, "open", "mailto:kryptolus@gmail.com", NULL, NULL, SW_SHOWNORMAL); #endif } void gui_main_help_about_website_cb(GtkWidget *widget, gpointer data) { #ifdef _WINDOWS ShellExecute(NULL, "open", "http://www.sabbu.com", NULL, NULL, SW_SHOWNORMAL); #endif } void gui_main_help_about() { GtkHBox *hbox_main = GTK_HBOX(gtk_hbox_new(FALSE, 0)); GtkVBox *vbox_data = GTK_VBOX(gtk_vbox_new(FALSE, 0)); GdkPixbuf *pixbuf = gui_main_load_image(IDR_LOGO); GtkImage *image = GTK_IMAGE(gtk_image_new_from_pixbuf(pixbuf)); GtkFrame *frame_author = GTK_FRAME(gtk_frame_new(__("AboutDialog|Author"))); GtkLabel *label_author = GTK_LABEL(gtk_label_new("Vadim \"Kryptolus\" Berezniker")); GtkFrame *frame_contact = GTK_FRAME(gtk_frame_new(__("AboutDialogEmail|Contact"))); GtkButton *button_contact = GTK_BUTTON(gtk_button_new_with_label("kryptolus@gmail.com")); GtkFrame *frame_website = GTK_FRAME(gtk_frame_new(__("AboutDialog|Website"))); GtkButton *button_website = GTK_BUTTON(gtk_button_new_with_label("http://www.sabbu.com")); GtkFrame *frame_thanks = GTK_FRAME(gtk_frame_new(__("AboutDialog|Special Thanks"))); GtkVBox *vbox_thanks = GTK_VBOX(gtk_vbox_new(FALSE, 0)); GtkTextView *view = GTK_TEXT_VIEW(gtk_text_view_new()); GtkTextBuffer *buffer = gtk_text_view_get_buffer(view); GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); gtk_scrolled_window_set_policy(sw, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_text_buffer_set_text(buffer, "voxvam\nElly\nNazdrug\nKirika\nSylf\nender\nLiisa\ndemi_alucard\nMeteorRain\nInfiniti\nlance-\ntaniwha\nTatewaki\nverm\nYosaphina\n|Obaka|", -1); gtk_text_view_set_editable(view, FALSE); gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(view)); gtk_box_pack_start(GTK_BOX(vbox_thanks), GTK_WIDGET(sw), TRUE, TRUE, 2); gtk_container_add(GTK_CONTAINER(frame_author), GTK_WIDGET(label_author)); gtk_container_add(GTK_CONTAINER(frame_contact), GTK_WIDGET(button_contact)); gtk_container_add(GTK_CONTAINER(frame_website), GTK_WIDGET(button_website)); gtk_container_add(GTK_CONTAINER(frame_thanks), GTK_WIDGET(vbox_thanks)); gtk_misc_set_padding(GTK_MISC(label_author), 5, 5); gtk_container_set_border_width(GTK_CONTAINER(button_contact), 5); gtk_container_set_border_width(GTK_CONTAINER(button_website), 5); g_signal_connect(G_OBJECT(button_contact), "clicked", G_CALLBACK(gui_main_help_about_contact_cb), NULL); g_signal_connect(G_OBJECT(button_website), "clicked", G_CALLBACK(gui_main_help_about_website_cb), NULL); gtk_box_pack_start(GTK_BOX(vbox_data), GTK_WIDGET(frame_author), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_data), GTK_WIDGET(frame_contact), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_data), GTK_WIDGET(frame_website), FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_data), GTK_WIDGET(frame_thanks), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox_main), GTK_WIDGET(image), FALSE, TRUE, 5); gtk_box_pack_start(GTK_BOX(hbox_main), GTK_WIDGET(vbox_data), FALSE, TRUE, 5); GtkWidget *dialog = gtk_dialog_new_with_buttons (__("AboutDialogTitle|About"), app.ui.window, (GtkDialogFlags) (GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(hbox_main), FALSE, TRUE, 5); gtk_widget_show_all(dialog); gui_main_disable(); gtk_dialog_run(GTK_DIALOG(dialog)); gui_main_enable(); gui_main_focus(); gtk_widget_destroy(GTK_WIDGET(dialog)); g_object_unref(pixbuf); }