diff options
-rw-r--r-- | Makefile.am | 7 | ||||
-rw-r--r-- | callbacks.c | 35 | ||||
-rw-r--r-- | callbacks.h | 4 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | deadbeef.glade | 83 | ||||
-rw-r--r-- | help.txt | 46 | ||||
-rw-r--r-- | interface.c | 109 | ||||
-rw-r--r-- | interface.h | 1 | ||||
-rw-r--r-- | plugins/flac/flac.c | 2 | ||||
-rw-r--r-- | plugins/mpgmad/mpgmad.c | 2 |
10 files changed, 249 insertions, 42 deletions
diff --git a/Makefile.am b/Makefile.am index 696a8833..2be8cf35 100644 --- a/Makefile.am +++ b/Makefile.am @@ -21,7 +21,7 @@ bin_PROGRAMS = deadbeef deadbeef_SOURCES =\ main.c common.h deadbeef.h\ - plugins.c plugins.h\ + plugins.c plugins.h moduleconf.h\ callbacks.c interface.c support.c callbacks.h interface.h support.h\ playlist.c playlist.h gtkplaylist.c gtkplaylist.h\ streamer.c streamer.h\ @@ -37,7 +37,8 @@ deadbeef_SOURCES =\ volume.c volume.h\ drawing.h gdkdrawing.c\ session.h session.c gtksession.c\ - junklib.h junklib.c utf8.c utf8.h + junklib.h junklib.c utf8.c utf8.h\ + optmath.h sdkdir = $(pkgincludedir) sdk_HEADERS = deadbeef.h @@ -49,7 +50,7 @@ AM_CPPFLAGS = $(DEPS_CFLAGS) -I$(sidpath)/libsidplay/include -I$(sidpath)/builde docsdir = $(datadir)/doc/$(PACKAGE) -docs_DATA = README COPYING config-example +docs_DATA = README COPYING config-example help.txt desktopdir = $(datadir)/applications desktop_DATA = deadbeef.desktop diff --git a/callbacks.c b/callbacks.c index d49862f8..e04241e5 100644 --- a/callbacks.c +++ b/callbacks.c @@ -1216,3 +1216,38 @@ on_find_activate (GtkMenuItem *menuitem, + +void +on_help1_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + GtkWidget *widget = create_helpwindow (); + gtk_window_set_transient_for (GTK_WINDOW (widget), GTK_WINDOW (mainwin)); + GtkWidget *txt = lookup_widget (widget, "helptext"); + GtkTextBuffer *buffer = gtk_text_buffer_new (NULL); + + FILE *fp = fopen (PREFIX "/share/doc/deadbeef/help.txt", "rb"); + if (fp) { + fseek (fp, 0, SEEK_END); + size_t s = ftell (fp); + rewind (fp); + char buf[s+1]; + if (fread (buf, 1, s, fp) != s) { + fprintf (stderr, "error reading help file contents\n"); + const char *error = "Failed while reading help file"; + gtk_text_buffer_set_text (buffer, error, strlen (error)); + } + else { + buf[s] = 0; + gtk_text_buffer_set_text (buffer, buf, s); + } + fclose (fp); + } + else { + const char *error = "Failed to load help file"; + gtk_text_buffer_set_text (buffer, error, strlen (error)); + } + gtk_text_view_set_buffer (GTK_TEXT_VIEW (txt), buffer); + gtk_widget_show (widget); +} + diff --git a/callbacks.h b/callbacks.h index 83be7329..31f122fd 100644 --- a/callbacks.h +++ b/callbacks.h @@ -525,3 +525,7 @@ void on_find_activate (GtkMenuItem *menuitem, gpointer user_data); + +void +on_help1_activate (GtkMenuItem *menuitem, + gpointer user_data); diff --git a/configure.in b/configure.in index 1cab9bba..80fe286c 100644 --- a/configure.in +++ b/configure.in @@ -3,7 +3,7 @@ AC_INIT AC_CONFIG_HEADER(config.h) PACKAGE="deadbeef" -VERSION="0.2.0-rc2" +VERSION="0.2.0" AM_INIT_AUTOMAKE($PACKAGE,$VERSION) diff --git a/deadbeef.glade b/deadbeef.glade index fde03127..efa95e95 100644 --- a/deadbeef.glade +++ b/deadbeef.glade @@ -56,7 +56,7 @@ <accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image35"> + <widget class="GtkImage" id="image46"> <property name="visible">True</property> <property name="stock">gtk-open</property> <property name="icon_size">1</property> @@ -83,7 +83,7 @@ <signal name="activate" handler="on_add_files_activate" last_modification_time="Sat, 04 Jul 2009 13:04:01 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image36"> + <widget class="GtkImage" id="image47"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">1</property> @@ -104,7 +104,7 @@ <signal name="activate" handler="on_add_folders_activate" last_modification_time="Sun, 06 Sep 2009 17:51:40 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image37"> + <widget class="GtkImage" id="image48"> <property name="visible">True</property> <property name="stock">gtk-add</property> <property name="icon_size">1</property> @@ -132,7 +132,7 @@ <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image38"> + <widget class="GtkImage" id="image49"> <property name="visible">True</property> <property name="stock">gtk-quit</property> <property name="icon_size">1</property> @@ -166,7 +166,7 @@ <signal name="activate" handler="on_clear1_activate" last_modification_time="Sun, 06 Sep 2009 18:30:03 GMT"/> <child internal-child="image"> - <widget class="GtkImage" id="image39"> + <widget class="GtkImage" id="image50"> <property name="visible">True</property> <property name="stock">gtk-clear</property> <property name="icon_size">1</property> @@ -207,7 +207,7 @@ <accelerator key="Delete" modifiers="0" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image40"> + <widget class="GtkImage" id="image51"> <property name="visible">True</property> <property name="stock">gtk-remove</property> <property name="icon_size">1</property> @@ -404,6 +404,27 @@ <signal name="activate" handler="on_about1_activate" last_modification_time="Sat, 04 Jul 2009 12:57:58 GMT"/> </widget> </child> + + <child> + <widget class="GtkImageMenuItem" id="help1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Help</property> + <property name="use_underline">True</property> + <signal name="activate" handler="on_help1_activate" last_modification_time="Tue, 08 Sep 2009 17:32:06 GMT"/> + + <child internal-child="image"> + <widget class="GtkImage" id="image52"> + <property name="visible">True</property> + <property name="stock">gtk-help</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> </widget> </child> </widget> @@ -1106,4 +1127,54 @@ Stas "uncle lag" Akimushkin <uncle.lag@gmail.com></property> </child> </widget> +<widget class="GtkWindow" id="helpwindow"> + <property name="width_request">600</property> + <property name="height_request">400</property> + <property name="visible">True</property> + <property name="title" translatable="yes">Help</property> + <property name="type">GTK_WINDOW_TOPLEVEL</property> + <property name="window_position">GTK_WIN_POS_NONE</property> + <property name="modal">True</property> + <property name="resizable">True</property> + <property name="destroy_with_parent">True</property> + <property name="decorated">True</property> + <property name="skip_taskbar_hint">False</property> + <property name="skip_pager_hint">False</property> + <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> + <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> + <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> + <property name="shadow_type">GTK_SHADOW_NONE</property> + <property name="window_placement">GTK_CORNER_TOP_LEFT</property> + + <child> + <widget class="GtkTextView" id="helptext"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="overwrite">False</property> + <property name="accepts_tab">True</property> + <property name="justification">GTK_JUSTIFY_LEFT</property> + <property name="wrap_mode">GTK_WRAP_WORD</property> + <property name="cursor_visible">True</property> + <property name="pixels_above_lines">0</property> + <property name="pixels_below_lines">0</property> + <property name="pixels_inside_wrap">0</property> + <property name="left_margin">10</property> + <property name="right_margin">10</property> + <property name="indent">0</property> + <property name="text" translatable="yes"></property> + </widget> + </child> + </widget> + </child> +</widget> + </glade-interface> diff --git a/help.txt b/help.txt new file mode 100644 index 00000000..818b3943 --- /dev/null +++ b/help.txt @@ -0,0 +1,46 @@ +help file for deadbeef player + +CONFIGURATION + +currently there's no gui for configuration. +there is one config file for player core, and separate file per plugin. + +MAIN CONFIG FILE + +example is located in PREFIX/share/doc/deadbeef/config-example +copy it into $HOME/.config/deadbeef/config, and modify according to your needs. + +HOTKEYS PLUGIN CONFIGURATION + +create file in $HOME/.config/deadbeef/hotkeys +syntax is following: + +<key_combination>: <action> + +some examples: + +Ctrl Alt c: toggle_pause +Ctrl Alt z: prev +Ctrl Alt b: next +Ctrl Alt v: stop +Ctrl Alt x: play +Ctrl Alt n: play_random + +full list of actions: + +toggle_pause, play, prev, next, stop, play_random, seek_fwd, seek_back, volume_up, volume_down + +LAST.FM PLUGIN CONFIGURATION + +create file in $HOME/.config/deadbeef/lastfm + +file must have 2 lines: +your_lastfm_login +your_lastfm_password + +you can see if it works by looking at lastfm profile page after you start playing music (it should say something like "now playing with DeaDBeeF") + +also note, that it's subject to last.fm policy to submit songs under certain rules. +songs without at least Artist and Title tags will not be submitted. + + diff --git a/interface.c b/interface.c index f26fb925..3b94eb04 100644 --- a/interface.c +++ b/interface.c @@ -35,24 +35,24 @@ create_mainwin (void) GtkWidget *menuitem1; GtkWidget *menuitem1_menu; GtkWidget *open; - GtkWidget *image35; + GtkWidget *image46; GtkWidget *separator2; GtkWidget *add_files; - GtkWidget *image36; + GtkWidget *image47; GtkWidget *add_folders; - GtkWidget *image37; + GtkWidget *image48; GtkWidget *separatormenuitem1; GtkWidget *quit; - GtkWidget *image38; + GtkWidget *image49; GtkWidget *edit1; GtkWidget *edit1_menu; GtkWidget *clear1; - GtkWidget *image39; + GtkWidget *image50; GtkWidget *select_all1; GtkWidget *selection1; GtkWidget *selection1_menu; GtkWidget *remove1; - GtkWidget *image40; + GtkWidget *image51; GtkWidget *crop1; GtkWidget *find1; GtkWidget *playlist1; @@ -76,6 +76,8 @@ create_mainwin (void) GtkWidget *menuitem4; GtkWidget *menuitem4_menu; GtkWidget *about1; + GtkWidget *help1; + GtkWidget *image52; GtkWidget *hbox2; GtkWidget *hbox3; GtkWidget *stopbtn; @@ -129,9 +131,9 @@ create_mainwin (void) GDK_O, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - image35 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); - gtk_widget_show (image35); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image35); + image46 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU); + gtk_widget_show (image46); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (open), image46); separator2 = gtk_separator_menu_item_new (); gtk_widget_show (separator2); @@ -142,17 +144,17 @@ create_mainwin (void) gtk_widget_show (add_files); gtk_container_add (GTK_CONTAINER (menuitem1_menu), add_files); - image36 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); - gtk_widget_show (image36); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image36); + image47 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show (image47); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_files), image47); add_folders = gtk_image_menu_item_new_with_mnemonic ("Add folder(s)"); gtk_widget_show (add_folders); gtk_container_add (GTK_CONTAINER (menuitem1_menu), add_folders); - image37 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); - gtk_widget_show (image37); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image37); + image48 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU); + gtk_widget_show (image48); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_folders), image48); separatormenuitem1 = gtk_separator_menu_item_new (); gtk_widget_show (separatormenuitem1); @@ -166,9 +168,9 @@ create_mainwin (void) GDK_Q, (GdkModifierType) GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - image38 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU); - gtk_widget_show (image38); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image38); + image49 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU); + gtk_widget_show (image49); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (quit), image49); edit1 = gtk_menu_item_new_with_mnemonic ("Edit"); gtk_widget_show (edit1); @@ -181,9 +183,9 @@ create_mainwin (void) gtk_widget_show (clear1); gtk_container_add (GTK_CONTAINER (edit1_menu), clear1); - image39 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU); - gtk_widget_show (image39); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image39); + image50 = gtk_image_new_from_stock ("gtk-clear", GTK_ICON_SIZE_MENU); + gtk_widget_show (image50); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (clear1), image50); select_all1 = gtk_menu_item_new_with_mnemonic ("Select all"); gtk_widget_show (select_all1); @@ -206,9 +208,9 @@ create_mainwin (void) GDK_Delete, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); - image40 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU); - gtk_widget_show (image40); - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image40); + image51 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU); + gtk_widget_show (image51); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (remove1), image51); crop1 = gtk_menu_item_new_with_mnemonic ("Crop"); gtk_widget_show (crop1); @@ -306,6 +308,14 @@ create_mainwin (void) gtk_widget_show (about1); gtk_container_add (GTK_CONTAINER (menuitem4_menu), about1); + help1 = gtk_image_menu_item_new_with_mnemonic ("Help"); + gtk_widget_show (help1); + gtk_container_add (GTK_CONTAINER (menuitem4_menu), help1); + + image52 = gtk_image_new_from_stock ("gtk-help", GTK_ICON_SIZE_MENU); + gtk_widget_show (image52); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (help1), image52); + hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox1), hbox2, FALSE, FALSE, 0); @@ -507,6 +517,9 @@ create_mainwin (void) g_signal_connect ((gpointer) about1, "activate", G_CALLBACK (on_about1_activate), NULL); + g_signal_connect ((gpointer) help1, "activate", + G_CALLBACK (on_help1_activate), + NULL); g_signal_connect ((gpointer) stopbtn, "clicked", G_CALLBACK (on_stopbtn_clicked), NULL); @@ -635,24 +648,24 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, menuitem1, "menuitem1"); GLADE_HOOKUP_OBJECT (mainwin, menuitem1_menu, "menuitem1_menu"); GLADE_HOOKUP_OBJECT (mainwin, open, "open"); - GLADE_HOOKUP_OBJECT (mainwin, image35, "image35"); + GLADE_HOOKUP_OBJECT (mainwin, image46, "image46"); GLADE_HOOKUP_OBJECT (mainwin, separator2, "separator2"); GLADE_HOOKUP_OBJECT (mainwin, add_files, "add_files"); - GLADE_HOOKUP_OBJECT (mainwin, image36, "image36"); + GLADE_HOOKUP_OBJECT (mainwin, image47, "image47"); GLADE_HOOKUP_OBJECT (mainwin, add_folders, "add_folders"); - GLADE_HOOKUP_OBJECT (mainwin, image37, "image37"); + GLADE_HOOKUP_OBJECT (mainwin, image48, "image48"); GLADE_HOOKUP_OBJECT (mainwin, separatormenuitem1, "separatormenuitem1"); GLADE_HOOKUP_OBJECT (mainwin, quit, "quit"); - GLADE_HOOKUP_OBJECT (mainwin, image38, "image38"); + GLADE_HOOKUP_OBJECT (mainwin, image49, "image49"); GLADE_HOOKUP_OBJECT (mainwin, edit1, "edit1"); GLADE_HOOKUP_OBJECT (mainwin, edit1_menu, "edit1_menu"); GLADE_HOOKUP_OBJECT (mainwin, clear1, "clear1"); - GLADE_HOOKUP_OBJECT (mainwin, image39, "image39"); + GLADE_HOOKUP_OBJECT (mainwin, image50, "image50"); GLADE_HOOKUP_OBJECT (mainwin, select_all1, "select_all1"); GLADE_HOOKUP_OBJECT (mainwin, selection1, "selection1"); GLADE_HOOKUP_OBJECT (mainwin, selection1_menu, "selection1_menu"); GLADE_HOOKUP_OBJECT (mainwin, remove1, "remove1"); - GLADE_HOOKUP_OBJECT (mainwin, image40, "image40"); + GLADE_HOOKUP_OBJECT (mainwin, image51, "image51"); GLADE_HOOKUP_OBJECT (mainwin, crop1, "crop1"); GLADE_HOOKUP_OBJECT (mainwin, find1, "find1"); GLADE_HOOKUP_OBJECT (mainwin, playlist1, "playlist1"); @@ -674,6 +687,8 @@ create_mainwin (void) GLADE_HOOKUP_OBJECT (mainwin, menuitem4, "menuitem4"); GLADE_HOOKUP_OBJECT (mainwin, menuitem4_menu, "menuitem4_menu"); GLADE_HOOKUP_OBJECT (mainwin, about1, "about1"); + GLADE_HOOKUP_OBJECT (mainwin, help1, "help1"); + GLADE_HOOKUP_OBJECT (mainwin, image52, "image52"); GLADE_HOOKUP_OBJECT (mainwin, hbox2, "hbox2"); GLADE_HOOKUP_OBJECT (mainwin, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (mainwin, stopbtn, "stopbtn"); @@ -1017,3 +1032,37 @@ create_addprogress (void) return addprogress; } +GtkWidget* +create_helpwindow (void) +{ + GtkWidget *helpwindow; + GtkWidget *scrolledwindow1; + GtkWidget *helptext; + + helpwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (helpwindow, 600, 400); + gtk_window_set_title (GTK_WINDOW (helpwindow), "Help"); + gtk_window_set_modal (GTK_WINDOW (helpwindow), TRUE); + gtk_window_set_destroy_with_parent (GTK_WINDOW (helpwindow), TRUE); + + scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow1); + gtk_container_add (GTK_CONTAINER (helpwindow), scrolledwindow1); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + helptext = gtk_text_view_new (); + gtk_widget_show (helptext); + gtk_container_add (GTK_CONTAINER (scrolledwindow1), helptext); + gtk_text_view_set_editable (GTK_TEXT_VIEW (helptext), FALSE); + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (helptext), GTK_WRAP_WORD); + gtk_text_view_set_left_margin (GTK_TEXT_VIEW (helptext), 10); + gtk_text_view_set_right_margin (GTK_TEXT_VIEW (helptext), 10); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (helpwindow, helpwindow, "helpwindow"); + GLADE_HOOKUP_OBJECT (helpwindow, scrolledwindow1, "scrolledwindow1"); + GLADE_HOOKUP_OBJECT (helpwindow, helptext, "helptext"); + + return helpwindow; +} + diff --git a/interface.h b/interface.h index 943cf0fc..66e3a07a 100644 --- a/interface.h +++ b/interface.h @@ -7,3 +7,4 @@ GtkWidget* create_aboutdialog (void); GtkWidget* create_searchwin (void); GtkWidget* create_traymenu (void); GtkWidget* create_addprogress (void); +GtkWidget* create_helpwindow (void); diff --git a/plugins/flac/flac.c b/plugins/flac/flac.c index da28fa27..5188947e 100644 --- a/plugins/flac/flac.c +++ b/plugins/flac/flac.c @@ -19,7 +19,7 @@ #include <stdio.h> #include <stdlib.h> #include <FLAC/stream_decoder.h> -#include "deadbeef.h" +#include "../../deadbeef.h" static DB_decoder_t plugin; static DB_functions_t *deadbeef; diff --git a/plugins/mpgmad/mpgmad.c b/plugins/mpgmad/mpgmad.c index b10762eb..74847f37 100644 --- a/plugins/mpgmad/mpgmad.c +++ b/plugins/mpgmad/mpgmad.c @@ -20,7 +20,7 @@ #include <mad.h> #include <assert.h> #include <stdlib.h> -#include "deadbeef.h" +#include "../../deadbeef.h" #define min(x,y) ((x)<(y)?(x):(y)) #define max(x,y) ((x)>(y)?(x):(y)) |