From f52d8c85bffa85414f00e018fe31486f7190256f Mon Sep 17 00:00:00 2001 From: waker Date: Sat, 8 Aug 2009 20:48:14 +0200 Subject: initial searchwin stuff --- Jamfile | 2 +- callbacks.c | 6 +-- callbacks.h | 9 +++++ deadbeef.glade | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ gtkplaylist.c | 9 ++++- interface.c | 75 +++++++++++++++++++++++++++++++++++++ interface.h | 1 + search.c | 58 +++++++++++++++++++++++++++++ search.h | 24 ++++++++++++ 9 files changed, 293 insertions(+), 7 deletions(-) create mode 100644 search.c create mode 100644 search.h diff --git a/Jamfile b/Jamfile index e2e10273..93169ee3 100644 --- a/Jamfile +++ b/Jamfile @@ -22,7 +22,7 @@ HDRS += $(ROOT)/sidplay-libs-2.1.0/libsidplay/include ; HDRS += $(ROOT)/sidplay-libs-2.1.0/builders/resid-builder/include ; Main deadbeef : - codec.c cvorbis.c cmp3.c cgme.c cdumb.c cwav.c cflac.c csid.cpp playlist.c palsa.c streamer.c md5/md5.c main.c support.c interface.c callbacks.c threading_pthread.c messagepump.c gtkplaylist.c ; + codec.c cvorbis.c cmp3.c cgme.c cdumb.c cwav.c cflac.c csid.cpp playlist.c palsa.c streamer.c md5/md5.c main.c support.c interface.c callbacks.c threading_pthread.c messagepump.c gtkplaylist.c search.c ; LINKLIBS on deadbeef = -lm -lvorbis -logg -lvorbisfile -lmad -lFLAC -lsamplerate -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lgthread-2.0 -lstdc++ -lasound ; diff --git a/callbacks.c b/callbacks.c index 8b753cc3..5e4a7744 100644 --- a/callbacks.c +++ b/callbacks.c @@ -561,11 +561,6 @@ on_voice5_clicked (GtkButton *button, codec_unlock (); } - - - - - void on_order_linear_activate (GtkMenuItem *menuitem, gpointer user_data) @@ -613,3 +608,4 @@ on_loop_disable_activate (GtkMenuItem *menuitem, ps_set_loop_mode (1); } + diff --git a/callbacks.h b/callbacks.h index 03a81f50..3a2f9d8d 100644 --- a/callbacks.h +++ b/callbacks.h @@ -274,3 +274,12 @@ on_loop_single_activate (GtkMenuItem *menuitem, void on_loop_disable_activate (GtkMenuItem *menuitem, gpointer user_data); + +gboolean +on_searchwin_key_press_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); + +void +on_searchentry_changed (GtkEditable *editable, + gpointer user_data); diff --git a/deadbeef.glade b/deadbeef.glade index 8ecb0a90..129b5609 100644 --- a/deadbeef.glade +++ b/deadbeef.glade @@ -1498,4 +1498,120 @@ Public License instead of this License. But first, please read translator-credits + + 300 + 150 + True + GDK_KEY_PRESS_MASK + Search + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + False + True + False + True + True + True + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + False + + + + + 4 + True + False + 0 + + + + True + True + True + True + 0 + + True + + True + + + + 0 + False + False + + + + + + True + False + 0 + + + + True + False + 0 + + + + 24 + True + + + 0 + False + True + + + + + + True + True + True + GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK + + + 0 + True + True + + + + + 0 + True + True + + + + + + True + GTK_UPDATE_CONTINUOUS + False + 0 0 0 0 0 0 + + + 0 + False + True + + + + + 0 + True + True + + + + + + diff --git a/gtkplaylist.c b/gtkplaylist.c index 2d19d397..2742c222 100644 --- a/gtkplaylist.c +++ b/gtkplaylist.c @@ -38,6 +38,7 @@ #include "messagepump.h" #include "messages.h" #include "streamer.h" +#include "search.h" extern GtkWidget *mainwin; static GdkPixmap *backbuf; @@ -864,7 +865,10 @@ gtkps_keypress (int keyval, int state) { GtkWidget *range = lookup_widget (mainwin, "playscroll"); int prev = playlist_row; int newscroll = scrollpos; - if ((keyval == GDK_A || keyval == GDK_a) && (state & GDK_CONTROL_MASK)) { + if ((keyval == GDK_F || keyval == GDK_f) && (state & GDK_CONTROL_MASK)) { + search_start (); + } + else if ((keyval == GDK_A || keyval == GDK_a) && (state & GDK_CONTROL_MASK)) { // select all for (playItem_t *it = playlist_head; it; it = it->next) { it->selected = 1; @@ -1139,6 +1143,7 @@ gtkps_add_fm_dropped_files (char *ptr, int length, int drop_y) { gtk_widget_set_sensitive (GTK_WIDGET (e), FALSE); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e); gtk_widget_show_all (d); + gtk_window_present (GTK_WINDOW (d)); GDK_THREADS_LEAVE(); int drop_row = drop_y / rowheight + scrollpos; @@ -1389,6 +1394,7 @@ gtkps_add_dir (char *folder) { gtk_widget_set_sensitive (GTK_WIDGET (e), FALSE); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e); gtk_widget_show_all (d); + gtk_window_present (GTK_WINDOW (d)); GDK_THREADS_LEAVE(); ps_add_dir (folder, gtkps_add_file_info_cb, e); g_free (folder); @@ -1420,6 +1426,7 @@ gtkps_add_files (GSList *lst) { gtk_widget_set_sensitive (GTK_WIDGET (e), FALSE); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e); gtk_widget_show_all (d); + gtk_window_present (GTK_WINDOW (d)); GDK_THREADS_LEAVE(); g_slist_foreach(lst, gtkps_addfile_cb, e); g_slist_free (lst); diff --git a/interface.c b/interface.c index b7021ead..c3165ffa 100644 --- a/interface.c +++ b/interface.c @@ -676,3 +676,78 @@ create_aboutdialog (void) return aboutdialog; } +GtkWidget* +create_searchwin (void) +{ + GtkWidget *searchwin; + GtkWidget *vbox4; + GtkWidget *searchentry; + GtkWidget *hbox6; + GtkWidget *vbox5; + GtkWidget *searchheader; + GtkWidget *searchlist; + GtkWidget *searchscroll; + + searchwin = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (searchwin, 300, 150); + gtk_widget_set_events (searchwin, GDK_KEY_PRESS_MASK); + gtk_window_set_title (GTK_WINDOW (searchwin), "Search"); + gtk_window_set_position (GTK_WINDOW (searchwin), GTK_WIN_POS_CENTER_ON_PARENT); + gtk_window_set_skip_taskbar_hint (GTK_WINDOW (searchwin), TRUE); + gtk_window_set_skip_pager_hint (GTK_WINDOW (searchwin), TRUE); + + vbox4 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox4); + gtk_container_add (GTK_CONTAINER (searchwin), vbox4); + gtk_container_set_border_width (GTK_CONTAINER (vbox4), 4); + + searchentry = gtk_entry_new (); + gtk_widget_show (searchentry); + gtk_box_pack_start (GTK_BOX (vbox4), searchentry, FALSE, FALSE, 0); + gtk_entry_set_invisible_char (GTK_ENTRY (searchentry), 8226); + gtk_entry_set_activates_default (GTK_ENTRY (searchentry), TRUE); + + hbox6 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox6); + gtk_box_pack_start (GTK_BOX (vbox4), hbox6, TRUE, TRUE, 0); + + vbox5 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox5); + gtk_box_pack_start (GTK_BOX (hbox6), vbox5, TRUE, TRUE, 0); + + searchheader = gtk_drawing_area_new (); + gtk_widget_show (searchheader); + gtk_box_pack_start (GTK_BOX (vbox5), searchheader, FALSE, TRUE, 0); + gtk_widget_set_size_request (searchheader, -1, 24); + + searchlist = gtk_drawing_area_new (); + gtk_widget_show (searchlist); + gtk_box_pack_start (GTK_BOX (vbox5), searchlist, TRUE, TRUE, 0); + GTK_WIDGET_SET_FLAGS (searchlist, GTK_CAN_DEFAULT); + gtk_widget_set_events (searchlist, GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); + + searchscroll = gtk_vscrollbar_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 0, 0, 0, 0))); + gtk_widget_show (searchscroll); + gtk_box_pack_start (GTK_BOX (hbox6), searchscroll, FALSE, TRUE, 0); + + g_signal_connect ((gpointer) searchwin, "key_press_event", + G_CALLBACK (on_searchwin_key_press_event), + NULL); + g_signal_connect ((gpointer) searchentry, "changed", + G_CALLBACK (on_searchentry_changed), + NULL); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (searchwin, searchwin, "searchwin"); + GLADE_HOOKUP_OBJECT (searchwin, vbox4, "vbox4"); + GLADE_HOOKUP_OBJECT (searchwin, searchentry, "searchentry"); + GLADE_HOOKUP_OBJECT (searchwin, hbox6, "hbox6"); + GLADE_HOOKUP_OBJECT (searchwin, vbox5, "vbox5"); + GLADE_HOOKUP_OBJECT (searchwin, searchheader, "searchheader"); + GLADE_HOOKUP_OBJECT (searchwin, searchlist, "searchlist"); + GLADE_HOOKUP_OBJECT (searchwin, searchscroll, "searchscroll"); + + gtk_widget_grab_default (searchlist); + return searchwin; +} + diff --git a/interface.h b/interface.h index 51c7f733..e399ef4e 100644 --- a/interface.h +++ b/interface.h @@ -4,3 +4,4 @@ GtkWidget* create_mainwin (void); GtkWidget* create_aboutdialog (void); +GtkWidget* create_searchwin (void); diff --git a/search.c b/search.c new file mode 100644 index 00000000..61248d22 --- /dev/null +++ b/search.c @@ -0,0 +1,58 @@ +/* + DeaDBeeF - ultimate music player for GNU/Linux systems with X11 + Copyright (C) 2009 Alexey Yakovenko + + 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 3 of the License, 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 this program. If not, see . +*/ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include + +#include "callbacks.h" +#include "interface.h" +#include "support.h" + +#include "search.h" + +static GtkWidget *searchwin = NULL; + +void +search_start (void) { + if (!searchwin) { + searchwin = create_searchwin (); + } + gtk_widget_show (searchwin); + gtk_window_present (GTK_WINDOW (searchwin)); +} + +gboolean +on_searchwin_key_press_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) +{ + return FALSE; +} + + +void +on_searchentry_changed (GtkEditable *editable, + gpointer user_data) +{ +} + diff --git a/search.h b/search.h new file mode 100644 index 00000000..b90e1903 --- /dev/null +++ b/search.h @@ -0,0 +1,24 @@ +/* + DeaDBeeF - ultimate music player for GNU/Linux systems with X11 + Copyright (C) 2009 Alexey Yakovenko + + 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 3 of the License, 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 this program. If not, see . +*/ +#ifndef __SEARCH_H +#define __SEARCH_H + +void +search_start (void); + +#endif // __SEARCH_H -- cgit v1.2.3